A professional workspace for AI coding agents with: - Real-time streaming chat with SSE - Session management (fork, clone, tree navigation) - MCP tools browser & metadata panel - Skills browser (global, project, package sources) - Voice input & STT provider configuration - Integrated terminal & file explorer - Model selector with capability metadata - Keyboard-first UI with command palette - 8 languages (en, pt-BR, es, ja, zh-CN, ar, bn, hi) - Tauri 2 desktop app - React 19 + TypeScript + Vite 8 + Tailwind CSS 4 - Pi Agent extension runtime Originally forked from OpenCodeUI, now an independent project. License: GPL-3.0-only
4.9 KiB
Especificação Técnica: Migração do PiAgentUi para Extensão do Pi Agent
Esta especificação define o desenho arquitetônico, a segurança, as estruturas de dados e a integração desktop necessários para migrar o frontend PiAgentUi (originalmente construído para o OpenCode) para o ecossistema do Pi Agent.
1. Arquitetura e Fluxo de Dados
A arquitetura do PiAgentUi será descentralizada do OpenCode e integrada diretamente ao processo do Pi Agent através do modelo de extensões.
- Loopback Server (Porta Dinâmica): A extensão
piagentui-server.tsse conectará ao ciclo de vida do Pi e abrirá um servidor local seguro escutando em127.0.0.1em uma porta livre selecionada pelo sistema operacional. - Same-Origin Boot Data: A extensão servirá o HTML principal e injetará no próprio corpo do
index.htmlum bloco JSON contendo as informações de boot (URL base, porta, e o token bearer gerado na inicialização). - Ponte de Comunicação: Toda chamada HTTP e WebSocket será autenticada usando o token em memória.
┌─────────────────┐ ┌────────────────────────┐ ┌────────────────┐
│ Tauri (Rust) │ ───> │ Pi Agent (Processo) │ <───> │ Webview (UI) │
│ Port Check & │ │ - piagentui-server │ │ - React 19 │
│ Launch State │ │ - HTTP + WS Server │ │ - Local Token │
└─────────────────┘ └────────────────────────┘ └────────────────┘
2. Matriz de Endpoints e Recursos
Para o MVP, a API do PiAgentUi responderá nos mesmos paths esperados pelo frontend, mapeando-os para chamadas da extensão e mockando recursos incompatíveis.
| Recurso / Funcionalidade | Endpoint Frontend | Ação no Backend (Pi Agent Extension) | Status no MVP |
|---|---|---|---|
| Health Check | /global/health |
Retorna status da extensão do Pi | Suportado |
| Event Stream | /global/event |
SSE/WebSocket que espelha os eventos do Pi | Suportado |
| Modelos Ativos | /api/models |
Consulta o registro de modelos configurado no Pi | Suportado |
| Multi-Sessão (CRUD) | /api/sessions |
Gerencia sessões locais da pasta de sessões do Pi | Suportado |
| Enviar Mensagem | /api/messages/send |
Dispara pi.sendUserMessage(...) assincronamente |
Suportado |
| Parar Mensagem | /api/messages/abort |
Aborta o turno ativo do Pi Agent se disponível | Suportado |
| PTY Terminal | /api/pty |
Retorna erro 501 / Desativado visualmente | Stubbed |
| MCP / LSP | /api/mcp / /api/lsp |
Retorna lista vazia ou erro 501 | Stubbed |
| Worktrees / VCS | /api/worktrees |
Retorna erro 501 / Desativado visualmente | Stubbed |
3. Segurança e Tokens
- Porta Dinâmica: Impedir conflitos de porta iniciando sempre em portas dinâmicas alocadas pelo SO (
port: 0). - Bearer Token: Gerar um UUID/token seguro de uso único na inicialização do servidor.
- Sem Persistência de Senhas: Nenhuma credencial do usuário será armazenada fisicamente ou em
localStorage. O token de autorização residirá unicamente na memória da sessão React. - Validação de Host/Origin: Rejeitar qualquer requisição com cabeçalho
HostouOriginque não seja estritamente local (127.0.0.1oulocalhost). - Prevenção de Traversal: Servir arquivos estáticos validando canonicalização de caminhos para evitar vulnerabilidade de directory traversal no Windows.
4. Integração Tauri Desktop (Track B)
Com a decisão de incluir o Tauri já no primeiro marco, o app desktop sofrerá as seguintes modificações:
- Renomeação de Comandos: Todos os comandos Tauri registrados no Rust e no frontend serão renomeados de
*opencode*para correspondentes de*pi*ou*pi_agent*. - Subprocesso do Pi: Em vez de iniciar
opencode serve, o Tauri iniciará o processo do Pi (ex:pi --mode rpc) adicionando dinamicamente o parâmetro--extensionapontando para o nosso servidor local se necessário, ou confiando no auto-load das extensões instaladas. - Filtro de URL Restrito: O Rust bridge do Tauri terá uma validação explícita em tempo de execução para rejeitar qualquer tráfego que tente se conectar a servidores externos, limitando a ponte estritamente a adaptadores de loopback permitidos.
5. Referências do Projeto
Esta migração baseia-se diretamente no comportamento implementado em:
D:/Documents/Github/PiAgentUI/better-tau/extensions/mirror-server.ts
utilizando o modelo de ciclo de vida e roteamento nativo lá desenvolvidos como garantia de estabilidade sob o runtime do Pi.