mirror of
https://github.com/msitarzewski/agency-agents/
synced 2026-07-29 18:21:51 +00:00
Add installKind to tools.json — install mechanism as upstream truth (#618)
Adds `installKind` to every tool entry and enforces it in check-tools.sh. It
classifies the install MECHANISM, which is true for every consumer (not app
state, unlike renderer coverage):
- per-agent : one rendered file/dir per agent (11 tools)
- roster : one combined file for all agents (aider, windsurf)
- plugin : a built artifact, NOT per-agent renderable — CLI-only everywhere
(hermes; no consumer can render it as a string)
Why: consumers currently infer "this tool is a plugin / can't be rendered" from
the format name + multi-file dest + reading the convert script. Making it
explicit is principled, not incidental. The Agency Agents app can now branch:
install natively when installKind is per-agent|roster AND it implements the
`format`; treat `plugin` kinds as recognized-but-CLI-only. Renderer coverage
stays the consumer's concern (derived from `format`); the catalog still carries
no app-release state — installKind passes the "true for every consumer" test
that `wired` failed.
check-tools.sh now requires installKind on every entry and validates the enum
(per-agent|roster|plugin). Purely additive — agency-agents scripts don't read
it, so this lands safely independent of the app, which adopts the field on its
next bundled-baseline refresh.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
GitHub
parent
8ab8d82930
commit
21763134f6
@@ -6,7 +6,8 @@
|
||||
# disagree with it:
|
||||
# 1. ALL_TOOLS in scripts/install.sh (exact set — every installable tool)
|
||||
# 2. valid_tools in scripts/convert.sh (every converter tool must exist in tools.json)
|
||||
# 3. Every tools.json entry has id, label, kebab, format, and dest
|
||||
# 3. Every tools.json entry has id, label, kebab, format, installKind, dest
|
||||
# (installKind is one of: per-agent | roster | plugin)
|
||||
#
|
||||
# Add a tool: add an entry to tools.json, a convert_<tool> (or reuse a `format`)
|
||||
# in convert.sh, and an install_<tool> in install.sh, then run this script — it
|
||||
@@ -65,9 +66,15 @@ notin="$(comm -13 <(echo "$canon") <(echo "$conv"))"
|
||||
while IFS= read -r t; do
|
||||
[[ -n "$t" ]] || continue
|
||||
line="$(grep -E "^ \"$t\"[[:space:]]*:" "$JSON")"
|
||||
for field in id label kebab format dest; do
|
||||
for field in id label kebab format installKind dest; do
|
||||
echo "$line" | grep -qE "\"$field\":" || fail "tool '$t' in $JSON is missing \"$field\""
|
||||
done
|
||||
# installKind is the install MECHANISM (upstream truth), not app state: it must
|
||||
# be one of the known kinds so every consumer can branch on it deterministically.
|
||||
if echo "$line" | grep -qE '"installKind":'; then
|
||||
echo "$line" | grep -qE '"installKind":[[:space:]]*"(per-agent|roster|plugin)"' \
|
||||
|| fail "tool '$t' in $JSON has an invalid installKind (must be per-agent|roster|plugin)"
|
||||
fi
|
||||
done < <(echo "$canon")
|
||||
|
||||
# --- result ----------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user