98 lines
2.6 KiB
Bash
Executable File
98 lines
2.6 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}"
|
|
AGY_LOG_FILE="${AGY_LOG_FILE:-}"
|
|
|
|
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
|
|
|
|
CMD_ARGS=(
|
|
-p "$PROMPT"
|
|
--model "$MODEL"
|
|
--mode "$MODE"
|
|
--print-timeout "$PRINT_TIMEOUT"
|
|
--add-dir "$REPO_DIR"
|
|
)
|
|
|
|
if [ -n "$AGY_LOG_FILE" ]; then
|
|
CMD_ARGS+=(--log-file "$AGY_LOG_FILE")
|
|
fi
|
|
|
|
set +e
|
|
RAW_OUTPUT="$(
|
|
"$EXEC_BIN" "${CMD_ARGS[@]}" 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
|