@oisincoveney/pipeline 3.24.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +14 -2
  2. package/defaults/pipeline.yaml +23 -5
  3. package/defaults/profiles.yaml +104 -21
  4. package/dist/argo-graph.js +90 -88
  5. package/dist/argo-submit.d.ts +110 -138
  6. package/dist/argo-submit.js +363 -378
  7. package/dist/argo-workflow.d.ts +156 -177
  8. package/dist/argo-workflow.js +96 -138
  9. package/dist/backlog.js +5 -4
  10. package/dist/bench/eval-report.js +21 -12
  11. package/dist/claude-settings-config.js +23 -31
  12. package/dist/claude-user-config.js +6 -16
  13. package/dist/cli/bootstrap-commands.js +3 -3
  14. package/dist/cli/doctor.d.ts +1 -1
  15. package/dist/cli/doctor.js +176 -171
  16. package/dist/cli/factory-commands.js +13 -13
  17. package/dist/cli/format.js +92 -86
  18. package/dist/cli/loop-commands.js +21 -21
  19. package/dist/cli/mcp-gateway-commands.js +12 -12
  20. package/dist/cli/plan-commands.js +85 -116
  21. package/dist/cli/program.d.ts +3 -3
  22. package/dist/cli/program.js +41 -43
  23. package/dist/cli/run-command.d.ts +1 -1
  24. package/dist/cli/run-command.js +25 -25
  25. package/dist/cli/run-commands.js +31 -29
  26. package/dist/cli/run-resolver.d.ts +1 -1
  27. package/dist/cli/run-resolver.js +30 -32
  28. package/dist/cli/run-service.d.ts +2 -3
  29. package/dist/cli/run-service.js +229 -239
  30. package/dist/cli/submit-options.js +85 -83
  31. package/dist/cluster-doctor.js +147 -175
  32. package/dist/codex-config.js +24 -30
  33. package/dist/commands/bench-command.js +9 -7
  34. package/dist/commands/coordinator-command.js +35 -0
  35. package/dist/commands/pipeline-command.js +13 -7
  36. package/dist/commands/runner-command-command.js +39 -24
  37. package/dist/commands/runner-node-command.js +31 -0
  38. package/dist/commands/ticket/complete.js +29 -33
  39. package/dist/commands/ticket/create.js +84 -82
  40. package/dist/commands/ticket/graph-check.js +11 -11
  41. package/dist/commands/ticket/next.js +36 -36
  42. package/dist/commands/ticket/sequence.js +11 -12
  43. package/dist/commands/ticket/shared.d.ts +5 -2
  44. package/dist/commands/ticket/shared.js +63 -66
  45. package/dist/commands/ticket/start.js +58 -67
  46. package/dist/commands/ticket-command.js +2 -2
  47. package/dist/config/defaults.d.ts +139 -140
  48. package/dist/config/defaults.js +81 -80
  49. package/dist/config/lint.js +52 -64
  50. package/dist/config/load.d.ts +4 -5
  51. package/dist/config/load.js +64 -74
  52. package/dist/config/schema/catalog.d.ts +2 -1
  53. package/dist/config/schema/catalog.js +3 -2
  54. package/dist/config/schema/mcp.js +46 -52
  55. package/dist/config/schemas.d.ts +382 -528
  56. package/dist/config/schemas.js +400 -398
  57. package/dist/config/validate.d.ts +1 -2
  58. package/dist/config/validate.js +236 -201
  59. package/dist/config.d.ts +2 -2
  60. package/dist/context/repo-map.js +105 -119
  61. package/dist/coordinator/composition.js +169 -0
  62. package/dist/coordinator/config.js +71 -0
  63. package/dist/coordinator/run-owner.js +64 -0
  64. package/dist/coordinator/wave-advance.js +148 -0
  65. package/dist/coordinator/wave-scheduler.js +50 -0
  66. package/dist/credentials/broker.d.ts +6 -8
  67. package/dist/credentials/broker.js +17 -16
  68. package/dist/credentials/codex-config.js +15 -19
  69. package/dist/credentials/file-targets.js +9 -15
  70. package/dist/credentials/local-codex-auth-sync.js +55 -58
  71. package/dist/credentials/opencode-config.js +28 -32
  72. package/dist/credentials/runner.js +13 -13
  73. package/dist/effect-sync-errors.js +28 -0
  74. package/dist/factory/create-experiment.js +285 -121
  75. package/dist/factory/exec.js +10 -12
  76. package/dist/factory/git-credentials.js +4 -4
  77. package/dist/factory/stamp-answers.js +10 -11
  78. package/dist/factory/template-update.js +65 -44
  79. package/dist/factory-lane.d.ts +26 -40
  80. package/dist/factory-lane.js +26 -25
  81. package/dist/gates.js +3 -3
  82. package/dist/git-remote-url.js +17 -19
  83. package/dist/hooks.d.ts +26 -26
  84. package/dist/hooks.js +20 -22
  85. package/dist/index.d.ts +4 -3
  86. package/dist/index.js +27 -36
  87. package/dist/install-commands/claude-code.js +100 -92
  88. package/dist/install-commands/host-selection.js +3 -6
  89. package/dist/install-commands/opencode.js +264 -259
  90. package/dist/install-commands/planner.js +163 -181
  91. package/dist/install-commands/result-format.js +1 -3
  92. package/dist/install-commands/shared.js +25 -42
  93. package/dist/install-commands/writer.js +22 -25
  94. package/dist/install-commands.js +8 -8
  95. package/dist/jscpd-output.js +29 -0
  96. package/dist/json-config-merge.js +14 -20
  97. package/dist/json-line-values.js +17 -6
  98. package/dist/loop/argo-poll.d.ts +0 -1
  99. package/dist/loop/argo-poll.js +15 -95
  100. package/dist/loop/backlog-records.js +1 -3
  101. package/dist/loop/controller-deps.js +150 -161
  102. package/dist/loop/controller.js +164 -186
  103. package/dist/loop/gh-checks.js +62 -61
  104. package/dist/loop/gh-runner.js +22 -25
  105. package/dist/loop/loop-command.js +66 -58
  106. package/dist/loop/loop-controller-entrypoint.js +29 -30
  107. package/dist/loop/merge.js +36 -40
  108. package/dist/loop/run-terminal-poll.js +69 -0
  109. package/dist/mcp/gateway-config.js +25 -29
  110. package/dist/mcp/gateway-doctor.js +77 -119
  111. package/dist/mcp/gateway-reconcile.js +17 -22
  112. package/dist/mcp/gateway-runtime.js +1 -3
  113. package/dist/mcp/host-config.js +37 -40
  114. package/dist/mcp/host-renderers.js +10 -18
  115. package/dist/mcp/repo-local-backends.js +51 -54
  116. package/dist/mcp/toolhive-vmcp.js +39 -39
  117. package/dist/model-resolver.js +29 -33
  118. package/dist/moka-global-config.d.ts +78 -55
  119. package/dist/moka-global-config.js +93 -92
  120. package/dist/moka-submit.d.ts +2179 -866
  121. package/dist/moka-submit.js +97 -99
  122. package/dist/opencode-project-config.js +34 -40
  123. package/dist/package-assets.js +1 -3
  124. package/dist/path-refs.js +2 -2
  125. package/dist/pipeline-init.js +25 -25
  126. package/dist/pipeline-runtime.d.ts +15 -14
  127. package/dist/pipeline-runtime.js +51 -50
  128. package/dist/planned-node.js +6 -3
  129. package/dist/planning/compile.d.ts +5 -5
  130. package/dist/planning/compile.js +140 -139
  131. package/dist/planning/dependency-refs.js +5 -5
  132. package/dist/planning/generate.d.ts +1296 -1296
  133. package/dist/planning/generate.js +307 -314
  134. package/dist/planning/graph.d.ts +0 -1
  135. package/dist/planning/graph.js +131 -149
  136. package/dist/remote/argo/model.d.ts +104 -122
  137. package/dist/remote/argo/model.js +205 -197
  138. package/dist/remote/argo/policy.js +39 -47
  139. package/dist/remote/argo/storage.js +81 -85
  140. package/dist/remote/jobs/execution-identity.js +70 -0
  141. package/dist/remote/jobs/job-outcome.js +108 -0
  142. package/dist/remote/jobs/manifest.js +96 -0
  143. package/dist/remote/jobs/model.d.ts +158 -0
  144. package/dist/remote/jobs/model.js +162 -0
  145. package/dist/remote/jobs/node-bootstrap.js +213 -0
  146. package/dist/remote/jobs/policy.js +123 -0
  147. package/dist/remote/jobs/reconcile.js +100 -0
  148. package/dist/remote/jobs/run-spec-client.js +64 -0
  149. package/dist/remote/jobs/run-spec-path.js +31 -0
  150. package/dist/remote/jobs/run-spec-server.d.ts +34 -0
  151. package/dist/remote/jobs/run-spec-server.js +116 -0
  152. package/dist/remote/jobs/submit.d.ts +23 -0
  153. package/dist/remote/jobs/submit.js +116 -0
  154. package/dist/remote/jobs/watch.js +59 -0
  155. package/dist/remote/submit/argo-submission.d.ts +3 -1
  156. package/dist/remote/submit/argo-submission.js +53 -58
  157. package/dist/remote/submit/compilation.d.ts +2 -0
  158. package/dist/remote/submit/compilation.js +46 -49
  159. package/dist/remote/submit/event-boundary.js +62 -76
  160. package/dist/remote/submit/hook-events.d.ts +6 -0
  161. package/dist/remote/submit/io.d.ts +7 -1
  162. package/dist/remote/submit/io.js +40 -43
  163. package/dist/remote/submit/jobs-submission.d.ts +59 -0
  164. package/dist/remote/submit/jobs-submission.js +97 -0
  165. package/dist/remote/submit/jobs-submit-result.d.ts +25 -0
  166. package/dist/remote/submit/jobs-submit-result.js +34 -0
  167. package/dist/remote/submit/options.d.ts +49 -0
  168. package/dist/remote/submit/options.js +27 -0
  169. package/dist/remote/submit/service.d.ts +40 -1
  170. package/dist/remote/submit/service.js +67 -49
  171. package/dist/run-control/command-context.js +6 -8
  172. package/dist/run-control/commands.js +10 -10
  173. package/dist/run-control/contracts.d.ts +52 -101
  174. package/dist/run-control/contracts.js +83 -69
  175. package/dist/run-control/detach.js +66 -72
  176. package/dist/run-control/execution-store.js +0 -0
  177. package/dist/run-control/file-errors.js +1 -3
  178. package/dist/run-control/logical-segment.js +3 -3
  179. package/dist/run-control/next-node.js +67 -78
  180. package/dist/run-control/postgres/postgres-run-control-store.js +196 -225
  181. package/dist/run-control/resume-command.js +34 -41
  182. package/dist/run-control/run-artifacts-command.js +84 -105
  183. package/dist/run-control/run-command-domain.js +7 -11
  184. package/dist/run-control/run-control-store.js +9 -9
  185. package/dist/run-control/run-query-command.js +73 -100
  186. package/dist/run-control/run-record.js +5 -3
  187. package/dist/run-control/run-state-lock.js +5 -5
  188. package/dist/run-control/runtime-event-projection.js +38 -50
  189. package/dist/run-control/runtime-reporter.js +86 -102
  190. package/dist/run-control/stop-command.js +42 -53
  191. package/dist/run-control/store-fs-effects.js +3 -1
  192. package/dist/run-control/store-manifest.js +38 -13
  193. package/dist/run-control/store-paths.js +3 -3
  194. package/dist/run-control/store.js +1 -1
  195. package/dist/run-control/submit-result.js +21 -21
  196. package/dist/run-control/supervisor.js +78 -68
  197. package/dist/run-control/workspace.js +2 -2
  198. package/dist/run-state/git-refs.js +258 -307
  199. package/dist/runner/opencode-excludes.js +4 -4
  200. package/dist/runner/subprocess-result.js +28 -37
  201. package/dist/runner/subprocess.js +41 -41
  202. package/dist/runner/timeouts.js +14 -13
  203. package/dist/runner-command/dynamic-command.js +46 -39
  204. package/dist/runner-command/environment-commands.js +91 -0
  205. package/dist/runner-command/finalize.js +174 -153
  206. package/dist/runner-command/lifecycle-context.js +115 -130
  207. package/dist/runner-command/lifecycle.js +78 -72
  208. package/dist/runner-command/pre-schedule.js +203 -223
  209. package/dist/runner-command/run.js +450 -448
  210. package/dist/runner-command/schedule-source-options.js +8 -10
  211. package/dist/runner-command/select-ready-wave.js +39 -30
  212. package/dist/runner-command/task-descriptor.js +11 -17
  213. package/dist/runner-command-contract.d.ts +147 -157
  214. package/dist/runner-command-contract.js +403 -411
  215. package/dist/runner-event-schema.d.ts +364 -505
  216. package/dist/runner-event-schema.js +187 -175
  217. package/dist/runner-event-sink.js +37 -43
  218. package/dist/runner-output.js +6 -6
  219. package/dist/runner.d.ts +57 -37
  220. package/dist/runner.js +176 -127
  221. package/dist/runtime/actor-ids.d.ts +1 -0
  222. package/dist/runtime/actor-ids.js +2 -2
  223. package/dist/runtime/agent-node/agent-node.js +99 -110
  224. package/dist/runtime/agent-node/handoff-finalization.js +23 -24
  225. package/dist/runtime/agent-node/model-selection.js +19 -22
  226. package/dist/runtime/agent-node/output-finalization.js +174 -204
  227. package/dist/runtime/agent-node/prompt-rendering.js +208 -251
  228. package/dist/runtime/agent-node/session-execution.js +43 -39
  229. package/dist/runtime/builtins/builtins.js +218 -284
  230. package/dist/runtime/changed-files/changed-files.js +29 -34
  231. package/dist/runtime/command-executor/command-executor.js +31 -23
  232. package/dist/runtime/config-error.js +1 -3
  233. package/dist/runtime/context/context.js +35 -37
  234. package/dist/runtime/contracts/contracts.d.ts +3 -0
  235. package/dist/runtime/contracts/index.d.ts +1 -1
  236. package/dist/runtime/detached-race.js +11 -14
  237. package/dist/runtime/drain-merge/drain-merge.js +139 -164
  238. package/dist/runtime/durable-store/acquisition.js +5 -3
  239. package/dist/runtime/durable-store/durable-store.d.ts +3 -1
  240. package/dist/runtime/durable-store/postgres/client.js +29 -0
  241. package/dist/runtime/durable-store/postgres/migrate-substrate.js +34 -29
  242. package/dist/runtime/durable-store/postgres/postgres-store.js +18 -20
  243. package/dist/runtime/events/events.js +273 -331
  244. package/dist/runtime/events/index.js +2 -2
  245. package/dist/runtime/execution-envelope.js +44 -0
  246. package/dist/runtime/gates/adjudication/llm-judge.js +21 -24
  247. package/dist/runtime/gates/adjudication/structured-claim.js +15 -16
  248. package/dist/runtime/gates/adjudicator/adjudicator.js +27 -27
  249. package/dist/runtime/gates/adjudicator/index.js +2 -2
  250. package/dist/runtime/gates/contract.js +5 -9
  251. package/dist/runtime/gates/gates.js +9 -8
  252. package/dist/runtime/gates/kinds/acceptance/acceptance.js +68 -71
  253. package/dist/runtime/gates/kinds/acceptance/index.js +2 -2
  254. package/dist/runtime/gates/kinds/artifact/artifact.js +4 -4
  255. package/dist/runtime/gates/kinds/artifact/index.js +2 -2
  256. package/dist/runtime/gates/kinds/builtin/builtin.js +4 -4
  257. package/dist/runtime/gates/kinds/builtin/index.js +2 -2
  258. package/dist/runtime/gates/kinds/changed-files/changed-files.js +31 -35
  259. package/dist/runtime/gates/kinds/changed-files/index.js +2 -2
  260. package/dist/runtime/gates/kinds/command/command.js +3 -3
  261. package/dist/runtime/gates/kinds/command/index.js +2 -2
  262. package/dist/runtime/gates/kinds/json-schema/index.js +2 -2
  263. package/dist/runtime/gates/kinds/json-schema/json-schema.js +7 -6
  264. package/dist/runtime/gates/kinds/verdict/index.js +2 -2
  265. package/dist/runtime/gates/kinds/verdict/verdict.js +3 -3
  266. package/dist/runtime/gates/orchestrator.js +72 -86
  267. package/dist/runtime/gates/registry.js +1 -3
  268. package/dist/runtime/handoff.d.ts +2 -1
  269. package/dist/runtime/handoff.js +43 -46
  270. package/dist/runtime/hooks/command-hook.js +57 -71
  271. package/dist/runtime/hooks/context.js +21 -25
  272. package/dist/runtime/hooks/events.js +84 -100
  273. package/dist/runtime/hooks/execution.js +6 -12
  274. package/dist/runtime/hooks/hooks.js +34 -23
  275. package/dist/runtime/hooks/invocation.js +23 -29
  276. package/dist/runtime/hooks/module-hook.js +36 -35
  277. package/dist/runtime/hooks/policy.js +32 -29
  278. package/dist/runtime/hooks/results.js +56 -66
  279. package/dist/runtime/journal-acquisition.d.ts +3 -2
  280. package/dist/runtime/journal-acquisition.js +14 -14
  281. package/dist/runtime/json-validation/json-validation.js +51 -72
  282. package/dist/runtime/launch-plan-args.js +39 -0
  283. package/dist/runtime/local-scheduler.js +46 -48
  284. package/dist/runtime/node-execution.js +376 -445
  285. package/dist/runtime/node-protocol/node-protocol.js +36 -79
  286. package/dist/runtime/node-state-store.d.ts +4 -1
  287. package/dist/runtime/node-state-store.js +13 -57
  288. package/dist/runtime/node-state-tracker.js +46 -54
  289. package/dist/runtime/open-pull-request/open-pull-request.js +201 -187
  290. package/dist/runtime/opencode-adapter.js +23 -24
  291. package/dist/runtime/opencode-agent-name.js +6 -6
  292. package/dist/runtime/opencode-runtime.js +115 -93
  293. package/dist/runtime/opencode-server.js +39 -53
  294. package/dist/runtime/opencode-session-executor.js +312 -344
  295. package/dist/runtime/parallel-node/parallel-node.js +123 -134
  296. package/dist/runtime/parallel-worktrees/parallel-worktrees.js +90 -73
  297. package/dist/runtime/protected-paths/protected-paths.js +70 -71
  298. package/dist/runtime/remediation/remediation.js +202 -231
  299. package/dist/runtime/retry.js +8 -10
  300. package/dist/runtime/run-journal.d.ts +2 -0
  301. package/dist/runtime/run-journal.js +7 -7
  302. package/dist/runtime/runtime-results.js +54 -69
  303. package/dist/runtime/scheduled-dependencies.d.ts +2 -1
  304. package/dist/runtime/scheduled-dependencies.js +61 -75
  305. package/dist/runtime/scheduler.js +179 -202
  306. package/dist/runtime/services/agent-node-runtime-service.js +3 -3
  307. package/dist/runtime/services/backlog-service.d.ts +1 -2
  308. package/dist/runtime/services/backlog-service.js +8 -14
  309. package/dist/runtime/services/command-executor-service.js +1 -1
  310. package/dist/runtime/services/config-io-service.js +24 -21
  311. package/dist/runtime/services/drain-merge-git-service.js +1 -1
  312. package/dist/runtime/services/file-system-service.js +9 -7
  313. package/dist/runtime/services/git-porcelain-service.js +6 -6
  314. package/dist/runtime/services/kubernetes-argo-service.d.ts +10 -3
  315. package/dist/runtime/services/kubernetes-argo-service.js +90 -84
  316. package/dist/runtime/services/kubernetes-jobs-read-service.js +115 -0
  317. package/dist/runtime/services/kubernetes-jobs-service.d.ts +37 -0
  318. package/dist/runtime/services/kubernetes-jobs-service.js +45 -0
  319. package/dist/runtime/services/kubernetes-jobs-watch-service.js +61 -0
  320. package/dist/runtime/services/kubernetes-lease-service.js +21 -0
  321. package/dist/runtime/services/mcp-gateway-service.js +143 -94
  322. package/dist/runtime/services/open-pull-request-git-service.js +1 -3
  323. package/dist/runtime/services/opencode-runtime-server-service.js +10 -12
  324. package/dist/runtime/services/opencode-sdk-service.js +7 -7
  325. package/dist/runtime/services/repo-io-service.js +10 -12
  326. package/dist/runtime/services/run-journal-file-service.js +2 -2
  327. package/dist/runtime/services/runner-command-io-service.js +48 -52
  328. package/dist/runtime/services/runner-event-sink-http-service.js +32 -39
  329. package/dist/runtime/step/step-node.js +15 -15
  330. package/dist/runtime/workflow-execution.js +56 -57
  331. package/dist/runtime/workflow-lifecycle.js +82 -101
  332. package/dist/runtime/yeet-event-record.js +104 -0
  333. package/dist/runtime/yeet-executor.js +184 -0
  334. package/dist/safe-json.js +16 -16
  335. package/dist/schedule/backlog-context.js +122 -116
  336. package/dist/schedule/baseline.js +249 -255
  337. package/dist/schedule/passes/coverage.js +63 -68
  338. package/dist/schedule/passes/drain-merge.js +34 -40
  339. package/dist/schedule/passes/ids.js +15 -17
  340. package/dist/schedule/passes/models.js +40 -37
  341. package/dist/schedule/passes/open-pull-request.js +16 -20
  342. package/dist/schedule/passes/references.js +18 -22
  343. package/dist/schedule/prompts.js +135 -141
  344. package/dist/schedule/scheduling-roles.js +8 -14
  345. package/dist/schema-boundary.d.ts +4 -0
  346. package/dist/schema-boundary.js +145 -0
  347. package/dist/serialized-write-queue.js +2 -2
  348. package/dist/standard-output-schemas.js +61 -59
  349. package/dist/strings.js +12 -12
  350. package/dist/task-ref.js +5 -5
  351. package/dist/tickets/apply-ticket-plan.js +52 -61
  352. package/dist/tickets/backlog-task-store.d.ts +15 -23
  353. package/dist/tickets/backlog-task-store.js +82 -94
  354. package/dist/tickets/completion/complete-ticket.js +53 -59
  355. package/dist/tickets/ticket-graph-dto.d.ts +24 -48
  356. package/dist/tickets/ticket-graph-dto.js +40 -40
  357. package/dist/tickets/ticket-graph.d.ts +7 -2
  358. package/dist/tickets/ticket-graph.js +36 -50
  359. package/dist/tickets/ticket-plan-command-args.js +6 -10
  360. package/dist/tickets/ticket-plan-render.js +10 -16
  361. package/dist/tickets/ticket-plan.d.ts +32 -41
  362. package/dist/tickets/ticket-plan.js +97 -77
  363. package/dist/tickets/ticket-selection.d.ts +3 -1
  364. package/dist/tickets/ticket-selection.js +37 -52
  365. package/dist/tickets/ticket-task-index.js +13 -17
  366. package/dist/tickets/validation-error-format.js +3 -10
  367. package/dist/token-estimator.js +12 -7
  368. package/dist/unknown-fields.js +21 -0
  369. package/dist/workflow-submit-contract.d.ts +9 -10
  370. package/dist/workflow-submit-contract.js +10 -9
  371. package/docs/adr-moka-postgres-schema-isolation.md +48 -0
  372. package/docs/adr-opencode-first-goal-loop-runtime.md +11 -11
  373. package/docs/config-architecture.md +13 -13
  374. package/docs/mcp-host-isolation.md +1 -0
  375. package/docs/moka-orchestrator-design.md +3 -3
  376. package/docs/operator-guide.md +1 -1
  377. package/docs/pipeline-console-runner-contract.md +10 -6
  378. package/docs/runtime-actor-model.md +18 -18
  379. package/docs/runtime-test-subsystems.md +200 -0
  380. package/docs/slash-command-adapter-contract.md +3 -3
  381. package/package.json +49 -85
  382. package/dist/config/schema/reference-validation.js +0 -83
