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.
Files changed (112) hide show
  1. package/README.md +160 -72
  2. package/completions/_shipwright +59 -7
  3. package/completions/shipwright.bash +24 -4
  4. package/completions/shipwright.fish +80 -2
  5. package/dashboard/server.ts +208 -0
  6. package/docs/tmux-research/TMUX-ARCHITECTURE.md +567 -0
  7. package/docs/tmux-research/TMUX-AUDIT.md +925 -0
  8. package/docs/tmux-research/TMUX-BEST-PRACTICES-2025-2026.md +829 -0
  9. package/docs/tmux-research/TMUX-QUICK-REFERENCE.md +543 -0
  10. package/docs/tmux-research/TMUX-RESEARCH-INDEX.md +438 -0
  11. package/package.json +2 -2
  12. package/scripts/lib/helpers.sh +7 -0
  13. package/scripts/sw +116 -2
  14. package/scripts/sw-activity.sh +1 -1
  15. package/scripts/sw-adaptive.sh +1 -1
  16. package/scripts/sw-adversarial.sh +1 -1
  17. package/scripts/sw-architecture-enforcer.sh +1 -1
  18. package/scripts/sw-auth.sh +1 -1
  19. package/scripts/sw-autonomous.sh +128 -38
  20. package/scripts/sw-changelog.sh +1 -1
  21. package/scripts/sw-checkpoint.sh +1 -1
  22. package/scripts/sw-ci.sh +1 -1
  23. package/scripts/sw-cleanup.sh +1 -1
  24. package/scripts/sw-code-review.sh +62 -1
  25. package/scripts/sw-connect.sh +1 -1
  26. package/scripts/sw-context.sh +1 -1
  27. package/scripts/sw-cost.sh +44 -3
  28. package/scripts/sw-daemon.sh +155 -27
  29. package/scripts/sw-dashboard.sh +1 -1
  30. package/scripts/sw-db.sh +958 -118
  31. package/scripts/sw-decompose.sh +1 -1
  32. package/scripts/sw-deps.sh +1 -1
  33. package/scripts/sw-developer-simulation.sh +1 -1
  34. package/scripts/sw-discovery.sh +1 -1
  35. package/scripts/sw-docs-agent.sh +1 -1
  36. package/scripts/sw-docs.sh +1 -1
  37. package/scripts/sw-doctor.sh +49 -1
  38. package/scripts/sw-dora.sh +1 -1
  39. package/scripts/sw-durable.sh +1 -1
  40. package/scripts/sw-e2e-orchestrator.sh +1 -1
  41. package/scripts/sw-eventbus.sh +1 -1
  42. package/scripts/sw-feedback.sh +23 -15
  43. package/scripts/sw-fix.sh +1 -1
  44. package/scripts/sw-fleet-discover.sh +1 -1
  45. package/scripts/sw-fleet-viz.sh +1 -1
  46. package/scripts/sw-fleet.sh +1 -1
  47. package/scripts/sw-github-app.sh +1 -1
  48. package/scripts/sw-github-checks.sh +4 -4
  49. package/scripts/sw-github-deploy.sh +1 -1
  50. package/scripts/sw-github-graphql.sh +1 -1
  51. package/scripts/sw-guild.sh +1 -1
  52. package/scripts/sw-heartbeat.sh +1 -1
  53. package/scripts/sw-hygiene.sh +1 -1
  54. package/scripts/sw-incident.sh +45 -6
  55. package/scripts/sw-init.sh +150 -24
  56. package/scripts/sw-instrument.sh +1 -1
  57. package/scripts/sw-intelligence.sh +1 -1
  58. package/scripts/sw-jira.sh +1 -1
  59. package/scripts/sw-launchd.sh +1 -1
  60. package/scripts/sw-linear.sh +1 -1
  61. package/scripts/sw-logs.sh +1 -1
  62. package/scripts/sw-loop.sh +204 -19
  63. package/scripts/sw-memory.sh +18 -1
  64. package/scripts/sw-mission-control.sh +1 -1
  65. package/scripts/sw-model-router.sh +1 -1
  66. package/scripts/sw-otel.sh +1 -1
  67. package/scripts/sw-oversight.sh +76 -1
  68. package/scripts/sw-pipeline-composer.sh +1 -1
  69. package/scripts/sw-pipeline-vitals.sh +1 -1
  70. package/scripts/sw-pipeline.sh +302 -18
  71. package/scripts/sw-pm.sh +70 -5
  72. package/scripts/sw-pr-lifecycle.sh +1 -1
  73. package/scripts/sw-predictive.sh +8 -1
  74. package/scripts/sw-prep.sh +1 -1
  75. package/scripts/sw-ps.sh +1 -1
  76. package/scripts/sw-public-dashboard.sh +1 -1
  77. package/scripts/sw-quality.sh +1 -1
  78. package/scripts/sw-reaper.sh +1 -1
  79. package/scripts/sw-recruit.sh +1853 -178
  80. package/scripts/sw-regression.sh +1 -1
  81. package/scripts/sw-release-manager.sh +1 -1
  82. package/scripts/sw-release.sh +1 -1
  83. package/scripts/sw-remote.sh +1 -1
  84. package/scripts/sw-replay.sh +1 -1
  85. package/scripts/sw-retro.sh +1 -1
  86. package/scripts/sw-scale.sh +1 -1
  87. package/scripts/sw-security-audit.sh +1 -1
  88. package/scripts/sw-self-optimize.sh +1 -1
  89. package/scripts/sw-session.sh +1 -1
  90. package/scripts/sw-setup.sh +263 -127
  91. package/scripts/sw-standup.sh +1 -1
  92. package/scripts/sw-status.sh +44 -2
  93. package/scripts/sw-strategic.sh +189 -41
  94. package/scripts/sw-stream.sh +1 -1
  95. package/scripts/sw-swarm.sh +42 -5
  96. package/scripts/sw-team-stages.sh +1 -1
  97. package/scripts/sw-templates.sh +4 -4
  98. package/scripts/sw-testgen.sh +66 -15
  99. package/scripts/sw-tmux-pipeline.sh +1 -1
  100. package/scripts/sw-tmux-role-color.sh +58 -0
  101. package/scripts/sw-tmux-status.sh +128 -0
  102. package/scripts/sw-tmux.sh +1 -1
  103. package/scripts/sw-trace.sh +1 -1
  104. package/scripts/sw-tracker.sh +1 -1
  105. package/scripts/sw-triage.sh +61 -37
  106. package/scripts/sw-upgrade.sh +1 -1
  107. package/scripts/sw-ux.sh +30 -2
  108. package/scripts/sw-webhook.sh +1 -1
  109. package/scripts/sw-widgets.sh +1 -1
  110. package/scripts/sw-worktree.sh +1 -1
  111. package/tmux/shipwright-overlay.conf +35 -17
  112. package/tmux/tmux.conf +26 -21
