@oisincoveney/pipeline 3.11.3 → 3.11.5

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.
@@ -1,4 +1,5 @@
1
1
  import { uniqueStrings } from "./strings.js";
2
+ import { resolveExecutableDependencyIds } from "./planning/dependency-refs.js";
2
3
  import { z } from "zod";
3
4
  import { Data } from "effect";
4
5
  //#region src/argo-graph.ts
@@ -88,26 +89,7 @@ var ArgoGraphCompiler = class {
88
89
  this.compileNodes(node.children ?? [], [...inheritedNeeds, ...node.needs]);
89
90
  }
90
91
  resolveDependencyTaskNames(nodeIds) {
91
- return uniqueStrings(nodeIds.flatMap((nodeId) => this.resolveDependencyNodeIds(nodeId).map((id) => argoTaskName(id))));
92
- }
93
- resolveDependencyNodeIds(nodeId) {
94
- const node = this.nodeById.get(nodeId);
95
- if (!node) return [];
96
- const kind = node.kind;
97
- switch (kind) {
98
- case "agent":
99
- case "builtin":
100
- case "command": return [node.id];
101
- case "group": return this.resolveGroupNodeIds(node);
102
- case "parallel": return this.resolveParallelNodeIds(node);
103
- default: throw new ArgoGraphCompilerError(String(kind), node.id);
104
- }
105
- }
106
- resolveGroupNodeIds(node) {
107
- return uniqueStrings([...node.nodes ?? [], ...node.needs].flatMap((id) => this.resolveDependencyNodeIds(id)));
108
- }
109
- resolveParallelNodeIds(node) {
110
- return uniqueStrings((node.children ?? []).flatMap((child) => this.resolveDependencyNodeIds(child.id)));
92
+ return uniqueStrings(resolveExecutableDependencyIds(this.nodeById, nodeIds).map((id) => argoTaskName(id)));
111
93
  }
