shipwright-cli 2.1.2 → 2.2.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.
Files changed (129) hide show
  1. package/.claude/agents/devops-engineer.md +14 -12
  2. package/.claude/agents/doc-fleet-agent.md +99 -0
  3. package/.claude/agents/test-specialist.md +5 -3
  4. package/README.md +48 -27
  5. package/claude-code/CLAUDE.md.shipwright +2 -2
  6. package/config/policy.json +73 -0
  7. package/config/policy.schema.json +75 -0
  8. package/docs/AGI-PLATFORM-PLAN.md +122 -0
  9. package/docs/AGI-WHATS-NEXT.md +69 -0
  10. package/docs/KNOWN-ISSUES.md +1 -23
  11. package/docs/PLATFORM-TODO-BACKLOG.md +41 -0
  12. package/docs/PLATFORM-TODO-TRIAGE.md +56 -0
  13. package/docs/README.md +83 -0
  14. package/docs/TIPS.md +39 -2
  15. package/docs/config-policy.md +40 -0
  16. package/docs/definition-of-done.example.md +2 -0
  17. package/docs/patterns/README.md +5 -0
  18. package/docs/strategy/02-mission-and-brand.md +3 -3
  19. package/docs/strategy/README.md +4 -3
  20. package/docs/tmux-research/TMUX-AUDIT.md +2 -0
  21. package/docs/tmux-research/TMUX-RESEARCH-INDEX.md +17 -0
  22. package/package.json +3 -2
  23. package/scripts/lib/daemon-health.sh +32 -0
  24. package/scripts/lib/pipeline-quality.sh +23 -0
  25. package/scripts/lib/policy.sh +32 -0
  26. package/scripts/sw +5 -1
  27. package/scripts/sw-activity.sh +35 -46
  28. package/scripts/sw-adaptive.sh +30 -39
  29. package/scripts/sw-adversarial.sh +30 -36
  30. package/scripts/sw-architecture-enforcer.sh +30 -33
  31. package/scripts/sw-auth.sh +30 -42
  32. package/scripts/sw-autonomous.sh +60 -40
  33. package/scripts/sw-changelog.sh +29 -30
  34. package/scripts/sw-checkpoint.sh +30 -18
  35. package/scripts/sw-ci.sh +30 -42
  36. package/scripts/sw-cleanup.sh +32 -15
  37. package/scripts/sw-code-review.sh +26 -32
  38. package/scripts/sw-connect.sh +30 -19
  39. package/scripts/sw-context.sh +30 -19
  40. package/scripts/sw-cost.sh +30 -40
  41. package/scripts/sw-daemon.sh +66 -36
  42. package/scripts/sw-dashboard.sh +31 -40
  43. package/scripts/sw-db.sh +30 -20
  44. package/scripts/sw-decompose.sh +30 -38
  45. package/scripts/sw-deps.sh +30 -41
  46. package/scripts/sw-developer-simulation.sh +30 -36
  47. package/scripts/sw-discovery.sh +36 -19
  48. package/scripts/sw-doc-fleet.sh +822 -0
  49. package/scripts/sw-docs-agent.sh +30 -36
  50. package/scripts/sw-docs.sh +29 -31
  51. package/scripts/sw-doctor.sh +52 -20
  52. package/scripts/sw-dora.sh +29 -34
  53. package/scripts/sw-durable.sh +30 -20
  54. package/scripts/sw-e2e-orchestrator.sh +36 -21
  55. package/scripts/sw-eventbus.sh +30 -17
  56. package/scripts/sw-feedback.sh +30 -41
  57. package/scripts/sw-fix.sh +30 -40
  58. package/scripts/sw-fleet-discover.sh +30 -41
  59. package/scripts/sw-fleet-viz.sh +30 -20
  60. package/scripts/sw-fleet.sh +30 -40
  61. package/scripts/sw-github-app.sh +30 -41
  62. package/scripts/sw-github-checks.sh +30 -41
  63. package/scripts/sw-github-deploy.sh +30 -41
  64. package/scripts/sw-github-graphql.sh +30 -38
  65. package/scripts/sw-guild.sh +30 -37
  66. package/scripts/sw-heartbeat.sh +30 -19
  67. package/scripts/sw-hygiene.sh +134 -42
  68. package/scripts/sw-incident.sh +30 -39
  69. package/scripts/sw-init.sh +31 -14
  70. package/scripts/sw-instrument.sh +30 -41
  71. package/scripts/sw-intelligence.sh +39 -44
  72. package/scripts/sw-jira.sh +31 -41
  73. package/scripts/sw-launchd.sh +30 -17
  74. package/scripts/sw-linear.sh +31 -41
  75. package/scripts/sw-logs.sh +32 -17
  76. package/scripts/sw-loop.sh +32 -19
  77. package/scripts/sw-memory.sh +32 -43
  78. package/scripts/sw-mission-control.sh +31 -40
  79. package/scripts/sw-model-router.sh +30 -20
  80. package/scripts/sw-otel.sh +30 -20
  81. package/scripts/sw-oversight.sh +30 -36
  82. package/scripts/sw-patrol-meta.sh +31 -0
  83. package/scripts/sw-pipeline-composer.sh +30 -39
  84. package/scripts/sw-pipeline-vitals.sh +30 -44
  85. package/scripts/sw-pipeline.sh +275 -6388
  86. package/scripts/sw-pm.sh +31 -41
  87. package/scripts/sw-pr-lifecycle.sh +30 -42
  88. package/scripts/sw-predictive.sh +32 -34
  89. package/scripts/sw-prep.sh +30 -19
  90. package/scripts/sw-ps.sh +32 -17
  91. package/scripts/sw-public-dashboard.sh +30 -40
  92. package/scripts/sw-quality.sh +42 -40
  93. package/scripts/sw-reaper.sh +32 -15
  94. package/scripts/sw-recruit.sh +428 -48
  95. package/scripts/sw-regression.sh +30 -38
  96. package/scripts/sw-release-manager.sh +30 -38
  97. package/scripts/sw-release.sh +29 -31
  98. package/scripts/sw-remote.sh +31 -40
  99. package/scripts/sw-replay.sh +30 -18
  100. package/scripts/sw-retro.sh +33 -42
  101. package/scripts/sw-scale.sh +41 -24
  102. package/scripts/sw-security-audit.sh +30 -20
  103. package/scripts/sw-self-optimize.sh +33 -37
  104. package/scripts/sw-session.sh +31 -15
  105. package/scripts/sw-setup.sh +30 -16
  106. package/scripts/sw-standup.sh +30 -20
  107. package/scripts/sw-status.sh +33 -13
  108. package/scripts/sw-strategic.sh +55 -43
  109. package/scripts/sw-stream.sh +33 -37
  110. package/scripts/sw-swarm.sh +30 -21
  111. package/scripts/sw-team-stages.sh +30 -38
  112. package/scripts/sw-templates.sh +31 -16
  113. package/scripts/sw-testgen.sh +30 -31
  114. package/scripts/sw-tmux-pipeline.sh +29 -31
  115. package/scripts/sw-tmux-role-color.sh +31 -0
  116. package/scripts/sw-tmux-status.sh +31 -0
  117. package/scripts/sw-tmux.sh +31 -15
  118. package/scripts/sw-trace.sh +30 -19
  119. package/scripts/sw-tracker-github.sh +31 -0
  120. package/scripts/sw-tracker-jira.sh +31 -0
  121. package/scripts/sw-tracker-linear.sh +31 -0
  122. package/scripts/sw-tracker.sh +30 -40
  123. package/scripts/sw-triage.sh +68 -61
  124. package/scripts/sw-upgrade.sh +30 -16
  125. package/scripts/sw-ux.sh +30 -35
  126. package/scripts/sw-webhook.sh +30 -25
  127. package/scripts/sw-widgets.sh +30 -19
  128. package/scripts/sw-worktree.sh +32 -15
  129. package/tmux/templates/doc-fleet.json +43 -0
