@mmerterden/multi-agent-pipeline 20.2.1 → 20.3.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 (622) hide show
  1. package/CHANGELOG.md +919 -1
  2. package/README.md +104 -81
  3. package/README.tr.md +103 -62
  4. package/docs/FIGMA_PIPELINE.md +35 -35
  5. package/docs/adr/0006-skills-core-external-split.md +1 -1
  6. package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
  7. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
  8. package/docs/architecture.md +50 -14
  9. package/docs/best-practices.md +1 -1
  10. package/docs/ecosystem.md +56 -32
  11. package/docs/facts.json +10 -10
  12. package/docs/features.md +97 -5
  13. package/docs/recovery-guide.md +7 -14
  14. package/docs/server-readiness.md +31 -24
  15. package/index.js +1 -1
  16. package/install/_common.mjs +3 -5
  17. package/install/_platform-filter.mjs +23 -1
  18. package/install/_unattended-profile.mjs +321 -75
  19. package/install/claude.mjs +51 -10
  20. package/install/codex.mjs +2 -0
  21. package/install/copilot.mjs +2 -0
  22. package/install/index.mjs +30 -17
  23. package/install/templates/claude-hooks.json +16 -5
  24. package/install/templates/copilot-instructions.md +1 -1
  25. package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
  26. package/install/templates/multi-agent-autopilot.plist.template +12 -5
  27. package/install/unattended-profile-legacy.json +80 -0
  28. package/manifest.json +617 -483
  29. package/package.json +8 -3
  30. package/pipeline/agents/code-reviewer.md +10 -0
  31. package/pipeline/agents/plan-critic.md +98 -0
  32. package/pipeline/agents/security-auditor.md +10 -0
  33. package/pipeline/agents/task-clarifier.md +10 -0
  34. package/pipeline/commands/multi-agent/SKILL.md +2 -2
  35. package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
  36. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
  37. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
  38. package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
  39. package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
  40. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
  41. package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
  42. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
  43. package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
  44. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
  45. package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
  46. package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
  47. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
  48. package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
  49. package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
  50. package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
  51. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
  52. package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
  53. package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
  54. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
  55. package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
  56. package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
  57. package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
  58. package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
  59. package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
  60. package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
  61. package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
  62. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
  63. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
  64. package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
  65. package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
  66. package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
  67. package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
  68. package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
  69. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
  70. package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
  71. package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
  72. package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
  73. package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
  74. package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
  75. package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
  76. package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
  77. package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
  78. package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
  79. package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
  80. package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
  81. package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
  82. package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
  83. package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
  84. package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
  85. package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
  86. package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
  87. package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
  88. package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
  89. package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
  90. package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
  91. package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
  92. package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
  93. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
  94. package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
  95. package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
  96. package/pipeline/contract/CHANGELOG.md +74 -0
  97. package/pipeline/contract/README.md +126 -0
  98. package/pipeline/contract/build.mjs +427 -0
  99. package/pipeline/contract/fixtures/answer-result.json +11 -0
  100. package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
  101. package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
  102. package/pipeline/contract/fixtures/error-unsigned.json +5 -0
  103. package/pipeline/contract/fixtures/issues-empty.json +18 -0
  104. package/pipeline/contract/fixtures/launch-plan.json +31 -0
  105. package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
  106. package/pipeline/contract/fixtures/runs-empty.json +6 -0
  107. package/pipeline/contract/fixtures/runs-failed.json +84 -0
  108. package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
  109. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
  110. package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
  111. package/pipeline/contract/fixtures/runs-running.json +84 -0
  112. package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
  113. package/pipeline/contract/frozen/toolbox.json +107 -0
  114. package/pipeline/contract/manifest.json +263 -0
  115. package/pipeline/contract/types/index.d.ts +343 -0
  116. package/pipeline/lib/_jira-auth.sh +6 -2
  117. package/pipeline/lib/account-resolver.sh +1 -1
  118. package/pipeline/lib/autopilot-state.sh +19 -0
  119. package/pipeline/lib/context-link-extractor.sh +12 -5
  120. package/pipeline/lib/credential-inventory.sh +12 -5
  121. package/pipeline/lib/credential-store.sh +116 -185
  122. package/pipeline/lib/fetch-confluence.sh +44 -3
  123. package/pipeline/lib/fetch-document.sh +3 -4
  124. package/pipeline/lib/fetch-fortify.sh +1 -1
  125. package/pipeline/lib/figma-mcp-refresh.sh +2 -2
  126. package/pipeline/lib/figma-token.sh +5 -1
  127. package/pipeline/lib/issue-fetcher.sh +233 -16
  128. package/pipeline/lib/json-file-lock.mjs +172 -0
  129. package/pipeline/lib/model-dispatch.sh +21 -12
  130. package/pipeline/lib/model-rung.sh +6 -1
  131. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  132. package/pipeline/lib/outbound-gate.mjs +46 -16
  133. package/pipeline/lib/parse-complaints.sh +14 -7
  134. package/pipeline/lib/plan-todos.sh +3 -3
  135. package/pipeline/lib/post-pr-review.sh +9 -9
  136. package/pipeline/lib/pr-request-location.mjs +85 -0
  137. package/pipeline/lib/regular-file.mjs +153 -0
  138. package/pipeline/lib/repo-hygiene.sh +17 -0
  139. package/pipeline/lib/route-state.sh +5 -1
  140. package/pipeline/lib/run-paths.sh +3 -2
  141. package/pipeline/lib/stack-detect.sh +19 -1
  142. package/pipeline/lib/unattended-profile-check.mjs +178 -0
  143. package/pipeline/lib/unattended-settings-location.mjs +28 -0
  144. package/pipeline/lib/unattended.mjs +76 -0
  145. package/pipeline/lib/unattended.sh +32 -0
  146. package/pipeline/lib/untrusted.mjs +76 -0
  147. package/pipeline/lib/usage-endpoint.mjs +33 -0
  148. package/pipeline/lib/user-facing.mjs +82 -0
  149. package/pipeline/lib/user-facing.sh +58 -0
  150. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  151. package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
  152. package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
  153. package/pipeline/multi-agent-refs/analysis/render.md +4 -3
  154. package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
  155. package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
  156. package/pipeline/multi-agent-refs/analysis-template.md +10 -17
  157. package/pipeline/multi-agent-refs/channels/jira.md +1 -1
  158. package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
  159. package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
  160. package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
  161. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
  162. package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
  163. package/pipeline/multi-agent-refs/features/constitution.md +196 -0
  164. package/pipeline/multi-agent-refs/features/doctor.md +6 -3
  165. package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
  166. package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
  167. package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
  168. package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
  169. package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
  170. package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
  171. package/pipeline/multi-agent-refs/features/research.md +150 -0
  172. package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
  173. package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
  174. package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
  175. package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
  176. package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
  177. package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
  178. package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
  179. package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
  180. package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -35
  181. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  182. package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
  183. package/pipeline/multi-agent-refs/keychain.md +6 -11
  184. package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
  185. package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
  186. package/pipeline/multi-agent-refs/phases/modes.md +10 -12
  187. package/pipeline/multi-agent-refs/phases/operations.md +11 -5
  188. package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
  189. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
  190. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
  191. package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
  192. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
  193. package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
  194. package/pipeline/multi-agent-refs/phases.md +1 -1
  195. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  196. package/pipeline/multi-agent-refs/progress-contract.md +13 -16
  197. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  198. package/pipeline/multi-agent-refs/research/engine.md +91 -0
  199. package/pipeline/multi-agent-refs/rules.md +6 -4
  200. package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
  201. package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
  202. package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
  203. package/pipeline/rules/figma-pipeline.md +12 -12
  204. package/pipeline/schemas/agent-state.schema.json +480 -18
  205. package/pipeline/schemas/analysis-spec.schema.json +4 -4
  206. package/pipeline/schemas/answer-request.schema.json +24 -0
  207. package/pipeline/schemas/answer-result.schema.json +28 -0
  208. package/pipeline/schemas/autopilot-config.schema.json +111 -13
  209. package/pipeline/schemas/command-parameters.schema.json +99 -0
  210. package/pipeline/schemas/constitution.schema.json +56 -0
  211. package/pipeline/schemas/contract-error.schema.json +52 -0
  212. package/pipeline/schemas/design-check-config.schema.json +5 -1
  213. package/pipeline/schemas/issues.schema.json +61 -0
  214. package/pipeline/schemas/launch-plan.schema.json +46 -0
  215. package/pipeline/schemas/launch-request.schema.json +45 -0
  216. package/pipeline/schemas/launch.json +61 -0
  217. package/pipeline/schemas/launch.schema.json +84 -0
  218. package/pipeline/schemas/phases.json +2 -2
  219. package/pipeline/schemas/phases.schema.json +68 -0
  220. package/pipeline/schemas/phone-devices.schema.json +61 -0
  221. package/pipeline/schemas/phone-signed-request.schema.json +67 -0
  222. package/pipeline/schemas/plan-critique.schema.json +99 -0
  223. package/pipeline/schemas/plan-todos.schema.json +7 -7
  224. package/pipeline/schemas/planning-output.schema.json +5 -0
  225. package/pipeline/schemas/pr-request.schema.json +46 -0
  226. package/pipeline/schemas/prefs.schema.json +79 -8
  227. package/pipeline/schemas/research-output.schema.json +118 -0
  228. package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
  229. package/pipeline/schemas/reviewer-output.schema.json +40 -4
  230. package/pipeline/schemas/run-questions.json +392 -0
  231. package/pipeline/schemas/run-questions.schema.json +118 -0
  232. package/pipeline/schemas/runs-index.schema.json +189 -0
  233. package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
  234. package/pipeline/schemas/secret-patterns.schema.json +28 -0
  235. package/pipeline/schemas/stack-adapters.json +527 -0
  236. package/pipeline/schemas/stack-adapters.schema.json +184 -0
  237. package/pipeline/schemas/token-budget.json +1 -1
  238. package/pipeline/schemas/token-budget.schema.json +26 -0
  239. package/pipeline/schemas/triage-output.schema.json +64 -3
  240. package/pipeline/schemas/unattended-policy.json +139 -0
  241. package/pipeline/schemas/unattended-policy.schema.json +73 -0
  242. package/pipeline/schemas/unattended-profile.json +248 -0
  243. package/pipeline/schemas/unattended-profile.schema.json +198 -0
  244. package/pipeline/schemas/worktrees.schema.json +51 -0
  245. package/pipeline/scripts/README.md +1 -0
  246. package/pipeline/scripts/_autopilot-config.mjs +130 -0
  247. package/pipeline/scripts/_autopilot-ops.mjs +567 -0
  248. package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
  249. package/pipeline/scripts/_command-contract.mjs +384 -0
  250. package/pipeline/scripts/_cost.mjs +40 -0
  251. package/pipeline/scripts/_notices.mjs +160 -0
  252. package/pipeline/scripts/_phone-auth.mjs +485 -0
  253. package/pipeline/scripts/_pre-existing.mjs +294 -0
  254. package/pipeline/scripts/_redact.mjs +77 -0
  255. package/pipeline/scripts/_run-paths.mjs +4 -2
  256. package/pipeline/scripts/_stack-adapter.mjs +678 -0
  257. package/pipeline/scripts/_stack-routing.mjs +1 -1
  258. package/pipeline/scripts/agent-guard.py +348 -37
  259. package/pipeline/scripts/agent-guard.sh +41 -13
  260. package/pipeline/scripts/analysis-story-tree.mjs +79 -3
  261. package/pipeline/scripts/answer-question.mjs +181 -0
  262. package/pipeline/scripts/audit-log-rotate.sh +1 -4
  263. package/pipeline/scripts/audit-log.sh +4 -4
  264. package/pipeline/scripts/autopilot-arming.mjs +389 -21
  265. package/pipeline/scripts/autopilot-awake.mjs +255 -0
  266. package/pipeline/scripts/autopilot-intake.mjs +137 -36
  267. package/pipeline/scripts/autopilot-menubar.swift +156 -44
  268. package/pipeline/scripts/autopilot-publish.mjs +1625 -0
  269. package/pipeline/scripts/autopilot-runner.mjs +1678 -222
  270. package/pipeline/scripts/autopilot-status.sh +198 -33
  271. package/pipeline/scripts/build-lock.sh +120 -0
  272. package/pipeline/scripts/build-references.mjs +4 -1
  273. package/pipeline/scripts/build-stack-plugins.mjs +59 -22
  274. package/pipeline/scripts/capture-flush.sh +1 -1
  275. package/pipeline/scripts/capture-resume.sh +13 -9
  276. package/pipeline/scripts/check-derived-drift.mjs +52 -11
  277. package/pipeline/scripts/commands.mjs +88 -0
  278. package/pipeline/scripts/constitution.mjs +362 -0
  279. package/pipeline/scripts/contract-server.mjs +776 -0
  280. package/pipeline/scripts/cost-analyze.mjs +89 -39
  281. package/pipeline/scripts/diff-explain.mjs +12 -1
  282. package/pipeline/scripts/doctor.mjs +77 -28
  283. package/pipeline/scripts/evidence-gate.mjs +192 -12
  284. package/pipeline/scripts/feedback-send.mjs +4 -2
  285. package/pipeline/scripts/gate-ledger.mjs +449 -0
  286. package/pipeline/scripts/gc-abandoned.sh +132 -13
  287. package/pipeline/scripts/gen-facts.mjs +31 -15
  288. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  289. package/pipeline/scripts/github-ssh-setup.sh +140 -29
  290. package/pipeline/scripts/graph-mermaid.mjs +4 -1
  291. package/pipeline/scripts/issues.mjs +236 -0
  292. package/pipeline/scripts/jira-attach.sh +6 -2
  293. package/pipeline/scripts/jira-search.sh +4 -3
  294. package/pipeline/scripts/keychain-save.sh +125 -24
  295. package/pipeline/scripts/keychain.py +63 -93
  296. package/pipeline/scripts/launch-request.mjs +747 -0
  297. package/pipeline/scripts/localize-commands.mjs +4 -10
  298. package/pipeline/scripts/log-metric.sh +6 -5
  299. package/pipeline/scripts/maturity-followup.mjs +13 -4
  300. package/pipeline/scripts/memory-save.sh +25 -0
  301. package/pipeline/scripts/migrate-prefs.mjs +4 -3
  302. package/pipeline/scripts/open-questions-gate.mjs +276 -0
  303. package/pipeline/scripts/phase-tracker.sh +41 -27
  304. package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
  305. package/pipeline/scripts/phone-devices.mjs +224 -0
  306. package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
  307. package/pipeline/scripts/plan-critique-gate.mjs +591 -0
  308. package/pipeline/scripts/pr-request.mjs +188 -0
  309. package/pipeline/scripts/pre-commit-check.sh +115 -4
  310. package/pipeline/scripts/probe-evidence-capability.sh +44 -5
  311. package/pipeline/scripts/record-phase.mjs +71 -0
  312. package/pipeline/scripts/render-agent-log-cost.sh +17 -2
  313. package/pipeline/scripts/render-cost-summary.sh +1 -1
  314. package/pipeline/scripts/render-work-summary.sh +1 -1
  315. package/pipeline/scripts/require-supported-version.sh +4 -1
  316. package/pipeline/scripts/research-gate.mjs +704 -0
  317. package/pipeline/scripts/review-decision-gate.mjs +403 -0
  318. package/pipeline/scripts/routine-registry.mjs +5 -2
  319. package/pipeline/scripts/runs-index.mjs +135 -27
  320. package/pipeline/scripts/scaffold-gate.mjs +393 -0
  321. package/pipeline/scripts/skill-conformance.mjs +25 -8
  322. package/pipeline/scripts/skill-siblings.mjs +2 -1
  323. package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
  324. package/pipeline/scripts/smoke-schema-validation.sh +6 -2
  325. package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
  326. package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
  327. package/pipeline/scripts/test-gap-scan.mjs +40 -2
  328. package/pipeline/scripts/test-integrity-gate.mjs +20 -4
  329. package/pipeline/scripts/test-strength.mjs +484 -0
  330. package/pipeline/scripts/test-summary.mjs +651 -0
  331. package/pipeline/scripts/triage-memory.mjs +49 -9
  332. package/pipeline/scripts/unattended_policy.py +2786 -0
  333. package/pipeline/scripts/uninstall.mjs +10 -10
  334. package/pipeline/scripts/update-issue-progress.sh +1 -1
  335. package/pipeline/scripts/usage-identity.mjs +288 -0
  336. package/pipeline/scripts/usage-register.mjs +187 -67
  337. package/pipeline/scripts/usage-report.mjs +232 -67
  338. package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
  339. package/pipeline/scripts/validate-planning.mjs +6 -0
  340. package/pipeline/scripts/verify-citations.mjs +151 -38
  341. package/pipeline/scripts/verify.mjs +58 -18
  342. package/pipeline/scripts/worktree-prepare.sh +126 -0
  343. package/pipeline/scripts/worktrees.mjs +124 -0
  344. package/pipeline/scripts/write-state.mjs +48 -17
  345. package/pipeline/skills/.skill-manifest.json +222 -226
  346. package/pipeline/skills/.skills-index.json +77 -88
  347. package/pipeline/skills/shared/README.md +44 -45
  348. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
  349. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
  350. package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
  351. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
  352. package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
  353. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
  354. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
  355. package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
  356. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
  357. package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
  358. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
  359. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
  360. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
  361. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
  362. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
  363. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
  364. package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
  365. package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
  366. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
  367. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
  368. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
  369. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
  370. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
  371. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
  372. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
  373. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
  374. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
  375. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
  376. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
  377. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
  378. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
  379. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
  380. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
  381. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
  382. package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
  383. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
  384. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
  385. package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
  386. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
  387. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
  388. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
  389. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
  390. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
  391. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
  392. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
  393. package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
  394. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
  395. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
  396. package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
  397. package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
  398. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
  399. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
  400. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
  401. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
  402. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
  403. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
  404. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
  405. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
  406. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
  407. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
  408. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
  409. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
  410. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
  411. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
  412. package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
  413. package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
  414. package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
  415. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
  416. package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
  417. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
  418. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
  419. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
  420. package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
  421. package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
  422. package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
  423. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
  424. package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
  425. package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
  426. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
  427. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
  428. package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
  429. package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
  430. package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
  431. package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
  432. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
  433. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
  434. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
  435. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
  436. package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
  437. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
  438. package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
  439. package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
  440. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
  441. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
  442. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
  443. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
  444. package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
  445. package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
  446. package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
  447. package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
  448. package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
  449. package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
  450. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
  451. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
  452. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
  453. package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
  454. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
  455. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
  456. package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
  457. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
  458. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
  459. package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
  460. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
  461. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
  462. package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
  463. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
  464. package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
  465. package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
  466. package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
  467. package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
  468. package/pipeline/skills/shared/external/council/SKILL.md +2 -1
  469. package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
  470. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  471. package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
  472. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
  473. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
  474. package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
  475. package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
  476. package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
  477. package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
  478. package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
  479. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
  480. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
  481. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
  482. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
  483. package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
  484. package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
  485. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
  486. package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
  487. package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
  488. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
  489. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
  490. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
  491. package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
  492. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
  493. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
  494. package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
  495. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
  496. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
  497. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
  498. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
  499. package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
  500. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
  501. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
  502. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
  503. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
  504. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
  505. package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
  506. package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
  507. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
  508. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
  509. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
  510. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  511. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
  512. package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
  513. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
  514. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
  515. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
  516. package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
  517. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
  518. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
  519. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
  520. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
  521. package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
  522. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
  523. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
  524. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
  525. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
  526. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
  527. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
  528. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
  529. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
  530. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
  531. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
  532. package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
  533. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
  534. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
  535. package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
  536. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
  537. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
  538. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
  539. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
  540. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
  541. package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
  542. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
  543. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
  544. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
  545. package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
  546. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
  547. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
  548. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
  549. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
  550. package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
  551. package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
  552. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
  553. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
  554. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
  555. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
  556. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
  557. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
  558. package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
  559. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
  560. package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
  561. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
  562. package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
  563. package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
  564. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
  565. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
  566. package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
  567. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
  568. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
  569. package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
  570. package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
  571. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
  572. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
  573. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
  574. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
  575. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
  576. package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
  577. package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
  578. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
  579. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
  580. package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
  581. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
  582. package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
  583. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
  584. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
  585. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
  586. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
  587. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
  588. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
  589. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
  590. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
  591. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
  592. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
  593. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
  594. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
  595. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
  596. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
  597. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  598. package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
  599. package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
  600. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
  601. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
  602. package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
  603. package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
  604. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
  605. package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
  606. package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
  607. package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
  608. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
  609. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
  610. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
  611. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
  612. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
  613. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
  614. package/pipeline/skills/skills-index.md +40 -41
  615. package/docs/token-budget-history.md +0 -24
  616. package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
  617. package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
  618. package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
  619. package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
  620. package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
  621. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
  622. package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
