shipwright-cli 1.9.0 → 2.0.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/.claude/hooks/post-tool-use.sh +12 -5
- package/README.md +114 -36
- package/completions/_shipwright +212 -32
- package/completions/shipwright.bash +97 -25
- package/docs/strategy/01-market-research.md +619 -0
- package/docs/strategy/02-mission-and-brand.md +587 -0
- package/docs/strategy/03-gtm-and-roadmap.md +759 -0
- package/docs/strategy/QUICK-START.txt +289 -0
- package/docs/strategy/README.md +172 -0
- package/package.json +4 -2
- package/scripts/sw +217 -2
- package/scripts/sw-activity.sh +500 -0
- package/scripts/sw-adaptive.sh +925 -0
- package/scripts/sw-adversarial.sh +1 -1
- package/scripts/sw-architecture-enforcer.sh +1 -1
- package/scripts/sw-auth.sh +613 -0
- package/scripts/sw-autonomous.sh +664 -0
- package/scripts/sw-changelog.sh +704 -0
- package/scripts/sw-checkpoint.sh +79 -1
- package/scripts/sw-ci.sh +602 -0
- package/scripts/sw-cleanup.sh +192 -7
- package/scripts/sw-code-review.sh +637 -0
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +605 -0
- package/scripts/sw-cost.sh +1 -1
- package/scripts/sw-daemon.sh +812 -138
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +540 -0
- package/scripts/sw-decompose.sh +539 -0
- package/scripts/sw-deps.sh +551 -0
- package/scripts/sw-developer-simulation.sh +1 -1
- package/scripts/sw-discovery.sh +412 -0
- package/scripts/sw-docs-agent.sh +539 -0
- package/scripts/sw-docs.sh +1 -1
- package/scripts/sw-doctor.sh +59 -1
- package/scripts/sw-dora.sh +615 -0
- package/scripts/sw-durable.sh +710 -0
- package/scripts/sw-e2e-orchestrator.sh +535 -0
- package/scripts/sw-eventbus.sh +393 -0
- package/scripts/sw-feedback.sh +471 -0
- package/scripts/sw-fix.sh +1 -1
- package/scripts/sw-fleet-discover.sh +567 -0
- package/scripts/sw-fleet-viz.sh +404 -0
- package/scripts/sw-fleet.sh +8 -1
- package/scripts/sw-github-app.sh +596 -0
- 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 +569 -0
- package/scripts/sw-heartbeat.sh +1 -1
- package/scripts/sw-hygiene.sh +559 -0
- package/scripts/sw-incident.sh +617 -0
- package/scripts/sw-init.sh +88 -1
- package/scripts/sw-instrument.sh +699 -0
- package/scripts/sw-intelligence.sh +1 -1
- package/scripts/sw-jira.sh +1 -1
- package/scripts/sw-launchd.sh +366 -31
- package/scripts/sw-linear.sh +1 -1
- package/scripts/sw-logs.sh +1 -1
- package/scripts/sw-loop.sh +507 -51
- package/scripts/sw-memory.sh +198 -3
- package/scripts/sw-mission-control.sh +487 -0
- package/scripts/sw-model-router.sh +545 -0
- package/scripts/sw-otel.sh +596 -0
- package/scripts/sw-oversight.sh +689 -0
- package/scripts/sw-pipeline-composer.sh +8 -8
- package/scripts/sw-pipeline-vitals.sh +1096 -0
- package/scripts/sw-pipeline.sh +2451 -180
- package/scripts/sw-pm.sh +693 -0
- package/scripts/sw-pr-lifecycle.sh +522 -0
- package/scripts/sw-predictive.sh +1 -1
- package/scripts/sw-prep.sh +1 -1
- package/scripts/sw-ps.sh +4 -3
- package/scripts/sw-public-dashboard.sh +798 -0
- package/scripts/sw-quality.sh +595 -0
- package/scripts/sw-reaper.sh +5 -3
- package/scripts/sw-recruit.sh +573 -0
- package/scripts/sw-regression.sh +642 -0
- package/scripts/sw-release-manager.sh +736 -0
- package/scripts/sw-release.sh +706 -0
- package/scripts/sw-remote.sh +1 -1
- package/scripts/sw-replay.sh +520 -0
- package/scripts/sw-retro.sh +691 -0
- package/scripts/sw-scale.sh +444 -0
- package/scripts/sw-security-audit.sh +505 -0
- package/scripts/sw-self-optimize.sh +109 -8
- package/scripts/sw-session.sh +31 -9
- package/scripts/sw-setup.sh +1 -1
- package/scripts/sw-standup.sh +712 -0
- package/scripts/sw-status.sh +192 -1
- package/scripts/sw-strategic.sh +658 -0
- package/scripts/sw-stream.sh +450 -0
- package/scripts/sw-swarm.sh +583 -0
- package/scripts/sw-team-stages.sh +511 -0
- package/scripts/sw-templates.sh +1 -1
- package/scripts/sw-testgen.sh +515 -0
- package/scripts/sw-tmux-pipeline.sh +554 -0
- package/scripts/sw-tmux.sh +1 -1
- package/scripts/sw-trace.sh +485 -0
- package/scripts/sw-tracker-github.sh +188 -0
- package/scripts/sw-tracker-jira.sh +172 -0
- package/scripts/sw-tracker-linear.sh +251 -0
- package/scripts/sw-tracker.sh +117 -2
- package/scripts/sw-triage.sh +603 -0
- package/scripts/sw-upgrade.sh +1 -1
- package/scripts/sw-ux.sh +677 -0
- package/scripts/sw-webhook.sh +627 -0
- package/scripts/sw-widgets.sh +530 -0
- package/scripts/sw-worktree.sh +1 -1
- package/templates/pipelines/autonomous.json +8 -1
- package/templates/pipelines/cost-aware.json +21 -0
- package/templates/pipelines/deployed.json +40 -6
- package/templates/pipelines/enterprise.json +16 -2
- package/templates/pipelines/fast.json +19 -0
- package/templates/pipelines/full.json +16 -2
- package/templates/pipelines/hotfix.json +19 -0
- package/templates/pipelines/standard.json +19 -0
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="
|
|
11
|
+
VERSION="2.0.0"
|
|
12
12
|
set -euo pipefail
|
|
13
13
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
14
14
|
|
|
@@ -219,6 +219,13 @@ if [[ -n "$TEMPLATE_NAME" ]]; then
|
|
|
219
219
|
exit 1
|
|
220
220
|
fi
|
|
221
221
|
|
|
222
|
+
# Validate template parsed correctly — if jq failed, TEMPLATE_AGENTS is empty
|
|
223
|
+
if [[ ${#TEMPLATE_AGENTS[@]} -eq 0 ]]; then
|
|
224
|
+
error "Template '${TEMPLATE_NAME}' parsed with no agents. Check template JSON."
|
|
225
|
+
echo -e " ${DIM}File: ${TEMPLATE_FILE}${RESET}"
|
|
226
|
+
exit 1
|
|
227
|
+
fi
|
|
228
|
+
|
|
222
229
|
echo -e " ${DIM}${TEMPLATE_DESC}${RESET}"
|
|
223
230
|
echo -e " ${DIM}Agents: ${#TEMPLATE_AGENTS[@]} Layout: ${TEMPLATE_LAYOUT}${RESET}"
|
|
224
231
|
fi
|
|
@@ -426,14 +433,19 @@ LAUNCHER_STATIC
|
|
|
426
433
|
if [[ "$SKIP_PERMISSIONS" == true ]]; then
|
|
427
434
|
CLAUDE_FLAGS="--dangerously-skip-permissions"
|
|
428
435
|
fi
|
|
429
|
-
sed
|
|
436
|
+
# Use awk for safe string replacement — sed breaks on & | \ in paths
|
|
437
|
+
awk -v dir="$PROJECT_DIR" -v team="$TEAM_NAME" -v prompt="$PROMPT_FILE" -v flags="$CLAUDE_FLAGS" \
|
|
438
|
+
'{gsub(/__DIR__/, dir); gsub(/__TEAM__/, team); gsub(/__PROMPT__/, prompt); gsub(/__CLAUDE_FLAGS__/, flags); print}' \
|
|
430
439
|
"$LAUNCHER" > "${LAUNCHER}.tmp" && mv "${LAUNCHER}.tmp" "$LAUNCHER"
|
|
431
440
|
chmod +x "$LAUNCHER"
|
|
432
441
|
|
|
433
442
|
# Create window with command — no race condition!
|
|
434
443
|
# bash --login loads PATH (needed for ~/.local/bin/claude)
|
|
435
|
-
tmux new-window -n "$WINDOW_NAME" -c "$PROJECT_DIR" \
|
|
436
|
-
"bash --login ${LAUNCHER}"
|
|
444
|
+
if ! tmux new-window -n "$WINDOW_NAME" -c "$PROJECT_DIR" \
|
|
445
|
+
"bash --login ${LAUNCHER}"; then
|
|
446
|
+
error "Failed to create tmux window '${WINDOW_NAME}'"
|
|
447
|
+
exit 1
|
|
448
|
+
fi
|
|
437
449
|
|
|
438
450
|
elif [[ "$AUTO_LAUNCH" == true && -z "$TEAM_PROMPT" ]]; then
|
|
439
451
|
# No template and no goal — just launch claude interactively
|
|
@@ -454,12 +466,17 @@ LAUNCHER_STATIC
|
|
|
454
466
|
if [[ "$SKIP_PERMISSIONS" == true ]]; then
|
|
455
467
|
CLAUDE_FLAGS="--dangerously-skip-permissions"
|
|
456
468
|
fi
|
|
457
|
-
sed
|
|
469
|
+
# Use awk for safe string replacement — sed breaks on & | \ in paths
|
|
470
|
+
awk -v dir="$PROJECT_DIR" -v team="$TEAM_NAME" -v flags="$CLAUDE_FLAGS" \
|
|
471
|
+
'{gsub(/__DIR__/, dir); gsub(/__TEAM__/, team); gsub(/__CLAUDE_FLAGS__/, flags); print}' \
|
|
458
472
|
"$LAUNCHER" > "${LAUNCHER}.tmp" && mv "${LAUNCHER}.tmp" "$LAUNCHER"
|
|
459
473
|
chmod +x "$LAUNCHER"
|
|
460
474
|
|
|
461
|
-
tmux new-window -n "$WINDOW_NAME" -c "$PROJECT_DIR" \
|
|
462
|
-
"bash --login ${LAUNCHER}"
|
|
475
|
+
if ! tmux new-window -n "$WINDOW_NAME" -c "$PROJECT_DIR" \
|
|
476
|
+
"bash --login ${LAUNCHER}"; then
|
|
477
|
+
error "Failed to create tmux window '${WINDOW_NAME}'"
|
|
478
|
+
exit 1
|
|
479
|
+
fi
|
|
463
480
|
|
|
464
481
|
else
|
|
465
482
|
# --no-launch: create window with a regular shell
|
|
@@ -467,8 +484,13 @@ LAUNCHER_STATIC
|
|
|
467
484
|
info "Window ready. Launch Claude manually: ${DIM}claude${RESET}"
|
|
468
485
|
fi
|
|
469
486
|
|
|
470
|
-
# Apply dark theme
|
|
471
|
-
|
|
487
|
+
# Apply dark theme after a brief delay to ensure the shell has started.
|
|
488
|
+
# Without this, select-pane -P can race with shell initialization and
|
|
489
|
+
# the styling may not apply to the final pane state.
|
|
490
|
+
{
|
|
491
|
+
sleep 0.3
|
|
492
|
+
tmux select-pane -t "$WINDOW_NAME" -P 'bg=#1a1a2e,fg=#e4e4e7' 2>/dev/null || true
|
|
493
|
+
} &
|
|
472
494
|
|
|
473
495
|
elif [[ -f "$ADAPTER_FILE" ]] && type -t spawn_agent &>/dev/null; then
|
|
474
496
|
# ─── Non-tmux adapter session (iterm2, wezterm, etc.) ──────────────────
|