@acpus/runtime 0.1.0 → 0.2.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 (76) hide show
  1. package/dist/agent-telemetry.d.ts +49 -0
  2. package/dist/agent-telemetry.d.ts.map +1 -0
  3. package/dist/agent-telemetry.js +255 -0
  4. package/dist/agent-telemetry.js.map +1 -0
  5. package/dist/artifacts.d.ts +16 -1
  6. package/dist/artifacts.d.ts.map +1 -1
  7. package/dist/artifacts.js +92 -29
  8. package/dist/artifacts.js.map +1 -1
  9. package/dist/attempt-artifacts.d.ts +35 -0
  10. package/dist/attempt-artifacts.d.ts.map +1 -0
  11. package/dist/attempt-artifacts.js +90 -0
  12. package/dist/attempt-artifacts.js.map +1 -0
  13. package/dist/client.d.ts +27 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +33 -0
  16. package/dist/client.js.map +1 -1
  17. package/dist/executors/agent.d.ts +7 -3
  18. package/dist/executors/agent.d.ts.map +1 -1
  19. package/dist/executors/agent.js +58 -61
  20. package/dist/executors/agent.js.map +1 -1
  21. package/dist/executors/mock-program.d.ts +2 -0
  22. package/dist/executors/mock-program.d.ts.map +1 -1
  23. package/dist/executors/mock-program.js +27 -6
  24. package/dist/executors/mock-program.js.map +1 -1
  25. package/dist/executors/output-preview.d.ts +2 -0
  26. package/dist/executors/output-preview.d.ts.map +1 -0
  27. package/dist/executors/output-preview.js +20 -0
  28. package/dist/executors/output-preview.js.map +1 -0
  29. package/dist/executors/program.d.ts +10 -3
  30. package/dist/executors/program.d.ts.map +1 -1
  31. package/dist/executors/program.js +39 -4
  32. package/dist/executors/program.js.map +1 -1
  33. package/dist/executors/types.d.ts +2 -0
  34. package/dist/executors/types.d.ts.map +1 -1
  35. package/dist/fork.d.ts +76 -0
  36. package/dist/fork.d.ts.map +1 -0
  37. package/dist/fork.js +201 -0
  38. package/dist/fork.js.map +1 -0
  39. package/dist/index.d.ts +9 -4
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +6 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/interpreter.d.ts +5 -49
  44. package/dist/interpreter.d.ts.map +1 -1
  45. package/dist/interpreter.js +210 -462
  46. package/dist/interpreter.js.map +1 -1
  47. package/dist/keys.d.ts +50 -2
  48. package/dist/keys.d.ts.map +1 -1
  49. package/dist/keys.js +261 -1
  50. package/dist/keys.js.map +1 -1
  51. package/dist/run-control.d.ts +45 -0
  52. package/dist/run-control.d.ts.map +1 -0
  53. package/dist/run-control.js +253 -0
  54. package/dist/run-control.js.map +1 -0
  55. package/dist/state-machine.d.ts +5 -1
  56. package/dist/state-machine.d.ts.map +1 -1
  57. package/dist/state-machine.js +16 -1
  58. package/dist/state-machine.js.map +1 -1
  59. package/dist/store.d.ts +26 -1
  60. package/dist/store.d.ts.map +1 -1
  61. package/dist/store.js +127 -28
  62. package/dist/store.js.map +1 -1
  63. package/dist/supervisor-app.d.ts.map +1 -1
  64. package/dist/supervisor-app.js +110 -40
  65. package/dist/supervisor-app.js.map +1 -1
  66. package/dist/supervisor-discovery.d.ts +1 -0
  67. package/dist/supervisor-discovery.d.ts.map +1 -1
  68. package/dist/supervisor-discovery.js +9 -15
  69. package/dist/supervisor-discovery.js.map +1 -1
  70. package/dist/types.d.ts +81 -4
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/workflow-outputs.d.ts +9 -0
  73. package/dist/workflow-outputs.d.ts.map +1 -0
  74. package/dist/workflow-outputs.js +59 -0
  75. package/dist/workflow-outputs.js.map +1 -0
  76. package/package.json +3 -3
@@ -1,5 +1,6 @@
1
1
  import { ExpressionEvaluator } from "../evaluator.js";
2
2
  import { Ajv } from "ajv";
