Sistema operativo de agentes para Web Mentor.
Este repositorio contiene la arquitectura base para construir un sistema de agentes persistente, auditable y desplegable en una VPS. El objetivo es operar una "mente maestra" que reciba misiones de negocio, las descomponga, las delegue a subagentes especializados y mantenga continuidad de trabajo 24/7 con estado persistente, memoria y observabilidad.
Este documento cumple dos funciones:
- Ser el README fundacional del repositorio.
- Servir como prompt/contexto maestro para un modelo como Opus 4.6 que vaya a planear e implementar el sistema.
Base funcional en main + hardening operativo reciente para poder levantar y mantener la instancia de forma estable.
- Monorepo TypeScript con
pnpm workspace+turbo apps/api(Fastify + rutas iniciales)apps/dashboard(Next.js con vistas de misiones/tareas/aprobaciones)services/orchestrator(planner/dispatcher/state machine)services/worker-researchpackages/agent-core,packages/db(Prisma),packages/observability- Infra local (
docker-compose.dev, Dockerfiles, scripts operativos)
- Se introdujo un registro formal de actores:
- humanos iniciales:
Nicholas,Kevin,Santiago,Germán - agentes visibles/asignables:
Research Agent,PromptOps Agent,Frontend Specialist Agent,Backend Specialist Agent,DevOps Specialist Agent - actor especial:
Central Orchestrator
- humanos iniciales:
- Cada actor ahora tiene:
rolecontextsupportedAgentTypes- capacidad de asignación directa o de delegación
- Las
Taskahora soportan:assignmentMode = DIRECT | ORCHESTRATORrequestedActorIdresolvedActorIdassignmentReasonactorSnapshot
- Ya existe flujo completo para tareas humanas:
- una tarea puede asignarse directamente a una persona
- el orquestador central puede delegarla al mejor humano/agente
- cuando una tarea queda en humano, el sistema la mueve a
WAITING_RESULT - el resultado humano puede cerrarse desde dashboard con submit manual
- El dashboard ahora soporta:
- crear tareas nuevas dentro de una misión
- escoger ejecutor humano/agente/orquestador
- ver actor solicitado y actor resuelto por tarea
- completar tareas humanas desde la vista de detalle
- Se reforzó el acceso desde celular:
next devynext startcorren en0.0.0.0- se agregó
viewportexplÃcito - los fetches client-side ya no dependen rÃgidamente de
localhost; resuelven el hostname activo del navegador para hablar con:3001
- Se añadió migración Prisma:
packages/db/prisma/migrations/20260404_actor_registry_and_task_assignment/
Regla de migraciones:
pnpm db:migratesolo para desarrollo local cuando se esta creando o editando una migracionpnpm db:deploypara OpenClaw, CI, localhost con Docker y cualquier despliegue o reinicio operacional
- Se resolvió el arranque de contenedores que fallaba por módulos workspace no compilados en runtime Docker.
- Fix aplicado: build explÃcito de
@wm/db,@wm/agent-core,@wm/observabilitydurante la imagen deapiyservice.
- Fix aplicado: build explÃcito de
- Se resolvió error de BullMQ por nombre de cola inválido (
Queue name cannot contain :).- Fix aplicado: colas renombradas de
agent:*aagent-*.
- Fix aplicado: colas renombradas de
- Se ajustó tipado en
packages/observabilitypara compatibilidad Prisma (InputJsonValue) y dependencia explÃcita de@wm/db. - Se validó health real del stack:
GET /api/v1/healthdevuelvestatus=ok, db=ok, redis=ok.
- Se incorporó runbook operativo de instancia:
docs/runbooks/instance-ops-baseline.md.
- Se añadió smoke test post-deploy configurable por target:
infra/scripts/smoke-post-deploy.sh.
- Se añadió check de errores recientes (error-budget con filtros por servicio + hard-fail patterns):
infra/scripts/check-errors-window.sh.
- Reglas de error-budget externalizadas para tuning sin tocar script:
infra/config/log-error-budget.rules.sh- permite ajustar
SERVICES,BASE_ERROR_REGEX,GLOBAL_IGNORE_REGEX,SERVICE_IGNORE_REGEX,SERVICE_HARD_FAIL_REGEX.
- Se creó pipeline de deploy unificado por target:
infra/scripts/deploy-pipeline.sh [full|backend|frontend]- wrappers npm:
pnpm deploy:full,pnpm deploy:backend,pnpm deploy:frontend deploy-staging.shqueda como compat wrapper haciafull.
- CI manual de deploy para staging:
.github/workflows/deploy-staging.yml(workflow_dispatch con inputtarget, pre-checks de build/typecheck y ejecución en runnerself-hosted,linux,staging).
- CI manual de deploy para producción con confirm explÃcita:
.github/workflows/deploy-production.yml(confirm=DEPLOY_PROD, pre-checks de build/typecheck, runnerself-hosted,linux,production,environment: production).
- CI de predeploy para PR/manual:
.github/workflows/ci-predeploy.yml.
- Runbook operativo del pipeline por target:
docs/runbooks/deploy-pipeline-targets.md.
- Runbook de protección de
main+ checklist de producción:docs/runbooks/main-branch-protection-checklist.md.
- Estado y trazabilidad de deploy guardados por script:
infra/state/last-successful-deploy.envinfra/state/deploy-history.log- rollback dirigido al último release exitoso:
infra/scripts/rollback-last-success.sh.
- Fix de conectividad SSR del dashboard en Docker:
API_INTERNAL_URL=http://api:3001para llamadas server-side.
- GuÃa explÃcita para levantar DEV en VPS y ver dashboard en tiempo real:
openclaw.mdsección 16.5 Runbook de levantar DEV en VPS.
- Se removió
version:del compose dev para evitar warning de deprecación en Docker Compose v2.
Objetivo: que cualquier operador (o Copilot) pueda levantar el entorno DEV y observar en vivo el comportamiento de API/orchestrator/workers desde localhost:3000.
cd /home/santiago/projects/multiagent
pnpm install --frozen-lockfile
cp -n .env.example .env
pnpm infra:up
pnpm db:deploycurl http://localhost:3001/api/v1/health
./infra/scripts/check-services.sh
./infra/scripts/check-logs.sh 120- Dashboard:
http://localhost:3000/missions - API health:
http://localhost:3001/api/v1/health
Se agregaron controles y comportamiento nuevos para operación diaria:
- Botón
RESET MISSIONSen la vista de misiones:- Borra todas las misiones y sus dependencias (tasks, runs, approvals, artifacts, events).
- Endpoints soportados:
- Real API:
DELETE /api/v1/missions - Mock API:
DELETE /api/v1/missions
- Real API:
- Hover de misión simplificado:
- Solo muestra
CREATED, un mini diagrama de pipeline yNOW(estado actual).
- Solo muestra
- Vista de detalle al hacer click:
- Si la misión está
DONE, se muestra primeroFINAL RESULT. - Debajo quedan los detalles técnicos (tasks, eventos, artefactos).
- Si la misión está
- Creación de tareas dentro de la misión:
- Ruta nueva:
/missions/:id/tasks/new - Permite escoger:
- un humano (
Nicholas,Kevin,Santiago,Germán) - un agente
Central Orchestratorpara delegación inteligente
- un humano (
- Ruta nueva:
- Cierre manual de tareas humanas:
- Si una tarea fue resuelta hacia un actor humano, la vista
/missions/:id/tasks/:taskIdmuestra formulario para enviar el resultado final y cerrar la tarea.
- Si una tarea fue resuelta hacia un actor humano, la vista
- En dashboard (
/missions), cambios de estado de misiones/tareas. - En logs de API, requests desde dashboard (
GET /api/v1/missions, etc.). - En logs de orchestrator, polling/dispatch de trabajo.
- En logs de workers, consumo de cola y ejecución (
Job received/completed). - Si una tarea especializada no tiene worker dedicado, debe verse reruteada a
PROMPTOPSen lugar de quedarse estancada enENQUEUED.
Ahora existe un worker adicional:
worker-promptops
Responsabilidad:
- optimizar uso de cómputo, secuencia de pasos y reutilización de agentes
- preservar pasos necesarios, no eliminarlos
- absorber temporalmente tareas especializadas cuando no exista aún un worker dedicado (
BACKEND,FRONTEND,DEVOPS, etc.) - proponer estrategia de ejecución efectiva con menor desperdicio de recursos
Comando local/manual:
pnpm worker:promptopsComando recomendado para monitoreo en vivo:
docker compose -f infra/compose/docker-compose.dev.yml logs -f api orchestrator worker-research worker-promptops dashboardSi accedes remoto por SSH, usar túnel:
ssh -L 3000:localhost:3000 -L 3001:localhost:3001 <usuario>@<IP_VPS>Luego abrir en tu máquina local http://localhost:3000/missions.
Este bloque es el procedimiento operativo que OpenClaw debe ejecutar en terminal para dejar de usar mock-api.mjs y operar contra el stack real.
Precondiciones:
- Docker y Docker Compose disponibles en la VPS.
- Repositorio en
/home/santiago/projects/multiagent. .envcreado desde.env.exampleconANTHROPIC_API_KEYreal.
Comandos (copiar/pegar en este orden):
cd /home/santiago/projects/multiagent
# 1) Asegurar dependencias
pnpm install --frozen-lockfile
# 2) Preparar entorno (si falta)
cp -n .env.example .env
# 3) DETENER cualquier mock activo
pkill -f "node mock-api.mjs" || true
# 4) Levantar infraestructura real
pnpm infra:up
# 5) Ejecutar migraciones
pnpm db:deploy
# 6) Verificar salud del backend real
pnpm healthcheck
curl -s http://localhost:3001/api/v1/health
# 7) Verificar que orquestador y worker están vivos
./infra/scripts/check-services.sh
./infra/scripts/check-logs.sh 120
# 8) Monitoreo en vivo (api + orchestrator + workers + dashboard)
pnpm infra:logsValidación funcional obligatoria (sin mock):
- Abrir
http://localhost:3000/missions. - Crear una misión nueva desde el dashboard.
- Confirmar transición de estado (
NEW->PLANNING->DISPATCHING/RUNNING). - Confirmar en logs de worker mensajes tipo
Job receivedyJob completed. - Si el planner pidió un agente sin worker dedicado, confirmar que la tarea aparece ejecutada por
PROMPTOPSy no queda atascada solo enENQUEUED.
Si algo falla, OpenClaw debe ejecutar este diagnóstico mÃnimo:
./infra/scripts/check-services.sh
./infra/scripts/check-logs.sh 200
docker compose -f infra/compose/docker-compose.dev.yml logs --tail=200 api orchestrator worker-research
docker compose -f infra/compose/docker-compose.dev.yml logs --tail=200 worker-promptopsRegla operativa:
mock-api.mjssolo se usa para demos locales sin Docker.- En VPS con Docker, el modo correcto es siempre
pnpm infra:up+pnpm db:deploy.
SÃntoma tÃpico:
- OpenClaw crea misiones reales y en logs de
api/orchestratorse vePlanning mission...y creación deTask. - Pero en
http://localhost:3000/missionsno aparecen esas misiones o aparece otra lista distinta. - Los indicadores del dashboard muestran
APIverde peroDByQUEUEno coinciden con el estado esperado.
Causa raÃz más probable:
- El dashboard local está apuntando a un backend distinto al de OpenClaw/VPS.
- Normalmente ocurre porque no se configuró
NEXT_PUBLIC_API_URL/API_INTERNAL_URLcon la URL real. - También puede pasar si el operador tiene un
mock-api.mjslocal en el puerto3001.
Cómo debe diagnosticar OpenClaw:
cd /home/santiago/projects/multiagent
# 1) Ver qué endpoint usa el dashboard local
grep -n "NEXT_PUBLIC_API_URL\|API_INTERNAL_URL" .env || true
# 2) Ver si localhost:3001 responde algo tipo mock
curl -s http://localhost:3001/api/v1/health
curl -s http://localhost:3001/api/v1/missionsInterpretación del diagnóstico:
- Si
/api/v1/healthdevuelvedb: "ok (mock)"oredis: "ok (mock)", la UI local está leyendo el mock. - Si la lista de
/api/v1/missionsno coincide con lo que se ve en logs de Docker, la UI está apuntando al backend equivocado. - Si faltan
NEXT_PUBLIC_API_URL/API_INTERNAL_URL, el dashboard fallará explÃcitamente (ya no hay fallback silencioso).
Corrección obligatoria que OpenClaw debe aplicar:
- Detener cualquier
mock-api.mjslocal. - Configurar explÃcitamente el dashboard para leer la API real.
- Reiniciar el dashboard para que cargue el
.envnuevo.
Caso A: usar la API real expuesta directamente por la VPS
cd /home/santiago/projects/multiagent
# Detener mock local si existe
pkill -f "node mock-api.mjs" || true
# Configurar dashboard para apuntar al backend real
sed -i '/^NEXT_PUBLIC_API_URL=/d' .env
sed -i '/^API_INTERNAL_URL=/d' .env
echo 'NEXT_PUBLIC_API_URL=http://<IP_O_DOMINIO_VPS>:3001' >> .env
echo 'API_INTERNAL_URL=http://<IP_O_DOMINIO_VPS>:3001' >> .env
# Reiniciar dashboard local si corre fuera de Docker
pkill -f "next dev" || true
pnpm --filter @wm/dashboard devEjemplo real actual de esta operación:
echo 'NEXT_PUBLIC_API_URL=http://93.188.160.48:3001' >> .env
echo 'API_INTERNAL_URL=http://93.188.160.48:3001' >> .envCaso B: usar túnel SSH y mantener localhost:3001
# En la máquina local del operador
ssh -L 3000:localhost:3000 -L 3001:localhost:3001 <usuario>@<IP_VPS>Luego OpenClaw debe asegurar que NO quede mock corriendo en local:
pkill -f "node mock-api.mjs" || true
curl -s http://localhost:3001/api/v1/healthValidación final que OpenClaw debe hacer:
curl -s http://localhost:3001/api/v1/health
curl -s http://localhost:3001/api/v1/missionsResultado esperado:
- El health ya no debe contener
ok (mock). - La lista de misiones debe coincidir con lo que aparece en logs de
apiyorchestrator. - El dashboard local debe reflejar las misiones reales creadas por OpenClaw.
Ejecutar en la máquina local del operador (Windows/Powershell):
cd C:\Users\germa\Documents\GitHub\multiagent
# 1) Asegurar dependencias
pnpm install
# 2) Configurar URL remota de API (OpenClaw VPS)
# En .env deben existir estas dos lÃneas:
# NEXT_PUBLIC_API_URL=http://93.188.160.48:3001
# API_INTERNAL_URL=http://93.188.160.48:3001
# 3) Levantar frontend
pnpm --filter @wm/dashboard dev
# 4) Abrir
# http://localhost:3000/missionsChecklist rápido si no ves cambios:
- Reiniciar
pnpm --filter @wm/dashboard devdespués de cambiar.env. - Verificar
http://93.188.160.48:3001/api/v1/healthrespondestatus=ok. - Confirmar que NO hay
mock-api.mjscorriendo local en3001.
Nota importante:
- Que
DByQUEUEse vean en rojo en la UI local no explica por sà solo la ausencia de misiones. - El problema crÃtico es a qué backend está apuntando el dashboard.
- Primero corregir el endpoint. Luego, si hace falta, revisar el rendering del health.
Desde este punto, los cambios operativos/manuales del agente se desarrollan en rama dedicada:
- Rama activa del agente:
chore/ops-hardening-agent mainse mantiene como rama de integración estable para evitar colisiones con Copilot/automatizaciones.- Flujo recomendado: trabajar en rama dedicada -> PR/review -> merge a
main.
Mientras continúan features en API/orchestrator/dashboard, se recomienda que contribuciones paralelas se enfoquen en ejes de bajo conflicto:
-
Testing + CI/CD básico
- pruebas unitarias y smoke tests
- pipeline de lint/test/build en PR
- checks mÃnimos de calidad antes de merge
-
Contratos y tipado compartido
- endurecer tipos en
packages/agent-core - validaciones consistentes de payloads
- versionado de contratos entre orchestrator/workers
- endurecer tipos en
-
Observabilidad operativa mÃnima
- logging estructurado consistente
- correlación por
missionId/taskId - eventos base para debugging y auditorÃa
-
Runbooks y documentación operativa aterrizada
- alinear docs con la implementación real (no solo visión)
- procedimientos de staging, healthchecks y rollback
- Trabajo de base/plataforma:
chore/*,docs/*,test/*,ci/* - Features de producto:
feature/* - Fixes puntuales:
fix/*
Regla práctica: evitar tocar simultáneamente archivos núcleo de lógica (services/orchestrator/*, apps/api/src/routes/*) desde múltiples ramas sin coordinación explÃcita.
Queremos construir un sistema donde:
- exista un orquestador maestro
- existan subagentes especializados
- el sistema pueda recibir órdenes desde un dashboard y eventualmente por voz
- el sistema pueda mantener contexto de largo plazo
- el sistema pueda continuar trabajo aunque un proceso falle o la VPS se reinicie
- el sistema pueda modificar repositorios, investigar documentación, analizar frontend, backend, DevOps y prompts
- el sistema pueda operar con aprobaciones humanas cuando una acción sea sensible
- el sistema pueda vivir en una VPS propia
- el sistema sea un activo propio de Web Mentor, no dependiente de un framework externo como núcleo del negocio
La arquitectura debe priorizar:
- persistencia
- trazabilidad
- control
- separación de responsabilidades
- seguridad
- despliegue pragmático
- capacidad de evolucionar a SaaS en el futuro
No vamos a construir un sistema basado en un "prompt infinito" o en agentes hablándose sin control.
Vamos a construir un sistema basado en:
- estado persistente
- eventos
- cola de trabajos
- workers especializados
- orquestación explÃcita
- guardrails
- dashboard de control
- checkpoints
- aprobaciones
Es decir:
no conversación infinita
sà sistema de ejecución durable
- operar desde la VPS
- inspeccionar archivos
- correr comandos
- ayudar en mantenimiento
- preparar cambios
- revisar logs
- actuar como operador técnico
- ejecutar workflows auxiliares
- servir como interfaz agentic experimental
- el producto central
- el orquestador maestro definitivo del negocio
- la única memoria del sistema
- la única capa de ejecución
- la fuente de verdad del estado del sistema
El sistema principal será un repositorio nuevo y un runtime propio.
OpenClaw, si se utiliza, será un agente operador/maintainer dentro de la VPS, no el corazón del negocio.
-
Dashboard
- interfaz visual del sistema
- input por texto
- futuro input por voz
- timeline de eventos
- visualización de tareas, agentes, errores, aprobaciones y costos
-
API central
- recibe misiones
- administra autenticación
- expone endpoints
- sirve estado al dashboard
- abre websocket o SSE para tiempo real
-
Orchestrator
- recibe una misión
- la convierte en plan
- crea tareas
- encola trabajos
- revisa resultados
- decide siguiente paso
- pausa o solicita aprobación cuando sea necesario
-
Workers / Subagentes
- research
- frontend
- backend
- devops
- promptops
- futuros especialistas
-
Queue
- distribuye trabajos
- controla retries
- controla delays
- evita ejecución duplicada
- desacopla al orquestador de los workers
-
Postgres
- guarda estado persistente
- guarda misiones, tareas, runs, eventos, artifacts, aprobaciones, presupuestos, resultados
-
Redis
- cola de trabajos
- locks
- estado efÃmero de ejecución
- coordinación rápida entre procesos
-
Storage de artifacts
- logs
- reportes
- diffs
- archivos generados
- capturas
- resultados de análisis
-
Observabilidad
- logs estructurados
- métricas
- errores
- health checks
- auditorÃa
[Usuario / Voz / Dashboard]
|
v
[API Central]
|
v
[Orchestrator]
|
v
[Queue / Redis]
/ | \
v v v
[Research] [Frontend] [Backend]
Worker Worker Worker
\ | /
\ | /
v
[Postgres]
|
v
[Events / Artifacts]
|
v
[Dashboard_
6. Diagrama de roles
Repositorio = código fuente del sistema
VPS = infraestructura donde corre el sistema
Runtime = procesos vivos 24/7
OpenClaw = operador técnico opcional dentro de la VPS
Claude/Opus = asistentes de desarrollo/planeación para construir el sistema
# Web Mentor Agent OS
Sistema operativo de agentes para Web Mentor.
Este repositorio contiene la arquitectura base para construir un sistema de agentes persistente, auditable y desplegable en una VPS. El objetivo es operar una "mente maestra" que reciba misiones de negocio, las descomponga, las delegue a subagentes especializados y mantenga continuidad de trabajo 24/7 con estado persistente, memoria y observabilidad.
Este documento cumple dos funciones:
1. Ser el README fundacional del repositorio.
2. Servir como prompt/contexto maestro para un modelo como Opus 4.6 que vaya a planear e implementar el sistema.
---
# 1. Visión
Queremos construir un sistema donde:
- exista un **orquestador maestro**
- existan **subagentes especializados**
- el sistema pueda recibir órdenes desde un **dashboard** y eventualmente por **voz**
- el sistema pueda mantener contexto de largo plazo
- el sistema pueda continuar trabajo aunque un proceso falle o la VPS se reinicie
- el sistema pueda modificar repositorios, investigar documentación, analizar frontend, backend, DevOps y prompts
- el sistema pueda operar con **aprobaciones humanas** cuando una acción sea sensible
- el sistema pueda vivir en una **VPS propia**
- el sistema sea un activo propio de Web Mentor, no dependiente de un framework externo como núcleo del negocio
La arquitectura debe priorizar:
- persistencia
- trazabilidad
- control
- separación de responsabilidades
- seguridad
- despliegue pragmático
- capacidad de evolucionar a SaaS en el futuro
---
# 2. Principio arquitectónico central
No vamos a construir un sistema basado en un "prompt infinito" o en agentes hablándose sin control.
Vamos a construir un sistema basado en:
- **estado persistente**
- **eventos**
- **cola de trabajos**
- **workers especializados**
- **orquestación explÃcita**
- **guardrails**
- **dashboard de control**
- **checkpoints**
- **aprobaciones**
Es decir:
**no conversación infinita**
**sà sistema de ejecución durable**
---
# 3. Qué es y qué no es OpenClaw dentro de esta arquitectura
## OpenClaw sà puede servir para:
- operar desde la VPS
- inspeccionar archivos
- correr comandos
- ayudar en mantenimiento
- preparar cambios
- revisar logs
- actuar como operador técnico
- ejecutar workflows auxiliares
- servir como interfaz agentic experimental
## OpenClaw no será:
- el producto central
- el orquestador maestro definitivo del negocio
- la única memoria del sistema
- la única capa de ejecución
- la fuente de verdad del estado del sistema
## Decisión arquitectónica
El sistema principal será **un repositorio nuevo** y **un runtime propio**.
OpenClaw, si se utiliza, será un **agente operador/maintainer** dentro de la VPS, no el corazón del negocio.
---
# 4. Arquitectura general
## Componentes
1. **Dashboard**
- interfaz visual del sistema
- input por texto
- futuro input por voz
- timeline de eventos
- visualización de tareas, agentes, errores, aprobaciones y costos
2. **API central**
- recibe misiones
- administra autenticación
- expone endpoints
- sirve estado al dashboard
- abre websocket o SSE para tiempo real
3. **Orchestrator**
- recibe una misión
- la convierte en plan
- crea tareas
- encola trabajos
- revisa resultados
- decide siguiente paso
- pausa o solicita aprobación cuando sea necesario
4. **Workers / Subagentes**
- research
- frontend
- backend
- devops
- promptops
- futuros especialistas
5. **Queue**
- distribuye trabajos
- controla retries
- controla delays
- evita ejecución duplicada
- desacopla al orquestador de los workers
6. **Postgres**
- guarda estado persistente
- guarda misiones, tareas, runs, eventos, artifacts, aprobaciones, presupuestos, resultados
7. **Redis**
- cola de trabajos
- locks
- estado efÃmero de ejecución
- coordinación rápida entre procesos
8. **Storage de artifacts**
- logs
- reportes
- diffs
- archivos generados
- capturas
- resultados de análisis
9. **Observabilidad**
- logs estructurados
- métricas
- errores
- health checks
- auditorÃa
---
# 5. Diagrama de alto nivel
```txt
[Usuario / Voz / Dashboard]
|
v
[API Central]
|
v
[Orchestrator]
|
v
[Queue / Redis]
/ | \
v v v
[Research] [Frontend] [Backend]
Worker Worker Worker
\ | /
\ | /
v
[Postgres]
|
v
[Events / Artifacts]
|
v
[Dashboard]
6. Diagrama de roles
Repositorio = código fuente del sistema
VPS = infraestructura donde corre el sistema
Runtime = procesos vivos 24/7
OpenClaw = operador técnico opcional dentro de la VPS
Claude/Opus = asistentes de desarrollo/planeación para construir el sistema
7. Modelo conceptual correcto
El repo
Es donde vive el código.
El runtime
Es lo que realmente corre 24/7.
El orquestador
Es el director operativo.
Los subagentes
Son workers especializados.
OpenClaw
Es un operador residente útil, no el sistema mismo.
Claude / Opus
Son herramientas para ayudarnos a construir y evolucionar el sistema.
8. Modelo de ejecución
El sistema debe funcionar asÃ:
el usuario crea una misión desde dashboard o voz
la API registra la misión
el orquestador la analiza
el orquestador construye un plan
el orquestador crea tareas
las tareas se encolan
los workers toman sus tareas
cada worker ejecuta su parte
cada worker devuelve resultado estructurado
el orquestador revisa resultados
el orquestador decide:
continuar
delegar otra tarea
pedir aprobación
reintentar
cerrar la misión
el dashboard muestra todo en tiempo real
9. Lo que NO vamos a hacer
No vamos a:
depender de cron para "revivir prompts"
hacer agentes platicando sin fin solo por estar vivos
confiar solo en historial conversacional para recordar estado
dejar que un agente modifique producción sin guardrails
dejar que el sistema se autodegrade por autoedición sin control
construir toda la lógica alrededor de una sola sesión agentic
10. Monorepo propuesto
webmentor-agent-os/
├─ apps/
│ ├─ dashboard/ # Next.js dashboard
│ └─ api/ # API central / realtime / auth
│
├─ services/
│ ├─ orchestrator/ # motor de planeación y decisión
│ ├─ scheduler/ # tareas programadas
│ ├─ worker-research/ # investigación y documentación
│ ├─ worker-frontend/ # UI/UX/frontend specialist
│ ├─ worker-backend/ # API/DB/backend specialist
│ ├─ worker-devops/ # infra/deploy/ops specialist
│ └─ worker-promptops/ # mejora de prompts, rúbricas y handoffs
│
├─ packages/
│ ├─ agent-core/ # tipos, contratos, estados, eventos
│ ├─ prompts/ # prompts versionados
│ ├─ skills/ # skills por agente
│ ├─ memory/ # adapters para memoria y retrieval
│ ├─ integrations/ # github, slack, whatsapp, email, etc.
│ ├─ db/ # esquemas, migraciones, seeds
│ └─ observability/ # logging, tracing, metrics
│
├─ infra/
│ ├─ docker/ # Dockerfiles
│ ├─ compose/ # docker-compose
│ ├─ nginx/ # reverse proxy config
│ ├─ scripts/ # deploy, backup, healthcheck
│ └─ systemd/ # units opcionales
│
├─ docs/
│ ├─ architecture/
│ ├─ runbooks/
│ ├─ decisions/
│ └─ product/
│
├─ .env.example
├─ pnpm-workspace.yaml
├─ turbo.json
├─ package.json
└─ README.md
11. Stack recomendado
Base
TypeScript
Node.js
pnpm
monorepo con Turborepo
Frontend
Next.js
Backend/API
Fastify o NestJS
preferencia inicial: Fastify si queremos velocidad y menos peso
NestJS si queremos más estructura de enterprise
Base de datos
PostgreSQL
Cola
Redis + BullMQ
Tiempo real
WebSocket o SSE
ORM
Prisma o Drizzle
preferencia inicial: Prisma si buscamos rapidez operativa
Auth
Auth.js, Clerk o auth propia
decisión final depende de si esto será interno o SaaS
Observabilidad
logs JSON estructurados
Sentry o alternativa
OpenTelemetry en fase posterior
Infra
Docker Compose inicialmente
PM2 o systemd para supervisión
Nginx o Caddy como reverse proxy
12. Por qué no usar cron como motor principal
Cron no es el cerebro del sistema. Solo sirve para disparar cosas por horario.
Se puede usar para:
backups
limpieza
resúmenes diarios
health checks
tareas recurrentes simples
No se debe usar para:
revivir prompts
simular persistencia
reconstruir continuidad del sistema
La persistencia debe venir de:
base de datos
cola
event log
checkpoints
artifacts
estado explÃcito
13. Máquina de estados de misión
Cada misión debe existir como una entidad persistente.
Estados propuestos:
NEW
PLANNING
DISPATCHING
RUNNING
WAITING_RESULT
REVIEWING
WAITING_APPROVAL
BLOCKED
FAILED
DONE
CANCELLED
Cada transición debe registrar evento.
14. Event-driven architecture mÃnima
Cada acción importante debe crear eventos.
Ejemplos:
MISSION_CREATED
MISSION_UPDATED
PLAN_GENERATED
TASK_CREATED
TASK_ENQUEUED
TASK_STARTED
TASK_COMPLETED
TASK_FAILED
TASK_RETRIED
APPROVAL_REQUESTED
APPROVAL_GRANTED
APPROVAL_REJECTED
ARTIFACT_CREATED
DEPLOY_REQUESTED
DEPLOY_COMPLETED
DEPLOY_FAILED
Esto permite:
auditorÃa
reconstrucción de contexto
visualización en dashboard
reanudar ejecución
debugging serio
15. Persistencia y memoria
Fuente de verdad principal
Postgres.
Qué se guarda en Postgres
missions
mission_steps
tasks
task_runs
agents
agent_skills
event_log
approvals
budgets
artifacts metadata
prompt_versions
repositories
environments
deployment_runs
Qué se guarda en Redis
jobs
locks
scheduled delays
estado temporal
Qué se guarda como artifacts
reportes markdown
análisis
diffs
snapshots
archivos generados
resultados de investigación
logs exportables
Memoria semántica futura
Podemos agregar un vector store después para:
documentación del sistema
decisiones previas
runbooks
resúmenes históricos
repositorios indexados
Pero el sistema no debe depender de memoria vectorial para saber su estado operativo.
La verdad operativa debe estar estructurada.
16. Subagentes iniciales
1. Orchestrator
Responsabilidades:
interpretar misiones
planear
delegar
priorizar
revisar
decidir siguiente paso
No debe:
hacer todo el trabajo él mismo
tocar producción directamente sin reglas
2. Research Worker
Responsabilidades:
investigar documentación
comparar enfoques
generar briefs técnicos
sintetizar hallazgos
No debe:
desplegar
modificar infra crÃtica
3. Frontend Worker
Responsabilidades:
componentes
UI
accesibilidad
estilos
mejora visual
implementación frontend
4. Backend Worker
Responsabilidades:
API
bases de datos
integraciones
colas
auth
lógica de negocio
5. DevOps Worker
Responsabilidades:
scripts
deploy
entornos
health checks
rollback
mantenimiento
6. PromptOps Worker
Responsabilidades:
mejorar prompts
evaluar handoffs
proponer cambios en instrucciones
mantener calidad entre agentes
No debe:
autopromover cambios a producción sin aprobación
17. Dashboard deseado
El dashboard debe mostrar al menos:
misiones activas
estado actual de cada misión
timeline de eventos
subagentes activos
tareas pendientes
tareas fallidas
aprobaciones pendientes
artifacts recientes
logs resumidos
costos estimados o presupuesto consumido
botón de pausa
botón de cancelar
botón de aprobar/rechazar acciones sensibles
Futuro:
input por voz
transcripción
resumen ejecutivo automático
modo observador
modo ejecución
18. Gobernanza y seguridad
Este sistema puede tocar código, infraestructura y procesos. Por eso necesita lÃmites.
Reglas mÃnimas
toda acción sensible debe clasificarse
algunas acciones requieren aprobación humana
cada misión tiene presupuesto
cada task tiene timeout
cada worker tiene permisos acotados
prod y staging deben separarse
secrets no deben exponerse a workers sin necesidad
logs deben redactar secretos
deploy directo a producción debe estar protegido
Acciones que deben requerir aprobación
Ejemplos:
deploy a producción
borrar datos
modificar secretos
reiniciar servicios crÃticos
migraciones destructivas
cambios irreversibles
acciones con impacto al cliente
19. OpenClaw dentro de la VPS: papel recomendado
Papel recomendado
OpenClaw se usará como:
operador técnico
asistente de mantenimiento
capa agentic auxiliar
interfaz para inspección y ejecución controlada
herramienta de soporte para revisar sistema y preparar cambios
No usar OpenClaw como
fuente única de estado
orquestador maestro final
runtime exclusivo del negocio
mecanismo único de persistencia
agente con poder irrestricto en producción
Integración recomendada
OpenClaw vive como servicio aparte dentro de la VPS y puede:
leer el repo
correr scripts permitidos
inspeccionar logs
preparar cambios
ayudar a desplegar bajo flujo controlado
20. Runtime 24/7
Lo que debe permanecer vivo:
API central
orchestrator
workers
redis
postgres
realtime server
dashboard si se sirve desde la misma VPS
OpenClaw como operador aparte, si se usa
Supervisión sugerida:
PM2 o systemd
opcionalmente Docker Compose
21. Diagrama de separación de responsabilidades
[Humano]
|
v
[Dashboard / Voz]
|
v
[API]
|
v
[Orchestrator]
|
v
[Queue / Redis]
/ | \
/ | \
v v v
[Research] [Backend] [Frontend]
\ | /
\ | /
[Postgres]
|
v
[Events / Artifacts]
--------------------------------------------------
[OpenClaw en VPS]
|
v
[Logs / Scripts / Repo / Ops controlado]
22. Modelo de branches sugerido
main = producción estable
develop = integración
feature/* = nuevas funciones
fix/* = correcciones
ops/* = cambios operativos
prompt/* = cambios de prompts / handoffs
OpenClaw o cualquier agente operador no debe editar main directamente sin flujo definido.
23. Estrategia de despliegue inicial
Fase 1
Una sola VPS, con:
staging lógico y producción ligera
DB en misma VPS
Redis en misma VPS
dashboard + api + workers + OpenClaw
Fase 2
Separar:
staging y production
backups formales
observabilidad más robusta
storage dedicado
CI/CD más serio
24. Scripts esperados
En el repo deben existir scripts como:
pnpm install
pnpm dev
pnpm build
pnpm lint
pnpm test
pnpm db:migrate
pnpm db:deploy
pnpm db:seed
pnpm infra:up
pnpm infra:down
pnpm deploy:staging
pnpm deploy:prod
pnpm healthcheck
pnpm worker:research
pnpm worker:frontend
pnpm worker:backend
pnpm worker:devops
pnpm orchestrator:start
25. Propuesta de tablas mÃnimas
missions
id
title
description
status
priority
created_by
current_step
budget_limit
created_at
updated_at
tasks
id
mission_id
agent_type
title
instructions
status
retries
timeout_seconds
requires_approval
created_at
updated_at
task_runs
id
task_id
worker_name
input_payload
output_payload
started_at
finished_at
status
error_message
event_log
id
mission_id
task_id
event_type
payload
created_at
approvals
id
mission_id
task_id
action_type
requested_by
status
approved_by
created_at
resolved_at
artifacts
id
mission_id
task_id
artifact_type
path_or_url
metadata
created_at
prompt_versions
id
agent_type
version
prompt_text
status
notes
created_at
26. Fases del proyecto
Fase 0 — Fundación
Objetivo:
dejar el repositorio creado
definir arquitectura
preparar entorno local y VPS
decidir stack
crear contratos y estructura base
Entregables:
repo inicial
monorepo configurado
README
ADRs iniciales
.env.example
docker-compose base
DB base
Redis base
Fase 1 — Runtime mÃnimo viable
Objetivo:
tener sistema vivo y observable
Entregables:
dashboard básico
API básica
orchestrator mÃnimo
queue
2 workers iniciales
persistencia de misiones, tasks y eventos
panel de visualización inicial
Fase 2 — Sistema usable
Objetivo:
flujo completo misión → delegación → resultado
Entregables:
approvals
artifacts
retries
scheduler
workers backend/frontend/research
trazabilidad
seguridad mÃnima
Fase 3 — Operación real
Objetivo:
usarlo para trabajo real de Web Mentor
Entregables:
integración con repos reales
flujo controlado de cambios
runbooks
budgets
logs de negocio
mejoras continuas
Fase 4 — Escalamiento
Objetivo:
preparar para multi-proyecto o SaaS
Entregables:
multi-tenant conceptual
separación entornos
billing conceptual
roles/permisos
mayor robustez infra
27. Qué pasos hacer en el repositorio
Paso 1
Crear el monorepo base.
Paso 2
Configurar:
pnpm workspace
typescript
turbo
linting
prettier
variables de entorno
Paso 3
Crear apps:
dashboard
api
Paso 4
Crear services:
orchestrator
worker-research
worker-frontend
worker-backend
Paso 5
Crear packages:
agent-core
db
prompts
skills
integrations
Paso 6
Levantar Postgres y Redis.
Paso 7
Definir esquema mÃnimo de base de datos.
Paso 8
Implementar flujo:
create mission
create tasks
enqueue
process
write events
update dashboard
Paso 9
Agregar approvals.
Paso 10
Agregar artifacts.
28. Qué pasos hacer en OpenClaw
Objetivo
Configurar OpenClaw como operador técnico de la VPS.
Acciones
validar que esté estable en la VPS
definir qué comandos/scripts puede ejecutar
apuntarlo al nuevo repositorio
crear skills/runbooks especÃficos
limitar acciones sensibles
usarlo para:
inspección
mantenimiento
soporte
preparación de cambios
ayuda en deploy
No hacer
no usarlo como fuente de verdad del estado del negocio
no dejarlo deployar producción sin controles
no darle rol de orquestador principal del producto
29. Qué necesitamos del equipo para ejecutar este proyecto
Infraestructura
acceso a la VPS o detalles completos
sistema operativo
RAM
CPU
disco
puertos abiertos
dominio/subdominios disponibles
método de despliegue actual
Producto
definir primer caso de uso real
definir primera misión real que resolverá el sistema
definir qué agentes son prioritarios
definir qué acciones requieren aprobación
Seguridad
decidir manejo de secrets
decidir quién puede aprobar deploys
decidir separación staging/prod
decidir si OpenClaw tendrá acceso root o usuario limitado
Desarrollo
decidir stack final entre opciones sugeridas
elegir naming del proyecto
definir convenciones de branch
definir repositorio base
definir si el dashboard será interno o futuro SaaS
30. Primer caso de uso recomendado
No arrancar con "haga todo".
Arrancar con algo concreto como:
Caso de uso recomendado inicial:
"Recibir una misión de mejora del sistema, investigar lo necesario, proponer cambios en frontend o backend, registrar artifacts y dejar lista una propuesta de ejecución o branch."
Esto permite validar:
orquestación
tareas
research
backend/frontend
dashboard
artifacts
approvals
sin intentar automatizar todo desde el dÃa uno.
31. Criterios de éxito
El sistema será exitoso cuando:
pueda recibir una misión real
pueda dividirla en tareas
pueda asignarlas a subagentes
pueda registrar todo en DB
pueda mostrar estado en dashboard
pueda continuar tras reinicio
pueda pedir aprobación donde corresponde
pueda completar flujo real sin depender de memoria conversacional manual
32. Errores que debemos evitar
construir un agente omnipotente sin lÃmites
mezclar desarrollo, orquestación y operación en una sola capa
usar prompts largos como única memoria
dejar que todo viva en una sola terminal
intentar resolver multi-agent + infra + voz + auto-deploy en el primer sprint
depender demasiado de OpenClaw como núcleo del negocio
33. Roadmap inmediato recomendado
Sprint 1
crear repo
configurar monorepo
configurar db + redis
crear dashboard base
crear API base
crear esquema de misiones y tasks
Sprint 2
crear orchestrator mÃnimo
crear cola
crear worker-research
crear worker-frontend o backend
mostrar timeline de eventos
Sprint 3
approvals
artifacts
retries
estados completos
Sprint 4
integrar OpenClaw como operador
scripts de mantenimiento
flujo controlado de cambios
health checks
deploy staging
34. Instrucciones para Opus 4.6 / agente planificador
Usa este README como documento fundacional del proyecto.
Tu tarea no es reinventar la visión, sino traducir esta arquitectura en un plan de implementación extremadamente práctico.
Lo que debes hacer
respetar esta arquitectura
descomponer el trabajo en fases y tareas concretas
proponer estructura exacta de archivos
proponer contratos entre orchestrator, queue y workers
proponer esquema inicial de base de datos
proponer endpoints API
proponer flujo de eventos
proponer primeros workers
proponer estrategia de despliegue en VPS
proponer guardrails y approvals
proponer orden de implementación óptimo
detectar ambigüedades y resolverlas de forma pragmática
Lo que no debes hacer
convertir OpenClaw en el núcleo del sistema
diseñar un sistema basado en conversación infinita
proponer un stack innecesariamente complejo para fase inicial
asumir Kubernetes o microservicios pesados desde el principio
depender de memoria no estructurada como estado operativo
Resultado esperado
Genera un plan de desarrollo detallado, por fases, con:
prioridades
dependencias
estructura del repo
definición de servicios
tareas técnicas
riesgos
decisiones a validar con el equipo
35. Estado de este README
Este README debe evolucionar, pero por ahora es la fuente fundacional de decisiones para arrancar el repositorio y el plan técnico.
36. Próximos archivos sugeridos
Después de este README, los siguientes archivos recomendados son:
docs/decisions/0001-system-architecture.md
docs/decisions/0002-openclaw-role.md
docs/decisions/0003-runtime-and-persistence.md
docs/product/PROJECT_PLAN.md
docs/architecture/EVENT_MODEL.md
docs/architecture/DATA_MODEL.md
docs/architecture/API_SPEC.md
docs/runbooks/DEPLOYMENT.md
docs/runbooks/OPENCLAW_OPERATIONS.md
37. Resumen ejecutivo final
Este proyecto busca crear un sistema operativo de agentes propio para Web Mentor.
La base correcta no es un prompt infinito ni un framework externo como núcleo del negocio. La base correcta es un runtime propio con:
orchestrator
workers especializados
cola
estado persistente
dashboard
approvals
observabilidad
OpenClaw puede vivir en la VPS y aportar valor real, pero como operador técnico del sistema, no como el cerebro central del negocio.
El activo estratégico debe ser el repositorio y runtime propio de Web Mentor.
---
## 38. Operación Docker en VPS (quickstart validado)
Se validó que este repo ya está listo para operar con Docker Compose desde terminal de operaciones.
### Comandos base
```bash
# desde la raÃz del repo
cp -n .env.example .env
# levantar stack local de desarrollo (api, dashboard, orchestrator, worker, postgres, redis)
docker compose -f infra/compose/docker-compose.dev.yml up -d --build
# estado de contenedores
docker compose -f infra/compose/docker-compose.dev.yml ps
# logs
docker compose -f infra/compose/docker-compose.dev.yml logs -f
# healthcheck funcional
bash infra/scripts/check-services.sh
# bajar stack
docker compose -f infra/compose/docker-compose.dev.yml down- Debe existir
.env(puede copiarse de.env.example). - El usuario operativo debe tener permisos sobre Docker daemon (
/var/run/docker.sock). - Si no hay permisos del socket, Docker fallará con
permission denied.
En entornos sin permisos Docker para el usuario actual, aparece:
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
Acción recomendada en VPS:
sudo usermod -aG docker $USER
newgrp docker
# o re-login de sesiónLuego reintentar docker compose ... up -d --build.
Esta es la secuencia recomendada para que OpenClaw arranque el entorno de desarrollo en una VPS donde Docker ya existe.
# 1) Entrar al repo en la VPS
cd /home/santiago/projects/multiagent
# 2) Instalar dependencias
pnpm install --frozen-lockfile
# 3) Asegurar variables
cp -n .env.example .env
# 4) Levantar infraestructura y servicios del stack dev
pnpm infra:up
# 5) Ejecutar migraciones
pnpm db:deploy
# 6) Verificar estado y salud
./infra/scripts/check-services.sh
pnpm healthcheck
# 7) Revisar logs recientes
./infra/scripts/check-logs.sh 200- Dashboard:
http://<IP_VPS>:3000 - API Health:
http://<IP_VPS>:3001/api/v1/health
Si no quieres exponer puertos públicos, usa túnel SSH desde tu máquina local:
ssh -L 3000:localhost:3000 -L 3001:localhost:3001 <usuario>@<IP_VPS>Luego abre:
http://localhost:3000http://localhost:3001/api/v1/health
- OpenClaw debe usar scripts existentes del repo antes que comandos improvisados.
deploy:staginges un flujo distinto dedev; no mezclar ambos en la misma validación.- Si el healthcheck falla, revisar primero logs de
api,orchestratoryworker-research.
Para validar el dashboard contra datos reales, OpenClaw no debe usar mock-api.mjs.
- Levantar backend real en VPS con el flujo anterior (
pnpm infra:up+pnpm db:deploy). - Confirmar health real de API:
curl http://localhost:3001/api/v1/health. - Elegir una de estas dos formas de ver dashboard:
# Opcion A: dashboard ejecutandose en la VPS
# abrir desde navegador: http://<IP_VPS>:3000
# Opcion B: dashboard ejecutandose en local apuntando a API de la VPS
# PowerShell (sesion actual)
$env:NEXT_PUBLIC_API_URL = "http://<IP_VPS>:3001"
npx pnpm --filter @wm/dashboard dev- Verificar que las pantallas cargan sin mock:
http://localhost:3000/missions(si corres dashboard local)http://<IP_VPS>:3000/missions(si corres dashboard en VPS)
Resumen de lo que pasó y cómo se resolvió:
- Se crearon varias misiones de validación (
Realtime validation mission ...) y una misión demo final:cmmsitezk000iqn0zec7hqj73(Demo flujo multiagente en vivo).
- Al principio, el flujo fallaba en
PLANNING/RESEARCHpor credencial inválida de Anthropic (401 invalid x-api-key). - Se detectó que en
.envhabÃa placeholder (sk-ant-...) en vez de key real. - Tras corregir key y recrear servicios, se validó conectividad directa a Anthropic con
HTTP 200. - El flujo multiagente volvió a correr (eventos
MISSION_CREATED->MISSION_PLANNING->PLAN_GENERATED->TASK_ENQUEUED->TASK_STARTED).
Checklist rápido:
# 1) confirmar en API (fuente de verdad)
curl 'http://localhost:3001/api/v1/missions?limit=20'
# 2) confirmar que dashboard consulta al API correcto
docker compose -f infra/compose/docker-compose.dev.yml logs --tail=80 dashboard api
# 3) recargar duro navegador (cache SSR/client)
# Ctrl+Shift+RNota: si los logs muestran +29 lines o fragmentos truncados, eso suele ser compactación del visor/salida, no necesariamente error SQL real.
docker compose -f infra/compose/docker-compose.dev.yml logs -f api orchestrator worker-research dashboardCausa: las páginas SSR de detalle estaban usando NEXT_PUBLIC_API_URL (que en contenedor puede resolver a localhost incorrecto).
Fix: usar fallback interno en server-side pages del dashboard:
const API_URL = process.env.API_INTERNAL_URL ?? process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:3001";Archivos corregidos:
apps/dashboard/src/app/missions/[id]/page.tsxapps/dashboard/src/app/missions/[id]/tasks/[taskId]/page.tsx
Se agregó notificación automática desde orchestrator para estados clave:
FAILEDREVIEWING
Variables requeridas en .env:
TELEGRAM_BOT_TOKEN=<token del bot>
TELEGRAM_CHAT_ID=<chat id destino>Implementación:
services/orchestrator/src/telegram.ts- hooks en
services/orchestrator/src/main.tsyservices/orchestrator/src/state-machine.ts
Se repitió la prueba desde cero para validar visibilidad en dashboard y dejar trazabilidad para Copilot:
- Se creó misión por API:
id=cmmskccar000oqn0zkrlfk74atitle="Dashboard visible check 20260316T022716Z"
- Se verificó en API (
GET /api/v1/missions?limit=20) que la misión existe y evoluciona de estado. - Se verificó en SSR del dashboard (
GET /missions) que aparece en la tabla con link directo:/missions/cmmskccar000oqn0zkrlfk74a
- Se verificó en logs:
api:POST /api/v1/missions->201dashboard:GET /missions->200orchestrator:Planning mission... missionId=cmmskccar000oqn0zkrlfk74a
Comandos exactos usados en la verificación:
curl -s -X POST http://localhost:3001/api/v1/missions \
-H 'content-type: application/json' \
-d '{"title":"Dashboard visible check 20260316T022716Z","description":"Reintento final de verificación visual en dashboard","priority":10,"createdBy":"german"}'
curl -s 'http://localhost:3001/api/v1/missions?limit=20'
curl -s http://localhost:3000/missions
docker compose -f infra/compose/docker-compose.dev.yml logs --since=3m --tail=120 api dashboard orchestrator- Refactorización de UI: Se eliminó toda la lógica, rutas y dependencias relacionadas con Approvals (aprobaciones humanas) para simplificar el flujo hacia un sistema puramente automatizado. Modificamos colores de formularios para respetar los temas visuales.
- Mobile Responsiveness: Se agregaron reglas responsivas en
globals.csspara que el dashboard sea navegable en celulares. - Estabilización del build en Next.js: Se corrigieron errores 500 y caÃdas en tiempo de build provocadas por la ausencia de estática de
API_URL. Ahora todas las rutas inyectan los fallbacks resilientes. Se eliminó la caché problemática de Next. - Limpieza de filtros: Se retiró el filtrado manual por fechas y su paso por URL querystrings, el cual causaba cuelgues. Las misiones ahora se ordenan de más recientes a antiguas de manera automática en el mapeo inicial.
Hola OpenClaw, soy tu colega Copilot. Hemos dejado el entorno de UI local limpio y estable. Tus siguientes tareas operativas (como Operador Técnico Residente) son:
- Despliegue a Staging / Prod: Aplica estos cambios usando el pipeline (ej.
pnpm deploy:frontendo los scripts en./infra/scripts/). - Revisión de Salud: Valida que
pnpm --filter dashboard buildlevante de modo sano en la VPS (puedes requerir borrar el directorio.nextsi hubo builds corruptos anteriores). - Monitoreo Cero Errores: Al reiniciar los servicios, vigila los logs (
docker compose logs -f dashboard). No deben registrarse colapsos estáticos ni "Missing API URL". - Resumir Hallazgos: Ejerce tus principios para reportar si los contenedores se estabilizaron exitosamente con los cambios UI de hoy.
Se ha implementado un polling cycle hacia la API de Telegram (getUpdates) directamente en el loop principal del orchestrator (tick()). Ahora el sistema puede recibir mensajes. Si el mensaje proviene del TELEGRAM_CHAT_ID configurado y comienza con /tarea <descripción> o /mission <descripción>, se crea automáticamente una nueva misión en la base de datos (con estado NEW y prioridad 50). El sistema la recogerá y comenzará a planificarla al instante para inyectarla en el dashboard.
Hola OpenClaw. Hemos habilitado la ingesta de inputs desde Telegram:
- Verificación de Entorno: Confirma que las variables
TELEGRAM_BOT_TOKENyTELEGRAM_CHAT_IDsiguen configuradas correctamente en los secrets de producción/staging para que el orchestrator esté autorizado a leer los updates del bot. - Despliegue y Reinicio: Ejecuta
./infra/scripts/restart-workers.sh(o el pipeline respectivo) para reiniciar elservices/orchestratory que asuma el nuevo código de repeticiónPromise.all([tick(), pollTelegramUpdates()]). - Validar Funcionamiento: Escribe un mensaje de prueba a tu bot de Telegram como:
/tarea Revisar logs del sistema. Revisa el log de orchestrator (docker compose logs -f orchestrator) o el propio dashboard para verificar la recepción del payload y su auto-planificación.