Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ por trás, assinaturas existentes e lançamento conjunto. Isso amplia as etapas
2. Prova real por agente/assinatura, incluindo dois perfis isolados: em andamento.
`workspace --claude` hospeda o binário Claude Code original em PTY oculto,
usa hooks para conversa e permissões na Bee e retoma o ID nativo. Mensagem real
curta comprovada; ferramentas/perfis reais ainda exigem ensaio humano.
curta comprovada; prompts nativos sem hook são sinalizados e concluídos por
`Ctrl+O` (#29); ferramentas/perfis reais ainda exigem ensaio humano.
3. Experiência integrada aos dois harnesses, histórico e exportação: pendente.
4. Troca real entre agentes/contas com revisão e preservação da origem: pendente.
5. Lançamento conjunto após todos os aceites, sem substituir o requisito por
Expand All @@ -56,8 +57,8 @@ atender a esse contrato, registrar a lacuna antes do lançamento conjunto.
O mantenedor priorizou a implementação nativa **Claude primeiro**. O PTY oculto
com hooks e UI Bee é a primeira entrega desse caminho, em modo experimental;
não altera o aceite do lançamento conjunto da experiência completa. O próximo
recorte deve completar histórico/exportação revisável, cobrir prompts nativos que
não emitem hooks e ensaiar ferramentas/permissões reais. A moldura PTY anterior
recorte deve completar histórico/exportação revisável e ensaiar
ferramentas/permissões reais; prompts nativos sem hook já são sinalizados (#29). A moldura PTY anterior
virou diagnóstico opcional. O transporte atual continua com o binário interativo
original e login próprio; não usa `-p` nem API separada.
O HTML ainda representa o plano
Expand Down
76 changes: 73 additions & 3 deletions docs/EXECUTION.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Estado de execução

Última atualização: 2026-09-25. Este arquivo é o ponto de retomada entre agentes. Não substitui a inspeção do Git nem os critérios do [roadmap](../ROADMAP.md).
Última atualização: 2026-09-28. Este arquivo é o ponto de retomada entre agentes. Não substitui a inspeção do Git nem os critérios do [roadmap](../ROADMAP.md).

## Situação atual

Expand Down Expand Up @@ -74,8 +74,12 @@ de patches e consulta ao Git ficam para a etapa 04.
rejeitou a exibição da tela nativa do Claude. `workspace --claude` agora hospeda
a CLI interativa em PTY oculto e usa hooks para mostrar texto, ações e permissões
na Bee. Uma resposta real curta foi recebida na UI; negação/aprovação e retomada
foram testadas com CLI falsa. Próximo: ensaio humano de ferramentas/permissões
reais, tratamento de prompts nativos sem hook e histórico/exportação revisável.
foram testadas com CLI falsa. Prompts nativos sem hook agora são detectados e
concluídos por `Ctrl+O` ([#29](https://github.com/lippdev/memory-bee/issues/29)),
e a Bee distingue ações aprovadas por ela das liberadas pelo próprio Claude.
Próximo: ensaio humano de ferramentas/permissões reais
([#30](https://github.com/lippdev/memory-bee/issues/30)) e histórico/exportação
revisável ([#31](https://github.com/lippdev/memory-bee/issues/31)).
O modo ainda guarda só IDs; perfis reais e Codex integrado seguem pendentes.
O lançamento da experiência completa ainda exige os dois agentes (ADR 0018).

Expand Down Expand Up @@ -746,3 +750,69 @@ escopo da entrega atual nem a próxima tarefa aprovada.
permissão; `Ctrl+C` e `Ctrl+Q` negam antes de interromper/sair. O roteiro 51
identifica `--claude-terminal` como diagnóstico. Ainda não há prova de
ferramentas e permissões reais além da resposta curta já observada.

## Claude oculto — prompts nativos sem hook (#29)

- Data: 2026-09-28. Branch `claude/quirky-lovelace-pybgg3`, conforme a sessão
(não `codex/<assunto>`, porque a sessão fixou esse nome).
- `workspace --claude` passa a alimentar um modelo de tela privado (`vt100`)
com a saída do PTY, respondendo consultas de cursor/estado. Sem `SessionStart`
em 5 s, a Bee mostra que o Claude aguarda uma ação nativa e nomeia o tipo
(confiança, login, configuração inicial ou tela sem evento) sem copiar o texto
da tela. `Ctrl+O` abre explicitamente o Claude original para concluir; pedidos
de permissão sempre voltam ao painel Bee. Turnos sem hooks por 20 s geram um
aviso único.
- `Ctrl+Q` deixou de digitar `/exit` + Enter em qualquer estado (um Enter
poderia confirmar um diálogo nativo, como a confiança do projeto): antes do
`SessionStart` encerra o processo; em turno ativo envia `Ctrl+C` e digita
`/exit` só após `Stop`; no prompt ocioso mantém `/exit`; fallback de 5 s.
- Evidências automatizadas: testes unitários da heurística (inclui não copiar
texto com credencial falsa) e da máquina de estados; `scripts/check_claude_hidden_pty.py`
ganhou CLI falsa com diálogo de confiança sem hook: bloqueio visível sem vazar
a tela, `Ctrl+O` → resposta `1` → `SessionStart` → retorno à Bee → `/exit`; e
`Ctrl+Q` bloqueado sem nada digitado no diálogo, saída 4 e terminal restaurado.
`cargo fmt --check`, `clippy -D warnings`, `cargo test --locked`, os quatro
scripts PTY e `check_bundle.py` passaram localmente (Linux).
- Caminho real observado pelo agente: Claude Code 2.1.283 sem login, projeto
descartável em pasta temporária. A Bee sinalizou "configuração inicial" sem
mostrar o texto nativo; `Ctrl+O` exibiu a tela de boas-vindas; `Ctrl+Q` saiu
em 0,27 s com terminal restaurado e trava removida. Não havia conta autenticada,
então o diálogo de confiança real e o login completo não foram ensaiados;
item 52 do roteiro segue pendente para o mantenedor.
- Limitações: a detecção é heurística (tempo + palavras-chave em inglês); um
diálogo nativo no meio do turno só gera aviso, não bloqueio. Autorrevisão;
sem revisão independente.
- Próximo: [#30](https://github.com/lippdev/memory-bee/issues/30) (ferramentas e
permissões reais) e [#31](https://github.com/lippdev/memory-bee/issues/31)
(histórico e exportação da sessão Claude).

## Claude oculto — origem das ações e expiração (#30, parcial)

- Data: 2026-09-28, mesmo branch e PR #51. Parte de código da issue #30.
- Não houve ensaio real de ferramentas: o Claude Code deste ambiente não está
autenticado e a Memory Bee não usa credenciais que não sejam do login próprio
do CLI. O ensaio real (leitura, edição, Bash, permitir/negar, interrupção e
retomada) continua no item 52 do roteiro, para o mantenedor.
- Lacunas corrigidas: (1) o resultado de cada ferramenta diz se foi aprovado na
Bee ou liberado pelas regras/modo do próprio Claude, sem afirmar aprovação que
o CLI não pediu; associação por `tool_use_id` ou nome+entrada, com número de
sequência estável. (2) Um pedido sem resposta ficava aberto após o hook negar
em 90 s, e um `y` tardio mostrava "concedida"; agora o painel fecha em 85 s
com registro de negação, e resposta não entregue é informada como não
aprovada. Pedido concorrente é negado com registro.
- Evidências: testes unitários de origem, pedido antigo concluindo durante a
revisão, expiração, pedido concorrente e aprovação tardia; teste PTY com CLI
falsa emitindo leitura sem pedido e Bash com pedido. Checks canônicos, quatro
scripts PTY e `check_bundle.py` passaram localmente (Linux). Autorrevisão.
- Limitação: segundo a referência oficial de hooks, `PermissionRequest` não traz
`tool_use_id`; a associação usa nome e entrada exatos. Após revisão do
Pullfrog no PR #51, chamadas idênticas paralelas sem decisão recebem "origem
incerta" em vez de uma aprovação possivelmente trocada.
- CI macOS do PR #51 expôs duas falhas, corrigidas: o script PTY parava de ler
a saída ao aguardar a saída da Bee (buffer pequeno do macOS bloqueava o
redesenho final); e hooks sem permissão não esperavam confirmação, então
eventos emitidos logo antes de o Claude sair podiam se perder. Agora o hook
aguarda até 5 s a confirmação de enfileiramento e a Bee drena os eventos e
redesenha antes de encerrar.
- Próximo: ensaio humano do item 52 para fechar #29/#30 e, em código, #31
(histórico e exportação da sessão Claude).
20 changes: 18 additions & 2 deletions docs/MANUAL_TESTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -889,18 +889,34 @@ solicitação, verificar que `n` nega e `y` permite somente a ação exibida.
Testar `Ctrl+C`, colagem, resize, `Ctrl+Q`, retomada e restauração do terminal.
Com permissão pendente, conferir que outra tecla não decide e que `Ctrl+C` ou
`Ctrl+Q` negam antes de interromper ou sair.
Para cada ação, conferir a origem mostrada no resultado: ações que o Claude já
permite (por exemplo, leitura) devem aparecer "sem pedido de permissão"; somente
ações aprovadas com `y` aparecem como "aprovada por você na Bee". Deixar um
pedido sem resposta por 85 s e conferir "Pedido expirou sem resposta e foi
negado" e que a ação não ocorreu.
Confirmar que a sessão continua acessível no Claude original. Registrar versão
e resultados, sem copiar dados reais da conversa para o repositório.

Prompts de login/confiança não cobertos por hook podem ficar invisíveis; se a
tela não avançar, sair com `Ctrl+Q` e preparar o projeto diretamente no Claude.
Prompts nativos sem hook: em um projeto descartável **não confiado** (e, se
possível, num perfil ainda sem login), rodar o comando acima sem preparar o
projeto antes. Esperado: em cerca de 5 s a Bee informa "Claude aguarda
confiança do projeto" (ou login/configuração inicial) sem mostrar o texto nativo;
`Ctrl+O` abre o Claude original com moldura Bee; concluir a confiança/login ali;
a Bee registra "Preparação nativa concluída"; `Ctrl+O` volta à conversa Bee.
Repetir em outro projeto não confiado e pressionar `Ctrl+Q` enquanto bloqueado:
a Bee deve sair em até 1 s, o projeto continuar não confiado no Claude original
e o terminal ser restaurado. Durante um turno longo, conferir o aviso de 20 s e
que `Ctrl+Q` interrompe antes de sair. Nenhuma credencial deve aparecer fora da
tela nativa aberta por `Ctrl+O`.
`--claude-terminal` mostra o modo antigo apenas para diagnóstico. O teste
sintético é `python3 scripts/check_claude_hidden_pty.py`; não substitui este
ensaio humano. Exportação integrada e perfis reais ainda pendentes.

| Item novo | Estado | Evidência manual |
|---|---|---|
| 52: UI Bee sobre Claude real oculto, ferramentas, permissões e retomada | Pendente | — |
| 52: origem das ações (regra do Claude × aprovação Bee) e expiração negada | Pendente | — |
| 52: prompts nativos sem hook — confiança/login via `Ctrl+O` e `Ctrl+Q` seguro | Pendente | Agente observou só a configuração inicial de um Claude sem login (2026-09-28); não é ensaio humano |

## 53. Revisão do Pullfrog em PR (pendente)

Expand Down
43 changes: 37 additions & 6 deletions docs/specs/workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,39 @@ a TUI nativa visível para diagnóstico. Se houver permissão pendente, `Ctrl+C`
`Ctrl+Q` negam antes de interromper ou sair; outras teclas além de `y`, `n` e
Esc não decidem a permissão.
O painel mostra o `tool_input` completo; quando não cabe para revisão, `y` também
nega. `Ctrl+Q` aguarda até cinco segundos por `/exit` e encerra o processo se
o CLI nativo estiver preso em um prompt invisível.
nega.

Cada ação aparece com um resumo (`Ação: Bash · <comando>`). O resultado informa a
origem: "aprovada por você na Bee, uma vez" somente quando houve
`PermissionRequest` e o hook recebeu `allow`; ações sem pedido aparecem como
"sem pedido de permissão; liberada pelas regras ou modo do próprio Claude". A
associação usa `tool_use_id` quando existe; o `PermissionRequest` oficial não o
traz, então vale nome e entrada da ferramenta. Se o pedido corresponder a mais de
uma chamada idêntica ainda sem decisão, os resultados dessas chamadas aparecem
com "origem incerta", sem atribuir a aprovação a nenhuma delas; o mesmo vale
quando o pedido chega antes do `PreToolUse` correspondente. Os registros de
ferramentas são descartados ao fim de cada turno. O
painel fecha em 85 s, antes do limite de 90 s do hook, e registra que o pedido
expirou negado; um segundo pedido enquanto outro aguarda é negado e registrado.
Se a resposta não chegar ao hook, a Bee informa que nada foi aprovado.

Telas nativas sem hook (login, confiança do projeto, configuração inicial ou
outro diálogo) são detectadas pela ausência de progresso: sem `SessionStart` em
5 s, a Bee informa que o Claude aguarda uma ação no terminal original e nomeia o
tipo provável (confiança, login, configuração inicial ou tela sem evento) por
palavras-chave da tela privada, sem copiar o texto nativo para a conversa. Com a
sessão pronta, um turno sem hooks por 20 s gera um aviso único (pode estar
pensando ou numa tela nativa). A saída do PTY alimenta um modelo de tela privado
que responde consultas de terminal e só é desenhado quando o usuário pressiona
`Ctrl+O`, ação explícita para concluir a preparação ou diagnosticar; nesse modo
as teclas vão ao Claude, `Ctrl+O` volta à Bee e pedidos de permissão sempre
retornam ao painel Bee. A Memory Bee não registra a tela nativa.

`Ctrl+Q` nunca digita em um diálogo nativo: antes do `SessionStart`, encerra o
processo imediatamente; com turno em andamento ou tela original aberta, envia
`Ctrl+C` e digita `/exit` só depois do `Stop` do turno (sem turno, aguarda o
encerramento); no prompt ocioso da Bee, digita `/exit`.
Em todos os casos, se o CLI não sair em cinco segundos, o processo é encerrado.

`claude-native.json` guarda projeto canônico, IDs e códigos de saída (até 128
sessões, 64 KiB), sem transcrição. A pasta é 0700 e arquivos são 0600 em Unix;
Expand All @@ -50,10 +81,10 @@ conversa/permissões reais por si só; ver [roteiro manual](../MANUAL_TESTS.md).
**Direção atual:** o mantenedor não quer ver a TUI original do Claude. O modo
padrão `--claude` já oculta essa tela e mostra componentes da Memory Bee. O
terminal embutido anterior requer `--claude-terminal`. A UI Bee ainda é um
recorte funcional sem histórico/exportação nativos integrados; prompts de login,
confiança do projeto ou outros controles do Claude que não emitam hooks podem
ficar ocultos e bloquear a sessão. Preparar o projeto no Claude original antes
de usar a Bee e conferir o [roteiro manual](../MANUAL_TESTS.md). O [ADR 0018](../decisions/0018-unified-workspace.md)
recorte funcional sem histórico/exportação nativos integrados. Prompts nativos
sem hook agora são sinalizados e podem ser concluídos com `Ctrl+O`; a detecção é
heurística (tempo e palavras-chave) e o diálogo de confiança real ainda não foi
ensaiado com conta autenticada. Conferir o [roteiro manual](../MANUAL_TESTS.md). O [ADR 0018](../decisions/0018-unified-workspace.md)
registra por que o transporte mantém o binário interativo sem usar `-p`.

```sh
Expand Down
Loading
Loading