Commit Graph

69 Commits

Author SHA1 Message Date
egutierrez 8e089ec07e chore: renumerar tasks a 3 dígitos + añadir nuevas + config tweaks
Renumera todos los archivos de tasks de 2 dígitos (01-, 02-...) a
3 dígitos (001-, 002-...) para mejor ordenación. Añade tres nuevas
tasks pendientes: 012-threads, 013-hot-reload, 014-template-agent.

Deshabilita memory temporalmente en assistant-bot config mientras
se estabiliza el sistema de memoria.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:46:29 +00:00
egutierrez 525425a81c feat: opción Restart en TUI dashboard de agentes
Añade botón "Restart" en el menú de acciones de agente en la TUI.
Ejecuta stop + start del launcher unificado para aplicar cambios
de configuración sin salir del dashboard. Incluye intent nuevo
IntentRestartAgent y su implementación en el adapter impuro.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:46:23 +00:00
egutierrez f193f8d5ea fix: matar process group completo de claude-code al cancelar
Cuando se cancela una invocación de claude-code, el proceso principal
moría pero sus hijos (subprocesos node, etc.) quedaban huérfanos
consumiendo recursos. Ahora se crea un process group (Setpgid) y se
mata el grupo entero con kill(-pgid, SIGKILL) tanto en Cancel como
después de Run(), asegurando limpieza completa.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:46:18 +00:00
egutierrez d95ae173de feat: formato markdown en salida de comandos built-in
Mejora la salida de !help, !tools, !status e !info para usar markdown
nativo: encabezados en negrita, listas con bullet points, código inline
con backticks. Aprovecha el rendering HTML que ya hace el bot para que
los clientes Matrix muestren la información formateada correctamente.

No se cambia lógica de comandos, solo formato de texto de salida.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:46:13 +00:00
egutierrez 76ff9394d0 feat: respuestas como reply de Matrix + presencia online/offline
Añade soporte para que las respuestas de los bots sean replies nativos
de Matrix (m.in_reply_to) en lugar de mensajes sueltos. Los clientes
Matrix mostrarán el mensaje original citado.

Cambios:
- EventID en MessageContext para capturar el ID del evento entrante
- InReplyTo en ReplyAction para indicar a qué evento responder
- SendReplyMarkdown en el cliente Matrix (shell/matrix/client.go)
- Runner usa SendReplyMarkdown cuando InReplyTo está presente
- runtime.go pasa InReplyTo en todas las respuestas LLM y comandos
- SetPresence online al arrancar, offline al apagar (graceful)

No se tocan: herramientas, TUI, configuración de agentes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:46:07 +00:00
egutierrez 29decb3321 feat: habilitar extensiones goldmark completas en mdToHTML
Se configura goldmark con extensiones GFM (tablas, strikethrough,
autolinks, task lists), DefinitionList, Footnote, Typographer y CJK.
Esto reemplaza el parser básico por defecto por uno con soporte completo
de Markdown, mejorando el rendering de mensajes enviados por los bots
en Matrix. Se reutiliza una instancia global del parser para evitar
recrearlo en cada llamada.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:12:41 +00:00
egutierrez 14f951982d fix: simplificar avatar.sh eliminando sync de displayname
Se elimina la llamada a `agentctl displayname` del script avatar.sh.
El script ahora solo sube la imagen como avatar, sin intentar
sincronizar el displayname desde el config. Esto evita errores
cuando el subcomando displayname no está disponible o falla.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:54:48 +00:00
egutierrez 7d97fd08da docs: mover task 11 (markdown rendering) a completed
La tarea de renderizado Markdown→HTML en mensajes Matrix ya fue
implementada. Se mueve el archivo de tareas pendientes a completed/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:54:43 +00:00
egutierrez 0eb9e8741d feat: añadir agente meteorologo con tool get_weather
Nuevo agente Matrix especializado en consultas meteorológicas.
Usa la API pública Open-Meteo (sin API key) para obtener
condiciones actuales y previsión de 3 días para cualquier ciudad.

