File size: 9,364 Bytes
997009c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# 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