feat(install): re-add Antigravity as a wiring target
Antigravity discovers skills via a path-entries JSON (~/.gemini/config/skills.json), not a symlink directory. One entry points at $AGENTS_DIR — the same managed, surfaces-filtered, collision-resolved directory Crush/OpenCode/Pi already read — so Antigravity sees exactly the same skill set as every other harness, for free. Requires jq; every other target in this script stays dependency-free on purpose, so wire_antigravity skips with a warning (not a hard failure) if jq is missing. Merges into skills.json rather than overwriting it: the file is documented as user-editable (json_configs.md — e.g. a personal skills dir), so a hand-added entry must survive a re-run. Was previously removed as "unused" (mathias/skills#41 — Antigravity usage picked back up). Mistral Vibe stays removed. Closes #41 Bump-Type: minor Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,7 @@ run_install() {
|
||||
AGENTS_SKILLS_DIR="$_f/home/.agents/skills" \
|
||||
CRUSH_SKILLS_DIR="$_f/home/.config/crush/skills" \
|
||||
OPENCODE_SKILLS_DIR="$_f/home/.config/opencode/skills" \
|
||||
ANTIGRAVITY_SKILLS_JSON="$_f/home/.gemini/config/skills.json" \
|
||||
SKILLS_EXTRA_SOURCES="$_extra" \
|
||||
bash "$SUT" 2>&1)
|
||||
rc=$?
|
||||
@@ -183,5 +184,53 @@ else
|
||||
no 'a source with no surfaces convention is linked as-is' "$out"
|
||||
fi
|
||||
|
||||
# --- 9. Antigravity: the managed agents dir is registered, not the raw checkout
|
||||
# skills.json entries must point at $AGENTS_DIR — that's what already carries
|
||||
# surfaces-filtering, collision handling and multi-source merge. Pointing at
|
||||
# the checkout directly would bypass all of it and give Antigravity a
|
||||
# different skill set than every other harness.
|
||||
f=$(new_fixture antigravity)
|
||||
out=$(run_install "$f")
|
||||
AG="$f/home/.gemini/config/skills.json"
|
||||
if [ ! -f "$AG" ]; then
|
||||
no 'Antigravity skills.json is created' "$out"
|
||||
elif ! command -v jq >/dev/null 2>&1; then
|
||||
no 'jq available to verify Antigravity wiring' "(jq missing on test host)"
|
||||
else
|
||||
registered=$(jq -r --arg p "$f/home/.agents/skills" '[.entries[]? | select(.path == $p)] | length' "$AG")
|
||||
if [ "$registered" = "1" ]; then
|
||||
ok 'Antigravity registers the managed agents dir, not the raw checkout'
|
||||
else
|
||||
no 'Antigravity registers the managed agents dir, not the raw checkout' "$(cat "$AG")"
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- 10. Antigravity wiring is idempotent ------------------------------------
|
||||
f=$(new_fixture antigravity_idempotent)
|
||||
run_install "$f" >/dev/null
|
||||
out=$(run_install "$f")
|
||||
AG="$f/home/.gemini/config/skills.json"
|
||||
count=$(jq '.entries | length' "$AG" 2>/dev/null || echo "?")
|
||||
if [ "$count" = "1" ]; then
|
||||
ok 'Antigravity wiring is idempotent (no duplicate entries)'
|
||||
else
|
||||
no 'Antigravity wiring is idempotent (no duplicate entries)' "entries=$count"$'\n'"$out"
|
||||
fi
|
||||
|
||||
# --- 11. Antigravity wiring preserves entries it doesn't own -----------------
|
||||
# A user may hand-edit skills.json to point at their own personal skills dir
|
||||
# (json_configs.md documents this). Our merge must not clobber it.
|
||||
f=$(new_fixture antigravity_preserve)
|
||||
mkdir -p "$f/home/.gemini/config"
|
||||
printf '{"entries":[{"path":"/Users/mathias/personal-skills"}]}' > "$f/home/.gemini/config/skills.json"
|
||||
out=$(run_install "$f")
|
||||
AG="$f/home/.gemini/config/skills.json"
|
||||
personal=$(jq -r '[.entries[]? | select(.path == "/Users/mathias/personal-skills")] | length' "$AG" 2>/dev/null || echo 0)
|
||||
if [ "$personal" = "1" ]; then
|
||||
ok 'Antigravity wiring preserves pre-existing hand-authored entries'
|
||||
else
|
||||
no 'Antigravity wiring preserves pre-existing hand-authored entries' "$(cat "$AG")"$'\n'"$out"
|
||||
fi
|
||||
|
||||
printf '\ninstall: %d passed, %d failed\n' "$pass" "$fail"
|
||||
[ "$fail" -eq 0 ]
|
||||
|
||||
Reference in New Issue
Block a user