Log Pose 🧭
Extensão do VS Code de produtividade para desenvolvedores em ambiente corporativo restrito. Um painel lateral com Notas, To-dos (com timer), Snippets e Links, todos vinculados ao contexto git (repositório + branch ativos), com um botão de trava (lock) que congela o contexto exibido mesmo que você troque de branch ou repositório.
Como toda boa bússola de navegante, o Log Pose aponta sempre para a ilha onde você está — e, se você travar o ponteiro, continua apontando para ela mesmo depois de zarpar.
- Escreva uma nota na branch
feature/pix-v2: ela some ao fazer checkout para outra branch e reaparece intacta quando você volta.
- Trave o contexto antes de um checkout rápido e o painel permanece onde você estava trabalhando (o chip fica em cor de aviso).
- Três escopos por conteúdo: Branch (padrão), Repo (todas as branches) e Global (independente de git).
- Timer por tarefa com item na status bar; um timer ativo por vez, sobrevive a reload da janela.
- Subtarefas com hierarquia (até 4 níveis):
+ no hover cria subtarefa; Ctrl+→/← indenta/desindenta; Ctrl+↑/↓ reordena; arrastar move (a subárvore acompanha). Concluir a tarefa-mãe conclui as filhas; o contador n/m mostra o progresso.
- Ícones por tarefa: a ação 🏷 no hover define um ícone (bug, rocket, flame, …); depois, clicar no próprio ícone troca — tudo local, nada de rede.
- Comandos no Command Palette:
Log Pose: Nova tarefa captura uma tarefa sem abrir o painel; Log Pose: Iniciar timer (escolher tarefa) abre um quick pick das pendentes.
- Anotações por tarefa: a ação 📝 no hover abre uma área de texto inline; com anotação, o indicador fica sempre visível e o tooltip mostra o conteúdo.
- Seleção de tarefa: clique numa tarefa para marcá-la (cor padrão de seleção do tema) — ela vira o alvo dos atalhos de teclado.
- O ícone do Log Pose na Activity Bar mostra um badge com o nº de tarefas pendentes do contexto atual.
Instalação offline
A extensão é distribuída como um arquivo .vsix — nenhum acesso ao Marketplace é necessário.
Pela linha de comando:
code --install-extension log-pose-0.8.0.vsix
Pela interface:
- Abra a aba Extensões (
Ctrl+Shift+X).
- Menu
… (canto superior direito da aba) → Instalar do VSIX…
- Selecione o arquivo
log-pose-0.8.0.vsix.
Estrutura da pasta de dados
Todos os dados são texto puro (Markdown + JSON legíveis), gravados fora de qualquer repositório git, em uma pasta local do usuário — por padrão a pasta de armazenamento da extensão; opcionalmente a pasta definida em logpose.storagePath. Use o comando Log Pose: Abrir pasta de dados para localizá-la.
<pasta de dados>/
├── meta.json # índice legível de repos/branches conhecidos
├── global/ # escopo Global
│ ├── notes.md
│ ├── todos.json
│ ├── snippets.json
│ └── links.json
└── repos/
└── <repoId>/ # hash do remote normalizado (clones do mesmo remote compartilham dados)
├── repo/ # escopo Repo (todas as branches)
│ └── (mesmos 4 arquivos)
└── branches/
└── <branchSlug>/ # escopo Branch
└── (mesmos 4 arquivos)
A pasta é compreensível sem a extensão: notes.md é Markdown puro; os .json têm o formato { "version": 1, "items": [...] }; meta.json mapeia cada <repoId> e <branchSlug> de volta aos nomes originais. Toda escrita é atômica (arquivo temporário + rename); um JSON corrompido é renomeado para <nome>.corrupt-<timestamp> e nunca descartado.
Configurações
| Setting |
Default |
Descrição |
logpose.storagePath |
"" |
Pasta de dados customizada (suporta ~). Vazio = pasta padrão da extensão. |
logpose.autosaveDelayMs |
500 |
Atraso do autosave das notas. |
Atalhos — funcionam sem nenhuma configuração, pois são tratados dentro do painel (sem Alt, que a barra de menus do Windows pode capturar):
Com uma tarefa selecionada no painel (clique nela ou navegue com ↑/↓):
| Tecla |
Ação |
↑ / ↓ |
Navega entre tarefas de qualquer ponto do painel (sem seleção, começa da primeira/última) |
Ctrl+↑ / Ctrl+↓ |
Reordena entre irmãs |
Ctrl+→ |
Vira subtarefa da anterior |
Ctrl+← |
Sobe um nível |
Space |
Conclui / reabre |
Enter / F2 |
Edita o texto (campo já focado, com o texto selecionado) |
A |
Abre/fecha a anotação da tarefa (cursor já no campo) |
Delete |
Exclui (com Desfazer) |
Esc |
Desmarca a seleção (clicar em área vazia também desmarca) |
Ctrl+L |
Trava/destrava o contexto (em qualquer parte do painel) |
Fora do painel: clicar no chip do contexto trava/destrava (confirmação na status bar), e Ctrl+Alt+L faz o mesmo de qualquer lugar — este último é um keybinding do VS Code e pode ser capturado pelo sistema em alguns ambientes Windows; os atalhos do painel não dependem dele. Alt+setas também funcionam no painel como alternativa, quando o ambiente permite.
Segurança
Esta seção foi redigida para ser anexada a um pedido de aprovação junto ao time de segurança.
- Zero rede. A extensão não faz nenhuma chamada de rede, em nenhuma hipótese: sem telemetria, sem verificação de atualização, sem download de favicons, sem CDN, sem fontes externas, sem WebSocket. O código-fonte é auditável quanto a isso: não há ocorrências de
fetch, clientes http/https, net ou WebSocket. O único contato com o mundo externo é vscode.env.openExternal, disparado exclusivamente por ação explícita do usuário (clicar em um link salvo por ele mesmo), e executado pelo próprio VS Code no navegador padrão.
- Zero telemetria. Nenhum dado de uso é coletado ou transmitido, para a Anthropic, Microsoft ou qualquer terceiro.
- Escrita restrita. A extensão só grava em: (1) sua pasta de dados (
globalStorageUri ou logpose.storagePath), e (2) os mecanismos de estado do próprio VS Code (workspaceState/globalState). Nunca grava dentro de repositórios git ou em qualquer outro ponto do sistema de arquivos.
- Zero dependências de runtime. O pacote não embute nenhuma biblioteca de terceiros em execução — apenas a API do VS Code e a biblioteca padrão do Node.js. A superfície de ataque de supply chain é essencialmente nula; as dependências de desenvolvimento (compilador, empacotador) não fazem parte do artefato instalado. O único asset de terceiros é a fonte de ícones oficial
@vscode/codicons (Microsoft), copiada estaticamente para dentro do pacote.
- Webview com CSP estrita. A interface roda em uma webview com
default-src 'none'; apenas estilos e fonte locais do pacote e um único script com nonce são permitidos. Conteúdo do usuário nunca é interpolado como HTML (somente textContent), eliminando XSS por dados armazenados.
- Git somente leitura, via API oficial. A extensão lê repositório/branch ativos pela API da extensão embutida
vscode.git. Não executa git em shell, não embute libgit2 e não altera nenhum repositório.
- Dados inspecionáveis. Tudo que a extensão persiste é texto puro legível (Markdown/JSON), auditável a qualquer momento pelo usuário ou pela equipe de segurança.
Desenvolvimento
npm install
npm run watch # build contínuo (ou F5 para rodar a extensão em uma janela de dev)
npm run build # typecheck estrito + build minificado
npm test # testes unitários (node:test): slugify, repoId, recuperação de JSON corrompido
npm run package # gera o .vsix