shipwright-cli 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipwright-cli",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "Orchestrate autonomous Claude Code agent teams in tmux",
5
5
  "bin": {
6
6
  "shipwright": "./scripts/cct",
package/scripts/cct CHANGED
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
 
10
10
  # Resolve symlinks (required for npm global install where bin/ symlinks to node_modules/)
11
11
  SOURCE="${BASH_SOURCE[0]}"
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
11
11
 
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
11
11
 
@@ -158,7 +158,93 @@ else
158
158
  fi
159
159
 
160
160
  # ═════════════════════════════════════════════════════════════════════════════
161
- # 3. PATH & CLI
161
+ # 3. Agent Teams
162
+ # ═════════════════════════════════════════════════════════════════════════════
163
+ echo ""
164
+ echo -e "${PURPLE}${BOLD} AGENT TEAMS${RESET}"
165
+ echo -e "${DIM} ──────────────────────────────────────────${RESET}"
166
+
167
+ # Agent teams env var in settings.json
168
+ SETTINGS_FILE="$HOME/.claude/settings.json"
169
+ if [[ -f "$SETTINGS_FILE" ]]; then
170
+ if grep -q 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$SETTINGS_FILE" 2>/dev/null; then
171
+ check_pass "Agent teams enabled in settings.json"
172
+ else
173
+ check_fail "Agent teams NOT enabled in settings.json"
174
+ echo -e " ${DIM}Run: shipwright init${RESET}"
175
+ echo -e " ${DIM}Or add to ~/.claude/settings.json:${RESET}"
176
+ echo -e " ${DIM}\"env\": { \"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\" }${RESET}"
177
+ fi
178
+ else
179
+ check_fail "No ~/.claude/settings.json — agent teams not configured"
180
+ echo -e " ${DIM}Run: shipwright init${RESET}"
181
+ fi
182
+
183
+ # CLAUDE.md with Shipwright instructions
184
+ GLOBAL_CLAUDE_MD="$HOME/.claude/CLAUDE.md"
185
+ if [[ -f "$GLOBAL_CLAUDE_MD" ]]; then
186
+ if grep -q "Shipwright" "$GLOBAL_CLAUDE_MD" 2>/dev/null; then
187
+ check_pass "CLAUDE.md contains Shipwright instructions"
188
+ else
189
+ check_warn "CLAUDE.md exists but missing Shipwright instructions"
190
+ echo -e " ${DIM}Run: shipwright init${RESET}"
191
+ fi
192
+ else
193
+ check_warn "No ~/.claude/CLAUDE.md — agents won't know Shipwright commands"
194
+ echo -e " ${DIM}Run: shipwright init${RESET}"
195
+ fi
196
+
197
+ # Team templates
198
+ TEMPLATES_DIR="$HOME/.shipwright/templates"
199
+ if [[ -d "$TEMPLATES_DIR" ]]; then
200
+ tpl_count=0
201
+ while IFS= read -r f; do
202
+ [[ -n "$f" ]] && tpl_count=$((tpl_count + 1))
203
+ done < <(find "$TEMPLATES_DIR" -maxdepth 1 -name '*.json' -type f 2>/dev/null)
204
+ if [[ $tpl_count -gt 0 ]]; then
205
+ check_pass "Team templates: ${tpl_count} installed"
206
+ else
207
+ check_warn "Template dir exists but no .json files found"
208
+ fi
209
+ else
210
+ check_warn "No team templates at ~/.shipwright/templates/"
211
+ echo -e " ${DIM}Run: shipwright init${RESET}"
212
+ fi
213
+
214
+ # Pipeline templates
215
+ PIPELINES_DIR="$HOME/.shipwright/pipelines"
216
+ if [[ -d "$PIPELINES_DIR" ]]; then
217
+ pip_count=0
218
+ while IFS= read -r f; do
219
+ [[ -n "$f" ]] && pip_count=$((pip_count + 1))
220
+ done < <(find "$PIPELINES_DIR" -maxdepth 1 -name '*.json' -type f 2>/dev/null)
221
+ if [[ $pip_count -gt 0 ]]; then
222
+ check_pass "Pipeline templates: ${pip_count} installed"
223
+ else
224
+ check_warn "Pipeline dir exists but no .json files found"
225
+ fi
226
+ else
227
+ check_warn "No pipeline templates at ~/.shipwright/pipelines/"
228
+ echo -e " ${DIM}Run: shipwright init${RESET}"
229
+ fi
230
+
231
+ # GitHub CLI
232
+ if command -v gh &>/dev/null; then
233
+ if gh auth status &>/dev/null; then
234
+ GH_USER="$(gh api user -q .login 2>/dev/null || echo "authenticated")"
235
+ check_pass "GitHub CLI: ${GH_USER}"
236
+ else
237
+ check_warn "GitHub CLI installed but not authenticated"
238
+ echo -e " ${DIM}gh auth login${RESET}"
239
+ fi
240
+ else
241
+ check_warn "GitHub CLI (gh) not installed — daemon/pipeline need it for PRs and issues"
242
+ echo -e " ${DIM}brew install gh${RESET} (macOS)"
243
+ echo -e " ${DIM}sudo apt install gh${RESET} (Ubuntu/Debian)"
244
+ fi
245
+
246
+ # ═════════════════════════════════════════════════════════════════════════════
247
+ # 4. PATH & CLI
162
248
  # ═════════════════════════════════════════════════════════════════════════════
163
249
  echo ""
164
250
  echo -e "${PURPLE}${BOLD} PATH & CLI${RESET}"
@@ -198,7 +284,7 @@ else
198
284
  fi
199
285
 
200
286
  # ═════════════════════════════════════════════════════════════════════════════
201
- # 4. Pane Display
287
+ # 5. Pane Display
202
288
  # ═════════════════════════════════════════════════════════════════════════════
203
289
  echo ""
204
290
  echo -e "${PURPLE}${BOLD} PANE DISPLAY${RESET}"
@@ -246,7 +332,7 @@ else
246
332
  fi
247
333
 
248
334
  # ═════════════════════════════════════════════════════════════════════════════
249
- # 5. Orphaned Sessions
335
+ # 6. Orphaned Sessions
250
336
  # ═════════════════════════════════════════════════════════════════════════════
251
337
  echo ""
252
338
  echo -e "${PURPLE}${BOLD} ORPHAN CHECK${RESET}"
@@ -271,7 +357,7 @@ if [[ $orphaned_teams -eq 0 ]]; then
271
357
  fi
272
358
 
273
359
  # ═════════════════════════════════════════════════════════════════════════════
274
- # 6. Terminal Compatibility
360
+ # 7. Terminal Compatibility
275
361
  # ═════════════════════════════════════════════════════════════════════════════
276
362
  echo ""
277
363
  echo -e "${PURPLE}${BOLD} TERMINAL${RESET}"
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
 
11
11
  # ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
11
11
 
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env bash
2
2
  # ╔═══════════════════════════════════════════════════════════════════════════╗
3
- # ║ shipwright init — One-command tmux setup + optional deploy configuration
3
+ # ║ shipwright init — Complete setup for Shipwright + Claude Code Teams
4
4
  # ║ ║
5
- # ║ Installs tmux config, overlay, and templates. No interactive prompts,
6
- # ║ no hooks, no Claude Code settings just tmux config.
5
+ # ║ Installs: tmux config, overlay, team & pipeline templates, Claude Code
6
+ # ║ settings (with agent teams enabled), quality gate hooks, CLAUDE.md
7
+ # ║ agent instructions (global + per-repo). Runs doctor at the end. ║
7
8
  # ║ ║
8
9
  # ║ --deploy Detect platform and generate deployed.json template ║
9
10
  # ╚═══════════════════════════════════════════════════════════════════════════╝
@@ -65,54 +66,162 @@ while [[ $# -gt 0 ]]; do
65
66
  done
66
67
 
67
68
  echo ""
68
- echo -e "${CYAN}${BOLD}shipwright init${RESET} — Quick tmux setup"
69
+ echo -e "${CYAN}${BOLD}shipwright init${RESET} — Complete setup"
69
70
  echo -e "${DIM}══════════════════════════════════════════${RESET}"
70
71
  echo ""
71
72
 
72
73
  # ─── tmux.conf ────────────────────────────────────────────────────────────────
73
- if [[ -f "$HOME/.tmux.conf" ]]; then
74
- cp "$HOME/.tmux.conf" "$HOME/.tmux.conf.bak"
75
- warn "Backed up existing ~/.tmux.conf → ~/.tmux.conf.bak"
74
+ if [[ -f "$REPO_DIR/tmux/tmux.conf" ]]; then
75
+ if [[ -f "$HOME/.tmux.conf" ]]; then
76
+ cp "$HOME/.tmux.conf" "$HOME/.tmux.conf.bak"
77
+ warn "Backed up existing ~/.tmux.conf → ~/.tmux.conf.bak"
78
+ fi
79
+ cp "$REPO_DIR/tmux/tmux.conf" "$HOME/.tmux.conf"
80
+ success "Installed ~/.tmux.conf"
81
+ else
82
+ warn "tmux.conf not found in package — skipping"
76
83
  fi
77
- cp "$REPO_DIR/tmux/tmux.conf" "$HOME/.tmux.conf"
78
- success "Installed ~/.tmux.conf"
79
84
 
80
85
  # ─── Overlay ──────────────────────────────────────────────────────────────────
81
- mkdir -p "$HOME/.tmux"
82
- cp "$REPO_DIR/tmux/claude-teams-overlay.conf" "$HOME/.tmux/claude-teams-overlay.conf"
83
- success "Installed ~/.tmux/claude-teams-overlay.conf"
84
-
85
- # ─── Templates ────────────────────────────────────────────────────────────────
86
- mkdir -p "$HOME/.claude-teams/templates"
87
- for tpl in "$REPO_DIR"/tmux/templates/*.json; do
88
- [[ -f "$tpl" ]] || continue
89
- cp "$tpl" "$HOME/.claude-teams/templates/$(basename "$tpl")"
90
- done
91
- success "Installed templates → ~/.claude-teams/templates/"
86
+ if [[ -f "$REPO_DIR/tmux/claude-teams-overlay.conf" ]]; then
87
+ mkdir -p "$HOME/.tmux"
88
+ cp "$REPO_DIR/tmux/claude-teams-overlay.conf" "$HOME/.tmux/claude-teams-overlay.conf"
89
+ success "Installed ~/.tmux/claude-teams-overlay.conf"
90
+ else
91
+ warn "Overlay not found in package — skipping"
92
+ fi
93
+
94
+ # ─── Team Templates ──────────────────────────────────────────────────────────
95
+ SHIPWRIGHT_DIR="$HOME/.shipwright"
96
+ TEMPLATES_SRC="$REPO_DIR/tmux/templates"
97
+ if [[ -d "$TEMPLATES_SRC" ]]; then
98
+ mkdir -p "$SHIPWRIGHT_DIR/templates"
99
+ for tpl in "$TEMPLATES_SRC"/*.json; do
100
+ [[ -f "$tpl" ]] || continue
101
+ cp "$tpl" "$SHIPWRIGHT_DIR/templates/$(basename "$tpl")"
102
+ done
103
+ # Also install to legacy path for backward compatibility
104
+ mkdir -p "$HOME/.claude-teams/templates"
105
+ for tpl in "$TEMPLATES_SRC"/*.json; do
106
+ [[ -f "$tpl" ]] || continue
107
+ cp "$tpl" "$HOME/.claude-teams/templates/$(basename "$tpl")"
108
+ done
109
+ tpl_count=$(find "$SHIPWRIGHT_DIR/templates" -name '*.json' -type f 2>/dev/null | wc -l | tr -d ' ')
110
+ success "Installed ${tpl_count} team templates → ~/.shipwright/templates/"
111
+ fi
112
+
113
+ # ─── Pipeline Templates ──────────────────────────────────────────────────────
114
+ PIPELINES_SRC="$REPO_DIR/templates/pipelines"
115
+ if [[ -d "$PIPELINES_SRC" ]]; then
116
+ mkdir -p "$SHIPWRIGHT_DIR/pipelines"
117
+ for tpl in "$PIPELINES_SRC"/*.json; do
118
+ [[ -f "$tpl" ]] || continue
119
+ cp "$tpl" "$SHIPWRIGHT_DIR/pipelines/$(basename "$tpl")"
120
+ done
121
+ pip_count=$(find "$SHIPWRIGHT_DIR/pipelines" -name '*.json' -type f 2>/dev/null | wc -l | tr -d ' ')
122
+ success "Installed ${pip_count} pipeline templates → ~/.shipwright/pipelines/"
123
+ fi
124
+
125
+ # ─── Claude Code Settings ────────────────────────────────────────────────────
126
+ CLAUDE_DIR="$HOME/.claude"
127
+ SETTINGS_FILE="$CLAUDE_DIR/settings.json"
128
+ SETTINGS_TEMPLATE="$REPO_DIR/claude-code/settings.json.template"
92
129
 
93
- # ─── CLAUDE.md — Agent instructions ──────────────────────────────────────────
130
+ mkdir -p "$CLAUDE_DIR"
131
+
132
+ if [[ -f "$SETTINGS_FILE" ]]; then
133
+ # Settings exists — check for agent teams env var
134
+ if grep -q 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$SETTINGS_FILE" 2>/dev/null; then
135
+ success "Agent teams already enabled in settings.json"
136
+ else
137
+ # Try to add using jq
138
+ if jq -e '.env' "$SETTINGS_FILE" &>/dev/null 2>&1; then
139
+ tmp=$(mktemp)
140
+ jq '.env["CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS"] = "1"' "$SETTINGS_FILE" > "$tmp" && mv "$tmp" "$SETTINGS_FILE"
141
+ success "Enabled agent teams in existing settings.json"
142
+ elif jq -e '.' "$SETTINGS_FILE" &>/dev/null 2>&1; then
143
+ tmp=$(mktemp)
144
+ jq '. + {"env": {"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"}}' "$SETTINGS_FILE" > "$tmp" && mv "$tmp" "$SETTINGS_FILE"
145
+ success "Added agent teams env to settings.json"
146
+ else
147
+ warn "Could not auto-configure settings.json (JSONC detected)"
148
+ echo -e " ${DIM}Add to ~/.claude/settings.json:${RESET}"
149
+ echo -e " ${DIM}\"env\": { \"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\" }${RESET}"
150
+ fi
151
+ fi
152
+ elif [[ -f "$SETTINGS_TEMPLATE" ]]; then
153
+ cp "$SETTINGS_TEMPLATE" "$SETTINGS_FILE"
154
+ success "Installed ~/.claude/settings.json (with agent teams enabled)"
155
+ else
156
+ # Create minimal settings.json with agent teams
157
+ cat > "$SETTINGS_FILE" << 'SETTINGS_EOF'
158
+ {
159
+ "hooks": {},
160
+ "env": {
161
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
162
+ "CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY": "5",
163
+ "CLAUDE_CODE_AUTOCOMPACT_PCT_OVERRIDE": "70",
164
+ "CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
165
+ }
166
+ }
167
+ SETTINGS_EOF
168
+ success "Created ~/.claude/settings.json with agent teams enabled"
169
+ fi
170
+
171
+ # ─── Hooks ────────────────────────────────────────────────────────────────────
172
+ HOOKS_SRC="$REPO_DIR/claude-code/hooks"
173
+ if [[ -d "$HOOKS_SRC" ]]; then
174
+ mkdir -p "$CLAUDE_DIR/hooks"
175
+ hook_count=0
176
+ for hook in "$HOOKS_SRC"/*.sh; do
177
+ [[ -f "$hook" ]] || continue
178
+ dest="$CLAUDE_DIR/hooks/$(basename "$hook")"
179
+ if [[ ! -f "$dest" ]]; then
180
+ cp "$hook" "$dest"
181
+ chmod +x "$dest"
182
+ hook_count=$((hook_count + 1))
183
+ fi
184
+ done
185
+ if [[ $hook_count -gt 0 ]]; then
186
+ success "Installed ${hook_count} quality gate hooks → ~/.claude/hooks/"
187
+ else
188
+ info "Hooks already installed — skipping"
189
+ fi
190
+ fi
191
+
192
+ # ─── CLAUDE.md — Global agent instructions ────────────────────────────────────
94
193
  CLAUDE_MD_SRC="$REPO_DIR/claude-code/CLAUDE.md.shipwright"
95
- CLAUDE_MD_DST=".claude/CLAUDE.md"
194
+ GLOBAL_CLAUDE_MD="$CLAUDE_DIR/CLAUDE.md"
96
195
 
97
196
  if [[ "$SKIP_CLAUDE_MD" == "false" && -f "$CLAUDE_MD_SRC" ]]; then
98
- if [[ -f "$CLAUDE_MD_DST" ]]; then
99
- # Check if it already contains Shipwright instructions
100
- if grep -q "Shipwright" "$CLAUDE_MD_DST" 2>/dev/null; then
101
- info "CLAUDE.md already contains Shipwright instructions — skipping"
197
+ if [[ -f "$GLOBAL_CLAUDE_MD" ]]; then
198
+ if grep -q "Shipwright" "$GLOBAL_CLAUDE_MD" 2>/dev/null; then
199
+ info "~/.claude/CLAUDE.md already contains Shipwright instructions"
102
200
  else
103
- # Append Shipwright section to existing CLAUDE.md
104
- {
105
- echo ""
106
- echo "---"
107
- echo ""
108
- cat "$CLAUDE_MD_SRC"
109
- } >> "$CLAUDE_MD_DST"
110
- success "Appended Shipwright instructions to ${CLAUDE_MD_DST}"
201
+ { echo ""; echo "---"; echo ""; cat "$CLAUDE_MD_SRC"; } >> "$GLOBAL_CLAUDE_MD"
202
+ success "Appended Shipwright instructions to ~/.claude/CLAUDE.md"
203
+ fi
204
+ else
205
+ cp "$CLAUDE_MD_SRC" "$GLOBAL_CLAUDE_MD"
206
+ success "Installed ~/.claude/CLAUDE.md"
207
+ fi
208
+ fi
209
+
210
+ # ─── CLAUDE.md — Per-repo agent instructions ─────────────────────────────────
211
+ LOCAL_CLAUDE_MD=".claude/CLAUDE.md"
212
+
213
+ if [[ "$SKIP_CLAUDE_MD" == "false" && -f "$CLAUDE_MD_SRC" ]]; then
214
+ if [[ -f "$LOCAL_CLAUDE_MD" ]]; then
215
+ if grep -q "Shipwright" "$LOCAL_CLAUDE_MD" 2>/dev/null; then
216
+ info ".claude/CLAUDE.md already contains Shipwright instructions"
217
+ else
218
+ { echo ""; echo "---"; echo ""; cat "$CLAUDE_MD_SRC"; } >> "$LOCAL_CLAUDE_MD"
219
+ success "Appended Shipwright instructions to ${LOCAL_CLAUDE_MD}"
111
220
  fi
112
221
  else
113
222
  mkdir -p ".claude"
114
- cp "$CLAUDE_MD_SRC" "$CLAUDE_MD_DST"
115
- success "Created ${CLAUDE_MD_DST} with Shipwright agent instructions"
223
+ cp "$CLAUDE_MD_SRC" "$LOCAL_CLAUDE_MD"
224
+ success "Created ${LOCAL_CLAUDE_MD} with Shipwright agent instructions"
116
225
  fi
117
226
  fi
118
227
 
@@ -123,9 +232,12 @@ if [[ -n "${TMUX:-}" ]]; then
123
232
  warn "Could not reload tmux config (reload manually with prefix + r)"
124
233
  fi
125
234
 
126
- # ─── Quick-start instructions ─────────────────────────────────────────────────
235
+ # ─── Validation ───────────────────────────────────────────────────────────────
236
+ echo ""
237
+ echo -e "${CYAN}${BOLD}Running doctor...${RESET}"
127
238
  echo ""
128
- echo -e "${BOLD}Done!${RESET} tmux is configured for Claude Code Teams."
239
+ "$SCRIPT_DIR/cct-doctor.sh" || true
240
+
129
241
  echo ""
130
242
  echo -e "${BOLD}Quick start:${RESET}"
131
243
  if [[ -z "${TMUX:-}" ]]; then
@@ -135,11 +247,6 @@ else
135
247
  echo -e " ${DIM}1.${RESET} shipwright session my-feature --template feature-dev"
136
248
  fi
137
249
  echo ""
138
- echo -e "${BOLD}Layout keybindings:${RESET}"
139
- echo -e " ${CYAN}prefix + M-1${RESET} main-horizontal (leader 65% left)"
140
- echo -e " ${CYAN}prefix + M-2${RESET} main-vertical (leader 60% top)"
141
- echo -e " ${CYAN}prefix + M-3${RESET} tiled (equal sizes)"
142
- echo ""
143
250
 
144
251
  # ─── Deploy setup (--deploy) ─────────────────────────────────────────────────
145
252
  [[ "$DEPLOY_SETUP" == "false" ]] && exit 0
@@ -39,7 +39,7 @@ MAX_TURNS=""
39
39
  RESUME=false
40
40
  VERBOSE=false
41
41
  MAX_ITERATIONS_EXPLICIT=false
42
- VERSION="1.7.0"
42
+ VERSION="1.7.1"
43
43
 
44
44
  # ─── Audit & Quality Gate Defaults ───────────────────────────────────────────
45
45
  AUDIT_ENABLED=false
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
11
11
 
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
11
11
 
@@ -5,7 +5,7 @@
5
5
  # ╚═══════════════════════════════════════════════════════════════════════════╝
6
6
  set -euo pipefail
7
7
 
8
- VERSION="1.7.0"
8
+ VERSION="1.7.1"
9
9
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
10
 
11
11
  # ─── Handle subcommands ───────────────────────────────────────────────────────