112
94
  terminalTasks() {
113
95
  const dependedOn = new Set(this.tasks.flatMap((task) => task.dependencies));
@@ -226,8 +226,8 @@ declare const configSchema: z.ZodObject<{
226
226
  policy: z.ZodOptional<z.ZodObject<{
227
227
  commands: z.ZodOptional<z.ZodEnum<{
228
228
  allow: "allow";
229
- "trusted-only": "trusted-only";
230
229
  deny: "deny";
230
+ "trusted-only": "trusted-only";
231
231
  }>>;
232
232
  modules: z.ZodOptional<z.ZodEnum<{
233
233
  allow: "allow";
@@ -255,8 +255,8 @@ declare const configSchema: z.ZodObject<{
255
255
  global: "global";
256
256
  }>>;
257
257
  mode: z.ZodEnum<{
258
- hosted: "hosted";
259
258
  local: "local";
259
+ hosted: "hosted";
260
260
  }>;
261
261
  provider: z.ZodLiteral<"toolhive">;
262
262
  authorization_env: z.ZodDefault<z.ZodString>;
@@ -299,10 +299,10 @@ declare const configSchema: z.ZodObject<{
299
299
  }, z.core.$strict>>;
300
300
  output: z.ZodOptional<z.ZodObject<{
301
301
  format: z.ZodEnum<{
302
+ json_schema: "json_schema";
302
303
  text: "text";
303
304
  json: "json";
304
305
  jsonl: "jsonl";
305
- json_schema: "json_schema";
306
306
  }>;
307
307
  repair: z.ZodOptional<z.ZodObject<{
308
308
  enabled: z.ZodOptional<z.ZodBoolean>;
@@ -371,10 +371,10 @@ declare const configSchema: z.ZodObject<{
371
371
  disabled: "disabled";
372
372
  }>>>;
373
373
  output_formats: z.ZodOptional<z.ZodArray<z.ZodEnum<{
374
+ json_schema: "json_schema";
374
375
  text: "text";
375
376
  json: "json";
376
377
  jsonl: "jsonl";
377
- json_schema: "json_schema";
378
378
  }>>>;
379
379
  rules: z.ZodOptional<z.ZodBoolean>;
380
380
  skills: z.ZodOptional<z.ZodBoolean>;
@@ -5,13 +5,13 @@ import { z } from "zod";
5
5
  //#region src/moka-submit.d.ts
6
6
  declare const mokaSubmitDirectHooksSchema: z.ZodRecord<z.ZodEnum<{
7
7
  "workflow.start": "workflow.start";
8
+ "node.finish": "node.finish";
9
+ "node.start": "node.start";
8
10
  "workflow.success": "workflow.success";
9
11
  "workflow.failure": "workflow.failure";
10
12
  "workflow.complete": "workflow.complete";
11
- "node.start": "node.start";
12
13
  "node.success": "node.success";
13
14
  "node.error": "node.error";
14
- "node.finish": "node.finish";
15
15
  "gate.failure": "gate.failure";
16
16
  }> & z.core.$partial, z.ZodDiscriminatedUnion<[z.ZodObject<{
17
17
  failure: z.ZodDefault<z.ZodEnum<{
@@ -94,13 +94,13 @@ declare const mokaSubmitOptionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
94
94
  }, z.core.$strict>>;
95
95
  hooks: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
96
96
  "workflow.start": "workflow.start";
97
+ "node.finish": "node.finish";
98
+ "node.start": "node.start";
97
99
  "workflow.success": "workflow.success";
98
100
  "workflow.failure": "workflow.failure";
99
101
  "workflow.complete": "workflow.complete";
100
- "node.start": "node.start";
101
102
  "node.success": "node.success";
102
103
  "node.error": "node.error";
103
- "node.finish": "node.finish";
104
104
  "gate.failure": "gate.failure";
105
105
  }> & z.core.$partial, z.ZodDiscriminatedUnion<[z.ZodObject<{
106
106
  failure: z.ZodDefault<z.ZodEnum<{
@@ -207,13 +207,13 @@ declare const mokaSubmitOptionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
207
207
  }, z.core.$strict>>;
208
208
  hooks: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
209
209
  "workflow.start": "workflow.start";
210
+ "node.finish": "node.finish";
211
+ "node.start": "node.start";
210
212
  "workflow.success": "workflow.success";
211
213
  "workflow.failure": "workflow.failure";
212
214
  "workflow.complete": "workflow.complete";
213
- "node.start": "node.start";
214
215
  "node.success": "node.success";
215
216
  "node.error": "node.error";
216
- "node.finish": "node.finish";
217
217
  "gate.failure": "gate.failure";
218
218
  }> & z.core.$partial, z.ZodDiscriminatedUnion<[z.ZodObject<{
219
219
  failure: z.ZodDefault<z.ZodEnum<{
@@ -34,7 +34,7 @@ async function installDefaultSkills(cwd) {
34
34
  }
35
35
  }
36
36
  function installDefaultHooks() {
37
- return installHooks({});
37
+ return installHooks({ force: true });
38
38
  }
39
39
  function hookInstallerFiles(result) {
40
40
  return "items" in result ? result.items.map((item) => item.path) : result.files;
@@ -0,0 +1,43 @@
1
+ import { uniqueStrings } from "../strings.js";
2
+ //#region src/planning/dependency-refs.ts
3
+ /**
4
+ * Index every planned node — including the children nested inside `parallel`
5
+ * containers — by id, so a dependency id can be resolved regardless of nesting.
6
+ */
7
+ function indexPlannedNodesById(nodes, into = /* @__PURE__ */ new Map()) {
8
+ for (const node of nodes) {
9
+ into.set(node.id, node);
10
+ indexPlannedNodesById(node.children ?? [], into);
11
+ }
12
+ return into;
13
+ }
14
+ /**
15
+ * Expand dependency ids to the executable (branch-producing) leaf node ids,
16
+ * making `group`/`parallel` container nodes transparent.
17
+ *
18
+ * A container produces no output of its own: a `parallel` lowers to its children
19
+ * and a `group` is a pure dependency anchor, so neither pushes a `nodes/<id>`
20
+ * result branch. A downstream node that lists the container in `needs` actually
21
+ * depends on the container's executable descendants. Both the Argo DAG ordering
22
+ * and the runner's upstream-output (git ref) materialization resolve dependencies
23
+ * through this one function so the two representations never diverge — divergence
24
+ * is what made review nodes fetch a non-existent `nodes/mechanical-checks` branch.
25
+ */
26
+ function resolveExecutableDependencyIds(nodeById, needs) {
27
+ const resolveOne = (nodeId) => {
28
+ const node = nodeById.get(nodeId);
29
+ if (!node) return [];
30
+ const kind = node.kind;
31
+ switch (kind) {
32
+ case "agent":
33
+ case "builtin":
34
+ case "command": return [node.id];
35
+ case "group": return uniqueStrings([...node.nodes ?? [], ...node.needs].flatMap(resolveOne));
36
+ case "parallel": return uniqueStrings((node.children ?? []).flatMap((child) => resolveOne(child.id)));
37
+ default: throw new Error(`resolveExecutableDependencyIds: unsupported node kind '${String(kind)}' on '${node.id}'`);
38
+ }
39
+ };
40
+ return uniqueStrings(needs.flatMap(resolveOne));
41
+ }
42
+ //#endregion
43
+ export { indexPlannedNodesById, resolveExecutableDependencyIds };
@@ -1,3 +1,4 @@
1
+ import { indexPlannedNodesById, resolveExecutableDependencyIds } from "../planning/dependency-refs.js";
1
2
  import { loadPipelineConfig } from "../config/load.js";
2
3
  import "../config.js";
3
4
  import { findPlannedNode } from "../planned-node.js";
@@ -120,20 +121,21 @@ function runRunnerCommandEffect(options, runtime) {
120
121
  workflowId: compiled.workflowId
121
122
  }, "schedule.compile finish");
122
123
  const node = yield* resolveRunnerTargetNode(payload, compiled, descriptor);
124
+ const dependencyNodeIds = resolveExecutableDependencyIds(indexPlannedNodesById(compiled.plan.topologicalOrder), node.needs);
123
125
  logger.info({
124
- dependencyCount: node.needs.length,
126
+ dependencyCount: dependencyNodeIds.length,
125
127
  nodeId: descriptor.nodeId,
126
128
  phase: "dependency.merge",
127
129
  status: "start"
128
130
  }, "dependency.merge start");
129
131
  yield* io.mergeDependencyRefs({
130
132
  committer: compiled.config.runner_command.git.committer,
131
- dependencyNodeIds: node.needs,
133
+ dependencyNodeIds,
132
134
  payload,
133
135
  worktreePath
134
136
  });
135
137
  logger.info({
136
- dependencyCount: node.needs.length,
138
+ dependencyCount: dependencyNodeIds.length,
137
139
  nodeId: descriptor.nodeId,
138
140
  phase: "dependency.merge",
139
141
  status: "finish"
@@ -11,8 +11,8 @@ declare const runnerEventRecordSchema: z.ZodUnion<readonly [z.ZodObject<{
11
11
  runId: z.ZodString;
12
12
  sequence: z.ZodNumber;
13
13
  type: z.ZodEnum<{
14
- "workflow.start": "workflow.start";
15
14
  "workflow.planned": "workflow.planned";
15
+ "workflow.start": "workflow.start";
16
16
  }>;
17
17
  workflowPlan: z.ZodObject<{
18
18
  edges: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -58,10 +58,10 @@ declare const runnerEventRecordSchema: z.ZodUnion<readonly [z.ZodObject<{
58
58
  }>;
59
59
  }, z.core.$strip>;
60
60
  type: z.ZodEnum<{
61
- "node.start": "node.start";
62
- "node.finish": "node.finish";
63
61
  "agent.finish": "agent.finish";
64
62
  "agent.start": "agent.start";
63
+ "node.finish": "node.finish";
64
+ "node.start": "node.start";
65
65
  }>;
66
66
  }, z.core.$strip>, z.ZodObject<{
67
67
  at: z.ZodOptional<z.ZodString>;
@@ -189,8 +189,8 @@ declare const runnerEventBatchSchema: z.ZodObject<{
189
189
  runId: z.ZodString;
190
190
  sequence: z.ZodNumber;
191
191
  type: z.ZodEnum<{
192
- "workflow.start": "workflow.start";
193
192
  "workflow.planned": "workflow.planned";
193
+ "workflow.start": "workflow.start";
194
194
  }>;
195
195
  workflowPlan: z.ZodObject<{
196
196
  edges: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -236,10 +236,10 @@ declare const runnerEventBatchSchema: z.ZodObject<{
236
236
  }>;
237
237
  }, z.core.$strip>;
238
238
  type: z.ZodEnum<{
239
- "node.start": "node.start";
240
- "node.finish": "node.finish";
241
239
  "agent.finish": "agent.finish";
242
240
  "agent.start": "agent.start";
241
+ "node.finish": "node.finish";
242
+ "node.start": "node.start";
243
243
  }>;
244
244
  }, z.core.$strip>, z.ZodObject<{
245
245
  at: z.ZodOptional<z.ZodString>;
package/package.json CHANGED
@@ -127,7 +127,7 @@
127
127
  "prepack": "bun run build:cli"
128
128
  },
129
129
  "type": "module",
130
- "version": "3.11.3",
130
+ "version": "3.11.5",
131
131
  "description": "Config-driven multi-agent pipeline runner for repository work",
132
132
  "main": "./dist/index.js",
133
133
  "types": "./dist/index.d.ts",