From 23449dfc8210e3262263e79d40f1cc6d69c78472 Mon Sep 17 00:00:00 2001 From: Bastien Chanot Date: Tue, 26 May 2026 07:25:03 +0200 Subject: [PATCH] fix(scripts): add gstack infra symlinks to install, update, and doctor The gstack/bin/ and gstack/browse/dist/ symlinks (added in link.sh) were missing from install-plugins.sh and update-all.sh, meaning fresh installs and updates wouldn't create them. Also adds doctor.sh health checks. - install-plugins.sh: create symlinks after gstack ./setup - update-all.sh: refresh symlinks after gstack submodule update - doctor.sh: verify both symlinks exist in consistency section Co-Authored-By: Claude Opus 4.6 (1M context) --- doctor.sh | 12 ++++++++++++ install-plugins.sh | 15 +++++++++++++++ update-all.sh | 12 ++++++++++++ 3 files changed, 39 insertions(+) diff --git a/doctor.sh b/doctor.sh index b91e236..87fa985 100644 --- a/doctor.sh +++ b/doctor.sh @@ -309,6 +309,18 @@ echo "" # ──────────────────────────────────────────────────────────── echo "── Consistency ──" +# Check gstack shared infrastructure symlinks +if [ -L "$HOME/.claude/skills/gstack/bin" ]; then + pass "gstack/bin/ symlink OK" +else + warn "gstack/bin/ symlink missing — run: bash link.sh" +fi +if [ -L "$HOME/.claude/skills/gstack/browse/dist" ]; then + pass "gstack/browse/dist/ symlink OK" +else + warn "gstack/browse/dist/ symlink missing — run: bash link.sh" +fi + # Check owned skills have disable-model-invocation (skip external/symlinked skills) MISSING_DMI=() for f in "$HOME/.claude/skills/"*/SKILL.md; do diff --git a/install-plugins.sh b/install-plugins.sh index 27529a8..692cc59 100644 --- a/install-plugins.sh +++ b/install-plugins.sh @@ -269,6 +269,21 @@ if [ -d "$GSTACK_DIR" ]; then else ok "GStack ready (submodule initialized, symlinks staged)" fi + + # GStack shared infrastructure: bin/ (CLI tools) and browse/dist/ (compiled binary). + # Per-skill SKILL.md symlinks don't expose these, but multiple skills hardcode + # ~/.claude/skills/gstack/bin/ and gstack/browse/dist/. + GSTACK_DST="$HOME/.claude/skills/gstack" + if [ -d "$GSTACK_DIR/bin" ]; then + mkdir -p "$GSTACK_DST" + [ -L "$GSTACK_DST/bin" ] || ln -sf "$GSTACK_DIR/bin" "$GSTACK_DST/bin" + ok "gstack/bin/ symlink OK" + fi + if [ -d "$GSTACK_DIR/browse/dist" ]; then + mkdir -p "$GSTACK_DST/browse" + [ -L "$GSTACK_DST/browse/dist" ] || ln -sf "$GSTACK_DIR/browse/dist" "$GSTACK_DST/browse/dist" + ok "gstack/browse/dist/ symlink OK" + fi else warn "GStack submodule directory not found after init — check .gitmodules" fi diff --git a/update-all.sh b/update-all.sh index c65d59a..5fc4005 100644 --- a/update-all.sh +++ b/update-all.sh @@ -85,6 +85,18 @@ if [[ "$_gstack_confirm" =~ ^[Yy]$ ]]; then warn "GStack submodule update failed — run: git submodule update --init" fi + # Refresh gstack shared infrastructure symlinks (bin/ + browse/dist/) + GSTACK_DIR="$REPO/skills-external/gstack" + GSTACK_DST="$HOME/.claude/skills/gstack" + if [ -d "$GSTACK_DIR/bin" ]; then + mkdir -p "$GSTACK_DST" + ln -sf "$GSTACK_DIR/bin" "$GSTACK_DST/bin" + fi + if [ -d "$GSTACK_DIR/browse/dist" ]; then + mkdir -p "$GSTACK_DST/browse" + ln -sf "$GSTACK_DIR/browse/dist" "$GSTACK_DST/browse/dist" + fi + # Restore prior enabled/disabled state if [ "$_gstack_state" = "disabled" ] && [ -x "$REPO/lib/toggle-external.sh" ]; then bash "$REPO/lib/toggle-external.sh" disable gstack >/dev/null