e481cb8783
Implementa issue 0025: catálogo central de automatizaciones cron y scaffolder.
- crons/: directorio de automatizaciones nombradas con README explicando la
convención. Incluye dos ejemplos listos para usar:
· good-morning (send_message, 0 9 * * *) — saludo diario
· daily-summary (llm_prompt, 0 18 * * *) — resumen generado por LLM
- dev-scripts/cron/new.sh: scaffolder interactivo — pregunta nombre,
descripción, tipo de acción y cron expression; crea schedule.yaml +
archivo de prompt vacío; imprime el bloque YAML para copiar en config.yaml.
- dev-scripts/cron/list.sh: lista todas las automatizaciones del catálogo
con nombre, tipo, cron y descripción en formato tabular.
- dev-scripts/cron/apply.sh: añade la automatización al config.yaml del
agente indicado usando yq si está disponible; si no, imprime el bloque
YAML para copiar a mano (sin dependencias obligatorias).
- shell/cron/scheduler.go: exporta Fire(ctx, sc) para disparo inmediato
de un schedule sin esperar al timer cron — útil en tests y CLI.
- shell/cron/scheduler_test.go: cuatro tests nuevos para Fire()
(send_message inline, llm_prompt, sin output_room, sin LLM).
TestScheduler_SkipsInvalidSchedule y TestFire_LLMPrompt_NoLLM_Skips
reemplazados por versiones instantáneas usando Fire en lugar de
@every 100ms + sleep, eliminando ~700ms de tiempo de test.
74 lines
2.1 KiB
Markdown
74 lines
2.1 KiB
Markdown
# crons/ — Catálogo de automatizaciones
|
|
|
|
Directorio central de automatizaciones nombradas para los agentes. Cada subdirectorio es una
|
|
automatización reutilizable que puede aplicarse a uno o más agentes.
|
|
|
|
## Estructura de una automatización
|
|
|
|
```
|
|
crons/<nombre>/
|
|
schedule.yaml # spec: descripción, cron por defecto, acción
|
|
prompts/
|
|
message.md # plantilla de mensaje (send_message)
|
|
prompt.md # prompt para el LLM (llm_prompt)
|
|
```
|
|
|
|
## Convención de `schedule.yaml`
|
|
|
|
```yaml
|
|
# Metadata
|
|
name: nombre-de-la-automatizacion
|
|
description: "Descripción breve"
|
|
|
|
# Cron por defecto (el agente puede sobreescribir en su config.yaml)
|
|
default_cron: "0 9 * * *"
|
|
|
|
# Acción
|
|
action:
|
|
kind: send_message # send_message | llm_prompt
|
|
template: prompts/message.md # relativo a la raíz del proyecto
|
|
|
|
# Sala por defecto (opcional; el agente debe sobreescribir con output_room)
|
|
default_output_room: ""
|
|
```
|
|
|
|
> **Nota**: `template` es relativo a la **raíz del proyecto**, no a la carpeta de la automatización.
|
|
> Usa siempre la ruta completa desde la raíz: `crons/<nombre>/prompts/message.md`.
|
|
|
|
## Automatizaciones disponibles
|
|
|
|
| Nombre | Tipo | Cron por defecto | Descripción |
|
|
|--------|------|-----------------|-------------|
|
|
| `good-morning` | `send_message` | `0 9 * * *` | Saludo de buenos días |
|
|
| `daily-summary` | `llm_prompt` | `0 18 * * *` | Resumen diario del equipo |
|
|
|
|
## Scripts de gestión
|
|
|
|
```bash
|
|
# Crear nueva automatización (interactivo)
|
|
./dev-scripts/cron/new.sh
|
|
|
|
# Listar todas las automatizaciones con descripción
|
|
./dev-scripts/cron/list.sh
|
|
|
|
# Aplicar automatización a un agente (parchea config.yaml)
|
|
./dev-scripts/cron/apply.sh <nombre> <agent-id>
|
|
```
|
|
|
|
## Cómo añadir manualmente a un agente
|
|
|
|
En `agents/<id>/config.yaml`:
|
|
|
|
```yaml
|
|
schedules:
|
|
- name: good-morning
|
|
cron: "0 9 * * *"
|
|
output_room: "!TUROOM:matrix-af2f3d.organic-machine.com"
|
|
action:
|
|
kind: send_message
|
|
template: "crons/good-morning/prompts/message.md"
|
|
```
|
|
|
|
Ajusta `output_room` con la sala real del agente. El campo `cron` puede sobreescribir el
|
|
`default_cron` del catálogo.
|