fix(install): reject unknown agent selections (#779)

Signed-off-by: Mr-Neutr0n <harikp2002@gmail.com>
This commit is contained in:
hari
2026-08-26 08:46:45 -05:00
committed by GitHub
parent d536331b5a
commit 3570801f74
2 changed files with 72 additions and 3 deletions
+28 -3
View File
@@ -176,6 +176,19 @@ division_files() {
# division_count <division> — number of agents in a division.
division_count() { division_files "$1" | grep -c . ; }
# agent_slug_exists <slug> — verify a requested agent against the source roster.
# Selection filters should fail before installation when they name nothing that
# can be installed; otherwise dry-run counts and completion messages lie.
agent_slug_exists() {
local target="$1" div f
for div in "${ALL_DIVISIONS[@]}"; do
while IFS= read -r f; do
[[ "$(agent_slug "$f")" == "$target" ]] && return 0
done < <(division_files "$div")
done
return 1
}
# build_selection — compute the allowed slug set from --division/--agent/--agents-file.
# With no filter flags, SELECTION_ACTIVE stays false (install everything).
build_selection() {
@@ -184,20 +197,32 @@ build_selection() {
return
fi
SELECTION_ACTIVE=true
local slugs="" div f s line
local slugs="" div f s line requested
for div in ${FILTER_DIVISIONS[@]+"${FILTER_DIVISIONS[@]}"}; do
while IFS= read -r f; do
s="$(agent_slug "$f")"; [[ -n "$s" ]] && slugs+="$s"$'\n'
done < <(division_files "$div")
done
for s in ${FILTER_AGENTS[@]+"${FILTER_AGENTS[@]}"}; do slugs+="$(slugify "$s")"$'\n'; done
for s in ${FILTER_AGENTS[@]+"${FILTER_AGENTS[@]}"}; do
requested="$(slugify "$s")"
if ! agent_slug_exists "$requested"; then
err "Unknown agent '$s'. Use --list agents to see the available roster."
exit 1
fi
slugs+="$requested"$'\n'
done
if [[ -n "$AGENTS_FILE" ]]; then
[[ -f "$AGENTS_FILE" ]] || { err "agents-file not found: $AGENTS_FILE"; exit 1; }
while IFS= read -r line || [[ -n "$line" ]]; do
line="${line%%#*}" # strip trailing comment
line="$(printf '%s' "$line" | xargs 2>/dev/null)" # trim
[[ -z "$line" ]] && continue
slugs+="$(slugify "$line")"$'\n'
requested="$(slugify "$line")"
if ! agent_slug_exists "$requested"; then
err "Unknown agent '$line' in agents-file '$AGENTS_FILE'."
exit 1
fi
slugs+="$requested"$'\n'
done < "$AGENTS_FILE"
fi
_ALLOWED_SLUGS="$(printf '%s' "$slugs" | sort -u | sed '/^$/d')"