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 +1 -1
- package/scripts/cct +1 -1
- package/scripts/cct-cost.sh +1 -1
- package/scripts/cct-daemon.sh +1 -1
- package/scripts/cct-doctor.sh +90 -4
- package/scripts/cct-fix.sh +1 -1
- package/scripts/cct-fleet.sh +1 -1
- package/scripts/cct-init.sh +150 -43
- package/scripts/cct-loop.sh +1 -1
- package/scripts/cct-memory.sh +1 -1
- package/scripts/cct-pipeline.sh +1 -1
- package/scripts/cct-prep.sh +1 -1
package/package.json
CHANGED
package/scripts/cct
CHANGED
package/scripts/cct-cost.sh
CHANGED
package/scripts/cct-daemon.sh
CHANGED
package/scripts/cct-doctor.sh
CHANGED
|
@@ -158,7 +158,93 @@ else
|
|
|
158
158
|
fi
|
|
159
159
|
|
|
160
160
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
161
|
-
# 3.
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
360
|
+
# 7. Terminal Compatibility
|
|
275
361
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
276
362
|
echo ""
|
|
277
363
|
echo -e "${PURPLE}${BOLD} TERMINAL${RESET}"
|
package/scripts/cct-fix.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
|
-
VERSION="1.7.
|
|
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) ─────────────────────────────────────
|
package/scripts/cct-fleet.sh
CHANGED
package/scripts/cct-init.sh
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
|
3
|
-
# ║ shipwright init —
|
|
3
|
+
# ║ shipwright init — Complete setup for Shipwright + Claude Code Teams ║
|
|
4
4
|
# ║ ║
|
|
5
|
-
# ║ Installs tmux config, overlay,
|
|
6
|
-
# ║
|
|
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} —
|
|
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 "$
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 "$
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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" "$
|
|
115
|
-
success "Created ${
|
|
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
|
-
# ───
|
|
235
|
+
# ─── Validation ───────────────────────────────────────────────────────────────
|
|
236
|
+
echo ""
|
|
237
|
+
echo -e "${CYAN}${BOLD}Running doctor...${RESET}"
|
|
127
238
|
echo ""
|
|
128
|
-
|
|
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
|
package/scripts/cct-loop.sh
CHANGED
package/scripts/cct-memory.sh
CHANGED
package/scripts/cct-pipeline.sh
CHANGED
package/scripts/cct-prep.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
|
-
VERSION="1.7.
|
|
8
|
+
VERSION="1.7.1"
|
|
9
9
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
10
|
|
|
11
11
|
# ─── Handle subcommands ───────────────────────────────────────────────────────
|