@acpus/runtime 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-telemetry.d.ts +49 -0
- package/dist/agent-telemetry.d.ts.map +1 -0
- package/dist/agent-telemetry.js +255 -0
- package/dist/agent-telemetry.js.map +1 -0
- package/dist/artifacts.d.ts +16 -1
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +92 -29
- package/dist/artifacts.js.map +1 -1
- package/dist/attempt-artifacts.d.ts +35 -0
- package/dist/attempt-artifacts.d.ts.map +1 -0
- package/dist/attempt-artifacts.js +90 -0
- package/dist/attempt-artifacts.js.map +1 -0
- package/dist/client.d.ts +32 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +35 -2
- package/dist/client.js.map +1 -1
- package/dist/executors/agent.d.ts +7 -3
- package/dist/executors/agent.d.ts.map +1 -1
- package/dist/executors/agent.js +58 -61
- package/dist/executors/agent.js.map +1 -1
- package/dist/executors/mock-program.d.ts +2 -0
- package/dist/executors/mock-program.d.ts.map +1 -1
- package/dist/executors/mock-program.js +27 -6
- package/dist/executors/mock-program.js.map +1 -1
- package/dist/executors/output-preview.d.ts +2 -0
- package/dist/executors/output-preview.d.ts.map +1 -0
- package/dist/executors/output-preview.js +20 -0
- package/dist/executors/output-preview.js.map +1 -0
- package/dist/executors/program.d.ts +10 -3
- package/dist/executors/program.d.ts.map +1 -1
- package/dist/executors/program.js +39 -4
- package/dist/executors/program.js.map +1 -1
- package/dist/executors/types.d.ts +2 -0
- package/dist/executors/types.d.ts.map +1 -1
- package/dist/fork.d.ts +80 -0
- package/dist/fork.d.ts.map +1 -0
- package/dist/fork.js +203 -0
- package/dist/fork.js.map +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/interpreter.d.ts +7 -49
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +232 -461
- package/dist/interpreter.js.map +1 -1
- package/dist/keys.d.ts +50 -2
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +261 -1
- package/dist/keys.js.map +1 -1
- package/dist/run-control.d.ts +45 -0
- package/dist/run-control.d.ts.map +1 -0
- package/dist/run-control.js +255 -0
- package/dist/run-control.js.map +1 -0
- package/dist/state-machine.d.ts +5 -1
- package/dist/state-machine.d.ts.map +1 -1
- package/dist/state-machine.js +16 -1
- package/dist/state-machine.js.map +1 -1
- package/dist/store.d.ts +29 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +129 -28
- package/dist/store.js.map +1 -1
- package/dist/supervisor-app.d.ts.map +1 -1
- package/dist/supervisor-app.js +145 -42
- package/dist/supervisor-app.js.map +1 -1
- package/dist/supervisor-discovery.d.ts +1 -0
- package/dist/supervisor-discovery.d.ts.map +1 -1
- package/dist/supervisor-discovery.js +9 -15
- package/dist/supervisor-discovery.js.map +1 -1
- package/dist/types.d.ts +94 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow-outputs.d.ts +9 -0
- package/dist/workflow-outputs.d.ts.map +1 -0
- package/dist/workflow-outputs.js +59 -0
- package/dist/workflow-outputs.js.map +1 -0
- 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
|
-
//
|
|
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
|
-
|
|
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(
|
|
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 &&
|
|
62
|
-
output =
|
|
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:
|
|
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":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"mock-program.js","sourceRoot":"","sources":["../../src/executors/mock-program.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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;
|
|
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
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
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,80 @@
|
|
|
1
|
+
import type { AcpusIr, AgentOverrideWarning, AgentOverrides } 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
|
+
/** Effective submit-time Agent Overrides applied before this Run's IR was frozen. */
|
|
39
|
+
agentOverrides?: AgentOverrides;
|
|
40
|
+
/** Non-fatal warnings produced while resolving submit-time metadata. */
|
|
41
|
+
submissionWarnings?: AgentOverrideWarning[];
|
|
42
|
+
}
|
|
43
|
+
export interface MaterializedFork {
|
|
44
|
+
/** Initial persisted state of the new Forked Run. */
|
|
45
|
+
run: RunState;
|
|
46
|
+
/** Fork Plan used to materialize the Run. */
|
|
47
|
+
plan: ForkPlan;
|
|
48
|
+
/** Validated input snapshot written for the new Forked Run. */
|
|
49
|
+
input: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compute the fork plan. Pure: never mutates state and never creates Runs.
|
|
53
|
+
*
|
|
54
|
+
* @param prior prior Run metadata (must be in a terminal state)
|
|
55
|
+
* @param checkpoints prior Run's ordered Run Checkpoints
|
|
56
|
+
* @param newIr compiled IR of the new (possibly modified) Workflow Spec
|
|
57
|
+
* @param overrideOriginNodeKey optional operator-specified Fork Origin
|
|
58
|
+
*/
|
|
59
|
+
export declare function planFork(prior: RunState, checkpoints: RunCheckpoint[], newIr: AcpusIr, overrideOriginNodeKey?: string): ForkPlan;
|
|
60
|
+
/**
|
|
61
|
+
* Materialize a Forked Run on disk. The caller is expected to have already
|
|
62
|
+
* called {@link planFork} and freshly initialized the new Run via
|
|
63
|
+
* `RunStore.initRun(...)`. This routine copies the inherited Node states +
|
|
64
|
+
* artifacts from the source Run into the new Run, and registers each as a
|
|
65
|
+
* Run Checkpoint in the new Run's index.
|
|
66
|
+
*/
|
|
67
|
+
export declare function applyFork(store: RunStore, forkRunId: string, plan: ForkPlan): void;
|
|
68
|
+
/**
|
|
69
|
+
* Materialize a Forked Run on disk from a previously computed Fork Plan.
|
|
70
|
+
*
|
|
71
|
+
* This is the stateful counterpart to {@link planFork}: it creates the new Run,
|
|
72
|
+
* inherits the source input unless the operator supplied an override, copies
|
|
73
|
+
* inherited Node states and artifacts through RunStore, and persists immediate
|
|
74
|
+
* prior lineage on the new Run.
|
|
75
|
+
*/
|
|
76
|
+
export declare function materializeFork(store: RunStore, plan: ForkPlan, options: MaterializeForkOptions): MaterializedFork;
|
|
77
|
+
export declare class ForkError extends Error {
|
|
78
|
+
constructor(message: string);
|
|
79
|
+
}
|
|
80
|
+
//# 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,EAAE,oBAAoB,EAAE,cAAc,EAAU,MAAM,aAAa,CAAC;AAEzF,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;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC7C;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,CAyClB;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/fork.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
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
|
+
agentOverrides: options.agentOverrides,
|
|
164
|
+
submissionWarnings: options.submissionWarnings
|
|
165
|
+
});
|
|
166
|
+
try {
|
|
167
|
+
applyFork(store, options.forkRunId, plan);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const meta = store.readRunMeta(options.forkRunId);
|
|
171
|
+
if (meta) {
|
|
172
|
+
meta.status = "cancelled";
|
|
173
|
+
meta.updatedAt = new Date().toISOString();
|
|
174
|
+
meta.lineage = {
|
|
175
|
+
sourceRunId: plan.sourceRunId,
|
|
176
|
+
forkOriginNodeKey: plan.forkOriginNodeKey,
|
|
177
|
+
inheritedNodeCount: 0
|
|
178
|
+
};
|
|
179
|
+
store.writeRunMeta(options.forkRunId, meta);
|
|
180
|
+
}
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
const meta = store.readRunMeta(options.forkRunId);
|
|
184
|
+
if (meta) {
|
|
185
|
+
meta.lineage = {
|
|
186
|
+
sourceRunId: plan.sourceRunId,
|
|
187
|
+
forkOriginNodeKey: plan.forkOriginNodeKey,
|
|
188
|
+
inheritedNodeCount: plan.inheritedNodeKeys.length
|
|
189
|
+
};
|
|
190
|
+
store.writeRunMeta(options.forkRunId, meta);
|
|
191
|
+
}
|
|
192
|
+
// Re-read the run meta after writing lineage so the returned object
|
|
193
|
+
// includes the lineage (M5 fix).
|
|
194
|
+
const updatedMeta = store.readRunMeta(options.forkRunId);
|
|
195
|
+
return { run: updatedMeta ?? run, plan, input };
|
|
196
|
+
}
|
|
197
|
+
export class ForkError extends Error {
|
|
198
|
+
constructor(message) {
|
|
199
|
+
super(message);
|
|
200
|
+
this.name = "ForkError";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=fork.js.map
|
package/dist/fork.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fork.js","sourceRoot":"","sources":["../src/fork.ts"],"names":[],"mappings":"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"}
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|