Incluye:
- agents/meteorologo/ — reglas puras, config.yaml, system prompt
- tools/weather.go — tool get_weather (geocoding + forecast)
- Registro en runtime.go (tool registry) y launcher (rulesRegistry)

El agente responde a DMs y menciones delegando al LLM con tool_use
habilitado. No tiene comandos directos (!xxx).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:54:38 +00:00
egutierrez b506090bfd chore: añadir script build_dashboard.sh
Script para compilar el binario del dashboard TUI de forma independiente.
Útil para desarrollo rápido del dashboard sin recompilar todo el launcher.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:21:32 +00:00
egutierrez e5270d1c46 docs: mover tasks 08-09 a completed y añadir tasks 10-11
Se mueven las tareas completadas (08-knowledge_por_agente, 09-command_system)
al directorio .claude/tasks/completed/ para mantener organizado el backlog.

Se añaden nuevas tareas planificadas:
- 10-access-control.md: control de acceso por roles
- 11-markdown-rendering.md: renderizado de markdown en mensajes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:21:25 +00:00
egutierrez b6fe4f9135 feat: ejecutar tests desde el dashboard TUI
Se añade opción "Run Tests" al menú del servidor en el dashboard TUI.
Ejecuta `go test -tags goolm -count=1 ./...` y muestra los resultados
en una pantalla dedicada (ScreenTestOutput) con scroll y opción de re-ejecutar.

Cambios:
- pkg/tui: nuevo MsgTestsDone, ScreenTestOutput, IntentRunTests, updateTestOutput
- pkg/tui/view.go: viewTestOutput con scroll y controles (↑↓ r 0)
- shell/tui/adapter.go: runTests() ejecuta go test con el env del manager
- shell/process/manager.go: buildEnv → BuildEnv (exportado) para que el adapter
  pueda construir el env completo con las variables de .env

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:21:17 +00:00
egutierrez 828eb175fe feat: renderizar Markdown a HTML en mensajes Matrix con goldmark
Se reemplaza SendText por SendMarkdown en todos los puntos donde el agente
envía respuestas: runtime.go (comandos built-in y tareas orquestadas),
effects/runner.go (acciones Reply) y tools/matrix.go (matrix_send tool).

shell/matrix/client.go ahora usa goldmark para convertir Markdown a HTML real
en el campo FormattedBody del evento Matrix, cumpliendo con la spec de Matrix
para mensajes formateados. El Body conserva el markdown raw como fallback.

Se añade dependencia github.com/yuin/goldmark v1.7.16.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 02:21:06 +00:00
egutierrez e2f14e7abb docs: añadir política create_command y actualizar docs
Nueva política create_command.md que documenta cómo añadir comandos
directos (!xxx) a un agente usando RegisterCommand.

Actualiza create_agent.md para no usar reglas en comandos (ahora se
gestionan via RegisterCommand). Actualiza index.md y CLAUDE.md para
referenciar la nueva política.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:40:01 +00:00
egutierrez 62783f3655 fix: SQLite WAL mode y busy_timeout para evitar SQLITE_BUSY
Registra un connection hook en el driver modernc/sqlite que ejecuta
PRAGMA journal_mode=WAL y PRAGMA busy_timeout=5000 en cada conexión nueva.

Esto previene errores SQLITE_BUSY cuando múltiples goroutines escriben
concurrentemente (crypto sync de mautrix + memory store + knowledge store).

Incluye tests que verifican:
- Pragmas aplicados correctamente en cada conexión
- Escrituras concurrentes sin error (mismo sql.DB y conexiones separadas)
- Archivo -wal creado en disco confirmando WAL activo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:39:57 +00:00
egutierrez 4b72b5ab28 feat: sistema RegisterCommand para comandos por agente
Añade RegisterCommand(spec, handler) al Agent para que cada agente pueda
registrar comandos propios (!xxx) sin modificar built-ins ni usar reglas.