3
+ import { schemaValidationError } from "./output-preview.js";
3
4
  /**
4
5
  * Mock program executor for testing. Takes a step-id → {stdout, exitCode, parsedOutput} map,
5
6
  * resolves cmd template, handles capture config.
@@ -47,26 +48,46 @@ export class MockProgramExecutor {
47
48
  return { failureKind: response.failureKind, error: `Simulated ${response.failureKind} failure`, stdout, stderr };
48
49
  }
49
50
  const exitCode = response.exitCode ?? 0;
50
- // Handle capture config — a non-zero exit code is still step data.
51
+ // Mirror ADR-0006: a non-zero exit not allow-listed by `expect.exit_code`
52
+ // (default `[0]`) fails the node fast and precedes capture/schema checks.
53
+ const expect = node.metadata.expect;
54
+ const allowedExitCodes = expect?.exit_code ?? [0];
55
+ if (!allowedExitCodes.includes(exitCode)) {
56
+ return {
57
+ failureKind: "exit",
58
+ error: `exit_code=${exitCode}`,
59
+ exitCode,
60
+ stdout,
61
+ stderr
62
+ };
63
+ }
64
+ // Handle capture config — an allow-listed exit code is step data.
51
65
  const capture = node.metadata.capture;
52
66
  let output = response.parsedOutput;
53
- if (output === undefined && response.stdout && capture?.parse === "json") {
67
+ let capturedOutputRaw = response.capturedOutputRaw;
68
+ if (capturedOutputRaw === undefined && capture?.from === "stdout") {
69
+ capturedOutputRaw = response.stdout;
70
+ }
71
+ if (output === undefined && capturedOutputRaw !== undefined && capture?.parse === "json") {
54
72
  try {
55
- output = JSON.parse(response.stdout);
73
+ output = JSON.parse(capturedOutputRaw);
56
74
  }
57
75
  catch {
58
76
  return { failureKind: "capture", error: "Failed to parse stdout as JSON", exitCode, stdout, stderr };
59
77
  }
60
78
  }
61
- if (output === undefined && response.stdout && capture?.parse === "text") {
62
- output = response.stdout;
79
+ if (output === undefined && capturedOutputRaw !== undefined && capture?.parse === "text") {
80
+ output = capturedOutputRaw;
81
+ }
82
+ if (!capture) {
83
+ capturedOutputRaw = undefined;
63
84
  }
64
85
  // Validate output against schema when declared (mirrors real ProgramExecutor).
65
86
  const outputSchema = node.metadata.output;
66
87
  if (outputSchema && output !== undefined) {
67
88
  const validate = this.ajv.compile(outputSchema);
68
89
  if (!validate(output)) {
69
- return { failureKind: "schema", error: `Output validation failed: ${this.ajv.errorsText(validate.errors)}`, exitCode, stdout, stderr };
90
+ return { failureKind: "schema", error: schemaValidationError(this.ajv.errorsText(validate.errors), capturedOutputRaw, output), exitCode, stdout, stderr };
70
91
  }
71
92
  }
72
93
  return { output, exitCode, stdout, stderr };
@@ -1 +1 @@
1
- {"version":3,"file":"mock-program.js","sourceRoot":"","sources":["../../src/executors/mock-program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-program.js","sourceRoot":"","sources":["../../src/executors/mock-program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function schemaValidationError(validationMessage: string, rawOutput: string | undefined, output: unknown): string;
2
+ //# sourceMappingURL=output-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-preview.d.ts","sourceRoot":"","sources":["../../src/executors/output-preview.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CACnC,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,OAAO,GACd,MAAM,CAER"}
@@ -0,0 +1,20 @@
1
+ const DEFAULT_CAPTURED_OUTPUT_PREVIEW_CHARS = 2048;
2
+ export function schemaValidationError(validationMessage, rawOutput, output) {
3
+ return `Output validation failed: ${validationMessage}; captured output preview: ${capturedOutputPreview(rawOutput, output)}`;
4
+ }
5
+ function capturedOutputPreview(rawOutput, output) {
6
+ const text = rawOutput ?? stringifyOutput(output);
7
+ if (text.length <= DEFAULT_CAPTURED_OUTPUT_PREVIEW_CHARS)
8
+ return text;
9
+ return `${text.slice(0, DEFAULT_CAPTURED_OUTPUT_PREVIEW_CHARS)}... [truncated, ${text.length} chars total]`;
10
+ }
11
+ function stringifyOutput(output) {
12
+ try {
13
+ const json = JSON.stringify(output);
14
+ return json === undefined ? String(output) : json;
15
+ }
16
+ catch {
17
+ return String(output);
18
+ }
19
+ }
20
+ //# sourceMappingURL=output-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-preview.js","sourceRoot":"","sources":["../../src/executors/output-preview.ts"],"names":[],"mappings":"AAAA,MAAM,qCAAqC,GAAG,IAAI,CAAC;AAEnD,MAAM,UAAU,qBAAqB,CACnC,iBAAyB,EACzB,SAA6B,EAC7B,MAAe;IAEf,OAAO,6BAA6B,iBAAiB,8BAA8B,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;AAChI,CAAC;AAED,SAAS,qBAAqB,CAAC,SAA6B,EAAE,MAAe;IAC3E,MAAM,IAAI,GAAG,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM,IAAI,qCAAqC;QAAE,OAAO,IAAI,CAAC;IACtE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,qCAAqC,CAAC,mBAAmB,IAAI,CAAC,MAAM,eAAe,CAAC;AAC9G,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -5,9 +5,16 @@ import { ExpressionEvaluator } from "../evaluator.js";
5
5
  * Real program executor using execa for subprocess management.
6
6
  * Handles cmd template resolution, capture config, timeout, and abort signal.
7
7
  *
8
- * A non-zero exit code is treated as step data (the node completes and exposes
9
- * exit_code). Only non-recoverable conditions timeout, signal kill, spawn
10
- * failure, or capture parse failure fail the node via `failureKind`.
8
+ * A non-zero exit code that is not listed in the step's `expect.exit_code`
9
+ * allow-list (default `[0]`) fails the node with `failureKind: "exit"`. This
10
+ * fail-fast policy lets dynamic shell/python script breakage (syntax errors,
11
+ * missing tools, unbound paths) surface at the broken Program Step rather than
12
+ * far downstream at a Guard Node. Authors who treat exit codes as a business
13
+ * signal (test runners, grep, diff) opt out by listing the expected codes in
14
+ * `expect.exit_code`.
15
+ *
16
+ * Other non-recoverable conditions — timeout, signal kill, spawn failure,
17
+ * capture parse failure — also fail the node via `failureKind`.
11
18
  */
