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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ jobs:
- run: python scripts/check_dashboard_pty.py
- run: python scripts/check_workspace_pty.py
- run: python scripts/check_claude_native_pty.py
- run: python scripts/check_claude_hidden_pty.py
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ ratatui = "0.30.2"
crossterm = "0.29"
portable-pty = "0.9.0"
vt100 = "0.16.2"
unicode-width = "0.2.2"
uuid = { version = "1", features = ["serde", "v4"] }
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ cargo run --locked -- workspace --demo --project . --state /tmp/bee-demo-state
cargo run --locked -- workspace --demo --project . --once --no-color
```

O primeiro recorte real abre o **Claude Code original** em um PTY dentro da TUI.
O primeiro recorte real abre o **Claude Code original** em segundo plano, com
conversa e permissões desenhadas pela Memory Bee. O processo ainda usa um PTY,
mas sua tela não é exibida; hooks oficiais entregam texto e ações à Bee.
Faça login pelo próprio `claude` antes; a Memory Bee não solicita nem armazena
credenciais. Use um projeto e uma pasta de estado explícitos:

Expand All @@ -81,13 +83,13 @@ cargo run --locked -- workspace --claude --project . --state /tmp/bee-claude-sta
cargo run --locked -- workspace --claude --project . --state /tmp/bee-claude-state --resume
```

