@acpus/core 0.5.3 → 0.5.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.
- package/dist/agent-overrides.d.ts +0 -1
- package/dist/agent-overrides.d.ts.map +1 -1
- package/dist/agent-overrides.js +0 -36
- package/dist/agent-overrides.js.map +1 -1
- package/dist/cel-ast.d.ts +3 -4
- package/dist/cel-ast.d.ts.map +1 -1
- package/dist/cel-ast.js +41 -15
- package/dist/cel-ast.js.map +1 -1
- package/dist/cel-environment.d.ts +6 -0
- package/dist/cel-environment.d.ts.map +1 -0
- package/dist/cel-environment.js +44 -0
- package/dist/cel-environment.js.map +1 -0
- package/dist/compiler.js +27 -89
- package/dist/compiler.js.map +1 -1
- package/dist/expression-scope.d.ts.map +1 -1
- package/dist/expression-scope.js +78 -20
- package/dist/expression-scope.js.map +1 -1
- package/dist/expressions-shared.d.ts +1 -0
- package/dist/expressions-shared.d.ts.map +1 -1
- package/dist/expressions-shared.js +5 -0
- package/dist/expressions-shared.js.map +1 -1
- package/dist/expressions.d.ts +2 -4
- package/dist/expressions.d.ts.map +1 -1
- package/dist/expressions.js +58 -43
- package/dist/expressions.js.map +1 -1
- package/dist/hash.js +5 -4
- package/dist/hash.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -21,7 +21,6 @@ export interface ApplyAgentOverridesResult {
|
|
|
21
21
|
agentOverrides: AgentOverrides;
|
|
22
22
|
warnings: AgentOverrideWarning[];
|
|
23
23
|
}
|
|
24
|
-
export declare function parseAgentOverridesInput(value: string | undefined, cwd?: string): AgentOverrides | undefined;
|
|
25
24
|
export declare function parseWorkflowSpecForOverrides(source: string): WorkflowSpec;
|
|
26
25
|
export declare function serializeWorkflowSpecForOverrides(spec: WorkflowSpec): string;
|
|
27
26
|
export declare function emptyAgentOverrideResult(spec?: WorkflowSpec): ApplyAgentOverridesResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-overrides.d.ts","sourceRoot":"","sources":["../src/agent-overrides.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-overrides.d.ts","sourceRoot":"","sources":["../src/agent-overrides.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,qBAAqB,GAAG,kCAAkC,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,YAAY,CAAC;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAID,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAM1E;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,yBAAyB,CAMvF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,yBAAyB,GAAG;IAC7E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAC7C,CAKA;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAoB,GAAG,cAAc,CAuDhG;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CAmC3B"}
|
package/dist/agent-overrides.js
CHANGED
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import { extname, resolve } from "node:path";
|
|
3
1
|
import { parse as parseYaml } from "yaml";
|
|
4
2
|
import { isRecord } from "./schema/helpers.js";
|
|
5
3
|
const SUPPORTED_OVERRIDE_FIELDS = new Set(["type", "use", "model", "cwd", "env", "policy"]);
|
|
6
|
-
const SUPPORTED_FILE_EXTENSIONS = new Set([".json", ".yaml", ".yml"]);
|
|
7
|
-
export function parseAgentOverridesInput(value, cwd = process.cwd()) {
|
|
8
|
-
if (value === undefined)
|
|
9
|
-
return undefined;
|
|
10
|
-
const possiblePath = resolve(cwd, value);
|
|
11
|
-
if (existsSync(possiblePath)) {
|
|
12
|
-
const stat = statSync(possiblePath);
|
|
13
|
-
if (stat.isDirectory()) {
|
|
14
|
-
throw new Error("--agents must be a JSON/YAML file or inline JSON/YAML object, not a directory.");
|
|
15
|
-
}
|
|
16
|
-
const extension = extname(possiblePath).toLowerCase();
|
|
17
|
-
if (!SUPPORTED_FILE_EXTENSIONS.has(extension)) {
|
|
18
|
-
throw new Error("--agents file must use .json, .yaml, or .yml.");
|
|
19
|
-
}
|
|
20
|
-
const contents = readFileSync(possiblePath, "utf8");
|
|
21
|
-
const parsed = extension === ".json" ? JSON.parse(contents) : parseYaml(contents);
|
|
22
|
-
return validateAgentOverrides(parsed, "--agents");
|
|
23
|
-
}
|
|
24
|
-
if (looksLikePath(value)) {
|
|
25
|
-
throw new Error(`--agents file not found: ${value}`);
|
|
26
|
-
}
|
|
27
|
-
return validateAgentOverrides(parseYaml(value), "--agents");
|
|
28
|
-
}
|
|
29
4
|
export function parseWorkflowSpecForOverrides(source) {
|
|
30
5
|
const parsed = parseYaml(source);
|
|
31
6
|
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
@@ -200,15 +175,4 @@ function cloneAgents(agents) {
|
|
|
200
175
|
}
|
|
201
176
|
]));
|
|
202
177
|
}
|
|
203
|
-
function looksLikePath(value) {
|
|
204
|
-
const trimmed = value.trim();
|
|
205
|
-
if (trimmed.startsWith("{") || trimmed.includes("\n") || /^[A-Za-z0-9_.-]+\s*:/.test(trimmed)) {
|
|
206
|
-
return false;
|
|
207
|
-
}
|
|
208
|
-
return trimmed.startsWith(".")
|
|
209
|
-
|| trimmed.startsWith("/")
|
|
210
|
-
|| trimmed.startsWith("~")
|
|
211
|
-
|| trimmed.includes("/")
|
|
212
|
-
|| SUPPORTED_FILE_EXTENSIONS.has(extname(trimmed).toLowerCase());
|
|
213
|
-
}
|
|
214
178
|
//# sourceMappingURL=agent-overrides.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-overrides.js","sourceRoot":"","sources":["../src/agent-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-overrides.js","sourceRoot":"","sources":["../src/agent-overrides.ts"],"names":[],"mappings":"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"}
|
package/dist/cel-ast.d.ts
CHANGED
|
@@ -17,14 +17,13 @@ export interface ExpressionReference {
|
|
|
17
17
|
}
|
|
18
18
|
export interface ExtractResult {
|
|
19
19
|
references: ExpressionReference[];
|
|
20
|
-
/** Names of standalone function calls
|
|
20
|
+
/** Names of standalone function calls. Used only for Acpus shape checks. */
|
|
21
21
|
functions: string[];
|
|
22
22
|
parseError?: string;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* Parse a CEL source string and extract every identifier-rooted access chain
|
|
26
|
-
* standalone function-call
|
|
27
|
-
* expressions, function arguments, operators, lists, and maps.
|
|
25
|
+
* Parse a CEL source string and extract every identifier-rooted access chain and
|
|
26
|
+
* standalone function-call name needed by Acpus workflow validation.
|
|
28
27
|
*
|
|
29
28
|
* Fail-quiet by contract: on parse failure we return the error text (so the
|
|
30
29
|
* caller can emit EXPR_PARSE) and empty results rather than throwing.
|
package/dist/cel-ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cel-ast.d.ts","sourceRoot":"","sources":["../src/cel-ast.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnF,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,
|
|
1
|
+
{"version":3,"file":"cel-ast.d.ts","sourceRoot":"","sources":["../src/cel-ast.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnF,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAY/D;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAMlE;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAEnE"}
|
package/dist/cel-ast.js
CHANGED
|
@@ -4,9 +4,8 @@ function isAstNode(value) {
|
|
|
4
4
|
return typeof value === "object" && value !== null && typeof value.op === "string" && "args" in value;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
* Parse a CEL source string and extract every identifier-rooted access chain
|
|
8
|
-
* standalone function-call
|
|
9
|
-
* expressions, function arguments, operators, lists, and maps.
|
|
7
|
+
* Parse a CEL source string and extract every identifier-rooted access chain and
|
|
8
|
+
* standalone function-call name needed by Acpus workflow validation.
|
|
10
9
|
*
|
|
11
10
|
* Fail-quiet by contract: on parse failure we return the error text (so the
|
|
12
11
|
* caller can emit EXPR_PARSE) and empty results rather than throwing.
|
|
@@ -21,7 +20,7 @@ export function extractReferences(source) {
|
|
|
21
20
|
}
|
|
22
21
|
const references = [];
|
|
23
22
|
const functions = [];
|
|
24
|
-
collect(ast, references, functions);
|
|
23
|
+
collect(ast, references, functions, new Set());
|
|
25
24
|
return { references, functions };
|
|
26
25
|
}
|
|
27
26
|
/** Build the canonical source spelling of a reference (index segments shown as `[]`). */
|
|
@@ -37,18 +36,20 @@ export function isStaticReference(ref) {
|
|
|
37
36
|
return ref.segments.every((seg) => seg.kind === "field");
|
|
38
37
|
}
|
|
39
38
|
/** Resolve a node into a chain if it is rooted at an identifier; else null. */
|
|
40
|
-
function asChain(node) {
|
|
39
|
+
function asChain(node, scope) {
|
|
41
40
|
if (node.op === "id") {
|
|
42
41
|
const name = node.args;
|
|
43
42
|
if (typeof name !== "string")
|
|
44
43
|
return null;
|
|
44
|
+
if (scope.has(name))
|
|
45
|
+
return null;
|
|
45
46
|
return { root: normalizeRoot(name), segments: [], inner: [] };
|
|
46
47
|
}
|
|
47
48
|
if (node.op === ".") {
|
|
48
49
|
const [base, field] = node.args;
|
|
49
50
|
if (!isAstNode(base) || typeof field !== "string")
|
|
50
51
|
return null;
|
|
51
|
-
const baseChain = asChain(base);
|
|
52
|
+
const baseChain = asChain(base, scope);
|
|
52
53
|
if (!baseChain)
|
|
53
54
|
return null;
|
|
54
55
|
return {
|
|
@@ -61,7 +62,7 @@ function asChain(node) {
|
|
|
61
62
|
const [base, indexNode] = node.args;
|
|
62
63
|
if (!isAstNode(base))
|
|
63
64
|
return null;
|
|
64
|
-
const baseChain = asChain(base);
|
|
65
|
+
const baseChain = asChain(base, scope);
|
|
65
66
|
if (!baseChain)
|
|
66
67
|
return null;
|
|
67
68
|
return {
|
|
@@ -72,7 +73,7 @@ function asChain(node) {
|
|
|
72
73
|
}
|
|
73
74
|
return null;
|
|
74
75
|
}
|
|
75
|
-
function collect(node, refs, functions) {
|
|
76
|
+
function collect(node, refs, functions, scope) {
|
|
76
77
|
// Standalone function call: args = [name, [argNodes]]. Method (receiver)
|
|
77
78
|
// calls (`rcall`) are not name-validated, matching prior regex behavior, but
|
|
78
79
|
// their operands are still walked below.
|
|
@@ -83,28 +84,53 @@ function collect(node, refs, functions) {
|
|
|
83
84
|
if (Array.isArray(callArgs)) {
|
|
84
85
|
for (const arg of callArgs)
|
|
85
86
|
if (isAstNode(arg))
|
|
86
|
-
collect(arg, refs, functions);
|
|
87
|
+
collect(arg, refs, functions, scope);
|
|
87
88
|
}
|
|
88
89
|
return;
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
+
// Receiver calls may be CEL macros. Their local binding semantics are owned by
|
|
92
|
+
// cel-js type checking; reference extraction keeps only workflow dependencies.
|
|
93
|
+
if (node.op === "rcall") {
|
|
94
|
+
const [name, receiver, params] = node.args;
|
|
95
|
+
if (isAstNode(receiver))
|
|
96
|
+
collect(receiver, refs, functions, scope);
|
|
97
|
+
if (Array.isArray(params)) {
|
|
98
|
+
const scoped = macroScope(name, params, scope);
|
|
99
|
+
if (scoped)
|
|
100
|
+
walkChildren(params.slice(1), refs, functions, scoped);
|
|
101
|
+
else
|
|
102
|
+
walkChildren(params, refs, functions, scope);
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const chain = asChain(node, scope);
|
|
91
107
|
if (chain) {
|
|
92
108
|
refs.push({ root: chain.root, segments: chain.segments });
|
|
93
109
|
for (const innerNode of chain.inner)
|
|
94
|
-
collect(innerNode, refs, functions);
|
|
110
|
+
collect(innerNode, refs, functions, scope);
|
|
95
111
|
return;
|
|
96
112
|
}
|
|
97
|
-
walkChildren(node.args, refs, functions);
|
|
113
|
+
walkChildren(node.args, refs, functions, scope);
|
|
114
|
+
}
|
|
115
|
+
const BINDING_MACROS = new Set(["all", "exists", "exists_one", "filter", "map", "bind"]);
|
|
116
|
+
function macroScope(name, params, scope) {
|
|
117
|
+
if (typeof name !== "string" || !BINDING_MACROS.has(name))
|
|
118
|
+
return null;
|
|
119
|
+
const first = params[0];
|
|
120
|
+
if (!isAstNode(first) || first.op !== "id")
|
|
121
|
+
return null;
|
|
122
|
+
const localName = first.args;
|
|
123
|
+
return typeof localName === "string" ? new Set([...scope, localName]) : null;
|
|
98
124
|
}
|
|
99
125
|
/** Recurse into any nested AST nodes held in an args payload. */
|
|
100
|
-
function walkChildren(args, refs, functions) {
|
|
126
|
+
function walkChildren(args, refs, functions, scope) {
|
|
101
127
|
if (isAstNode(args)) {
|
|
102
|
-
collect(args, refs, functions);
|
|
128
|
+
collect(args, refs, functions, scope);
|
|
103
129
|
return;
|
|
104
130
|
}
|
|
105
131
|
if (Array.isArray(args)) {
|
|
106
132
|
for (const child of args)
|
|
107
|
-
walkChildren(child, refs, functions);
|
|
133
|
+
walkChildren(child, refs, functions, scope);
|
|
108
134
|
}
|
|
109
135
|
}
|
|
110
136
|
/** The parser rewrites `loop.` → `loop_ctx.`; surface the logical root again. */
|
package/dist/cel-ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cel-ast.js","sourceRoot":"","sources":["../src/cel-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA6B3D,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAAiB,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAK,KAAiB,CAAC;AAClI,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"cel-ast.js","sourceRoot":"","sources":["../src/cel-ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cel-environment.d.ts","sourceRoot":"","sources":["../src/cel-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAwB7H"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Environment } from "@marcbachmann/cel-js";
|
|
2
|
+
export function createAcpusCelEnvironment(options) {
|
|
3
|
+
const env = new Environment({ unlistedVariablesAreDyn: options?.unlistedVariablesAreDyn ?? false });
|
|
4
|
+
for (const root of ["input", "steps", "workflow", "loop_ctx", "item", "item_id", "item_index", "run_id"]) {
|
|
5
|
+
env.registerVariable(root, "dyn");
|
|
6
|
+
}
|
|
7
|
+
env.registerFunction("now(): string", () => options?.nowTimestamp ?? new Date().toISOString());
|
|
8
|
+
env.registerFunction("len(string): int", (str) => BigInt(str.length));
|
|
9
|
+
env.registerFunction("len(list): int", (arr) => BigInt(arr.length));
|
|
10
|
+
env.registerFunction("startsWith(string, string): bool", (str, prefix) => str.startsWith(prefix));
|
|
11
|
+
env.registerFunction("matches(string, string): bool", (str, pattern) => {
|
|
12
|
+
try {
|
|
13
|
+
return new RegExp(pattern).test(str);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
env.registerFunction("coalesce(dyn, dyn): dyn", (a, b) => (a !== null && a !== undefined) ? a : b);
|
|
20
|
+
env.registerFunction("coalesce(dyn, dyn, dyn): dyn", (a, b, c) => {
|
|
21
|
+
if (a !== null && a !== undefined)
|
|
22
|
+
return a;
|
|
23
|
+
if (b !== null && b !== undefined)
|
|
24
|
+
return b;
|
|
25
|
+
return c;
|
|
26
|
+
});
|
|
27
|
+
env.registerFunction("json(dyn): string", (value) => JSON.stringify(normalizeForJson(value)));
|
|
28
|
+
return env;
|
|
29
|
+
}
|
|
30
|
+
function normalizeForJson(value) {
|
|
31
|
+
if (typeof value === "bigint")
|
|
32
|
+
return Number(value);
|
|
33
|
+
if (Array.isArray(value))
|
|
34
|
+
return value.map(normalizeForJson);
|
|
35
|
+
if (value instanceof Map)
|
|
36
|
+
return normalizeForJson(Object.fromEntries(value));
|
|
37
|
+
if (value !== null && typeof value === "object") {
|
|
38
|
+
return Object.fromEntries(Object.keys(value)
|
|
39
|
+
.sort()
|
|
40
|
+
.map((key) => [key, normalizeForJson(value[key])]));
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=cel-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cel-environment.js","sourceRoot":"","sources":["../src/cel-environment.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler.js
CHANGED
|
@@ -25,7 +25,7 @@ export function compileWorkflow(source, options = {}) {
|
|
|
25
25
|
const compileOptions = { ...options, sourcePath };
|
|
26
26
|
const expanded = expandIncludes(parsed, compileOptions, diagnostics, new Set());
|
|
27
27
|
validateWithSchema(expanded, diagnostics);
|
|
28
|
-
const
|
|
28
|
+
const stepIds = collectStepIds(expanded.workflow.steps, diagnostics);
|
|
29
29
|
const context = {
|
|
30
30
|
diagnostics,
|
|
31
31
|
stepIds,
|
|
@@ -44,7 +44,7 @@ export function compileWorkflow(source, options = {}) {
|
|
|
44
44
|
implicit: true
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
const expressionCollector = createExpressionCollector(diagnostics, stepIds
|
|
47
|
+
const expressionCollector = createExpressionCollector(diagnostics, stepIds);
|
|
48
48
|
expressionCollector.visit(expanded.input ?? {}, "$.input");
|
|
49
49
|
expressionCollector.visit(expanded.agents ?? {}, "$.agents");
|
|
50
50
|
expressionCollector.visit(expanded.workflow.steps, "$.workflow.steps");
|
|
@@ -393,38 +393,12 @@ function validateAgentStep(step, path, context) {
|
|
|
393
393
|
if (step.retry !== undefined) {
|
|
394
394
|
validateRetry(step.retry, path, context);
|
|
395
395
|
}
|
|
396
|
-
|
|
397
|
-
// output.schema deprecation check (semantic, not structural)
|
|
398
|
-
if ("schema" in step.output) {
|
|
399
|
-
context.diagnostics.error("OUTPUT_SHAPE", "The 'schema' key in agent output is no longer supported as a JSON Schema escape hatch. Use the Acpus Schema DSL directly (e.g. output: { field: string }).", `${path}.output.schema`);
|
|
400
|
-
}
|
|
401
|
-
const { schema, errors } = compileSchemaDsl(step.output);
|
|
402
|
-
for (const err of errors) {
|
|
403
|
-
context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
|
|
404
|
-
}
|
|
405
|
-
if (errors.length === 0) {
|
|
406
|
-
validateJsonSchema(schema, `${path}.output`, context);
|
|
407
|
-
}
|
|
408
|
-
step.output = schema;
|
|
409
|
-
}
|
|
396
|
+
compileOutputSchema(step, path, context);
|
|
410
397
|
}
|
|
411
398
|
function validateProgramStep(step, path, context) {
|
|
412
|
-
|
|
413
|
-
// output.schema deprecation check (semantic, not structural)
|
|
414
|
-
if ("schema" in step.output) {
|
|
415
|
-
context.diagnostics.error("OUTPUT_SHAPE", "The 'schema' key in program output is no longer supported as a JSON Schema escape hatch. Use the Acpus Schema DSL directly (e.g. output: { field: string }).", `${path}.output.schema`);
|
|
416
|
-
}
|
|
417
|
-
const { schema, errors } = compileSchemaDsl(step.output);
|
|
418
|
-
for (const err of errors) {
|
|
419
|
-
context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
|
|
420
|
-
}
|
|
421
|
-
if (errors.length === 0) {
|
|
422
|
-
validateJsonSchema(schema, `${path}.output`, context);
|
|
423
|
-
}
|
|
424
|
-
step.output = schema;
|
|
425
|
-
}
|
|
399
|
+
const outputSchema = compileOutputSchema(step, path, context);
|
|
426
400
|
// Enforce: output schema requires capture.parse: json
|
|
427
|
-
if (
|
|
401
|
+
if (outputSchema) {
|
|
428
402
|
const capture = step.capture;
|
|
429
403
|
if (!capture || capture.parse !== "json") {
|
|
430
404
|
context.diagnostics.error("OUTPUT_REQUIRES_JSON", "run: program output schema requires capture.parse: json.", `${path}.output`);
|
|
@@ -464,35 +438,7 @@ function validateSignalStep(step, path, context) {
|
|
|
464
438
|
context.diagnostics.error("SIGNAL_TIMEOUT", "signal.timeout must be a valid duration string (e.g. 5m, 2h, 30s).", `${path}.timeout`);
|
|
465
439
|
}
|
|
466
440
|
}
|
|
467
|
-
|
|
468
|
-
// Program steps. When omitted (or an empty map), the injected payload is
|
|
469
|
-
// accepted unvalidated.
|
|
470
|
-
let outputSchema;
|
|
471
|
-
if (isRecord(step.output) && Object.keys(step.output).length > 0) {
|
|
472
|
-
if ("schema" in step.output) {
|
|
473
|
-
context.diagnostics.error("OUTPUT_SHAPE", "The 'schema' key in signal output is no longer supported as a JSON Schema escape hatch. Use the Acpus Schema DSL directly (e.g. output: { field: string }).", `${path}.output.schema`);
|
|
474
|
-
}
|
|
475
|
-
const { schema, errors } = compileSchemaDsl(step.output);
|
|
476
|
-
for (const err of errors) {
|
|
477
|
-
context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
|
|
478
|
-
}
|
|
479
|
-
if (errors.length === 0) {
|
|
480
|
-
validateJsonSchema(schema, `${path}.output`, context);
|
|
481
|
-
outputSchema = schema;
|
|
482
|
-
step.output = schema;
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
// Guarantee the IR invariant: metadata.output is either undefined or a
|
|
486
|
-
// valid compiled JSON Schema — never a partial schema or raw DSL.
|
|
487
|
-
step.output = undefined;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
else {
|
|
491
|
-
// `output: {}` (empty map) means "accept any object", identical to omitting
|
|
492
|
-
// output. Clear it so metadata.output stays undefined rather than compiling
|
|
493
|
-
// to a schema that rejects every non-empty payload.
|
|
494
|
-
delete step.output;
|
|
495
|
-
}
|
|
441
|
+
const outputSchema = compileOutputSchema(step, path, context);
|
|
496
442
|
// When `on_timeout: default`, validate the literal `default` payload at compile
|
|
497
443
|
// time so an invalid default is a lint error, not a runtime surprise.
|
|
498
444
|
if (step.on_timeout === "default" && isRecord(step.default) && outputSchema) {
|
|
@@ -508,6 +454,26 @@ function validateSignalStep(step, path, context) {
|
|
|
508
454
|
}
|
|
509
455
|
}
|
|
510
456
|
}
|
|
457
|
+
function compileOutputSchema(step, path, context) {
|
|
458
|
+
if (!isRecord(step.output) || Object.keys(step.output).length === 0) {
|
|
459
|
+
delete step.output;
|
|
460
|
+
return undefined;
|
|
461
|
+
}
|
|
462
|
+
if ("schema" in step.output) {
|
|
463
|
+
context.diagnostics.error("OUTPUT_SHAPE", "The 'schema' key in output is no longer supported as a JSON Schema escape hatch. Use the Acpus Schema DSL directly (e.g. output: { field: string }).", `${path}.output.schema`);
|
|
464
|
+
}
|
|
465
|
+
const { schema, errors } = compileSchemaDsl(step.output);
|
|
466
|
+
for (const err of errors) {
|
|
467
|
+
context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
|
|
468
|
+
}
|
|
469
|
+
if (errors.length > 0) {
|
|
470
|
+
delete step.output;
|
|
471
|
+
return undefined;
|
|
472
|
+
}
|
|
473
|
+
validateJsonSchema(schema, `${path}.output`, context);
|
|
474
|
+
step.output = schema;
|
|
475
|
+
return schema;
|
|
476
|
+
}
|
|
511
477
|
function validateRetry(retry, path, context) {
|
|
512
478
|
// Duration format validation for backoff (not expressible in JSON Schema)
|
|
513
479
|
if (isRecord(retry) && retry.backoff !== undefined) {
|
|
@@ -544,32 +510,8 @@ function validateJsonSchema(schema, path, context) {
|
|
|
544
510
|
context.diagnostics.error("JSON_SCHEMA_INVALID", `Invalid JSON Schema: ${message}`, path);
|
|
545
511
|
}
|
|
546
512
|
}
|
|
547
|
-
function inferStepKind(step) {
|
|
548
|
-
if (Array.isArray(step.pipeline))
|
|
549
|
-
return "pipeline";
|
|
550
|
-
if (step.run === "agent")
|
|
551
|
-
return "run.agent";
|
|
552
|
-
if (step.run === "program")
|
|
553
|
-
return "run.program";
|
|
554
|
-
if (Array.isArray(step.parallel))
|
|
555
|
-
return "parallel";
|
|
556
|
-
if (isRecord(step.fanout))
|
|
557
|
-
return "fanout";
|
|
558
|
-
if (isRecord(step.switch))
|
|
559
|
-
return "switch";
|
|
560
|
-
if (isRecord(step.loop))
|
|
561
|
-
return "loop";
|
|
562
|
-
if (isRecord(step.guard))
|
|
563
|
-
return "guard";
|
|
564
|
-
if (step.run === "signal")
|
|
565
|
-
return "run.signal";
|
|
566
|
-
if (typeof step.subworkflow === "string")
|
|
567
|
-
return "subworkflow";
|
|
568
|
-
return undefined;
|
|
569
|
-
}
|
|
570
513
|
function collectStepIds(steps, diagnostics) {
|
|
571
514
|
const ids = new Set();
|
|
572
|
-
const kinds = new Map();
|
|
573
515
|
const visit = (items, path) => {
|
|
574
516
|
items.forEach((step, index) => {
|
|
575
517
|
const stepPath = `${path}[${index}]`;
|
|
@@ -578,10 +520,6 @@ function collectStepIds(steps, diagnostics) {
|
|
|
578
520
|
diagnostics.error("STEP_ID_DUPLICATE", `Duplicate step id '${step.id}'.`, `${stepPath}.id`);
|
|
579
521
|
}
|
|
580
522
|
ids.add(step.id);
|
|
581
|
-
const kind = inferStepKind(step);
|
|
582
|
-
if (kind) {
|
|
583
|
-
kinds.set(step.id, kind);
|
|
584
|
-
}
|
|
585
523
|
}
|
|
586
524
|
if (Array.isArray(step.pipeline)) {
|
|
587
525
|
visit(asPlainSteps(step.pipeline), `${stepPath}.pipeline`);
|
|
@@ -614,7 +552,7 @@ function collectStepIds(steps, diagnostics) {
|
|
|
614
552
|
});
|
|
615
553
|
};
|
|
616
554
|
visit(steps, "$.workflow.steps");
|
|
617
|
-
return
|
|
555
|
+
return ids;
|
|
618
556
|
}
|
|
619
557
|
function keyTemplate(nodePath) {
|
|
620
558
|
return {
|