#!/usr/bin/env bash # new.sh — Scaffolder interactivo para automatizaciones cron # Crea crons//schedule.yaml y el archivo de prompt/mensaje vacío. set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" echo "=== Nueva automatización cron ===" echo "" # Nombre read -rp "Nombre de la automatización (ej: weekly-report): " NAME NAME="${NAME// /-}" NAME="${NAME,,}" # lowercase if [[ -z "$NAME" ]]; then echo "Error: el nombre no puede estar vacío." >&2 exit 1 fi if [[ -d "$REPO_ROOT/crons/$NAME" ]]; then echo "Error: ya existe crons/$NAME/" >&2 exit 1 fi # Descripción read -rp "Descripción breve: " DESCRIPTION if [[ -z "$DESCRIPTION" ]]; then echo "Error: la descripción no puede estar vacía." >&2 exit 1 fi # Tipo de acción echo "" echo "Tipo de acción:" echo " 1) send_message — envía un mensaje estático o plantilla" echo " 2) llm_prompt — llama al LLM con un prompt y envía la respuesta" read -rp "Selecciona [1/2]: " ACTION_TYPE_NUM case "$ACTION_TYPE_NUM" in 1) ACTION_KIND="send_message"; PROMPT_FILE="message.md" ;; 2) ACTION_KIND="llm_prompt"; PROMPT_FILE="prompt.md" ;; *) echo "Error: selección inválida. Usa 1 o 2." >&2 exit 1 ;; esac # Cron expression DEFAULT_CRON="0 9 * * *" read -rp "Cron expression [default: $DEFAULT_CRON]: " CRON_EXPR CRON_EXPR="${CRON_EXPR:-$DEFAULT_CRON}" # Crear estructura CRON_DIR="$REPO_ROOT/crons/$NAME" PROMPTS_DIR="$CRON_DIR/prompts" mkdir -p "$PROMPTS_DIR" # schedule.yaml cat > "$CRON_DIR/schedule.yaml" </config.yaml:" echo "" echo " schedules:" echo " - name: $NAME" echo " cron: \"$CRON_EXPR\"" echo " output_room: \"!TUROOM:matrix-af2f3d.organic-machine.com\"" echo " action:" echo " kind: $ACTION_KIND" echo " template: \"crons/$NAME/prompts/$PROMPT_FILE\"" echo "" echo "O usa: ./dev-scripts/cron/apply.sh $NAME "