@@ -0,0 +1,126 @@
1
+ # Client contract kit
2
+
3
+ What a client (the macOS toolbox, a web page, a script) needs to read the
4
+ pipeline's state and start or answer a run without a terminal conversation.
5
+ Nothing in here is a UI and nothing here runs on its own.
6
+
7
+ | File | What it is |
8
+ |------|------------|
9
+ | `manifest.json` | Every surface: its CLI invocation, its HTTP route, its schema and version. |
10
+ | `../schemas/*.schema.json` | The schemas. The kit points at them; it never copies them. |
11
+ | `types/index.d.ts` | TypeScript declarations generated from those schemas by `build.mjs`. |
12
+ | `fixtures/*.json` | Real producer output for every state a client renders, generated by `build.mjs`. |
13
+ | `frozen/toolbox.json` | The fields the macOS toolbox decodes today, held by `test/toolbox-compat.test.mjs`. |
14
+ | `CHANGELOG.md` | What changed in the contract, by contract version. |
15
+
16
+ `node pipeline/contract/build.mjs --write` regenerates the types and fixtures;
17
+ `--check` fails on drift. `npm pack` runs `--write` first, so a published kit
18
+ always matches its schemas.
19
+
20
+ From the npm package: `@mmerterden/multi-agent-pipeline/contract` resolves to
21
+ the types (and to `manifest.json` at runtime), `/contract/*` to any kit file
22
+ and `/schemas/*` to a schema.
23
+
24
+ ## Two carriers, one contract
25
+
26
+ Every surface is reachable two ways, and for the same input both print the
27
+ same bytes (`test/contract-parity.test.mjs`):
28
+
29
+ 1. **CLI.** The scripts under `pipeline/scripts/` (installed: `~/.claude/scripts/`)
30
+ print JSON on stdout. `--redact` drops every field a schema marks
31
+ `x-sensitivity: local`.
32
+ 2. **HTTP.** `contract-server.mjs`, started on demand with `/multi-agent:serve`
33
+ or by the client itself. Routes are in `manifest.json`; `?redact=1` is
34
+ `--redact`.
35
+
36
+ | Surface | CLI | HTTP |
37
+ |---------|-----|------|
38
+ | Runs | `runs-index.mjs --json [--group G] [--redact]` | `GET /v1/runs` |
39
+ | One run | `runs-index.mjs --json --task-id ID` | `GET /v1/runs/{id}` |
40
+ | Commands | `commands.mjs --json` | `GET /v1/commands` |
41
+ | Run questions | `launch-request.mjs questions` | `GET /v1/questions` |
42
+ | Assigned issues | `issues.mjs --json [--source S] [--project K] [--max N]` | `GET /v1/issues` |
43
+ | Worktrees | `worktrees.mjs --json [--measure] [--redact]` | `GET /v1/worktrees` |
44
+ | Launch shape | `launch-request.mjs spec` | `GET /v1/launch-spec` |
45
+ | Start a run | write the request file, then `launch-request.mjs plan FILE --repo P --session-id U [--channel phone]` | `POST /v1/launch?repo=P` |
46
+ | Answer a question | `answer-question.mjs STATE --question Q --answer IDS` | `POST /v1/runs/{id}/answer` |
47
+
48
+ Starting a run is always the client's act. `POST /v1/launch` validates the
49
+ request, writes it (0600) and returns the argv, environment and working
50
+ directory from `launch.json`; it never starts `claude`. Spawn the argv without
51
+ a shell. `launch.json` is marked `verified: false` until a live launch trial, so
52
+ treat the shape as provisional.
53
+
54
+ The run starts with no permission prompts, so its input is held to a shape: a
55
+ Jira key, a GitHub issue URL, `repo#N`, `#N`, or a Jira URL on the configured
56
+ host passes as it is; free text (desktop only) becomes one quoted argument; a
57
+ newline, a control character, a leading `-` or a first token that is a pipeline
58
+ op or mode keyword is refused (`launch-request.schema.json`). `repo` must be a
59
+ configured autopilot repo or one registered with
60
+ `launch-request.mjs register-repo <path>`, else `403 repo-not-allowed`.
61
+
62
+ To answer, read `pendingQuestion` from the run (present when `waitingFor` is
63
+ `question`) and send its `id` with one or more of its `options[].id`. Anything
64
+ else is refused, and a run that has moved to another question refuses an
65
+ answer to the old one.
66
+
67
+ ## Talking to the server
68
+
69
+ - It listens on `127.0.0.1` only, on the port its ready line names, and refuses
70
+ any other `--host`.
71
+ - The ready line (stdout, one JSON object) names `tokenFile`, a 0600 file under
72
+ `~/.claude/logs/multi-agent/contract-server/` holding the token. A client
73
+ that spawned the server can pass `--print-token` to get it on the ready line.
74
+ - Every request sends `Authorization: Bearer <token>` and a `Host` of
75
+ `127.0.0.1:<port>` or `localhost:<port>`.
76
+ - A browser page is allowed only from an origin passed with `--allow-origin`;
77
+ CORS is off without one. A request carrying an `Origin` is always served
78
+ redacted.
79
+ - Bodies are JSON, at most 64 KiB, and must satisfy the route's schema.
80
+ - Errors follow `contract-error.schema.json`; switch on `error`, never on
81
+ `message`.
82
+ - The server exits after 15 idle minutes (`--idle-minutes`) or on SIGTERM. It
83
+ is never a service; start it when you need it.
84
+
85
+ A client that relays anything off this machine uses `redact=1` (or
86
+ `--redact`) for every read.
87
+
88
+ ## Phone routes
89
+
90
+ A phone does not use the bearer token. It holds an Ed25519 key enrolled locally
91
+ with `phone-devices.mjs add` and signs every request; `manifest.json` `phone`
92
+ names the headers, the signed fields, the 60 second window and the scopes, and
93
+ `phone-signed-request.schema.json` describes the signed text.
94
+
95
+ | Surface | Scope | HTTP |
96
+ |---------|-------|------|
97
+ | Runs, redacted | `read` | `GET /v1/phone/runs` |
98
+ | One run, redacted | `read` | `GET /v1/phone/runs/{id}` |
99
+ | Answer a question | `answer` | `POST /v1/phone/runs/{id}/answer` |
100
+ | Queue a launch (off until `phone-devices.mjs launch on`) | `launch` | `POST /v1/phone/launch?repo=P` |
101
+
102
+ The bearer token does not open these routes and a signature opens no other
103
+ route. Responses are always redacted; `redact=0` is refused. There is no pause,
104
+ resume, stop, steer, shell, prompt, run, merge or ready verb; each is `404
105
+ unknown-verb`. Threat model, transport and residual risks:
106
+ `multi-agent-refs/features/phone-api.md`.
107
+
108
+ ## Versioning and breaking changes
109
+
110
+ The kit carries one `contractVersion` (`manifest.json`, and the
111
+ `X-Contract-Version` header on every response); each surface also stamps its
112
+ own version in its output.
113
+
114
+ - **Adding** a field, a surface, a query parameter or an error code is a
115
+ **minor** bump. Decoders ignore keys they do not know, so nothing breaks.
116
+ - **Removing** or renaming a field, changing a field's type, narrowing what a
117
+ request accepts, or changing what an error code means is a **major** bump.
118
+ `frozen/toolbox.json` makes the toolbox's fields fail a test before such a
119
+ change can land by accident.
120
+ - **After a major bump the previous major stays served for one minor**,
121
+ selected with `?v=<major>` on any route. The minor after that removes it.
122
+ `?v=` with a major the server does not serve is a 400 `unsupported-version`
123
+ whose `supported` lists the ones it does. Without `?v=` the current major is
124
+ served.
125
+ - Every version change gets a section in `CHANGELOG.md` saying what a client
126
+ has to do.
@@ -0,0 +1,427 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @file build.mjs - generate the client kit's TypeScript declarations and
4
+ * fixtures from the things they describe.
5
+ *
6
+ * Two outputs, both derived, both checked in so a reader of the repository
7
+ * sees what a client gets:
8
+ *
9
+ * types/index.d.ts one exported type per schema manifest.json lists, read
10
+ * from pipeline/schemas/ (the single copy of each schema);
11
+ * fixtures/*.json what the producers print for a fixed set of runs, one
12
+ * per state a client renders, made by calling the same
13
+ * functions the CLI and contract-server.mjs call.
14
+ *
15
+ * `--write` regenerates both (package.json prepack runs it, so a packed kit
16
+ * never carries stale types). `--check` regenerates in memory and exits 1
17
+ * naming every file that differs; test/contract-kit.test.mjs runs it.
18
+ *
19
+ * The schema-to-TypeScript translation covers the subset the contract schemas
20
+ * use: type (and type unions), enum, const, properties/required,
21
+ * additionalProperties, items, anyOf/oneOf and local $defs references.
22
+ * Conditionals (if/then) narrow nothing TypeScript can express and are left
23
+ * to the schema. Zero dependencies (ADR-0004).
24
+ *
25
+ * Usage:
26
+ * node pipeline/contract/build.mjs --write | --check
27
+ *
28
+ * Exit: 0 written or up to date, 1 drift found by --check, 2 usage error.
29
+ */
30
+
31
+ import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs";
32
+ import { tmpdir } from "node:os";
33
+ import { join } from "node:path";
34
+ import { fileURLToPath } from "node:url";
35
+
36
+ const KIT = fileURLToPath(new URL(".", import.meta.url));
37
+ const MANIFEST = JSON.parse(readFileSync(join(KIT, "manifest.json"), "utf8"));
38
+ const SCHEMAS = join(KIT, MANIFEST.schemasDir);
39
+
40
+ // ---------------------------------------------------------------------------
41
+ // TypeScript declarations
42
+
43
+ const pascal = (s) =>
44
+ s
45
+ .split(/[^A-Za-z0-9]+/)
46
+ .filter(Boolean)
47
+ .map((w) => w[0].toUpperCase() + w.slice(1))
48
+ .join("");
49
+
50
+ export const typeNameFor = (file) => pascal(file.replace(/\.schema\.json$/, ""));
51
+
52
+ const IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
53
+ const key = (k) => (IDENT.test(k) ? k : JSON.stringify(k));
54
+ const literal = (v) => JSON.stringify(v);
55
+
56
+ function doc(text, pad) {
57
+ if (!text) return "";
58
+ const clean = String(text).replace(/\*\//g, "* /").replace(/\s+/g, " ").trim();
59
+ return `${pad}/** ${clean} */\n`;
60
+ }
61
+
62
+ function tsType(node, ctx, pad) {
63
+ if (!node || typeof node !== "object") return "unknown";
64
+ if (node.$ref) {
65
+ const m = /^#\/\$defs\/(.+)$/.exec(node.$ref);
66
+ return m ? ctx.base + pascal(m[1]) : "unknown";
67
+ }
68
+ if ("const" in node) return literal(node.const);
69
+ if (Array.isArray(node.enum)) return node.enum.map(literal).join(" | ");
70
+ const alts = node.oneOf ?? node.anyOf;
71
+ if (Array.isArray(alts)) {
72
+ return alts.map((a) => wrap(tsType(a, ctx, pad))).join(" | ");
73
+ }
74
+ const types = node.type === undefined ? [] : [].concat(node.type);
75
+ if (!types.length) return node.properties ? objectType(node, ctx, pad) : "unknown";
76
+ return types.map((t) => wrap(single(t, node, ctx, pad))).join(" | ");
77
+ }
78
+
79
+ const wrap = (t) => (/^[^{]*\|/.test(t) && !t.startsWith("(") ? `(${t})` : t);
80
+
81
+ function single(t, node, ctx, pad) {
82
+ switch (t) {
83
+ case "string":
84
+ return "string";
85
+ case "integer":
86
+ case "number":
87
+ return "number";
88
+ case "boolean":
89
+ return "boolean";
90
+ case "null":
91
+ return "null";
92
+ case "array":
93
+ return node.items ? `Array<${tsType(node.items, ctx, pad)}>` : "unknown[]";
94
+ case "object":
95
+ return objectType(node, ctx, pad);
96
+ default:
97
+ return "unknown";
98
+ }
99
+ }
100
+
101
+ function objectType(node, ctx, pad) {
102
+ const props = node.properties ?? {};
103
+ const required = new Set(node.required ?? []);
104
+ const inner = `${pad} `;
105
+ const lines = [];
106
+ for (const [k, v] of Object.entries(props)) {
107
+ lines.push(
108
+ doc(v.description, inner) +
109
+ `${inner}${key(k)}${required.has(k) ? "" : "?"}: ${tsType(v, ctx, inner)};`,
110
+ );
111
+ }
112
+ const extra = node.additionalProperties;
113
+ if (extra && typeof extra === "object") {
114
+ lines.push(`${inner}[key: string]: ${tsType(extra, ctx, inner)};`);
115
+ } else if (!Object.keys(props).length) {
116
+ return "Record<string, unknown>";
117
+ }
118
+ return `{\n${lines.join("\n")}\n${pad}}`;
119
+ }
120
+
121
+ function declare(name, node, ctx) {
122
+ const isObject = [].concat(node.type ?? []).join() === "object" && node.properties;
123
+ const head = doc(node.description ?? node.title, "");
124
+ return isObject
125
+ ? `${head}export interface ${name} ${objectType(node, ctx, "")}\n`
126
+ : `${head}export type ${name} = ${tsType(node, ctx, "")};\n`;
127
+ }
128
+
129
+ export function renderTypes() {
130
+ const out = [
131
+ "// Generated by pipeline/contract/build.mjs from pipeline/schemas/*.schema.json.",
132
+ "// Do not edit: change the schema and run `node pipeline/contract/build.mjs --write`.",
133
+ "",
134
+ `export type ContractVersion = ${literal(MANIFEST.contractVersion)};`,
135
+ `export type SurfaceId = ${MANIFEST.surfaces.map((s) => literal(s.id)).join(" | ")};`,
136
+ "",
137
+ ];
138
+ for (const file of MANIFEST.schemas) {
139
+ const schema = JSON.parse(readFileSync(join(SCHEMAS, file), "utf8"));
140
+ const base = typeNameFor(file);
141
+ const ctx = { base };
142
+ out.push(declare(base, schema, ctx));
143
+ for (const [defName, def] of Object.entries(schema.$defs ?? {})) {
144
+ out.push(declare(base + pascal(defName), def, ctx));
145
+ }
146
+ }
147
+ return out.join("\n");
148
+ }
149
+
150
+ // ---------------------------------------------------------------------------
151
+ // Fixtures
152
+
153
+ const FIXED_NOW = "2026-09-17T10:30:00.000Z";
154
+ const SHOWN_ROOT = "/Users/example/.claude/logs/multi-agent";
155
+ const QUESTION = {
156
+ id: "maturity",
157
+ stepId: "phase-0/maturity",
158
+ text: "The item has no acceptance criteria. How should the run continue?",
159
+ kind: "single-select",
160
+ options: [
161
+ { id: "fix", label: "Open the item and fix it" },
162
+ { id: "continue", label: "Continue without it" },
163
+ { id: "abort", label: "Abort" },
164
+ ],
165
+ };
166
+ const tracker = (taskId, phases) => ({
167
+ task_id: taskId,
168
+ started_at: "2026-09-17T10:00:00Z",
169
+ phases,
170
+ });
171
+ const phase = (id, name, status, extra = {}) => ({ id, name, status, ...extra });
172
+ const DONE = (id, name) =>
173
+ phase(id, name, "completed", {
174
+ model: "opus",
175
+ started_at: "2026-09-17T10:00:00Z",
176
+ completed_at: "2026-09-17T10:05:00Z",
177
+ tokens_in: 1200,
178
+ tokens_out: 340,
179
+ tokens_cached: 900,
180
+ });
181
+
182
+ /** One run per state: [agent-state, tracker-state] under example-app/<taskId>. */
183
+ const RUN_STATES = {
184
+ running: [
185
+ {
186
+ taskId: "PROJ-101",
187
+ schemaVersion: "2.2.0",
188
+ rev: 7,
189
+ status: "in_progress",
190
+ currentPhase: 2,
191
+ branch: "feature/PROJ-101",
192
+ baseBranch: "develop",
193
+ startedAt: "2026-09-17T10:00:00Z",
194
+ sessionId: "00000000-0000-4000-8000-000000000101",
195
+ autopilot: true,
196
+ project: "example-app",
197
+ projectRoot: "/Users/example/example-app",
198
+ worktreePath: "/Users/example/example-app/.worktrees/PROJ-101",
199
+ },
200
+ tracker("PROJ-101", [
201
+ DONE("0", "Init"),
202
+ DONE("1", "Plan"),
203
+ phase("2", "Dev", "in_progress", {
204
+ model: "opus",
205
+ started_at: "2026-09-17T10:06:00Z",
206
+ now: "writing tests",
207
+ subs: [
208
+ { id: "2.1", name: "failing test", status: "completed" },
209
+ { id: "2.2", name: "implementation", status: "in_progress" },
210
+ ],
211
+ }),
212
+ ]),
213
+ ],
214
+ "awaiting-question": [
215
+ {
216
+ taskId: "PROJ-102",
217
+ schemaVersion: "2.2.0",
218
+ rev: 3,
219
+ status: "awaiting_input",
220
+ currentPhase: 0,
221
+ startedAt: "2026-09-17T10:00:00Z",
222
+ sessionId: "00000000-0000-4000-8000-000000000102",
223
+ autopilot: true,
224
+ project: "example-app",
225
+ waitingFor: "question",
226
+ pendingQuestion: QUESTION,
227
+ },
228
+ tracker("PROJ-102", [phase("0", "Init", "in_progress", { now: "waiting for an answer" })]),
229
+ ],
230
+ failed: [
231
+ {
232
+ taskId: "PROJ-103",
233
+ schemaVersion: "2.2.0",
234
+ rev: 12,
235
+ status: "failed",
236
+ currentPhase: 3,
237
+ branch: "bugfix/PROJ-103",
238
+ baseBranch: "develop",
239
+ startedAt: "2026-09-17T10:00:00Z",
240
+ project: "example-app",
241
+ worktreePath: "/Users/example/example-app/.worktrees/PROJ-103",
242
+ },
243
+ tracker("PROJ-103", [
244
+ DONE("0", "Init"),
245
+ DONE("1", "Plan"),
246
+ DONE("2", "Dev"),
247
+ phase("3", "Review", "failed", { model: "fable", started_at: "2026-09-17T10:20:00Z" }),
248
+ ]),
249
+ ],
250
+ "pr-opened": [
251
+ {
252
+ taskId: "PROJ-104",
253
+ schemaVersion: "2.2.0",
254
+ rev: 21,
255
+ status: "awaiting_input",
256
+ currentPhase: 5,
257
+ branch: "feature/PROJ-104",
258
+ baseBranch: "develop",
259
+ startedAt: "2026-09-17T10:00:00Z",
260
+ project: "example-app",
261
+ worktreePath: "/Users/example/example-app/.worktrees/PROJ-104",
262
+ pr: { url: "https://github.com/example-org/example-app/pull/104" },
263
+ },
264
+ tracker(
265
+ "PROJ-104",
266
+ ["Init", "Plan", "Dev", "Review", "Commit", "Report"].map((n, i) => DONE(String(i), n)),
267
+ ),
268
+ ],
269
+ "old-schema": [
270
+ {
271
+ taskId: "PROJ-105",
272
+ schemaVersion: "2.0.0",
273
+ status: "paused",
274
+ currentPhase: 2,
275
+ branchName: "feature/PROJ-105",
276
+ },
277
+ tracker("PROJ-105", [DONE("0", "Init"), DONE("1", "Plan"), phase("2", "Dev", "pending")]),
278
+ ],
279
+ };
280
+
281
+ /** Fields runs-index added after contract 1.0.0; the old-schema fixture has none. */
282
+ const ADDED_SINCE_1_0 = ["sessionId", "waitingFor", "pendingQuestion"];
283
+
284
+ async function withLogsRoot(fn) {
285
+ const base = mkdtempSync(join(tmpdir(), "ma-kit-"));
286
+ const saved = process.env.LOGS_ROOT;
287
+ process.env.LOGS_ROOT = base;
288
+ try {
289
+ return await fn(base);
290
+ } finally {
291
+ if (saved === undefined) delete process.env.LOGS_ROOT;
292
+ else process.env.LOGS_ROOT = saved;
293
+ rmSync(base, { recursive: true, force: true });
294
+ }
295
+ }
296
+
297
+ const shown = (obj, root) => {
298
+ let text = JSON.stringify(obj);
299
+ for (const r of new Set([root, realpathSync(root)])) text = text.split(r).join(SHOWN_ROOT);
300
+ return JSON.parse(text);
301
+ };
302
+
303
+ export async function renderFixtures() {
304
+ const runsIndex = await import("../scripts/runs-index.mjs");
305
+ const worktrees = await import("../scripts/worktrees.mjs");
306
+ const issues = await import("../scripts/issues.mjs");
307
+ const launch = await import("../scripts/launch-request.mjs");
308
+ const answer = await import("../scripts/answer-question.mjs");
309
+ const out = {};
310
+
311
+ const indexOf = (states, { redact = false } = {}) =>
312
+ withLogsRoot((root) => {
313
+ for (const [state, trackerState] of states) {
314
+ const dir = join(root, "example-app", state.taskId);
315
+ mkdirSync(dir, { recursive: true });
316
+ writeFileSync(join(dir, "agent-state.json"), JSON.stringify(state));
317
+ writeFileSync(join(dir, "tracker-state.json"), JSON.stringify(trackerState));
318
+ }
319
+ return shown(runsIndex.envelope(runsIndex.selectRuns().records, { redact }), root);
320
+ });
321
+
322
+ for (const [name, pair] of Object.entries(RUN_STATES)) {
323
+ const doc = await indexOf([pair]);
324
+ if (name === "old-schema") {
325
+ doc.contractVersion = "1.0.0";
326
+ for (const run of doc.runs) for (const k of ADDED_SINCE_1_0) delete run[k];
327
+ }
328
+ out[`runs-${name}.json`] = doc;
329
+ }
330
+ out["runs-pr-opened-redacted.json"] = await indexOf([RUN_STATES["pr-opened"]], { redact: true });
331
+ out["runs-empty.json"] = await indexOf([]);
332
+ out["worktrees-empty.json"] = await withLogsRoot(() => worktrees.buildList());
333
+ out["issues-empty.json"] = issues.collect({
334
+ env: {
335
+ PATH: process.env.PATH,
336
+ HOME: tmpdir(),
337
+ MA_JIRA_SEARCH: "/nonexistent/jira-search.sh",
338
+ MA_GH_BIN: "/nonexistent/gh",
339
+ },
340
+ });
341
+
342
+ const sessionId = "00000000-0000-4000-8000-000000000201";
343
+ out["launch-plan.json"] = launch.planLaunch({
344
+ request: {
345
+ contractVersion: "1.0.0",
346
+ input: "PROJ-201",
347
+ mode: "autopilot",
348
+ answers: { workspace: "worktree" },
349
+ },
350
+ requestFile: `/Users/example/.claude/autopilot/requests/${sessionId}.json`,
351
+ repoPath: "/Users/example/example-app",
352
+ settingsFile: "/Users/example/.claude/multi-agent-unattended.settings.json",
353
+ runLogsRoot: "/Users/example/.multi-agent-unattended/logs",
354
+ sessionId,
355
+ workingTree: "clean",
356
+ }).out;
357
+ const answered = answer.applyAnswer(
358
+ { waitingFor: "question", pendingQuestion: QUESTION },
359
+ ["continue"],
360
+ new Date(FIXED_NOW),
361
+ );
362
+ out["answer-result.json"] = {
363
+ contractVersion: answer.CONTRACT_VERSION,
364
+ answered: answered.state.lastAnswer,
365
+ };
366
+ out["error-unauthorized.json"] = {
367
+ contractVersion: MANIFEST.contractVersion,
368
+ error: "unauthorized",
369
+ message: "a bearer token is required",
370
+ };
371
+ out["error-unsigned.json"] = {
372
+ contractVersion: MANIFEST.contractVersion,
373
+ error: "unsigned",
374
+ message: "a device signature is required",
375
+ };
376
+ out["error-invalid-request.json"] = {
377
+ contractVersion: MANIFEST.contractVersion,
378
+ error: "invalid-request",
379
+ message: "the launch request was refused",
380
+ errors: ['answers.workspace: "local" is not allowed in autopilot mode'],
381
+ };
382
+ return out;
383
+ }
384
+
385
+ // ---------------------------------------------------------------------------
386
+
387
+ async function main(argv) {
388
+ const mode = argv[0];
389
+ if (argv.length !== 1 || (mode !== "--write" && mode !== "--check")) {
390
+ process.stderr.write("usage: build.mjs --write | --check\n");
391
+ return 2;
392
+ }
393
+ const files = { "types/index.d.ts": renderTypes() };
394
+ for (const [name, doc] of Object.entries(await renderFixtures())) {
395
+ files[`fixtures/${name}`] = JSON.stringify(doc, null, 2) + "\n";
396
+ }
397
+ const drift = [];
398
+ for (const [rel, text] of Object.entries(files)) {
399
+ const path = join(KIT, rel);
400
+ let current;
401
+ try {
402
+ current = readFileSync(path, "utf8");
403
+ } catch {
404
+ current = null;
405
+ }
406
+ if (current === text) continue;
407
+ if (mode === "--write") {
408
+ mkdirSync(join(path, ".."), { recursive: true });
409
+ writeFileSync(path, text);
410
+ process.stdout.write(`wrote ${rel}\n`);
411
+ } else drift.push(rel);
412
+ }
413
+ if (drift.length) {
414
+ process.stdout.write(
415
+ `contract kit drift (run build.mjs --write):\n${drift.map((d) => ` ${d}\n`).join("")}`,
416
+ );
417
+ return 1;
418
+ }
419
+ return 0;
420
+ }
421
+
422
+ if (
423
+ process.argv[1] &&
424
+ realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url))
425
+ ) {
426
+ process.exitCode = await main(process.argv.slice(2));
427
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "contractVersion": "1.0.0",
3
+ "answered": {
4
+ "questionId": "maturity",
5
+ "stepId": "phase-0/maturity",
6
+ "optionIds": [
7
+ "continue"
8
+ ],
9
+ "answeredAt": "2026-09-17T10:30:00.000Z"
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "contractVersion": "1.2.0",
3
+ "error": "invalid-request",
4
+ "message": "the launch request was refused",
5
+ "errors": [
6
+ "answers.workspace: \"local\" is not allowed in autopilot mode"
7
+ ]
8
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contractVersion": "1.2.0",
3
+ "error": "unauthorized",
4
+ "message": "a bearer token is required"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contractVersion": "1.2.0",
3
+ "error": "unsigned",
4
+ "message": "a device signature is required"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "contractVersion": "1.0.0",
3
+ "items": [],
4
+ "sources": [
5
+ {
6
+ "source": "jira",
7
+ "ok": false,
8
+ "count": 0,
9
+ "reason": "failed"
10
+ },
11
+ {
12
+ "source": "github",
13
+ "ok": false,
14
+ "count": 0,
15
+ "reason": "unavailable"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "contractVersion": "1.0.0",
3
+ "valid": true,
4
+ "verified": false,
5
+ "host": "claude",
6
+ "mode": "autopilot",
7
+ "sessionId": "00000000-0000-4000-8000-000000000201",
8
+ "requestFile": "/Users/example/.claude/autopilot/requests/00000000-0000-4000-8000-000000000201.json",
9
+ "bin": "claude",
10
+ "cwd": "/Users/example/example-app",
11
+ "argv": [
12
+ "--bg",
13
+ "--session-id",
14
+ "00000000-0000-4000-8000-000000000201",
15
+ "--permission-prompts",
16
+ "none",
17
+ "--settings",
18
+ "/Users/example/.claude/multi-agent-unattended.settings.json",
19
+ "-p",
20
+ "/multi-agent PROJ-201 autopilot"
21
+ ],
22
+ "env": {
23
+ "MULTI_AGENT_UNATTENDED": "1",
24
+ "MULTI_AGENT_SESSION_ID": "00000000-0000-4000-8000-000000000201",
25
+ "MCP_TOOLKIT_URL_POLICY": "strict",
26
+ "MCP_TOOLKIT_INDEX_DENY": "~/.ssh,~/.aws,~/.gnupg,~/Library/Keychains",
27
+ "LOGS_ROOT": "/Users/example/.multi-agent-unattended/logs",
28
+ "MA_LAUNCH_REQUEST": "/Users/example/.claude/autopilot/requests/00000000-0000-4000-8000-000000000201.json"
29
+ },
30
+ "shell": false
31
+ }