shipwright-cli 2.0.0 → 2.1.0
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/README.md +160 -72
- package/completions/_shipwright +59 -7
- package/completions/shipwright.bash +24 -4
- package/completions/shipwright.fish +80 -2
- package/dashboard/server.ts +208 -0
- package/docs/tmux-research/TMUX-ARCHITECTURE.md +567 -0
- package/docs/tmux-research/TMUX-AUDIT.md +925 -0
- package/docs/tmux-research/TMUX-BEST-PRACTICES-2025-2026.md +829 -0
- package/docs/tmux-research/TMUX-QUICK-REFERENCE.md +543 -0
- package/docs/tmux-research/TMUX-RESEARCH-INDEX.md +438 -0
- package/package.json +2 -2
- package/scripts/lib/helpers.sh +7 -0
- package/scripts/sw +116 -2
- package/scripts/sw-activity.sh +1 -1
- package/scripts/sw-adaptive.sh +1 -1
- package/scripts/sw-adversarial.sh +1 -1
- package/scripts/sw-architecture-enforcer.sh +1 -1
- package/scripts/sw-auth.sh +1 -1
- package/scripts/sw-autonomous.sh +128 -38
- package/scripts/sw-changelog.sh +1 -1
- package/scripts/sw-checkpoint.sh +1 -1
- package/scripts/sw-ci.sh +1 -1
- package/scripts/sw-cleanup.sh +1 -1
- package/scripts/sw-code-review.sh +62 -1
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +1 -1
- package/scripts/sw-cost.sh +44 -3
- package/scripts/sw-daemon.sh +155 -27
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +958 -118
- package/scripts/sw-decompose.sh +1 -1
- package/scripts/sw-deps.sh +1 -1
- package/scripts/sw-developer-simulation.sh +1 -1
- package/scripts/sw-discovery.sh +1 -1
- package/scripts/sw-docs-agent.sh +1 -1
- package/scripts/sw-docs.sh +1 -1
- package/scripts/sw-doctor.sh +49 -1
- package/scripts/sw-dora.sh +1 -1
- package/scripts/sw-durable.sh +1 -1
- package/scripts/sw-e2e-orchestrator.sh +1 -1
- package/scripts/sw-eventbus.sh +1 -1
- package/scripts/sw-feedback.sh +23 -15
- package/scripts/sw-fix.sh +1 -1
- package/scripts/sw-fleet-discover.sh +1 -1
- package/scripts/sw-fleet-viz.sh +1 -1
- package/scripts/sw-fleet.sh +1 -1
- package/scripts/sw-github-app.sh +1 -1
- package/scripts/sw-github-checks.sh +4 -4
- package/scripts/sw-github-deploy.sh +1 -1
- package/scripts/sw-github-graphql.sh +1 -1
- package/scripts/sw-guild.sh +1 -1
- package/scripts/sw-heartbeat.sh +1 -1
- package/scripts/sw-hygiene.sh +1 -1
- package/scripts/sw-incident.sh +45 -6
- package/scripts/sw-init.sh +150 -24
- package/scripts/sw-instrument.sh +1 -1
- package/scripts/sw-intelligence.sh +1 -1
- package/scripts/sw-jira.sh +1 -1
- package/scripts/sw-launchd.sh +1 -1
- package/scripts/sw-linear.sh +1 -1
- package/scripts/sw-logs.sh +1 -1
- package/scripts/sw-loop.sh +204 -19
- package/scripts/sw-memory.sh +18 -1
- package/scripts/sw-mission-control.sh +1 -1
- package/scripts/sw-model-router.sh +1 -1
- package/scripts/sw-otel.sh +1 -1
- package/scripts/sw-oversight.sh +76 -1
- package/scripts/sw-pipeline-composer.sh +1 -1
- package/scripts/sw-pipeline-vitals.sh +1 -1
- package/scripts/sw-pipeline.sh +261 -12
- package/scripts/sw-pm.sh +70 -5
- package/scripts/sw-pr-lifecycle.sh +1 -1
- package/scripts/sw-predictive.sh +8 -1
- package/scripts/sw-prep.sh +1 -1
- package/scripts/sw-ps.sh +1 -1
- package/scripts/sw-public-dashboard.sh +1 -1
- package/scripts/sw-quality.sh +1 -1
- package/scripts/sw-reaper.sh +1 -1
- package/scripts/sw-recruit.sh +1853 -178
- package/scripts/sw-regression.sh +1 -1
- package/scripts/sw-release-manager.sh +1 -1
- package/scripts/sw-release.sh +1 -1
- package/scripts/sw-remote.sh +1 -1
- package/scripts/sw-replay.sh +1 -1
- package/scripts/sw-retro.sh +1 -1
- package/scripts/sw-scale.sh +1 -1
- package/scripts/sw-security-audit.sh +1 -1
- package/scripts/sw-self-optimize.sh +1 -1
- package/scripts/sw-session.sh +1 -1
- package/scripts/sw-setup.sh +263 -127
- package/scripts/sw-standup.sh +1 -1
- package/scripts/sw-status.sh +44 -2
- package/scripts/sw-strategic.sh +189 -41
- package/scripts/sw-stream.sh +1 -1
- package/scripts/sw-swarm.sh +42 -5
- package/scripts/sw-team-stages.sh +1 -1
- package/scripts/sw-templates.sh +4 -4
- package/scripts/sw-testgen.sh +66 -15
- package/scripts/sw-tmux-pipeline.sh +1 -1
- package/scripts/sw-tmux-role-color.sh +58 -0
- package/scripts/sw-tmux-status.sh +128 -0
- package/scripts/sw-tmux.sh +1 -1
- package/scripts/sw-trace.sh +1 -1
- package/scripts/sw-tracker.sh +1 -1
- package/scripts/sw-triage.sh +61 -37
- package/scripts/sw-upgrade.sh +1 -1
- package/scripts/sw-ux.sh +1 -1
- package/scripts/sw-webhook.sh +1 -1
- package/scripts/sw-widgets.sh +1 -1
- package/scripts/sw-worktree.sh +1 -1
- package/templates/pipelines/autonomous.json +2 -2
- package/tmux/shipwright-overlay.conf +35 -17
- package/tmux/tmux.conf +23 -21
package/scripts/sw-init.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# ║ ║
|
|
9
9
|
# ║ --deploy Detect platform and generate deployed.json template ║
|
|
10
10
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
11
|
-
VERSION="2.
|
|
11
|
+
VERSION="2.1.0"
|
|
12
12
|
set -euo pipefail
|
|
13
13
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
14
14
|
|
|
@@ -37,6 +37,7 @@ error() { echo -e "${RED}${BOLD}✗${RESET} $*" >&2; }
|
|
|
37
37
|
DEPLOY_SETUP=false
|
|
38
38
|
DEPLOY_PLATFORM=""
|
|
39
39
|
SKIP_CLAUDE_MD=false
|
|
40
|
+
REPAIR_MODE=false
|
|
40
41
|
|
|
41
42
|
while [[ $# -gt 0 ]]; do
|
|
42
43
|
case "$1" in
|
|
@@ -53,13 +54,18 @@ while [[ $# -gt 0 ]]; do
|
|
|
53
54
|
SKIP_CLAUDE_MD=true
|
|
54
55
|
shift
|
|
55
56
|
;;
|
|
57
|
+
--repair)
|
|
58
|
+
REPAIR_MODE=true
|
|
59
|
+
shift
|
|
60
|
+
;;
|
|
56
61
|
--help|-h)
|
|
57
|
-
echo "Usage: shipwright init [--deploy] [--platform vercel|fly|railway|docker] [--no-claude-md]"
|
|
62
|
+
echo "Usage: shipwright init [--deploy] [--platform vercel|fly|railway|docker] [--no-claude-md] [--repair]"
|
|
58
63
|
echo ""
|
|
59
64
|
echo "Options:"
|
|
60
65
|
echo " --deploy Detect deploy platform and generate deployed.json"
|
|
61
66
|
echo " --platform PLATFORM Skip detection, use specified platform"
|
|
62
67
|
echo " --no-claude-md Skip creating .claude/CLAUDE.md"
|
|
68
|
+
echo " --repair Force clean reinstall of tmux config, plugins, and adapters"
|
|
63
69
|
echo " --help, -h Show this help"
|
|
64
70
|
exit 0
|
|
65
71
|
;;
|
|
@@ -77,17 +83,38 @@ echo ""
|
|
|
77
83
|
|
|
78
84
|
# ─── tmux.conf ────────────────────────────────────────────────────────────────
|
|
79
85
|
TOOK_FULL_TMUX_CONF=false
|
|
86
|
+
IS_INTERACTIVE="${INTERACTIVE:-false}"
|
|
87
|
+
|
|
88
|
+
# --repair: remove stale files first for clean slate
|
|
89
|
+
if [[ "$REPAIR_MODE" == "true" ]]; then
|
|
90
|
+
info "Repair mode: cleaning stale tmux artifacts..."
|
|
91
|
+
rm -f "$HOME/.tmux/claude-teams-overlay.conf" 2>/dev/null || true
|
|
92
|
+
rm -f "$HOME/.tmux/claude-teams-overlay.conf.pre-upgrade.bak" 2>/dev/null || true
|
|
93
|
+
# Strip legacy overlay source lines from user's tmux.conf
|
|
94
|
+
if [[ -f "$HOME/.tmux.conf" ]] && grep -q "claude-teams-overlay" "$HOME/.tmux.conf" 2>/dev/null; then
|
|
95
|
+
tmp=$(mktemp)
|
|
96
|
+
grep -v "claude-teams-overlay" "$HOME/.tmux.conf" > "$tmp" && mv "$tmp" "$HOME/.tmux.conf"
|
|
97
|
+
success "Removed legacy claude-teams-overlay references from ~/.tmux.conf"
|
|
98
|
+
fi
|
|
99
|
+
fi
|
|
100
|
+
|
|
80
101
|
if [[ -f "$REPO_DIR/tmux/tmux.conf" ]]; then
|
|
81
|
-
if [[ -f "$HOME/.tmux.conf" ]]; then
|
|
102
|
+
if [[ -f "$HOME/.tmux.conf" ]] && [[ "$REPAIR_MODE" == "false" ]]; then
|
|
82
103
|
cp "$HOME/.tmux.conf" "$HOME/.tmux.conf.bak"
|
|
83
104
|
warn "Backed up existing ~/.tmux.conf → ~/.tmux.conf.bak"
|
|
84
|
-
|
|
85
|
-
|
|
105
|
+
if [[ "$IS_INTERACTIVE" == "true" ]]; then
|
|
106
|
+
read -rp "$(echo -e "${CYAN}${BOLD}▸${RESET} Overwrite ~/.tmux.conf with the Shipwright config? [Y/n] ")" tmux_confirm
|
|
107
|
+
if [[ -z "$tmux_confirm" || "$(echo "$tmux_confirm" | tr '[:upper:]' '[:lower:]')" != "n" ]]; then
|
|
108
|
+
cp "$REPO_DIR/tmux/tmux.conf" "$HOME/.tmux.conf"
|
|
109
|
+
success "Installed ~/.tmux.conf"
|
|
110
|
+
TOOK_FULL_TMUX_CONF=true
|
|
111
|
+
else
|
|
112
|
+
info "Kept existing ~/.tmux.conf"
|
|
113
|
+
fi
|
|
114
|
+
else
|
|
86
115
|
cp "$REPO_DIR/tmux/tmux.conf" "$HOME/.tmux.conf"
|
|
87
116
|
success "Installed ~/.tmux.conf"
|
|
88
117
|
TOOK_FULL_TMUX_CONF=true
|
|
89
|
-
else
|
|
90
|
-
info "Kept existing ~/.tmux.conf"
|
|
91
118
|
fi
|
|
92
119
|
else
|
|
93
120
|
cp "$REPO_DIR/tmux/tmux.conf" "$HOME/.tmux.conf"
|
|
@@ -107,28 +134,52 @@ else
|
|
|
107
134
|
warn "Overlay not found in package — skipping"
|
|
108
135
|
fi
|
|
109
136
|
|
|
137
|
+
# ─── Clean up legacy overlay files ───────────────────────────────────────────
|
|
138
|
+
# Renamed from claude-teams-overlay.conf → shipwright-overlay.conf in v2.0
|
|
139
|
+
if [[ -f "$HOME/.tmux/claude-teams-overlay.conf" ]]; then
|
|
140
|
+
rm -f "$HOME/.tmux/claude-teams-overlay.conf"
|
|
141
|
+
rm -f "$HOME/.tmux/claude-teams-overlay.conf.pre-upgrade.bak" 2>/dev/null || true
|
|
142
|
+
success "Removed legacy claude-teams-overlay.conf"
|
|
143
|
+
fi
|
|
144
|
+
# Strip any lingering source-file references to the old overlay name
|
|
145
|
+
if [[ -f "$HOME/.tmux.conf" ]] && grep -q "claude-teams-overlay" "$HOME/.tmux.conf" 2>/dev/null; then
|
|
146
|
+
tmp=$(mktemp)
|
|
147
|
+
grep -v "claude-teams-overlay" "$HOME/.tmux.conf" > "$tmp" && mv "$tmp" "$HOME/.tmux.conf"
|
|
148
|
+
success "Removed legacy overlay reference from ~/.tmux.conf"
|
|
149
|
+
fi
|
|
150
|
+
|
|
110
151
|
# ─── Overlay injection ───────────────────────────────────────────────────────
|
|
111
152
|
# If user kept their own tmux.conf, ensure it sources the overlay
|
|
112
153
|
if [[ "$TOOK_FULL_TMUX_CONF" == "false" && -f "$HOME/.tmux.conf" ]]; then
|
|
113
154
|
if ! grep -q "shipwright-overlay" "$HOME/.tmux.conf" 2>/dev/null; then
|
|
114
|
-
|
|
115
|
-
|
|
155
|
+
if [[ "$IS_INTERACTIVE" == "true" ]]; then
|
|
156
|
+
read -rp "$(echo -e "${CYAN}${BOLD}▸${RESET} Add Shipwright overlay source to ~/.tmux.conf? [Y/n] ")" overlay_confirm
|
|
157
|
+
if [[ -z "$overlay_confirm" || "$(echo "$overlay_confirm" | tr '[:upper:]' '[:lower:]')" != "n" ]]; then
|
|
158
|
+
{
|
|
159
|
+
echo ""
|
|
160
|
+
echo "# Shipwright agent overlay"
|
|
161
|
+
echo "source-file -q ~/.tmux/shipwright-overlay.conf"
|
|
162
|
+
} >> "$HOME/.tmux.conf"
|
|
163
|
+
success "Appended overlay source to ~/.tmux.conf"
|
|
164
|
+
else
|
|
165
|
+
info "Skipped overlay injection. Add manually:"
|
|
166
|
+
echo -e " ${DIM}source-file -q ~/.tmux/shipwright-overlay.conf${RESET}"
|
|
167
|
+
fi
|
|
168
|
+
else
|
|
116
169
|
{
|
|
117
170
|
echo ""
|
|
118
171
|
echo "# Shipwright agent overlay"
|
|
119
172
|
echo "source-file -q ~/.tmux/shipwright-overlay.conf"
|
|
120
173
|
} >> "$HOME/.tmux.conf"
|
|
121
174
|
success "Appended overlay source to ~/.tmux.conf"
|
|
122
|
-
else
|
|
123
|
-
info "Skipped overlay injection. Add manually:"
|
|
124
|
-
echo -e " ${DIM}source-file -q ~/.tmux/shipwright-overlay.conf${RESET}"
|
|
125
175
|
fi
|
|
126
176
|
fi
|
|
127
177
|
fi
|
|
128
178
|
|
|
129
179
|
# ─── TPM (Tmux Plugin Manager) ────────────────────────────────────────────
|
|
130
|
-
if [[ ! -d "$HOME/.tmux/plugins/tpm" ]]; then
|
|
180
|
+
if [[ ! -d "$HOME/.tmux/plugins/tpm" ]] || [[ "$REPAIR_MODE" == "true" ]]; then
|
|
131
181
|
info "Installing TPM (Tmux Plugin Manager)..."
|
|
182
|
+
rm -rf "$HOME/.tmux/plugins/tpm" 2>/dev/null || true
|
|
132
183
|
if git clone https://github.com/tmux-plugins/tpm "$HOME/.tmux/plugins/tpm" 2>/dev/null; then
|
|
133
184
|
success "TPM installed"
|
|
134
185
|
else
|
|
@@ -139,19 +190,70 @@ else
|
|
|
139
190
|
fi
|
|
140
191
|
|
|
141
192
|
# ─── Install TPM plugins ──────────────────────────────────────────────────
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
193
|
+
# TPM's install_plugins requires a running tmux server to parse the config.
|
|
194
|
+
# When run outside tmux (e.g., fresh OS install), we fall back to cloning
|
|
195
|
+
# each plugin directly — the repos are the plugins, no build step needed.
|
|
196
|
+
_tmux_plugins_installed=false
|
|
197
|
+
if [[ -n "${TMUX:-}" ]] && [[ -x "$HOME/.tmux/plugins/tpm/bin/install_plugins" ]]; then
|
|
198
|
+
info "Installing tmux plugins via TPM..."
|
|
199
|
+
if "$HOME/.tmux/plugins/tpm/bin/install_plugins" 2>/dev/null; then
|
|
200
|
+
success "Plugins installed via TPM"
|
|
201
|
+
_tmux_plugins_installed=true
|
|
202
|
+
fi
|
|
147
203
|
fi
|
|
148
204
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
205
|
+
if [[ "$_tmux_plugins_installed" == "false" ]]; then
|
|
206
|
+
info "Installing tmux plugins directly (not inside tmux)..."
|
|
207
|
+
_plugin_repos=(
|
|
208
|
+
"tmux-plugins/tmux-sensible"
|
|
209
|
+
"tmux-plugins/tmux-resurrect"
|
|
210
|
+
"tmux-plugins/tmux-continuum"
|
|
211
|
+
"tmux-plugins/tmux-yank"
|
|
212
|
+
"sainnhe/tmux-fzf"
|
|
213
|
+
)
|
|
214
|
+
_plugins_ok=0
|
|
215
|
+
_plugins_fail=0
|
|
216
|
+
for _repo in "${_plugin_repos[@]}"; do
|
|
217
|
+
_name="${_repo##*/}"
|
|
218
|
+
_dest="$HOME/.tmux/plugins/$_name"
|
|
219
|
+
if [[ -d "$_dest" ]] && [[ "$REPAIR_MODE" == "false" ]]; then
|
|
220
|
+
_plugins_ok=$((_plugins_ok + 1))
|
|
221
|
+
else
|
|
222
|
+
rm -rf "$_dest" 2>/dev/null || true
|
|
223
|
+
if git clone "https://github.com/$_repo" "$_dest" 2>/dev/null; then
|
|
224
|
+
_plugins_ok=$((_plugins_ok + 1))
|
|
225
|
+
else
|
|
226
|
+
_plugins_fail=$((_plugins_fail + 1))
|
|
227
|
+
fi
|
|
228
|
+
fi
|
|
229
|
+
done
|
|
230
|
+
if [[ $_plugins_fail -eq 0 ]]; then
|
|
231
|
+
success "Installed ${_plugins_ok} tmux plugins (sensible, resurrect, continuum, yank, fzf)"
|
|
232
|
+
else
|
|
233
|
+
warn "${_plugins_ok} plugins installed, ${_plugins_fail} failed — retry with: shipwright tmux install"
|
|
234
|
+
fi
|
|
153
235
|
fi
|
|
154
236
|
|
|
237
|
+
# ─── tmux Adapter ────────────────────────────────────────────────────────────
|
|
238
|
+
# Deploy the tmux adapter (pane ID safety layer) to ~/.shipwright/adapters/
|
|
239
|
+
if [[ -f "$SCRIPT_DIR/adapters/tmux-adapter.sh" ]]; then
|
|
240
|
+
mkdir -p "$HOME/.shipwright/adapters"
|
|
241
|
+
cp "$SCRIPT_DIR/adapters/tmux-adapter.sh" "$HOME/.shipwright/adapters/tmux-adapter.sh"
|
|
242
|
+
chmod +x "$HOME/.shipwright/adapters/tmux-adapter.sh"
|
|
243
|
+
success "Installed tmux adapter → ~/.shipwright/adapters/"
|
|
244
|
+
fi
|
|
245
|
+
|
|
246
|
+
# ─── tmux Status Widgets & Role Colors ──────────────────────────────────────
|
|
247
|
+
# Deploy scripts called by tmux hooks and #() status-bar widgets
|
|
248
|
+
mkdir -p "$HOME/.shipwright/scripts"
|
|
249
|
+
for _widget in sw-tmux-status.sh sw-tmux-role-color.sh; do
|
|
250
|
+
if [[ -f "$SCRIPT_DIR/$_widget" ]]; then
|
|
251
|
+
cp "$SCRIPT_DIR/$_widget" "$HOME/.shipwright/scripts/$_widget"
|
|
252
|
+
chmod +x "$HOME/.shipwright/scripts/$_widget"
|
|
253
|
+
fi
|
|
254
|
+
done
|
|
255
|
+
success "Installed tmux widgets → ~/.shipwright/scripts/"
|
|
256
|
+
|
|
155
257
|
# ─── Fix iTerm2 mouse reporting if disabled ────────────────────────────────
|
|
156
258
|
if [[ "${LC_TERMINAL:-${TERM_PROGRAM:-}}" == *iTerm* ]]; then
|
|
157
259
|
ITERM_MOUSE="$(defaults read com.googlecode.iterm2 "New Bookmarks" 2>/dev/null \
|
|
@@ -165,6 +267,27 @@ if [[ "${LC_TERMINAL:-${TERM_PROGRAM:-}}" == *iTerm* ]]; then
|
|
|
165
267
|
fi
|
|
166
268
|
fi
|
|
167
269
|
|
|
270
|
+
# ─── Verify tmux deployment ──────────────────────────────────────────────────
|
|
271
|
+
_verify_fail=0
|
|
272
|
+
if [[ ! -f "$HOME/.tmux.conf" ]]; then
|
|
273
|
+
error "VERIFY FAILED: ~/.tmux.conf not found after install"
|
|
274
|
+
_verify_fail=1
|
|
275
|
+
elif ! grep -q "allow-passthrough" "$HOME/.tmux.conf" 2>/dev/null; then
|
|
276
|
+
error "VERIFY FAILED: ~/.tmux.conf missing allow-passthrough (Claude Code compat)"
|
|
277
|
+
_verify_fail=1
|
|
278
|
+
fi
|
|
279
|
+
if [[ ! -f "$HOME/.tmux/shipwright-overlay.conf" ]]; then
|
|
280
|
+
error "VERIFY FAILED: ~/.tmux/shipwright-overlay.conf not found"
|
|
281
|
+
_verify_fail=1
|
|
282
|
+
fi
|
|
283
|
+
if [[ ! -d "$HOME/.tmux/plugins/tpm" ]]; then
|
|
284
|
+
warn "VERIFY: TPM not installed — press prefix + I inside tmux to install"
|
|
285
|
+
_verify_fail=1
|
|
286
|
+
fi
|
|
287
|
+
if [[ $_verify_fail -eq 0 ]]; then
|
|
288
|
+
success "Verified: tmux config, overlay, TPM, and plugins all deployed"
|
|
289
|
+
fi
|
|
290
|
+
|
|
168
291
|
# ─── Team Templates ──────────────────────────────────────────────────────────
|
|
169
292
|
SHIPWRIGHT_DIR="$HOME/.shipwright"
|
|
170
293
|
TEMPLATES_SRC="$REPO_DIR/tmux/templates"
|
|
@@ -447,9 +570,12 @@ fi
|
|
|
447
570
|
|
|
448
571
|
# ─── Reload tmux if inside a session ──────────────────────────────────────────
|
|
449
572
|
if [[ -n "${TMUX:-}" ]]; then
|
|
450
|
-
tmux source-file "$HOME/.tmux.conf" 2>/dev/null
|
|
451
|
-
|
|
573
|
+
if tmux source-file "$HOME/.tmux.conf" 2>/dev/null; then
|
|
574
|
+
tmux source-file -q "$HOME/.tmux/shipwright-overlay.conf" 2>/dev/null || true
|
|
575
|
+
success "Reloaded tmux config + overlay"
|
|
576
|
+
else
|
|
452
577
|
warn "Could not reload tmux config (reload manually with prefix + r)"
|
|
578
|
+
fi
|
|
453
579
|
fi
|
|
454
580
|
|
|
455
581
|
# ─── Validation ───────────────────────────────────────────────────────────────
|
package/scripts/sw-instrument.sh
CHANGED
package/scripts/sw-jira.sh
CHANGED
package/scripts/sw-launchd.sh
CHANGED
package/scripts/sw-linear.sh
CHANGED
package/scripts/sw-logs.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# ║ ║
|
|
5
5
|
# ║ Captures tmux pane scrollback and provides log browsing/search. ║
|
|
6
6
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
7
|
-
VERSION="2.
|
|
7
|
+
VERSION="2.1.0"
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|