`/exit` encerra o Claude; `Ctrl+G` abre ajuda da Memory Bee e `Ctrl+C` vai ao Claude.
Enter envia mensagem, `Ctrl+C` interrompe e `Ctrl+Q` sai. Quando Claude pedir
permissão, `y` permite uma vez e `n` nega; sem resposta a ponte nega.
A pasta privada guarda apenas IDs de sessão e códigos de saída, enquanto o Claude
mantém a conversa nativa. Este recorte ainda mostra a interface do Claude dentro
da moldura Bee. **É uma prova experimental, não a tela final desejada:** o Claude
deve rodar invisível e a Memory Bee deve desenhar toda a conversa e as permissões.
Memória/exportação integrada, perfis isolados e interface própria continuam
pendentes. Contrato e teclas em
mantém a conversa nativa. A interface antiga dentro da moldura continua disponível
para diagnóstico com `--claude-terminal`. A nova tela Bee é funcional, mas ainda
experimental: exportação integrada, perfis isolados, histórico completo na tela
e refinamento visual continuam pendentes. Contrato e teclas em
[workspace](docs/specs/workspace.md). O lançamento da experiência completa com
Claude e Codex segue condicionado aos aceites do [ADR 0018](docs/decisions/0018-unified-workspace.md).
O dashboard anterior permanece disponível.
Expand Down
18 changes: 9 additions & 9 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ por trás, assinaturas existentes e lançamento conjunto. Isso amplia as etapas
1. Protótipo funcional com os dois agentes simulados, menus, streaming,
permissões, erro, persistência e exportação: implementado como `workspace --demo`.
2. Prova real por agente/assinatura, incluindo dois perfis isolados: em andamento.
`workspace --claude` hospeda o binário Claude Code original em PTY e retoma
seu ID nativo; conversa, permissões e perfis reais ainda exigem ensaio humano.
`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.
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 @@ -52,14 +53,13 @@ uso da assinatura em um produto de terceiros. A prova deve preservar permissões
reais, interrupção, retomada e exportação. Se a interface estruturada Claude não
atender a esse contrato, registrar a lacuna antes do lançamento conjunto.

O mantenedor priorizou a implementação nativa **Claude primeiro**. O PTY com
sessão nativa é a primeira entrega desse caminho, disponível como modo experimental;
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 desenhar a conversa Claude **inteiramente na TUI da Memory Bee**,
com o processo invisível, eventos estruturados, permissões explícitas, histórico
e exportação revisável. A moldura PTY atual é prova técnica, não a UI aceita.
Verificar também se o transporte programático pode usar a assinatura existente
nesse produto; não presumir essa autorização nem trocar por API paga em silêncio.
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
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
visual anterior; este Markdown e o ADR 0018 prevalecem para a sequência.

Expand Down
49 changes: 41 additions & 8 deletions docs/EXECUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,13 @@ de patches e consulta ao Git ficam para a etapa 04.

## Próxima tarefa de produto

**Claude invisível na TUI Bee — próxima entrega de produto.** O mantenedor
rejeitou a exibição da tela nativa do Claude. `workspace --claude` hospeda a CLI
em PTY e retoma ID, mas é apenas prova experimental. Próximo: adaptador de eventos
estruturados com Claude em segundo plano, UI Bee de conversa/ações/permissões e
exportação revisável. Testar primeiro com CLI falsa, negando ferramentas sem
decisão explícita. Verificar a fronteira de autenticação para usar assinatura
existente no modo programático antes de habilitá-lo como produto. O modo atual
guarda apenas IDs, não memória; perfis reais e Codex integrado seguem pendentes.
**Claude invisível na TUI Bee — próximo recorte de produto.** O mantenedor
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.
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).

**Refinamento visual.** Referência HTML e [plano visual](specs/workspace-visual.md)
Expand Down Expand Up @@ -671,3 +670,37 @@ escopo da entrega atual nem a próxima tarefa aprovada.
README. Autorrevisão documental; sem revisão independente. Próximo: prova
sintética do adaptador estruturado e da UI Bee, seguida da resolução da
fronteira de assinatura e ensaio real autorizado.

## Claude interativo oculto — primeira interface Bee funcional

- `workspace --claude` mantém o Claude Code original no PTY sem desenhar sua
tela. Hooks oficiais carregados por `--settings` entregam texto, ações, status
e solicitações de permissão à Bee via socket Unix privado. Decisões exigem
`y`/`n`; falha/timeout negam. `--claude-terminal` preserva o recorte visível
anterior para diagnóstico. Nenhum token é lido pela Memory Bee.
- Evidências: CLI falsa cobriu tela original invisível, mensagens, negar/permitir,
IDs, retomada, restauração do terminal e negação quando o socket falta.
O Claude instalado 2.1.282 foi iniciado em projeto já confiado; hook de sessão
e resposta curta real apareceram na Bee, sem marca nativa visível, e a saída
concluiu com código 0. No projeto descartável não confiado, `SessionStart`
ocorreu mas um prompt nativo oculto impediu a saída normal; limite registrado.
- Autorrevisão; sem revisão independente. Teste manual de ferramentas reais,
permissão, interrupção e retomada permanece pendente (item 52). O histórico
completo ainda não é reidratado na tela e a exportação nativa não está ligada.
- Uma tentativa controlada de solicitar ação Bash real não produziu um pedido
observável na Bee dentro do prazo; nenhum arquivo temporário foi criado. Esse
ensaio é inconclusivo para o fluxo de permissão real, não um aceite.
- Próximo: cobrir estados nativos invisíveis de confiança/login com falha clara
ou ação explícita, validar ferramentas/permissões reais e ligar a sessão Claude
à exportação revisável. Não declarar o fluxo completo pronto nesta etapa.
- Retomada deste recorte em 2026-09-25: `cargo fmt --all -- --check`, `cargo
test --locked`, `cargo clippy --locked --all-targets -- -D warnings`, `cargo
build --locked` e testes PTY sintéticos da moldura nativa e da UI oculta
passaram. O teste oculto agora cobre `Ctrl+Q` com permissão pendente, que deve
negar antes de sair. A suíte Rust exigiu execução fora do sandbox para criar
um socket Unix; o mesmo valeu para o teste PTY da ponte. Links relativos e
`git diff --check` conferidos. Autorrevisão, sem revisão independente.
- Corrigida a decisão por teclado: somente `y`, `n` ou Esc resolvem uma
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.
40 changes: 36 additions & 4 deletions docs/MANUAL_TESTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -840,16 +840,16 @@ cor, tema claro/escuro, larguras 140/100/60/40 e janela estreita. A cena inicial
continua disponível. Nenhum teste, arquivo ou agente real é executado pelo HTML.
Esse roteiro não valida o renderizador Rust, ainda pendente.

## 51. Claude Code nativo dentro da Memory Bee (pendente)
## 51. Claude Code nativo na moldura de diagnóstico (pendente)

Em um projeto descartável, faça login primeiro pelo Claude Code original e
confirme que ele funciona fora da Memory Bee. Depois rode:

```sh
cargo build --locked
mkdir -p /tmp/bee-claude-project
target/debug/memory-bee workspace --claude --project /tmp/bee-claude-project --state /tmp/bee-claude-state
target/debug/memory-bee workspace --claude --project /tmp/bee-claude-project --state /tmp/bee-claude-state --resume
target/debug/memory-bee workspace --claude --claude-terminal --project /tmp/bee-claude-project --state /tmp/bee-claude-state
target/debug/memory-bee workspace --claude --claude-terminal --project /tmp/bee-claude-project --state /tmp/bee-claude-state --resume
```

Na primeira sessão, enviar tarefa simples, observar resposta e, só no projeto
Expand All @@ -862,10 +862,42 @@ ou conteúdo da conversa no repositório. Estado com outro projeto e chamada sem
TTY devem ser recusados. Anotar versão do Claude, resultado de cada ação e se
houve uso da assinatura já autenticada.

O teste automatizado sintético, sem login/modelo, é
Este modo mantém a tela nativa visível apenas para diagnóstico. O teste
automatizado sintético, sem login/modelo, é
`python3 scripts/check_claude_native_pty.py`; aprovação nele não conclui este
ensaio. Exportação da memória pelo modo nativo e perfis isolados seguem pendentes.

| Item novo | Estado | Evidência manual |
|---|---|---|
| 51: conversa, permissões, interrupção e retomada Claude reais | Pendente | — |

## 52. Claude oculto com interface da Bee (pendente)

Antes, abra `claude` no projeto escolhido para concluir login e confirmação de
confiança por ele. Depois rode em um projeto descartável já confiado:

```sh
cargo build --locked
target/debug/memory-bee workspace --claude --project /caminho/do/projeto --state /tmp/bee-claude-hidden
target/debug/memory-bee workspace --claude --project /caminho/do/projeto --state /tmp/bee-claude-hidden --resume
```

Esperado: apenas moldura e conversa da Memory Bee; logo, campo de entrada e
permissões originais do Claude não aparecem. Enviar mensagem curta e conferir
resposta, pedir leitura, edição e execução no projeto descartável. Para cada
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.
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.
`--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 | — |
21 changes: 21 additions & 0 deletions docs/decisions/0018-unified-workspace.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,24 @@ de produto pretendido. Não prometer essa combinação como suportada nem coleta
tokens. Confirmar a fronteira antes de lançar a TUI própria com assinatura; se
não for permitida, apresentar a limitação ao mantenedor sem substituir
silenciosamente a assinatura por cobrança de API.