@@ -6,29 +6,42 @@
6
6
  set -euo pipefail
7
7
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
8
8
 
9
- VERSION="2.1.2"
9
+ VERSION="2.2.0"
10
10
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
11
 
12
- # ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
13
- CYAN='\033[38;2;0;212;255m' # #00d4ff — primary accent
14
- PURPLE='\033[38;2;124;58;237m' # #7c3aed — secondary
15
- BLUE='\033[38;2;0;102;255m' # #0066ff — tertiary
16
- GREEN='\033[38;2;74;222;128m' # success
17
- YELLOW='\033[38;2;250;204;21m' # warning
18
- RED='\033[38;2;248;113;113m' # error
19
- DIM='\033[2m'
20
- BOLD='\033[1m'
21
- RESET='\033[0m'
22
-
23
12
  # ─── Cross-platform compatibility ──────────────────────────────────────────
24
13
  # shellcheck source=lib/compat.sh
25
14
  [[ -f "$SCRIPT_DIR/lib/compat.sh" ]] && source "$SCRIPT_DIR/lib/compat.sh"
26
15
 
27
- # ─── Output Helpers ─────────────────────────────────────────────────────────
28
- info() { echo -e "${CYAN}${BOLD}▸${RESET} $*"; }
29
- success() { echo -e "${GREEN}${BOLD}✓${RESET} $*"; }
30
- warn() { echo -e "${YELLOW}${BOLD}⚠${RESET} $*"; }
31
- error() { echo -e "${RED}${BOLD}✗${RESET} $*" >&2; }
16
+ # Canonical helpers (colors, output, events)
17
+ # shellcheck source=lib/helpers.sh
18
+ [[ -f "$SCRIPT_DIR/lib/helpers.sh" ]] && source "$SCRIPT_DIR/lib/helpers.sh"
19
+ # Fallbacks when helpers not loaded (e.g. test env with overridden SCRIPT_DIR)
20
+ [[ "$(type -t info 2>/dev/null)" == "function" ]] || info() { echo -e "\033[38;2;0;212;255m\033[1m▸\033[0m $*"; }
21
+ [[ "$(type -t success 2>/dev/null)" == "function" ]] || success() { echo -e "\033[38;2;74;222;128m\033[1m✓\033[0m $*"; }
22
+ [[ "$(type -t warn 2>/dev/null)" == "function" ]] || warn() { echo -e "\033[38;2;250;204;21m\033[1m⚠\033[0m $*"; }
23
+ [[ "$(type -t error 2>/dev/null)" == "function" ]] || error() { echo -e "\033[38;2;248;113;113m\033[1m✗\033[0m $*" >&2; }
24
+ if [[ "$(type -t now_iso 2>/dev/null)" != "function" ]]; then
25
+ now_iso() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
26
+ now_epoch() { date +%s; }
27
+ fi
28
+ if [[ "$(type -t emit_event 2>/dev/null)" != "function" ]]; then
29
+ emit_event() {
30
+ local event_type="$1"; shift; mkdir -p "${HOME}/.shipwright"
31
+ local payload="{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"type\":\"$event_type\""
32
+ while [[ $# -gt 0 ]]; do local key="${1%%=*}" val="${1#*=}"; payload="${payload},\"${key}\":\"${val}\""; shift; done
33
+ echo "${payload}}" >> "${HOME}/.shipwright/events.jsonl"
34
+ }
35
+ fi
36
+ CYAN="${CYAN:-\033[38;2;0;212;255m}"
37
+ PURPLE="${PURPLE:-\033[38;2;124;58;237m}"
38
+ BLUE="${BLUE:-\033[38;2;0;102;255m}"
39
+ GREEN="${GREEN:-\033[38;2;74;222;128m}"
40
+ YELLOW="${YELLOW:-\033[38;2;250;204;21m}"
41
+ RED="${RED:-\033[38;2;248;113;113m}"
42
+ DIM="${DIM:-\033[2m}"
43
+ BOLD="${BOLD:-\033[1m}"
44
+ RESET="${RESET:-\033[0m}"
32
45
 
33
46
  # ─── Constants ──────────────────────────────────────────────────────────────
34
47
  SHIPWRIGHT_DIR="$HOME/.shipwright"
@@ -44,14 +57,6 @@ ensure_dir() {
44
57
  mkdir -p "$SHIPWRIGHT_DIR"
45
58
  }
46
59
 
47
- now_iso() {
48
- date -u +"%Y-%m-%dT%H:%M:%SZ"
49
- }
50
-
51
- now_epoch() {
52
- date +%s
53
- }
54
-
55
60
  # Generate or retrieve webhook secret
56
61
  get_or_create_secret() {
57
62
  ensure_dir
@@ -8,33 +8,44 @@
8
8
  set -euo pipefail
9
9
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
10
10
 
11
- VERSION="2.1.2"
11
+ VERSION="2.2.0"
12
12
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
13
  REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
14
14
 
15
- # ─── Colors (matches Seth's tmux theme) ─────────────────────────────────────
16
- CYAN='\033[38;2;0;212;255m' # #00d4ff — primary accent
17
- PURPLE='\033[38;2;124;58;237m' # #7c3aed — secondary
18
- BLUE='\033[38;2;0;102;255m' # #0066ff — tertiary
19
- GREEN='\033[38;2;74;222;128m' # success
20
- YELLOW='\033[38;2;250;204;21m' # warning
21
- RED='\033[38;2;248;113;113m' # error
22
- DIM='\033[2m'
23
- BOLD='\033[1m'
24
- RESET='\033[0m'
25
-
26
15
  # ─── Cross-platform compatibility ──────────────────────────────────────────
27
16
  _COMPAT="$SCRIPT_DIR/lib/compat.sh"
28
17
  # shellcheck source=lib/compat.sh
29
18
  [[ -f "$_COMPAT" ]] && source "$_COMPAT"
30
19
 
31
- # ─── Output Helpers ────────────────────────────────────────────────────────
32
- info() { echo -e "${CYAN}${BOLD}▸${RESET} $*"; }
33
- success() { echo -e "${GREEN}${BOLD}✓${RESET} $*"; }
34
- warn() { echo -e "${YELLOW}${BOLD}⚠${RESET} $*"; }
35
- error() { echo -e "${RED}${BOLD}✗${RESET} $*" >&2; }
36
-
37
- now_iso() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
20
+ # Canonical helpers (colors, output, events)
21
+ # shellcheck source=lib/helpers.sh
22
+ [[ -f "$SCRIPT_DIR/lib/helpers.sh" ]] && source "$SCRIPT_DIR/lib/helpers.sh"
23
+ # Fallbacks when helpers not loaded (e.g. test env with overridden SCRIPT_DIR)
24
+ [[ "$(type -t info 2>/dev/null)" == "function" ]] || info() { echo -e "\033[38;2;0;212;255m\033[1m▸\033[0m $*"; }
25
+ [[ "$(type -t success 2>/dev/null)" == "function" ]] || success() { echo -e "\033[38;2;74;222;128m\033[1m✓\033[0m $*"; }
26
+ [[ "$(type -t warn 2>/dev/null)" == "function" ]] || warn() { echo -e "\033[38;2;250;204;21m\033[1m⚠\033[0m $*"; }
27
+ [[ "$(type -t error 2>/dev/null)" == "function" ]] || error() { echo -e "\033[38;2;248;113;113m\033[1m✗\033[0m $*" >&2; }
28
+ if [[ "$(type -t now_iso 2>/dev/null)" != "function" ]]; then
29
+ now_iso() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
30
+ now_epoch() { date +%s; }
31
+ fi
32
+ if [[ "$(type -t emit_event 2>/dev/null)" != "function" ]]; then
33
+ emit_event() {
34
+ local event_type="$1"; shift; mkdir -p "${HOME}/.shipwright"
35
+ local payload="{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"type\":\"$event_type\""
36
+ while [[ $# -gt 0 ]]; do local key="${1%%=*}" val="${1#*=}"; payload="${payload},\"${key}\":\"${val}\""; shift; done
37
+ echo "${payload}}" >> "${HOME}/.shipwright/events.jsonl"
38
+ }
39
+ fi
40
+ CYAN="${CYAN:-\033[38;2;0;212;255m}"
41
+ PURPLE="${PURPLE:-\033[38;2;124;58;237m}"
42
+ BLUE="${BLUE:-\033[38;2;0;102;255m}"
43
+ GREEN="${GREEN:-\033[38;2;74;222;128m}"
44
+ YELLOW="${YELLOW:-\033[38;2;250;204;21m}"
45
+ RED="${RED:-\033[38;2;248;113;113m}"
46
+ DIM="${DIM:-\033[2m}"
47
+ BOLD="${BOLD:-\033[1m}"
48
+ RESET="${RESET:-\033[0m}"
38
49
 
39
50
  # ─── Configuration ─────────────────────────────────────────────────────────
40
51
  CONFIG_DIR="${HOME}/.shipwright"
@@ -5,24 +5,41 @@
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.2"
8
+ VERSION="2.2.0"
9
9
  set -euo pipefail
10
10
  trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
11
11
 
12
- # ─── Colors ────────────────────────────────────────────────────────────────
13
- CYAN='\033[38;2;0;212;255m'
14
- PURPLE='\033[38;2;124;58;237m'
15
- GREEN='\033[38;2;74;222;128m'
16
- YELLOW='\033[38;2;250;204;21m'
17
- RED='\033[38;2;248;113;113m'
18
- DIM='\033[2m'
19
- BOLD='\033[1m'
20
- RESET='\033[0m'
21
-
22
- info() { echo -e "${CYAN}${BOLD}▸${RESET} $*"; }
23
- success() { echo -e "${GREEN}${BOLD}✓${RESET} $*"; }
24
- warn() { echo -e "${YELLOW}${BOLD}⚠${RESET} $*"; }
25
- error() { echo -e "${RED}${BOLD}✗${RESET} $*" >&2; }
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+
14
+ # Canonical helpers (colors, output, events)
15
+ # shellcheck source=lib/helpers.sh
16
+ [[ -f "$SCRIPT_DIR/lib/helpers.sh" ]] && source "$SCRIPT_DIR/lib/helpers.sh"
17
+ # Fallbacks when helpers not loaded (e.g. test env with overridden SCRIPT_DIR)
18
+ [[ "$(type -t info 2>/dev/null)" == "function" ]] || info() { echo -e "\033[38;2;0;212;255m\033[1m▸\033[0m $*"; }
19
+ [[ "$(type -t success 2>/dev/null)" == "function" ]] || success() { echo -e "\033[38;2;74;222;128m\033[1m✓\033[0m $*"; }
20
+ [[ "$(type -t warn 2>/dev/null)" == "function" ]] || warn() { echo -e "\033[38;2;250;204;21m\033[1m⚠\033[0m $*"; }
21
+ [[ "$(type -t error 2>/dev/null)" == "function" ]] || error() { echo -e "\033[38;2;248;113;113m\033[1m✗\033[0m $*" >&2; }
22
+ if [[ "$(type -t now_iso 2>/dev/null)" != "function" ]]; then
23
+ now_iso() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
24
+ now_epoch() { date +%s; }
25
+ fi
26
+ if [[ "$(type -t emit_event 2>/dev/null)" != "function" ]]; then
27
+ emit_event() {
28
+ local event_type="$1"; shift; mkdir -p "${HOME}/.shipwright"
29
+ local payload="{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"type\":\"$event_type\""
30
+ while [[ $# -gt 0 ]]; do local key="${1%%=*}" val="${1#*=}"; payload="${payload},\"${key}\":\"${val}\""; shift; done
31
+ echo "${payload}}" >> "${HOME}/.shipwright/events.jsonl"
32
+ }
33
+ fi
34
+ CYAN="${CYAN:-\033[38;2;0;212;255m}"
35
+ PURPLE="${PURPLE:-\033[38;2;124;58;237m}"
36
+ BLUE="${BLUE:-\033[38;2;0;102;255m}"
37
+ GREEN="${GREEN:-\033[38;2;74;222;128m}"
38
+ YELLOW="${YELLOW:-\033[38;2;250;204;21m}"
39
+ RED="${RED:-\033[38;2;248;113;113m}"
40
+ DIM="${DIM:-\033[2m}"
41
+ BOLD="${BOLD:-\033[1m}"
42
+ RESET="${RESET:-\033[0m}"
26
43
 
27
44
  # ─── Repo root ─────────────────────────────────────────────────────────────
28
45
  REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || {
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "doc-fleet",
3
+ "description": "Documentation fleet — 5 specialized agents for docs refactoring, cleanup, and enhancement",
4
+ "keywords": [
5
+ "doc-fleet",
6
+ "documentation",
7
+ "claude-md",
8
+ "strategy",
9
+ "readme",
10
+ "patterns",
11
+ "refactor"
12
+ ],
13
+ "agents": [
14
+ {
15
+ "name": "doc-architect",
16
+ "role": "Documentation structure, information architecture, cross-linking, manifest",
17
+ "focus": "docs/, .claude/, README.md, STRATEGY.md"
18
+ },
19
+ {
20
+ "name": "claude-md",
21
+ "role": "CLAUDE.md files, agent role definitions, AUTO sections, development guidelines",
22
+ "focus": ".claude/CLAUDE.md, .claude/agents/, claude-code/"
23
+ },
24
+ {
25
+ "name": "strategy-curator",
26
+ "role": "Strategic docs, plans, AGI roadmap, backlog triage, metrics updates",
27
+ "focus": "STRATEGY.md, docs/AGI-*, docs/PLATFORM-*, docs/strategy/"
28
+ },
29
+ {
30
+ "name": "pattern-writer",
31
+ "role": "Developer guides, patterns, tips, known issues, policy docs, tmux docs",
32
+ "focus": "docs/patterns/, docs/TIPS.md, docs/KNOWN-ISSUES.md, docs/config-policy.md, docs/tmux-research/"
33
+ },
34
+ {
35
+ "name": "readme-optimizer",
36
+ "role": "README, onboarding, install flow, command tables, public-facing docs",
37
+ "focus": "README.md, install.sh, .github/pull_request_template.md"
38
+ }
39
+ ],
40
+ "layout": "tiled",
41
+ "layout_style": "tiled",
42
+ "main_pane_percent": 50
43
+ }