netgescon-day0/scripts/ops/antigravity-cli/run_205_followup_via_agy.sh

89 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
export PATH="$PATH:$HOME/.local/bin"
unset ANTIGRAVITY_LS_ADDRESS ANTIGRAVITY_CSRF_TOKEN ANTIGRAVITY_AGENT
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
TEMPLATE_FILE="$SCRIPT_DIR/205_followup_prompt.template.txt"
PARSER_SCRIPT="$SCRIPT_DIR/parse_205_runner_output.py"
MODEL="gemini-3.6-flash-high"
MODE="${AGY_MODE:-plan}"
PRINT_TIMEOUT="${AGY_PRINT_TIMEOUT:-20m}"
if command -v agy-ultra &>/dev/null; then
EXEC_BIN="agy-ultra"
elif command -v agy &>/dev/null; then
EXEC_BIN="agy"
else
echo "ERROR: agy CLI binary not found in PATH" >&2
exit 1
fi
INPUT_TEXT=""
if [ ! -t 0 ]; then
INPUT_TEXT="$(cat -)"
fi
if [ -f "$TEMPLATE_FILE" ]; then
TEMPLATE_CONTENT="$(cat "$TEMPLATE_FILE")"
if [ -n "$INPUT_TEXT" ]; then
if [[ "$TEMPLATE_CONTENT" == *"{TASK_INPUT}"* ]]; then
PROMPT="${TEMPLATE_CONTENT//\{TASK_INPUT\}/$INPUT_TEXT}"
else
PROMPT="${TEMPLATE_CONTENT}"$'\n\n'"${INPUT_TEXT}"
fi
else
PROMPT="${TEMPLATE_CONTENT}"
fi
else
if [ -n "$INPUT_TEXT" ]; then
PROMPT="$INPUT_TEXT"
else
PROMPT="Leggi AGENTS.md e CURRENT-205.md, verifica lo stato del sistema e rispondi con l'esito del task nel formato standard 205."
fi
fi
set +e
RAW_OUTPUT="$(
"$EXEC_BIN" -p "$PROMPT" \
--model "$MODEL" \
--mode "$MODE" \
--print-timeout "$PRINT_TIMEOUT" \
--add-dir "$REPO_DIR" 2>&1
)"
AGY_EXIT=$?
set -e
if [[ $AGY_EXIT -ne 0 ]]; then
printf '%s\n' "$RAW_OUTPUT" >&2
exit "$AGY_EXIT"
fi
if [[ -z "${RAW_OUTPUT//[[:space:]]/}" ]]; then
echo "ERROR: agy produced empty output" >&2
exit 1
fi
LOWER_OUTPUT="$(echo "$RAW_OUTPUT" | tr '[:upper:]' '[:lower:]')"
if [[ "$LOWER_OUTPUT" == *"jetski: no output produced"* ]] || \
[[ "$LOWER_OUTPUT" == *"quota reached"* ]] || \
[[ "$LOWER_OUTPUT" == *"permission auto-denied"* ]]; then
echo "ERROR: agy output contains invalid execution condition (jetski/quota/permission)" >&2
printf '%s\n' "$RAW_OUTPUT" >&2
exit 1
fi
REAL_REPO="$(git -C "$REPO_DIR" config --get remote.origin.url)"
REAL_BRANCH="$(git -C "$REPO_DIR" rev-parse --abbrev-ref HEAD)"
REAL_COMMIT="$(git -C "$REPO_DIR" rev-parse HEAD)"
set +e
PARSER_OUT="$(python3 "$PARSER_SCRIPT" --expected-repo "$REAL_REPO" --expected-branch "$REAL_BRANCH" --expected-commit "$REAL_COMMIT" <<< "$RAW_OUTPUT")"
PARSER_EXIT=$?
set -e
printf '%s\n' "$PARSER_OUT"
exit $PARSER_EXIT