@@ -8,7 +8,7 @@
8
8
  # ║ ║
9
9
  # ║ --deploy Detect platform and generate deployed.json template ║
10
10
  # ╚═══════════════════════════════════════════════════════════════════════════╝
11
- VERSION="2.0.0"
11
+ VERSION="2.1.1"
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
- read -rp "$(echo -e "${CYAN}${BOLD}▸${RESET} Overwrite ~/.tmux.conf with the Shipwright config? [Y/n] ")" tmux_confirm
85
- if [[ -z "$tmux_confirm" || "$(echo "$tmux_confirm" | tr '[:upper:]' '[:lower:]')" != "n" ]]; then
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
- read -rp "$(echo -e "${CYAN}${BOLD}▸${RESET} Add Shipwright overlay source to ~/.tmux.conf? [Y/n] ")" overlay_confirm
115
- if [[ -z "$overlay_confirm" || "$(echo "$overlay_confirm" | tr '[:upper:]' '[:lower:]')" != "n" ]]; then
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
- if [[ -x "$HOME/.tmux/plugins/tpm/bin/install_plugins" ]]; then
143
- info "Installing tmux plugins..."
144
- "$HOME/.tmux/plugins/tpm/bin/install_plugins" 2>/dev/null && \
145
- success "Plugins installed (sensible, resurrect, continuum, yank, fzf)" || \
146
- warn "Some plugins may not have installed press prefix + I inside tmux"
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
- # ─── Reload tmux config if inside tmux ─────────────────────────────────────
150
- if [[ -n "${TMUX:-}" ]]; then
151
- tmux source-file "$HOME/.tmux.conf" 2>/dev/null && \
152
- success "Reloaded tmux config (passthrough, extended-keys, plugins active)" || true
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
- success "Reloaded tmux config" || \
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 ───────────────────────────────────────────────────────────────
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.0.0"
9
+ VERSION="2.1.1"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
12
12
 
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.0.0"
9
+ VERSION="2.1.1"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
12
12
 
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.0.0"
9
+ VERSION="2.1.1"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
12
12
 
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.0.0"
9
+ VERSION="2.1.1"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
12
12
 
@@ -6,7 +6,7 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.0.0"
9
+ VERSION="2.1.1"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
12
12
 
@@ -4,7 +4,7 @@
4
4
  # ║ ║
5
5
  # ║ Captures tmux pane scrollback and provides log browsing/search. ║
6
6
  # ╚═══════════════════════════════════════════════════════════════════════════╝
7
- VERSION="2.0.0"
7
+ VERSION="2.1.1"
8
8
  set -euo pipefail
9
9
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
10
10