4b3c5ca905
* rename agent key to opencode and add skill invocation coverage. add skill-invoke tests for claude and opencode with local play-based validation signals, update CI matrices, and include the current tracked refactors in this branch for review. Made-with: Cursor * exclude agent-specific skill-invoke tests from wrong agent in CI matrix * address review follow-up and preserve workflow run UI tweak. switch changed-agents ci coverage to exercise the opentoad implementation path while keeping the opencode expectation, and include the local workflow run client interaction updates requested on this branch. Made-with: Cursor * remove opentoad agent filename from runtime. rename the opencode harness implementation file from opentoad.ts to opencode.ts and update ci coverage input accordingly so action code no longer carries the old filename. Made-with: Cursor * ensure security prompt bypass is set on every test fixture. this keeps adversarial and permissions harnesses from being blocked by the default prompt-injection refusal path during CI security tests. Made-with: Cursor --------- Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
71 lines
2.0 KiB
Bash
Executable File
71 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# determines which agents need testing based on changed files.
|
|
# reads changed file paths from stdin (JSON array or newline-delimited).
|
|
# outputs a JSON array of agent names to stdout.
|
|
#
|
|
# only agents whose harness file changed AND are exported from index.ts are included.
|
|
# shared.ts/index.ts and other non-harness action changes fall back to opencode as a canary.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
AGENTS_INDEX="$SCRIPT_DIR/../agents/index.ts"
|
|
|
|
# build the set of active agents from index.ts imports (portable, no -P)
|
|
active_agents=()
|
|
while IFS= read -r line; do
|
|
[[ -n "$line" ]] && active_agents+=("$line")
|
|
done < <(sed -n 's/.*from "\.\/\([^"]*\)\.ts".*/\1/p' "$AGENTS_INDEX" | grep -v shared)
|
|
|
|
# read stdin - auto-detect JSON array vs newline-delimited
|
|
input=$(cat)
|
|
if echo "$input" | jq -e 'type == "array"' > /dev/null 2>&1; then
|
|
files=$(echo "$input" | jq -r '.[]')
|
|
else
|
|
files="$input"
|
|
fi
|
|
|
|
is_active_agent() {
|
|
local name="$1"
|
|
for a in "${active_agents[@]}"; do
|
|
[[ "$a" == "$name" ]] && return 0
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# find which agent harness files changed
|
|
changed_agents=()
|
|
has_non_agent_change=false
|
|
|
|
while IFS= read -r file; do
|
|
[[ -z "$file" ]] && continue
|
|
case "$file" in
|
|
action/agents/shared.ts|action/agents/index.ts)
|
|
has_non_agent_change=true
|
|
;;
|
|
action/agents/*.ts)
|
|
agent_name="$(basename "$file" .ts)"
|
|
if is_active_agent "$agent_name"; then
|
|
changed_agents+=("$agent_name")
|
|
else
|
|
# legacy/inactive agent file changed — treat as non-agent change
|
|
has_non_agent_change=true
|
|
fi
|
|
;;
|
|
action/*)
|
|
has_non_agent_change=true
|
|
;;
|
|
esac
|
|
done <<< "$files"
|
|
|
|
# output agents based on change type.
|
|
# non-agent action changes always include opencode as a canary.
|
|
if $has_non_agent_change; then
|
|
changed_agents+=("opencode")
|
|
fi
|
|
|
|
if [[ ${#changed_agents[@]} -gt 0 ]]; then
|
|
printf '%s\n' "${changed_agents[@]}" | sort -u | jq -R . | jq -sc .
|
|
else
|
|
echo '[]'
|
|
fi
|