@acpus/core 0.1.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/compiler.d.ts +4 -0
  4. package/dist/compiler.d.ts.map +1 -0
  5. package/dist/compiler.js +526 -0
  6. package/dist/compiler.js.map +1 -0
  7. package/dist/diagnostics.d.ts +9 -0
  8. package/dist/diagnostics.d.ts.map +1 -0
  9. package/dist/diagnostics.js +16 -0
  10. package/dist/diagnostics.js.map +1 -0
  11. package/dist/duration.d.ts +14 -0
  12. package/dist/duration.d.ts.map +1 -0
  13. package/dist/duration.js +28 -0
  14. package/dist/duration.js.map +1 -0
  15. package/dist/expressions.d.ts +12 -0
  16. package/dist/expressions.d.ts.map +1 -0
  17. package/dist/expressions.js +108 -0
  18. package/dist/expressions.js.map +1 -0
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/schedule.d.ts +3 -0
  24. package/dist/schedule.d.ts.map +1 -0
  25. package/dist/schedule.js +21 -0
  26. package/dist/schedule.js.map +1 -0
  27. package/dist/schema/dsl.d.ts +34 -0
  28. package/dist/schema/dsl.d.ts.map +1 -0
  29. package/dist/schema/dsl.js +231 -0
  30. package/dist/schema/dsl.js.map +1 -0
  31. package/dist/schema/helpers.d.ts +24 -0
  32. package/dist/schema/helpers.d.ts.map +1 -0
  33. package/dist/schema/helpers.js +61 -0
  34. package/dist/schema/helpers.js.map +1 -0
  35. package/dist/schema/index.d.ts +3 -0
  36. package/dist/schema/index.d.ts.map +1 -0
  37. package/dist/schema/index.js +3 -0
  38. package/dist/schema/index.js.map +1 -0
  39. package/dist/schema-validator.d.ts +29 -0
  40. package/dist/schema-validator.d.ts.map +1 -0
  41. package/dist/schema-validator.js +568 -0
  42. package/dist/schema-validator.js.map +1 -0
  43. package/dist/types.d.ts +120 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/workflow-schema.d.ts +10 -0
  48. package/dist/workflow-schema.d.ts.map +1 -0
  49. package/dist/workflow-schema.js +380 -0
  50. package/dist/workflow-schema.js.map +1 -0
  51. package/package.json +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 kkkyran
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @acpus/core
2
+
3
+ `@acpus/core` contains the Acpus Workflow Spec compiler boundary: YAML parsing, schema validation, expression collection, diagnostics, frozen IR generation, and schedule projection.
4
+
5
+ Most users should install the `acpus` CLI package.
6
+
7
+ See the repository README for full usage: https://github.com/kelvinschen/acpus
@@ -0,0 +1,4 @@
1
+ import type { CompileOptions, CompileResult, LintResult } from "./types.js";
2
+ export declare function compileWorkflow(source: string, options?: CompileOptions): CompileResult;
3
+ export declare function lintWorkflow(source: string, options?: CompileOptions): LintResult;
4
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,cAAc,EACd,aAAa,EAIb,UAAU,EAIX,MAAM,YAAY,CAAC;AAIpB,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAiE3F;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,UAAU,CAMrF"}
@@ -0,0 +1,526 @@
1
+ import { createHash } from "node:crypto";
2
+ import { Ajv } from "ajv";
3
+ import { parse as parseYaml } from "yaml";
4
+ import { DiagnosticBag } from "./diagnostics.js";
5
+ import { createExpressionCollector } from "./expressions.js";
6
+ import { createSchedule } from "./schedule.js";
7
+ import { compileSchemaDsl } from "./schema/index.js";
8
+ import { parseDurationMs } from "./duration.js";
9
+ import { validateWithSchema } from "./schema-validator.js";
10
+ const ajv = new Ajv({ allErrors: true, strict: false });
11
+ export function compileWorkflow(source, options = {}) {
12
+ const diagnostics = new DiagnosticBag();
13
+ const parsed = parseSource(source, diagnostics);
14
+ if (!isWorkflowSpec(parsed)) {
15
+ diagnostics.error("SPEC_SHAPE", "Workflow spec must be a YAML object with version, name, and workflow.steps.", "$");
16
+ return result(false, diagnostics);
17
+ }
18
+ const expanded = expandIncludes(parsed, options, diagnostics, new Set());
19
+ validateWithSchema(expanded, diagnostics);
20
+ const { ids: stepIds, kinds: stepKinds } = collectStepIds(expanded.workflow.steps, diagnostics);
21
+ const context = {
22
+ diagnostics,
23
+ stepIds,
24
+ agents: isRecord(expanded.agents) ? expanded.agents : {},
25
+ sourcePath: options.sourcePath
26
+ };
27
+ validateSpec(expanded, context);
28
+ const rootChildren = compileSteps(expanded.workflow.steps, ["workflow"], "$.workflow.steps", context);
29
+ const root = {
30
+ id: "workflow",
31
+ kind: "pipeline",
32
+ nodePath: ["workflow"],
33
+ keyTemplate: keyTemplate(["workflow"]),
34
+ children: rootChildren,
35
+ metadata: {
36
+ implicit: true
37
+ }
38
+ };
39
+ const expressionCollector = createExpressionCollector(diagnostics, stepIds, stepKinds);
40
+ expressionCollector.visit(expanded.input ?? {}, "$.input");
41
+ expressionCollector.visit(expanded.agents ?? {}, "$.agents");
42
+ expressionCollector.visit(expanded.workflow.steps, "$.workflow.steps");
43
+ expressionCollector.visit(expanded.outputs ?? {}, "$.outputs");
44
+ const ok = !diagnostics.hasErrors(options.strict);
45
+ if (!ok) {
46
+ return result(false, diagnostics);
47
+ }
48
+ const ir = {
49
+ irVersion: 1,
50
+ astVersion: 1,
51
+ source: {
52
+ path: options.sourcePath,
53
+ digest: digest(source)
54
+ },
55
+ name: expanded.name,
56
+ description: expanded.description,
57
+ input: expanded.input ?? {},
58
+ agents: expanded.agents ?? {},
59
+ root,
60
+ outputs: expanded.outputs ?? {},
61
+ expressions: expressionCollector.expressions
62
+ };
63
+ return {
64
+ ok: true,
65
+ diagnostics: diagnostics.diagnostics,
66
+ ir,
67
+ schedule: createSchedule(ir)
68
+ };
69
+ }
70
+ export function lintWorkflow(source, options = {}) {
71
+ const compiled = compileWorkflow(source, options);
72
+ return {
73
+ ok: compiled.ok,
74
+ diagnostics: compiled.diagnostics
75
+ };
76
+ }
77
+ function parseSource(source, diagnostics) {
78
+ try {
79
+ return parseYaml(source);
80
+ }
81
+ catch (error) {
82
+ diagnostics.error("YAML_PARSE", `Invalid YAML: ${errorMessage(error)}`, "$");
83
+ return undefined;
84
+ }
85
+ }
86
+ function expandIncludes(spec, options, diagnostics, seen) {
87
+ const steps = [];
88
+ for (const [index, step] of spec.workflow.steps.entries()) {
89
+ if (typeof step.include === "string") {
90
+ if (!options.includeResolver) {
91
+ diagnostics.error("INCLUDE_RESOLVER", "Include is present but no include resolver was provided.", `$.workflow.steps[${index}].include`);
92
+ continue;
93
+ }
94
+ if (seen.has(step.include)) {
95
+ diagnostics.error("INCLUDE_CYCLE", `Include cycle detected for '${step.include}'.`, `$.workflow.steps[${index}].include`);
96
+ continue;
97
+ }
98
+ const includedSource = options.includeResolver(step.include, options.sourcePath);
99
+ const includedParsed = parseSource(includedSource, diagnostics);
100
+ if (!isWorkflowSpec(includedParsed)) {
101
+ diagnostics.error("INCLUDE_SHAPE", `Included spec '${step.include}' is not a valid workflow spec.`, `$.workflow.steps[${index}].include`);
102
+ continue;
103
+ }
104
+ const nextSeen = new Set(seen);
105
+ nextSeen.add(step.include);
106
+ const expanded = expandIncludes(includedParsed, options, diagnostics, nextSeen);
107
+ steps.push(...expanded.workflow.steps);
108
+ continue;
109
+ }
110
+ steps.push(step);
111
+ }
112
+ return {
113
+ ...spec,
114
+ workflow: {
115
+ ...spec.workflow,
116
+ steps
117
+ }
118
+ };
119
+ }
120
+ function validateSpec(spec, context) {
121
+ const { diagnostics } = context;
122
+ // Compile input flat-map to JSON Schema
123
+ if (isRecord(spec.input)) {
124
+ const { schema, errors } = compileSchemaDsl(spec.input, { strictObjectKeys: false });
125
+ for (const err of errors) {
126
+ diagnostics.error("INPUT_SHAPE", err.message, `$.input.${err.field}`);
127
+ }
128
+ if (errors.length === 0) {
129
+ validateJsonSchema(schema, "$.input", context);
130
+ }
131
+ // Replace input with compiled schema in the spec so the IR stores the JSON Schema
132
+ spec.input = schema;
133
+ }
134
+ // Semantic checks not covered by JSON Schema
135
+ for (const [agentName, agent] of Object.entries(spec.agents ?? {})) {
136
+ if (!isRecord(agent))
137
+ continue; // Schema handles shape errors
138
+ // AGENT_REF: check that referenced agents actually exist (cross-reference)
139
+ // This is done in validateAgentStep at step level
140
+ }
141
+ }
142
+ function compileSteps(steps, parentPath, path, context) {
143
+ return steps.map((step, index) => compileStep(step, parentPath, `${path}[${index}]`, context));
144
+ }
145
+ function compileStep(step, parentPath, path, context) {
146
+ const id = typeof step.id === "string" && step.id.length > 0 ? step.id : `missing_${parentPath.length}_${path}`;
147
+ // Defensive: Schema already validates id; keep as fallback
148
+ if (typeof step.id !== "string" || step.id.length === 0) {
149
+ context.diagnostics.error("STEP_ID", "Every workflow step must define a non-empty string id.", `${path}.id`);
150
+ }
151
+ const nodePath = [...parentPath, id];
152
+ const base = {
153
+ id,
154
+ nodePath,
155
+ keyTemplate: keyTemplate(nodePath)
156
+ };
157
+ if (step.run === "agent") {
158
+ validateAgentStep(step, path, context);
159
+ validateStepTimeout(step, path, context);
160
+ const metadata = pickMetadata(step, ["run", "use", "prompt", "output", "retry", "timeout", "on_error"]);
161
+ // Snapshot the referenced agent definition into the node so the runtime can
162
+ // route to the right executor and build the acpx invocation. `type` defaults
163
+ // to "builtin".
164
+ const agentName = typeof step.use === "string" ? step.use : undefined;
165
+ const agentSpec = agentName ? context.agents[agentName] : undefined;
166
+ if (isRecord(agentSpec)) {
167
+ metadata.agent = { ...agentSpec, type: agentSpec.type ?? "builtin" };
168
+ }
169
+ return {
170
+ ...base,
171
+ kind: "run.agent",
172
+ metadata
173
+ };
174
+ }
175
+ if (step.run === "program") {
176
+ validateProgramStep(step, path, context);
177
+ validateStepTimeout(step, path, context);
178
+ return {
179
+ ...base,
180
+ kind: "run.program",
181
+ metadata: pickMetadata(step, ["run", "cmd", "env", "capture", "output", "retry", "timeout", "on_error"])
182
+ };
183
+ }
184
+ if (Array.isArray(step.parallel)) {
185
+ return {
186
+ ...base,
187
+ kind: "parallel",
188
+ keyTemplate: { ...keyTemplate(nodePath), parallelBranchId: true },
189
+ outputMerge: "map",
190
+ children: compileSteps(asSteps(step.parallel, `${path}.parallel`, context), nodePath, `${path}.parallel`, context),
191
+ metadata: pickMetadata(step, ["max_concurrency", "join"])
192
+ };
193
+ }
194
+ if (isRecord(step.fanout)) {
195
+ const fanout = step.fanout;
196
+ validateFanout(fanout, path, context);
197
+ const children = Array.isArray(fanout.do) ? compileSteps(asSteps(fanout.do, `${path}.fanout.do`, context), nodePath, `${path}.fanout.do`, context) : [];
198
+ if (!Array.isArray(fanout.do)) {
199
+ context.diagnostics.error("FANOUT_DO", "fanout.do must be an array of steps.", `${path}.fanout.do`);
200
+ }
201
+ return {
202
+ ...base,
203
+ kind: "fanout",
204
+ keyTemplate: { ...keyTemplate(nodePath), fanoutItemId: true, laneId: true },
205
+ outputMerge: "array",
206
+ children,
207
+ metadata: pickMetadata(fanout, ["over", "key", "max_concurrency", "join", "quorum", "success_criteria"])
208
+ };
209
+ }
210
+ if (isRecord(step.switch)) {
211
+ const switchSpec = step.switch;
212
+ const branches = [];
213
+ if (Array.isArray(switchSpec.cases)) {
214
+ switchSpec.cases.forEach((caseSpec, caseIndex) => {
215
+ if (!isRecord(caseSpec)) {
216
+ context.diagnostics.error("SWITCH_CASE", "switch.cases entries must be objects.", `${path}.switch.cases[${caseIndex}]`);
217
+ return;
218
+ }
219
+ // Coerce `when`: boolean → string, string → pass through, else error.
220
+ if (caseSpec.when !== undefined) {
221
+ if (typeof caseSpec.when === "boolean") {
222
+ caseSpec.when = String(caseSpec.when);
223
+ }
224
+ else if (typeof caseSpec.when !== "string") {
225
+ const typeDesc = caseSpec.when === null ? "null" : typeof caseSpec.when;
226
+ context.diagnostics.error("SWITCH_WHEN_TYPE", `switch.case.when must be a boolean or CEL expression string, got ${typeDesc}.`, `${path}.switch.cases[${caseIndex}].when`);
227
+ }
228
+ }
229
+ branches.push({
230
+ id: `case_${caseIndex + 1}`,
231
+ when: typeof caseSpec.when === "string" ? caseSpec.when : undefined,
232
+ children: Array.isArray(caseSpec.do) ? compileSteps(asSteps(caseSpec.do, `${path}.switch.cases[${caseIndex}].do`, context), nodePath, `${path}.switch.cases[${caseIndex}].do`, context) : []
233
+ });
234
+ });
235
+ }
236
+ else {
237
+ context.diagnostics.error("SWITCH_CASES", "switch.cases must be an array.", `${path}.switch.cases`);
238
+ }
239
+ if (isRecord(switchSpec.default)) {
240
+ branches.push({
241
+ id: "default",
242
+ children: Array.isArray(switchSpec.default.do) ? compileSteps(asSteps(switchSpec.default.do, `${path}.switch.default.do`, context), nodePath, `${path}.switch.default.do`, context) : []
243
+ });
244
+ }
245
+ return {
246
+ ...base,
247
+ kind: "switch",
248
+ outputMerge: "selected",
249
+ branches,
250
+ metadata: pickMetadata(switchSpec, ["on"])
251
+ };
252
+ }
253
+ if (isRecord(step.loop)) {
254
+ const loop = step.loop;
255
+ // Coerce `until`: boolean → string, string → pass through, else error.
256
+ if (loop.until !== undefined) {
257
+ if (typeof loop.until === "boolean") {
258
+ loop.until = String(loop.until);
259
+ }
260
+ else if (typeof loop.until !== "string") {
261
+ const typeDesc = loop.until === null ? "null" : typeof loop.until;
262
+ context.diagnostics.error("LOOP_UNTIL_TYPE", `loop.until must be a boolean or CEL expression string, got ${typeDesc}.`, `${path}.loop.until`);
263
+ }
264
+ }
265
+ return {
266
+ ...base,
267
+ kind: "loop",
268
+ keyTemplate: { ...keyTemplate(nodePath), loopRound: true },
269
+ outputMerge: "last",
270
+ children: Array.isArray(loop.do) ? compileSteps(asSteps(loop.do, `${path}.loop.do`, context), nodePath, `${path}.loop.do`, context) : [],
271
+ metadata: pickMetadata(loop, ["until", "max_iterations"])
272
+ };
273
+ }
274
+ if (isRecord(step.guard)) {
275
+ const guard = step.guard;
276
+ if (guard.when !== undefined) {
277
+ if (typeof guard.when === "boolean") {
278
+ guard.when = String(guard.when);
279
+ }
280
+ else if (typeof guard.when !== "string") {
281
+ const typeDesc = guard.when === null ? "null" : typeof guard.when;
282
+ context.diagnostics.error("GUARD_WHEN_TYPE", `guard.when must be a boolean or CEL expression string, got ${typeDesc}.`, `${path}.guard.when`);
283
+ }
284
+ }
285
+ return {
286
+ ...base,
287
+ kind: "guard",
288
+ metadata: pickMetadata(guard, ["when", "then", "else", "message"])
289
+ };
290
+ }
291
+ if (isRecord(step.approval)) {
292
+ validateApprovalStep(step.approval, path, context);
293
+ return {
294
+ ...base,
295
+ kind: "approval",
296
+ metadata: pickMetadata(step.approval, ["prompt", "timeout", "on_timeout"])
297
+ };
298
+ }
299
+ if (typeof step.subworkflow === "string") {
300
+ return {
301
+ ...base,
302
+ kind: "subworkflow",
303
+ metadata: pickMetadata(step, ["subworkflow", "input"])
304
+ };
305
+ }
306
+ // Defensive: Schema already validates step kind; keep as fallback
307
+ context.diagnostics.error("STEP_KIND", "Step must define one of run: agent, run: program, parallel, fanout, switch, loop, guard, approval, subworkflow, or include.", path);
308
+ return {
309
+ ...base,
310
+ kind: "run.program",
311
+ metadata: {}
312
+ };
313
+ }
314
+ function validateAgentStep(step, path, context) {
315
+ // AGENT_REF: cross-reference check (not possible in JSON Schema)
316
+ if (typeof step.use === "string" && !Object.prototype.hasOwnProperty.call(context.agents, step.use)) {
317
+ context.diagnostics.error("AGENT_REF", `run: agent step references unknown agent '${step.use}'.`, `${path}.use`);
318
+ }
319
+ if (step.retry !== undefined) {
320
+ validateRetry(step.retry, path, context);
321
+ }
322
+ if (isRecord(step.output)) {
323
+ // output.schema deprecation check (semantic, not structural)
324
+ if ("schema" in step.output) {
325
+ 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`);
326
+ }
327
+ const { schema, errors } = compileSchemaDsl(step.output);
328
+ for (const err of errors) {
329
+ context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
330
+ }
331
+ if (errors.length === 0) {
332
+ validateJsonSchema(schema, `${path}.output`, context);
333
+ }
334
+ step.output = schema;
335
+ }
336
+ }
337
+ function validateProgramStep(step, path, context) {
338
+ if (isRecord(step.output)) {
339
+ // output.schema deprecation check (semantic, not structural)
340
+ if ("schema" in step.output) {
341
+ 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`);
342
+ }
343
+ const { schema, errors } = compileSchemaDsl(step.output);
344
+ for (const err of errors) {
345
+ context.diagnostics.error("OUTPUT_SHAPE", err.message, `${path}.output.${err.field}`);
346
+ }
347
+ if (errors.length === 0) {
348
+ validateJsonSchema(schema, `${path}.output`, context);
349
+ }
350
+ step.output = schema;
351
+ }
352
+ // Enforce: output schema requires capture.parse: json
353
+ if (isRecord(step.output)) {
354
+ const capture = step.capture;
355
+ if (!capture || capture.parse !== "json") {
356
+ context.diagnostics.error("OUTPUT_REQUIRES_JSON", "run: program output schema requires capture.parse: json.", `${path}.output`);
357
+ }
358
+ }
359
+ }
360
+ function validateFanout(fanout, path, context) {
361
+ // Reject arrays containing non-primitive values (objects, nested arrays)
362
+ // since JSON.stringify of objects produces invalid CEL syntax.
363
+ // Schema validates that over is string|array; this is a runtime coercion check.
364
+ if (Array.isArray(fanout.over)) {
365
+ for (let i = 0; i < fanout.over.length; i++) {
366
+ const el = fanout.over[i];
367
+ if (el !== null && el !== undefined && typeof el === "object") {
368
+ context.diagnostics.error("FANOUT_OVER_TYPE", `fanout.over array elements must be primitives (string, number, boolean, null), got ${typeof el} at index ${i}.`, `${path}.fanout.over[${i}]`);
369
+ }
370
+ }
371
+ // Coerce array → JSON string so the IR always stores strings
372
+ fanout.over = JSON.stringify(fanout.over);
373
+ }
374
+ }
375
+ function validateApprovalStep(approval, path, context) {
376
+ // Duration format validation (not expressible in JSON Schema)
377
+ if (typeof approval.timeout === "string") {
378
+ try {
379
+ parseDurationMs(approval.timeout, { strict: true });
380
+ }
381
+ catch {
382
+ context.diagnostics.error("APPROVAL_TIMEOUT", "approval.timeout must be a valid duration string (e.g. 5m, 2h, 30s).", `${path}.approval.timeout`);
383
+ }
384
+ }
385
+ }
386
+ function validateRetry(retry, path, context) {
387
+ // Duration format validation for backoff (not expressible in JSON Schema)
388
+ if (isRecord(retry) && retry.backoff !== undefined) {
389
+ if (typeof retry.backoff === "string") {
390
+ try {
391
+ parseDurationMs(retry.backoff, { strict: true });
392
+ }
393
+ catch {
394
+ context.diagnostics.error("RETRY_SHAPE", "retry.backoff must be a valid duration string.", `${path}.retry.backoff`);
395
+ }
396
+ }
397
+ }
398
+ }
399
+ function validateStepTimeout(step, path, context) {
400
+ if (step.timeout === undefined)
401
+ return;
402
+ // Duration format validation for string timeouts (not expressible in JSON Schema)
403
+ if (typeof step.timeout === "string") {
404
+ try {
405
+ parseDurationMs(step.timeout, { strict: true });
406
+ }
407
+ catch {
408
+ context.diagnostics.error("STEP_TIMEOUT", "step.timeout must be a valid duration string or number (ms).", `${path}.timeout`);
409
+ }
410
+ }
411
+ }
412
+ function validateJsonSchema(schema, path, context) {
413
+ if (!isRecord(schema)) {
414
+ context.diagnostics.error("JSON_SCHEMA_SHAPE", "Compiled schema must be a JSON Schema object.", path);
415
+ return;
416
+ }
417
+ if (!ajv.validateSchema(schema)) {
418
+ const message = ajv.errorsText(ajv.errors);
419
+ context.diagnostics.error("JSON_SCHEMA_INVALID", `Invalid JSON Schema: ${message}`, path);
420
+ }
421
+ }
422
+ function inferStepKind(step) {
423
+ if (step.run === "agent")
424
+ return "run.agent";
425
+ if (step.run === "program")
426
+ return "run.program";
427
+ if (Array.isArray(step.parallel))
428
+ return "parallel";
429
+ if (isRecord(step.fanout))
430
+ return "fanout";
431
+ if (isRecord(step.switch))
432
+ return "switch";
433
+ if (isRecord(step.loop))
434
+ return "loop";
435
+ if (isRecord(step.guard))
436
+ return "guard";
437
+ if (isRecord(step.approval))
438
+ return "approval";
439
+ if (typeof step.subworkflow === "string")
440
+ return "subworkflow";
441
+ return undefined;
442
+ }
443
+ function collectStepIds(steps, diagnostics) {
444
+ const ids = new Set();
445
+ const kinds = new Map();
446
+ const visit = (items, path) => {
447
+ items.forEach((step, index) => {
448
+ const stepPath = `${path}[${index}]`;
449
+ if (typeof step.id === "string") {
450
+ if (ids.has(step.id)) {
451
+ diagnostics.error("STEP_ID_DUPLICATE", `Duplicate step id '${step.id}'.`, `${stepPath}.id`);
452
+ }
453
+ ids.add(step.id);
454
+ const kind = inferStepKind(step);
455
+ if (kind) {
456
+ kinds.set(step.id, kind);
457
+ }
458
+ }
459
+ if (Array.isArray(step.parallel)) {
460
+ visit(asPlainSteps(step.parallel), `${stepPath}.parallel`);
461
+ }
462
+ if (isRecord(step.fanout) && Array.isArray(step.fanout.do)) {
463
+ visit(asPlainSteps(step.fanout.do), `${stepPath}.fanout.do`);
464
+ }
465
+ if (isRecord(step.switch) && Array.isArray(step.switch.cases)) {
466
+ step.switch.cases.forEach((caseSpec, caseIndex) => {
467
+ if (isRecord(caseSpec) && Array.isArray(caseSpec.do)) {
468
+ visit(asPlainSteps(caseSpec.do), `${stepPath}.switch.cases[${caseIndex}].do`);
469
+ }
470
+ });
471
+ }
472
+ if (isRecord(step.switch) && isRecord(step.switch.default) && Array.isArray(step.switch.default.do)) {
473
+ visit(asPlainSteps(step.switch.default.do), `${stepPath}.switch.default.do`);
474
+ }
475
+ if (isRecord(step.loop) && Array.isArray(step.loop.do)) {
476
+ visit(asPlainSteps(step.loop.do), `${stepPath}.loop.do`);
477
+ }
478
+ });
479
+ };
480
+ visit(steps, "$.workflow.steps");
481
+ return { ids, kinds };
482
+ }
483
+ function keyTemplate(nodePath) {
484
+ return {
485
+ astVersion: 1,
486
+ nodePath: nodePath.join("/")
487
+ };
488
+ }
489
+ function pickMetadata(source, keys) {
490
+ return Object.fromEntries(keys.filter((key) => key in source).map((key) => [key, source[key]]));
491
+ }
492
+ function asSteps(value, path, context) {
493
+ return value.map((item, index) => {
494
+ if (!isRecord(item)) {
495
+ context.diagnostics.error("STEP_SHAPE", "Step entries must be objects.", `${path}[${index}]`);
496
+ return {};
497
+ }
498
+ return item;
499
+ });
500
+ }
501
+ function asPlainSteps(value) {
502
+ return value.filter(isRecord);
503
+ }
504
+ function isWorkflowSpec(value) {
505
+ return (isRecord(value) &&
506
+ typeof value.version === "number" &&
507
+ typeof value.name === "string" &&
508
+ isRecord(value.workflow) &&
509
+ Array.isArray(value.workflow.steps));
510
+ }
511
+ function isRecord(value) {
512
+ return typeof value === "object" && value !== null && !Array.isArray(value);
513
+ }
514
+ function digest(source) {
515
+ return `sha256:${createHash("sha256").update(source).digest("hex")}`;
516
+ }
517
+ function errorMessage(error) {
518
+ return error instanceof Error ? error.message : String(error);
519
+ }
520
+ function result(ok, diagnostics) {
521
+ return {
522
+ ok,
523
+ diagnostics: diagnostics.diagnostics
524
+ };
525
+ }
526
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAe3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAExD,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,UAA0B,EAAE;IAC1E,MAAM,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEhD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,6EAA6E,EAAE,GAAG,CAAC,CAAC;QACpH,OAAO,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACzE,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChG,MAAM,OAAO,GAAmB;QAC9B,WAAW;QACX,OAAO;QACP,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxD,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;IAEF,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtG,MAAM,IAAI,GAAW;QACnB,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,WAAW,EAAE,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC;QACtC,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvF,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3D,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7D,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACvE,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAE/D,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,EAAE,GAAY;QAClB,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;SACvB;QACD,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,IAAI;QACJ,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;QAC/B,WAAW,EAAE,mBAAmB,CAAC,WAAW;KAC7C,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,EAAE;QACF,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,UAA0B,EAAE;IACvE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;AACJ,CAAC;AASD,SAAS,WAAW,CAAC,MAAc,EAAE,WAA0B;IAC7D,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,iBAAiB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAkB,EAAE,OAAuB,EAAE,WAA0B,EAAE,IAAiB;IAChH,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC7B,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,0DAA0D,EAAE,oBAAoB,KAAK,WAAW,CAAC,CAAC;gBACxI,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,+BAA+B,IAAI,CAAC,OAAO,IAAI,EAAE,oBAAoB,KAAK,WAAW,CAAC,CAAC;gBAC1H,SAAS;YACX,CAAC;YACD,MAAM,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YACjF,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;gBACpC,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,kBAAkB,IAAI,CAAC,OAAO,iCAAiC,EAAE,oBAAoB,KAAK,WAAW,CAAC,CAAC;gBAC1I,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAChF,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,QAAQ,EAAE;YACR,GAAG,IAAI,CAAC,QAAQ;YAChB,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAkB,EAAE,OAAuB;IAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEhC,wCAAwC;IACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,kFAAkF;QAClF,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS,CAAE,8BAA8B;QAC/D,2EAA2E;QAC3E,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB,EAAE,UAAoB,EAAE,IAAY,EAAE,OAAuB;IACtG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,WAAW,CAAC,IAAkB,EAAE,UAAoB,EAAE,IAAY,EAAE,OAAuB;IAClG,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;IAChH,2DAA2D;IAC3D,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,wDAAwD,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAC/G,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG;QACX,EAAE;QACF,QAAQ;QACR,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC;KACnC,CAAC;IAEF,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QACzB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACxG,4EAA4E;QAC5E,6EAA6E;QAC7E,gBAAgB;QAChB,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACvE,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,WAAW;YACjB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3B,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SACzG,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE;YACjE,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,OAAO,CAAC;YAClH,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,sCAAsC,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;QACtG,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAC3E,WAAW,EAAE,OAAO;YACpB,QAAQ;YACR,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;SACzG,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;gBAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,uCAAuC,EAAE,GAAG,IAAI,iBAAiB,SAAS,GAAG,CAAC,CAAC;oBACxH,OAAO;gBACT,CAAC;gBACD,sEAAsE;gBACtE,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAChC,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACvC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACxC,CAAC;yBAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC;wBACxE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,oEAAoE,QAAQ,GAAG,EAAE,GAAG,IAAI,iBAAiB,SAAS,QAAQ,CAAC,CAAC;oBAC5K,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,QAAQ,SAAS,GAAG,CAAC,EAAE;oBAC3B,IAAI,EAAE,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBACnE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI,iBAAiB,SAAS,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,iBAAiB,SAAS,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;iBAC7L,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,gCAAgC,EAAE,GAAG,IAAI,eAAe,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,SAAS;gBACb,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,oBAAoB,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;aACzL,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAU;YACvB,QAAQ;YACR,QAAQ,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,uEAAuE;QACvE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC;gBAClE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,8DAA8D,QAAQ,GAAG,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;YAChJ,CAAC;QACH,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;YAC1D,WAAW,EAAE,MAAM;YACnB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACxI,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC;gBAClE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,8DAA8D,QAAQ,GAAG,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;YAChJ,CAAC;QACH,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;SAC3E,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,6HAA6H,EAAE,IAAI,CAAC,CAAC;IAC5K,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB,EAAE,IAAY,EAAE,OAAuB;IAClF,iEAAiE;IACjE,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,6CAA6C,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;IACnH,CAAC;IACD,IAAK,IAAgC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1D,aAAa,CAAE,IAAgC,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,6DAA6D;QAC7D,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,4JAA4J,EAAE,GAAG,IAAI,gBAAgB,CAAC,CAAC;QACnO,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,kBAAkB,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAkB,EAAE,IAAY,EAAE,OAAuB;IACpF,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,6DAA6D;QAC7D,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,8JAA8J,EAAE,GAAG,IAAI,gBAAgB,CAAC,CAAC;QACrO,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,kBAAkB,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IACD,sDAAsD;IACtD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8C,CAAC;QACpE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,sBAAsB,EAAE,0DAA0D,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;QAClI,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B,EAAE,IAAY,EAAE,OAAuB;IAC5F,yEAAyE;IACzE,+DAA+D;IAC/D,gFAAgF;IAChF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC9D,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,sFAAsF,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC/L,CAAC;QACH,CAAC;QACD,6DAA6D;QAC7D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAiC,EAAE,IAAY,EAAE,OAAuB;IACpG,8DAA8D;IAC9D,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,sEAAsE,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;QACpJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY,EAAE,OAAuB;IAC1E,0EAA0E;IAC1E,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,gDAAgD,EAAE,GAAG,IAAI,gBAAgB,CAAC,CAAC;YACtH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA6B,EAAE,IAAY,EAAE,OAAuB;IAC/F,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO;IACvC,kFAAkF;IAClF,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,8DAA8D,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe,EAAE,IAAY,EAAE,OAAuB;IAChF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,+CAA+C,EAAE,IAAI,CAAC,CAAC;QACtG,OAAO;IACT,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,qBAAqB,EAAE,wBAAwB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B;IAClD,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC/D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB,EAAE,WAA0B;IACvE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,KAAqB,EAAE,IAAY,EAAQ,EAAE;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;YACrC,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrB,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,sBAAsB,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC;gBAC9F,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,IAAI,GAAG,aAAa,CAAC,IAA+B,CAAC,CAAC;gBAC5D,IAAI,IAAI,EAAE,CAAC;oBACT,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,WAAW,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,YAAY,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE;oBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrD,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,iBAAiB,SAAS,MAAM,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,oBAAoB,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB;IACrC,OAAO;QACL,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B,EAAE,IAAc;IACnE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,OAAO,CAAC,KAAgB,EAAE,IAAY,EAAE,OAAuB;IACtE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,+BAA+B,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;YAC9F,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,MAAc;IAC5B,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,MAAM,CAAC,EAAW,EAAE,WAA0B;IACrD,OAAO;QACL,EAAE;QACF,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Diagnostic } from "./types.js";
2
+ export declare class DiagnosticBag {
3
+ readonly diagnostics: Diagnostic[];
4
+ error(code: string, message: string, path: string): void;
5
+ warning(code: string, message: string, path: string): void;
6
+ hasErrors(strict?: boolean): boolean;
7
+ private add;
8
+ }
9
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAEjE,qBAAa,aAAa;IACxB,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAM;IAExC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1D,SAAS,CAAC,MAAM,UAAQ,GAAG,OAAO;IAIlC,OAAO,CAAC,GAAG;CAGZ"}
@@ -0,0 +1,16 @@
1
+ export class DiagnosticBag {
2
+ diagnostics = [];
3
+ error(code, message, path) {
4
+ this.add("error", code, message, path);
5
+ }
6
+ warning(code, message, path) {
7
+ this.add("warning", code, message, path);
8
+ }
9
+ hasErrors(strict = false) {
10
+ return this.diagnostics.some((diagnostic) => diagnostic.severity === "error" || (strict && diagnostic.severity === "warning"));
11
+ }
12
+ add(severity, code, message, path) {
13
+ this.diagnostics.push({ severity, code, message, path });
14
+ }
15
+ }
16
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACf,WAAW,GAAiB,EAAE,CAAC;IAExC,KAAK,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;QAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;QACjD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,MAAM,GAAG,KAAK;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;IACjI,CAAC;IAEO,GAAG,CAAC,QAA4B,EAAE,IAAY,EAAE,OAAe,EAAE,IAAY;QACnF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ export interface ParseDurationOptions {
2
+ /** If true, throws on invalid/unparseable input. Default: false (returns 0). */
3
+ strict?: boolean;
4
+ }
5
+ /**
6
+ * Parse a duration string (e.g. "30s", "5m", "1h", "500ms") into milliseconds.
7
+ * Returns 0 for undefined input. By default returns 0 for invalid input;
8
+ * set `{ strict: true }` to throw instead.
9
+ *
10
+ * Only supports ms/s/m/h units (delegates arithmetic to the `ms` library
11
+ * but rejects formats like "2 days" that `ms` would accept).
12
+ */
13
+ export declare function parseDurationMs(value: string | undefined, options?: ParseDurationOptions): number;
14
+ //# sourceMappingURL=duration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../src/duration.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAcjG"}