#!/usr/bin/env bash # new-agent.sh — genera el scaffold de un nuevo agente # # Uso: # ./dev-scripts/agent/new-agent.sh [displayname] # # Ejemplo: # ./dev-scripts/agent/new-agent.sh monitor-bot "Monitor Agent" # # Crea: # agents//config.yaml (basado en el assistant como plantilla) # agents//agent.go (reglas puras vacías, listo para extender) # agents//prompts/ (directorio para system prompt) # agents//data/ (directorio de datos, en .gitignore) # # También te recuerda los dos pasos manuales que quedan. source "$(dirname "$0")/../_common.sh" load_env need_arg "${1:-}" ID="$1" DISPLAYNAME="${2:-$ID}" PACKAGE="$(echo "$ID" | tr '-' '_' | sed 's/_bot//')" # "monitor-bot" → "monitor" NORM="$(normalize_id "$ID")" # "monitor-bot" → "MONITOR_BOT" DIR="agents/$ID" [[ -d "$DIR" ]] && fail "Ya existe agents/$ID — ¿ya fue creado?" info "Creando scaffold para $ID..." mkdir -p "$DIR/prompts" "$DIR/data" # ── config.yaml ──────────────────────────────────────────────────────────── cat > "$DIR/config.yaml" < "$DIR/agent.go" < "$DIR/prompts/system.md" </dev/null; then warn "$ID ya está en rulesRegistry de $LAUNCHER — saltando" else TAB=$'\t' IMPORT_LINE="${TAB}${PACKAGE}agent \"github.com/enmanuel/agents/agents/$ID\"" REGISTRY_LINE="${TAB}\"$ID\": ${PACKAGE}agent.Rules," # Insertar import después del último import agents/agents/* if awk -v new_import="$IMPORT_LINE" ' { lines[NR] = $0 if ($0 ~ /[a-z_]+agent "github\.com\/enmanuel\/agents\/agents\/[^"]+"/) last_import = NR } END { if (!last_import) { for (i=1;i<=NR;i++) print lines[i]; exit 1 } for (i = 1; i <= NR; i++) { print lines[i] if (i == last_import) print new_import } } ' "$LAUNCHER" > /tmp/_launcher_tmp; then mv /tmp/_launcher_tmp "$LAUNCHER" ok "Import añadido en $LAUNCHER" else warn "No se pudo insertar el import automáticamente — añádelo manualmente:" echo -e " ${GRN}${IMPORT_LINE}${RST}" fi # Insertar entry en rulesRegistry antes del cierre } if awk -v new_entry="$REGISTRY_LINE" ' /^var rulesRegistry/ { in_reg = 1 } in_reg && /^\}/ { print new_entry; in_reg = 0 } { print } ' "$LAUNCHER" > /tmp/_launcher_tmp; then mv /tmp/_launcher_tmp "$LAUNCHER" ok "Registry entry añadida en $LAUNCHER" else warn "No se pudo insertar el registry entry — añádelo manualmente:" echo -e " ${GRN}${REGISTRY_LINE}${RST}" fi fi echo "" echo -e "${YLW}Quedan 3 pasos:${RST}" echo "" echo -e " ${DIM}1. ./dev-scripts/agent/register.sh $ID \"$DISPLAYNAME\"${RST} # registra en Matrix + genera token, password, pickle key" echo -e " ${DIM}2. ./dev-scripts/agent/verify.sh $ID${RST} # genera cross-signing keys + verifica device" echo -e " ${DIM}3. ./dev-scripts/server/start.sh $ID${RST} # arranca el agente" echo ""