Cambios principales:
- agents/runtime.go: nuevo método RegisterCommand + campo customSpecs
- agents/commands.go: !help muestra comandos del agente en sección separada,
  extrae writeSpec helper, elimina customCommandRules (ya no se usan reglas
  para comandos)
- handleEvent simplificado: los comandos se resuelven por lookup directo
  (built-in + registered), nunca pasan por reglas ni LLM

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:39:50 +00:00
egutierrez 2457d6c996 fix: start.sh siempre recompila el launcher antes de arrancar
Elimina la condición que solo recompilaba si había cambios en
cmd/launcher/. Go compila rápido y esto evita binarios stale cuando
hay cambios en pkg/, agents/, tools/, etc. Actualiza también el
progreso de la tarea 09.
2026-03-07 01:11:41 +00:00
egutierrez 3f6921d3fd refactor: eliminar regla !help hardcodeada de agentes existentes
Elimina la regla MatchCommand("help") de assistant-bot y asistente-2
ya que ahora !help es un comando built-in del sistema de comandos.
Los agentes solo conservan la regla llm-all para DM/mention → LLM.
2026-03-07 01:11:33 +00:00
egutierrez 33b11a63c8 feat: añadir sistema de comandos directos (!command)
Implementa pkg/command/ como core puro: tipos Spec/ParsedArgs, parser de
args key=value con soporte de comillas, specs de 8 comandos built-in
(help, tools, tool, ping, status, info, clear, version) y BuiltinNames()
para aliases.

En agents/runtime.go: nuevo flujo handleEvent que prioriza comandos sobre
LLM — custom rules del agente → built-in handlers → comando desconocido →
LLM fallback. Handlers en agents/commands.go. El comando !tool ejecuta
tools directamente via Registry con args key=value parseados.

LLM ahora es opcional: si no hay provider configurado, el agente corre
como simple_bot respondiendo solo a comandos.

Se extrae executeActions() como helper reutilizable para ambos flujos
(comando y no-comando).
2026-03-07 01:11:26 +00:00
egutierrez 515c26d56d chore: mover tareas 06-07 a completed y añadir tareas 08-09
Mueve las tareas completadas (06-añadir-claude-p, 07-logs-mejorados)
al directorio completed/. Añade nuevas tareas pendientes:
08-knowledge_por_agente y 09-command_system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:02:50 +00:00
egutierrez 6eb8ea829f docs: habilitar knowledge en agentes y actualizar prompts
Activa knowledge.enabled en config.yaml de assistant-bot y asistente-2.
Actualiza los system prompts para documentar las 4 tools de knowledge
(search, read, write, list) e incluir hábitos de uso: buscar antes de
responder y guardar información valiosa.

En assistant-bot se reemplaza la sección de "Limitaciones" por una de
"Base de conocimiento" con instrucciones claras de cuándo guardar y
buscar documentos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:02:45 +00:00
egutierrez 69607b3a65 feat: añadir sistema de knowledge por agente
Implementa una base de conocimiento persistente por agente siguiendo
el patrón pure core / impure shell:

