@acpus/core 0.5.6 → 0.7.0-alpha.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 (210) hide show
  1. package/README.md +128 -4
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/graph/builder.d.ts +103 -0
  4. package/dist/graph/builder.d.ts.map +1 -0
  5. package/dist/graph/builder.js +209 -0
  6. package/dist/graph/builder.js.map +1 -0
  7. package/dist/graph/lowering.d.ts +8 -0
  8. package/dist/graph/lowering.d.ts.map +1 -0
  9. package/dist/graph/lowering.js +45 -0
  10. package/dist/graph/lowering.js.map +1 -0
  11. package/dist/graph/refs.d.ts +11 -0
  12. package/dist/graph/refs.d.ts.map +1 -0
  13. package/dist/graph/refs.js +12 -0
  14. package/dist/graph/refs.js.map +1 -0
  15. package/dist/graph/scope.d.ts +21 -0
  16. package/dist/graph/scope.d.ts.map +1 -0
  17. package/dist/graph/scope.js +22 -0
  18. package/dist/graph/scope.js.map +1 -0
  19. package/dist/index.d.ts +11 -25
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -15
  22. package/dist/index.js.map +1 -1
  23. package/dist/internal/symbols.d.ts +9 -0
  24. package/dist/internal/symbols.d.ts.map +1 -0
  25. package/dist/internal/symbols.js +9 -0
  26. package/dist/internal/symbols.js.map +1 -0
  27. package/dist/internal/type-utils.d.ts +7 -0
  28. package/dist/internal/type-utils.d.ts.map +1 -0
  29. package/dist/internal/type-utils.js +8 -0
  30. package/dist/internal/type-utils.js.map +1 -0
  31. package/dist/ir/types.d.ts +218 -0
  32. package/dist/ir/types.d.ts.map +1 -0
  33. package/dist/ir/types.js.map +1 -0
  34. package/dist/ir/validator.d.ts +3 -0
  35. package/dist/ir/validator.d.ts.map +1 -0
  36. package/dist/ir/validator.js +671 -0
  37. package/dist/ir/validator.js.map +1 -0
  38. package/dist/ir.d.ts +3 -0
  39. package/dist/ir.d.ts.map +1 -0
  40. package/dist/ir.js +2 -0
  41. package/dist/ir.js.map +1 -0
  42. package/dist/nodes/composite/fanout.d.ts +24 -0
  43. package/dist/nodes/composite/fanout.d.ts.map +1 -0
  44. package/dist/nodes/composite/fanout.js +24 -0
  45. package/dist/nodes/composite/fanout.js.map +1 -0
  46. package/dist/nodes/composite/if.d.ts +12 -0
  47. package/dist/nodes/composite/if.d.ts.map +1 -0
  48. package/dist/nodes/composite/if.js +13 -0
  49. package/dist/nodes/composite/if.js.map +1 -0
  50. package/dist/nodes/composite/loop.d.ts +17 -0
  51. package/dist/nodes/composite/loop.d.ts.map +1 -0
  52. package/dist/nodes/composite/loop.js +22 -0
  53. package/dist/nodes/composite/loop.js.map +1 -0
  54. package/dist/nodes/composite/parallel.d.ts +29 -0
  55. package/dist/nodes/composite/parallel.d.ts.map +1 -0
  56. package/dist/nodes/composite/parallel.js +18 -0
  57. package/dist/nodes/composite/parallel.js.map +1 -0
  58. package/dist/nodes/composite/shared.d.ts +38 -0
  59. package/dist/nodes/composite/shared.d.ts.map +1 -0
  60. package/dist/nodes/composite/shared.js +2 -0
  61. package/dist/nodes/composite/shared.js.map +1 -0
  62. package/dist/nodes/composite/switch.d.ts +22 -0
  63. package/dist/nodes/composite/switch.d.ts.map +1 -0
  64. package/dist/nodes/composite/switch.js +12 -0
  65. package/dist/nodes/composite/switch.js.map +1 -0
  66. package/dist/nodes/control/assert.d.ts +10 -0
  67. package/dist/nodes/control/assert.d.ts.map +1 -0
  68. package/dist/nodes/control/assert.js +14 -0
  69. package/dist/nodes/control/assert.js.map +1 -0
  70. package/dist/nodes/leaf/agent.d.ts +63 -0
  71. package/dist/nodes/leaf/agent.d.ts.map +1 -0
  72. package/dist/nodes/leaf/agent.js +56 -0
  73. package/dist/nodes/leaf/agent.js.map +1 -0
  74. package/dist/nodes/leaf/shared.d.ts +11 -0
  75. package/dist/nodes/leaf/shared.d.ts.map +1 -0
  76. package/dist/nodes/leaf/shared.js +2 -0
  77. package/dist/nodes/leaf/shared.js.map +1 -0
  78. package/dist/nodes/leaf/signal.d.ts +27 -0
  79. package/dist/nodes/leaf/signal.d.ts.map +1 -0
  80. package/dist/nodes/leaf/signal.js +18 -0
  81. package/dist/nodes/leaf/signal.js.map +1 -0
  82. package/dist/nodes/leaf/task.d.ts +71 -0
  83. package/dist/nodes/leaf/task.d.ts.map +1 -0
  84. package/dist/nodes/leaf/task.js +88 -0
  85. package/dist/nodes/leaf/task.js.map +1 -0
  86. package/dist/runtime/dollar.d.ts +42 -0
  87. package/dist/runtime/dollar.d.ts.map +1 -0
  88. package/dist/runtime/dollar.js +82 -0
  89. package/dist/runtime/dollar.js.map +1 -0
  90. package/dist/runtime/secret.d.ts +10 -0
  91. package/dist/runtime/secret.d.ts.map +1 -0
  92. package/dist/runtime/secret.js +12 -0
  93. package/dist/runtime/secret.js.map +1 -0
  94. package/dist/runtime/task-context.d.ts +28 -0
  95. package/dist/runtime/task-context.d.ts.map +1 -0
  96. package/dist/runtime/task-context.js +2 -0
  97. package/dist/runtime/task-context.js.map +1 -0
  98. package/dist/runtime.d.ts +5 -0
  99. package/dist/runtime.d.ts.map +1 -0
  100. package/dist/runtime.js +3 -0
  101. package/dist/runtime.js.map +1 -0
  102. package/dist/schema/index.d.ts +6 -2
  103. package/dist/schema/index.d.ts.map +1 -1
  104. package/dist/schema/index.js +3 -2
  105. package/dist/schema/index.js.map +1 -1
  106. package/dist/schema/lower.d.ts +25 -0
  107. package/dist/schema/lower.d.ts.map +1 -0
  108. package/dist/schema/lower.js +198 -0
  109. package/dist/schema/lower.js.map +1 -0
  110. package/dist/schema/validate.d.ts +18 -0
  111. package/dist/schema/validate.d.ts.map +1 -0
  112. package/dist/schema/validate.js +22 -0
  113. package/dist/schema/validate.js.map +1 -0
  114. package/dist/schema/zod.d.ts +17 -0
  115. package/dist/schema/zod.d.ts.map +1 -0
  116. package/dist/schema/zod.js +15 -0
  117. package/dist/schema/zod.js.map +1 -0
  118. package/dist/schema.d.ts +3 -0
  119. package/dist/schema.d.ts.map +1 -0
  120. package/dist/schema.js +2 -0
  121. package/dist/schema.js.map +1 -0
  122. package/dist/template/template.d.ts +5 -0
  123. package/dist/template/template.d.ts.map +1 -0
  124. package/dist/template/template.js +10 -0
  125. package/dist/template/template.js.map +1 -0
  126. package/dist/workflow.d.ts +3 -0
  127. package/dist/workflow.d.ts.map +1 -0
  128. package/dist/workflow.js +2 -0
  129. package/dist/workflow.js.map +1 -0
  130. package/package.json +35 -20
  131. package/dist/agent-overrides.d.ts +0 -33
  132. package/dist/agent-overrides.d.ts.map +0 -1
  133. package/dist/agent-overrides.js +0 -178
  134. package/dist/agent-overrides.js.map +0 -1
  135. package/dist/cel-ast.d.ts +0 -39
  136. package/dist/cel-ast.d.ts.map +0 -1
  137. package/dist/cel-ast.js +0 -157
  138. package/dist/cel-ast.js.map +0 -1
  139. package/dist/cel-environment.d.ts +0 -6
  140. package/dist/cel-environment.d.ts.map +0 -1
  141. package/dist/cel-environment.js +0 -44
  142. package/dist/cel-environment.js.map +0 -1
  143. package/dist/compiler.d.ts +0 -4
  144. package/dist/compiler.d.ts.map +0 -1
  145. package/dist/compiler.js +0 -651
  146. package/dist/compiler.js.map +0 -1
  147. package/dist/composite-contract.d.ts +0 -46
  148. package/dist/composite-contract.d.ts.map +0 -1
  149. package/dist/composite-contract.js +0 -89
  150. package/dist/composite-contract.js.map +0 -1
  151. package/dist/diagnostics.d.ts +0 -9
  152. package/dist/diagnostics.d.ts.map +0 -1
  153. package/dist/diagnostics.js +0 -16
  154. package/dist/diagnostics.js.map +0 -1
  155. package/dist/duration.d.ts +0 -13
  156. package/dist/duration.d.ts.map +0 -1
  157. package/dist/duration.js +0 -32
  158. package/dist/duration.js.map +0 -1
  159. package/dist/expression-scope.d.ts +0 -23
  160. package/dist/expression-scope.d.ts.map +0 -1
  161. package/dist/expression-scope.js +0 -545
  162. package/dist/expression-scope.js.map +0 -1
  163. package/dist/expressions-shared.d.ts +0 -19
  164. package/dist/expressions-shared.d.ts.map +0 -1
  165. package/dist/expressions-shared.js +0 -25
  166. package/dist/expressions-shared.js.map +0 -1
  167. package/dist/expressions.d.ts +0 -9
  168. package/dist/expressions.d.ts.map +0 -1
  169. package/dist/expressions.js +0 -95
  170. package/dist/expressions.js.map +0 -1
  171. package/dist/hash.d.ts +0 -19
  172. package/dist/hash.d.ts.map +0 -1
  173. package/dist/hash.js +0 -120
  174. package/dist/hash.js.map +0 -1
  175. package/dist/hook-validation.d.ts +0 -9
  176. package/dist/hook-validation.d.ts.map +0 -1
  177. package/dist/hook-validation.js +0 -73
  178. package/dist/hook-validation.js.map +0 -1
  179. package/dist/hooks.d.ts +0 -150
  180. package/dist/hooks.d.ts.map +0 -1
  181. package/dist/hooks.js +0 -18
  182. package/dist/hooks.js.map +0 -1
  183. package/dist/schedule.d.ts +0 -3
  184. package/dist/schedule.d.ts.map +0 -1
  185. package/dist/schedule.js +0 -21
  186. package/dist/schedule.js.map +0 -1
  187. package/dist/schema/dsl.d.ts +0 -34
  188. package/dist/schema/dsl.d.ts.map +0 -1
  189. package/dist/schema/dsl.js +0 -231
  190. package/dist/schema/dsl.js.map +0 -1
  191. package/dist/schema/helpers.d.ts +0 -24
  192. package/dist/schema/helpers.d.ts.map +0 -1
  193. package/dist/schema/helpers.js +0 -61
  194. package/dist/schema/helpers.js.map +0 -1
  195. package/dist/schema-validator.d.ts +0 -29
  196. package/dist/schema-validator.d.ts.map +0 -1
  197. package/dist/schema-validator.js +0 -622
  198. package/dist/schema-validator.js.map +0 -1
  199. package/dist/source-resolver.d.ts +0 -22
  200. package/dist/source-resolver.d.ts.map +0 -1
  201. package/dist/source-resolver.js +0 -43
  202. package/dist/source-resolver.js.map +0 -1
  203. package/dist/types.d.ts +0 -125
  204. package/dist/types.d.ts.map +0 -1
  205. package/dist/types.js.map +0 -1
  206. package/dist/workflow-schema.d.ts +0 -10
  207. package/dist/workflow-schema.d.ts.map +0 -1
  208. package/dist/workflow-schema.js +0 -485
  209. package/dist/workflow-schema.js.map +0 -1
  210. /package/dist/{types.js → ir/types.js} +0 -0