@@ -1,8 +1,10 @@
1
1
  import { loadPipelineConfig } from "../config/load.js";
2
2
  import "../config.js";
3
3
  import { registerBenchCommand } from "../commands/bench-command.js";
4
+ import { registerCoordinatorCommand } from "../commands/coordinator-command.js";
4
5
  import { registerConfiguredEntrypointCommands } from "../commands/pipeline-command.js";
5
6
  import { registerRunnerCommandCommand } from "../commands/runner-command-command.js";
7
+ import { registerRunnerNodeCommand } from "../commands/runner-node-command.js";
6
8
  import { registerTicketCommand } from "../commands/ticket-command.js";
7
9
  import { addMokaSubmitOptions, runMokaSubmitFromCli } from "./submit-options.js";
8
10
  import { registerRunControlCommands } from "../run-control/commands.js";
@@ -13,21 +15,16 @@ import { registerMcpGatewayCommands } from "./mcp-gateway-commands.js";
13
15
  import { registerPlanCommands } from "./plan-commands.js";
14
16
  import { execute } from "./run-service.js";
15
17
  import { printMokaSubmitResult, registerRunCommands } from "./run-commands.js";
16
- import { Effect } from "effect";
17
18
  import { readFileSync } from "node:fs";
19
+ import { Effect } from "effect";
18
20
  import { Command, Help } from "commander";
19
21
  //#region src/cli/program.ts
20
- function createCliProgram(options = {}) {
21
- const configuredPipeline = loadConfiguredEntrypoints(process.env.PIPELINE_TARGET_PATH ?? process.cwd());
22
- const program = createBaseProgram();
23
- registerApplicationCommands(program, options);
24
- registerEntrypointCommands(program, configuredPipeline);
25
- return program;
26
- }
27
- function createBaseProgram() {
28
- return new Command().name("moka").description("Submit work to Momokaya").version(readPackageVersion()).exitOverride();
29
- }
30
- function registerApplicationCommands(program, options) {
22
+ const registerSubmitCommand = (program) => {
23
+ addMokaSubmitOptions(program.command("submit").description("Submit work to Momokaya as an Argo Workflow.").argument("[input...]", "task description, or command argv with --command")).action(async (input, flags) => {
24
+ printMokaSubmitResult(await runMokaSubmitFromCli(input, flags));
25
+ });
26
+ };
27
+ const registerApplicationCommands = (program, options) => {
31
28
  const dispatchResolvedRunCommand = registerRunCommands(program, { runCommand: options.runCommand });
32
29
  registerRunControlCommands(program);
33
30
  registerPlanCommands(program);
@@ -37,49 +34,50 @@ function registerApplicationCommands(program, options) {
37
34
  registerLoopCommand(program);
38
35
  registerFactoryCommands(program);
39
36
  registerRunnerCommandCommand(program);
37
+ registerRunnerNodeCommand(program);
38
+ registerCoordinatorCommand(program);
40
39
  registerBenchCommand(program);
41
40
  registerTicketCommand(program, {
42
41
  ...options.ticketCommand,
43
42
  runCommand: options.ticketCommand?.runCommand ?? dispatchResolvedRunCommand
44
43
  });
45
- }
46
- function registerSubmitCommand(program) {
47
- addMokaSubmitOptions(program.command("submit").description("Submit work to Momokaya as an Argo Workflow.").argument("[input...]", "task description, or command argv with --command")).action(async (input, flags) => {
48
- printMokaSubmitResult(await runMokaSubmitFromCli(input, flags));
49
- });
50
- }
51
- function registerEntrypointCommands(program, configuredPipeline) {
52
- configureEntrypointHelp(program, registerConfiguredEntrypointCommands(program, configuredPipeline, runEntrypointCommand));
53
- }
54
- function configureEntrypointHelp(program, configuredEntrypointCommands) {
44
+ };
45
+ const configureEntrypointHelp = (program, configuredEntrypointCommands) => {
55
46
  if (configuredEntrypointCommands.size === 0) return;
56
47
  program.configureHelp({ subcommandTerm(command) {
57
48
  if (configuredEntrypointCommands.has(command.name())) return command.name();
58
49
  return Help.prototype.subcommandTerm.call(this, command);
59
50
  } });
60
- }
61
- function runEntrypointCommand(entrypoint, task) {
62
- return execute(task, { entrypoint });
63
- }
64
- function readPackageVersion() {
65
- const packageJson = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
51
+ };
52
+ const runEntrypointCommand = async (entrypoint, task) => {
53
+ await execute(task, { entrypoint });
54
+ };
55
+ const registerEntrypointCommands = (program, configuredPipeline) => {
56
+ const configuredEntrypointCommands = registerConfiguredEntrypointCommands(program, configuredPipeline, runEntrypointCommand);
57
+ configureEntrypointHelp(program, configuredEntrypointCommands);
58
+ };
59
+ const isPackageVersionRecord = (value) => typeof value === "object" && value !== null && "version" in value && typeof value.version === "string";
60
+ const readPackageVersion = () => {
61
+ const packageJson = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf-8"));
66
62
  if (!isPackageVersionRecord(packageJson)) throw new Error("Unable to read @oisincoveney/pipeline package version.");
67
63
  return packageJson.version;
68
- }
69
- function isPackageVersionRecord(value) {
70
- return typeof value === "object" && value !== null && "version" in value && typeof value.version === "string";
71
- }
72
- function loadConfiguredEntrypoints(cwd) {
73
- return loadPipelineConfig(cwd, { allowMissingLintFileReferences: true });
74
- }
75
- function runCliEffect(argv) {
76
- return Effect.tryPromise({
77
- catch: (error) => error,
78
- try: () => createCliProgram().parseAsync(argv, { from: "node" })
79
- }).pipe(Effect.asVoid);
80
- }
81
- async function runCli(argv) {
64
+ };
65
+ const createBaseProgram = () => new Command().name("moka").description("Submit work to Momokaya").version(readPackageVersion()).exitOverride();
66
+ const loadConfiguredEntrypoints = (cwd) => loadPipelineConfig(cwd, { allowMissingLintFileReferences: true });
67
+ const createCliProgram = (options = {}) => {
68
+ const cwd = process.env.PIPELINE_TARGET_PATH ?? process.cwd();
69
+ const configuredPipeline = loadConfiguredEntrypoints(cwd);
70
+ const program = createBaseProgram();
71
+ registerApplicationCommands(program, options);
72
+ registerEntrypointCommands(program, configuredPipeline);
73
+ return program;
74
+ };
75
+ const runCliEffect = (argv) => Effect.tryPromise({
76
+ catch: (error) => error,
77
+ try: async () => await createCliProgram().parseAsync(argv, { from: "node" })
78
+ }).pipe(Effect.asVoid);
79
+ const runCli = async (argv) => {
82
80
  await createCliProgram().parseAsync(argv, { from: "node" });
83
- }
81
+ };
84
82
  //#endregion
85
83
  export { createCliProgram, runCli, runCliEffect };
@@ -1,5 +1,5 @@
1
+ import "../run-control/contracts.js";
1
2
  import { RunResolution, RunResolverFlags } from "./run-resolver.js";
2
-
3
3
  //#region src/cli/run-command.d.ts
4
4
  interface RunCommandCall {
5
5
  readonly descriptionParts: string[];
@@ -1,12 +1,25 @@
1
1
  //#region src/cli/run-command.ts
2
- async function dispatchMokaRunCommand(call, dependencies) {
3
- if (dependencies.runCommand) {
4
- await dependencies.runCommand(call);
2
+ const localRunDispatchInput = (call, execution) => {
3
+ const { resolution, task } = call;
4
+ return {
5
+ execution,
6
+ runControl: {
7
+ effort: resolution.effort,
8
+ mode: resolution.mode === "read" ? "read-only" : "write",
9
+ target: resolution.target
10
+ },
11
+ task
12
+ };
13
+ };
14
+ const dispatchLocalMokaRunCommand = async (call, execution, dependencies) => {
15
+ const localDispatchInput = localRunDispatchInput(call, execution);
16
+ if (call.flags.detach === true) {
17
+ await dependencies.runDetached(localDispatchInput);
5
18
  return;
6
19
  }
7
- await dispatchResolvedMokaRunCommand(call, dependencies);
8
- }
9
- async function dispatchResolvedMokaRunCommand(call, dependencies) {
20
+ await dependencies.runLocal(localDispatchInput);
21
+ };
22
+ const dispatchResolvedMokaRunCommand = async (call, dependencies) => {
10
23
  const { resolution } = call;
11
24
  const { execution } = resolution;
12
25
  if (execution.kind === "remote-submit") {
@@ -17,26 +30,13 @@ async function dispatchResolvedMokaRunCommand(call, dependencies) {
17
30
  return;
18
31
  }
19
32
  await dispatchLocalMokaRunCommand(call, execution, dependencies);
20
- }
21
- async function dispatchLocalMokaRunCommand(call, execution, dependencies) {
22
- const localDispatchInput = localRunDispatchInput(call, execution);
23
- if (call.flags.detach) {
24
- await dependencies.runDetached(localDispatchInput);
33
+ };
34
+ const dispatchMokaRunCommand = async (call, dependencies) => {
35
+ if (dependencies.runCommand) {
36
+ await dependencies.runCommand(call);
25
37
  return;
26
38
  }
27
- await dependencies.runLocal(localDispatchInput);
28
- }
29
- function localRunDispatchInput(call, execution) {
30
- const { resolution, task } = call;
31
- return {
32
- execution,
33
- runControl: {
34
- effort: resolution.effort,
35
- mode: resolution.mode === "read" ? "read-only" : "write",
36
- target: resolution.target
37
- },
38
- task
39
- };
40
- }
39
+ await dispatchResolvedMokaRunCommand(call, dependencies);
40
+ };
41
41
  //#endregion
42
42
  export { dispatchMokaRunCommand };
@@ -4,17 +4,42 @@ import { dispatchMokaRunCommand } from "./run-command.js";
4
4
  import { execute, runDetachedResolvedTask, runLocalResolvedTask } from "./run-service.js";
5
5
  import { Option } from "commander";
6
6
  //#region src/cli/run-commands.ts
7
- function registerRunCommands(program, options = {}) {
7
+ const remoteSubmitFlags = (execution) => ({
8
+ command: execution.command,
9
+ quick: execution.mode === "quick",
10
+ schedule: execution.schedule
11
+ });
12
+ const printMokaSubmitResult = (result) => {
13
+ console.log(`Workflow submitted: ${result.workflowName} in ${result.namespace}`);
14
+ if (result.workflowUid !== void 0 && result.workflowUid !== "") console.log(`Workflow UID: ${result.workflowUid}`);
15
+ };
16
+ const createResolvedRunCommand = (options) => async (call) => {
17
+ await dispatchMokaRunCommand(call, {
18
+ runCommand: options.runCommand,
19
+ runDetached: async ({ execution, runControl, task: resolvedTask }) => {
20
+ await runDetachedResolvedTask(resolvedTask, execution, runControl);
21
+ },
22
+ runLocal: async ({ execution, runControl, task: resolvedTask }) => {
23
+ await runLocalResolvedTask(resolvedTask, execution, runControl);
24
+ },
25
+ runRemoteSubmit: async ({ descriptionParts: parts, execution }) => {
26
+ const result = await runMokaSubmitFromCli(parts, remoteSubmitFlags(execution));
27
+ printMokaSubmitResult(result);
28
+ }
29
+ });
30
+ };
31
+ const registerRunCommands = (program, options = {}) => {
8
32
  const dispatchResolvedRunCommand = createResolvedRunCommand(options);
9
33
  program.command("run").description("Primary command: run a workflow from package-owned @oisincoveney/pipeline config").argument("<description...>", "task description").option("--command", "treat input after -- as explicit argv for remote submission").option("--entrypoint <entrypoint>", "entrypoint id from package config").option("--detach", "start a supervised controller process in the background").addOption(new Option("--effort <effort>", "run effort").choices([...MOKA_RUN_EFFORTS]).default("normal")).option("--read-only", "run the read-only inspect workflow").option("--schedule <schedule>", "approved schedule YAML to execute").addOption(new Option("--target <target>", "execution target").choices([...MOKA_RUN_TARGETS]).default("local")).option("--workflow <workflow>", "workflow id from package config").action(async (descriptionParts, flags) => {
10
34
  const task = descriptionParts.join(" ");
35
+ const resolution = resolveMokaRun({
36
+ flags,
37
+ task
38
+ });
11
39
  await dispatchResolvedRunCommand({
12
40
  descriptionParts,
13
41
  flags,
14
- resolution: resolveMokaRun({
15
- flags,
16
- task
17
- }),
42
+ resolution,
18
43
  task
19
44
  });
20
45
  });
@@ -30,29 +55,6 @@ function registerRunCommands(program, options = {}) {
30
55
  });
31
56
  });
32
57
  return dispatchResolvedRunCommand;
33
- }
34
- function createResolvedRunCommand(options) {
35
- return async (call) => {
36
- await dispatchMokaRunCommand(call, {
37
- runCommand: options.runCommand,
38
- runDetached: ({ execution, runControl, task: resolvedTask }) => runDetachedResolvedTask(resolvedTask, execution, runControl),
39
- runLocal: ({ execution, runControl, task: resolvedTask }) => runLocalResolvedTask(resolvedTask, execution, runControl),
40
- runRemoteSubmit: async ({ descriptionParts: parts, execution }) => {
41
- printMokaSubmitResult(await runMokaSubmitFromCli(parts, remoteSubmitFlags(execution)));
42
- }
43
- });
44
- };
45
- }
46
- function remoteSubmitFlags(execution) {
47
- return {
48
- command: execution.command,
49
- quick: execution.mode === "quick",
50
- schedule: execution.schedule
51
- };
52
- }
53
- function printMokaSubmitResult(result) {
54
- console.log(`Workflow submitted: ${result.workflowName} in ${result.namespace}`);
55
- if (result.workflowUid) console.log(`Workflow UID: ${result.workflowUid}`);
56
- }
58
+ };
57
59
  //#endregion
58
60
  export { printMokaSubmitResult, registerRunCommands };
@@ -21,7 +21,7 @@ interface LocalRuntimeExecution {
21
21
  workflow?: string;
22
22
  }
23
23
  interface RemoteSubmitExecution {
24
- command?: boolean;
24
+ command: boolean;
25
25
  kind: "remote-submit";
26
26
  mode: "full" | "quick";
27
27
  schedule?: string;
@@ -5,45 +5,30 @@ const MOKA_RUN_EFFORTS = [
5
5
  "thorough"
6
6
  ];
7
7
  const MOKA_RUN_TARGETS = ["local", "remote"];
8
- function resolveMokaRun(input) {
9
- const flags = input.flags ?? {};
10
- const effort = flags.effort ?? "normal";
11
- const target = flags.target ?? "local";
12
- const mode = flags.readOnly ? "read" : "write";
13
- assertFlagTargetCompatibility(flags, target);
14
- return {
15
- effort,
16
- execution: target === "remote" ? resolveRemoteSubmit(flags, effort) : resolveLocalRuntime(flags, effort),
17
- mode,
18
- target
19
- };
20
- }
21
- function assertFlagTargetCompatibility(flags, target) {
22
- if (flags.command && target !== "remote") throw new Error("--command requires --target remote");
23
- if (flags.detach && target !== "local") throw new Error("--detach requires --target local");
24
- }
25
- function resolveRemoteSubmit(flags, effort) {
26
- return {
27
- command: flags.command,
28
- kind: "remote-submit",
29
- mode: effort === "quick" ? "quick" : "full",
30
- schedule: flags.schedule
31
- };
32
- }
8
+ const assertFlagTargetCompatibility = (flags, target) => {
9
+ if (flags.command === true && target !== "remote") throw new Error("--command requires --target remote");
10
+ if (flags.detach === true && target !== "local") throw new Error("--detach requires --target local");
11
+ };
12
+ const resolveRemoteSubmit = (flags, effort) => ({
13
+ command: flags.command === true,
14
+ kind: "remote-submit",
15
+ mode: effort === "quick" ? "quick" : "full",
16
+ schedule: flags.schedule
17
+ });
33
18
  const LOCAL_RUNTIME_RESOLVERS = [
34
- (flags) => flags.schedule ? {
19
+ (flags) => flags.schedule !== void 0 && flags.schedule !== "" ? {
35
20
  kind: "local-runtime",
36
21
  schedule: flags.schedule
37
22
  } : void 0,
38
- (flags) => flags.workflow ? {
23
+ (flags) => flags.workflow !== void 0 && flags.workflow !== "" ? {
39
24
  kind: "local-runtime",
40
25
  workflow: flags.workflow
41
26
  } : void 0,
42
- (flags) => flags.readOnly ? {
27
+ (flags) => flags.readOnly === true ? {
43
28
  kind: "local-runtime",
44
29
  workflow: "inspect"
45
30
  } : void 0,
46
- (flags) => flags.entrypoint ? {
31
+ (flags) => flags.entrypoint !== void 0 && flags.entrypoint !== "" ? {
47
32
  entrypoint: flags.entrypoint,
48
33
  kind: "local-runtime"
49
34
  } : void 0,
@@ -56,12 +41,25 @@ const LOCAL_RUNTIME_RESOLVERS = [
56
41
  kind: "local-runtime"
57
42
  } : void 0
58
43
  ];
59
- function resolveLocalRuntime(flags, effort) {
44
+ const resolveLocalRuntime = (flags, effort) => {
60
45
  for (const resolve of LOCAL_RUNTIME_RESOLVERS) {
61
46
  const resolved = resolve(flags, effort);
62
- if (resolved) return resolved;
47
+ if (resolved !== void 0) return resolved;
63
48
  }
64
49
  return { kind: "local-runtime" };
65
- }
50
+ };
51
+ const resolveMokaRun = (input) => {
52
+ const flags = input.flags ?? {};
53
+ const effort = flags.effort ?? "normal";
54
+ const target = flags.target ?? "local";
55
+ const mode = flags.readOnly === true ? "read" : "write";
56
+ assertFlagTargetCompatibility(flags, target);
57
+ return {
58
+ effort,
59
+ execution: target === "remote" ? resolveRemoteSubmit(flags, effort) : resolveLocalRuntime(flags, effort),
60
+ mode,
61
+ target
62
+ };
63
+ };
66
64
  //#endregion
67
65
  export { MOKA_RUN_EFFORTS, MOKA_RUN_TARGETS, resolveMokaRun };
@@ -1,6 +1,5 @@
1
1
  import { RunEffort, RunMode, RunTarget } from "../run-control/contracts.js";
2
2
  import { runPipelineFromConfig } from "../pipeline-runtime.js";
3
-
4
3
  //#region src/cli/run-service.d.ts
5
4
  interface ExecuteOptions {
6
5
  entrypoint?: string;
@@ -23,7 +22,7 @@ interface RunControlOptions {
23
22
  * Config-driven `execute` entrypoint. Package-owned defaults are the source of
24
23
  * truth; repo-local pipeline files are ignored by runtime loading.
25
24
  */
26
- declare function execute(description: string, options?: ExecuteOptions): Promise<void>;
27
- declare function quick(description: string, options?: Omit<ExecuteOptions, "entrypoint">): Promise<void>;
25
+ declare const execute: (description: string, options?: ExecuteOptions) => Promise<void>;
26
+ declare const quick: (description: string, options?: Omit<ExecuteOptions, "entrypoint">) => Promise<void>;
28
27
  //#endregion
29
28
  export { ExecuteOptions, RunControlOptions, RunStoreMode, execute, quick };