10 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags, dod_evidence_schema
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | dod_evidence_schema | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0131 | agents v0.2: control per-agent unified mode + uptime/msg_24h + data_table_cpp_viz + clear/cache actions | pendiente | feature |
|
app | alta |
|
2026-05-22 | 2026-05-22 |
|
|
0131 — agents v0.2: full per-agent control + data_table + nuevos botones
Contexto
v0.1 (issues 0128+0129) entrego:
- HTTP API + apikey + TLS + SSE
- C++ frontend con Connection/Agents/Logs/Status feed
- Tabla agents con
runningderivado de backend
Gaps detectados durante uso real:
- Control individual roto en unified mode — Manager.Start/Stop esperan PID files por agente; en unified mode no existen → endpoints devuelven errores confusos ("not running" sobre agente que SI corre).
- No hay uptime ni msg_24h reales — backend no expone esos campos. UI muestra
instancescomo hack para msg_24h. - Faltan acciones de gestion — clear memory (mensajes en SQLite), delete cache (crypto E2EE), reset state.
- Tabla manual —
ImGui::BeginTableinline en main.cpp. El registry tienedata_table_cpp_viz(funcion canonica). Migrar.
Scope v0.2
Backend (projects/element_agents/apps/agents_and_robots/)
1. Control per-agent en unified mode
Hoy launcher arranca todos los agents como goroutines bajo 1 PID via mode "unified". Manager.Start/Stop/Restart actuales solo funcionan en mode multi-process (PID por agente).
Anadir registro de cancel-context por agente en el launcher:
- Por cada agente que arranca como goroutine, guardar
context.CancelFuncenManager.unifiedCancels map[string]context.CancelFunc. Manager.StopUnifiedAgent(id)llama cancel del agente especifico.Manager.StartUnifiedAgent(id)re-arranca solo ese agente sin restart del launcher entero.Manager.RestartUnifiedAgent(id)= Stop + Start.
Handlers handleStart/Stop/Restart autodetectan via IsUnifiedRunning() y delegan a las nuevas variantes unified.
2. Uptime real
Manager.startedAt map[string]time.Timepoblado al arrancar cada goroutine.- En
AgentStatus.UptimeSeconds, calculartime.Since(startedAt[id]).Seconds()si running, else 0. - Exponer en
agentResponsecomouptime_seconds: int.
3. Messages_24h
Cada agent persiste mensajes en su SQLite (agents/<id>/data/memory.db). El handler handleListAgents debe agregar por agente:
- Abrir DB del agente readonly
SELECT COUNT(*) FROM messages WHERE created_at > datetime('now', '-24 hours')- Cache 30s para no abrir DB en cada request
Exponer como messages_24h: int.
4. Endpoint POST /agents/{id}/clear_memory
- Stop agent (si running)
- Open agent's memory.db
DELETE FROM messages+DELETE FROM facts- Optionally start back si estaba running (deber
?restart=trueopcional) - Return
{status:"cleared", messages_deleted:N, facts_deleted:M}
5. Endpoint POST /agents/{id}/delete_cache
- Stop agent (si running)
- Delete
agents/<id>/data/crypto/directory (E2EE cache; agent re-init on next start) - Delete
agents/<id>/data/cache/*si existe - Return
{status:"cleared", paths_deleted:[...]} - Optionally start back si estaba running (
?restart=true)
NOTA: delete_cache fuerza re-verificacion E2EE. El agente debe re-autenticarse via SSSS recovery key on next start. Documentar.
Frontend (projects/element_agents/apps/agents_dashboard/)
1. Migrar a data_table_cpp_viz
Hoy main.cpp usa ImGui::BeginTable inline. Sustituir por data_table::Table del registry (funcion data_table_cpp_viz). Anadir a app.md::uses_functions. Verificar via fn doctor cpp-apps que la app pasa de CANDIDATE a limpio.
2. Columnas tabla:
- id
- status icon (running=green, stopped=gray, disabled=yellow, crashed=red)
- uptime (humanized via
human_duration_secs) - msg/24h (numero real, NO instances)
- actions (5 botones agrupados):
▶ Start(disabled si running)⏹ Stop(disabled si !running)↻ Restart🧠 Clear Memory(confirmacion modal)🗑 Delete Cache(confirmacion modal)
3. Sort + filter mantener via data_table_cpp_viz API.
E2E (tests/)
Anadir 7 tests nuevos:
test_control_roundtrip— stop → poll → start → poll → restart → poll. Usatest-bot.test_clear_memory— POST clear_memory, verifica COUNT(*) FROM messages == 0.test_delete_cache— POST delete_cache, verifica crypto/ borrado.test_uptime_field_present— /agents response incluye uptime_seconds keytest_msg_24h_field_present— /agents response incluye messages_24h keytest_unified_stop_does_not_kill_launcher— tras stop de 1 agente, otros siguen running.test_clear_memory_requires_apikey— sin Bearer → 401
Tareas
Fase A — Backend (agents_and_robots)
- Agregar
unifiedCancels map[string]context.CancelFunc+startedAt map[string]time.Time+ mutex ashell/process.Manager. - Hook en
launcherruntime para registrar/desregistrar cancels al arrancar/parar cada agent goroutine. - Implementar
StopUnifiedAgent,StartUnifiedAgent,RestartUnifiedAgent(Stop+Start). - Refactor handlers
handleStartAgent/Stop/Restartpara autodetect unified vs multi. - Anadir
uptime_secondsymessages_24haAgentResponse. Implementar query 24h con cache 30s. - Implementar handlers
handleClearMemory,handleDeleteCache. - Anadir rutas en
server.go. - Tests Go unit
internal/api/*_test.go.
Fase B — Frontend (agents_dashboard)
- Cambiar
parse_agentspara leeruptime_secondsymessages_24hdel backend. - Migrar tabla a
data_table_cpp_viz. Mantener filter + sort. - Anadir 5 botones por fila (Start/Stop/Restart/Clear/Delete).
- Confirmacion modal para Clear/Delete.
- Actualizar app.md::uses_functions con
data_table_cpp_viz.
Fase C — E2E + verify
- Anadir 7 pytest tests.
- Run all e2e from registry venv. >=20 tests pass.
- Rebuild .exe + redeploy Windows.
- Visual confirm: botones, uptime, msg_24h.
Acceptance
- All 14 DoD items green (cmd + screenshots).
- >=20 e2e tests passing.
- App C++ deployed to Windows Desktop, visible buttons + working roundtrip.
- Backend unit tests pass.
- No regression: 0128 + 0129 funcionalidad existente intacta (curl smoke del v0.1 sigue green).
DoD humano
- Donde: Windows Desktop → agents_dashboard.exe → tabla Agents.
- Latencia: stop → running=false reflected in UI within 2s (via SSE status diff). msg/24h refresh cada 30s ok.
- Onboarding: tooltip en boton "Clear Memory" explica que borra mensajes; "Delete Cache" explica que el agente tendra que re-autenticar via SSSS al volver a arrancar.
Riesgos
- Refactor de Manager unified-mode toca el ciclo de vida del launcher (paso ~7 del create_agent pipeline). Tests existentes deben pasar.
- delete_cache borra crypto store; agente debe poder re-verify via env var
SSSS_RECOVERY_KEY_<NORM>. Si esa env var no esta, agente queda en estado degradado. Validar antes de borrar. - data_table_cpp_viz puede tener limites de API que ImGui inline no tiene (sort custom, alignment). Verificar antes de migrar.