shipwright-cli 2.0.0 → 2.1.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/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 +302 -18
- 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 +30 -2
- package/scripts/sw-webhook.sh +1 -1
- package/scripts/sw-widgets.sh +1 -1
- package/scripts/sw-worktree.sh +1 -1
- package/tmux/shipwright-overlay.conf +35 -17
- package/tmux/tmux.conf +26 -21
|
@@ -27,9 +27,10 @@
|
|
|
27
27
|
set -g pane-border-status top
|
|
28
28
|
|
|
29
29
|
# Format: pane index, agent name, running command, zoom indicator
|
|
30
|
-
# Active pane
|
|
30
|
+
# Active pane: bold + bright │ Inactive: muted, recessed
|
|
31
31
|
# Uses #{pane_title} which each agent sets via OSC 2 escape sequence
|
|
32
|
-
|
|
32
|
+
# The ● dot gives a visual "alive" indicator on the active pane
|
|
33
|
+
set -g pane-border-format "#{?pane_active,#[fg=#00d4ff]#[bold] ● #P │ #{pane_title} #[fg=#52525b]│#[fg=#a1a1aa] #{pane_current_command}#{?window_zoomed_flag, #[fg=#facc15]#[bold]⊞ FOCUS,},#[fg=#52525b] #P │ #[fg=#71717a]#{pane_title} #[fg=#333355]│ #[fg=#52525b]#{pane_current_command}}"
|
|
33
34
|
|
|
34
35
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
35
36
|
# LAYOUT — Optimize for multi-agent pane layouts
|
|
@@ -40,19 +41,35 @@ set -g pane-border-format "#{?pane_active,#[fg=#00d4ff]#[bold],#[fg=#71717a]} #P
|
|
|
40
41
|
setw -g aggressive-resize on
|
|
41
42
|
|
|
42
43
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
43
|
-
# DARK THEME
|
|
44
|
+
# DARK THEME — Active pane gets a subtle background lift
|
|
44
45
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
# Inactive panes: deep navy, dimmed text — recedes visually
|
|
47
|
+
# Active pane: subtle bg lift, softer warm gray text — easy on the eyes
|
|
48
|
+
# NOTE: Claude Code renders its own colors for TUI elements. These fg values
|
|
49
|
+
# only affect plain terminal output (shell prompts, command output, etc.)
|
|
50
|
+
# The bg lift (#1a1a2e → #1e1e36) gives the active pane a "floating" feel.
|
|
51
|
+
set -g window-style 'bg=#1a1a2e,fg=#8888a0'
|
|
52
|
+
set -g window-active-style 'bg=#1e1e36,fg=#b4b4c8'
|
|
49
53
|
|
|
50
|
-
# Hooks
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
set-hook -g after-
|
|
54
|
-
set-hook -g after-new-
|
|
55
|
-
|
|
54
|
+
# Hooks: set pane colors on creation to prevent white flash.
|
|
55
|
+
# New panes start with inactive colors; active pane lift applies automatically.
|
|
56
|
+
set-hook -g after-split-window "select-pane -P 'bg=#1a1a2e,fg=#8888a0'"
|
|
57
|
+
set-hook -g after-new-window "select-pane -P 'bg=#1a1a2e,fg=#8888a0'"
|
|
58
|
+
set-hook -g after-new-session "select-pane -P 'bg=#1a1a2e,fg=#8888a0'"
|
|
59
|
+
|
|
60
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
61
|
+
# ROLE-COLORED BORDERS — Active pane border reflects agent role
|
|
62
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
63
|
+
# When you switch panes, a hook reads the pane title and sets the active
|
|
64
|
+
# border color to match the agent's role:
|
|
65
|
+
# leader/pm → cyan (#00d4ff) builder/dev → blue (#0066ff)
|
|
66
|
+
# reviewer → orange (#f97316) tester → yellow (#facc15)
|
|
67
|
+
# security → red (#ef4444) docs → violet (#a78bfa)
|
|
68
|
+
# optimizer → green (#4ade80) researcher → purple (#7c3aed)
|
|
69
|
+
#
|
|
70
|
+
# The hook script must exist; -q makes source-file silent if missing.
|
|
71
|
+
# Falls back to cyan for non-agent panes (plain shell, vim, etc.)
|
|
72
|
+
set-hook -g pane-focus-in "run-shell -b 'bash ~/.shipwright/scripts/sw-tmux-role-color.sh 2>/dev/null || true'"
|
|
56
73
|
|
|
57
74
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
58
75
|
# SAFETY — Confirm before killing agent panes
|
|
@@ -88,13 +105,14 @@ bind M-t setw synchronize-panes \; display-message "Team sync #{?synchronize-pan
|
|
|
88
105
|
bind M-l next-layout
|
|
89
106
|
|
|
90
107
|
# prefix + M-s → capture current pane's full scrollback to file
|
|
91
|
-
bind M-s run-shell "tmux capture-pane -pS - > /tmp/claude-pane-#{pane_title}
|
|
108
|
+
bind M-s run-shell "tmux capture-pane -pS - > /tmp/claude-pane-#{pane_title}-\$(date +%%s).txt && tmux display-message 'Captured #{pane_title} to /tmp/'"
|
|
92
109
|
|
|
93
110
|
# prefix + M-a → capture ALL panes in current window (full scrollback each)
|
|
111
|
+
# NOTE: All $() must be escaped as \$() so they run at keypress time, not config load
|
|
94
112
|
bind M-a run-shell "\
|
|
95
|
-
for pane_id in
|
|
96
|
-
title
|
|
97
|
-
tmux capture-pane -t \$pane_id -pS - > /tmp/claude-pane-\${title:-\$pane_id}
|
|
113
|
+
for pane_id in \$(tmux list-panes -F '#{pane_id}'); do \
|
|
114
|
+
title=\$(tmux display-message -t \$pane_id -p '#{pane_title}'); \
|
|
115
|
+
tmux capture-pane -t \$pane_id -pS - > /tmp/claude-pane-\${title:-\$pane_id}-\$(date +%%s).txt; \
|
|
98
116
|
done && tmux display-message 'Captured all panes to /tmp/'"
|
|
99
117
|
|
|
100
118
|
# ═══════════════════════════════════════════════════════════════════════════
|
package/tmux/tmux.conf
CHANGED
|
@@ -36,6 +36,13 @@ set -g allow-passthrough on
|
|
|
36
36
|
set -g extended-keys on
|
|
37
37
|
set -as terminal-features 'xterm*:extkeys'
|
|
38
38
|
|
|
39
|
+
# Signal true color support to apps inside tmux.
|
|
40
|
+
# Without this, Claude Code falls back to 256-color ANSI palette (washed-out).
|
|
41
|
+
set-environment -g COLORTERM truecolor
|
|
42
|
+
# Ensure TERM is correct in the global environment.
|
|
43
|
+
# Prevents inherited TERM=dumb (from launchers/IDEs) from disabling colors.
|
|
44
|
+
set-environment -g TERM tmux-256color
|
|
45
|
+
|
|
39
46
|
# ─── Mouse ──────────────────────────────────────────────────────────────
|
|
40
47
|
set -g mouse on
|
|
41
48
|
# Fix: tmux 3.4+ defaults MouseDown1Status to switch-client (sessions),
|
|
@@ -46,7 +53,8 @@ bind -T root DoubleClick1Status command-prompt -I "#W" "rename-window -- '%%'"
|
|
|
46
53
|
|
|
47
54
|
# ─── Core Behavior ─────────────────────────────────────────────────────
|
|
48
55
|
set -g base-index 1
|
|
49
|
-
|
|
56
|
+
# Claude Code expects 0-based pane indexing for agent team pane routing
|
|
57
|
+
setw -g pane-base-index 0
|
|
50
58
|
set -g renumber-windows on
|
|
51
59
|
set -sg escape-time 0
|
|
52
60
|
set -g focus-events on
|
|
@@ -71,9 +79,9 @@ set -g history-limit 250000
|
|
|
71
79
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
72
80
|
|
|
73
81
|
set -g status-position bottom
|
|
74
|
-
set -g status-interval
|
|
82
|
+
set -g status-interval 3
|
|
75
83
|
set -g status-justify left
|
|
76
|
-
set -g status-style "bg=#1a1a2e,fg=#
|
|
84
|
+
set -g status-style "bg=#1a1a2e,fg=#a1a1aa"
|
|
77
85
|
set -g status-left-length 100
|
|
78
86
|
set -g status-right-length 150
|
|
79
87
|
|
|
@@ -86,15 +94,18 @@ setw -g window-status-format "#{?#{m:claude-*,#W},#[fg=#7c3aed]#[bg=#252538] λ
|
|
|
86
94
|
# Active window; team windows get λ icon in cyan
|
|
87
95
|
setw -g window-status-current-format "#{?#{m:claude-*,#W},#[fg=#1e1e32]#[bg=#00d4ff]#[bold] λ #I:#W ,#[fg=#1e1e32]#[bg=#00d4ff]#[bold] #I:#W }#[fg=#00d4ff]#[bg=#1a1a2e]"
|
|
88
96
|
|
|
89
|
-
# Right side: key hints when prefix is active, otherwise
|
|
90
|
-
|
|
97
|
+
# Right side: key hints when prefix is active, otherwise pipeline + agents + clock
|
|
98
|
+
# Pipeline widget: shows current stage (BUILD, TEST, etc.) with stage-colored badge
|
|
99
|
+
# Agent widget: shows active agent count as λN in purple
|
|
100
|
+
# Rule: dark text (#1e1e32) on bright backgrounds, muted text on dark backgrounds
|
|
101
|
+
set -g status-right-length 200
|
|
102
|
+
set -g status-right "#{?client_prefix,#[fg=#1e1e32]#[bg=#0066ff]#[bold] T team | split - split hjkl nav G zoom S sync x kill F fzf #[fg=#1e1e32]#[bg=#00d4ff]#[bold] ^a ,#(~/.shipwright/scripts/sw-tmux-status.sh agents 2>/dev/null)#(~/.shipwright/scripts/sw-tmux-status.sh pipeline 2>/dev/null)#[fg=#71717a]#[bg=#252538] #(whoami)@#h #[fg=#1e1e32]#[bg=#7c3aed]#[bold] %H:%M #[fg=#1e1e32]#[bg=#0066ff]#[bold] %b %d #[fg=#1e1e32]#[bg=#00d4ff]#[bold] %a }"
|
|
91
103
|
|
|
92
104
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
93
105
|
# PANE STYLING
|
|
94
106
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
95
107
|
|
|
96
|
-
|
|
97
|
-
set -g window-active-style 'bg=#1a1a2e,fg=#e4e4e7'
|
|
108
|
+
# window-style/window-active-style defined in shipwright-overlay.conf (with hooks)
|
|
98
109
|
set -g pane-border-style "fg=#333355,bg=#1a1a2e"
|
|
99
110
|
set -g pane-active-border-style "fg=#00d4ff,bg=#1a1a2e"
|
|
100
111
|
# Heavy pane border lines for better visibility (tmux 3.2+)
|
|
@@ -112,13 +123,13 @@ set -gq popup-border-lines rounded
|
|
|
112
123
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
113
124
|
|
|
114
125
|
set -g message-style "bg=#00d4ff,fg=#1e1e32,bold"
|
|
115
|
-
set -g message-command-style "bg=#7c3aed,fg=#
|
|
126
|
+
set -g message-command-style "bg=#7c3aed,fg=#1e1e32,bold"
|
|
116
127
|
|
|
117
128
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
118
129
|
# MODE STYLING (copy mode, etc.)
|
|
119
130
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
120
131
|
|
|
121
|
-
setw -g mode-style "bg=#0066ff,fg=#
|
|
132
|
+
setw -g mode-style "bg=#0066ff,fg=#1e1e32,bold"
|
|
122
133
|
setw -g clock-mode-colour "#00d4ff"
|
|
123
134
|
setw -g clock-mode-style 24
|
|
124
135
|
|
|
@@ -130,7 +141,7 @@ unbind C-b
|
|
|
130
141
|
set -g prefix C-a
|
|
131
142
|
bind C-a send-prefix
|
|
132
143
|
|
|
133
|
-
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"
|
|
144
|
+
bind r source-file ~/.tmux.conf \; source-file -q ~/.tmux/shipwright-overlay.conf \; display-message "Config reloaded!"
|
|
134
145
|
|
|
135
146
|
bind | split-window -h -c "#{pane_current_path}"
|
|
136
147
|
bind - split-window -v -c "#{pane_current_path}"
|
|
@@ -152,23 +163,17 @@ bind -r C-l select-window -t :+
|
|
|
152
163
|
|
|
153
164
|
bind c new-window -c "#{pane_current_path}"
|
|
154
165
|
|
|
155
|
-
|
|
156
|
-
bind
|
|
166
|
+
# x/X bindings defined in shipwright-overlay.conf with confirm-before safety
|
|
167
|
+
# bind x → confirm-before kill-pane
|
|
168
|
+
# bind X → confirm-before kill-window
|
|
157
169
|
|
|
158
170
|
setw -g mode-keys vi
|
|
159
171
|
bind -T copy-mode-vi v send-keys -X begin-selection
|
|
160
172
|
bind -T copy-mode-vi r send-keys -X rectangle-toggle
|
|
161
173
|
bind p paste-buffer
|
|
162
174
|
|
|
163
|
-
#
|
|
164
|
-
|
|
165
|
-
"bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'" \
|
|
166
|
-
"bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -selection clipboard 2>/dev/null || xsel --clipboard 2>/dev/null'"
|
|
167
|
-
|
|
168
|
-
# Mouse drag also copies to system clipboard
|
|
169
|
-
if-shell "command -v pbcopy" \
|
|
170
|
-
"bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'pbcopy'" \
|
|
171
|
-
"bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -selection clipboard 2>/dev/null || xsel --clipboard 2>/dev/null'"
|
|
175
|
+
# Clipboard handled by tmux-yank plugin (loaded via TPM below)
|
|
176
|
+
# tmux-yank uses OSC 52 + pbcopy/xclip automatically
|
|
172
177
|
|
|
173
178
|
bind S setw synchronize-panes \; display-message "Sync #{?synchronize-panes,ON,OFF}"
|
|
174
179
|
|