codex-orchestrator 0.1.51 → 2.0.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 (570) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +45 -389
  3. package/dist/src/index.d.ts +16 -46
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +8 -24
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/v2/acceptance-proof.d.ts +111 -0
  8. package/dist/src/v2/acceptance-proof.d.ts.map +1 -0
  9. package/dist/src/v2/acceptance-proof.js +427 -0
  10. package/dist/src/v2/acceptance-proof.js.map +1 -0
  11. package/dist/src/v2/adapters/command.d.ts.map +1 -0
  12. package/dist/src/v2/adapters/command.js.map +1 -0
  13. package/dist/src/v2/adapters/durable-atomic-file.d.ts.map +1 -0
  14. package/dist/src/v2/adapters/durable-atomic-file.js.map +1 -0
  15. package/dist/src/v2/adapters/gh-cli.d.ts.map +1 -0
  16. package/dist/src/v2/adapters/gh-cli.js.map +1 -0
  17. package/dist/src/v2/adapters/gh-issue-adapter.d.ts.map +1 -0
  18. package/dist/src/v2/adapters/gh-issue-adapter.js.map +1 -0
  19. package/dist/src/v2/adapters/gh-pull-request-adapter.d.ts.map +1 -0
  20. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -0
  21. package/dist/src/v2/adapters/issues.d.ts.map +1 -0
  22. package/dist/src/v2/adapters/issues.js.map +1 -0
  23. package/dist/src/v2/adapters/mission-coordinator-lock.d.ts.map +1 -0
  24. package/dist/src/v2/adapters/mission-coordinator-lock.js.map +1 -0
  25. package/dist/src/v2/adapters/path-policy.d.ts.map +1 -0
  26. package/dist/src/v2/adapters/path-policy.js.map +1 -0
  27. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -0
  28. package/dist/src/v2/adapters/pull-requests.js.map +1 -0
  29. package/dist/src/v2/adapters/target-activity-fence.d.ts.map +1 -0
  30. package/dist/src/{runner → v2/adapters}/target-activity-fence.js +1 -1
  31. package/dist/src/v2/adapters/target-activity-fence.js.map +1 -0
  32. package/dist/src/{git → v2/adapters}/worktree.d.ts +1 -1
  33. package/dist/src/v2/adapters/worktree.d.ts.map +1 -0
  34. package/dist/src/{git → v2/adapters}/worktree.js +2 -2
  35. package/dist/src/v2/adapters/worktree.js.map +1 -0
  36. package/dist/src/v2/atomic-store.d.ts +36 -0
  37. package/dist/src/v2/atomic-store.d.ts.map +1 -0
  38. package/dist/src/v2/atomic-store.js +328 -0
  39. package/dist/src/v2/atomic-store.js.map +1 -0
  40. package/dist/src/v2/candidate-cli.d.ts +22 -0
  41. package/dist/src/v2/candidate-cli.d.ts.map +1 -0
  42. package/dist/src/v2/candidate-cli.js +161 -0
  43. package/dist/src/v2/candidate-cli.js.map +1 -0
  44. package/dist/src/v2/checked-change.d.ts +49 -0
  45. package/dist/src/v2/checked-change.d.ts.map +1 -0
  46. package/dist/src/v2/checked-change.js +139 -0
  47. package/dist/src/v2/checked-change.js.map +1 -0
  48. package/dist/src/v2/cli-contract.d.ts +8 -0
  49. package/dist/src/v2/cli-contract.d.ts.map +1 -0
  50. package/dist/src/v2/cli-contract.js +32 -0
  51. package/dist/src/v2/cli-contract.js.map +1 -0
  52. package/dist/src/v2/codex-process.d.ts +71 -0
  53. package/dist/src/v2/codex-process.d.ts.map +1 -0
  54. package/dist/src/v2/codex-process.js +404 -0
  55. package/dist/src/v2/codex-process.js.map +1 -0
  56. package/dist/src/v2/config.d.ts +45 -0
  57. package/dist/src/v2/config.d.ts.map +1 -0
  58. package/dist/src/v2/config.js +139 -0
  59. package/dist/src/v2/config.js.map +1 -0
  60. package/dist/src/v2/containment.d.ts +55 -0
  61. package/dist/src/v2/containment.d.ts.map +1 -0
  62. package/dist/src/v2/containment.js +370 -0
  63. package/dist/src/v2/containment.js.map +1 -0
  64. package/dist/src/v2/implementation-report.d.ts +18 -0
  65. package/dist/src/v2/implementation-report.d.ts.map +1 -0
  66. package/dist/src/v2/implementation-report.js +147 -0
  67. package/dist/src/v2/implementation-report.js.map +1 -0
  68. package/dist/src/v2/legacy-cutover.d.ts +52 -0
  69. package/dist/src/v2/legacy-cutover.d.ts.map +1 -0
  70. package/dist/src/v2/legacy-cutover.js +87 -0
  71. package/dist/src/v2/legacy-cutover.js.map +1 -0
  72. package/dist/src/v2/mobile-lease.d.ts +97 -0
  73. package/dist/src/v2/mobile-lease.d.ts.map +1 -0
  74. package/dist/src/v2/mobile-lease.js +253 -0
  75. package/dist/src/v2/mobile-lease.js.map +1 -0
  76. package/dist/src/v2/proof-report.d.ts +118 -0
  77. package/dist/src/v2/proof-report.d.ts.map +1 -0
  78. package/dist/src/v2/proof-report.js +703 -0
  79. package/dist/src/v2/proof-report.js.map +1 -0
  80. package/dist/src/v2/proof-store.d.ts +42 -0
  81. package/dist/src/v2/proof-store.d.ts.map +1 -0
  82. package/dist/src/v2/proof-store.js +180 -0
  83. package/dist/src/v2/proof-store.js.map +1 -0
  84. package/dist/src/v2/report-envelope.d.ts +4 -0
  85. package/dist/src/v2/report-envelope.d.ts.map +1 -0
  86. package/dist/src/v2/report-envelope.js +46 -0
  87. package/dist/src/v2/report-envelope.js.map +1 -0
  88. package/dist/src/v2/run-issue.d.ts +213 -0
  89. package/dist/src/v2/run-issue.d.ts.map +1 -0
  90. package/dist/src/v2/run-issue.js +906 -0
  91. package/dist/src/v2/run-issue.js.map +1 -0
  92. package/dist/src/v2/run-store.d.ts +136 -0
  93. package/dist/src/v2/run-store.d.ts.map +1 -0
  94. package/dist/src/v2/run-store.js +346 -0
  95. package/dist/src/v2/run-store.js.map +1 -0
  96. package/dist/src/v2/runtime-assets.d.ts +31 -0
  97. package/dist/src/v2/runtime-assets.d.ts.map +1 -0
  98. package/dist/src/v2/runtime-assets.js +473 -0
  99. package/dist/src/v2/runtime-assets.js.map +1 -0
  100. package/dist/src/v2/runtime.d.ts +137 -0
  101. package/dist/src/v2/runtime.d.ts.map +1 -0
  102. package/dist/src/v2/runtime.js +847 -0
  103. package/dist/src/v2/runtime.js.map +1 -0
  104. package/dist/src/v2/setup-cli.d.ts +5 -0
  105. package/dist/src/v2/setup-cli.d.ts.map +1 -0
  106. package/dist/src/v2/setup-cli.js +83 -0
  107. package/dist/src/v2/setup-cli.js.map +1 -0
  108. package/dist/src/v2/setup-runtime.d.ts +6 -0
  109. package/dist/src/v2/setup-runtime.d.ts.map +1 -0
  110. package/dist/src/v2/setup-runtime.js +213 -0
  111. package/dist/src/v2/setup-runtime.js.map +1 -0
  112. package/dist/src/v2/setup-store.d.ts +19 -0
  113. package/dist/src/v2/setup-store.d.ts.map +1 -0
  114. package/dist/src/v2/setup-store.js +208 -0
  115. package/dist/src/v2/setup-store.js.map +1 -0
  116. package/dist/src/v2/setup.d.ts +147 -0
  117. package/dist/src/v2/setup.d.ts.map +1 -0
  118. package/dist/src/v2/setup.js +529 -0
  119. package/dist/src/v2/setup.js.map +1 -0
  120. package/docs/deep-dive.md +54 -803
  121. package/internal-skills/acceptance-proof/SKILL.md +14 -0
  122. package/internal-skills/acceptance-proof/references/android.md +14 -0
  123. package/internal-skills/acceptance-proof/references/browser.md +13 -0
  124. package/internal-skills/acceptance-proof/references/ios.md +14 -0
  125. package/internal-skills/acceptance-proof/tools/android-lease.mjs +280 -0
  126. package/internal-skills/acceptance-proof/tools/ios-lease.mjs +288 -0
  127. package/internal-skills/agent-auto/SKILL.md +14 -0
  128. package/package.json +11 -18
  129. package/bridge-runtime.json +0 -2719
  130. package/dist/src/bridge-runtime.d.ts +0 -17
  131. package/dist/src/bridge-runtime.d.ts.map +0 -1
  132. package/dist/src/bridge-runtime.js +0 -170
  133. package/dist/src/bridge-runtime.js.map +0 -1
  134. package/dist/src/cli.d.ts +0 -3
  135. package/dist/src/cli.d.ts.map +0 -1
  136. package/dist/src/cli.js +0 -569
  137. package/dist/src/cli.js.map +0 -1
  138. package/dist/src/codex/command-adapter.d.ts +0 -47
  139. package/dist/src/codex/command-adapter.d.ts.map +0 -1
  140. package/dist/src/codex/command-adapter.js +0 -169
  141. package/dist/src/codex/command-adapter.js.map +0 -1
  142. package/dist/src/codex/mobile-device-guard.d.ts +0 -7
  143. package/dist/src/codex/mobile-device-guard.d.ts.map +0 -1
  144. package/dist/src/codex/mobile-device-guard.js +0 -63
  145. package/dist/src/codex/mobile-device-guard.js.map +0 -1
  146. package/dist/src/config/constants.d.ts +0 -6
  147. package/dist/src/config/constants.d.ts.map +0 -1
  148. package/dist/src/config/constants.js +0 -19
  149. package/dist/src/config/constants.js.map +0 -1
  150. package/dist/src/config/schema.d.ts +0 -234
  151. package/dist/src/config/schema.d.ts.map +0 -1
  152. package/dist/src/config/schema.js +0 -673
  153. package/dist/src/config/schema.js.map +0 -1
  154. package/dist/src/fs/durable-atomic-file.d.ts.map +0 -1
  155. package/dist/src/fs/durable-atomic-file.js.map +0 -1
  156. package/dist/src/git/base-branch.d.ts +0 -26
  157. package/dist/src/git/base-branch.d.ts.map +0 -1
  158. package/dist/src/git/base-branch.js +0 -45
  159. package/dist/src/git/base-branch.js.map +0 -1
  160. package/dist/src/git/worktree.d.ts.map +0 -1
  161. package/dist/src/git/worktree.js.map +0 -1
  162. package/dist/src/github/gh-cli.d.ts.map +0 -1
  163. package/dist/src/github/gh-cli.js.map +0 -1
  164. package/dist/src/github/gh-issue-adapter.d.ts.map +0 -1
  165. package/dist/src/github/gh-issue-adapter.js.map +0 -1
  166. package/dist/src/github/gh-pull-request-adapter.d.ts.map +0 -1
  167. package/dist/src/github/gh-pull-request-adapter.js.map +0 -1
  168. package/dist/src/github/issues.d.ts.map +0 -1
  169. package/dist/src/github/issues.js.map +0 -1
  170. package/dist/src/github/pull-requests.d.ts.map +0 -1
  171. package/dist/src/github/pull-requests.js.map +0 -1
  172. package/dist/src/package-info.d.ts +0 -6
  173. package/dist/src/package-info.d.ts.map +0 -1
  174. package/dist/src/package-info.js +0 -13
  175. package/dist/src/package-info.js.map +0 -1
  176. package/dist/src/path-policy.d.ts.map +0 -1
  177. package/dist/src/path-policy.js.map +0 -1
  178. package/dist/src/process/command.d.ts.map +0 -1
  179. package/dist/src/process/command.js.map +0 -1
  180. package/dist/src/review-handoff.d.ts +0 -3
  181. package/dist/src/review-handoff.d.ts.map +0 -1
  182. package/dist/src/review-handoff.js +0 -8
  183. package/dist/src/review-handoff.js.map +0 -1
  184. package/dist/src/runner/acceptance-proof-loop.d.ts +0 -97
  185. package/dist/src/runner/acceptance-proof-loop.d.ts.map +0 -1
  186. package/dist/src/runner/acceptance-proof-loop.js +0 -404
  187. package/dist/src/runner/acceptance-proof-loop.js.map +0 -1
  188. package/dist/src/runner/acceptance-proof-runner.d.ts +0 -24
  189. package/dist/src/runner/acceptance-proof-runner.d.ts.map +0 -1
  190. package/dist/src/runner/acceptance-proof-runner.js +0 -121
  191. package/dist/src/runner/acceptance-proof-runner.js.map +0 -1
  192. package/dist/src/runner/acceptance-proof.d.ts +0 -189
  193. package/dist/src/runner/acceptance-proof.d.ts.map +0 -1
  194. package/dist/src/runner/acceptance-proof.js +0 -594
  195. package/dist/src/runner/acceptance-proof.js.map +0 -1
  196. package/dist/src/runner/agent-attempt.d.ts +0 -105
  197. package/dist/src/runner/agent-attempt.d.ts.map +0 -1
  198. package/dist/src/runner/agent-attempt.js +0 -245
  199. package/dist/src/runner/agent-attempt.js.map +0 -1
  200. package/dist/src/runner/android-visual-proof-command.d.ts +0 -26
  201. package/dist/src/runner/android-visual-proof-command.d.ts.map +0 -1
  202. package/dist/src/runner/android-visual-proof-command.js +0 -592
  203. package/dist/src/runner/android-visual-proof-command.js.map +0 -1
  204. package/dist/src/runner/auto-visual-proof-command.d.ts +0 -15
  205. package/dist/src/runner/auto-visual-proof-command.d.ts.map +0 -1
  206. package/dist/src/runner/auto-visual-proof-command.js +0 -64
  207. package/dist/src/runner/auto-visual-proof-command.js.map +0 -1
  208. package/dist/src/runner/browser-proof-contract.d.ts +0 -134
  209. package/dist/src/runner/browser-proof-contract.d.ts.map +0 -1
  210. package/dist/src/runner/browser-proof-contract.js +0 -400
  211. package/dist/src/runner/browser-proof-contract.js.map +0 -1
  212. package/dist/src/runner/browser-visual-proof-command.d.ts +0 -101
  213. package/dist/src/runner/browser-visual-proof-command.d.ts.map +0 -1
  214. package/dist/src/runner/browser-visual-proof-command.js +0 -532
  215. package/dist/src/runner/browser-visual-proof-command.js.map +0 -1
  216. package/dist/src/runner/command-utils.d.ts +0 -15
  217. package/dist/src/runner/command-utils.d.ts.map +0 -1
  218. package/dist/src/runner/command-utils.js +0 -228
  219. package/dist/src/runner/command-utils.js.map +0 -1
  220. package/dist/src/runner/completion-report.d.ts +0 -121
  221. package/dist/src/runner/completion-report.d.ts.map +0 -1
  222. package/dist/src/runner/completion-report.js +0 -381
  223. package/dist/src/runner/completion-report.js.map +0 -1
  224. package/dist/src/runner/context-snapshot.d.ts +0 -33
  225. package/dist/src/runner/context-snapshot.d.ts.map +0 -1
  226. package/dist/src/runner/context-snapshot.js +0 -99
  227. package/dist/src/runner/context-snapshot.js.map +0 -1
  228. package/dist/src/runner/daemon-command.d.ts +0 -30
  229. package/dist/src/runner/daemon-command.d.ts.map +0 -1
  230. package/dist/src/runner/daemon-command.js +0 -262
  231. package/dist/src/runner/daemon-command.js.map +0 -1
  232. package/dist/src/runner/doctor-command.d.ts +0 -41
  233. package/dist/src/runner/doctor-command.d.ts.map +0 -1
  234. package/dist/src/runner/doctor-command.js +0 -177
  235. package/dist/src/runner/doctor-command.js.map +0 -1
  236. package/dist/src/runner/durable-run-summary.d.ts +0 -80
  237. package/dist/src/runner/durable-run-summary.d.ts.map +0 -1
  238. package/dist/src/runner/durable-run-summary.js +0 -200
  239. package/dist/src/runner/durable-run-summary.js.map +0 -1
  240. package/dist/src/runner/flutter-sdk-discovery.d.ts +0 -5
  241. package/dist/src/runner/flutter-sdk-discovery.d.ts.map +0 -1
  242. package/dist/src/runner/flutter-sdk-discovery.js +0 -103
  243. package/dist/src/runner/flutter-sdk-discovery.js.map +0 -1
  244. package/dist/src/runner/fresh-context-review.d.ts +0 -22
  245. package/dist/src/runner/fresh-context-review.d.ts.map +0 -1
  246. package/dist/src/runner/fresh-context-review.js +0 -177
  247. package/dist/src/runner/fresh-context-review.js.map +0 -1
  248. package/dist/src/runner/handoff-evidence.d.ts +0 -141
  249. package/dist/src/runner/handoff-evidence.d.ts.map +0 -1
  250. package/dist/src/runner/handoff-evidence.js +0 -543
  251. package/dist/src/runner/handoff-evidence.js.map +0 -1
  252. package/dist/src/runner/hygiene-cleanup.d.ts +0 -15
  253. package/dist/src/runner/hygiene-cleanup.d.ts.map +0 -1
  254. package/dist/src/runner/hygiene-cleanup.js +0 -25
  255. package/dist/src/runner/hygiene-cleanup.js.map +0 -1
  256. package/dist/src/runner/ios-visual-proof-command.d.ts +0 -25
  257. package/dist/src/runner/ios-visual-proof-command.d.ts.map +0 -1
  258. package/dist/src/runner/ios-visual-proof-command.js +0 -353
  259. package/dist/src/runner/ios-visual-proof-command.js.map +0 -1
  260. package/dist/src/runner/issue-state-machine.d.ts +0 -39
  261. package/dist/src/runner/issue-state-machine.d.ts.map +0 -1
  262. package/dist/src/runner/issue-state-machine.js +0 -124
  263. package/dist/src/runner/issue-state-machine.js.map +0 -1
  264. package/dist/src/runner/issue-tree.d.ts +0 -65
  265. package/dist/src/runner/issue-tree.d.ts.map +0 -1
  266. package/dist/src/runner/issue-tree.js +0 -474
  267. package/dist/src/runner/issue-tree.js.map +0 -1
  268. package/dist/src/runner/lifecycle-events.d.ts +0 -44
  269. package/dist/src/runner/lifecycle-events.d.ts.map +0 -1
  270. package/dist/src/runner/lifecycle-events.js +0 -108
  271. package/dist/src/runner/lifecycle-events.js.map +0 -1
  272. package/dist/src/runner/local-execution-session.d.ts +0 -112
  273. package/dist/src/runner/local-execution-session.d.ts.map +0 -1
  274. package/dist/src/runner/local-execution-session.js +0 -1064
  275. package/dist/src/runner/local-execution-session.js.map +0 -1
  276. package/dist/src/runner/local-state.d.ts +0 -44
  277. package/dist/src/runner/local-state.d.ts.map +0 -1
  278. package/dist/src/runner/local-state.js +0 -150
  279. package/dist/src/runner/local-state.js.map +0 -1
  280. package/dist/src/runner/mission-activation.d.ts +0 -29
  281. package/dist/src/runner/mission-activation.d.ts.map +0 -1
  282. package/dist/src/runner/mission-activation.js +0 -54
  283. package/dist/src/runner/mission-activation.js.map +0 -1
  284. package/dist/src/runner/mission-agent-broker.d.ts +0 -53
  285. package/dist/src/runner/mission-agent-broker.d.ts.map +0 -1
  286. package/dist/src/runner/mission-agent-broker.js +0 -182
  287. package/dist/src/runner/mission-agent-broker.js.map +0 -1
  288. package/dist/src/runner/mission-cancellation.d.ts +0 -77
  289. package/dist/src/runner/mission-cancellation.d.ts.map +0 -1
  290. package/dist/src/runner/mission-cancellation.js +0 -180
  291. package/dist/src/runner/mission-cancellation.js.map +0 -1
  292. package/dist/src/runner/mission-canonical-path.d.ts +0 -34
  293. package/dist/src/runner/mission-canonical-path.d.ts.map +0 -1
  294. package/dist/src/runner/mission-canonical-path.js +0 -121
  295. package/dist/src/runner/mission-canonical-path.js.map +0 -1
  296. package/dist/src/runner/mission-capability-kernel.d.ts +0 -34
  297. package/dist/src/runner/mission-capability-kernel.d.ts.map +0 -1
  298. package/dist/src/runner/mission-capability-kernel.js +0 -158
  299. package/dist/src/runner/mission-capability-kernel.js.map +0 -1
  300. package/dist/src/runner/mission-check-policy.d.ts +0 -17
  301. package/dist/src/runner/mission-check-policy.d.ts.map +0 -1
  302. package/dist/src/runner/mission-check-policy.js +0 -31
  303. package/dist/src/runner/mission-check-policy.js.map +0 -1
  304. package/dist/src/runner/mission-coordinator-lock.d.ts.map +0 -1
  305. package/dist/src/runner/mission-coordinator-lock.js.map +0 -1
  306. package/dist/src/runner/mission-deployment.d.ts +0 -21
  307. package/dist/src/runner/mission-deployment.d.ts.map +0 -1
  308. package/dist/src/runner/mission-deployment.js +0 -108
  309. package/dist/src/runner/mission-deployment.js.map +0 -1
  310. package/dist/src/runner/mission-evaluation.d.ts +0 -61
  311. package/dist/src/runner/mission-evaluation.d.ts.map +0 -1
  312. package/dist/src/runner/mission-evaluation.js +0 -183
  313. package/dist/src/runner/mission-evaluation.js.map +0 -1
  314. package/dist/src/runner/mission-executor-probe.d.ts +0 -10
  315. package/dist/src/runner/mission-executor-probe.d.ts.map +0 -1
  316. package/dist/src/runner/mission-executor-probe.js +0 -180
  317. package/dist/src/runner/mission-executor-probe.js.map +0 -1
  318. package/dist/src/runner/mission-git-contracts.d.ts +0 -75
  319. package/dist/src/runner/mission-git-contracts.d.ts.map +0 -1
  320. package/dist/src/runner/mission-git-contracts.js +0 -201
  321. package/dist/src/runner/mission-git-contracts.js.map +0 -1
  322. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +0 -13
  323. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +0 -1
  324. package/dist/src/runner/mission-git-runtime-owner-ref.js +0 -111
  325. package/dist/src/runner/mission-git-runtime-owner-ref.js.map +0 -1
  326. package/dist/src/runner/mission-git-transaction.d.ts +0 -97
  327. package/dist/src/runner/mission-git-transaction.d.ts.map +0 -1
  328. package/dist/src/runner/mission-git-transaction.js +0 -1009
  329. package/dist/src/runner/mission-git-transaction.js.map +0 -1
  330. package/dist/src/runner/mission-identifiers.d.ts +0 -31
  331. package/dist/src/runner/mission-identifiers.d.ts.map +0 -1
  332. package/dist/src/runner/mission-identifiers.js +0 -75
  333. package/dist/src/runner/mission-identifiers.js.map +0 -1
  334. package/dist/src/runner/mission-input-snapshot.d.ts +0 -21
  335. package/dist/src/runner/mission-input-snapshot.d.ts.map +0 -1
  336. package/dist/src/runner/mission-input-snapshot.js +0 -63
  337. package/dist/src/runner/mission-input-snapshot.js.map +0 -1
  338. package/dist/src/runner/mission-ownership.d.ts +0 -38
  339. package/dist/src/runner/mission-ownership.d.ts.map +0 -1
  340. package/dist/src/runner/mission-ownership.js +0 -88
  341. package/dist/src/runner/mission-ownership.js.map +0 -1
  342. package/dist/src/runner/mission-patch-audit.d.ts +0 -21
  343. package/dist/src/runner/mission-patch-audit.d.ts.map +0 -1
  344. package/dist/src/runner/mission-patch-audit.js +0 -186
  345. package/dist/src/runner/mission-patch-audit.js.map +0 -1
  346. package/dist/src/runner/mission-path-language.d.ts +0 -6
  347. package/dist/src/runner/mission-path-language.d.ts.map +0 -1
  348. package/dist/src/runner/mission-path-language.js +0 -106
  349. package/dist/src/runner/mission-path-language.js.map +0 -1
  350. package/dist/src/runner/mission-permit-authority.d.ts +0 -26
  351. package/dist/src/runner/mission-permit-authority.d.ts.map +0 -1
  352. package/dist/src/runner/mission-permit-authority.js +0 -145
  353. package/dist/src/runner/mission-permit-authority.js.map +0 -1
  354. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +0 -87
  355. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +0 -1
  356. package/dist/src/runner/mission-plan-parent-coordinator.js +0 -441
  357. package/dist/src/runner/mission-plan-parent-coordinator.js.map +0 -1
  358. package/dist/src/runner/mission-plan-parent.d.ts +0 -156
  359. package/dist/src/runner/mission-plan-parent.d.ts.map +0 -1
  360. package/dist/src/runner/mission-plan-parent.js +0 -589
  361. package/dist/src/runner/mission-plan-parent.js.map +0 -1
  362. package/dist/src/runner/mission-process-executor.d.ts +0 -25
  363. package/dist/src/runner/mission-process-executor.d.ts.map +0 -1
  364. package/dist/src/runner/mission-process-executor.js +0 -182
  365. package/dist/src/runner/mission-process-executor.js.map +0 -1
  366. package/dist/src/runner/mission-publication-git.d.ts +0 -21
  367. package/dist/src/runner/mission-publication-git.d.ts.map +0 -1
  368. package/dist/src/runner/mission-publication-git.js +0 -61
  369. package/dist/src/runner/mission-publication-git.js.map +0 -1
  370. package/dist/src/runner/mission-publication.d.ts +0 -192
  371. package/dist/src/runner/mission-publication.d.ts.map +0 -1
  372. package/dist/src/runner/mission-publication.js +0 -1001
  373. package/dist/src/runner/mission-publication.js.map +0 -1
  374. package/dist/src/runner/mission-quarantine-patch-executor.d.ts +0 -29
  375. package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +0 -1
  376. package/dist/src/runner/mission-quarantine-patch-executor.js +0 -121
  377. package/dist/src/runner/mission-quarantine-patch-executor.js.map +0 -1
  378. package/dist/src/runner/mission-repository-executor.d.ts +0 -54
  379. package/dist/src/runner/mission-repository-executor.d.ts.map +0 -1
  380. package/dist/src/runner/mission-repository-executor.js +0 -192
  381. package/dist/src/runner/mission-repository-executor.js.map +0 -1
  382. package/dist/src/runner/mission-repository-observer.d.ts +0 -8
  383. package/dist/src/runner/mission-repository-observer.d.ts.map +0 -1
  384. package/dist/src/runner/mission-repository-observer.js +0 -24
  385. package/dist/src/runner/mission-repository-observer.js.map +0 -1
  386. package/dist/src/runner/mission-reservations.d.ts +0 -15
  387. package/dist/src/runner/mission-reservations.d.ts.map +0 -1
  388. package/dist/src/runner/mission-reservations.js +0 -116
  389. package/dist/src/runner/mission-reservations.js.map +0 -1
  390. package/dist/src/runner/mission-resolution-loop.d.ts +0 -172
  391. package/dist/src/runner/mission-resolution-loop.d.ts.map +0 -1
  392. package/dist/src/runner/mission-resolution-loop.js +0 -318
  393. package/dist/src/runner/mission-resolution-loop.js.map +0 -1
  394. package/dist/src/runner/mission-runtime-owner.d.ts +0 -36
  395. package/dist/src/runner/mission-runtime-owner.d.ts.map +0 -1
  396. package/dist/src/runner/mission-runtime-owner.js +0 -174
  397. package/dist/src/runner/mission-runtime-owner.js.map +0 -1
  398. package/dist/src/runner/mission-safe-executor.d.ts +0 -96
  399. package/dist/src/runner/mission-safe-executor.d.ts.map +0 -1
  400. package/dist/src/runner/mission-safe-executor.js +0 -288
  401. package/dist/src/runner/mission-safe-executor.js.map +0 -1
  402. package/dist/src/runner/mission-sandbox.d.ts +0 -16
  403. package/dist/src/runner/mission-sandbox.d.ts.map +0 -1
  404. package/dist/src/runner/mission-sandbox.js +0 -91
  405. package/dist/src/runner/mission-sandbox.js.map +0 -1
  406. package/dist/src/runner/mission-scheduler.d.ts +0 -57
  407. package/dist/src/runner/mission-scheduler.d.ts.map +0 -1
  408. package/dist/src/runner/mission-scheduler.js +0 -205
  409. package/dist/src/runner/mission-scheduler.js.map +0 -1
  410. package/dist/src/runner/mission-scope-expansion.d.ts +0 -47
  411. package/dist/src/runner/mission-scope-expansion.d.ts.map +0 -1
  412. package/dist/src/runner/mission-scope-expansion.js +0 -147
  413. package/dist/src/runner/mission-scope-expansion.js.map +0 -1
  414. package/dist/src/runner/mission-state-machine.d.ts +0 -118
  415. package/dist/src/runner/mission-state-machine.d.ts.map +0 -1
  416. package/dist/src/runner/mission-state-machine.js +0 -316
  417. package/dist/src/runner/mission-state-machine.js.map +0 -1
  418. package/dist/src/runner/mission-state-store.d.ts +0 -70
  419. package/dist/src/runner/mission-state-store.d.ts.map +0 -1
  420. package/dist/src/runner/mission-state-store.js +0 -916
  421. package/dist/src/runner/mission-state-store.js.map +0 -1
  422. package/dist/src/runner/mobile-device-lease.d.ts +0 -11
  423. package/dist/src/runner/mobile-device-lease.d.ts.map +0 -1
  424. package/dist/src/runner/mobile-device-lease.js +0 -121
  425. package/dist/src/runner/mobile-device-lease.js.map +0 -1
  426. package/dist/src/runner/mobile-visual-proof-command.d.ts +0 -17
  427. package/dist/src/runner/mobile-visual-proof-command.d.ts.map +0 -1
  428. package/dist/src/runner/mobile-visual-proof-command.js +0 -168
  429. package/dist/src/runner/mobile-visual-proof-command.js.map +0 -1
  430. package/dist/src/runner/plan-auto-command.d.ts +0 -35
  431. package/dist/src/runner/plan-auto-command.d.ts.map +0 -1
  432. package/dist/src/runner/plan-auto-command.js +0 -918
  433. package/dist/src/runner/plan-auto-command.js.map +0 -1
  434. package/dist/src/runner/plan-auto-recovery.d.ts +0 -83
  435. package/dist/src/runner/plan-auto-recovery.d.ts.map +0 -1
  436. package/dist/src/runner/plan-auto-recovery.js +0 -303
  437. package/dist/src/runner/plan-auto-recovery.js.map +0 -1
  438. package/dist/src/runner/prompt.d.ts +0 -68
  439. package/dist/src/runner/prompt.d.ts.map +0 -1
  440. package/dist/src/runner/prompt.js +0 -202
  441. package/dist/src/runner/prompt.js.map +0 -1
  442. package/dist/src/runner/proof-routing.d.ts +0 -73
  443. package/dist/src/runner/proof-routing.d.ts.map +0 -1
  444. package/dist/src/runner/proof-routing.js +0 -182
  445. package/dist/src/runner/proof-routing.js.map +0 -1
  446. package/dist/src/runner/proof-strategy.d.ts +0 -21
  447. package/dist/src/runner/proof-strategy.d.ts.map +0 -1
  448. package/dist/src/runner/proof-strategy.js +0 -26
  449. package/dist/src/runner/proof-strategy.js.map +0 -1
  450. package/dist/src/runner/recovery.d.ts +0 -25
  451. package/dist/src/runner/recovery.d.ts.map +0 -1
  452. package/dist/src/runner/recovery.js +0 -89
  453. package/dist/src/runner/recovery.js.map +0 -1
  454. package/dist/src/runner/review-gate-policy.d.ts +0 -13
  455. package/dist/src/runner/review-gate-policy.d.ts.map +0 -1
  456. package/dist/src/runner/review-gate-policy.js +0 -241
  457. package/dist/src/runner/review-gate-policy.js.map +0 -1
  458. package/dist/src/runner/review-gates.d.ts +0 -28
  459. package/dist/src/runner/review-gates.d.ts.map +0 -1
  460. package/dist/src/runner/review-gates.js +0 -328
  461. package/dist/src/runner/review-gates.js.map +0 -1
  462. package/dist/src/runner/rework-policy.d.ts +0 -48
  463. package/dist/src/runner/rework-policy.d.ts.map +0 -1
  464. package/dist/src/runner/rework-policy.js +0 -150
  465. package/dist/src/runner/rework-policy.js.map +0 -1
  466. package/dist/src/runner/run-log.d.ts +0 -18
  467. package/dist/src/runner/run-log.d.ts.map +0 -1
  468. package/dist/src/runner/run-log.js +0 -53
  469. package/dist/src/runner/run-log.js.map +0 -1
  470. package/dist/src/runner/runner-handoff-decision.d.ts +0 -48
  471. package/dist/src/runner/runner-handoff-decision.d.ts.map +0 -1
  472. package/dist/src/runner/runner-handoff-decision.js +0 -93
  473. package/dist/src/runner/runner-handoff-decision.js.map +0 -1
  474. package/dist/src/runner/safety.d.ts +0 -14
  475. package/dist/src/runner/safety.d.ts.map +0 -1
  476. package/dist/src/runner/safety.js +0 -31
  477. package/dist/src/runner/safety.js.map +0 -1
  478. package/dist/src/runner/scope-isolation-policy.d.ts +0 -17
  479. package/dist/src/runner/scope-isolation-policy.d.ts.map +0 -1
  480. package/dist/src/runner/scope-isolation-policy.js +0 -82
  481. package/dist/src/runner/scope-isolation-policy.js.map +0 -1
  482. package/dist/src/runner/scoped-auto-command.d.ts +0 -90
  483. package/dist/src/runner/scoped-auto-command.d.ts.map +0 -1
  484. package/dist/src/runner/scoped-auto-command.js +0 -561
  485. package/dist/src/runner/scoped-auto-command.js.map +0 -1
  486. package/dist/src/runner/scoped-recovery.d.ts +0 -78
  487. package/dist/src/runner/scoped-recovery.d.ts.map +0 -1
  488. package/dist/src/runner/scoped-recovery.js +0 -601
  489. package/dist/src/runner/scoped-recovery.js.map +0 -1
  490. package/dist/src/runner/session-home.d.ts +0 -8
  491. package/dist/src/runner/session-home.d.ts.map +0 -1
  492. package/dist/src/runner/session-home.js +0 -18
  493. package/dist/src/runner/session-home.js.map +0 -1
  494. package/dist/src/runner/status-command.d.ts +0 -38
  495. package/dist/src/runner/status-command.d.ts.map +0 -1
  496. package/dist/src/runner/status-command.js +0 -97
  497. package/dist/src/runner/status-command.js.map +0 -1
  498. package/dist/src/runner/target-activity-fence.d.ts.map +0 -1
  499. package/dist/src/runner/target-activity-fence.js.map +0 -1
  500. package/dist/src/runner/terminal-outcome.d.ts +0 -58
  501. package/dist/src/runner/terminal-outcome.d.ts.map +0 -1
  502. package/dist/src/runner/terminal-outcome.js +0 -73
  503. package/dist/src/runner/terminal-outcome.js.map +0 -1
  504. package/dist/src/runner/visual-proof-runner.d.ts +0 -27
  505. package/dist/src/runner/visual-proof-runner.d.ts.map +0 -1
  506. package/dist/src/runner/visual-proof-runner.js +0 -379
  507. package/dist/src/runner/visual-proof-runner.js.map +0 -1
  508. package/dist/src/runner/worktree-cleanup.d.ts +0 -27
  509. package/dist/src/runner/worktree-cleanup.d.ts.map +0 -1
  510. package/dist/src/runner/worktree-cleanup.js +0 -63
  511. package/dist/src/runner/worktree-cleanup.js.map +0 -1
  512. package/dist/src/setup/codex-command-resolver.d.ts +0 -10
  513. package/dist/src/setup/codex-command-resolver.d.ts.map +0 -1
  514. package/dist/src/setup/codex-command-resolver.js +0 -91
  515. package/dist/src/setup/codex-command-resolver.js.map +0 -1
  516. package/dist/src/setup/github-label-adapter.d.ts +0 -13
  517. package/dist/src/setup/github-label-adapter.d.ts.map +0 -1
  518. package/dist/src/setup/github-label-adapter.js +0 -28
  519. package/dist/src/setup/github-label-adapter.js.map +0 -1
  520. package/dist/src/setup/labels.d.ts +0 -27
  521. package/dist/src/setup/labels.d.ts.map +0 -1
  522. package/dist/src/setup/labels.js +0 -42
  523. package/dist/src/setup/labels.js.map +0 -1
  524. package/dist/src/setup/project-config.d.ts +0 -24
  525. package/dist/src/setup/project-config.d.ts.map +0 -1
  526. package/dist/src/setup/project-config.js +0 -678
  527. package/dist/src/setup/project-config.js.map +0 -1
  528. package/dist/src/setup/prompt-sync.d.ts +0 -14
  529. package/dist/src/setup/prompt-sync.d.ts.map +0 -1
  530. package/dist/src/setup/prompt-sync.js +0 -228
  531. package/dist/src/setup/prompt-sync.js.map +0 -1
  532. package/dist/src/setup/setup-command.d.ts +0 -29
  533. package/dist/src/setup/setup-command.d.ts.map +0 -1
  534. package/dist/src/setup/setup-command.js +0 -304
  535. package/dist/src/setup/setup-command.js.map +0 -1
  536. package/dist/src/setup/skill-runtime-v2-preparation.d.ts +0 -56
  537. package/dist/src/setup/skill-runtime-v2-preparation.d.ts.map +0 -1
  538. package/dist/src/setup/skill-runtime-v2-preparation.js +0 -304
  539. package/dist/src/setup/skill-runtime-v2-preparation.js.map +0 -1
  540. package/dist/src/setup/workflows.d.ts +0 -10
  541. package/dist/src/setup/workflows.d.ts.map +0 -1
  542. package/dist/src/setup/workflows.js +0 -41
  543. package/dist/src/setup/workflows.js.map +0 -1
  544. package/prompts/setup-skill.md +0 -12
  545. package/prompts/workflows/acceptance-proof.md +0 -29
  546. package/prompts/workflows/breakdown-review.md +0 -48
  547. package/prompts/workflows/issue-breakdown.md +0 -155
  548. package/prompts/workflows/issue-tree-orchestration.md +0 -163
  549. package/prompts/workflows/prd.md +0 -80
  550. package/prompts/workflows/scoped-implementation.md +0 -129
  551. package/prompts/workflows/triage.md +0 -149
  552. /package/dist/src/{process → v2/adapters}/command.d.ts +0 -0
  553. /package/dist/src/{process → v2/adapters}/command.js +0 -0
  554. /package/dist/src/{fs → v2/adapters}/durable-atomic-file.d.ts +0 -0
  555. /package/dist/src/{fs → v2/adapters}/durable-atomic-file.js +0 -0
  556. /package/dist/src/{github → v2/adapters}/gh-cli.d.ts +0 -0
  557. /package/dist/src/{github → v2/adapters}/gh-cli.js +0 -0
  558. /package/dist/src/{github → v2/adapters}/gh-issue-adapter.d.ts +0 -0
  559. /package/dist/src/{github → v2/adapters}/gh-issue-adapter.js +0 -0
  560. /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.d.ts +0 -0
  561. /package/dist/src/{github → v2/adapters}/gh-pull-request-adapter.js +0 -0
  562. /package/dist/src/{github → v2/adapters}/issues.d.ts +0 -0
  563. /package/dist/src/{github → v2/adapters}/issues.js +0 -0
  564. /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.d.ts +0 -0
  565. /package/dist/src/{runner → v2/adapters}/mission-coordinator-lock.js +0 -0
  566. /package/dist/src/{path-policy.d.ts → v2/adapters/path-policy.d.ts} +0 -0
  567. /package/dist/src/{path-policy.js → v2/adapters/path-policy.js} +0 -0
  568. /package/dist/src/{github → v2/adapters}/pull-requests.d.ts +0 -0
  569. /package/dist/src/{github → v2/adapters}/pull-requests.js +0 -0
  570. /package/dist/src/{runner → v2/adapters}/target-activity-fence.d.ts +0 -0