## Resolução de transporte — Claude interativo oculto com hooks

O primeiro recorte da interface Bee foi implementado mantendo **o binário
interativo original**, autenticado pelo próprio usuário. O Claude recebe um PTY
oculto para manter a sessão e o fluxo nativo; a Bee não desenha os bytes dessa
tela. Hooks de sessão, texto, ferramentas e permissões entregam eventos por
socket Unix privado à TUI. `PermissionRequest` aguarda decisão `y`/`n`; erro,
timeout ou segunda solicitação simultânea recebem `deny`. `Ctrl+C` é enviado ao
processo original. O modo anterior com terminal visível fica em
`--claude-terminal` apenas para diagnóstico.

Esta escolha evita `-p`/Agent SDK e mantém a condição de hospedar o CLI original
com login feito nele. A [referência de hooks](https://code.claude.com/docs/en/hooks)
documenta `MessageDisplay` e `PermissionRequest` também na sessão interativa.
Um ensaio real de mensagem curta confirmou texto na Bee sem exibir a tela nativa;
aprovação/negação e retomada passaram com CLI falsa. Não inferir dessa prova que
todos os prompts nativos, ferramentas, contas e exportação estejam cobertos.
Prompts de login ou confiança que não emitam hook podem ficar invisíveis; o
usuário deve completar essa preparação no Claude original. Até existir tratamento
fiel desses casos e ensaio real de permissões, o modo continua experimental.
Loading
Loading