agent-os-training-guide / docs /STRUCTURE.md
devsomosahub's picture
Upload docs/STRUCTURE.md with huggingface_hub
997009c verified
# 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