shipwright-cli 2.1.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/package.json +1 -1
- package/scripts/sw +1 -1
- 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 +1 -1
- 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 +1 -1
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +1 -1
- package/scripts/sw-cost.sh +1 -1
- package/scripts/sw-daemon.sh +1 -1
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +1 -1
- 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 +1 -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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/scripts/sw-init.sh +1 -1
- 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 +1 -1
- package/scripts/sw-memory.sh +1 -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 +1 -1
- package/scripts/sw-pipeline-composer.sh +1 -1
- package/scripts/sw-pipeline-vitals.sh +1 -1
- package/scripts/sw-pipeline.sh +42 -7
- package/scripts/sw-pm.sh +1 -1
- package/scripts/sw-pr-lifecycle.sh +1 -1
- package/scripts/sw-predictive.sh +1 -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-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 +1 -1
- package/scripts/sw-standup.sh +1 -1
- package/scripts/sw-status.sh +1 -1
- package/scripts/sw-strategic.sh +1 -1
- package/scripts/sw-stream.sh +1 -1
- package/scripts/sw-swarm.sh +1 -1
- package/scripts/sw-team-stages.sh +1 -1
- package/scripts/sw-templates.sh +1 -1
- package/scripts/sw-testgen.sh +1 -1
- package/scripts/sw-tmux-pipeline.sh +1 -1
- 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 +1 -1
- 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/templates/pipelines/autonomous.json +2 -2
- package/tmux/tmux.conf +3 -0
package/scripts/sw-pipeline.sh
CHANGED
|
@@ -11,7 +11,7 @@ unset CLAUDECODE 2>/dev/null || true
|
|
|
11
11
|
# Ignore SIGHUP so tmux attach/detach doesn't kill long-running plan/design/review stages
|
|
12
12
|
trap '' HUP
|
|
13
13
|
|
|
14
|
-
VERSION="2.1.
|
|
14
|
+
VERSION="2.1.1"
|
|
15
15
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
16
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
17
17
|
|
|
@@ -204,6 +204,7 @@ MODEL=""
|
|
|
204
204
|
AGENTS=""
|
|
205
205
|
PIPELINE_AGENT_ID="${PIPELINE_AGENT_ID:-pipeline-$$}"
|
|
206
206
|
SKIP_GATES=false
|
|
207
|
+
HEADLESS=false
|
|
207
208
|
GIT_BRANCH=""
|
|
208
209
|
GITHUB_ISSUE=""
|
|
209
210
|
TASK_TYPE=""
|
|
@@ -226,6 +227,7 @@ CLEANUP_WORKTREE=false
|
|
|
226
227
|
ORIGINAL_REPO_DIR=""
|
|
227
228
|
REPO_OVERRIDE=""
|
|
228
229
|
_cleanup_done=""
|
|
230
|
+
PIPELINE_EXIT_CODE=1 # assume failure until run_pipeline succeeds
|
|
229
231
|
|
|
230
232
|
# GitHub metadata (populated during intake)
|
|
231
233
|
ISSUE_LABELS=""
|
|
@@ -273,6 +275,7 @@ show_help() {
|
|
|
273
275
|
echo -e " ${DIM}--model <model>${RESET} Override AI model (opus, sonnet, haiku)"
|
|
274
276
|
echo -e " ${DIM}--agents <n>${RESET} Override agent count"
|
|
275
277
|
echo -e " ${DIM}--skip-gates${RESET} Auto-approve all gates (fully autonomous)"
|
|
278
|
+
echo -e " ${DIM}--headless${RESET} Full headless mode (skip gates, no prompts)"
|
|
276
279
|
echo -e " ${DIM}--base <branch>${RESET} Base branch for PR (default: main)"
|
|
277
280
|
echo -e " ${DIM}--reviewers \"a,b\"${RESET} Request PR reviewers (auto-detected if omitted)"
|
|
278
281
|
echo -e " ${DIM}--labels \"a,b\"${RESET} Add labels to PR (inherited from issue if omitted)"
|
|
@@ -357,6 +360,7 @@ parse_args() {
|
|
|
357
360
|
--model) MODEL="$2"; shift 2 ;;
|
|
358
361
|
--agents) AGENTS="$2"; shift 2 ;;
|
|
359
362
|
--skip-gates) SKIP_GATES=true; shift ;;
|
|
363
|
+
--headless) HEADLESS=true; SKIP_GATES=true; shift ;;
|
|
360
364
|
--base) BASE_BRANCH="$2"; shift 2 ;;
|
|
361
365
|
--reviewers) REVIEWERS="$2"; shift 2 ;;
|
|
362
366
|
--labels) LABELS="$2"; shift 2 ;;
|
|
@@ -393,6 +397,20 @@ parse_args() {
|
|
|
393
397
|
PIPELINE_NAME_ARG=""
|
|
394
398
|
parse_args "$@"
|
|
395
399
|
|
|
400
|
+
# ─── Non-Interactive Detection ──────────────────────────────────────────────
|
|
401
|
+
# When stdin is not a terminal (background, pipe, nohup, tmux send-keys),
|
|
402
|
+
# auto-enable headless mode to prevent read prompts from killing the script.
|
|
403
|
+
if [[ ! -t 0 ]]; then
|
|
404
|
+
HEADLESS=true
|
|
405
|
+
if [[ "$SKIP_GATES" != "true" ]]; then
|
|
406
|
+
SKIP_GATES=true
|
|
407
|
+
fi
|
|
408
|
+
fi
|
|
409
|
+
# --worktree implies headless when stdin is not a terminal
|
|
410
|
+
if [[ "$AUTO_WORKTREE" == "true" && "$SKIP_GATES" != "true" && ! -t 0 ]]; then
|
|
411
|
+
SKIP_GATES=true
|
|
412
|
+
fi
|
|
413
|
+
|
|
396
414
|
# ─── Directory Setup ────────────────────────────────────────────────────────
|
|
397
415
|
|
|
398
416
|
setup_dirs() {
|
|
@@ -411,10 +429,11 @@ find_pipeline_config() {
|
|
|
411
429
|
local name="$1"
|
|
412
430
|
local locations=(
|
|
413
431
|
"$REPO_DIR/templates/pipelines/${name}.json"
|
|
432
|
+
"${PROJECT_ROOT:-}/templates/pipelines/${name}.json"
|
|
414
433
|
"$HOME/.shipwright/pipelines/${name}.json"
|
|
415
434
|
)
|
|
416
435
|
for loc in "${locations[@]}"; do
|
|
417
|
-
if [[ -f "$loc" ]]; then
|
|
436
|
+
if [[ -n "$loc" && -f "$loc" ]]; then
|
|
418
437
|
echo "$loc"
|
|
419
438
|
return 0
|
|
420
439
|
fi
|
|
@@ -7480,7 +7499,9 @@ run_pipeline() {
|
|
|
7480
7499
|
if [[ "$build_gate" == "approve" && "$SKIP_GATES" != "true" ]]; then
|
|
7481
7500
|
show_stage_preview "build"
|
|
7482
7501
|
local answer=""
|
|
7483
|
-
|
|
7502
|
+
if [[ -t 0 ]]; then
|
|
7503
|
+
read -rp " Proceed with build+test (self-healing)? [Y/n] " answer || true
|
|
7504
|
+
fi
|
|
7484
7505
|
if [[ "$answer" =~ ^[Nn] ]]; then
|
|
7485
7506
|
update_status "paused" "build"
|
|
7486
7507
|
info "Pipeline paused. Resume with: ${DIM}shipwright pipeline resume${RESET}"
|
|
@@ -7518,7 +7539,12 @@ run_pipeline() {
|
|
|
7518
7539
|
if [[ "$gate" == "approve" && "$SKIP_GATES" != "true" ]]; then
|
|
7519
7540
|
show_stage_preview "$id"
|
|
7520
7541
|
local answer=""
|
|
7521
|
-
|
|
7542
|
+
if [[ -t 0 ]]; then
|
|
7543
|
+
read -rp " Proceed with ${id}? [Y/n] " answer || true
|
|
7544
|
+
else
|
|
7545
|
+
# Non-interactive: auto-approve (shouldn't reach here if headless detection works)
|
|
7546
|
+
info "Non-interactive mode — auto-approving ${id}"
|
|
7547
|
+
fi
|
|
7522
7548
|
if [[ "$answer" =~ ^[Nn] ]]; then
|
|
7523
7549
|
update_status "paused" "$id"
|
|
7524
7550
|
info "Pipeline paused at ${BOLD}$id${RESET}. Resume with: ${DIM}shipwright pipeline resume${RESET}"
|
|
@@ -7826,8 +7852,14 @@ pipeline_cleanup_worktree() {
|
|
|
7826
7852
|
|
|
7827
7853
|
if [[ -n "${ORIGINAL_REPO_DIR:-}" && "$worktree_path" != "$ORIGINAL_REPO_DIR" ]]; then
|
|
7828
7854
|
cd "$ORIGINAL_REPO_DIR" 2>/dev/null || cd /
|
|
7829
|
-
|
|
7830
|
-
|
|
7855
|
+
# Only clean up worktree on success — preserve on failure for inspection
|
|
7856
|
+
if [[ "${PIPELINE_EXIT_CODE:-1}" -eq 0 ]]; then
|
|
7857
|
+
info "Cleaning up worktree: ${DIM}${worktree_path}${RESET}"
|
|
7858
|
+
git worktree remove --force "$worktree_path" 2>/dev/null || true
|
|
7859
|
+
else
|
|
7860
|
+
warn "Pipeline failed — worktree preserved for inspection: ${DIM}${worktree_path}${RESET}"
|
|
7861
|
+
warn "Clean up manually: ${DIM}git worktree remove --force ${worktree_path}${RESET}"
|
|
7862
|
+
fi
|
|
7831
7863
|
fi
|
|
7832
7864
|
}
|
|
7833
7865
|
|
|
@@ -8110,7 +8142,9 @@ pipeline_start() {
|
|
|
8110
8142
|
|
|
8111
8143
|
local gate_count
|
|
8112
8144
|
gate_count=$(jq '[.stages[] | select(.gate == "approve" and .enabled == true)] | length' "$PIPELINE_CONFIG")
|
|
8113
|
-
if [[ "$
|
|
8145
|
+
if [[ "$HEADLESS" == "true" ]]; then
|
|
8146
|
+
echo -e " ${BOLD}Gates:${RESET} ${YELLOW}all auto (headless — non-interactive stdin detected)${RESET}"
|
|
8147
|
+
elif [[ "$SKIP_GATES" == "true" ]]; then
|
|
8114
8148
|
echo -e " ${BOLD}Gates:${RESET} ${YELLOW}all auto (--skip-gates)${RESET}"
|
|
8115
8149
|
else
|
|
8116
8150
|
echo -e " ${BOLD}Gates:${RESET} ${gate_count} approval gate(s)"
|
|
@@ -8162,6 +8196,7 @@ pipeline_start() {
|
|
|
8162
8196
|
|
|
8163
8197
|
run_pipeline
|
|
8164
8198
|
local exit_code=$?
|
|
8199
|
+
PIPELINE_EXIT_CODE="$exit_code"
|
|
8165
8200
|
|
|
8166
8201
|
# Send completion notification + event
|
|
8167
8202
|
local total_dur_s=""
|
package/scripts/sw-pm.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
package/scripts/sw-predictive.sh
CHANGED
package/scripts/sw-prep.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Handle subcommands ───────────────────────────────────────────────────────
|
package/scripts/sw-ps.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Displays a table of agents running in claude-* tmux windows with ║
|
|
6
6
|
# ║ PID, status, idle time, and pane references. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.1.
|
|
8
|
+
VERSION="2.1.1"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/scripts/sw-quality.sh
CHANGED
package/scripts/sw-reaper.sh
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# ║ shipwright reaper --watch Continuous loop (default: 5s) ║
|
|
12
12
|
# ║ shipwright reaper --dry-run Preview what would be reaped ║
|
|
13
13
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
14
|
-
VERSION="2.1.
|
|
14
|
+
VERSION="2.1.1"
|
|
15
15
|
set -euo pipefail
|
|
16
16
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
17
17
|
|
package/scripts/sw-regression.sh
CHANGED
package/scripts/sw-release.sh
CHANGED
package/scripts/sw-remote.sh
CHANGED
package/scripts/sw-replay.sh
CHANGED
package/scripts/sw-retro.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
package/scripts/sw-scale.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
package/scripts/sw-session.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# ║ Supports --template to scaffold from a team template and --terminal ║
|
|
9
9
|
# ║ to select a terminal adapter (tmux, iterm2, wezterm). ║
|
|
10
10
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
11
|
-
VERSION="2.1.
|
|
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
|
|
package/scripts/sw-setup.sh
CHANGED
package/scripts/sw-standup.sh
CHANGED
package/scripts/sw-status.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# ║ ║
|
|
5
5
|
# ║ Shows running teams, agent windows, and task progress. ║
|
|
6
6
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
7
|
-
VERSION="2.1.
|
|
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
|
|
package/scripts/sw-strategic.sh
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# When sourced, do NOT add set -euo pipefail — the parent handles that.
|
|
8
8
|
# When run directly, main() sets up the error handling.
|
|
9
9
|
|
|
10
|
-
VERSION="2.1.
|
|
10
|
+
VERSION="2.1.1"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
|
13
13
|
CYAN='\033[38;2;0;212;255m'
|
package/scripts/sw-stream.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Streams tmux pane output in real-time to the dashboard or CLI. ║
|
|
6
6
|
# ║ Captures output periodically, tags by agent/team, supports replay. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.1.
|
|
8
|
+
VERSION="2.1.1"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/scripts/sw-swarm.sh
CHANGED
package/scripts/sw-templates.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Templates define reusable agent team configurations (roles, layout, ║
|
|
6
6
|
# ║ focus areas) that shipwright session --template can use to scaffold teams. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.1.
|
|
8
|
+
VERSION="2.1.1"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/scripts/sw-testgen.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Handle subcommands ───────────────────────────────────────────────────────
|
package/scripts/sw-tmux.sh
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# ║ shipwright tmux fix — Auto-fix common issues ║
|
|
12
12
|
# ║ shipwright tmux reload — Reload tmux config ║
|
|
13
13
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
14
|
-
VERSION="2.1.
|
|
14
|
+
VERSION="2.1.1"
|
|
15
15
|
set -euo pipefail
|
|
16
16
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
17
17
|
|
package/scripts/sw-trace.sh
CHANGED
package/scripts/sw-tracker.sh
CHANGED
package/scripts/sw-triage.sh
CHANGED
package/scripts/sw-upgrade.sh
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
|
3
3
|
# ║ sw upgrade — Detect and apply updates from the repo ║
|
|
4
4
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
5
|
-
VERSION="2.1.
|
|
5
|
+
VERSION="2.1.1"
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
package/scripts/sw-ux.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
|
@@ -58,7 +58,7 @@ UX_CONFIG_REPO="./.claude/ux-config.json"
|
|
|
58
58
|
|
|
59
59
|
# Detect accessibility modes
|
|
60
60
|
should_disable_colors() {
|
|
61
|
-
[[ -n "${NO_COLOR:-}" ]] || [[ -n "${CLICOLOR_FORCE:-}" && "$CLICOLOR_FORCE" == "0" ]]
|
|
61
|
+
[[ -n "${NO_COLOR:-}" ]] || [[ "${FORCE_COLOR:-}" == "0" ]] || [[ -n "${CLICOLOR_FORCE:-}" && "$CLICOLOR_FORCE" == "0" ]]
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
has_reduced_motion() {
|
|
@@ -408,11 +408,36 @@ set_reduced_motion() {
|
|
|
408
408
|
enable_screen_reader_mode() {
|
|
409
409
|
# Disable colors and animations for screen reader compatibility
|
|
410
410
|
export NO_COLOR=1
|
|
411
|
+
export FORCE_COLOR=0
|
|
411
412
|
export PREFERS_REDUCED_MOTION=1
|
|
413
|
+
|
|
414
|
+
# Propagate to tmux global environment so new panes inherit
|
|
415
|
+
if [[ -n "${TMUX:-}" ]]; then
|
|
416
|
+
tmux set-environment -g NO_COLOR 1
|
|
417
|
+
tmux set-environment -g FORCE_COLOR 0
|
|
418
|
+
tmux set-environment -g PREFERS_REDUCED_MOTION 1
|
|
419
|
+
fi
|
|
420
|
+
|
|
412
421
|
success "Screen reader mode enabled (colors and animations disabled)"
|
|
413
422
|
emit_event "ux_accessibility" "feature=screen_reader"
|
|
414
423
|
}
|
|
415
424
|
|
|
425
|
+
disable_screen_reader_mode() {
|
|
426
|
+
unset NO_COLOR
|
|
427
|
+
unset FORCE_COLOR
|
|
428
|
+
unset PREFERS_REDUCED_MOTION
|
|
429
|
+
|
|
430
|
+
# Remove from tmux global environment
|
|
431
|
+
if [[ -n "${TMUX:-}" ]]; then
|
|
432
|
+
tmux set-environment -g -u NO_COLOR 2>/dev/null || true
|
|
433
|
+
tmux set-environment -g -u FORCE_COLOR 2>/dev/null || true
|
|
434
|
+
tmux set-environment -g -u PREFERS_REDUCED_MOTION 2>/dev/null || true
|
|
435
|
+
fi
|
|
436
|
+
|
|
437
|
+
success "Screen reader mode disabled (colors and animations restored)"
|
|
438
|
+
emit_event "ux_accessibility" "feature=screen_reader_disabled"
|
|
439
|
+
}
|
|
440
|
+
|
|
416
441
|
# ─── Formatting Helpers ───────────────────────────────────────────────────
|
|
417
442
|
format_diff_line() {
|
|
418
443
|
local line="$1"
|
|
@@ -648,6 +673,9 @@ main() {
|
|
|
648
673
|
--screen-reader)
|
|
649
674
|
enable_screen_reader_mode
|
|
650
675
|
;;
|
|
676
|
+
--no-screen-reader)
|
|
677
|
+
disable_screen_reader_mode
|
|
678
|
+
;;
|
|
651
679
|
*)
|
|
652
680
|
error "Unknown accessibility option: $1"
|
|
653
681
|
exit 1
|
package/scripts/sw-webhook.sh
CHANGED
|
@@ -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.1.
|
|
9
|
+
VERSION="2.1.1"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
|
package/scripts/sw-widgets.sh
CHANGED
package/scripts/sw-worktree.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Each agent gets its own worktree so parallel agents don't clobber ║
|
|
6
6
|
# ║ each other's files. Worktrees live in .worktrees/ relative to root. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.1.
|
|
8
|
+
VERSION="2.1.1"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/tmux/tmux.conf
CHANGED
|
@@ -39,6 +39,9 @@ set -as terminal-features 'xterm*:extkeys'
|
|
|
39
39
|
# Signal true color support to apps inside tmux.
|
|
40
40
|
# Without this, Claude Code falls back to 256-color ANSI palette (washed-out).
|
|
41
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
|
|
42
45
|
|
|
43
46
|
# ─── Mouse ──────────────────────────────────────────────────────────────
|
|
44
47
|
set -g mouse on
|