mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
44 lines
1.5 KiB
Bash
44 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|||
|
|
# Smoke: bash-guard denial message is <= 3 lines (was 8+).
|
||
|
|
# Smoke run 3 (2026-05-12) showed agents getting an 8-line refusal on
|
||
|
|
# every blocked shell-git op. Tighter messages save tokens on retries.
|
||
|
|
set -e
|
||
|
|
|
||
|
|
cd "$(dirname "$0")/../.."
|
||
|
|
|
||
|
|
HOOK=docker/scripts/bash-guard-hook.sh
|
||
|
|
|
||
|
|
# Count lines in the longest heredoc denial block (cat <<'EOF' ... EOF style).
|
||
|
|
# The first git-network denial used a heredoc; awk counts echo-or-content
|
||
|
|
# lines inside it.
|
||
|
|
HEREDOC_LINES=$(awk '
|
||
|
|
/cat <<'"'"'EOF'"'"'/ { in_block = 1; count = 0; next }
|
||
|
|
in_block && /^EOF$/ { print count; in_block = 0; count = 0; next }
|
||
|
|
in_block { count++ }
|
||
|
|
END { if (in_block && count > 0) print count }
|
||
|
|
' "$HOOK" | sort -n | tail -1)
|
||
|
|
|
||
|
|
# Also count contiguous echo-based denial blocks (other denial paths).
|
||
|
|
ECHO_LINES=$(awk '
|
||
|
|
/Denied/ { in_block = 1; count = 0 }
|
||
|
|
in_block && /^[[:space:]]*echo/ { count++ }
|
||
|
|
in_block && /^[[:space:]]*$/ && count > 0 { print count; in_block = 0; count = 0 }
|
||
|
|
END { if (in_block && count > 0) print count }
|
||
|
|
' "$HOOK" | sort -n | tail -1)
|
||
|
|
|
||
|
|
MAX_LINES=0
|
||
|
|
[[ -n "$HEREDOC_LINES" && "$HEREDOC_LINES" -gt "$MAX_LINES" ]] && MAX_LINES=$HEREDOC_LINES
|
||
|
|
[[ -n "$ECHO_LINES" && "$ECHO_LINES" -gt "$MAX_LINES" ]] && MAX_LINES=$ECHO_LINES
|
||
|
|
|
||
|
|
if [ "$MAX_LINES" -eq 0 ]; then
|
||
|
|
echo "FAIL: could not find any denial message block in $HOOK"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "$MAX_LINES" -gt 3 ]; then
|
||
|
|
echo "FAIL: bash-guard denial message has $MAX_LINES lines (max 3)"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "PASS: denial message has $MAX_LINES lines"
|