diff --git a/bin/dev-setup b/bin/dev-setup index a5bd48275..4ae0c2ed9 100755 --- a/bin/dev-setup +++ b/bin/dev-setup @@ -11,7 +11,7 @@ # bin/dev-teardown # clean up set -e -REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +REPO_ROOT="$(cd "$(dirname "$0")/.." >/dev/null && pwd)" # 1. Copy .env from main worktree (if we're a worktree and don't have one) if [ ! -f "$REPO_ROOT/.env" ]; then diff --git a/bin/dev-teardown b/bin/dev-teardown index dc8f74260..6b5b64cf6 100755 --- a/bin/dev-teardown +++ b/bin/dev-teardown @@ -2,7 +2,7 @@ # Remove local dev skill symlinks. Restores global gstack as the active install. set -e -REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +REPO_ROOT="$(cd "$(dirname "$0")/.." >/dev/null && pwd)" removed=() diff --git a/bin/gstack-community-dashboard b/bin/gstack-community-dashboard index 1f469283d..870daf846 100755 --- a/bin/gstack-community-dashboard +++ b/bin/gstack-community-dashboard @@ -10,7 +10,7 @@ # GSTACK_SUPABASE_ANON_KEY — override Supabase anon key set -uo pipefail -GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." && pwd)}" +GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." >/dev/null && pwd)}" # Source Supabase config if not overridden by env if [ -z "${GSTACK_SUPABASE_URL:-}" ] && [ -f "$GSTACK_DIR/supabase/config.sh" ]; then diff --git a/bin/gstack-extension b/bin/gstack-extension index 8d0a62af9..5e3a32b67 100755 --- a/bin/gstack-extension +++ b/bin/gstack-extension @@ -6,7 +6,7 @@ set -e -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # Find the extension directory diff --git a/bin/gstack-learnings-log b/bin/gstack-learnings-log index e63c14cb2..72cd94e87 100755 --- a/bin/gstack-learnings-log +++ b/bin/gstack-learnings-log @@ -5,7 +5,7 @@ # Append-only storage. Duplicates (same key+type) are resolved at read time # by gstack-learnings-search ("latest winner" per key+type). set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" mkdir -p "$GSTACK_HOME/projects/$SLUG" diff --git a/bin/gstack-learnings-search b/bin/gstack-learnings-search index 4ac187ec1..e91543446 100755 --- a/bin/gstack-learnings-search +++ b/bin/gstack-learnings-search @@ -6,7 +6,7 @@ # resolves duplicates (latest winner per key+type), and outputs formatted text. # Exit 0 silently if no learnings file exists. set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" diff --git a/bin/gstack-platform-detect b/bin/gstack-platform-detect index 766a585b3..c33f5e458 100755 --- a/bin/gstack-platform-detect +++ b/bin/gstack-platform-detect @@ -4,7 +4,7 @@ set -euo pipefail # gstack-platform-detect: show which AI coding agents are installed and gstack status # Config-driven: reads host definitions from hosts/*.ts via host-config-export.ts -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" GSTACK_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" printf "%-16s %-10s %-40s %s\n" "Agent" "Version" "Skill Path" "gstack" diff --git a/bin/gstack-relink b/bin/gstack-relink index 31e6b82f0..6602cd36e 100755 --- a/bin/gstack-relink +++ b/bin/gstack-relink @@ -10,7 +10,7 @@ # GSTACK_SKILLS_DIR — override target skills directory set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" GSTACK_CONFIG="${SCRIPT_DIR}/gstack-config" # Detect install dir diff --git a/bin/gstack-repo-mode b/bin/gstack-repo-mode index 0b4d6da64..d529249f0 100755 --- a/bin/gstack-repo-mode +++ b/bin/gstack-repo-mode @@ -11,7 +11,7 @@ # Cache: ~/.gstack/projects/$SLUG/repo-mode.json (7-day TTL) set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" # Compute SLUG directly (avoid eval of gstack-slug — branch names can contain shell metacharacters) REMOTE_URL=$(git remote get-url origin 2>/dev/null || true) if [ -z "$REMOTE_URL" ]; then diff --git a/bin/gstack-review-log b/bin/gstack-review-log index 62c9e1719..d16e0d4c2 100755 --- a/bin/gstack-review-log +++ b/bin/gstack-review-log @@ -2,7 +2,7 @@ # gstack-review-log — atomically log a review result # Usage: gstack-review-log '{"skill":"...","timestamp":"...","status":"..."}' set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" mkdir -p "$GSTACK_HOME/projects/$SLUG" diff --git a/bin/gstack-review-read b/bin/gstack-review-read index ccf1d70f6..3fe0307a1 100755 --- a/bin/gstack-review-read +++ b/bin/gstack-review-read @@ -2,7 +2,7 @@ # gstack-review-read — read review log and config for dashboard # Usage: gstack-review-read set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" cat "$GSTACK_HOME/projects/$SLUG/$BRANCH-reviews.jsonl" 2>/dev/null || echo "NO_REVIEWS" diff --git a/bin/gstack-specialist-stats b/bin/gstack-specialist-stats index 3349c2b71..cec5bad59 100755 --- a/bin/gstack-specialist-stats +++ b/bin/gstack-specialist-stats @@ -6,7 +6,7 @@ # and outputs hit rates. Tags specialists as GATE_CANDIDATE (0 findings in 10+ # dispatches) or NEVER_GATE (security, data-migration — insurance policy). set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" PROJECT_DIR="$GSTACK_HOME/projects/$SLUG" diff --git a/bin/gstack-telemetry-log b/bin/gstack-telemetry-log index 93db82077..65786a3c4 100755 --- a/bin/gstack-telemetry-log +++ b/bin/gstack-telemetry-log @@ -17,7 +17,7 @@ # NOTE: Uses set -uo pipefail (no -e) — telemetry must never exit non-zero set -uo pipefail -GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." && pwd)}" +GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." >/dev/null && pwd)}" STATE_DIR="${GSTACK_STATE_DIR:-$HOME/.gstack}" ANALYTICS_DIR="$STATE_DIR/analytics" JSONL_FILE="$ANALYTICS_DIR/skill-usage.jsonl" diff --git a/bin/gstack-telemetry-sync b/bin/gstack-telemetry-sync index be767c23e..3fc2bdc62 100755 --- a/bin/gstack-telemetry-sync +++ b/bin/gstack-telemetry-sync @@ -11,7 +11,7 @@ # GSTACK_SUPABASE_URL — override Supabase project URL set -uo pipefail -GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." && pwd)}" +GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." >/dev/null && pwd)}" STATE_DIR="${GSTACK_STATE_DIR:-$HOME/.gstack}" ANALYTICS_DIR="$STATE_DIR/analytics" JSONL_FILE="$ANALYTICS_DIR/skill-usage.jsonl" diff --git a/bin/gstack-timeline-log b/bin/gstack-timeline-log index 0167a1d00..461242d17 100755 --- a/bin/gstack-timeline-log +++ b/bin/gstack-timeline-log @@ -7,7 +7,7 @@ # Optional: branch, outcome, duration_s, session, ts. # Validation failure → skip silently (non-blocking). set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" mkdir -p "$GSTACK_HOME/projects/$SLUG" diff --git a/bin/gstack-timeline-read b/bin/gstack-timeline-read index f11d5b40e..af734e6f0 100755 --- a/bin/gstack-timeline-read +++ b/bin/gstack-timeline-read @@ -6,7 +6,7 @@ # Reads ~/.gstack/projects/$SLUG/timeline.jsonl, filters, formats. # Exit 0 silently if no timeline file exists. set -euo pipefail -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "$0")" >/dev/null && pwd)" eval "$("$SCRIPT_DIR/gstack-slug" 2>/dev/null)" GSTACK_HOME="${GSTACK_HOME:-$HOME/.gstack}" diff --git a/bin/gstack-uninstall b/bin/gstack-uninstall index 2cf3d5288..6747db63c 100755 --- a/bin/gstack-uninstall +++ b/bin/gstack-uninstall @@ -36,7 +36,7 @@ if [ -z "${HOME:-}" ]; then exit 1 fi -GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." && pwd)}" +GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." >/dev/null && pwd)}" STATE_DIR="${GSTACK_STATE_DIR:-$HOME/.gstack}" _GIT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)" diff --git a/bin/gstack-update-check b/bin/gstack-update-check index 31e9fdb6f..c9c758b26 100755 --- a/bin/gstack-update-check +++ b/bin/gstack-update-check @@ -12,7 +12,7 @@ # GSTACK_STATE_DIR — override ~/.gstack state directory set -euo pipefail -GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." && pwd)}" +GSTACK_DIR="${GSTACK_DIR:-$(cd "$(dirname "$0")/.." >/dev/null && pwd)}" STATE_DIR="${GSTACK_STATE_DIR:-$HOME/.gstack}" CACHE_FILE="$STATE_DIR/last-update-check" MARKER_FILE="$STATE_DIR/just-upgraded-from"