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

-- 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