12
19
  export declare class ProgramExecutor implements ExecutorAdapter {
13
20
  private readonly evaluator;
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/executors/program.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;gBAEvD,SAAS,CAAC,EAAE,mBAAmB;IAIrC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IA8InF,OAAO,CAAC,UAAU;IAelB,gFAAgF;IAChF,OAAO,CAAC,WAAW;CAQpB"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/executors/program.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+C;gBAEvD,SAAS,CAAC,EAAE,mBAAmB;IAIrC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IA6JnF,OAAO,CAAC,UAAU;IAelB,gFAAgF;IAChF,OAAO,CAAC,WAAW;CAQpB"}
@@ -4,13 +4,21 @@ import { resolve } from "node:path";
4
4
  import { Ajv } from "ajv";
5
5
  import { parseDurationMs } from "@acpus/core";
6
6
  import { ExpressionEvaluator } from "../evaluator.js";
7
+ import { schemaValidationError } from "./output-preview.js";
7
8
  /**
8
9
  * Real program executor using execa for subprocess management.
9
10
  * Handles cmd template resolution, capture config, timeout, and abort signal.
10
11
  *
11
- * A non-zero exit code is treated as step data (the node completes and exposes
12
- * exit_code). Only non-recoverable conditions timeout, signal kill, spawn
13
- * failure, or capture parse failure fail the node via `failureKind`.
12
+ * A non-zero exit code that is not listed in the step's `expect.exit_code`
13
+ * allow-list (default `[0]`) fails the node with `failureKind: "exit"`. This
14
+ * fail-fast policy lets dynamic shell/python script breakage (syntax errors,
15
+ * missing tools, unbound paths) surface at the broken Program Step rather than
16
+ * far downstream at a Guard Node. Authors who treat exit codes as a business
17
+ * signal (test runners, grep, diff) opt out by listing the expected codes in
18
+ * `expect.exit_code`.
19
+ *
20
+ * Other non-recoverable conditions — timeout, signal kill, spawn failure,
21
+ * capture parse failure — also fail the node via `failureKind`.
14
22
  */
15
23
  export class ProgramExecutor {
16
24
  evaluator;
@@ -95,8 +103,21 @@ export class ProgramExecutor {
95
103
  };
96
104
  }
97
105
  const exitCode = result.exitCode ?? 0;
106
+ // ADR-0006: a non-zero exit not allow-listed by `expect.exit_code` fails
107
+ // the node fast. The default allow-list is `[0]`. This precedes capture
108
+ // and schema checks so a broken script never masquerades as a parse error.
109
+ const expect = node.metadata.expect;
110
+ const allowedExitCodes = expect?.exit_code ?? [0];
111
+ if (!allowedExitCodes.includes(exitCode)) {
112
+ const tail = stderrTail(stderr, 20);
113
+ const message = tail
114
+ ? `exit_code=${exitCode}; stderr (last ${tail.lines} line${tail.lines === 1 ? "" : "s"}):\n${tail.text}`
115
+ : `exit_code=${exitCode}`;
116
+ return { failureKind: "exit", error: message, exitCode, stdout, stderr };
117
+ }
98
118
  // Handle capture config.
99
119
  let output;
