| # Agent OS - Estruturacao Base do Sistema |
|
|
| ## 1. Banco de Dados Local (SQLite) |
|
|
| SQLite local no server - sem dependencia externa, rapido, suficiente pra tudo. |
|
|
| ### Schema |
|
|
| ```sql |
| -- Provedores de IA (autenticacao) |
| CREATE TABLE providers ( |
| id TEXT PRIMARY KEY, -- 'anthropic', 'google', 'openai', 'huggingface', 'local' |
| name TEXT NOT NULL, -- 'Anthropic', 'Google AI', 'OpenAI', 'HuggingFace', 'Local' |
| auth_type TEXT NOT NULL, -- 'api_key', 'oauth', 'cli_login', 'none' |
| auth_value TEXT, -- API key encriptada ou token OAuth |
| auth_status TEXT DEFAULT 'pending', -- 'authenticated', 'pending', 'expired', 'error' |
| base_url TEXT, -- URL base da API (null = default) |
| config JSON, -- Config extra (headers, gateway, etc) |
| updated_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| |
| -- Modelos disponiveis |
| CREATE TABLE models ( |
| id TEXT PRIMARY KEY, -- 'claude-opus-4-6', 'llama-3.3-70b', 'agent-os-1.5b' |
| provider_id TEXT REFERENCES providers(id), |
| name TEXT NOT NULL, -- 'Claude Opus 4.6' |
| model_id TEXT NOT NULL, -- ID real da API: 'claude-opus-4-6', 'llama-3.3-70b-versatile' |
| type TEXT DEFAULT 'cloud', -- 'cloud', 'local', 'inference_endpoint' |
| endpoint TEXT, -- URL do endpoint (local llama-server, HF endpoint, etc) |
| capabilities JSON, -- ["code", "text", "sql", "vision"] |
| config JSON, -- temperature, max_tokens, etc |
| active BOOLEAN DEFAULT 1 |
| ); |
| |
| -- Agentes (slots plugaveis) |
| CREATE TABLE agents ( |
| id TEXT PRIMARY KEY, -- 'coder', 'sql', 'gestor', 'frontend' |
| name TEXT NOT NULL, -- 'Coding Agent' |
| description TEXT, |
| model_id TEXT REFERENCES models(id), |
| agent_type TEXT DEFAULT 'smol', -- 'smol', 'claude_cli', 'gemini_cli', 'acpx', 'api' |
| acpx_command TEXT, -- Comando ACPX: 'npx -y @zed-industries/claude-agent-acp' |
| system_prompt TEXT, -- System prompt do agente |
| capabilities JSON, -- ["code", "analysis", "planning"] |
| config JSON, -- Config extra (permissions, timeout, etc) |
| icon TEXT DEFAULT 'bot', |
| active BOOLEAN DEFAULT 1, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| |
| -- Apps do desktop |
| CREATE TABLE apps ( |
| id TEXT PRIMARY KEY, -- 'browser', 'terminal', 'smolchat' |
| name TEXT NOT NULL, |
| description TEXT, |
| icon TEXT, |
| agent_id TEXT REFERENCES agents(id), -- Agente vinculado (null = sem agente) |
| config JSON, -- defaultSize, minSize, allowMultiple, etc |
| dock_pinned BOOLEAN DEFAULT 0, |
| active BOOLEAN DEFAULT 1 |
| ); |
| |
| -- Historico de conversas |
| CREATE TABLE conversations ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| agent_id TEXT REFERENCES agents(id), |
| session_id TEXT, -- ACPX session ID ou custom |
| title TEXT, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP, |
| updated_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| |
| -- Mensagens de cada conversa |
| CREATE TABLE messages ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| conversation_id INTEGER REFERENCES conversations(id), |
| role TEXT NOT NULL, -- 'user', 'assistant', 'system', 'tool' |
| content TEXT NOT NULL, |
| agent_id TEXT, -- Qual agente respondeu |
| model_id TEXT, -- Qual modelo foi usado |
| routing JSON, -- Info de routing do gestor |
| tokens_input INTEGER, |
| tokens_output INTEGER, |
| duration_ms INTEGER, |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| |
| -- Arquivos criados pelos agentes |
| CREATE TABLE agent_files ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| conversation_id INTEGER REFERENCES conversations(id), |
| message_id INTEGER REFERENCES messages(id), |
| file_path TEXT NOT NULL, |
| action TEXT, -- 'created', 'modified', 'deleted' |
| created_at DATETIME DEFAULT CURRENT_TIMESTAMP |
| ); |
| ``` |
|
|
| ## 2. App Registry vs Agent Registry |
|
|
| **Juntos, mas com vinculo opcional.** |
|
|
| Um App pode existir sem agente (Browser puro) e um agente pode existir sem app (agente de background). Mas qualquer app pode ter um agente vinculado. |
|
|
| ``` |
| Apps Agents |
| +--------+ +---------+ |
| |Browser |----(vinculo)------>|Web Agent| (agente que navega) |
| |Terminal|----(vinculo)------>|Claude | (claude cli via ACPX) |
| |SmolChat|----(vinculo)------>|Gestor | (orquestrador) |
| |Finder | |SQL Agent| (sem app, so API) |
| |PM2 | |Frontend | (sem app ainda) |
| +--------+ +---------+ |
| ``` |
|
|
| ### UI do Agent Registry |
|
|
| Cada app no dock tem um **badge de modelo** (ex: "Qwen 72B", "Opus 4.6"). Ao clicar no badge: |
| - Dropdown com modelos disponiveis |
| - Trocar modelo em tempo real |
| - Ver status do agente (online/offline) |
| - Ver historico de conversas |
|
|
| ### Arvore de Agentes (Fleet Monitor) |
|
|
| ``` |
| Gestor (Llama 3.3 70B) [HF Free] |
| |-- Coder (Claude Opus 4.6) [Anthropic API] |
| |-- SQL (agent-os-1.5b) [Local CPU] |
| |-- Frontend (a definir) |
| |-- Texto (a definir) |
| | |
| Custom Agents: |
| |-- Meu Agent (Qwen 14B) [Local] |
| |-- Reviewer (GPT-4o) [OpenAI] |
| ``` |
|
|
| ## 3. Tipos de Agentes |
|
|
| ### SmolAgent (mais controle) |
| - Roda via orquestrador local |
| - System prompt customizavel |
| - Ferramentas configuraveis |
| - Modelo trocavel via dropdown |
| - Historico salvo no SQLite |
|
|
| ### Claude CLI Agent (via ACPX) |
| - Usa `acpx claude exec` ou `acpx claude -s session` |
| - Auth: OAuth via `claude login` ou API key via env `ANTHROPIC_AUTH_TOKEN` |
| - Full access ao filesystem e terminal |
| - Sessoes persistentes opcionais |
|
|
| ### Gemini CLI Agent (via ACPX) |
| - Usa `acpx gemini exec` |
| - Auth: OAuth via `gemini auth` ou API key |
| - Comando ACPX: `gemini --acp` |
|
|
| ### Custom API Agent |
| - Qualquer modelo via API REST |
| - Config: endpoint + api_key + model_id |
| - Ex: OpenRouter, Together, Groq, local llama-server |
|
|
| ## 4. Autenticacao e ACPX |
|
|
| ### Como funciona no ACPX |
|
|
| O ACPX suporta 3 metodos de auth: |
|
|
| 1. **Terminal Auth (CLI Login)** |
| - Claude: `claude login` (abre browser, OAuth) |
| - Gemini: `gemini auth login` |
| - Salva token em `~/.claude.json` ou `~/.gemini/` |
| - ACPX detecta automaticamente |
|
|
| 2. **Gateway Auth (API Key)** |
| - Passa API key como gateway headers |
| - Env vars: `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_BASE_URL` |
| - Funciona sem login OAuth |
|
|
| 3. **Skip Auth** |
| - Config ACPX: `"authPolicy": "skip"` |
| - Usa credenciais ja salvas no sistema |
|
|
| ### Pagina de Settings - Provedores |
|
|
| ``` |
| +------------------------------------------+ |
| | Settings > Provedores de IA | |
| +------------------------------------------+ |
| | | |
| | Anthropic (Claude) | |
| | [x] Autenticado via OAuth | |
| | [ ] Usar API Key: [_______________] | |
| | Status: Online | |
| | | |
| | Google (Gemini) | |
| | [ ] Nao autenticado | |
| | [Autenticar via OAuth] [Usar API Key] | |
| | | |
| | HuggingFace | |
| | [x] Token: hf_VDz...MV (Pro) | |
| | Modelos: Llama 3.3 70B, Llama 4 Scout | |
| | | |
| | OpenAI | |
| | [ ] Nao configurado | |
| | [ ] API Key: [_______________] | |
| | | |
| | Local (llama-server) | |
| | [x] Online em localhost:8080 | |
| | Modelo: agent-os-1.5b (Q8) | |
| | | |
| | OpenRouter | |
| | [ ] API Key: [_______________] | |
| | | |
| +------------------------------------------+ |
| ``` |
|
|
| ### Fluxo de Auth pro ACPX |
|
|
| Quando o usuario seleciona um agente que precisa de auth: |
|
|
| 1. **Check**: Provider ta autenticado? (query `providers` table) |
| 2. **Se sim**: Usa credenciais salvas |
| 3. **Se nao**: |
| - **API Key**: Mostra campo pra colar a key, salva no SQLite |
| - **OAuth (Claude/Gemini)**: Abre terminal com `claude login` ou `gemini auth`, detecta quando completou |
| - **Local**: Verifica se llama-server esta rodando |
|
|
| ### Env vars que o ACPX/adapters usam |
|
|
| | Provider | Auth Method | Env Var | |
| |----------|------------|---------| |
| | Anthropic | API Key | `ANTHROPIC_AUTH_TOKEN` | |
| | Anthropic | OAuth | `~/.claude.json` (auto) | |
| | Google | API Key | `GEMINI_API_KEY` | |
| | Google | OAuth | `~/.gemini/` (auto) | |
| | OpenAI | API Key | `OPENAI_API_KEY` | |
| | HuggingFace | Token | `HF_TOKEN` | |
| | Local | None | Endpoint URL | |
|
|
| ## 5. Implementacao - Ordem |
|
|
| ### Fase 1: Database + APIs (agora) |
| 1. Criar SQLite com schema acima |
| 2. API REST: `/api/db/providers`, `/api/db/agents`, `/api/db/models`, `/api/db/conversations` |
| 3. Migrar agent registry hardcoded pra database |
| 4. Migrar historico de conversas pra database |
|
|
| ### Fase 2: Settings UI |
| 1. Pagina de provedores (auth) |
| 2. Pagina de agentes (CRUD) |
| 3. Pagina de modelos (listar, ativar/desativar) |
| 4. Vincular agente a app |
|
|
| ### Fase 3: Agent Tree + Model Selector |
| 1. Fleet Monitor com arvore de agentes |
| 2. Badge de modelo em cada app |
| 3. Dropdown pra trocar modelo |
| 4. Status online/offline em tempo real |
|
|
| ### Fase 4: Novos tipos de agente |
| 1. Gemini CLI via ACPX |
| 2. Custom API agents |
| 3. Import/export de agentes |
|
|