mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-02 03:35:09 +02:00
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:
@@ -27,11 +27,17 @@ case "$(uname -s)" in
|
||||
MINGW*|MSYS*|CYGWIN*|Windows_NT) IS_WINDOWS=1 ;;
|
||||
esac
|
||||
|
||||
# ─── Quiet mode helper ────────────────────────────────────────
|
||||
QUIET=0
|
||||
log() { [ "$QUIET" -eq 0 ] && echo "$@" || true; }
|
||||
|
||||
# ─── Parse flags ──────────────────────────────────────────────
|
||||
HOST="claude"
|
||||
LOCAL_INSTALL=0
|
||||
SKILL_PREFIX=1
|
||||
SKILL_PREFIX_FLAG=0
|
||||
TEAM_MODE=0
|
||||
NO_TEAM_MODE=0
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--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 ;;
|
||||
--prefix) SKILL_PREFIX=1; 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 ;;
|
||||
esac
|
||||
done
|
||||
@@ -59,8 +68,10 @@ if [ "$SKILL_PREFIX_FLAG" -eq 0 ]; then
|
||||
elif [ "$_saved_prefix" = "false" ]; then
|
||||
SKILL_PREFIX=0
|
||||
else
|
||||
# No saved preference — prompt interactively (or default flat for non-TTY)
|
||||
if [ -t 0 ]; then
|
||||
# No saved preference — prompt interactively (or default flat for non-TTY/quiet)
|
||||
if [ "$QUIET" -eq 1 ]; then
|
||||
SKILL_PREFIX=0
|
||||
elif [ -t 0 ]; then
|
||||
echo ""
|
||||
echo "Skill naming: how should gstack skills appear?"
|
||||
echo ""
|
||||
@@ -87,8 +98,10 @@ else
|
||||
"$GSTACK_CONFIG" set skill_prefix "$([ "$SKILL_PREFIX" -eq 1 ] && echo true || echo false)" 2>/dev/null || true
|
||||
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
|
||||
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
|
||||
echo "Error: --local is only supported for Claude Code (not Codex)." >&2
|
||||
exit 1
|
||||
@@ -138,7 +151,7 @@ migrate_direct_codex_install() {
|
||||
exit 1
|
||||
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"
|
||||
SOURCE_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
|
||||
|
||||
if [ "$NEEDS_BUILD" -eq 1 ]; then
|
||||
echo "Building browse binary..."
|
||||
log "Building browse binary..."
|
||||
(
|
||||
cd "$SOURCE_GSTACK_DIR"
|
||||
bun install
|
||||
@@ -205,7 +218,7 @@ AGENTS_DIR="$SOURCE_GSTACK_DIR/.agents/skills"
|
||||
NEEDS_AGENTS_GEN=1
|
||||
|
||||
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"
|
||||
bun install --frozen-lockfile 2>/dev/null || bun install
|
||||
@@ -215,7 +228,7 @@ fi
|
||||
|
||||
# 1c. Generate .factory/ Factory Droid skill docs
|
||||
if [ "$INSTALL_FACTORY" -eq 1 ] && [ "$NEEDS_BUILD" -eq 0 ]; then
|
||||
echo "Generating .factory/ skill docs..."
|
||||
log "Generating .factory/ skill docs..."
|
||||
(
|
||||
cd "$SOURCE_GSTACK_DIR"
|
||||
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"
|
||||
fi
|
||||
if [ "$LOCAL_INSTALL" -eq 1 ]; then
|
||||
echo "gstack ready (project-local)."
|
||||
echo " skills: $INSTALL_SKILLS_DIR"
|
||||
log "gstack ready (project-local)."
|
||||
log " skills: $INSTALL_SKILLS_DIR"
|
||||
else
|
||||
echo "gstack ready (claude)."
|
||||
log "gstack ready (claude)."
|
||||
fi
|
||||
echo " browse: $BROWSE_BIN"
|
||||
log " browse: $BROWSE_BIN"
|
||||
else
|
||||
echo "gstack ready (claude)."
|
||||
echo " browse: $BROWSE_BIN"
|
||||
echo " (skipped skill symlinks — not inside .claude/skills/)"
|
||||
log "gstack ready (claude)."
|
||||
log " browse: $BROWSE_BIN"
|
||||
log " (skipped skill symlinks — not inside .claude/skills/)"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -633,9 +646,9 @@ if [ "$INSTALL_CODEX" -eq 1 ]; then
|
||||
# Install generated Codex-format skills (not Claude source dirs)
|
||||
link_codex_skill_dirs "$SOURCE_GSTACK_DIR" "$CODEX_SKILLS"
|
||||
|
||||
echo "gstack ready (codex)."
|
||||
echo " browse: $BROWSE_BIN"
|
||||
echo " codex skills: $CODEX_SKILLS"
|
||||
log "gstack ready (codex)."
|
||||
log " browse: $BROWSE_BIN"
|
||||
log " codex skills: $CODEX_SKILLS"
|
||||
fi
|
||||
|
||||
# 6. Install for Kiro CLI (copy from .agents/skills, rewrite paths)
|
||||
@@ -740,7 +753,39 @@ fi
|
||||
|
||||
# 9. First-time welcome + legacy cleanup
|
||||
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"
|
||||
fi
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user