@@ -1,77 +0,0 @@
1
- import { type MissionProcessHandle, type MissionRecord } from './mission-state-machine.js';
2
- import { type MissionApplyReceipt } from './mission-git-contracts.js';
3
- import type { MissionStateStore } from './mission-state-store.js';
4
- export type MissionProcessTerminationResult = {
5
- kind: 'terminated';
6
- } | {
7
- kind: 'already-exited';
8
- } | {
9
- kind: 'transient-failure';
10
- reason: string;
11
- };
12
- export interface MissionCancellationDependencies {
13
- terminate(process: MissionProcessHandle): Promise<MissionProcessTerminationResult>;
14
- reconcileApply(mission: MissionRecord): Promise<MissionCancellationApplyReconciliation>;
15
- nextEligibleAt(reason: string): string;
16
- }
17
- export type MissionCancellationApplyReconciliation = {
18
- kind: 'old-identity';
19
- } | {
20
- kind: 'new-identity';
21
- receipt: MissionApplyReceipt;
22
- } | {
23
- kind: 'transient-failure';
24
- reason: string;
25
- } | {
26
- kind: 'safety-stop';
27
- reason: string;
28
- };
29
- export type MissionObservedProcessIdentity = 'matching' | 'missing' | 'different';
30
- export interface MissionProcessGroupTerminatorOptions {
31
- hostId: string;
32
- bootNonce: string;
33
- graceMs: number;
34
- }
35
- export interface MissionProcessGroupTerminatorDependencies {
36
- observe(process: MissionProcessHandle): Promise<MissionObservedProcessIdentity>;
37
- signalProcessGroup(pid: number, signal: NodeJS.Signals): void;
38
- wait(milliseconds: number): Promise<void>;
39
- }
40
- export declare class MissionProcessGroupTerminator {
41
- private readonly options;
42
- private readonly dependencies;
43
- constructor(options: MissionProcessGroupTerminatorOptions, dependencies: MissionProcessGroupTerminatorDependencies);
44
- terminate(process: MissionProcessHandle): Promise<MissionProcessTerminationResult>;
45
- }
46
- export type MissionCancellationOutcome = {
47
- kind: 'cancelled';
48
- missionId: string;
49
- state: 'cancelled';
50
- } | {
51
- kind: 'safety-stop';
52
- missionId: string;
53
- state: 'safety-stop';
54
- reason: string;
55
- } | {
56
- kind: 'resumable';
57
- missionId: string;
58
- state: 'cancelling';
59
- reason: string;
60
- nextEligibleAt: string;
61
- };
62
- export declare class MissionCancellationCoordinator {
63
- private readonly store;
64
- private readonly dependencies;
65
- constructor(store: MissionStateStore, dependencies: MissionCancellationDependencies);
66
- cancel(input: {
67
- expectedGeneration: number;
68
- missionId: string;
69
- expectedRevision: number;
70
- requestedAt: string;
71
- requestedBy: string;
72
- }): Promise<MissionCancellationOutcome>;
73
- private completeCancellation;
74
- private deferCancellation;
75
- private persistSafetyStop;
76
- }
77
- //# sourceMappingURL=mission-cancellation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mission-cancellation.d.ts","sourceRoot":"","sources":["../../../src/runner/mission-cancellation.ts"],"names":[],"mappings":"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"}
@@ -1,180 +0,0 @@
1
- import { transitionMission, } from './mission-state-machine.js';
2
- import { assertMissionApplyReceipt, missionApplyPermitFingerprint, } from './mission-git-contracts.js';
3
- export class MissionProcessGroupTerminator {
4
- options;
5
- dependencies;
6
- constructor(options, dependencies) {
7
- this.options = options;
8
- this.dependencies = dependencies;
9
- requireText(options.hostId, 'terminator hostId');
10
- requireText(options.bootNonce, 'terminator bootNonce');
11
- if (!Number.isSafeInteger(options.graceMs) || options.graceMs < 0) {
12
- throw new Error('Mission cancellation terminator graceMs must be a non-negative integer.');
13
- }
14
- }
15
- async terminate(process) {
16
- if (process.hostId !== this.options.hostId) {
17
- return { kind: 'transient-failure', reason: 'process-owned-by-different-host' };
18
- }
19
- if (process.bootNonce !== this.options.bootNonce) {
20
- return { kind: 'already-exited' };
21
- }
22
- if (await this.dependencies.observe(process) !== 'matching') {
23
- return { kind: 'already-exited' };
24
- }
25
- this.dependencies.signalProcessGroup(process.pid, 'SIGTERM');
26
- await this.dependencies.wait(this.options.graceMs);
27
- if (await this.dependencies.observe(process) !== 'matching') {
28
- return { kind: 'terminated' };
29
- }
30
- this.dependencies.signalProcessGroup(process.pid, 'SIGKILL');
31
- await this.dependencies.wait(this.options.graceMs);
32
- if (await this.dependencies.observe(process) !== 'matching') {
33
- return { kind: 'terminated' };
34
- }
35
- return { kind: 'transient-failure', reason: 'process-group-still-live-after-sigkill' };
36
- }
37
- }
38
- export class MissionCancellationCoordinator {
39
- store;
40
- dependencies;
41
- constructor(store, dependencies) {
42
- this.store = store;
43
- this.dependencies = dependencies;
44
- }
45
- async cancel(input) {
46
- assertTimestamp(input.requestedAt, 'requestedAt');
47
- requireText(input.requestedBy, 'requestedBy');
48
- const cancelling = await this.store.mutate(input.expectedGeneration, (draft) => {
49
- const current = draft.missions[input.missionId];
50
- if (!current)
51
- throw new Error(`Mission cancellation cannot find ${input.missionId}.`);
52
- if (current.revision !== input.expectedRevision) {
53
- throw new Error(`Mission cancellation revision conflict for ${input.missionId}.`);
54
- }
55
- const next = current.state === 'cancelling'
56
- ? { ...current, revision: current.revision + 1 }
57
- : transitionMission(current, { type: 'cancel-requested' });
58
- draft.missions[input.missionId] = {
59
- ...next,
60
- cancellation: {
61
- requestedAt: current.cancellation?.requestedAt ?? input.requestedAt,
62
- requestedBy: current.cancellation?.requestedBy ?? input.requestedBy,
63
- },
64
- };
65
- });
66
- const mission = cancelling.missions[input.missionId];
67
- for (const process of mission.claim?.processes ?? []) {
68
- const termination = await this.dependencies.terminate(process);
69
- if (termination.kind === 'transient-failure') {
70
- return this.deferCancellation(cancelling.generation, input.missionId, mission.revision, termination.reason);
71
- }
72
- }
73
- let reconciledReceipt;
74
- if (mission.applyIntent || mission.applyReceipt) {
75
- const reconciliation = await this.dependencies.reconcileApply(structuredClone(mission));
76
- if (reconciliation.kind === 'transient-failure') {
77
- return this.deferCancellation(cancelling.generation, input.missionId, mission.revision, reconciliation.reason);
78
- }
79
- if (reconciliation.kind === 'safety-stop') {
80
- return this.persistSafetyStop(cancelling.generation, input.missionId, mission.revision, reconciliation.reason);
81
- }
82
- if (reconciliation.kind === 'old-identity') {
83
- if (mission.applyReceipt) {
84
- return this.persistSafetyStop(cancelling.generation, input.missionId, mission.revision, 'receipt-ref-mismatch');
85
- }
86
- }
87
- else if (!validReconciledReceipt(mission, reconciliation.receipt)) {
88
- return this.persistSafetyStop(cancelling.generation, input.missionId, mission.revision, 'apply-reconciliation-receipt-mismatch');
89
- }
90
- else {
91
- reconciledReceipt = reconciliation.receipt;
92
- }
93
- }
94
- const completed = await this.completeCancellation(cancelling.generation, input.missionId, mission.revision, reconciledReceipt);
95
- if (completed.missions[input.missionId]?.state !== 'cancelled') {
96
- throw new Error('Mission cancellation did not reach cancelled state.');
97
- }
98
- return { kind: 'cancelled', missionId: input.missionId, state: 'cancelled' };
99
- }
100
- completeCancellation(expectedGeneration, missionId, expectedRevision, receipt) {
101
- return this.store.mutate(expectedGeneration, (draft) => {
102
- const current = draft.missions[missionId];
103
- if (!current || current.revision !== expectedRevision || current.state !== 'cancelling') {
104
- throw new Error(`Mission cancellation reconciliation conflict for ${missionId}.`);
105
- }
106
- if (receipt && !current.applyHistory?.some((entry) => entry.permitFingerprint === receipt.permitFingerprint)) {
107
- current.applyHistory = [...(current.applyHistory ?? []), structuredClone(receipt)];
108
- }
109
- draft.missions[missionId] = transitionMission(current, {
110
- type: 'cancellation-reconciled',
111
- });
112
- delete draft.nextEligibleAt[missionId];
113
- delete draft.reservations[missionId];
114
- });
115
- }
116
- async deferCancellation(expectedGeneration, missionId, expectedRevision, reason) {
117
- const nextEligibleAt = this.dependencies.nextEligibleAt(reason);
118
- assertTimestamp(nextEligibleAt, 'nextEligibleAt');
119
- await this.store.mutate(expectedGeneration, (draft) => {
120
- const current = draft.missions[missionId];
121
- if (!current || current.revision !== expectedRevision || current.state !== 'cancelling'
122
- || !current.claim) {
123
- throw new Error(`Mission cancellation retry cannot fence ${missionId}.`);
124
- }
125
- current.claim.leaseUntil = nextEligibleAt;
126
- current.revision += 1;
127
- draft.nextEligibleAt[missionId] = nextEligibleAt;
128
- });
129
- return {
130
- kind: 'resumable',
131
- missionId,
132
- state: 'cancelling',
133
- reason,
134
- nextEligibleAt,
135
- };
136
- }
137
- async persistSafetyStop(expectedGeneration, missionId, expectedRevision, reason) {
138
- requireText(reason, 'safety-stop reason');
139
- await this.store.mutate(expectedGeneration, (draft) => {
140
- const current = draft.missions[missionId];
141
- if (!current || current.revision !== expectedRevision || current.state !== 'cancelling') {
142
- throw new Error(`Mission cancellation safety-stop cannot fence ${missionId}.`);
143
- }
144
- draft.missions[missionId] = transitionMission(current, {
145
- type: 'apply-reconciled-third-identity',
146
- });
147
- delete draft.nextEligibleAt[missionId];
148
- delete draft.reservations[missionId];
149
- });
150
- return { kind: 'safety-stop', missionId, state: 'safety-stop', reason };
151
- }
152
- }
153
- function validReconciledReceipt(mission, receipt) {
154
- try {
155
- assertMissionApplyReceipt(receipt);
156
- }
157
- catch {
158
- return false;
159
- }
160
- const permit = mission.applyPermit;
161
- const intent = mission.applyIntent;
162
- return Boolean(permit && intent
163
- && intent.permitFingerprint === missionApplyPermitFingerprint(permit)
164
- && receipt.permitFingerprint === intent.permitFingerprint
165
- && receipt.targetRef === permit.targetRef
166
- && receipt.oldCommitSha === permit.expectedOldCommit
167
- && receipt.commitSha === permit.expectedNewCommit
168
- && receipt.treeSha === permit.expectedNewTree);
169
- }
170
- function assertTimestamp(value, field) {
171
- const milliseconds = Date.parse(value);
172
- if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {
173
- throw new Error(`Mission cancellation ${field} must be an exact UTC ISO timestamp.`);
174
- }
175
- }
176
- function requireText(value, field) {
177
- if (value.trim().length === 0)
178
- throw new Error(`Mission cancellation ${field} must be non-empty.`);
179
- }
180
- //# sourceMappingURL=mission-cancellation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mission-cancellation.js","sourceRoot":"","sources":["../../../src/runner/mission-cancellation.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- export interface CanonicalFileIdentity {
2
- repositoryPath: string;
3
- canonicalPath: string;
4
- dev: number;
5
- ino: number;
6
- mode: number;
7
- size: number;
8
- mtimeMs: number;
9
- sha256: string;
10
- }
11
- export interface CanonicalFileInspectionDependencies {
12
- beforeRead?: () => Promise<void>;
13
- }
14
- export declare function readCanonicalText(input: {
15
- root: string;
16
- path: string;
17
- grantedPaths: string[];
18
- deniedPaths: string[];
19
- maxBytes: number;
20
- }): Promise<{
21
- text: string;
22
- identity: CanonicalFileIdentity;
23
- }>;
24
- export declare function inspectCanonicalFile(input: {
25
- root: string;
26
- path: string;
27
- deniedPaths: string[];
28
- maxBytes?: number;
29
- missing?: 'allow' | 'reject';
30
- }, dependencies?: CanonicalFileInspectionDependencies): Promise<{
31
- identity: CanonicalFileIdentity;
32
- content: Buffer;
33
- } | undefined>;
34
- //# sourceMappingURL=mission-canonical-path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mission-canonical-path.d.ts","sourceRoot":"","sources":["../../../src/runner/mission-canonical-path.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mCAAmC;IAClD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,qBAAqB,CAAA;CAAE,CAAC,CAiB7D;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC9B,EAAE,YAAY,GAAE,mCAAwC,GAAG,OAAO,CAAC;IAClE,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,SAAS,CAAC,CAkEb"}
@@ -1,121 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { constants } from 'node:fs';
3
- import { lstat, open, realpath, stat } from 'node:fs/promises';
4
- import { isAbsolute, join, relative } from 'node:path';
5
- import { globMatches, normalizePath } from '../path-policy.js';
6
- import { missionPathDenied } from './mission-path-language.js';
7
- export async function readCanonicalText(input) {
8
- const normalized = assertRepositoryRelativePath(input.path);
9
- if (!input.grantedPaths.some((pattern) => globMatches(pattern, normalized))) {
10
- throw new Error(`Mission observation path is outside granted scope: ${input.path}.`);
11
- }
12
- const inspected = await inspectCanonicalFile({
13
- root: input.root,
14
- path: input.path,
15
- deniedPaths: input.deniedPaths,
16
- maxBytes: input.maxBytes,
17
- missing: 'reject',
18
- });
19
- if (!inspected)
20
- throw new Error(`Mission observation file is missing: ${input.path}.`);
21
- if (inspected.content.includes(0)) {
22
- throw new Error(`Mission observation refuses binary file: ${input.path}.`);
23
- }
24
- return { text: inspected.content.toString('utf8'), identity: inspected.identity };
25
- }
26
- export async function inspectCanonicalFile(input, dependencies = {}) {
27
- const normalized = assertRepositoryRelativePath(input.path);
28
- if (missionPathDenied(normalized, input.deniedPaths)) {
29
- throw new Error(`Mission canonical path is denied: ${normalized}.`);
30
- }
31
- const canonicalRoot = await realpath(input.root);
32
- let current = canonicalRoot;
33
- for (const segment of normalized.split('/')) {
34
- current = join(current, segment);
35
- let info;
36
- try {
37
- info = await lstat(current);
38
- }
39
- catch (error) {
40
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT'
41
- && input.missing !== 'reject')
42
- return undefined;
43
- throw error;
44
- }
45
- if (info.isSymbolicLink()) {
46
- throw new Error(`Mission canonical path refuses symbolic link: ${normalized}.`);
47
- }
48
- }
49
- const canonicalTarget = await realpath(current);
50
- const canonicalRelative = normalizePath(relative(canonicalRoot, canonicalTarget));
51
- if (canonicalRelative.startsWith('../') || canonicalRelative === '..' || isAbsolute(canonicalRelative)) {
52
- throw new Error(`Mission canonical path escapes repository root: ${normalized}.`);
53
- }
54
- if (missionPathDenied(canonicalRelative, input.deniedPaths)) {
55
- throw new Error(`Mission canonical path is denied: ${canonicalRelative}.`);
56
- }
57
- const expected = await stat(canonicalTarget, { bigint: true });
58
- assertRegularSingleLink(expected, normalized);
59
- const handle = await open(current, constants.O_RDONLY | constants.O_NOFOLLOW);
60
- try {
61
- const opened = await handle.stat({ bigint: true });
62
- assertSameIdentity(expected, opened, normalized);
63
- assertStableMetadata(expected, opened, normalized);
64
- assertRegularSingleLink(opened, normalized);
65
- const maxBytes = input.maxBytes ?? 64 * 1024 * 1024;
66
- if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0 || opened.size > BigInt(maxBytes)) {
67
- throw new Error(`Mission canonical path size limit exceeded: ${opened.size} > ${maxBytes}.`);
68
- }
69
- await dependencies.beforeRead?.();
70
- const content = await handle.readFile();
71
- const after = await handle.stat({ bigint: true });
72
- assertSameIdentity(opened, after, normalized);
73
- assertStableMetadata(opened, after, normalized);
74
- assertRegularSingleLink(after, normalized);
75
- if (after.size !== BigInt(content.byteLength)) {
76
- throw new Error(`Mission canonical path changed length during read: ${normalized}.`);
77
- }
78
- return {
79
- content,
80
- identity: {
81
- repositoryPath: canonicalRelative,
82
- canonicalPath: canonicalTarget,
83
- dev: Number(after.dev),
84
- ino: Number(after.ino),
85
- mode: Number(after.mode),
86
- size: Number(after.size),
87
- mtimeMs: Number(after.mtimeNs) / 1_000_000,
88
- sha256: createHash('sha256').update(content).digest('hex'),
89
- },
90
- };
91
- }
92
- finally {
93
- await handle.close();
94
- }
95
- }
96
- function assertRepositoryRelativePath(path) {
97
- const normalized = normalizePath(path);
98
- if (isAbsolute(path) || normalized.length === 0
99
- || normalized.split('/').some((segment) => segment.length === 0 || segment === '..')) {
100
- throw new Error('Mission canonical path must be repository-relative without empty segments.');
101
- }
102
- return normalized;
103
- }
104
- function assertRegularSingleLink(info, path) {
105
- if (!info.isFile() || (typeof info.nlink === 'bigint' ? info.nlink !== 1n : info.nlink !== 1)) {
106
- throw new Error(`Mission canonical path refuses non-regular or hard-linked file: ${path}.`);
107
- }
108
- }
109
- function assertSameIdentity(expected, actual, path) {
110
- if (expected.dev !== actual.dev || expected.ino !== actual.ino) {
111
- throw new Error(`Mission canonical path changed during authorization: ${path}.`);
112
- }
113
- }
114
- function assertStableMetadata(expected, actual, path) {
115
- if (expected.mode !== actual.mode || expected.nlink !== actual.nlink
116
- || expected.size !== actual.size || expected.mtimeNs !== actual.mtimeNs
117
- || expected.ctimeNs !== actual.ctimeNs) {
118
- throw new Error(`Mission canonical path changed during read: ${path}.`);
119
- }
120
- }
121
- //# sourceMappingURL=mission-canonical-path.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mission-canonical-path.js","sourceRoot":"","sources":["../../../src/runner/mission-canonical-path.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- export type MissionSandboxBackend = 'macos-sandbox' | 'linux-bwrap';
2
- export type MissionCapability = 'git-status' | 'read-file' | 'validate-patch';
3
- export declare const missionGitStatusArgv: readonly ["/usr/bin/git", "-c", "core.fsmonitor=false", "-c", "core.untrackedCache=false", "-c", "core.hooksPath=/dev/null", "status", "--porcelain=v1", "--untracked-files=all"];
4
- export interface MissionCapabilityProbeInput {
5
- platform: NodeJS.Platform;
6
- commands: ReadonlySet<string>;
7
- }
8
- export interface MissionCapabilityProbeResult {
9
- prerequisitesAvailable: boolean;
10
- backend?: MissionSandboxBackend;
11
- missing: string[];
12
- }
13
- export interface MissionCapabilityRequest {
14
- missionId: string;
15
- actionKey: string;
16
- capability: MissionCapability;
17
- argv: string[];
18
- requestedPaths: string[];
19
- grantedPaths: string[];
20
- inputSnapshot: string;
21
- fencingEpoch: number;
22
- expiresAt: string;
23
- readPath?: string;
24
- maxReadBytes?: number;
25
- }
26
- export interface MissionCapabilityPermit extends MissionCapabilityRequest {
27
- network: 'deny';
28
- workspace: 'read-only';
29
- }
30
- export declare function missionCapabilityPermitFingerprint(permit: MissionCapabilityPermit): string;
31
- export declare function discoverMissionExecutorPrerequisites(input: MissionCapabilityProbeInput): MissionCapabilityProbeResult;
32
- export declare function authorizeMissionCapability(request: MissionCapabilityRequest): MissionCapabilityPermit;
33
- export declare function scrubMissionExecutorEnv(source: NodeJS.ProcessEnv, allowedKeys: string[]): Record<string, string>;
34
- //# sourceMappingURL=mission-capability-kernel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mission-capability-kernel.d.ts","sourceRoot":"","sources":["../../../src/runner/mission-capability-kernel.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,aAAa,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE9E,eAAO,MAAM,oBAAoB,mLAMvB,CAAC;AAEX,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,4BAA4B;IAC3C,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAkB1F;AAOD,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,2BAA2B,GACjC,4BAA4B,CA4B9B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAoDzB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxB"}
@@ -1,158 +0,0 @@
1
- import { basename } from 'node:path';
2
- import { createHash } from 'node:crypto';
3
- import { uniqueSortedPaths } from '../path-policy.js';
4
- import { assertMissionPathPattern, scopePatternContainedBy } from './mission-path-language.js';
5
- export const missionGitStatusArgv = [
6
- '/usr/bin/git',
7
- '-c', 'core.fsmonitor=false',
8
- '-c', 'core.untrackedCache=false',
9
- '-c', 'core.hooksPath=/dev/null',
10
- 'status', '--porcelain=v1', '--untracked-files=all',
11
- ];
12
- export function missionCapabilityPermitFingerprint(permit) {
13
- const canonical = JSON.stringify([
14
- 'mission-capability-permit-v1',
15
- permit.missionId,
16
- permit.actionKey,
17
- permit.capability,
18
- permit.argv,
19
- permit.requestedPaths,
20
- permit.grantedPaths,
21
- permit.inputSnapshot,
22
- permit.fencingEpoch,
23
- permit.expiresAt,
24
- permit.readPath ?? null,
25
- permit.maxReadBytes ?? null,
26
- permit.network,
27
- permit.workspace,
28
- ]);
29
- return `sha256:${createHash('sha256').update(canonical).digest('hex')}`;
30
- }
31
- const secretPath = /(^|\/)(?:\.env(?:\..*)?|\.git(?:\/|$)|id_(?:rsa|ed25519)(?:\.pub)?$)/iu;
32
- const safeEnvironmentKeys = new Set([
33
- 'CI', 'LANG', 'LC_ALL', 'LC_CTYPE', 'NO_COLOR', 'PATH', 'TERM', 'TZ',
34
- ]);
35
- export function discoverMissionExecutorPrerequisites(input) {
36
- if (input.platform === 'darwin') {
37
- const missing = [
38
- input.commands.has('/usr/bin/sandbox-exec') ? undefined : 'sandbox-exec',
39
- input.commands.has('/usr/bin/git') ? undefined : 'git',
40
- ].filter((value) => value !== undefined);
41
- return {
42
- prerequisitesAvailable: missing.length === 0,
43
- backend: missing.length === 0 ? 'macos-sandbox' : undefined,
44
- missing,
45
- };
46
- }
47
- if (input.platform === 'linux') {
48
- const hasBwrap = [...input.commands].some((command) => basename(command) === 'bwrap');
49
- const hasGit = [...input.commands].some((command) => basename(command) === 'git');
50
- const missing = [hasBwrap ? undefined : 'bwrap', hasGit ? undefined : 'git']
51
- .filter((value) => value !== undefined);
52
- return {
53
- prerequisitesAvailable: missing.length === 0,
54
- backend: missing.length === 0 ? 'linux-bwrap' : undefined,
55
- missing,
56
- };
57
- }
58
- return {
59
- prerequisitesAvailable: false,
60
- backend: undefined,
61
- missing: [`unsupported-platform:${input.platform}`],
62
- };
63
- }
64
- export function authorizeMissionCapability(request) {
65
- requireText(request.missionId, 'missionId');
66
- requireText(request.actionKey, 'actionKey');
67
- requireText(request.inputSnapshot, 'inputSnapshot');
68
- if (!Number.isSafeInteger(request.fencingEpoch) || request.fencingEpoch <= 0) {
69
- throw new Error('Mission capability fencingEpoch must be a positive integer.');
70
- }
71
- if (!Number.isFinite(Date.parse(request.expiresAt))) {
72
- throw new Error('Mission capability expiresAt must be an ISO timestamp.');
73
- }
74
- assertAllowedArgv(request.capability, request.argv);
75
- const grantedPaths = normalizeScope(request.grantedPaths, 'granted');
76
- const requestedPaths = normalizeScope(request.requestedPaths, 'requested');
77
- if (request.capability === 'read-file') {
78
- if (typeof request.readPath !== 'string' || request.readPath.includes('*')
79
- || requestedPaths.length !== 1 || requestedPaths[0] !== request.readPath
80
- || !Number.isSafeInteger(request.maxReadBytes) || request.maxReadBytes <= 0
81
- || request.maxReadBytes > 1024 * 1024) {
82
- throw new Error('Mission read-file requires one concrete readPath and maxReadBytes up to 1048576.');
83
- }
84
- }
85
- else if (request.readPath !== undefined || request.maxReadBytes !== undefined) {
86
- throw new Error(`Mission capability ${request.capability} forbids read-file inputs.`);
87
- }
88
- if (request.capability === 'git-status'
89
- && (requestedPaths.length !== 1 || requestedPaths[0] !== '**')) {
90
- throw new Error('Mission capability git-status requires explicit whole-repository scope.');
91
- }
92
- for (const path of requestedPaths) {
93
- if (secretPath.test(path)) {
94
- throw new Error(`Mission capability requested secret path: ${path}.`);
95
- }
96
- if (!grantedPaths.some((grant) => scopePatternContainedBy(path, grant))) {
97
- throw new Error(`Mission capability path is outside granted scope: ${path}.`);
98
- }
99
- }
100
- return {
101
- missionId: request.missionId,
102
- actionKey: request.actionKey,
103
- capability: request.capability,
104
- argv: [...request.argv],
105
- requestedPaths,
106
- grantedPaths,
107
- inputSnapshot: request.inputSnapshot,
108
- fencingEpoch: request.fencingEpoch,
109
- expiresAt: request.expiresAt,
110
- ...(request.capability === 'read-file' ? {
111
- readPath: request.readPath,
112
- maxReadBytes: request.maxReadBytes,
113
- } : {}),
114
- network: 'deny',
115
- workspace: 'read-only',
116
- };
117
- }
118
- export function scrubMissionExecutorEnv(source, allowedKeys) {
119
- const result = {};
120
- for (const key of [...new Set(allowedKeys)].sort()) {
121
- if (!safeEnvironmentKeys.has(key)) {
122
- continue;
123
- }
124
- const value = source[key];
125
- if (value !== undefined) {
126
- result[key] = value;
127
- }
128
- }
129
- return result;
130
- }
131
- function assertAllowedArgv(capability, argv) {
132
- const expected = {
133
- 'git-status': [[]],
134
- 'read-file': [[]],
135
- 'validate-patch': [[]],
136
- };
137
- const normalized = argv.map((value, index) => index === 0 ? basename(value) : value);
138
- if (!expected[capability].some((candidate) => arraysEqual(candidate, normalized))) {
139
- throw new Error(`Mission capability ${capability} requires allowlisted argv.`);
140
- }
141
- }
142
- function normalizeScope(paths, kind) {
143
- const normalized = uniqueSortedPaths(paths);
144
- if (normalized.length === 0) {
145
- throw new Error(`Mission capability ${kind} scope must contain repository-relative globs.`);
146
- }
147
- normalized.forEach((path) => assertMissionPathPattern(path, `Mission capability ${kind} scope`));
148
- return normalized;
149
- }
150
- function arraysEqual(left, right) {
151
- return left.length === right.length && left.every((value, index) => value === right[index]);
152
- }
153
- function requireText(value, field) {
154
- if (value.trim().length === 0) {
155
- throw new Error(`Mission capability ${field} must be non-empty.`);
156
- }
157
- }
158
- //# sourceMappingURL=mission-capability-kernel.js.map