- pkg/knowledge/: tipos puros (Document, Store interface)
- shell/knowledge/: FileStore con SQLite para indexación y archivos .md
- tools/knowledge.go: 4 tools LLM (search, read, write, list)
- tools/knowledge_test.go: tests unitarios de las tools
- internal/config/schema.go: nuevo KnowledgeToolCfg en ToolsCfg
- agents/runtime.go: inicialización del store y registro de tools
- agents/*/knowledge/about-me.md: documentos semilla para cada agente

Cada agente puede buscar, leer, crear y actualizar documentos de
conocimiento. Los archivos .md viven en agents/<id>/knowledge/ y se
indexan en SQLite (agents/<id>/data/knowledge.db).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:02:39 +00:00
egutierrez 37882f1c24 docs: añadir stash al flujo de sincronización en git-push
Se añade git stash / git stash pop al paso de sincronización del comando git-push para proteger cambios locales antes de hacer pull --rebase. También se añade nota sobre el caso donde no hay cambios locales y se actualiza el checklist.
2026-03-06 22:17:48 +00:00
egutierrez 741260c4a3 chore: mover tarea 03 a completed
Mueve la spec de bot interaction a tasks/completed/ tras completarla.
2026-03-06 22:14:51 +00:00
egutierrez 61f4fee5d0 test: añadir tests para claude-code provider y router
27 tests nuevos cubriendo las funciones del provider claude-code:

- buildClaudeArgs: minimal, all options, disable_tools, disallowed_tools
- flattenMessages: empty, multi-role, skips system messages
- parseClaudeOutput: success, error response, process failed (con/sin stderr),
  fallback a plain text, content blocks, exec error con stdout parcial
- filterEnv: single key, multiple keys, no match, prefix safety
- Route: claude-code, claude-code/custom, claude-*, gpt-*, ollama/*, default
- ModelName: ollama prefix strip, passthrough

Todos pasan con 'go test -tags goolm ./shell/llm/ ./pkg/llm/'.
2026-03-06 22:14:43 +00:00
egutierrez 9862ae9e6f chore: migrar agentes a claude-code como provider primario
Cambia el provider primario de ambos agentes (assistant-bot y asistente-2)
de openai/gpt-4o a claude-code/sonnet.

Configuración aplicada:
- disable_tools: true — claude no ejecuta herramientas internas
- permission_mode: bypassPermissions — sin diálogos interactivos
- model: sonnet — modelo interno de claude -p
- fallback desactivado temporalmente para validar que claude-code funciona

El launcher ya ejecutó exitosamente con este config, confirmado en logs:
claude_code_response con content_len=279, cost_usd=0.023514.
2026-03-06 22:14:36 +00:00
egutierrez 4634ad104b feat: añadir claude-code como proveedor LLM via claude -p
Implementa un nuevo proveedor LLM que ejecuta 'claude -p' como subproceso,
permitiendo usar Claude Code como backend de cualquier agente Matrix.

Cambios:
- pkg/llm/types.go: nueva constante ProviderClaudeCode
- pkg/llm/router.go: routing de 'claude-code' antes de 'claude*' (Anthropic API)
- internal/config/schema.go: nuevo tipo ClaudeCodeCfg con campos para binary,
  timeout, disable_tools, allowed/disallowed tools, permission_mode, model,
  fallback_model, session_id y add_dirs
- shell/llm/claudecode.go: provider completo — buildClaudeArgs(), flattenMessages(),
  parseClaudeOutput() y filterEnv() para limpiar ANTHROPIC_API_KEY del entorno
  y que claude use su propia auth OAuth
- shell/llm/factory.go: case 'claude-code' en FromConfig(), WithFallback() ahora
  recibe fallbackCfg para sobreescribir model/max_tokens al hacer fallback
- agents/runtime.go: actualizado para pasar fallbackCfg a WithFallback()

No se tocó: los proveedores existentes (anthropic.go, openai.go), el core puro
de decision ni el listener de Matrix.
2026-03-06 22:14:28 +00:00
egutierrez bff41b9ccd docs: actualizar paths y simplificar policy de creación de agentes
Se actualizan todas las referencias a dev-scripts para usar los nuevos paths
con subdirectorios server/ y agent/ en:
- .claude/CLAUDE.md — sección de dev-scripts y guía rápida
- .claude/policies/create_agent.md — simplificada y reorganizada como guía ejecutable
- README.md — sección de uso y estructura de directorios
- docs/creating-agents.md — todos los pasos del flujo

La policy create_agent.md se reduce de ~230 a ~140 líneas, eliminando
secciones redundantes y reorganizando como checklist práctico con ruta rápida
via create-full.sh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:53:40 +00:00
egutierrez 5697b92ab8 feat: integrar structured logging en todos los componentes del shell
Se propaga *slog.Logger a todos los componentes impuros del shell:
- shell/bus/ — logs de subscribe, send, reply, timeout, unsubscribe
- shell/effects/ — duración y resultado de cada action ejecutada
- shell/llm/ (anthropic, openai, factory) — request/response con tokens, duración, fallback
- shell/memory/sqlite — open, save, recall, close con detalles
- shell/ssh/ — inicio, fin, errores y duración de comandos SSH
- tools/registry — registro, ejecución y errores de herramientas

Se usa el paquete shell/logger para field names consistentes (FieldDurationMS, FieldTokensUsed, etc.).
Cada componente recibe el logger por inyección de dependencias, sin globals.
Las firmas de New/FromConfig se actualizan para aceptar *slog.Logger.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:53:31 +00:00
egutierrez 6858a5f13e refactor: reorganizar dev-scripts en subdirectorios server/ y agent/
Se separan los scripts de gestión en dos categorías claras:
- dev-scripts/server/ — operaciones del launcher (start, stop, restart, ps, logs, dashboard)
- dev-scripts/agent/ — operaciones de agentes (new, register, verify, avatar, remove, list)

Se añade create-full.sh como script unificado que ejecuta scaffold + build + register + verify.
Se incluyen READMEs en cada subdirectorio documentando los scripts disponibles.
Los scripts originales en la raíz de dev-scripts/ se eliminan.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:53:19 +00:00
egutierrez c1889ab0c7 chore: add task spec for structured logging system
Especificación de la tarea 07 con requisitos detallados del sistema de
logging JSONL: formato, rotación, limpieza, API y funciones de consulta.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:27:28 +00:00
egutierrez 750e896c08 feat: integrate file logger into launcher and update log scripts
Se integra shell/logger en cmd/launcher para que cada agente escriba
sus logs en logs/<agent-id>/YYYY-MM-DD.jsonl. Nuevo flag --log-dir
(default: "logs", "stdout" para consola). El launcher y cada agente
tienen su propio logger con cleanup automático al apagar. Se actualiza
dev-scripts/logs.sh para leer desde la nueva estructura de directorios.
Se corrige .gitignore: "launcher" → "/launcher" para no ignorar cmd/launcher/,
y se añade logs/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:27:24 +00:00
egutierrez 71079962ca feat: add structured JSONL logging package with rotation and query
Nuevo paquete shell/logger/ que implementa logging estructurado JSONL
para agentes. Incluye DailyRotatingWriter con rotación diaria y por
tamaño (50MB default), limpieza automática de archivos viejos (7 días),
compresión gzip de logs rotados, y funciones de consulta (ReadLogs,
SearchLogs, ListAgents, ListDates) para que agentes LLM puedan leer
logs de otros agentes. Basado en log/slog de stdlib, sin dependencias
externas. 18 tests unitarios cubren rotación, concurrencia y consultas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:26:56 +00:00
egutierrez b596a967cc feat: detect plural/group-addressed questions to trigger all-agent responses
Se añade detección de preguntas dirigidas al grupo en los prompts de routing
y quality. Cuando el usuario usa plural o se dirige colectivamente a los
agentes ("¿qué opinan?", "chicos", "hey everyone", etc.), el routing baja
la confianza a 0.2 y el evaluador de calidad mantiene continue=true hasta
que todos los agentes hayan participado.

Esto garantiza que preguntas con intención grupal reciban respuestas de
todos los agentes disponibles, no solo del más relevante.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:16:12 +00:00
egutierrez 55eff3389a feat: add repetition detection fallback to orchestrator pipeline
Se añade un mecanismo de detección de repetición para cortar conversaciones
circulares entre agentes cuando hablan sin parar.

- Nuevo campo RepetitionThreshold en OrchestrationCfg (schema.go).
- Función detectRepetition() compara cada nueva respuesta con las anteriores
  usando similitud de bigramas (Dice coefficient).
- Si la similitud supera el umbral (default 0.6), el pipeline se detiene
  inmediatamente con un log de warning, antes de gastar una llamada LLM
  en la evaluación de calidad.
- Funciones auxiliares: similarity() y makeBigrams() para el cálculo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:11:00 +00:00
egutierrez 485d6e86be feat: enhance orchestrator prompts for multi-agent collaboration
Se reescriben los tres prompts del orquestador (routing, quality, refinement)
para fomentar la interacción entre agentes en lugar de respuestas individuales.

- Routing: instruye al LLM a mantener confianza baja (0.3-0.6) en preguntas
  generales para disparar contribuciones de múltiples agentes.
- Quality: nuevo sistema de scoring que favorece la colaboración. Un solo agente
  respondiendo nunca supera 0.5, forzando que otros participen.
- Refinement: cambia el enfoque de "mejorar" a "enriquecer con perspectiva única",
  priorizando agentes con expertise diferente al anterior.
- Config: max_iterations 3→6, quality_threshold 0.8→0.85, nuevo campo
  repetition_threshold: 0.6 para detección de bucles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 17:10:52 +00:00
egutierrez 7176afde0a feat: update orchestrator for enhanced multi-bot management and room discovery 2026-03-06 17:03:08 +00:00
egutierrez 2f89943511 chore: move completed tasks to completed/ directory
Mueve las tareas completadas (01-bot-tools, 02-bot-memory, 04-bot-avatar)
al directorio .claude/tasks/completed/ para organización.
Añade nueva tarea 06.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:06:25 +00:00
egutierrez b86da0b805 refactor: update dev-scripts for unified launcher model
Actualiza todos los scripts de desarrollo para el modelo de launcher unificado.
Ya no se inician procesos individuales por agente — un solo proceso corre todos.

_common.sh: helpers para launcher unificado (is_launcher_running, read_launcher_pid,
launcher_pid_file/log_file), agent_status() ahora deriva estado del launcher
start.sh: inicia el launcher unificado (sin -c flag, descubre todos los agentes)
stop.sh: detiene el launcher unificado
restart.sh: stop + start del launcher
ps.sh: muestra stats del proceso launcher + lista de agentes enabled/disabled
logs.sh: tail -f del log unificado del launcher
server.sh: añade comandos enable/disable para gestionar agentes, elimina start/stop por agente
remove.sh: simplificado a toggle enabled:false + sugerencia de restart

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:06:11 +00:00
egutierrez 1af0457c1f feat: update dashboard and process manager for unified launcher
Actualiza el dashboard TUI y el process manager para el modelo de launcher
unificado donde todos los agentes corren en un solo proceso.

Dashboard (pkg/tui):
- model.go: campos de estado del launcher (PID, uptime, memory, CPU, log size)
- model.go: ServerMenuOptions(running) contextual, AgentActionOptions(enabled)
- messages.go: MsgAgentsLoaded incluye estado del launcher, MsgServerActionDone/MsgRebuildDone simplificados
- update.go: intents nuevos (Enable/Disable agent, Start/Stop/Restart/Kill launcher)
- view.go: vista de servidor muestra stats del launcher, agentes muestran enabled/disabled

Shell adapter (shell/tui):
- adapter.go: reescrito para usar métodos unificados (StartUnified, StopUnified, ToggleEnabled, StatusAllUnified, UnifiedStats, UnifiedLogTail)

Process manager (shell/process):
- manager.go: métodos StartUnified, StopUnified, KillUnified, IsUnifiedRunning, UnifiedPID, UnifiedStats, UnifiedLogTail, StatusAllUnified, ToggleEnabled

Los agentes ya no se inician/detienen individualmente desde el dashboard.
Se habilitan/deshabilitan en config y se reinicia el launcher para aplicar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:05:57 +00:00
egutierrez 2667af52cc feat: implement multi-bot orchestration system with LLM routing
Implementa el sistema de orquestación para salas Matrix con múltiples bots.
El orquestador es un "special agent" sin identidad Matrix que coordina qué bot
responde y cuándo, usando LLM (Claude) para routing y evaluación de calidad.

Cambios principales:
- pkg/orchestration/task.go: tipos puros (TaskEvent, BotResponse, QualityScore, RoutingDecision)
- shell/orchestration/: runtime del orquestador (orchestrator.go, router.go, evaluator.go)
- agents/specials/orchestrator/: config + prompts (routing, quality, refinement)
- internal/config/: SpecialConfig, OrchestrationCfg, LoadSpecial()
- shell/bus/bus.go: protocolo request-reply (SendAndWait, Reply) para delegación
- shell/matrix/listener.go: InterceptFunc para interceptar eventos en salas orquestadas
- agents/runtime.go: SetBus, listenBus, handleTaskEvent para recibir tareas del orquestador
- cmd/launcher/main.go: creación de bus compartido, arranque del orquestador antes de bots

Incluye deduplicación para evitar que múltiples listeners en la misma sala
disparen el orquestador más de una vez por mensaje.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:05:42 +00:00
egutierrez 6bef4283c6 Remove outdated plans and implement new features for bot tools, memory, interaction, avatar management, and cron scheduling
- Deleted old plan files for bot memory, interaction, avatar, and cron.
- Added new task files for bot tools, memory, interaction, avatar, and cron scheduling with detailed designs and implementation notes.
- Updated `agents/runtime.go` to support memory clearing and message deletion from SQLite.
- Created necessary shell and package files for implementing bot tools and cron scheduling functionalities.
2026-03-06 01:18:53 +00:00
egutierrez df714c44dd docs: update references after agent directory rename and devops removal
Actualizar todas las referencias en documentación para reflejar los
nuevos nombres de directorio (assistant-bot, asistente-2) y la
eliminación del agente devops-bot. Archivos actualizados: CLAUDE.md,
create_agent.md, README.md, e2ee.md, creating-agents.md,
03-bot-interaction.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 00:55:20 +00:00
egutierrez 1a649fdcb2 chore: remove devops-bot agent
Eliminar el agente devops-bot completo (directorio agents/devops/,
código, config y prompt). El agente nunca llegó a estar activo y se
decide eliminarlo para mantener limpio el proyecto. Se elimina también
la referencia al room devops en config/matrix.yaml.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 00:55:14 +00:00
egutierrez 08dcb332b7 refactor: rename agent directories to match agent IDs
Renombrar directorios de agentes para que coincidan exactamente con el
agent.id del config.yaml, eliminando la disonancia entre nombres:
- agents/assistant/ → agents/assistant-bot/ (ID: assistant-bot)
- agents/asistente2/ → agents/asistente-2/ (ID: asistente-2)

Se actualizan los imports en cmd/launcher/main.go, los store_path de
crypto, los paths de storage/logs/audit en ambos configs para que
apunten a ./agents/<agent-id>/data/. También se corrige el memory.db
que se creaba en directorios fantasma fuera del directorio real del
agente.

Se eliminan las referencias a devops-bot en el config de assistant-bot
(peers, delegation).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 00:55:09 +00:00
egutierrez cb9489e633 feat: implement memory management system with SQLite persistence, including conversation windows and episodic facts 2026-03-06 00:39:22 +00:00
egutierrez d26be78c46 feat: add rebuild and restart functionality for agents, including build process and status reporting 2026-03-06 00:13:15 +00:00
egutierrez f2626f7007 Refactor code structure for improved readability and maintainability 2026-03-05 23:52:58 +00:00
egutierrez a92fbff801 feat: update access token environment variables and enhance device signing process for E2EE agents; add verification script and system flow documentation 2026-03-05 23:46:07 +00:00
egutierrez 0f900d1560 feat: add recovery key support for E2EE agents, including configuration and documentation updates 2026-03-05 00:56:15 +00:00