mirror of https://github.com/garrytan/gstack.git
feat: add --team, --no-team, -q flags to setup
--team enables auto_upgrade and registers SessionStart hook via gstack-settings-hook. --no-team reverses it. -q/--quiet suppresses all informational output (for hook-triggered setup runs). --local now prints a deprecation warning. Replaces ~20 echo calls with log() helper for quiet mode support. Part of team-install-mode feature (credit: Jared Friedman). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ebf1d62408
commit
85f844b3c9
81
setup
81
setup
|
|
@ -27,11 +27,17 @@ case "$(uname -s)" in
|
||||||
MINGW*|MSYS*|CYGWIN*|Windows_NT) IS_WINDOWS=1 ;;
|
MINGW*|MSYS*|CYGWIN*|Windows_NT) IS_WINDOWS=1 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# ─── Quiet mode helper ────────────────────────────────────────
|
||||||
|
QUIET=0
|
||||||
|
log() { [ "$QUIET" -eq 0 ] && echo "$@" || true; }
|
||||||
|
|
||||||
# ─── Parse flags ──────────────────────────────────────────────
|
# ─── Parse flags ──────────────────────────────────────────────
|
||||||
HOST="claude"
|
HOST="claude"
|
||||||
LOCAL_INSTALL=0
|
LOCAL_INSTALL=0
|
||||||
SKILL_PREFIX=1
|
SKILL_PREFIX=1
|
||||||
SKILL_PREFIX_FLAG=0
|
SKILL_PREFIX_FLAG=0
|
||||||
|
TEAM_MODE=0
|
||||||
|
NO_TEAM_MODE=0
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--host) [ -z "$2" ] && echo "Missing value for --host (expected claude, codex, kiro, or auto)" >&2 && exit 1; HOST="$2"; shift 2 ;;
|
--host) [ -z "$2" ] && echo "Missing value for --host (expected claude, codex, kiro, or auto)" >&2 && exit 1; HOST="$2"; shift 2 ;;
|
||||||
|
|
@ -39,6 +45,9 @@ while [ $# -gt 0 ]; do
|
||||||
--local) LOCAL_INSTALL=1; shift ;;
|
--local) LOCAL_INSTALL=1; shift ;;
|
||||||
--prefix) SKILL_PREFIX=1; SKILL_PREFIX_FLAG=1; shift ;;
|
--prefix) SKILL_PREFIX=1; SKILL_PREFIX_FLAG=1; shift ;;
|
||||||
--no-prefix) SKILL_PREFIX=0; SKILL_PREFIX_FLAG=1; shift ;;
|
--no-prefix) SKILL_PREFIX=0; SKILL_PREFIX_FLAG=1; shift ;;
|
||||||
|
--team) TEAM_MODE=1; shift ;;
|
||||||
|
--no-team) NO_TEAM_MODE=1; shift ;;
|
||||||
|
-q|--quiet) QUIET=1; shift ;;
|
||||||
*) shift ;;
|
*) shift ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
@ -59,8 +68,10 @@ if [ "$SKILL_PREFIX_FLAG" -eq 0 ]; then
|
||||||
elif [ "$_saved_prefix" = "false" ]; then
|
elif [ "$_saved_prefix" = "false" ]; then
|
||||||
SKILL_PREFIX=0
|
SKILL_PREFIX=0
|
||||||
else
|
else
|
||||||
# No saved preference — prompt interactively (or default flat for non-TTY)
|
# No saved preference — prompt interactively (or default flat for non-TTY/quiet)
|
||||||
if [ -t 0 ]; then
|
if [ "$QUIET" -eq 1 ]; then
|
||||||
|
SKILL_PREFIX=0
|
||||||
|
elif [ -t 0 ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "Skill naming: how should gstack skills appear?"
|
echo "Skill naming: how should gstack skills appear?"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
@ -87,8 +98,10 @@ else
|
||||||
"$GSTACK_CONFIG" set skill_prefix "$([ "$SKILL_PREFIX" -eq 1 ] && echo true || echo false)" 2>/dev/null || true
|
"$GSTACK_CONFIG" set skill_prefix "$([ "$SKILL_PREFIX" -eq 1 ] && echo true || echo false)" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --local: install to .claude/skills/ in the current working directory
|
# --local: install to .claude/skills/ in the current working directory (deprecated)
|
||||||
if [ "$LOCAL_INSTALL" -eq 1 ]; then
|
if [ "$LOCAL_INSTALL" -eq 1 ]; then
|
||||||
|
echo "Warning: --local is deprecated. Use global install + --team instead." >&2
|
||||||
|
echo " See: https://github.com/garrytan/gstack#team-mode" >&2
|
||||||
if [ "$HOST" = "codex" ]; then
|
if [ "$HOST" = "codex" ]; then
|
||||||
echo "Error: --local is only supported for Claude Code (not Codex)." >&2
|
echo "Error: --local is only supported for Claude Code (not Codex)." >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -138,7 +151,7 @@ migrate_direct_codex_install() {
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Migrating direct Codex install to $migrated_dir to avoid duplicate skill discovery..."
|
log "Migrating direct Codex install to $migrated_dir to avoid duplicate skill discovery..."
|
||||||
mv "$gstack_dir" "$migrated_dir"
|
mv "$gstack_dir" "$migrated_dir"
|
||||||
SOURCE_GSTACK_DIR="$migrated_dir"
|
SOURCE_GSTACK_DIR="$migrated_dir"
|
||||||
INSTALL_GSTACK_DIR="$migrated_dir"
|
INSTALL_GSTACK_DIR="$migrated_dir"
|
||||||
|
|
@ -179,7 +192,7 @@ elif [ -f "$SOURCE_GSTACK_DIR/bun.lock" ] && [ "$SOURCE_GSTACK_DIR/bun.lock" -nt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$NEEDS_BUILD" -eq 1 ]; then
|
if [ "$NEEDS_BUILD" -eq 1 ]; then
|
||||||
echo "Building browse binary..."
|
log "Building browse binary..."
|
||||||
(
|
(
|
||||||
cd "$SOURCE_GSTACK_DIR"
|
cd "$SOURCE_GSTACK_DIR"
|
||||||
bun install
|
bun install
|
||||||
|
|
@ -205,7 +218,7 @@ AGENTS_DIR="$SOURCE_GSTACK_DIR/.agents/skills"
|
||||||
NEEDS_AGENTS_GEN=1
|
NEEDS_AGENTS_GEN=1
|
||||||
|
|
||||||
if [ "$NEEDS_AGENTS_GEN" -eq 1 ] && [ "$NEEDS_BUILD" -eq 0 ]; then
|
if [ "$NEEDS_AGENTS_GEN" -eq 1 ] && [ "$NEEDS_BUILD" -eq 0 ]; then
|
||||||
echo "Generating .agents/ skill docs..."
|
log "Generating .agents/ skill docs..."
|
||||||
(
|
(
|
||||||
cd "$SOURCE_GSTACK_DIR"
|
cd "$SOURCE_GSTACK_DIR"
|
||||||
bun install --frozen-lockfile 2>/dev/null || bun install
|
bun install --frozen-lockfile 2>/dev/null || bun install
|
||||||
|
|
@ -215,7 +228,7 @@ fi
|
||||||
|
|
||||||
# 1c. Generate .factory/ Factory Droid skill docs
|
# 1c. Generate .factory/ Factory Droid skill docs
|
||||||
if [ "$INSTALL_FACTORY" -eq 1 ] && [ "$NEEDS_BUILD" -eq 0 ]; then
|
if [ "$INSTALL_FACTORY" -eq 1 ] && [ "$NEEDS_BUILD" -eq 0 ]; then
|
||||||
echo "Generating .factory/ skill docs..."
|
log "Generating .factory/ skill docs..."
|
||||||
(
|
(
|
||||||
cd "$SOURCE_GSTACK_DIR"
|
cd "$SOURCE_GSTACK_DIR"
|
||||||
bun install --frozen-lockfile 2>/dev/null || bun install
|
bun install --frozen-lockfile 2>/dev/null || bun install
|
||||||
|
|
@ -604,16 +617,16 @@ if [ "$INSTALL_CLAUDE" -eq 1 ]; then
|
||||||
ln -snf "gstack/open-gstack-browser" "$_OGB_LINK"
|
ln -snf "gstack/open-gstack-browser" "$_OGB_LINK"
|
||||||
fi
|
fi
|
||||||
if [ "$LOCAL_INSTALL" -eq 1 ]; then
|
if [ "$LOCAL_INSTALL" -eq 1 ]; then
|
||||||
echo "gstack ready (project-local)."
|
log "gstack ready (project-local)."
|
||||||
echo " skills: $INSTALL_SKILLS_DIR"
|
log " skills: $INSTALL_SKILLS_DIR"
|
||||||
else
|
else
|
||||||
echo "gstack ready (claude)."
|
log "gstack ready (claude)."
|
||||||
fi
|
fi
|
||||||
echo " browse: $BROWSE_BIN"
|
log " browse: $BROWSE_BIN"
|
||||||
else
|
else
|
||||||
echo "gstack ready (claude)."
|
log "gstack ready (claude)."
|
||||||
echo " browse: $BROWSE_BIN"
|
log " browse: $BROWSE_BIN"
|
||||||
echo " (skipped skill symlinks — not inside .claude/skills/)"
|
log " (skipped skill symlinks — not inside .claude/skills/)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -633,9 +646,9 @@ if [ "$INSTALL_CODEX" -eq 1 ]; then
|
||||||
# Install generated Codex-format skills (not Claude source dirs)
|
# Install generated Codex-format skills (not Claude source dirs)
|
||||||
link_codex_skill_dirs "$SOURCE_GSTACK_DIR" "$CODEX_SKILLS"
|
link_codex_skill_dirs "$SOURCE_GSTACK_DIR" "$CODEX_SKILLS"
|
||||||
|
|
||||||
echo "gstack ready (codex)."
|
log "gstack ready (codex)."
|
||||||
echo " browse: $BROWSE_BIN"
|
log " browse: $BROWSE_BIN"
|
||||||
echo " codex skills: $CODEX_SKILLS"
|
log " codex skills: $CODEX_SKILLS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 6. Install for Kiro CLI (copy from .agents/skills, rewrite paths)
|
# 6. Install for Kiro CLI (copy from .agents/skills, rewrite paths)
|
||||||
|
|
@ -740,7 +753,39 @@ fi
|
||||||
|
|
||||||
# 9. First-time welcome + legacy cleanup
|
# 9. First-time welcome + legacy cleanup
|
||||||
if [ ! -f "$HOME/.gstack/.welcome-seen" ]; then
|
if [ ! -f "$HOME/.gstack/.welcome-seen" ]; then
|
||||||
echo " Welcome! Run /gstack-upgrade anytime to stay current."
|
log " Welcome! Run /gstack-upgrade anytime to stay current."
|
||||||
touch "$HOME/.gstack/.welcome-seen"
|
touch "$HOME/.gstack/.welcome-seen"
|
||||||
fi
|
fi
|
||||||
rm -f /tmp/gstack-latest-version
|
rm -f /tmp/gstack-latest-version
|
||||||
|
|
||||||
|
# 10. Team mode: register/unregister SessionStart hook
|
||||||
|
SETTINGS_HOOK="$SOURCE_GSTACK_DIR/bin/gstack-settings-hook"
|
||||||
|
HOOK_CMD="$SOURCE_GSTACK_DIR/bin/gstack-session-update"
|
||||||
|
|
||||||
|
if [ "$TEAM_MODE" -eq 1 ]; then
|
||||||
|
"$GSTACK_CONFIG" set auto_upgrade true 2>/dev/null || true
|
||||||
|
|
||||||
|
# Register SessionStart hook in Claude Code settings
|
||||||
|
if [ -x "$SETTINGS_HOOK" ]; then
|
||||||
|
"$SETTINGS_HOOK" add "$HOOK_CMD" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
log ""
|
||||||
|
log "Team mode enabled: gstack will auto-update at the start of each Claude Code session."
|
||||||
|
log " Hook: $HOOK_CMD"
|
||||||
|
log " To disable: ./setup --no-team"
|
||||||
|
log ""
|
||||||
|
log "Bootstrap your repo:"
|
||||||
|
log " cd <your-repo> && $SOURCE_GSTACK_DIR/bin/gstack-team-init required"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$NO_TEAM_MODE" -eq 1 ]; then
|
||||||
|
"$GSTACK_CONFIG" set auto_upgrade false 2>/dev/null || true
|
||||||
|
|
||||||
|
# Remove SessionStart hook from Claude Code settings
|
||||||
|
if [ -x "$SETTINGS_HOOK" ]; then
|
||||||
|
"$SETTINGS_HOOK" remove "$HOOK_CMD" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Team mode disabled: auto-update hook removed."
|
||||||
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue