@oisincoveney/pipeline 3.24.2 → 3.24.3

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 (326) hide show
  1. package/README.md +2 -2
  2. package/defaults/pipeline.yaml +23 -5
  3. package/defaults/profiles.yaml +104 -21
  4. package/dist/argo-graph.js +88 -88
  5. package/dist/argo-submit.d.ts +109 -137
  6. package/dist/argo-submit.js +337 -360
  7. package/dist/argo-workflow.d.ts +156 -176
  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 +172 -169
  16. package/dist/cli/factory-commands.js +12 -11
  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 +2 -2
  22. package/dist/cli/program.js +35 -43
  23. package/dist/cli/run-command.js +25 -25
  24. package/dist/cli/run-commands.js +25 -25
  25. package/dist/cli/run-resolver.d.ts +1 -1
  26. package/dist/cli/run-resolver.js +30 -32
  27. package/dist/cli/run-service.d.ts +2 -2
  28. package/dist/cli/run-service.js +226 -239
  29. package/dist/cli/submit-options.js +78 -82
  30. package/dist/cluster-doctor.js +147 -175
  31. package/dist/codex-config.js +24 -30
  32. package/dist/commands/bench-command.js +9 -7
  33. package/dist/commands/pipeline-command.js +9 -5
  34. package/dist/commands/runner-command-command.js +28 -18
  35. package/dist/commands/ticket/complete.js +29 -33
  36. package/dist/commands/ticket/create.js +82 -82
  37. package/dist/commands/ticket/graph-check.js +11 -11
  38. package/dist/commands/ticket/next.js +36 -36
  39. package/dist/commands/ticket/sequence.js +10 -12
  40. package/dist/commands/ticket/shared.d.ts +1 -1
  41. package/dist/commands/ticket/shared.js +63 -66
  42. package/dist/commands/ticket/start.js +58 -67
  43. package/dist/commands/ticket-command.js +2 -2
  44. package/dist/config/defaults.d.ts +139 -139
  45. package/dist/config/defaults.js +81 -80
  46. package/dist/config/lint.js +52 -64
  47. package/dist/config/load.d.ts +4 -4
  48. package/dist/config/load.js +62 -74
  49. package/dist/config/schema/catalog.js +1 -1
  50. package/dist/config/schema/mcp.js +46 -52
  51. package/dist/config/schemas.d.ts +375 -525
  52. package/dist/config/schemas.js +397 -397
  53. package/dist/config/validate.d.ts +1 -1
  54. package/dist/config/validate.js +236 -201
  55. package/dist/context/repo-map.js +102 -119
  56. package/dist/credentials/broker.d.ts +6 -8
  57. package/dist/credentials/broker.js +17 -16
  58. package/dist/credentials/codex-config.js +15 -19
  59. package/dist/credentials/file-targets.js +9 -15
  60. package/dist/credentials/local-codex-auth-sync.js +55 -58
  61. package/dist/credentials/opencode-config.js +28 -32
  62. package/dist/credentials/runner.js +13 -13
  63. package/dist/effect-sync-errors.js +28 -0
  64. package/dist/factory/create-experiment.js +38 -42
  65. package/dist/factory/exec.js +10 -12
  66. package/dist/factory/git-credentials.js +4 -4
  67. package/dist/factory/stamp-answers.js +10 -11
  68. package/dist/factory/template-update.js +65 -44
  69. package/dist/factory-lane.d.ts +26 -40
  70. package/dist/factory-lane.js +26 -25
  71. package/dist/gates.js +3 -3
  72. package/dist/git-remote-url.js +17 -19
  73. package/dist/hooks.d.ts +26 -25
  74. package/dist/hooks.js +20 -22
  75. package/dist/index.d.ts +1 -1
  76. package/dist/index.js +21 -35
  77. package/dist/install-commands/claude-code.js +96 -92
  78. package/dist/install-commands/host-selection.js +3 -6
  79. package/dist/install-commands/opencode.js +263 -259
  80. package/dist/install-commands/planner.js +159 -180
  81. package/dist/install-commands/result-format.js +1 -3
  82. package/dist/install-commands/shared.js +25 -42
  83. package/dist/install-commands/writer.js +22 -25
  84. package/dist/install-commands.js +8 -8
  85. package/dist/jscpd-output.js +29 -0
  86. package/dist/json-config-merge.js +14 -20
  87. package/dist/json-line-values.js +17 -6
  88. package/dist/loop/argo-poll.js +52 -71
  89. package/dist/loop/backlog-records.js +1 -3
  90. package/dist/loop/controller-deps.js +146 -159
  91. package/dist/loop/controller.js +162 -186
  92. package/dist/loop/gh-checks.js +62 -61
  93. package/dist/loop/gh-runner.js +22 -25
  94. package/dist/loop/loop-command.js +66 -58
  95. package/dist/loop/loop-controller-entrypoint.js +28 -30
  96. package/dist/loop/merge.js +36 -40
  97. package/dist/mcp/gateway-config.js +25 -29
  98. package/dist/mcp/gateway-doctor.js +104 -116
  99. package/dist/mcp/gateway-reconcile.js +17 -22
  100. package/dist/mcp/gateway-runtime.js +1 -3
  101. package/dist/mcp/host-config.js +37 -40
  102. package/dist/mcp/host-renderers.js +10 -18
  103. package/dist/mcp/repo-local-backends.js +50 -54
  104. package/dist/mcp/toolhive-vmcp.js +39 -39
  105. package/dist/model-resolver.js +29 -33
  106. package/dist/moka-global-config.d.ts +78 -54
  107. package/dist/moka-global-config.js +90 -92
  108. package/dist/moka-submit.d.ts +2163 -864
  109. package/dist/moka-submit.js +97 -99
  110. package/dist/opencode-project-config.js +34 -40
  111. package/dist/package-assets.js +1 -3
  112. package/dist/path-refs.js +2 -2
  113. package/dist/pipeline-init.js +25 -25
  114. package/dist/pipeline-runtime.d.ts +11 -11
  115. package/dist/pipeline-runtime.js +49 -50
  116. package/dist/planned-node.js +6 -3
  117. package/dist/planning/compile.d.ts +3 -3
  118. package/dist/planning/compile.js +140 -139
  119. package/dist/planning/dependency-refs.js +5 -5
  120. package/dist/planning/generate.d.ts +1293 -1293
  121. package/dist/planning/generate.js +305 -314
  122. package/dist/planning/graph.js +131 -149
  123. package/dist/remote/argo/model.d.ts +103 -121
  124. package/dist/remote/argo/model.js +205 -197
  125. package/dist/remote/argo/policy.js +39 -47
  126. package/dist/remote/argo/storage.js +81 -85
  127. package/dist/remote/submit/argo-submission.js +53 -58
  128. package/dist/remote/submit/compilation.js +46 -49
  129. package/dist/remote/submit/event-boundary.js +62 -76
  130. package/dist/remote/submit/hook-events.d.ts +5 -0
  131. package/dist/remote/submit/io.js +40 -43
  132. package/dist/remote/submit/options.d.ts +50 -0
  133. package/dist/remote/submit/options.js +27 -0
  134. package/dist/remote/submit/service.js +45 -49
  135. package/dist/run-control/command-context.js +6 -8
  136. package/dist/run-control/commands.js +10 -10
  137. package/dist/run-control/contracts.d.ts +40 -100
  138. package/dist/run-control/contracts.js +56 -69
  139. package/dist/run-control/detach.js +66 -72
  140. package/dist/run-control/file-errors.js +1 -3
  141. package/dist/run-control/logical-segment.js +3 -3
  142. package/dist/run-control/next-node.js +66 -78
  143. package/dist/run-control/postgres/postgres-run-control-store.js +195 -224
  144. package/dist/run-control/resume-command.js +33 -41
  145. package/dist/run-control/run-artifacts-command.js +83 -105
  146. package/dist/run-control/run-command-domain.js +7 -11
  147. package/dist/run-control/run-control-store.js +9 -9
  148. package/dist/run-control/run-query-command.js +73 -100
  149. package/dist/run-control/run-record.js +2 -2
  150. package/dist/run-control/run-state-lock.js +5 -5
  151. package/dist/run-control/runtime-event-projection.js +38 -50
  152. package/dist/run-control/runtime-reporter.js +84 -102
  153. package/dist/run-control/stop-command.js +42 -53
  154. package/dist/run-control/store-fs-effects.js +3 -1
  155. package/dist/run-control/store-manifest.js +38 -13
  156. package/dist/run-control/store-paths.js +3 -3
  157. package/dist/run-control/store.js +1 -1
  158. package/dist/run-control/submit-result.js +21 -21
  159. package/dist/run-control/supervisor.js +77 -68
  160. package/dist/run-control/workspace.js +2 -2
  161. package/dist/run-state/git-refs.js +257 -307
  162. package/dist/runner/opencode-excludes.js +4 -4
  163. package/dist/runner/subprocess-result.js +28 -37
  164. package/dist/runner/subprocess.js +41 -41
  165. package/dist/runner/timeouts.js +14 -13
  166. package/dist/runner-command/dynamic-command.js +46 -39
  167. package/dist/runner-command/finalize.js +174 -153
  168. package/dist/runner-command/lifecycle-context.js +112 -130
  169. package/dist/runner-command/lifecycle.js +77 -71
  170. package/dist/runner-command/pre-schedule.js +201 -222
  171. package/dist/runner-command/run.js +432 -447
  172. package/dist/runner-command/schedule-source-options.js +8 -10
  173. package/dist/runner-command/select-ready-wave.js +38 -29
  174. package/dist/runner-command/task-descriptor.js +11 -17
  175. package/dist/runner-command-contract.d.ts +147 -156
  176. package/dist/runner-command-contract.js +401 -410
  177. package/dist/runner-event-schema.d.ts +364 -504
  178. package/dist/runner-event-schema.js +187 -175
  179. package/dist/runner-event-sink.js +37 -43
  180. package/dist/runner-output.js +6 -6
  181. package/dist/runner.d.ts +56 -36
  182. package/dist/runner.js +175 -127
  183. package/dist/runtime/actor-ids.js +2 -2
  184. package/dist/runtime/agent-node/agent-node.js +99 -111
  185. package/dist/runtime/agent-node/handoff-finalization.js +23 -24
  186. package/dist/runtime/agent-node/model-selection.js +19 -22
  187. package/dist/runtime/agent-node/output-finalization.js +174 -205
  188. package/dist/runtime/agent-node/prompt-rendering.js +207 -251
  189. package/dist/runtime/agent-node/session-execution.js +34 -38
  190. package/dist/runtime/builtins/builtins.js +212 -284
  191. package/dist/runtime/changed-files/changed-files.js +26 -34
  192. package/dist/runtime/command-executor/command-executor.js +31 -23
  193. package/dist/runtime/config-error.js +1 -3
  194. package/dist/runtime/context/context.js +35 -37
  195. package/dist/runtime/contracts/index.d.ts +1 -1
  196. package/dist/runtime/detached-race.js +11 -14
  197. package/dist/runtime/drain-merge/drain-merge.js +137 -163
  198. package/dist/runtime/durable-store/acquisition.js +5 -3
  199. package/dist/runtime/durable-store/durable-store.d.ts +1 -1
  200. package/dist/runtime/durable-store/postgres/migrate-substrate.js +36 -33
  201. package/dist/runtime/durable-store/postgres/postgres-store.js +17 -18
  202. package/dist/runtime/events/events.js +255 -323
  203. package/dist/runtime/gates/adjudication/llm-judge.js +21 -24
  204. package/dist/runtime/gates/adjudication/structured-claim.js +15 -16
  205. package/dist/runtime/gates/adjudicator/adjudicator.js +27 -27
  206. package/dist/runtime/gates/adjudicator/index.js +2 -2
  207. package/dist/runtime/gates/contract.js +5 -9
  208. package/dist/runtime/gates/gates.js +9 -8
  209. package/dist/runtime/gates/kinds/acceptance/acceptance.js +66 -70
  210. package/dist/runtime/gates/kinds/acceptance/index.js +2 -2
  211. package/dist/runtime/gates/kinds/artifact/artifact.js +4 -4
  212. package/dist/runtime/gates/kinds/artifact/index.js +2 -2
  213. package/dist/runtime/gates/kinds/builtin/builtin.js +4 -4
  214. package/dist/runtime/gates/kinds/builtin/index.js +2 -2
  215. package/dist/runtime/gates/kinds/changed-files/changed-files.js +31 -35
  216. package/dist/runtime/gates/kinds/changed-files/index.js +2 -2
  217. package/dist/runtime/gates/kinds/command/command.js +3 -3
  218. package/dist/runtime/gates/kinds/command/index.js +2 -2
  219. package/dist/runtime/gates/kinds/json-schema/index.js +2 -2
  220. package/dist/runtime/gates/kinds/json-schema/json-schema.js +7 -6
  221. package/dist/runtime/gates/kinds/verdict/index.js +2 -2
  222. package/dist/runtime/gates/kinds/verdict/verdict.js +3 -3
  223. package/dist/runtime/gates/orchestrator.js +72 -86
  224. package/dist/runtime/gates/registry.js +1 -3
  225. package/dist/runtime/handoff.d.ts +1 -1
  226. package/dist/runtime/handoff.js +43 -46
  227. package/dist/runtime/hooks/command-hook.js +57 -71
  228. package/dist/runtime/hooks/context.js +21 -25
  229. package/dist/runtime/hooks/events.js +84 -100
  230. package/dist/runtime/hooks/execution.js +6 -12
  231. package/dist/runtime/hooks/hooks.js +34 -23
  232. package/dist/runtime/hooks/invocation.js +23 -29
  233. package/dist/runtime/hooks/module-hook.js +35 -35
  234. package/dist/runtime/hooks/policy.js +32 -29
  235. package/dist/runtime/hooks/results.js +56 -66
  236. package/dist/runtime/journal-acquisition.d.ts +1 -1
  237. package/dist/runtime/journal-acquisition.js +14 -14
  238. package/dist/runtime/json-validation/json-validation.js +50 -72
  239. package/dist/runtime/local-scheduler.js +46 -48
  240. package/dist/runtime/node-execution.js +375 -446
  241. package/dist/runtime/node-protocol/node-protocol.js +36 -79
  242. package/dist/runtime/node-state-store.d.ts +1 -1
  243. package/dist/runtime/node-state-store.js +13 -57
  244. package/dist/runtime/node-state-tracker.js +46 -54
  245. package/dist/runtime/open-pull-request/open-pull-request.js +143 -187
  246. package/dist/runtime/opencode-adapter.js +23 -24
  247. package/dist/runtime/opencode-agent-name.js +6 -6
  248. package/dist/runtime/opencode-runtime.js +92 -92
  249. package/dist/runtime/opencode-server.js +39 -53
  250. package/dist/runtime/opencode-session-executor.js +315 -334
  251. package/dist/runtime/parallel-node/parallel-node.js +122 -134
  252. package/dist/runtime/parallel-worktrees/parallel-worktrees.js +90 -73
  253. package/dist/runtime/protected-paths/protected-paths.js +70 -71
  254. package/dist/runtime/remediation/remediation.js +202 -231
  255. package/dist/runtime/retry.js +8 -10
  256. package/dist/runtime/run-journal.js +7 -7
  257. package/dist/runtime/runtime-results.js +54 -69
  258. package/dist/runtime/scheduled-dependencies.d.ts +1 -1
  259. package/dist/runtime/scheduled-dependencies.js +59 -74
  260. package/dist/runtime/scheduler.js +177 -202
  261. package/dist/runtime/services/agent-node-runtime-service.js +3 -3
  262. package/dist/runtime/services/backlog-service.js +8 -14
  263. package/dist/runtime/services/command-executor-service.js +1 -1
  264. package/dist/runtime/services/config-io-service.js +24 -21
  265. package/dist/runtime/services/drain-merge-git-service.js +1 -1
  266. package/dist/runtime/services/file-system-service.js +9 -7
  267. package/dist/runtime/services/git-porcelain-service.js +6 -6
  268. package/dist/runtime/services/kubernetes-argo-service.d.ts +10 -2
  269. package/dist/runtime/services/kubernetes-argo-service.js +90 -84
  270. package/dist/runtime/services/mcp-gateway-service.js +82 -81
  271. package/dist/runtime/services/open-pull-request-git-service.js +1 -3
  272. package/dist/runtime/services/opencode-runtime-server-service.js +10 -12
  273. package/dist/runtime/services/opencode-sdk-service.js +7 -7
  274. package/dist/runtime/services/repo-io-service.js +10 -12
  275. package/dist/runtime/services/run-journal-file-service.js +2 -2
  276. package/dist/runtime/services/runner-command-io-service.js +48 -52
  277. package/dist/runtime/services/runner-event-sink-http-service.js +31 -39
  278. package/dist/runtime/step/step-node.js +15 -15
  279. package/dist/runtime/workflow-execution.js +55 -57
  280. package/dist/runtime/workflow-lifecycle.js +81 -101
  281. package/dist/safe-json.js +16 -16
  282. package/dist/schedule/backlog-context.js +120 -116
  283. package/dist/schedule/baseline.js +249 -255
  284. package/dist/schedule/passes/coverage.js +63 -68
  285. package/dist/schedule/passes/drain-merge.js +34 -40
  286. package/dist/schedule/passes/ids.js +15 -17
  287. package/dist/schedule/passes/models.js +40 -37
  288. package/dist/schedule/passes/open-pull-request.js +12 -18
  289. package/dist/schedule/passes/references.js +18 -22
  290. package/dist/schedule/prompts.js +134 -141
  291. package/dist/schedule/scheduling-roles.js +8 -14
  292. package/dist/schema-boundary.d.ts +1 -0
  293. package/dist/schema-boundary.js +145 -0
  294. package/dist/serialized-write-queue.js +2 -2
  295. package/dist/standard-output-schemas.js +61 -59
  296. package/dist/strings.js +12 -12
  297. package/dist/task-ref.js +5 -5
  298. package/dist/tickets/apply-ticket-plan.js +51 -61
  299. package/dist/tickets/backlog-task-store.d.ts +13 -22
  300. package/dist/tickets/backlog-task-store.js +80 -94
  301. package/dist/tickets/completion/complete-ticket.js +53 -59
  302. package/dist/tickets/ticket-graph-dto.d.ts +24 -47
  303. package/dist/tickets/ticket-graph-dto.js +40 -40
  304. package/dist/tickets/ticket-graph.d.ts +7 -1
  305. package/dist/tickets/ticket-graph.js +36 -50
  306. package/dist/tickets/ticket-plan-command-args.js +6 -10
  307. package/dist/tickets/ticket-plan-render.js +10 -16
  308. package/dist/tickets/ticket-plan.d.ts +31 -40
  309. package/dist/tickets/ticket-plan.js +97 -77
  310. package/dist/tickets/ticket-selection.d.ts +1 -1
  311. package/dist/tickets/ticket-selection.js +37 -52
  312. package/dist/tickets/ticket-task-index.js +13 -17
  313. package/dist/tickets/validation-error-format.js +3 -10
  314. package/dist/token-estimator.js +12 -7
  315. package/dist/unknown-fields.js +21 -0
  316. package/dist/workflow-submit-contract.d.ts +9 -9
  317. package/dist/workflow-submit-contract.js +10 -9
  318. package/docs/adr-opencode-first-goal-loop-runtime.md +11 -11
  319. package/docs/config-architecture.md +13 -13
  320. package/docs/mcp-host-isolation.md +1 -0
  321. package/docs/moka-orchestrator-design.md +3 -3
  322. package/docs/operator-guide.md +1 -1
  323. package/docs/runtime-actor-model.md +18 -18
  324. package/docs/slash-command-adapter-contract.md +3 -3
  325. package/package.json +73 -76
  326. package/dist/config/schema/reference-validation.js +0 -83
@@ -13,21 +13,16 @@ import { registerMcpGatewayCommands } from "./mcp-gateway-commands.js";
13
13
  import { registerPlanCommands } from "./plan-commands.js";
14
14
  import { execute } from "./run-service.js";
15
15
  import { printMokaSubmitResult, registerRunCommands } from "./run-commands.js";
16
- import { Effect } from "effect";
17
16
  import { readFileSync } from "node:fs";
17
+ import { Effect } from "effect";
18
18
  import { Command, Help } from "commander";
19
19
  //#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) {
20
+ const registerSubmitCommand = (program) => {
21
+ 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) => {
22
+ printMokaSubmitResult(await runMokaSubmitFromCli(input, flags));
23
+ });
24
+ };
25
+ const registerApplicationCommands = (program, options) => {
31
26
  const dispatchResolvedRunCommand = registerRunCommands(program, { runCommand: options.runCommand });
32
27
  registerRunControlCommands(program);
33
28
  registerPlanCommands(program);
@@ -42,44 +37,41 @@ function registerApplicationCommands(program, options) {
42
37
  ...options.ticketCommand,
43
38
  runCommand: options.ticketCommand?.runCommand ?? dispatchResolvedRunCommand
44
39
  });
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) {
40
+ };
41
+ const configureEntrypointHelp = (program, configuredEntrypointCommands) => {
55
42
  if (configuredEntrypointCommands.size === 0) return;
56
43
  program.configureHelp({ subcommandTerm(command) {
57
44
  if (configuredEntrypointCommands.has(command.name())) return command.name();
58
45
  return Help.prototype.subcommandTerm.call(this, command);
59
46
  } });
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"));
47
+ };
48
+ const runEntrypointCommand = async (entrypoint, task) => {
49
+ await execute(task, { entrypoint });
50
+ };
51
+ const registerEntrypointCommands = (program, configuredPipeline) => {
52
+ configureEntrypointHelp(program, registerConfiguredEntrypointCommands(program, configuredPipeline, runEntrypointCommand));
53
+ };
54
+ const isPackageVersionRecord = (value) => typeof value === "object" && value !== null && "version" in value && typeof value.version === "string";
55
+ const readPackageVersion = () => {
56
+ const packageJson = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf-8"));
66
57
  if (!isPackageVersionRecord(packageJson)) throw new Error("Unable to read @oisincoveney/pipeline package version.");
67
58
  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) {
59
+ };
60
+ const createBaseProgram = () => new Command().name("moka").description("Submit work to Momokaya").version(readPackageVersion()).exitOverride();
61
+ const loadConfiguredEntrypoints = (cwd) => loadPipelineConfig(cwd, { allowMissingLintFileReferences: true });
62
+ const createCliProgram = (options = {}) => {
63
+ const configuredPipeline = loadConfiguredEntrypoints(process.env.PIPELINE_TARGET_PATH ?? process.cwd());
64
+ const program = createBaseProgram();
65
+ registerApplicationCommands(program, options);
66
+ registerEntrypointCommands(program, configuredPipeline);
67
+ return program;
68
+ };
69
+ const runCliEffect = (argv) => Effect.tryPromise({
70
+ catch: (error) => error,
71
+ try: async () => await createCliProgram().parseAsync(argv, { from: "node" })
72
+ }).pipe(Effect.asVoid);
73
+ const runCli = async (argv) => {
82
74
  await createCliProgram().parseAsync(argv, { from: "node" });
83
- }
75
+ };
84
76
  //#endregion
85
77
  export { createCliProgram, runCli, runCliEffect };
@@ -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,7 +4,30 @@ 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
+ printMokaSubmitResult(await runMokaSubmitFromCli(parts, remoteSubmitFlags(execution)));
27
+ }
28
+ });
29
+ };
30
+ const registerRunCommands = (program, options = {}) => {
8
31
  const dispatchResolvedRunCommand = createResolvedRunCommand(options);
9
32
  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
33
  const task = descriptionParts.join(" ");
@@ -30,29 +53,6 @@ function registerRunCommands(program, options = {}) {
30
53
  });
31
54
  });
32
55
  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
- }
56
+ };
57
57
  //#endregion
58
58
  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 };
@@ -23,7 +23,7 @@ interface RunControlOptions {
23
23
  * Config-driven `execute` entrypoint. Package-owned defaults are the source of
24
24
  * truth; repo-local pipeline files are ignored by runtime loading.
25
25
  */
26
- declare function execute(description: string, options?: ExecuteOptions): Promise<void>;
27
- declare function quick(description: string, options?: Omit<ExecuteOptions, "entrypoint">): Promise<void>;
26
+ declare const execute: (description: string, options?: ExecuteOptions) => Promise<void>;
27
+ declare const quick: (description: string, options?: Omit<ExecuteOptions, "entrypoint">) => Promise<void>;
28
28
  //#endregion
29
29
  export { ExecuteOptions, RunControlOptions, RunStoreMode, execute, quick };