@@ -1,545 +0,0 @@
1
- import { COMPOSITE_CONTRACTS } from "./composite-contract.js";
2
- import { EXPRESSION_PATTERN } from "./expressions-shared.js";
3
- import { isRecord } from "./schema/helpers.js";
4
- import { extractReferences, isStaticReference, referenceToString } from "./cel-ast.js";
5
- /** Scope-gated local roots: valid only inside the composite that introduces them. */
6
- const SCOPED_LOCAL_ROOTS = new Set(["loop", "item", "item_id", "item_index"]);
7
- export function validateScopedExpressions(input) {
8
- const { root, inputSchema, outputs, agents, allStepIds, diagnostics } = input;
9
- const globalNodes = new Map();
10
- indexNodes(root, globalNodes);
11
- const r = { globalNodes, inputSchema, allStepIds, diagnostics };
12
- // The implicit root pipeline threads its children sequentially.
13
- walkChildScope(root, new Set(), [], undefined, r);
14
- // outputs / agents are top-scope template positions evaluated after the
15
- // workflow body, so every step id is visible; we keep visibility global there
16
- // to avoid false positives while still validating field paths.
17
- const topScope = (path) => ({
18
- visibleSteps: allStepIds,
19
- locals: new Set(),
20
- path,
21
- isCmd: false,
22
- rawTemplate: false,
23
- nativeSingleExpression: false
24
- });
25
- visitStrings(outputs, "$.outputs", (source, path) => checkTemplateString(source, { ...topScope(path), nativeSingleExpression: true }, r));
26
- visitStrings(agents, "$.agents", (source, path) => checkTemplateString(source, topScope(path), r));
27
- // input defaults are evaluated before any step runs, so no step is visible;
28
- // an input default referencing a step output is a guaranteed runtime error.
29
- const inputScope = (path) => ({
30
- visibleSteps: new Set(),
31
- locals: new Set(),
32
- path,
33
- isCmd: false,
34
- rawTemplate: false,
35
- nativeSingleExpression: false
36
- });
37
- visitStrings(inputSchema, "$.input", (source, path) => checkTemplateString(source, inputScope(path), r));
38
- }
39
- /**
40
- * Walk a node's child list, threading step visibility. Visibility rules,
41
- * deliberately conservative (prefer false negatives over false positives):
42
- * - Sequential siblings: each child sees the steps declared before it.
43
- * - When a sibling completes, only its own public step id becomes visible.
44
- * Descendant ids remain private to the composite/pipeline frame.
45
- * - Loop `do` bodies compile to a pipeline, so body ordering follows normal
46
- * pipeline sibling visibility.
47
- */
48
- function walkChildScope(node, inheritedVisible, localsStack, itemSchema, r) {
49
- const isParallel = node.kind === "parallel";
50
- const childLists = node.branches
51
- ? node.branches.map((b) => [b.child])
52
- : node.children
53
- ? [node.children]
54
- : [];
55
- // Validate branch `when` (raw CEL, outer scope) before descending.
56
- if (node.branches) {
57
- const currentLocals = unionLocals(localsStack);
58
- for (const branch of node.branches) {
59
- if (branch.when !== undefined) {
60
- checkRawCelString(branch.when, { visibleSteps: inheritedVisible, locals: currentLocals, itemSchema, path: `${node.nodePath.join("/")}.when`, isCmd: false, rawTemplate: false, nativeSingleExpression: false }, r);
61
- }
62
- }
63
- }
64
- for (const children of childLists) {
65
- const running = new Set(inheritedVisible);
66
- for (const child of children) {
67
- const childVisible = isParallel ? new Set(inheritedVisible) : new Set(running);
68
- walkNode(child, childVisible, localsStack, itemSchema, r);
69
- running.add(child.id);
70
- }
71
- }
72
- }
73
- function walkNode(node, inheritedVisible, localsStack, itemSchema, r) {
74
- const contract = COMPOSITE_CONTRACTS[node.kind];
75
- const currentLocals = unionLocals(localsStack);
76
- const nodePath = node.nodePath.join("/");
77
- const configVisible = new Set(inheritedVisible);
78
- for (const cfg of nodeConfigExpressions(node)) {
79
- const locals = cfg.bodyScoped ? new Set([...currentLocals, ...contract.bodyLocals]) : currentLocals;
80
- // Body-scoped fanout config (key) sees `item`; resolve its element schema.
81
- const cfgItemSchema = cfg.bodyScoped && node.kind === "fanout" ? fanoutItemSchema(node, r) : itemSchema;
82
- const ctx = {
83
- visibleSteps: configVisible,
84
- locals,
85
- itemSchema: cfgItemSchema,
86
- path: `${nodePath}.${cfg.field}`,
87
- isCmd: cfg.isCmd === true,
88
- rawTemplate: false,
89
- nativeSingleExpression: cfg.nativeSingleExpression === true
90
- };
91
- if (cfg.rawCel) {
92
- checkRawCelString(cfg.source, ctx, r);
93
- }
94
- else {
95
- checkTemplateString(cfg.source, ctx, r);
96
- }
97
- }
98
- // Recurse with this node's body locals added for its children. A fanout binds
99
- // `item` to the element schema of its `over` array (when statically known).
100
- const childLocalsStack = contract.bodyLocals.length > 0 ? [...localsStack, contract.bodyLocals] : localsStack;
101
- const childItemSchema = node.kind === "fanout" ? fanoutItemSchema(node, r) : itemSchema;
102
- if ((node.children && node.children.length > 0) || (node.branches && node.branches.length > 0)) {
103
- walkChildScope(node, inheritedVisible, childLocalsStack, childItemSchema, r);
104
- }
105
- if (node.kind === "pipeline" && isRecord(node.metadata.outputs)) {
106
- const outputVisible = new Set(inheritedVisible);
107
- for (const child of node.children ?? [])
108
- outputVisible.add(child.id);
109
- visitStrings(node.metadata.outputs, `${nodePath}.outputs`, (source, path) => checkTemplateString(source, { visibleSteps: outputVisible, locals: currentLocals, itemSchema, path, isCmd: false, rawTemplate: false, nativeSingleExpression: true }, r));
110
- }
111
- }
112
- /**
113
- * Resolve the element schema bound to `item` inside a fanout body. Only returns
114
- * a schema when `over` is `steps.<id>.output[...typed array]`; literal arrays and
115
- * dyn references yield undefined (fail-quiet → item.* not validated).
116
- */
117
- function fanoutItemSchema(node, r) {
118
- const over = node.metadata.over;
119
- if (typeof over !== "string")
120
- return undefined;
121
- // A coerced literal array (JSON string) has no element schema we can use.
122
- if (over.trimStart().startsWith("["))
123
- return undefined;
124
- const { references, parseError } = extractReferences(over);
125
- if (parseError || references.length !== 1)
126
- return undefined;
127
- const ref = references[0];
128
- if (ref.root !== "steps")
129
- return undefined;
130
- const stepNode = r.globalNodes.get(ref.segments[0]?.name ?? "");
131
- if (!stepNode)
132
- return undefined;
133
- if (COMPOSITE_CONTRACTS[stepNode.kind].outputShape !== "schema")
134
- return undefined;
135
- const schema = stepNode.metadata.output;
136
- if (!isRecord(schema))
137
- return undefined;
138
- // Walk to the array referenced by `over`, then return its item schema.
139
- const arr = resolveSchemaNode(schema, ref.segments, 2);
140
- if (arr && arr.type === "array" && isRecord(arr.items))
141
- return arr.items;
142
- return undefined;
143
- }
144
- /** Resolve segments to the declared schema node they point at, or undefined if unknown/open. */
145
- function resolveSchemaNode(schema, segments, start) {
146
- let cur = schema;
147
- for (let i = start; i < segments.length; i++) {
148
- const rawSeg = segments[i];
149
- const seg = rawSeg.kind === "bracket" && typeof rawSeg.value === "string" && cur.type === "object"
150
- ? { kind: "field", name: rawSeg.value }
151
- : rawSeg;
152
- if (seg.kind === "index" || seg.kind === "bracket") {
153
- if (cur.type === "array" && (seg.kind === "index" || typeof seg.value === "number") && isRecord(cur.items)) {
154
- cur = cur.items;
155
- continue;
156
- }
157
- return undefined;
158
- }
159
- if (hasDeclaredProperties(cur)) {
160
- const properties = cur.properties;
161
- if (Object.prototype.hasOwnProperty.call(properties, seg.name)) {
162
- cur = properties[seg.name];
163
- continue;
164
- }
165
- }
166
- return undefined;
167
- }
168
- return cur;
169
- }
170
- /** Yield the expression-bearing config strings for a node, by kind. */
171
- function nodeConfigExpressions(node) {
172
- const out = [];
173
- const md = node.metadata;
174
- const pushTemplate = (value, field, isCmd = false) => {
175
- if (typeof value === "string")
176
- out.push({ source: value, field, rawCel: false, isCmd });
177
- };
178
- switch (node.kind) {
179
- case "run.agent":
180
- pushTemplate(md.prompt, "prompt");
181
- pushTemplate(md.cwd, "cwd");
182
- pushTemplate(md.session_key, "session_key");
183
- break;
184
- case "run.program":
185
- if (Array.isArray(md.cmd)) {
186
- md.cmd.forEach((item, index) => pushTemplate(item, `cmd[${index}]`, true));
187
- }
188
- else if (typeof md.cmd === "string") {
189
- pushTemplate(md.cmd, "cmd", true);
190
- }
191
- pushTemplate(md.cwd, "cwd");
192
- if (isRecord(md.env)) {
193
- for (const [key, value] of Object.entries(md.env))
194
- pushTemplate(value, `env.${key}`);
195
- }
196
- break;
197
- case "run.signal":
198
- pushTemplate(md.prompt, "prompt");
199
- break;
200
- case "guard":
201
- if (typeof md.when === "string")
202
- out.push({ source: md.when, field: "when", rawCel: true });
203
- pushTemplate(md.message, "message");
204
- break;
205
- case "loop":
206
- if (typeof md.until === "string")
207
- out.push({ source: md.until, field: "until", rawCel: true, bodyScoped: true });
208
- break;
209
- case "fanout":
210
- if (typeof md.over === "string")
211
- out.push({ source: md.over, field: "over", rawCel: true });
212
- if (typeof md.key === "string")
213
- out.push({ source: md.key, field: "key", rawCel: false, bodyScoped: true });
214
- break;
215
- case "subworkflow":
216
- if (isRecord(md.input)) {
217
- for (const [key, value] of Object.entries(md.input)) {
218
- if (typeof value === "string")
219
- out.push({ source: value, field: `input.${key}`, rawCel: false, nativeSingleExpression: true });
220
- }
221
- }
222
- break;
223
- default:
224
- break;
225
- }
226
- return out;
227
- }
228
- /** Validate every ${{ }} expression inside a template string. */
229
- function checkTemplateString(value, ctx, r) {
230
- const matches = [...value.matchAll(EXPRESSION_PATTERN)];
231
- if (matches.length === 1) {
232
- const match = matches[0];
233
- const before = value.slice(0, match.index).trim();
234
- const after = value.slice(match.index + match[0].length).trim();
235
- if (before === "" && after === "") {
236
- checkExpression((match[1] ?? "").trim(), ctx.nativeSingleExpression ? ctx : { ...ctx, rawTemplate: true }, r);
237
- EXPRESSION_PATTERN.lastIndex = 0;
238
- return;
239
- }
240
- }
241
- for (const match of matches) {
242
- const source = (match[1] ?? "").trim();
243
- if (source.length === 0)
244
- continue;
245
- checkExpression(source, { ...ctx, rawTemplate: true }, r);
246
- }
247
- EXPRESSION_PATTERN.lastIndex = 0;
248
- }
249
- /** Validate a raw-CEL field (when/until/over). Skip if it carries ${{ }} (flat collector warns). */
250
- function checkRawCelString(value, ctx, r) {
251
- if (EXPRESSION_PATTERN.test(value)) {
252
- EXPRESSION_PATTERN.lastIndex = 0;
253
- return;
254
- }
255
- EXPRESSION_PATTERN.lastIndex = 0;
256
- checkExpression(value.trim(), ctx, r);
257
- }
258
- function checkExpression(source, ctx, r) {
259
- const { references, functions, parseError } = extractReferences(source);
260
- if (parseError)
261
- return; // flat collector owns EXPR_PARSE
262
- for (const ref of references) {
263
- checkReference(ref, ctx, r);
264
- }
265
- if (ctx.isCmd) {
266
- checkCmdScalar(source, references, functions, ctx, r);
267
- }
268
- else if (ctx.rawTemplate) {
269
- checkStructuredTemplate(source, references, functions, ctx, r);
270
- }
271
- }
272
- function checkReference(ref, ctx, r) {
273
- // Out-of-scope local root (loop/item/...) used where it is not bound.
274
- if (SCOPED_LOCAL_ROOTS.has(ref.root) && !ctx.locals.has(ref.root)) {
275
- r.diagnostics.error("EXPR_ROOT_OUT_OF_SCOPE", `Expression root '${ref.root}' is only available inside its ${ref.root === "loop" ? "loop" : "fanout"} body; it is not in scope here.${describeScope(ctx)}`, ctx.path);
276
- return;
277
- }
278
- // TODO: Delete after users have migrated. Transitional guard for pre-primary-output loop.last syntax.
279
- if (ref.root === "loop" && isLoopLastEnvelopeReference(ref)) {
280
- r.diagnostics.error("EXPR_LOOP_LAST_ENVELOPE", "loop.last is already the previous body primary output; use loop.last.<field>, not loop.last.output.<field>.", ctx.path);
281
- return;
282
- }
283
- if (ref.root === "steps") {
284
- checkStepReference(ref, ctx, r);
285
- return;
286
- }
287
- if (ref.root === "input") {
288
- const result = walkInputSchema(r.inputSchema, ref.segments);
289
- if (result.error) {
290
- r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on input. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
291
- }
292
- }
293
- if (ref.root === "workflow") {
294
- const result = walkSchema(WORKFLOW_CONTEXT_SCHEMA, ref.segments, 0);
295
- if (result.error) {
296
- r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on workflow. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
297
- }
298
- }
299
- if (ref.root === "item" && ctx.itemSchema) {
300
- const result = walkSchema(ctx.itemSchema, ref.segments, 0, { requireDeclaredFields: true });
301
- if (result.error) {
302
- r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on the fanout item. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
303
- }
304
- }
305
- }
306
- function isLoopLastEnvelopeReference(ref) {
307
- return ref.segments[0]?.kind === "field" &&
308
- ref.segments[0].name === "last" &&
309
- ref.segments[1]?.kind === "field" &&
310
- ref.segments[1].name === "output";
311
- }
312
- function checkStepReference(ref, ctx, r) {
313
- const first = ref.segments[0];
314
- if (!first || first.kind !== "field")
315
- return; // steps[expr] — dynamic, skip
316
- const stepId = first.name;
317
- if (!r.allStepIds.has(stepId))
318
- return; // genuinely unknown — flat collector owns EXPR_UNKNOWN_STEP
319
- if (!ctx.visibleSteps.has(stepId)) {
320
- const visible = [...ctx.visibleSteps].sort();
321
- r.diagnostics.error("EXPR_UNKNOWN_STEP", `Expression references step '${stepId}' which is not visible at this position (it runs later or in a separate branch). Visible steps: ${visible.join(", ") || "(none)"}.`, ctx.path);
322
- return;
323
- }
324
- resolveStepType(ref, r, ctx); // resolve for field-path errors (side-effecting diagnostics)
325
- }
326
- /**
327
- * Resolve a `steps.<id>...` reference, emitting EXPR_UNKNOWN_FIELD on a closed
328
- * schema miss. Returns the resolved kind for the shell-safety check.
329
- */
330
- function resolveStepType(ref, r, ctx) {
331
- const first = ref.segments[0];
332
- if (!first || first.kind !== "field")
333
- return "unknown"; // bare `steps` or `steps[expr]`
334
- const node = r.globalNodes.get(first.name);
335
- if (!node)
336
- return "unknown";
337
- const seg1 = ref.segments[1];
338
- if (!seg1)
339
- return "unknown"; // bare `steps.x` — envelope object, treat dyn
340
- if (seg1.kind !== "field")
341
- return "unknown";
342
- if (seg1.name === "exit_code")
343
- return "scalar";
344
- if (seg1.name !== "output") {
345
- const available = node.kind === "run.program" ? "output, exit_code" : "output";
346
- if (ctx) {
347
- r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' accesses '${seg1.name}' on step '${node.id}'; step outputs are read via .output (available: ${available}).`, ctx.path);
348
- }
349
- return "unknown";
350
- }
351
- // seg1 === "output": project per the node's output shape.
352
- const shape = COMPOSITE_CONTRACTS[node.kind].outputShape;
353
- if (ref.segments.length === 2) {
354
- switch (shape) {
355
- case "array":
356
- return "array";
357
- case "map":
358
- case "decision":
359
- case "selected":
360
- return "object";
361
- default:
362
- break;
363
- }
364
- }
365
- if (shape !== "schema" && shape !== "payload")
366
- return "unknown"; // composite/dyn projection
367
- const schema = node.metadata.output;
368
- if (!isRecord(schema))
369
- return "unknown"; // no declared schema → dyn
370
- const result = walkSchema(schema, ref.segments, 2, { requireDeclaredFields: true });
371
- if (result.error && ctx) {
372
- r.diagnostics.error("EXPR_UNKNOWN_FIELD", `Expression '${referenceToString(ref)}' references field '${result.error.field}' not declared on step '${node.id}' output. Available fields: ${result.error.available.join(", ") || "(none)"}.`, ctx.path);
373
- }
374
- return result.kind;
375
- }
376
- /** CEL functions whose result is a scalar, so their value is shell-safe even
377
- * when an argument is an object/array. `json` is excluded: it serializes a
378
- * whole structure into the command text, which is exactly what we warn about. */
379
- const SCALAR_RETURNING_FUNCTIONS = new Set(["len", "startsWith", "matches", "size", "now"]);
380
- /** Shell-safety: flag a non-scalar ${{ }} spliced into a cmd element. */
381
- function checkCmdScalar(source, references, functions, ctx, r) {
382
- let nonScalar = false;
383
- let label = source.trim();
384
- // A scalar-returning function wrapping the value makes the spliced result a
385
- // scalar regardless of its argument shapes (e.g. len(steps.x.output.items)).
386
- if (functions.some((fn) => SCALAR_RETURNING_FUNCTIONS.has(fn))) {
387
- return;
388
- }
389
- if (functions.includes("json")) {
390
- nonScalar = true;
391
- }
392
- else if (references.length === 1 && isStaticReference(references[0])) {
393
- const ref = references[0];
394
- const kind = resolveReferenceKind(ref, r, ctx);
395
- if (kind === "object" || kind === "array") {
396
- nonScalar = true;
397
- label = referenceToString(ref);
398
- }
399
- }
400
- if (nonScalar) {
401
- r.diagnostics.warning("EXPR_NONSCALAR_IN_CMD", `Expression '${label}' evaluates to a non-scalar value spliced into a command; shell metacharacters will break it. Pass it through env: and read it with $VAR / os.environ instead.`, ctx.path);
402
- }
403
- }
404
- function checkStructuredTemplate(source, references, functions, ctx, r) {
405
- if (functions.includes("json"))
406
- return;
407
- if (references.length !== 1 || !isStaticReference(references[0]))
408
- return;
409
- const ref = references[0];
410
- const kind = resolveReferenceKind(ref, r, ctx);
411
- if (kind !== "object" && kind !== "array")
412
- return;
413
- r.diagnostics.warning("EXPR_STRUCTURED_TEMPLATE", `Expression '${referenceToString(ref)}' evaluates to a structured value in a template string; wrap it with json(...) when JSON text is intended.`, ctx.path);
414
- }
415
- function resolveReferenceKind(ref, r, ctx) {
416
- switch (ref.root) {
417
- case "steps":
418
- return resolveStepType(ref, r);
419
- case "input":
420
- return walkInputSchema(r.inputSchema, ref.segments).kind;
421
- case "workflow":
422
- return walkSchema(WORKFLOW_CONTEXT_SCHEMA, ref.segments, 0).kind;
423
- case "item":
424
- return ctx?.itemSchema ? walkSchema(ctx.itemSchema, ref.segments, 0, { requireDeclaredFields: true }).kind : "unknown";
425
- default:
426
- return "unknown";
427
- }
428
- }
429
- function walkInputSchema(schema, segments) {
430
- return walkSchema(schema, segments, 0, { allowOpenRootFields: true });
431
- }
432
- /** Walk JSON-Schema segments from `start`. Stops (kind=unknown) on open/dyn shapes unless declared fields are required. */
433
- function walkSchema(schema, segments, start, options = {}) {
434
- let cur = schema;
435
- for (let i = start; i < segments.length; i++) {
436
- const rawSeg = segments[i];
437
- const seg = rawSeg.kind === "bracket" && typeof rawSeg.value === "string" && cur.type === "object"
438
- ? { kind: "field", name: rawSeg.value }
439
- : rawSeg;
440
- if (seg.kind === "index" || seg.kind === "bracket") {
441
- if (cur.type === "array") {
442
- const validArrayIndex = seg.kind === "index" || typeof seg.value === "number";
443
- if (validArrayIndex && isRecord(cur.items)) {
444
- cur = cur.items;
445
- continue;
446
- }
447
- if (options.requireDeclaredFields === true) {
448
- return { kind: "unknown", error: { field: "[]", available: [] } };
449
- }
450
- return { kind: "unknown" };
451
- }
452
- if (options.requireDeclaredFields === true) {
453
- return { kind: "unknown", error: { field: "[]", available: declaredPropertyNames(cur) } };
454
- }
455
- return { kind: "unknown" };
456
- }
457
- // field segment
458
- if (hasDeclaredProperties(cur) || (options.allowOpenRootFields === true && i === start && isRecord(cur.properties))) {
459
- const properties = cur.properties;
460
- if (Object.prototype.hasOwnProperty.call(properties, seg.name)) {
461
- cur = properties[seg.name];
462
- continue;
463
- }
464
- if (options.requireDeclaredFields !== true && !isClosedObject(cur))
465
- return { kind: "unknown" };
466
- return { kind: "unknown", error: { field: seg.name, available: Object.keys(properties) } };
467
- }
468
- if (options.requireDeclaredFields === true && cur.type === "object") {
469
- return { kind: "unknown", error: { field: seg.name, available: [] } };
470
- }
471
- // open object / scalar / dyn — cannot validate this access
472
- return { kind: "unknown" };
473
- }
474
- return { kind: schemaKind(cur) };
475
- }
476
- function isClosedObject(schema) {
477
- return schema.type === "object" && isRecord(schema.properties) && schema.additionalProperties === false;
478
- }
479
- function hasDeclaredProperties(schema) {
480
- return schema.type === "object" && isRecord(schema.properties);
481
- }
482
- function declaredPropertyNames(schema) {
483
- return hasDeclaredProperties(schema) ? Object.keys(schema.properties) : [];
484
- }
485
- function schemaKind(schema) {
486
- switch (schema.type) {
487
- case "object":
488
- return "object";
489
- case "array":
490
- return "array";
491
- case "string":
492
- case "integer":
493
- case "number":
494
- case "boolean":
495
- return "scalar";
496
- default:
497
- return "unknown";
498
- }
499
- }
500
- const WORKFLOW_CONTEXT_SCHEMA = {
501
- type: "object",
502
- additionalProperties: false,
503
- properties: {
504
- name: { type: "string" },
505
- description: { type: "string" },
506
- source_path: { type: "string" },
507
- source_dir: { type: "string" }
508
- }
509
- };
510
- function describeScope(ctx) {
511
- const locals = [...ctx.locals].sort();
512
- return locals.length > 0 ? ` In-scope locals: ${locals.join(", ")}.` : "";
513
- }
514
- function indexNodes(node, out) {
515
- if (node.id)
516
- out.set(node.id, node);
517
- for (const child of node.children ?? [])
518
- indexNodes(child, out);
519
- for (const branch of node.branches ?? []) {
520
- indexNodes(branch.child, out);
521
- }
522
- }
523
- function unionLocals(stack) {
524
- const out = new Set();
525
- for (const frame of stack)
526
- for (const local of frame)
527
- out.add(local);
528
- return out;
529
- }
530
- /** Visit every string leaf in a nested structure, yielding (value, jsonPath). */
531
- function visitStrings(value, path, visit) {
532
- if (typeof value === "string") {
533
- visit(value, path);
534
- return;
535
- }
536
- if (Array.isArray(value)) {
537
- value.forEach((item, index) => visitStrings(item, `${path}[${index}]`, visit));
538
- return;
539
- }
540
- if (isRecord(value)) {
541
- for (const [key, child] of Object.entries(value))
542
- visitStrings(child, `${path}.${key}`, visit);
543
- }
544
- }
545
- //# sourceMappingURL=expression-scope.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression-scope.js","sourceRoot":"","sources":["../src/expression-scope.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Primitives shared by the expression collector (expressions.ts) and the AST
3
- * reference extractor (cel-ast.ts), kept in their own module to avoid a circular
4
- * import between those two files.
5
- */
6
- export declare const EXPRESSION_PATTERN: RegExp;
7
- export declare function rawCelFieldName(pathOrKey: string): string | undefined;
8
- /**
9
- * The CEL parser/evaluator does not allow `loop` as a bare identifier root in
10
- * every position, so Acpus rewrites the logical `loop.` scope to `loop_ctx.`
11
- * before parsing or evaluating. The runtime evaluator binds `loop_ctx`
12
- * accordingly; the AST extractor normalizes it back to `loop`.
13
- *
14
- * The negative lookbehind keeps `loop.` rooted: a dotted access like
15
- * `steps.loop.output` (a step named `loop`) is left untouched, since `\b`
16
- * alone matches at the `.`→`l` boundary and would corrupt the reference.
17
- */
18
- export declare function toCelParseSource(source: string): string;
19
- //# sourceMappingURL=expressions-shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expressions-shared.d.ts","sourceRoot":"","sources":["../src/expressions-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAIhE,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Primitives shared by the expression collector (expressions.ts) and the AST
3
- * reference extractor (cel-ast.ts), kept in their own module to avoid a circular
4
- * import between those two files.
5
- */
6
- export const EXPRESSION_PATTERN = /\$\{\{\s*([\s\S]*?)\s*\}\}/g;
7
- const RAW_CEL_FIELD_NAMES = new Set(["over", "until", "when"]);
8
- export function rawCelFieldName(pathOrKey) {
9
- const fieldName = pathOrKey.split(".").pop() ?? "";
10
- return RAW_CEL_FIELD_NAMES.has(fieldName) ? fieldName : undefined;
11
- }
12
- /**
13
- * The CEL parser/evaluator does not allow `loop` as a bare identifier root in
14
- * every position, so Acpus rewrites the logical `loop.` scope to `loop_ctx.`
15
- * before parsing or evaluating. The runtime evaluator binds `loop_ctx`
16
- * accordingly; the AST extractor normalizes it back to `loop`.
17
- *
18
- * The negative lookbehind keeps `loop.` rooted: a dotted access like
19
- * `steps.loop.output` (a step named `loop`) is left untouched, since `\b`
20
- * alone matches at the `.`→`l` boundary and would corrupt the reference.
21
- */
22
- export function toCelParseSource(source) {
23
- return source.replace(/(?<!\.)\bloop\./g, "loop_ctx.");
24
- }
25
- //# sourceMappingURL=expressions-shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expressions-shared.js","sourceRoot":"","sources":["../src/expressions-shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEhE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACnD,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { DiagnosticBag } from "./diagnostics.js";
2
- import type { IrExpression } from "./types.js";
3
- export { EXPRESSION_PATTERN, rawCelFieldName, toCelParseSource } from "./expressions-shared.js";
4
- export interface ExpressionCollector {
5
- expressions: IrExpression[];
6
- visit(value: unknown, path: string): void;
7
- }
8
- export declare function createExpressionCollector(diagnostics: DiagnosticBag, knownStepIds: Set<string>): ExpressionCollector;
9
- //# sourceMappingURL=expressions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../src/expressions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAsFpH"}