120
+ let capturedOutputRaw;
100
121
  if (capture) {
101
122
  const from = capture.from;
102
123
  const parse = capture.parse;
@@ -119,6 +140,7 @@ export class ProgramExecutor {
119
140
  else {
120
141
  raw = stdout;
121
142
  }
143
+ capturedOutputRaw = raw;
122
144
  if (parse === "json") {
123
145
  try {
124
146
  output = JSON.parse(raw);
@@ -141,7 +163,7 @@ export class ProgramExecutor {
141
163
  if (!validate(output)) {
142
164
  return {
143
165
  failureKind: "schema",
144
- error: `Output validation failed: ${this.ajv.errorsText(validate.errors)}`,
166
+ error: schemaValidationError(this.ajv.errorsText(validate.errors), capturedOutputRaw, output),
145
167
  exitCode,
146
168
  stdout,
147
169
  stderr
@@ -175,4 +197,17 @@ export class ProgramExecutor {
175
197
  return out;
176
198
  }
177
199
  }
200
+ /**
201
+ * Return the last `max` non-empty lines of stderr for inclusion in a Node-failed
202
+ * error summary. Returns undefined when there's nothing useful to show.
203
+ */
204
+ function stderrTail(stderr, max) {
205
+ if (!stderr)
206
+ return undefined;
207
+ const lines = stderr.replace(/\s+$/u, "").split(/\r?\n/u);
208
+ const trimmed = lines.slice(-max);
209
+ if (trimmed.length === 0 || (trimmed.length === 1 && trimmed[0] === ""))
210
+ return undefined;
211
+ return { text: trimmed.join("\n"), lines: trimmed.length };
212
+ }
178
213
  //# sourceMappingURL=program.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/executors/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/executors/program.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ export interface ExecutionRequest {
13
13
  nodeKey: string;
14
14
  /** Fully prepared prompt/request text for this executor call. */
15
15
  prompt?: string;
16
+ /** Fully rendered semantic session key for explicit same-Run session sharing. */
17
+ sessionKey?: string;
16
18
  /** True when continuing a previously paused node (continuation prompt). */
17
19
  continuation?: boolean;
18
20
  /** True when this is a parse/schema auto-retry iteration (continuation prompt + schema section). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oGAAoG;IACpG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oGAAoG;IACpG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7D"}
package/dist/fork.d.ts ADDED
@@ -0,0 +1,76 @@
1
+ import type { AcpusIr } from "@acpus/core";
2
+ import type { RunCheckpoint, RunState } from "./types.js";
3
+ import type { RunStore } from "./store.js";
4
+ /**
5
+ * Plan describing how a Forked Run will inherit Nodes from a prior Run.
6
+ *
7
+ * The plan is computed from the prior Run's Run Checkpoints (in `sequence`
8
+ * order) and the new Workflow Spec's compiled IR. The Forked Run inherits each
9
+ * Node whose Node Key exists in the new Spec, whose prior state is `completed`,
10
+ * and whose Node Definition Hash matches; inheritance stops at the first Node
11
+ * that fails any of these checks (the inheritance boundary). The boundary Node
12
+ * (and every Node after it) executes fresh.
13
+ */
14
+ export interface ForkPlan {
15
+ /** Run ID of the prior Run we are forking from. */
16
+ sourceRunId: string;
17
+ /** Inherited Node Keys, in checkpoint order (state==="completed", hash match). */
18
+ inheritedNodeKeys: string[];
19
+ /** The default inheritance boundary derived from checkpoint scanning. */
20
+ defaultForkOriginNodeKey: string;
21
+ /** The effective Fork Origin (operator override or default). */
22
+ forkOriginNodeKey: string;
23
+ /** Reason the boundary was placed at the default origin. */
24
+ boundaryReason: BoundaryReason;
25
+ }
26
+ export type BoundaryReason = "all-completed" | "missing-in-new-spec" | "hash-mismatch" | "non-completed" | "operator-override";
27
+ export interface MaterializeForkOptions {
28
+ /** Run ID to assign to the new Forked Run. */
29
+ forkRunId: string;
30
+ /** Frozen IR snapshot for the new Forked Run. */
31
+ ir: AcpusIr;
32
+ /** Explicit input override. When omitted, the source Run input is inherited. */
33
+ input?: Record<string, unknown>;
34
+ /** Catalog ref used to start this Forked Run, when applicable. */
35
+ workflowRef?: string;
36
+ /** Absolute Workflow Spec path used to compile this Forked Run. */
37
+ workflowSourcePath?: string;
38
+ }
39
+ export interface MaterializedFork {
40
+ /** Initial persisted state of the new Forked Run. */
41
+ run: RunState;
42
+ /** Fork Plan used to materialize the Run. */
43
+ plan: ForkPlan;
44
+ /** Validated input snapshot written for the new Forked Run. */
45
+ input: Record<string, unknown>;
46
+ }
47
+ /**
48
+ * Compute the fork plan. Pure: never mutates state and never creates Runs.
49
+ *
50
+ * @param prior prior Run metadata (must be in a terminal state)
51
+ * @param checkpoints prior Run's ordered Run Checkpoints
52
+ * @param newIr compiled IR of the new (possibly modified) Workflow Spec
53
+ * @param overrideOriginNodeKey optional operator-specified Fork Origin
54
+ */
55
+ export declare function planFork(prior: RunState, checkpoints: RunCheckpoint[], newIr: AcpusIr, overrideOriginNodeKey?: string): ForkPlan;
56
+ /**
57
+ * Materialize a Forked Run on disk. The caller is expected to have already
58
+ * called {@link planFork} and freshly initialized the new Run via
59
+ * `RunStore.initRun(...)`. This routine copies the inherited Node states +
60
+ * artifacts from the source Run into the new Run, and registers each as a
61
+ * Run Checkpoint in the new Run's index.
62
+ */
63
+ export declare function applyFork(store: RunStore, forkRunId: string, plan: ForkPlan): void;
64
+ /**
65
+ * Materialize a Forked Run on disk from a previously computed Fork Plan.
66
+ *
67
+ * This is the stateful counterpart to {@link planFork}: it creates the new Run,
68
+ * inherits the source input unless the operator supplied an override, copies
69
+ * inherited Node states and artifacts through RunStore, and persists immediate
70
+ * prior lineage on the new Run.
71
+ */
72
+ export declare function materializeFork(store: RunStore, plan: ForkPlan, options: MaterializeForkOptions): MaterializedFork;
73
+ export declare class ForkError extends Error {
74
+ constructor(message: string);
75
+ }
76
+ //# sourceMappingURL=fork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,yEAAyE;IACzE,wBAAwB,EAAE,MAAM,CAAC;IACjC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,mBAAmB,CAAC;AAExB,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,EAAE,EAAE,OAAO,CAAC;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,GAAG,EAAE,QAAQ,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AA0DD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,aAAa,EAAE,EAC5B,KAAK,EAAE,OAAO,EACd,qBAAqB,CAAC,EAAE,MAAM,GAC7B,QAAQ,CAkFV;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GACb,IAAI,CAIN;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAuClB;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B"}
package/dist/fork.js ADDED
@@ -0,0 +1,201 @@
1
+ import { hashIrNode } from "@acpus/core";
2
+ import { isNodeKeyAtOrBelow, staticNodePathFromKey } from "./keys.js";
3
+ import { validateInput } from "./validate-input.js";
4
+ /**
5
+ * Walk a checkpoint Node Key up its static ancestor chain until the ancestor
6
+ * is a top-level Node (parent is the workflow root pipeline) or the workflow
7
+ * root itself. Used so the default Fork Origin never points inside a
8
+ * Composite's body, mirroring the constraint enforced on operator overrides
9
+ * (see ADR-0007 / CONTEXT.md `Fork Origin`).
10
+ *
11
+ * Lifts ONLY when the checkpoint's static path resolves to a Node nested
12
+ * inside a Composite body (`parallel`, `fanout`, `loop`, `switch`,
13
+ * `subworkflow`). Top-level Nodes and Composite Nodes themselves are returned
14
+ * as-is. Unknown Node Keys (boundary "missing-in-new-spec") fall back to the
15
+ * checkpoint key — those will be re-resolved by the operator anyway.
16
+ */
17
+ function liftOutOfComposite(nodeKey, irIndex) {
18
+ const staticPath = staticNodePathFromKey(nodeKey);
19
+ const segments = staticPath.split("/");
20
+ for (let i = segments.length; i >= 1; i--) {
21
+ const candidatePath = segments.slice(0, i).join("/");
22
+ const entry = irIndex.get(candidatePath);
23
+ if (!entry)
24
+ continue;
25
+ if (!entry.parentKind || entry.parentKind === "pipeline") {
26
+ return candidatePath;
27
+ }
28
+ }
29
+ return nodeKey;
30
+ }
31
+ /**
32
+ * Walk the IR collecting one entry per static Node, keyed by its joined
33
+ * `nodePath`. Composite container Nodes are themselves indexed (so they can
34
+ * appear in the "valid Fork Origin" set when their parent is a pipeline);
35
+ * Nodes nested inside Composite bodies (parallel/fanout/loop/switch) are also
36
+ * indexed but flagged as not eligible for Fork Origin via parentKind.
37
+ */
38
+ function indexIrNodes(ir) {
39
+ const out = new Map();
40
+ const visit = (node, parentKind) => {
41
+ out.set(node.nodePath.join("/"), { node, parentKind });
42
+ for (const child of node.children ?? []) {
43
+ visit(child, node.kind);
44
+ }
45
+ for (const branch of node.branches ?? []) {
46
+ for (const child of branch.children) {
47
+ visit(child, node.kind);
48
+ }
49
+ }
50
+ };
51
+ visit(ir.root);
52
+ return out;
53
+ }
54
+ /**
55
+ * Compute the fork plan. Pure: never mutates state and never creates Runs.
56
+ *
57
+ * @param prior prior Run metadata (must be in a terminal state)
58
+ * @param checkpoints prior Run's ordered Run Checkpoints
59
+ * @param newIr compiled IR of the new (possibly modified) Workflow Spec
60
+ * @param overrideOriginNodeKey optional operator-specified Fork Origin
61
+ */
62
+ export function planFork(prior, checkpoints, newIr, overrideOriginNodeKey) {
63
+ if (prior.status !== "completed" && prior.status !== "failed" && prior.status !== "cancelled") {
64
+ throw new ForkError(`Cannot fork run ${prior.runId}: source Run is in non-terminal state '${prior.status}'`);
65
+ }
66
+ const irIndex = indexIrNodes(newIr);
67
+ const inheritedNodeKeys = [];
68
+ let defaultOrigin;
69
+ let boundaryReason = "all-completed";
70
+ for (const checkpoint of checkpoints) {
71
+ const staticPath = staticNodePathFromKey(checkpoint.nodeKey);
72
+ const irEntry = irIndex.get(staticPath);
73
+ if (!irEntry) {
74
+ defaultOrigin = liftOutOfComposite(checkpoint.nodeKey, irIndex);
75
+ boundaryReason = "missing-in-new-spec";
76
+ break;
77
+ }
78
+ if (checkpoint.state !== "completed") {
79
+ defaultOrigin = liftOutOfComposite(checkpoint.nodeKey, irIndex);
80
+ boundaryReason = "non-completed";
81
+ break;
82
+ }
83
+ const newHash = hashIrNode(irEntry.node);
84
+ if (newHash !== checkpoint.definitionHash) {
85
+ defaultOrigin = liftOutOfComposite(checkpoint.nodeKey, irIndex);
86
+ boundaryReason = "hash-mismatch";
87
+ break;
88
+ }
89
+ inheritedNodeKeys.push(checkpoint.nodeKey);
90
+ }
91
+ if (!defaultOrigin) {
92
+ // Every checkpoint inherited. The fork origin is the first Node not yet
93
+ // covered by checkpoints — i.e. the next not-yet-inherited Node in the new
94
+ // IR. We can't pinpoint that statically (the schedule depends on dynamic
95
+ // context), so use the workflow root as the fallback origin: applyFork
96
+ // simply does not pre-mark any further inheritance, and the interpreter
97
+ // proceeds with normal Node-by-Node execution which short-circuits on the
98
+ // already-inherited completed nodes.
99
+ defaultOrigin = newIr.root.nodePath.join("/");
100
+ }
101
+ const defaultForkOriginNodeKey = defaultOrigin;
102
+ const forkOriginNodeKey = overrideOriginNodeKey ?? defaultForkOriginNodeKey;
103
+ const reason = overrideOriginNodeKey ? "operator-override" : boundaryReason;
104
+ // Validate operator override: it MUST address a Node that exists in the new
105
+ // IR and whose parent is a pipeline (top-level or directly under a
106
+ // pipeline-kind container). Composite-body Nodes are forbidden.
107
+ if (overrideOriginNodeKey) {
108
+ const overrideStatic = staticNodePathFromKey(overrideOriginNodeKey);
109
+ const overrideEntry = irIndex.get(overrideStatic);
110
+ if (!overrideEntry) {
111
+ throw new ForkError(`Fork origin override '${overrideOriginNodeKey}' has no matching Node in the new Workflow Spec`);
112
+ }
113
+ if (overrideEntry.parentKind && overrideEntry.parentKind !== "pipeline") {
114
+ throw new ForkError(`Fork origin override '${overrideOriginNodeKey}' is inside a Composite '${overrideEntry.parentKind}' body; choose the surrounding Composite or an ancestor instead`);
115
+ }
116
+ // Drop every inherited Node from the first occurrence of the override (or
117
+ // any descendant of it) onward. Because checkpoints are monotone in
118
+ // completion time, anything appearing later in the inherited list may
119
+ // have consumed state produced at or below the override and MUST be
120
+ // re-executed. Independent siblings that happened to complete before the
121
+ // override remain inherited.
122
+ const overrideIndex = inheritedNodeKeys.findIndex((key) => {
123
+ return isNodeKeyAtOrBelow(key, overrideStatic);
124
+ });
125
+ if (overrideIndex >= 0) {
126
+ inheritedNodeKeys.splice(overrideIndex);
127
+ }
128
+ }
129
+ return {
130
+ sourceRunId: prior.runId,
131
+ inheritedNodeKeys,
132
+ defaultForkOriginNodeKey,
133
+ forkOriginNodeKey,
134
+ boundaryReason: reason
135
+ };
136
+ }
137
+ /**
138
+ * Materialize a Forked Run on disk. The caller is expected to have already
139
+ * called {@link planFork} and freshly initialized the new Run via
140
+ * `RunStore.initRun(...)`. This routine copies the inherited Node states +
141
+ * artifacts from the source Run into the new Run, and registers each as a
142
+ * Run Checkpoint in the new Run's index.
143
+ */
144
+ export function applyFork(store, forkRunId, plan) {
145
+ for (const nodeKey of plan.inheritedNodeKeys) {
146
+ store.inheritNodeFromRun(forkRunId, plan.sourceRunId, nodeKey);
147
+ }
148
+ }
149
+ /**
150
+ * Materialize a Forked Run on disk from a previously computed Fork Plan.
151
+ *
152
+ * This is the stateful counterpart to {@link planFork}: it creates the new Run,
153
+ * inherits the source input unless the operator supplied an override, copies
154
+ * inherited Node states and artifacts through RunStore, and persists immediate
155
+ * prior lineage on the new Run.
156
+ */
157
+ export function materializeFork(store, plan, options) {
158
+ const sourceInput = store.readInput(plan.sourceRunId) ?? {};
159
+ const input = validateInput(options.ir.input, options.input ?? sourceInput);
160
+ const run = store.initRun(options.forkRunId, options.ir, input, {
161
+ workflowRef: options.workflowRef,
162
+ workflowSourcePath: options.workflowSourcePath
163
+ });
164
+ try {
165
+ applyFork(store, options.forkRunId, plan);
166
+ }
167
+ catch (error) {
168
+ const meta = store.readRunMeta(options.forkRunId);
169
+ if (meta) {
170
+ meta.status = "cancelled";
171
+ meta.updatedAt = new Date().toISOString();
172
+ meta.lineage = {
173
+ sourceRunId: plan.sourceRunId,
174
+ forkOriginNodeKey: plan.forkOriginNodeKey,
175
+ inheritedNodeCount: 0
176
+ };
177
+ store.writeRunMeta(options.forkRunId, meta);
178
+ }
179
+ throw error;
180
+ }
181
+ const meta = store.readRunMeta(options.forkRunId);
182
+ if (meta) {
183
+ meta.lineage = {
184
+ sourceRunId: plan.sourceRunId,
185
+ forkOriginNodeKey: plan.forkOriginNodeKey,
186
+ inheritedNodeCount: plan.inheritedNodeKeys.length
187
+ };
188
+ store.writeRunMeta(options.forkRunId, meta);
189
+ }
190
+ // Re-read the run meta after writing lineage so the returned object
191
+ // includes the lineage (M5 fix).
192
+ const updatedMeta = store.readRunMeta(options.forkRunId);
193
+ return { run: updatedMeta ?? run, plan, input };
194
+ }
195
+ export class ForkError extends Error {
196
+ constructor(message) {
197
+ super(message);
198
+ this.name = "ForkError";
199
+ }
200
+ }
201
+ //# sourceMappingURL=fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAsDpD;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,OAAsC;IACjF,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACzD,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAOD;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,EAAW;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA4B,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,UAA2B,EAAQ,EAAE;QAChE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACf,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,KAAe,EACf,WAA4B,EAC5B,KAAc,EACd,qBAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC9F,MAAM,IAAI,SAAS,CAAC,mBAAmB,KAAK,CAAC,KAAK,0CAA0C,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,IAAI,aAAiC,CAAC;IACtC,IAAI,cAAc,GAAmB,eAAe,CAAC;IAErD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,cAAc,GAAG,qBAAqB,CAAC;YACvC,MAAM;QACR,CAAC;QACD,IAAI,UAAU,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACrC,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,cAAc,GAAG,eAAe,CAAC;YACjC,MAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,UAAU,CAAC,cAAc,EAAE,CAAC;YAC1C,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,cAAc,GAAG,eAAe,CAAC;YACjC,MAAM;QACR,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,wEAAwE;QACxE,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,0EAA0E;QAC1E,qCAAqC;QACrC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,wBAAwB,GAAG,aAAa,CAAC;IAC/C,MAAM,iBAAiB,GAAG,qBAAqB,IAAI,wBAAwB,CAAC;IAC5E,MAAM,MAAM,GAAmB,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC;IAE5F,4EAA4E;IAC5E,mEAAmE;IACnE,gEAAgE;IAChE,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,SAAS,CAAC,yBAAyB,qBAAqB,iDAAiD,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,aAAa,CAAC,UAAU,IAAI,aAAa,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACxE,MAAM,IAAI,SAAS,CACjB,yBAAyB,qBAAqB,4BAA4B,aAAa,CAAC,UAAU,iEAAiE,CACpK,CAAC;QACJ,CAAC;QACD,0EAA0E;QAC1E,oEAAoE;QACpE,sEAAsE;QACtE,oEAAoE;QACpE,yEAAyE;QACzE,6BAA6B;QAC7B,MAAM,aAAa,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YACxD,OAAO,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,KAAK;QACxB,iBAAiB;QACjB,wBAAwB;QACxB,iBAAiB;QACjB,cAAc,EAAE,MAAM;KACvB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,KAAe,EACf,SAAiB,EACjB,IAAc;IAEd,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAe,EACf,IAAc,EACd,OAA+B;IAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE;QAC9D,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG;gBACb,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,kBAAkB,EAAE,CAAC;aACtB,CAAC;YACF,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM;SAClD,CAAC;QACF,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,oEAAoE;IACpE,iCAAiC;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzD,OAAO,EAAE,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,13 @@
1
- export type { NodeState, RunStatus, NodeKeyDynamic, NodeExecutionState, RunState, ExpressionContext, ExecutorResult, ArtifactRef, InterpreterOptions, RunOptions, SupervisorConfig, SupervisorMetadata, SupervisorHealth, StartRunRequest, RunSummary, RunCleanItem, RunCleanResult, ReplayResult, ReplayMismatch, NodeDynamicContext } from "./types.js";
1
+ export type { NodeState, RunStatus, NodeKeyDynamic, NodeExecutionState, RunState, RunLineage, RunCheckpoint, ExpressionContext, ExecutorResult, ArtifactRef, InterpreterOptions, RunOptions, SupervisorConfig, SupervisorMetadata, SupervisorHealth, StartRunRequest, RunSummary, RunCleanItem, RunCleanResult, ReplayResult, ReplayMismatch, NodeDynamicContext, AgentContextUsage, AgentAttemptTelemetryState, AgentIoPreview, AgentToolCallTelemetry, AgentToolsTelemetry, AgentAttemptTelemetry, AgentTelemetry } from "./types.js";
2
2
  export type { ExecutorAdapter, ExecutionRequest } from "./executors/types.js";
3
- export { resolveNodeKey, encodeNodeKeyForFs, encodeNodeKeyForDir } from "./keys.js";
3
+ export { resolveNodeKey, parseNodeKey, staticNodePathFromKey, isNodeKeyAtOrBelow, isNodeKeyInDynamicScope, isNodeKeyBelowAnyAnchor, withNodeKeyPrefix, encodeNodeKeyForFs, encodeNodeKeyForDir } from "./keys.js";
4
+ export type { ParsedNodeKey } from "./keys.js";
4
5
  export { ExpressionEvaluator } from "./evaluator.js";
6
+ export { buildCompletedStepContext, evaluateWorkflowOutputs, evaluateOutputObject, evaluateTemplatedValue } from "./workflow-outputs.js";
5
7
  export { RunStore } from "./store.js";
6
8
  export { canTransition, transition, isTerminal, createInitialNodeState, resetFailedForRetry, resetRunningForCrashRecovery, resetAwaitingForCrashRecovery } from "./state-machine.js";
7
- export { ArtifactStore } from "./artifacts.js";
9
+ export { ArtifactStore, ArtifactReferences } from "./artifacts.js";
10
+ export type { ParsedArtifactReference } from "./artifacts.js";
8
11
  export { WorkflowInterpreter } from "./interpreter.js";
9
12
  export { InputValidationFailure, validateInput } from "./validate-input.js";
10
13
  export type { InputValidationError } from "./types.js";
@@ -14,5 +17,7 @@ export { AgentExecutor } from "./executors/agent.js";
14
17
  export { createSupervisorApp } from "./supervisor-app.js";
15
18
  export { startRunSupervisor } from "./supervisor-runner.js";
16
19
  export { ensureWorkspaceSupervisor } from "./supervisor-discovery.js";
17
- export { RunSupervisorClient } from "./client.js";
20
+ export { RunSupervisorClient, ForkRejectedError } from "./client.js";
21
+ export { planFork, applyFork, materializeFork, ForkError } from "./fork.js";
22
+ export type { ForkPlan, BoundaryReason, MaterializeForkOptions, MaterializedFork } from "./fork.js";
18
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAGrL,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzI,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAGrL,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5E,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}