#!/bin/bash # Ajusta SOLO el DoD para mantenerlo coherente con los prompts del usuario hacia # el objetivo. El OBJETIVO es fijo (identificativo de la terminal) y NUNCA se # toca aqui. Lo lanza goal_tracker.sh en background (no bloquea). Usa ask_llm # (haiku, API directa; nunca `claude -p`, ver regla llm_invocation.md). # # Args: SID="$1" F="$2" [ -f "$F" ] || exit 0 PY="$HOME/fn_registry/python/.venv/bin/python3" ASK="$HOME/fn_registry/python/functions/core/ask_llm.py" [ -x "$PY" ] || exit 0 [ -f "$ASK" ] || exit 0 GOAL=$(jq -r '.goal // ""' "$F" 2>/dev/null) [ -z "$GOAL" ] && exit 0 DOD=$(jq -r '.dod // ""' "$F" 2>/dev/null) PROMPTS=$(jq -r '(.prompts // []) | to_entries | map("\(.key+1). \(.value)") | join("\n")' "$F" 2>/dev/null) [ -z "$PROMPTS" ] && exit 0 SYS="Dado un OBJETIVO fijo de una terminal de trabajo y los prompts del usuario, define o ajusta el DoD (definition of done): la condicion concreta de 'terminado' para ese objetivo, coherente con lo que el usuario va pidiendo. El OBJETIVO no se toca, solo el DoD. Responde SOLO JSON en una linea, sin markdown: {\"dod\":\"...\"}. dod en espanol, breve, maximo 9 palabras. Si el DoD actual ya es adecuado, devuelvelo igual." PROMPT="OBJETIVO (fijo, no lo cambies): ${GOAL} DoD ACTUAL: ${DOD} PROMPTS DEL USUARIO (orden cronologico): ${PROMPTS} Responde el JSON con el DoD:" RAW=$("$PY" "$ASK" --system "$SYS" "$PROMPT" 2>/dev/null) [ -z "$RAW" ] && exit 0 JSON=$(printf '%s' "$RAW" | tr '\n' ' ' | grep -o '{[^{}]*}' | head -1) [ -z "$JSON" ] && exit 0 ND=$(printf '%s' "$JSON" | jq -r '.dod // ""' 2>/dev/null) [ -z "$ND" ] && exit 0 TMP="${F}.tmp.$$" if jq --arg d "$ND" '.dod=$d' "$F" > "$TMP" 2>/dev/null; then mv "$TMP" "$F" else rm -f "$TMP" fi exit 0