@aaac/contracts 0.1.5 → 0.1.7
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/README.md +1 -1
- package/dist/{chunk-HHPXHKH3.js → chunk-ZPB2RA4X.js} +125 -15
- package/dist/chunk-ZPB2RA4X.js.map +1 -0
- package/dist/cli/index.js +1 -1
- package/dist/index.d.ts +16 -2
- package/dist/index.js +1 -1
- package/package.json +3 -2
- package/dist/chunk-HHPXHKH3.js.map +0 -1
package/README.md
CHANGED
|
@@ -60,6 +60,10 @@ var OperationSchema = z.object({
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
|
+
var GovernanceSchema = z.object({
|
|
64
|
+
guardrails: z.boolean().optional(),
|
|
65
|
+
observability: z.boolean().optional()
|
|
66
|
+
}).optional();
|
|
63
67
|
var ComponentSchema = z.object({
|
|
64
68
|
schema: z.string().regex(SCHEMA_VERSION_PATTERN, 'schema must match pattern "aaac/x.y"'),
|
|
65
69
|
info: z.object({
|
|
@@ -68,9 +72,11 @@ var ComponentSchema = z.object({
|
|
|
68
72
|
description: z.string().optional()
|
|
69
73
|
}),
|
|
70
74
|
implementation: z.string().optional(),
|
|
75
|
+
embedded_dsl_dir: z.string().optional(),
|
|
71
76
|
projections: z.array(
|
|
72
77
|
z.enum(["library", "cli", "claude", "openai"])
|
|
73
78
|
),
|
|
79
|
+
governance: GovernanceSchema,
|
|
74
80
|
operations: z.record(z.string(), OperationSchema)
|
|
75
81
|
}).superRefine((component, ctx) => {
|
|
76
82
|
const usesAgentic = Object.values(component.operations).some(
|
|
@@ -139,7 +145,9 @@ function normalizeComponent(raw) {
|
|
|
139
145
|
schema: raw.schema,
|
|
140
146
|
info: raw.info,
|
|
141
147
|
implementation: raw.implementation,
|
|
148
|
+
embedded_dsl_dir: raw.embedded_dsl_dir,
|
|
142
149
|
projections: raw.projections,
|
|
150
|
+
governance: raw.governance,
|
|
143
151
|
operations: Object.keys(normalizedOps).length > 0 ? normalizedOps : raw.operations
|
|
144
152
|
};
|
|
145
153
|
}
|
|
@@ -314,15 +322,14 @@ function deepResolve(value, root, resolved, basePath, fileCache) {
|
|
|
314
322
|
}
|
|
315
323
|
|
|
316
324
|
// src/validation.ts
|
|
317
|
-
import { access
|
|
325
|
+
import { access } from "fs/promises";
|
|
318
326
|
import { resolve as resolve2 } from "path";
|
|
319
|
-
import { parse as parseYaml3 } from "yaml";
|
|
320
327
|
function extractIdsFromSection(section) {
|
|
321
328
|
if (!section || typeof section !== "object" || Array.isArray(section)) {
|
|
322
329
|
return [];
|
|
323
330
|
}
|
|
324
331
|
return Object.keys(section).filter(
|
|
325
|
-
(key) => key.length > 0
|
|
332
|
+
(key) => key.length > 0 && !key.startsWith("$")
|
|
326
333
|
);
|
|
327
334
|
}
|
|
328
335
|
function extractImplementationIds(content) {
|
|
@@ -330,8 +337,12 @@ function extractImplementationIds(content) {
|
|
|
330
337
|
return { workflowIds: [], taskIds: [] };
|
|
331
338
|
}
|
|
332
339
|
const doc = content;
|
|
340
|
+
const workflowIds = [
|
|
341
|
+
...extractIdsFromSection(doc.workflow),
|
|
342
|
+
...extractIdsFromSection(doc.workflows)
|
|
343
|
+
];
|
|
333
344
|
return {
|
|
334
|
-
workflowIds:
|
|
345
|
+
workflowIds: Array.from(new Set(workflowIds)),
|
|
335
346
|
taskIds: extractIdsFromSection(doc.tasks)
|
|
336
347
|
};
|
|
337
348
|
}
|
|
@@ -350,20 +361,14 @@ async function loadImplementationIds(implementationPath, basePath) {
|
|
|
350
361
|
`Implementation file not found: ${absolutePath}`
|
|
351
362
|
);
|
|
352
363
|
}
|
|
353
|
-
let content;
|
|
354
|
-
try {
|
|
355
|
-
content = await readFile2(absolutePath, "utf-8");
|
|
356
|
-
} catch (err) {
|
|
357
|
-
throw new ComponentValidationError(
|
|
358
|
-
`Cannot read implementation file ${absolutePath}: ${err.message}`
|
|
359
|
-
);
|
|
360
|
-
}
|
|
361
364
|
let parsed;
|
|
362
365
|
try {
|
|
363
|
-
|
|
366
|
+
const { resolve: resolveDsl } = await import("agent-contracts");
|
|
367
|
+
const result = await resolveDsl(absolutePath);
|
|
368
|
+
parsed = result.data;
|
|
364
369
|
} catch (err) {
|
|
365
370
|
throw new ComponentValidationError(
|
|
366
|
-
`
|
|
371
|
+
`Cannot resolve implementation DSL ${absolutePath}: ${err.message}`
|
|
367
372
|
);
|
|
368
373
|
}
|
|
369
374
|
return extractImplementationIds(parsed);
|
|
@@ -557,7 +562,12 @@ function compileComponent(dsl, options = {}) {
|
|
|
557
562
|
description: dsl.info.description
|
|
558
563
|
},
|
|
559
564
|
implementation: dsl.implementation,
|
|
565
|
+
embeddedDslDir: dsl.embedded_dsl_dir,
|
|
560
566
|
projections: [...dsl.projections],
|
|
567
|
+
governance: dsl.governance ? {
|
|
568
|
+
guardrails: dsl.governance.guardrails,
|
|
569
|
+
observability: dsl.governance.observability
|
|
570
|
+
} : void 0,
|
|
561
571
|
operations
|
|
562
572
|
};
|
|
563
573
|
}
|
|
@@ -714,11 +724,111 @@ function buildCommand(operationName, op) {
|
|
|
714
724
|
command["x-agent"] = xAgent;
|
|
715
725
|
return command;
|
|
716
726
|
}
|
|
727
|
+
var HOOK_CONTEXT_SCHEMA = {
|
|
728
|
+
type: "object",
|
|
729
|
+
properties: {
|
|
730
|
+
command: { type: "string" },
|
|
731
|
+
tool_name: { type: "string" },
|
|
732
|
+
tool_input: {
|
|
733
|
+
type: "object",
|
|
734
|
+
properties: {
|
|
735
|
+
file_path: { type: "string" },
|
|
736
|
+
path: { type: "string" }
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
file_path: { type: "string" },
|
|
740
|
+
content: { type: "string" }
|
|
741
|
+
}
|
|
742
|
+
};
|
|
743
|
+
var HOOK_RESPONSE_SCHEMA = {
|
|
744
|
+
type: "object",
|
|
745
|
+
properties: {
|
|
746
|
+
permission: { type: "string", enum: ["deny"] },
|
|
747
|
+
user_message: { type: "string" },
|
|
748
|
+
agent_message: { type: "string" },
|
|
749
|
+
additionalContext: { type: "string" }
|
|
750
|
+
}
|
|
751
|
+
};
|
|
752
|
+
function buildGuardCommands() {
|
|
753
|
+
return {
|
|
754
|
+
"guard.evaluate": {
|
|
755
|
+
summary: "Evaluate a guardrail hook (reads HookContext JSON from stdin, outputs HookResponse JSON to stdout)",
|
|
756
|
+
streams: {
|
|
757
|
+
stdin: { schema: HOOK_CONTEXT_SCHEMA }
|
|
758
|
+
},
|
|
759
|
+
exits: {
|
|
760
|
+
"0": {
|
|
761
|
+
description: "Allowed \u2014 guardrail check passed",
|
|
762
|
+
stdout: { format: "json", schema: HOOK_RESPONSE_SCHEMA }
|
|
763
|
+
},
|
|
764
|
+
"2": {
|
|
765
|
+
description: "Denied \u2014 guardrail check blocked the request",
|
|
766
|
+
stdout: { format: "json", schema: HOOK_RESPONSE_SCHEMA }
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
"x-agent": {
|
|
770
|
+
risk_level: "low",
|
|
771
|
+
requires_confirmation: false,
|
|
772
|
+
idempotent: true
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
"guard.list": {
|
|
776
|
+
summary: "List active guardrails and enforcement policy",
|
|
777
|
+
exits: {
|
|
778
|
+
"0": {
|
|
779
|
+
description: "Success",
|
|
780
|
+
stdout: {
|
|
781
|
+
format: "json",
|
|
782
|
+
schema: {
|
|
783
|
+
type: "object",
|
|
784
|
+
properties: {
|
|
785
|
+
policy: { type: "string" },
|
|
786
|
+
entries: { type: "array" }
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
"x-agent": {
|
|
793
|
+
risk_level: "low",
|
|
794
|
+
requires_confirmation: false,
|
|
795
|
+
idempotent: true
|
|
796
|
+
}
|
|
797
|
+
},
|
|
798
|
+
"guard.status": {
|
|
799
|
+
summary: "Show recent guardrail evaluation summary",
|
|
800
|
+
exits: {
|
|
801
|
+
"0": {
|
|
802
|
+
description: "Success",
|
|
803
|
+
stdout: {
|
|
804
|
+
format: "json",
|
|
805
|
+
schema: {
|
|
806
|
+
type: "object",
|
|
807
|
+
properties: {
|
|
808
|
+
hasHistory: { type: "boolean" },
|
|
809
|
+
message: { type: "string" },
|
|
810
|
+
recentEvents: { type: "array" }
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"x-agent": {
|
|
817
|
+
risk_level: "low",
|
|
818
|
+
requires_confirmation: false,
|
|
819
|
+
idempotent: true
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
};
|
|
823
|
+
}
|
|
717
824
|
function buildCliContract(ir) {
|
|
718
825
|
const commands = {};
|
|
719
826
|
for (const [name, op] of Object.entries(ir.operations)) {
|
|
720
827
|
commands[name] = buildCommand(name, op);
|
|
721
828
|
}
|
|
829
|
+
if (ir.governance?.guardrails === true) {
|
|
830
|
+
Object.assign(commands, buildGuardCommands());
|
|
831
|
+
}
|
|
722
832
|
return {
|
|
723
833
|
cli_contracts: "0.1.0",
|
|
724
834
|
info: {
|
|
@@ -1241,4 +1351,4 @@ export {
|
|
|
1241
1351
|
generateAll,
|
|
1242
1352
|
writeGeneratedFiles
|
|
1243
1353
|
};
|
|
1244
|
-
//# sourceMappingURL=chunk-
|
|
1354
|
+
//# sourceMappingURL=chunk-ZPB2RA4X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../src/parser.ts","../src/errors.ts","../src/ref-resolver.ts","../src/validation.ts","../src/compiler.ts","../src/generators/cli-generator.ts","../src/generators/schema-to-ts.ts","../src/generators/client-generator.ts","../src/generators/handler-generator.ts","../src/generators/runtime-generator.ts","../src/generators/types-generator.ts","../src/generators/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Supported AaaC schema versions (compiler accepts only these). */\nexport const SUPPORTED_SCHEMA_VERSIONS = [\"aaac/0.1\"] as const;\n\n/** Pattern for schema version field: `aaac/x.y` */\nexport const SCHEMA_VERSION_PATTERN = /^aaac\\/\\d+\\.\\d+$/;\n\nexport const JSONSchemaRefSchema = z.union([\n z.object({ schema: z.record(z.string(), z.unknown()) }),\n z.object({ $ref: z.string() }),\n]);\n\nexport const OptionSchema = z.object({\n name: z.string().min(1),\n schema: z.record(z.string(), z.unknown()),\n required: z.boolean().optional(),\n description: z.string().optional(),\n});\n\nexport const ArtifactSlotValueSchema = z.union([\n z.string(),\n z.object({\n artifact: z.string(),\n direction: z.enum([\"read\", \"write\", \"readwrite\"]),\n }),\n]);\n\nexport const OperationSchema = z\n .object({\n description: z.string().min(1),\n agentWorkflow: z.string().optional(),\n agentTask: z.string().optional(),\n handler: z.string().optional(),\n options: z.array(OptionSchema).optional(),\n input: JSONSchemaRefSchema.optional(),\n output: z.object({\n success: JSONSchemaRefSchema,\n failed: JSONSchemaRefSchema.optional(),\n }),\n artifactSlots: z.record(z.string(), ArtifactSlotValueSchema).optional(),\n riskLevel: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n idempotent: z.boolean().optional(),\n requiresConfirmation: z.boolean().optional(),\n execution: z\n .object({\n timeoutMs: z.number().optional(),\n costCeilingUsd: z.number().optional(),\n })\n .optional(),\n memoryRef: z\n .object({\n input: z.boolean().optional(),\n output: z.boolean().optional(),\n })\n .optional(),\n })\n .superRefine((op, ctx) => {\n const dispatchCount = [op.agentWorkflow, op.agentTask, op.handler].filter(\n (v) => v !== undefined,\n ).length;\n\n if (dispatchCount === 0) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"Exactly one of agentWorkflow, agentTask, or handler must be specified\",\n path: [\"agentWorkflow\"],\n });\n } else if (dispatchCount > 1) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"Only one of agentWorkflow, agentTask, or handler may be specified\",\n path: [\"agentWorkflow\"],\n });\n }\n });\n\nexport const GovernanceSchema = z\n .object({\n guardrails: z.boolean().optional(),\n observability: z.boolean().optional(),\n })\n .optional();\n\nexport const ComponentSchema = z\n .object({\n schema: z\n .string()\n .regex(SCHEMA_VERSION_PATTERN, 'schema must match pattern \"aaac/x.y\"'),\n info: z.object({\n id: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n }),\n implementation: z.string().optional(),\n embedded_dsl_dir: z.string().optional(),\n projections: z.array(\n z.enum([\"library\", \"cli\", \"claude\", \"openai\"]),\n ),\n governance: GovernanceSchema,\n operations: z.record(z.string(), OperationSchema),\n })\n .superRefine((component, ctx) => {\n const usesAgentic = Object.values(component.operations).some(\n (op) => op.agentWorkflow !== undefined || op.agentTask !== undefined,\n );\n\n if (usesAgentic && !component.implementation) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"implementation is required when any operation uses agentWorkflow or agentTask\",\n path: [\"implementation\"],\n });\n }\n });\n\nexport type ComponentDSL = z.infer<typeof ComponentSchema>;\nexport type GovernanceDSL = z.infer<typeof GovernanceSchema>;\nexport type OperationDSL = z.infer<typeof OperationSchema>;\nexport type OptionDSL = z.infer<typeof OptionSchema>;\nexport type JSONSchemaRefDSL = z.infer<typeof JSONSchemaRefSchema>;\n","import { readFile } from \"node:fs/promises\";\nimport { parse as parseYaml } from \"yaml\";\nimport { ZodError } from \"zod\";\nimport { ComponentSchema, type ComponentDSL } from \"./schema.js\";\n\nexport class ComponentParseError extends Error {\n constructor(\n message: string,\n public readonly filePath?: string,\n public readonly cause?: unknown,\n ) {\n super(filePath ? `${filePath}: ${message}` : message);\n this.name = \"ComponentParseError\";\n }\n}\n\nfunction formatZodError(error: ZodError, filePath?: string): string {\n const prefix = filePath ? `${filePath}: ` : \"\";\n const details = error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n return `${prefix}Validation failed: ${details}`;\n}\n\nfunction normalizeOperation(\n op: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n description: op.description,\n agentWorkflow: op.agentWorkflow ?? op.agent_workflow,\n agentTask: op.agentTask ?? op.agent_task,\n handler: op.handler,\n options: op.options,\n input: op.input,\n output: op.output,\n artifactSlots: op.artifactSlots ?? op.artifact_slots,\n riskLevel: op.riskLevel ?? op.risk_level,\n idempotent: op.idempotent,\n requiresConfirmation: op.requiresConfirmation ?? op.requires_confirmation,\n execution: op.execution,\n memoryRef: op.memoryRef ?? op.memory_ref,\n };\n}\n\nfunction normalizeComponent(\n raw: Record<string, unknown>,\n): Record<string, unknown> {\n const operations = raw.operations;\n const normalizedOps: Record<string, unknown> = {};\n\n if (operations && typeof operations === \"object\" && !Array.isArray(operations)) {\n for (const [name, op] of Object.entries(operations)) {\n if (op && typeof op === \"object\" && !Array.isArray(op)) {\n normalizedOps[name] = normalizeOperation(op as Record<string, unknown>);\n } else {\n normalizedOps[name] = op;\n }\n }\n }\n\n return {\n schema: raw.schema,\n info: raw.info,\n implementation: raw.implementation,\n embedded_dsl_dir: raw.embedded_dsl_dir,\n projections: raw.projections,\n governance: raw.governance,\n operations:\n Object.keys(normalizedOps).length > 0 ? normalizedOps : raw.operations,\n };\n}\n\nfunction validateComponent(raw: unknown, filePath?: string): ComponentDSL {\n const normalized =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? normalizeComponent(raw as Record<string, unknown>)\n : raw;\n\n const result = ComponentSchema.safeParse(normalized);\n if (!result.success) {\n throw new ComponentParseError(\n formatZodError(result.error, filePath),\n filePath,\n result.error,\n );\n }\n return result.data;\n}\n\n/**\n * Parse and validate a component YAML string.\n * When `filePath` is provided, `$ref` pointers resolve relative to its directory.\n */\nexport function parseComponentString(\n content: string,\n filePath?: string,\n): ComponentDSL {\n let raw: unknown;\n try {\n raw = parseYaml(content);\n } catch (err) {\n throw new ComponentParseError(\n `Invalid YAML: ${(err as Error).message}`,\n filePath,\n err,\n );\n }\n\n return validateComponent(raw, filePath);\n}\n\n/**\n * Read a component YAML file, resolve `$ref` pointers, and validate.\n */\nexport async function parseComponentFile(\n filePath: string,\n): Promise<ComponentDSL> {\n let content: string;\n try {\n content = await readFile(filePath, \"utf-8\");\n } catch (err) {\n throw new ComponentParseError(\n `Cannot read file: ${(err as Error).message}`,\n filePath,\n err,\n );\n }\n return parseComponentString(content, filePath);\n}\n","export class ComponentCompileError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ComponentCompileError\";\n }\n}\n\nexport class ComponentValidationError extends ComponentCompileError {\n constructor(message: string) {\n super(message);\n this.name = \"ComponentValidationError\";\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { resolve, dirname, extname } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nexport class RefResolutionError extends Error {\n constructor(\n public readonly ref: string,\n message: string,\n ) {\n super(`Cannot resolve $ref \"${ref}\": ${message}`);\n this.name = \"RefResolutionError\";\n }\n}\n\nexport interface ResolveRefsOptions {\n basePath?: string;\n}\n\nfunction loadFile(filePath: string, fileCache: Map<string, unknown>): unknown {\n const absPath = resolve(filePath);\n const cached = fileCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n\n try {\n const content = readFileSync(absPath, \"utf-8\");\n const ext = extname(absPath).toLowerCase();\n const parsed =\n ext === \".json\" ? (JSON.parse(content) as unknown) : parseYaml(content);\n fileCache.set(absPath, parsed);\n return parsed;\n } catch (err) {\n throw new RefResolutionError(\n filePath,\n `Cannot read external file: ${(err as Error).message}`,\n );\n }\n}\n\nfunction resolveJsonPointer(root: unknown, pointer: string): unknown {\n const segments = pointer\n .split(\"/\")\n .filter((s) => s.length > 0)\n .map((s) => s.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = root;\n for (const segment of segments) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n throw new RefResolutionError(\n `#${pointer}`,\n `Cannot traverse into non-object at \"${segment}\"`,\n );\n }\n const obj = current as Record<string, unknown>;\n if (!(segment in obj)) {\n throw new RefResolutionError(`#${pointer}`, `Key \"${segment}\" not found`);\n }\n current = obj[segment];\n }\n return current;\n}\n\nfunction resolveExternalRef(\n ref: string,\n basePath: string,\n fileCache: Map<string, unknown>,\n): unknown {\n const hashIndex = ref.indexOf(\"#/\");\n const filePart = hashIndex >= 0 ? ref.slice(0, hashIndex) : ref;\n const pointer = hashIndex >= 0 ? ref.slice(hashIndex + 1) : null;\n\n const absFilePath = resolve(basePath, filePart);\n const externalDoc = loadFile(absFilePath, fileCache);\n\n if (pointer) {\n return resolveJsonPointer(externalDoc, pointer);\n }\n return externalDoc;\n}\n\n/**\n * Resolves `$ref` pointers within a value tree.\n *\n * - Internal refs (`#/path/to/key`) resolve against `root`.\n * - External file refs (`./path/file.yaml` or `./file.yaml#/pointer`) resolve\n * relative to `basePath`.\n */\nexport function resolveRefs<T>(\n value: T,\n options: ResolveRefsOptions = {},\n): T {\n const resolved = new Set<string>();\n const fileCache = new Map<string, unknown>();\n const basePath = options.basePath ?? process.cwd();\n return deepResolve(value, value, resolved, basePath, fileCache) as T;\n}\n\nfunction deepResolve(\n value: unknown,\n root: unknown,\n resolved: Set<string>,\n basePath: string,\n fileCache: Map<string, unknown>,\n): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n deepResolve(item, root, resolved, basePath, fileCache),\n );\n }\n\n const obj = value as Record<string, unknown>;\n\n if (\"$ref\" in obj && typeof obj[\"$ref\"] === \"string\") {\n const ref = obj[\"$ref\"] as string;\n\n if (ref.startsWith(\"#/\")) {\n if (resolved.has(ref)) {\n throw new RefResolutionError(ref, \"Circular reference detected\");\n }\n resolved.add(ref);\n const pointer = ref.slice(1);\n const target = resolveJsonPointer(root, pointer);\n const result = deepResolve(target, root, resolved, basePath, fileCache);\n resolved.delete(ref);\n return result;\n }\n\n if (resolved.has(ref)) {\n throw new RefResolutionError(ref, \"Circular reference detected\");\n }\n resolved.add(ref);\n\n const target = resolveExternalRef(ref, basePath, fileCache);\n const hashIndex = ref.indexOf(\"#/\");\n const externalBasePath =\n hashIndex >= 0 ? dirname(resolve(basePath, ref.slice(0, hashIndex))) : dirname(resolve(basePath, ref));\n\n const externalResolved = new Set<string>();\n const result = deepResolve(\n target,\n target,\n externalResolved,\n externalBasePath,\n fileCache,\n );\n resolved.delete(ref);\n return result;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = deepResolve(val, root, resolved, basePath, fileCache);\n }\n return result;\n}\n","import { access } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { ComponentIR } from \"./ir.js\";\nimport { ComponentValidationError } from \"./errors.js\";\n\nexport { ComponentValidationError };\n\nexport interface ValidationOptions {\n /** Base directory for resolving relative implementation paths. */\n basePath: string;\n}\n\nexport interface ImplementationIds {\n workflowIds: string[];\n taskIds: string[];\n}\n\nfunction extractIdsFromSection(section: unknown): string[] {\n if (!section || typeof section !== \"object\" || Array.isArray(section)) {\n return [];\n }\n\n // Exclude `$ref`/`$refs` and other directive keys. resolve() should already\n // expand them, but stay defensive in case a raw doc slips through.\n return Object.keys(section as Record<string, unknown>).filter(\n (key) => key.length > 0 && !key.startsWith(\"$\"),\n );\n}\n\n/**\n * Extract workflow and task IDs from a (resolved) agent-contracts DSL document.\n *\n * Reads workflow IDs from BOTH the canonical `workflow` (singular) key used by\n * the aaac DSL convention AND the legacy `workflows` (plural) key, unioned for\n * backward compatibility. Task IDs come from `tasks`. `$`-prefixed directive\n * keys (e.g. `$refs`) are excluded.\n */\nexport function extractImplementationIds(content: unknown): ImplementationIds {\n if (!content || typeof content !== \"object\" || Array.isArray(content)) {\n return { workflowIds: [], taskIds: [] };\n }\n\n const doc = content as Record<string, unknown>;\n const workflowIds = [\n ...extractIdsFromSection(doc.workflow),\n ...extractIdsFromSection(doc.workflows),\n ];\n return {\n workflowIds: Array.from(new Set(workflowIds)),\n taskIds: extractIdsFromSection(doc.tasks),\n };\n}\n\nasync function fileExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function loadImplementationIds(\n implementationPath: string,\n basePath: string,\n): Promise<ImplementationIds> {\n const absolutePath = resolve(basePath, implementationPath);\n\n if (!(await fileExists(absolutePath))) {\n throw new ComponentValidationError(\n `Implementation file not found: ${absolutePath}`,\n );\n }\n\n // Resolve the implementation DSL via the `agent-contracts` package so that\n // `extends`, `$ref`, and `$refs` are expanded — mirroring the runtime's\n // loadDsl() in @aaac/runtime. This makes component validation consistent with\n // how the runtime actually reads the DSL (single source of truth).\n let parsed: unknown;\n try {\n const { resolve: resolveDsl } = await import(\"agent-contracts\");\n const result = await resolveDsl(absolutePath);\n parsed = result.data;\n } catch (err) {\n throw new ComponentValidationError(\n `Cannot resolve implementation DSL ${absolutePath}: ${(err as Error).message}`,\n );\n }\n\n return extractImplementationIds(parsed);\n}\n\nfunction formatAvailableIds(label: string, ids: string[]): string {\n if (ids.length === 0) {\n return `${label}: (none)`;\n }\n return `${label}: ${ids.join(\", \")}`;\n}\n\n/**\n * Validate a compiled Component IR against its implementation DSL.\n *\n * Checks:\n * - implementation file exists (when specified)\n * - agentWorkflow IDs exist in implementation DSL\n * - agentTask IDs exist in implementation DSL\n */\nexport async function validateComponent(\n ir: ComponentIR,\n options: ValidationOptions,\n): Promise<void> {\n const usesAgentic = Object.values(ir.operations).some(\n (op) => op.agentWorkflow !== undefined || op.agentTask !== undefined,\n );\n\n if (!ir.implementation) {\n if (usesAgentic) {\n throw new ComponentValidationError(\n \"implementation is required when any operation uses agentWorkflow or agentTask\",\n );\n }\n return;\n }\n\n const ids = await loadImplementationIds(ir.implementation, options.basePath);\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (op.agentWorkflow !== undefined) {\n if (!ids.workflowIds.includes(op.agentWorkflow)) {\n throw new ComponentValidationError(\n `Operation \"${operationName}\": agentWorkflow \"${op.agentWorkflow}\" not found in implementation DSL. ${formatAvailableIds(\"Available workflows\", ids.workflowIds)}`,\n );\n }\n }\n\n if (op.agentTask !== undefined) {\n if (!ids.taskIds.includes(op.agentTask)) {\n throw new ComponentValidationError(\n `Operation \"${operationName}\": agentTask \"${op.agentTask}\" not found in implementation DSL. ${formatAvailableIds(\"Available tasks\", ids.taskIds)}`,\n );\n }\n }\n }\n}\n","import { dirname } from \"node:path\";\nimport { ComponentCompileError } from \"./errors.js\";\nimport type {\n ArtifactDirection,\n ComponentIR,\n JSONSchema,\n JSONSchemaRef,\n OperationIR,\n OptionIR,\n RiskLevel,\n} from \"./ir.js\";\nimport { parseComponentFile } from \"./parser.js\";\nimport { resolveRefs } from \"./ref-resolver.js\";\nimport {\n SUPPORTED_SCHEMA_VERSIONS,\n type ComponentDSL,\n type JSONSchemaRefDSL,\n type OperationDSL,\n type OptionDSL,\n} from \"./schema.js\";\nimport { validateComponent } from \"./validation.js\";\n\nexport { ComponentCompileError };\n\nfunction assertSupportedSchemaVersion(schema: string): void {\n if (\n !(SUPPORTED_SCHEMA_VERSIONS as readonly string[]).includes(schema)\n ) {\n throw new ComponentCompileError(\n `Unsupported schema version \"${schema}\". Supported: ${SUPPORTED_SCHEMA_VERSIONS.join(\", \")}`,\n );\n }\n}\n\nfunction toJSONSchemaRef(\n ref: JSONSchemaRefDSL,\n basePath?: string,\n): JSONSchemaRef {\n let value: unknown = ref;\n if (basePath) {\n value = resolveRefs(ref, { basePath });\n }\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n if (\"schema\" in obj && obj.schema && typeof obj.schema === \"object\") {\n return { schema: obj.schema as JSONSchema };\n }\n if (\"$ref\" in obj && typeof obj[\"$ref\"] === \"string\") {\n return { $ref: obj[\"$ref\"] };\n }\n return obj as JSONSchema;\n }\n return ref as JSONSchemaRef;\n}\n\nfunction normalizeArtifactSlots(\n slots: OperationDSL[\"artifactSlots\"],\n): OperationIR[\"artifactSlots\"] {\n if (!slots) {\n return {};\n }\n\n const result: OperationIR[\"artifactSlots\"] = {};\n for (const [slotName, value] of Object.entries(slots)) {\n if (typeof value === \"string\") {\n result[slotName] = { artifact: value, direction: \"readwrite\" };\n } else {\n result[slotName] = {\n artifact: value.artifact,\n direction: value.direction as ArtifactDirection,\n };\n }\n }\n return result;\n}\n\nfunction asSchemaObject(ref: JSONSchemaRef | undefined): JSONSchema | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as JSONSchema;\n }\n if (!(\"$ref\" in ref)) {\n return ref as JSONSchema;\n }\n return undefined;\n}\n\n/**\n * Extract failure class names from a resolved failed output schema.\n *\n * Checks, in order:\n * 1. Top-level `failure_classes` array\n * 2. `properties.failure_class.enum`\n * 3. `oneOf` entries with `const` or `properties.failure_class.const`\n */\nexport function extractFailureClasses(\n failedRef: JSONSchemaRef | undefined,\n): string[] {\n const schema = asSchemaObject(failedRef);\n if (!schema) {\n return [];\n }\n\n const failureClasses = schema[\"failure_classes\"];\n if (Array.isArray(failureClasses)) {\n return failureClasses.filter((v): v is string => typeof v === \"string\");\n }\n\n const properties = schema[\"properties\"];\n if (properties && typeof properties === \"object\") {\n const failureClass = (properties as Record<string, unknown>)[\"failure_class\"];\n if (failureClass && typeof failureClass === \"object\") {\n const enumValues = (failureClass as Record<string, unknown>)[\"enum\"];\n if (Array.isArray(enumValues)) {\n return enumValues.filter((v): v is string => typeof v === \"string\");\n }\n }\n }\n\n const oneOf = schema[\"oneOf\"];\n if (Array.isArray(oneOf)) {\n const classes: string[] = [];\n for (const variant of oneOf) {\n if (!variant || typeof variant !== \"object\") {\n continue;\n }\n const obj = variant as Record<string, unknown>;\n if (typeof obj[\"const\"] === \"string\") {\n classes.push(obj[\"const\"]);\n continue;\n }\n const props = obj[\"properties\"];\n if (props && typeof props === \"object\") {\n const fc = (props as Record<string, unknown>)[\"failure_class\"];\n if (fc && typeof fc === \"object\") {\n const c = (fc as Record<string, unknown>)[\"const\"];\n if (typeof c === \"string\") {\n classes.push(c);\n }\n }\n }\n }\n if (classes.length > 0) {\n return classes;\n }\n }\n\n return [];\n}\n\nfunction compileOption(opt: OptionDSL): OptionIR {\n return {\n name: opt.name,\n schema: opt.schema,\n required: opt.required ?? false,\n description: opt.description,\n };\n}\n\nfunction compileOperation(op: OperationDSL, basePath?: string): OperationIR {\n const output = {\n success: toJSONSchemaRef(op.output.success, basePath),\n failed: op.output.failed\n ? toJSONSchemaRef(op.output.failed, basePath)\n : undefined,\n };\n\n return {\n description: op.description,\n agentWorkflow: op.agentWorkflow,\n agentTask: op.agentTask,\n handler: op.handler,\n options: (op.options ?? []).map(compileOption),\n input: op.input ? toJSONSchemaRef(op.input, basePath) : undefined,\n output,\n errorModel: {\n failureClasses: extractFailureClasses(output.failed),\n },\n artifactSlots: normalizeArtifactSlots(op.artifactSlots),\n riskLevel: (op.riskLevel ?? \"medium\") as RiskLevel,\n idempotent: op.idempotent ?? false,\n requiresConfirmation: op.requiresConfirmation ?? false,\n execution: {\n timeoutMs: op.execution?.timeoutMs,\n costCeilingUsd: op.execution?.costCeilingUsd,\n },\n memoryRef: op.memoryRef,\n };\n}\n\nexport interface CompileComponentOptions {\n basePath?: string;\n /** When true (default), validate implementation file and agent workflow/task IDs. */\n validate?: boolean;\n}\n\n/**\n * Compile a validated Component DSL into Component IR.\n */\nexport function compileComponent(\n dsl: ComponentDSL,\n options: CompileComponentOptions = {},\n): ComponentIR {\n assertSupportedSchemaVersion(dsl.schema);\n\n const operations: Record<string, OperationIR> = {};\n for (const [name, op] of Object.entries(dsl.operations)) {\n operations[name] = compileOperation(op, options.basePath);\n }\n\n return {\n schema: dsl.schema,\n info: {\n id: dsl.info.id,\n version: dsl.info.version,\n description: dsl.info.description,\n },\n implementation: dsl.implementation,\n embeddedDslDir: dsl.embedded_dsl_dir,\n projections: [...dsl.projections],\n governance: dsl.governance\n ? {\n guardrails: dsl.governance.guardrails,\n observability: dsl.governance.observability,\n }\n : undefined,\n operations,\n };\n}\n\nasync function maybeValidateComponent(\n ir: ComponentIR,\n options: CompileComponentOptions,\n): Promise<void> {\n if (options.validate === false) {\n return;\n }\n if (!options.basePath) {\n return;\n }\n await validateComponent(ir, { basePath: options.basePath });\n}\n\n/**\n * Compile a validated Component DSL into Component IR, optionally validating\n * implementation references.\n */\nexport async function compileComponentAsync(\n dsl: ComponentDSL,\n options: CompileComponentOptions = {},\n): Promise<ComponentIR> {\n const ir = compileComponent(dsl, options);\n await maybeValidateComponent(ir, options);\n return ir;\n}\n\n/**\n * Parse a component YAML file and compile it to IR.\n */\nexport async function compileComponentFile(\n filePath: string,\n options: Omit<CompileComponentOptions, \"basePath\"> = {},\n): Promise<ComponentIR> {\n const basePath = dirname(filePath);\n const dsl = await parseComponentFile(filePath);\n const ir = compileComponent(dsl, { ...options, basePath });\n await maybeValidateComponent(ir, { ...options, basePath });\n return ir;\n}\n","import { stringify as stringifyYaml } from \"yaml\";\nimport type { ComponentIR, JSONSchemaRef, OperationIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\nfunction unwrapSchema(ref: JSONSchemaRef | undefined): Record<string, unknown> | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as Record<string, unknown>;\n }\n if (\"$ref\" in ref) {\n return { $ref: ref.$ref };\n }\n return ref as Record<string, unknown>;\n}\n\nfunction buildEffects(\n artifactSlots: OperationIR[\"artifactSlots\"],\n): { reads?: string[]; writes?: string[] } | undefined {\n const reads: string[] = [];\n const writes: string[] = [];\n\n for (const [slotName, slot] of Object.entries(artifactSlots)) {\n if (slot.direction === \"read\" || slot.direction === \"readwrite\") {\n reads.push(slotName);\n }\n if (slot.direction === \"write\" || slot.direction === \"readwrite\") {\n writes.push(slotName);\n }\n }\n\n if (reads.length === 0 && writes.length === 0) {\n return undefined;\n }\n\n const effects: { reads?: string[]; writes?: string[] } = {};\n if (reads.length > 0) {\n effects.reads = reads;\n }\n if (writes.length > 0) {\n effects.writes = writes;\n }\n return effects;\n}\n\nfunction buildExits(op: OperationIR): Record<string, Record<string, unknown>> {\n const exits: Record<string, Record<string, unknown>> = {\n \"0\": {\n description: \"Success\",\n },\n };\n\n const successSchema = unwrapSchema(op.output.success);\n if (successSchema) {\n exits[\"0\"].stdout = {\n format: \"json\",\n schema: successSchema,\n };\n }\n\n const failedSchema = unwrapSchema(op.output.failed);\n if (failedSchema) {\n const exitCode = op.errorModel.failureClasses.length > 0 ? \"1\" : \"1\";\n exits[exitCode] = {\n description: \"Operation failed\",\n stderr: {\n format: \"json\",\n schema: failedSchema,\n },\n };\n }\n\n for (let i = 0; i < op.errorModel.failureClasses.length; i++) {\n const code = String(i + 1);\n if (!exits[code]) {\n exits[code] = {\n description: `Failure: ${op.errorModel.failureClasses[i]}`,\n };\n if (failedSchema) {\n exits[code].stderr = {\n format: \"json\",\n schema: failedSchema,\n };\n }\n }\n }\n\n return exits;\n}\n\nfunction buildCommand(operationName: string, op: OperationIR): Record<string, unknown> {\n const command: Record<string, unknown> = {\n summary: op.description,\n };\n\n if (Object.keys(op.artifactSlots).length > 0) {\n const slots: Record<string, { direction: string }> = {};\n for (const [name, slot] of Object.entries(op.artifactSlots)) {\n slots[name] = { direction: slot.direction };\n }\n command.artifact_slots = slots;\n }\n\n if (op.options.length > 0) {\n command.options = op.options.map((opt) => {\n const entry: Record<string, unknown> = {\n name: opt.name,\n schema: opt.schema,\n };\n if (opt.description) {\n entry.description = opt.description;\n }\n if (opt.required) {\n entry.required = true;\n }\n return entry;\n });\n }\n\n const inputSchema = unwrapSchema(op.input);\n if (inputSchema) {\n command.streams = {\n stdin: { schema: inputSchema },\n };\n }\n\n command.exits = buildExits(op);\n\n const effects = buildEffects(op.artifactSlots);\n if (effects) {\n command.effects = effects;\n }\n\n const xAgent: Record<string, unknown> = {\n risk_level: op.riskLevel,\n requires_confirmation: op.requiresConfirmation,\n idempotent: op.idempotent,\n };\n if (op.agentWorkflow) {\n xAgent.dsl_workflow = op.agentWorkflow;\n }\n if (op.agentTask) {\n xAgent.dsl_task = op.agentTask;\n }\n if (op.execution.timeoutMs !== undefined) {\n xAgent.expected_duration_ms = op.execution.timeoutMs;\n }\n command[\"x-agent\"] = xAgent;\n\n return command;\n}\n\nconst HOOK_CONTEXT_SCHEMA = {\n type: \"object\",\n properties: {\n command: { type: \"string\" },\n tool_name: { type: \"string\" },\n tool_input: {\n type: \"object\",\n properties: {\n file_path: { type: \"string\" },\n path: { type: \"string\" },\n },\n },\n file_path: { type: \"string\" },\n content: { type: \"string\" },\n },\n};\n\nconst HOOK_RESPONSE_SCHEMA = {\n type: \"object\",\n properties: {\n permission: { type: \"string\", enum: [\"deny\"] },\n user_message: { type: \"string\" },\n agent_message: { type: \"string\" },\n additionalContext: { type: \"string\" },\n },\n};\n\nfunction buildGuardCommands(): Record<string, unknown> {\n return {\n \"guard.evaluate\": {\n summary:\n \"Evaluate a guardrail hook (reads HookContext JSON from stdin, outputs HookResponse JSON to stdout)\",\n streams: {\n stdin: { schema: HOOK_CONTEXT_SCHEMA },\n },\n exits: {\n \"0\": {\n description: \"Allowed — guardrail check passed\",\n stdout: { format: \"json\", schema: HOOK_RESPONSE_SCHEMA },\n },\n \"2\": {\n description: \"Denied — guardrail check blocked the request\",\n stdout: { format: \"json\", schema: HOOK_RESPONSE_SCHEMA },\n },\n },\n \"x-agent\": {\n risk_level: \"low\",\n requires_confirmation: false,\n idempotent: true,\n },\n },\n \"guard.list\": {\n summary: \"List active guardrails and enforcement policy\",\n exits: {\n \"0\": {\n description: \"Success\",\n stdout: {\n format: \"json\",\n schema: {\n type: \"object\",\n properties: {\n policy: { type: \"string\" },\n entries: { type: \"array\" },\n },\n },\n },\n },\n },\n \"x-agent\": {\n risk_level: \"low\",\n requires_confirmation: false,\n idempotent: true,\n },\n },\n \"guard.status\": {\n summary: \"Show recent guardrail evaluation summary\",\n exits: {\n \"0\": {\n description: \"Success\",\n stdout: {\n format: \"json\",\n schema: {\n type: \"object\",\n properties: {\n hasHistory: { type: \"boolean\" },\n message: { type: \"string\" },\n recentEvents: { type: \"array\" },\n },\n },\n },\n },\n },\n \"x-agent\": {\n risk_level: \"low\",\n requires_confirmation: false,\n idempotent: true,\n },\n },\n };\n}\n\nfunction buildCliContract(ir: ComponentIR): Record<string, unknown> {\n const commands: Record<string, unknown> = {};\n for (const [name, op] of Object.entries(ir.operations)) {\n commands[name] = buildCommand(name, op);\n }\n\n if (ir.governance?.guardrails === true) {\n Object.assign(commands, buildGuardCommands());\n }\n\n return {\n cli_contracts: \"0.1.0\",\n info: {\n title: ir.info.id,\n version: ir.info.version,\n description: ir.info.description ?? `${ir.info.id} component CLI`,\n },\n command_sets: {\n [ir.info.id]: {\n summary: ir.info.description ?? ir.info.id,\n global_options: [\n {\n name: \"resume\",\n schema: { type: \"string\" },\n description: \"Resume from a previous memory_ref ID\",\n },\n ],\n commands,\n },\n },\n };\n}\n\nconst CLI_STUB_CONTENT = `extends: ./generated/cli-contract.generated.yaml\n`;\n\nexport const cliGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const contract = buildCliContract(ir);\n const yamlContent = `# Auto-generated by @aaac/contracts. Do not edit.\\n${stringifyYaml(contract)}`;\n\n const files: GeneratedFile[] = [\n {\n path: \"generated/cli-contract.generated.yaml\",\n content: yamlContent,\n overwrite: true,\n },\n ];\n\n if (ir.projections.includes(\"cli\")) {\n files.push({\n path: \"cli-contract.yaml\",\n content: CLI_STUB_CONTENT,\n overwrite: false,\n });\n }\n\n return files;\n },\n};\n","import type { JSONSchema, JSONSchemaRef } from \"../ir.js\";\n\nfunction unwrapSchema(ref: JSONSchemaRef | undefined): JSONSchema | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as JSONSchema;\n }\n if (\"$ref\" in ref) {\n return undefined;\n }\n return ref as JSONSchema;\n}\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n}\n\nfunction quoteKey(name: string): string {\n return isValidIdentifier(name) ? name : JSON.stringify(name);\n}\n\nfunction schemaTypeName(\n schema: JSONSchema | undefined,\n fallback: string,\n): string {\n if (!schema) {\n return fallback;\n }\n const title = schema[\"title\"];\n if (typeof title === \"string\" && title.length > 0) {\n return title;\n }\n return fallback;\n}\n\n/**\n * Convert a kebab-case or snake_case name to PascalCase.\n */\nexport function toPascalCase(name: string): string {\n return name\n .split(/[-_]/)\n .filter((part) => part.length > 0)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Convert a kebab-case or snake_case name to camelCase.\n */\nexport function toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n if (pascal.length === 0) {\n return name;\n }\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction jsonSchemaToTs(\n schema: JSONSchema | undefined,\n indent: string,\n generated: Set<string>,\n): string {\n if (!schema) {\n return \"unknown\";\n }\n\n const enumValues = schema[\"enum\"];\n if (Array.isArray(enumValues) && enumValues.length > 0) {\n return enumValues\n .map((v) => (typeof v === \"string\" ? JSON.stringify(v) : String(v)))\n .join(\" | \");\n }\n\n const type = schema[\"type\"];\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"number\" || type === \"integer\") {\n return \"number\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n if (type === \"array\") {\n const items = schema[\"items\"];\n if (items && typeof items === \"object\" && !Array.isArray(items)) {\n return `${jsonSchemaToTs(items as JSONSchema, indent, generated)}[]`;\n }\n return \"unknown[]\";\n }\n if (type === \"object\" || schema[\"properties\"]) {\n const properties = schema[\"properties\"];\n if (!properties || typeof properties !== \"object\") {\n return \"Record<string, unknown>\";\n }\n\n const required = Array.isArray(schema[\"required\"])\n ? (schema[\"required\"] as string[])\n : [];\n const lines: string[] = [];\n\n for (const [propName, propSchema] of Object.entries(\n properties as Record<string, unknown>,\n )) {\n if (!propSchema || typeof propSchema !== \"object\") {\n continue;\n }\n const optional = required.includes(propName) ? \"\" : \"?\";\n const tsType = jsonSchemaToTs(\n propSchema as JSONSchema,\n indent + \" \",\n generated,\n );\n lines.push(`${indent} ${quoteKey(propName)}${optional}: ${tsType};`);\n }\n\n if (lines.length === 0) {\n return \"Record<string, unknown>\";\n }\n return `{\\n${lines.join(\"\\n\")}\\n${indent}}`;\n }\n\n return \"unknown\";\n}\n\nexport function schemaRefToTsType(\n ref: JSONSchemaRef | undefined,\n fallback = \"unknown\",\n): string {\n return jsonSchemaToTs(unwrapSchema(ref), \"\", new Set()) || fallback;\n}\n\nexport function operationTypeNames(operationName: string): {\n input: string;\n output: string;\n options: string;\n failure: string;\n failureClass: string;\n} {\n const base = toPascalCase(operationName);\n return {\n input: `${base}Input`,\n output: `${base}Output`,\n options: `${base}Options`,\n failure: `${base}Failure`,\n failureClass: `${base}FailureClass`,\n };\n}\n\nexport function interfaceFromSchema(\n name: string,\n ref: JSONSchemaRef | undefined,\n fallbackBody: string,\n): string | undefined {\n const schema = unwrapSchema(ref);\n if (!schema) {\n return undefined;\n }\n\n const body = jsonSchemaToTs(schema, \"\", new Set());\n if (body === \"unknown\" && !schema[\"properties\"]) {\n return `export type ${name} = ${fallbackBody};\\n`;\n }\n if (body.startsWith(\"{\")) {\n return `export interface ${name} ${body}\\n`;\n }\n return `export type ${name} = ${body};\\n`;\n}\n\nexport { unwrapSchema, schemaTypeName };\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames } from \"./schema-to-ts.js\";\n\nexport const clientGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const functions = Object.keys(ir.operations).map((operationName) => {\n const names = operationTypeNames(operationName);\n return `export async function ${operationName}(\n options: ${names.options},\n input: ${names.input},\n ctx: AaacInvocationContext,\n memoryRef?: string,\n): Promise<${names.output}> {\n return runtime.execute(${JSON.stringify(operationName)}, options, input, ctx, memoryRef);\n}`;\n });\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\nimport type {\n${Object.keys(ir.operations)\n .flatMap((name) => {\n const n = operationTypeNames(name);\n const types = [n.input, n.output, n.options];\n return types.map((t) => ` ${t},`);\n })\n .join(\"\\n\")}\n} from \"./component.types.js\";\nimport { runtime, type AaacInvocationContext } from \"./component.runtime.js\";\n\n${functions.join(\"\\n\\n\")}\n`;\n\n return [\n {\n path: \"generated/component.client.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import { existsSync } from \"node:fs\";\nimport { join, relative, dirname } from \"node:path\";\nimport type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames } from \"./schema-to-ts.js\";\n\nfunction typesImportPath(handlerPath: string): string {\n const handlerDir = dirname(handlerPath);\n const rel = relative(handlerDir, \"generated/component.types\");\n const importPath = rel.startsWith(\".\") ? rel : `./${rel}`;\n return `${importPath}.js`;\n}\n\nfunction buildHandlerSkeleton(\n operationName: string,\n functionName: string,\n handlerPath: string,\n): string {\n const names = operationTypeNames(operationName);\n const typesImport = typesImportPath(handlerPath);\n\n return `/** Handler skeleton — implement the logic below. */\n/* eslint-disable */\n\nimport type { ${names.input}, ${names.output} } from \"${typesImport}\";\n\nexport async function ${functionName}(\n input: ${names.input},\n): Promise<${names.output}> {\n // TODO: implement\n throw new Error(\"Not implemented: ${functionName}\");\n}\n`;\n}\n\nexport const handlerGenerator: Generator = {\n generate(ir: ComponentIR, options: GenerateOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (!op.handler) {\n continue;\n }\n\n const functionName = op.handler;\n const handlerPath = `./handlers/${functionName}.ts`;\n const absPath = join(options.outputDir, handlerPath);\n if (existsSync(absPath)) {\n files.push({\n path: handlerPath,\n content: \"\",\n overwrite: false,\n warning: `Handler file already exists, skipping: ${handlerPath}`,\n });\n continue;\n }\n\n files.push({\n path: handlerPath,\n content: buildHandlerSkeleton(operationName, functionName, handlerPath),\n overwrite: false,\n });\n }\n\n return files;\n },\n};\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames, toPascalCase } from \"./schema-to-ts.js\";\n\nfunction handlerImportPath(functionName: string): string {\n // Convention: handler file lives at ../handlers/{functionName}.js\n // (relative from generated/component.runtime.ts)\n return `../handlers/${functionName}.js`;\n}\n\nfunction serializeComponent(ir: ComponentIR): string {\n const info: Record<string, string> = {\n id: ir.info.id,\n version: ir.info.version,\n };\n if (ir.info.description) {\n info.description = ir.info.description;\n }\n\n return JSON.stringify(\n {\n schema: ir.schema,\n info,\n projections: ir.projections,\n operations: ir.operations,\n },\n null,\n 2,\n );\n}\n\nfunction buildHandlerImportsAndMap(\n ir: ComponentIR,\n): { imports: string[]; handlersEntries: string[] } {\n const imports: string[] = [];\n const handlersEntries: string[] = [];\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (!op.handler) {\n continue;\n }\n\n const functionName = op.handler;\n const importPath = handlerImportPath(functionName);\n const alias = `_handler_${functionName}`;\n imports.push(\n `import { ${functionName} as ${alias} } from ${JSON.stringify(importPath)};`,\n );\n const names = operationTypeNames(operationName);\n handlersEntries.push(\n ` ${JSON.stringify(operationName)}: async (_options, input, _ctx) => ${alias}(input as ${names.input}),`,\n );\n }\n\n return { imports, handlersEntries };\n}\n\nexport const runtimeGenerator: Generator = {\n generate(ir: ComponentIR, options: GenerateOptions): GeneratedFile[] {\n const componentConst = `${toPascalCase(ir.info.id)}Component`;\n const { imports: handlerImports, handlersEntries } =\n buildHandlerImportsAndMap(ir);\n\n const hasHandlers = handlersEntries.length > 0;\n const bindingCall = hasHandlers\n ? `createRuntimeBinding(${componentConst} as any, {\\n${handlersEntries.join(\"\\n\")}\\n})`\n : `createRuntimeBinding(${componentConst} as any)`;\n\n const typeImports =\n Object.keys(ir.operations).length > 0\n ? `import type {\n${Object.keys(ir.operations)\n .flatMap((name) => {\n const n = operationTypeNames(name);\n return [` ${n.input},`, ` ${n.output},`, ` ${n.options},`];\n })\n .join(\"\\n\")}\n} from \"./component.types.js\";\n`\n : `import type {} from \"./component.types.js\";\n`;\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\nimport {\n createRuntimeBinding,\n type AaacInvocationContext,\n} from \"@aaac/runtime\";\n${typeImports}${handlerImports.length > 0 ? `${handlerImports.join(\"\\n\")}\\n` : \"\"}\nconst ${componentConst} = ${serializeComponent(ir)};\n\nfunction applyMemoryRef(\n ctx: AaacInvocationContext,\n memoryRef?: string,\n): AaacInvocationContext {\n if (!memoryRef) {\n return ctx;\n }\n return {\n ...ctx,\n memoryRef: {\n id: memoryRef,\n provider: \"aaac\",\n compat: \"v1\",\n created_at: new Date().toISOString(),\n },\n };\n}\n\nconst _binding = ${bindingCall};\n\nexport { type AaacInvocationContext };\n\nexport const runtime = {\n getOperationNames(): string[] {\n return _binding.getOperationNames();\n },\n getOperationIR(name: string) {\n return _binding.getOperationIR(name);\n },\n execute(\n operationName: string,\n options: Record<string, unknown>,\n input: unknown,\n ctx: AaacInvocationContext,\n memoryRef?: string,\n ): Promise<unknown> {\n return _binding.execute(\n operationName,\n options,\n input,\n applyMemoryRef(ctx, memoryRef),\n );\n },\n};\n`;\n\n return [\n {\n path: \"generated/component.runtime.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport {\n interfaceFromSchema,\n operationTypeNames,\n schemaRefToTsType,\n} from \"./schema-to-ts.js\";\n\nfunction generateOperationTypes(\n operationName: string,\n op: ComponentIR[\"operations\"][string],\n): string {\n const names = operationTypeNames(operationName);\n const parts: string[] = [];\n\n if (op.input) {\n const iface = interfaceFromSchema(\n names.input,\n op.input,\n \"Record<string, unknown>\",\n );\n parts.push(iface ?? `export type ${names.input} = Record<string, unknown>;\\n`);\n } else {\n parts.push(`export type ${names.input} = Record<string, unknown>;\\n`);\n }\n\n const outputIface = interfaceFromSchema(\n names.output,\n op.output.success,\n \"unknown\",\n );\n parts.push(outputIface ?? `export type ${names.output} = unknown;\\n`);\n\n if (op.options.length > 0) {\n const fields = op.options.map((opt) => {\n const fieldName = opt.name.includes(\"-\") || opt.name.includes(\"_\")\n ? JSON.stringify(opt.name)\n : opt.name;\n const optional = opt.required ? \"\" : \"?\";\n const tsType = schemaRefToTsType({ schema: opt.schema });\n const desc = opt.description\n ? ` /** ${opt.description} */\\n`\n : \"\";\n return `${desc} ${fieldName}${optional}: ${tsType};`;\n });\n parts.push(`export interface ${names.options} {\\n${fields.join(\"\\n\")}\\n}\\n`);\n } else {\n parts.push(`export type ${names.options} = Record<string, never>;\\n`);\n }\n\n if (op.output.failed) {\n const failureIface = interfaceFromSchema(\n names.failure,\n op.output.failed,\n \"unknown\",\n );\n parts.push(failureIface ?? `export type ${names.failure} = unknown;\\n`);\n }\n\n if (op.errorModel.failureClasses.length > 0) {\n const union = op.errorModel.failureClasses\n .map((c) => JSON.stringify(c))\n .join(\" | \");\n parts.push(`export type ${names.failureClass} = ${union};\\n`);\n }\n\n return parts.join(\"\\n\");\n}\n\nexport const typesGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const operationBlocks = Object.entries(ir.operations).map(\n ([name, op]) => generateOperationTypes(name, op),\n );\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\n${operationBlocks.join(\"\\n\")}\n`;\n\n return [\n {\n path: \"generated/component.types.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import { mkdir, writeFile, access } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { ComponentIR } from \"../ir.js\";\nimport { cliGenerator } from \"./cli-generator.js\";\nimport { clientGenerator } from \"./client-generator.js\";\nimport { handlerGenerator } from \"./handler-generator.js\";\nimport { runtimeGenerator } from \"./runtime-generator.js\";\nimport { typesGenerator } from \"./types-generator.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\nexport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nexport { typesGenerator } from \"./types-generator.js\";\nexport { clientGenerator } from \"./client-generator.js\";\nexport { runtimeGenerator } from \"./runtime-generator.js\";\nexport { cliGenerator } from \"./cli-generator.js\";\nexport { handlerGenerator } from \"./handler-generator.js\";\n\nconst ALL_GENERATORS: Generator[] = [\n typesGenerator,\n clientGenerator,\n runtimeGenerator,\n cliGenerator,\n handlerGenerator,\n];\n\n/**\n * Run all code generators for a compiled Component IR.\n */\nexport function generateAll(\n ir: ComponentIR,\n options: GenerateOptions,\n): GeneratedFile[] {\n return ALL_GENERATORS.flatMap((gen) => gen.generate(ir, options));\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Write generated files to disk, respecting overwrite policy.\n * - `overwrite: true` — always write (generated/ artifacts)\n * - `overwrite: false` — skip if target already exists (handlers, cli stub)\n */\nexport async function writeGeneratedFiles(\n files: GeneratedFile[],\n outputDir: string,\n): Promise<{ written: string[]; skipped: string[]; warnings: string[] }> {\n const written: string[] = [];\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const file of files) {\n const targetPath = join(outputDir, file.path);\n\n if (file.warning) {\n warnings.push(file.warning);\n }\n\n if (!file.overwrite && (await fileExists(targetPath))) {\n skipped.push(file.path);\n continue;\n }\n\n if (!file.content && !file.overwrite) {\n skipped.push(file.path);\n continue;\n }\n\n await mkdir(dirname(targetPath), { recursive: true });\n await writeFile(targetPath, file.content, \"utf-8\");\n written.push(file.path);\n }\n\n return { written, skipped, warnings };\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAGX,IAAM,4BAA4B,CAAC,UAAU;AAG7C,IAAM,yBAAyB;AAE/B,IAAM,sBAAsB,EAAE,MAAM;AAAA,EACzC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;AAAA,EACtD,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAEM,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACxC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,0BAA0B,EAAE,MAAM;AAAA,EAC7C,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,IACP,UAAU,EAAE,OAAO;AAAA,IACnB,WAAW,EAAE,KAAK,CAAC,QAAQ,SAAS,WAAW,CAAC;AAAA,EAClD,CAAC;AACH,CAAC;AAEM,IAAM,kBAAkB,EAC5B,OAAO;AAAA,EACN,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,EAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACxC,OAAO,oBAAoB,SAAS;AAAA,EACpC,QAAQ,EAAE,OAAO;AAAA,IACf,SAAS;AAAA,IACT,QAAQ,oBAAoB,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,uBAAuB,EAAE,SAAS;AAAA,EACtE,WAAW,EAAE,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,SAAS;AAAA,EACtD,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,sBAAsB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,WAAW,EACR,OAAO;AAAA,IACN,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC,EACA,SAAS;AAAA,EACZ,WAAW,EACR,OAAO;AAAA,IACN,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC5B,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,CAAC,EACA,SAAS;AACd,CAAC,EACA,YAAY,CAAC,IAAI,QAAQ;AACxB,QAAM,gBAAgB,CAAC,GAAG,eAAe,GAAG,WAAW,GAAG,OAAO,EAAE;AAAA,IACjE,CAAC,MAAM,MAAM;AAAA,EACf,EAAE;AAEF,MAAI,kBAAkB,GAAG;AACvB,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,SACE;AAAA,MACF,MAAM,CAAC,eAAe;AAAA,IACxB,CAAC;AAAA,EACH,WAAW,gBAAgB,GAAG;AAC5B,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,SACE;AAAA,MACF,MAAM,CAAC,eAAe;AAAA,IACxB,CAAC;AAAA,EACH;AACF,CAAC;AAEI,IAAM,mBAAmB,EAC7B,OAAO;AAAA,EACN,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC,EACA,SAAS;AAEL,IAAM,kBAAkB,EAC5B,OAAO;AAAA,EACN,QAAQ,EACL,OAAO,EACP,MAAM,wBAAwB,sCAAsC;AAAA,EACvE,MAAM,EAAE,OAAO;AAAA,IACb,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACpB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACzB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAa,EAAE;AAAA,IACb,EAAE,KAAK,CAAC,WAAW,OAAO,UAAU,QAAQ,CAAC;AAAA,EAC/C;AAAA,EACA,YAAY;AAAA,EACZ,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe;AAClD,CAAC,EACA,YAAY,CAAC,WAAW,QAAQ;AAC/B,QAAM,cAAc,OAAO,OAAO,UAAU,UAAU,EAAE;AAAA,IACtD,CAAC,OAAO,GAAG,kBAAkB,UAAa,GAAG,cAAc;AAAA,EAC7D;AAEA,MAAI,eAAe,CAAC,UAAU,gBAAgB;AAC5C,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,SACE;AAAA,MACF,MAAM,CAAC,gBAAgB;AAAA,IACzB,CAAC;AAAA,EACH;AACF,CAAC;;;ACrHH,SAAS,gBAAgB;AACzB,SAAS,SAAS,iBAAiB;AAI5B,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YACE,SACgB,UACA,OAChB;AACA,UAAM,WAAW,GAAG,QAAQ,KAAK,OAAO,KAAK,OAAO;AAHpC;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AAAA,EALkB;AAAA,EACA;AAKpB;AAEA,SAAS,eAAe,OAAiB,UAA2B;AAClE,QAAM,SAAS,WAAW,GAAG,QAAQ,OAAO;AAC5C,QAAM,UAAU,MAAM,OACnB,IAAI,CAAC,UAAU;AACd,UAAM,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AAC5D,WAAO,GAAG,IAAI,KAAK,MAAM,OAAO;AAAA,EAClC,CAAC,EACA,KAAK,IAAI;AACZ,SAAO,GAAG,MAAM,sBAAsB,OAAO;AAC/C;AAEA,SAAS,mBACP,IACyB;AACzB,SAAO;AAAA,IACL,aAAa,GAAG;AAAA,IAChB,eAAe,GAAG,iBAAiB,GAAG;AAAA,IACtC,WAAW,GAAG,aAAa,GAAG;AAAA,IAC9B,SAAS,GAAG;AAAA,IACZ,SAAS,GAAG;AAAA,IACZ,OAAO,GAAG;AAAA,IACV,QAAQ,GAAG;AAAA,IACX,eAAe,GAAG,iBAAiB,GAAG;AAAA,IACtC,WAAW,GAAG,aAAa,GAAG;AAAA,IAC9B,YAAY,GAAG;AAAA,IACf,sBAAsB,GAAG,wBAAwB,GAAG;AAAA,IACpD,WAAW,GAAG;AAAA,IACd,WAAW,GAAG,aAAa,GAAG;AAAA,EAChC;AACF;AAEA,SAAS,mBACP,KACyB;AACzB,QAAM,aAAa,IAAI;AACvB,QAAM,gBAAyC,CAAC;AAEhD,MAAI,cAAc,OAAO,eAAe,YAAY,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC9E,eAAW,CAAC,MAAM,EAAE,KAAK,OAAO,QAAQ,UAAU,GAAG;AACnD,UAAI,MAAM,OAAO,OAAO,YAAY,CAAC,MAAM,QAAQ,EAAE,GAAG;AACtD,sBAAc,IAAI,IAAI,mBAAmB,EAA6B;AAAA,MACxE,OAAO;AACL,sBAAc,IAAI,IAAI;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ,IAAI;AAAA,IACZ,MAAM,IAAI;AAAA,IACV,gBAAgB,IAAI;AAAA,IACpB,kBAAkB,IAAI;AAAA,IACtB,aAAa,IAAI;AAAA,IACjB,YAAY,IAAI;AAAA,IAChB,YACE,OAAO,KAAK,aAAa,EAAE,SAAS,IAAI,gBAAgB,IAAI;AAAA,EAChE;AACF;AAEA,SAAS,kBAAkB,KAAc,UAAiC;AACxE,QAAM,aACJ,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,IAChD,mBAAmB,GAA8B,IACjD;AAEN,QAAM,SAAS,gBAAgB,UAAU,UAAU;AACnD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,eAAe,OAAO,OAAO,QAAQ;AAAA,MACrC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,OAAO;AAChB;AAMO,SAAS,qBACd,SACA,UACc;AACd,MAAI;AACJ,MAAI;AACF,UAAM,UAAU,OAAO;AAAA,EACzB,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR,iBAAkB,IAAc,OAAO;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,kBAAkB,KAAK,QAAQ;AACxC;AAKA,eAAsB,mBACpB,UACuB;AACvB,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,SAAS,UAAU,OAAO;AAAA,EAC5C,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR,qBAAsB,IAAc,OAAO;AAAA,MAC3C;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,qBAAqB,SAAS,QAAQ;AAC/C;;;ACnIO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,cAAuC,sBAAsB;AAAA,EAClE,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;ACZA,SAAS,oBAAoB;AAC7B,SAAS,SAAS,SAAS,eAAe;AAC1C,SAAS,SAASA,kBAAiB;AAE5B,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YACkB,KAChB,SACA;AACA,UAAM,wBAAwB,GAAG,MAAM,OAAO,EAAE;AAHhC;AAIhB,SAAK,OAAO;AAAA,EACd;AAAA,EALkB;AAMpB;AAMA,SAAS,SAAS,UAAkB,WAA0C;AAC5E,QAAM,UAAU,QAAQ,QAAQ;AAChC,QAAM,SAAS,UAAU,IAAI,OAAO;AACpC,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,UAAU,aAAa,SAAS,OAAO;AAC7C,UAAM,MAAM,QAAQ,OAAO,EAAE,YAAY;AACzC,UAAM,SACJ,QAAQ,UAAW,KAAK,MAAM,OAAO,IAAgBA,WAAU,OAAO;AACxE,cAAU,IAAI,SAAS,MAAM;AAC7B,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8BAA+B,IAAc,OAAO;AAAA,IACtD;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,MAAe,SAA0B;AACnE,QAAM,WAAW,QACd,MAAM,GAAG,EACT,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1B,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC;AAEvD,MAAI,UAAmB;AACvB,aAAW,WAAW,UAAU;AAC9B,QAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,UAAU;AAC5E,YAAM,IAAI;AAAA,QACR,IAAI,OAAO;AAAA,QACX,uCAAuC,OAAO;AAAA,MAChD;AAAA,IACF;AACA,UAAM,MAAM;AACZ,QAAI,EAAE,WAAW,MAAM;AACrB,YAAM,IAAI,mBAAmB,IAAI,OAAO,IAAI,QAAQ,OAAO,aAAa;AAAA,IAC1E;AACA,cAAU,IAAI,OAAO;AAAA,EACvB;AACA,SAAO;AACT;AAEA,SAAS,mBACP,KACA,UACA,WACS;AACT,QAAM,YAAY,IAAI,QAAQ,IAAI;AAClC,QAAM,WAAW,aAAa,IAAI,IAAI,MAAM,GAAG,SAAS,IAAI;AAC5D,QAAM,UAAU,aAAa,IAAI,IAAI,MAAM,YAAY,CAAC,IAAI;AAE5D,QAAM,cAAc,QAAQ,UAAU,QAAQ;AAC9C,QAAM,cAAc,SAAS,aAAa,SAAS;AAEnD,MAAI,SAAS;AACX,WAAO,mBAAmB,aAAa,OAAO;AAAA,EAChD;AACA,SAAO;AACT;AASO,SAAS,YACd,OACA,UAA8B,CAAC,GAC5B;AACH,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,YAAY,oBAAI,IAAqB;AAC3C,QAAM,WAAW,QAAQ,YAAY,QAAQ,IAAI;AACjD,SAAO,YAAY,OAAO,OAAO,UAAU,UAAU,SAAS;AAChE;AAEA,SAAS,YACP,OACA,MACA,UACA,UACA,WACS;AACT,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM;AAAA,MAAI,CAAC,SAChB,YAAY,MAAM,MAAM,UAAU,UAAU,SAAS;AAAA,IACvD;AAAA,EACF;AAEA,QAAM,MAAM;AAEZ,MAAI,UAAU,OAAO,OAAO,IAAI,MAAM,MAAM,UAAU;AACpD,UAAM,MAAM,IAAI,MAAM;AAEtB,QAAI,IAAI,WAAW,IAAI,GAAG;AACxB,UAAI,SAAS,IAAI,GAAG,GAAG;AACrB,cAAM,IAAI,mBAAmB,KAAK,6BAA6B;AAAA,MACjE;AACA,eAAS,IAAI,GAAG;AAChB,YAAM,UAAU,IAAI,MAAM,CAAC;AAC3B,YAAMC,UAAS,mBAAmB,MAAM,OAAO;AAC/C,YAAMC,UAAS,YAAYD,SAAQ,MAAM,UAAU,UAAU,SAAS;AACtE,eAAS,OAAO,GAAG;AACnB,aAAOC;AAAA,IACT;AAEA,QAAI,SAAS,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,mBAAmB,KAAK,6BAA6B;AAAA,IACjE;AACA,aAAS,IAAI,GAAG;AAEhB,UAAM,SAAS,mBAAmB,KAAK,UAAU,SAAS;AAC1D,UAAM,YAAY,IAAI,QAAQ,IAAI;AAClC,UAAM,mBACJ,aAAa,IAAI,QAAQ,QAAQ,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,QAAQ,QAAQ,UAAU,GAAG,CAAC;AAEvG,UAAM,mBAAmB,oBAAI,IAAY;AACzC,UAAMA,UAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,aAAS,OAAO,GAAG;AACnB,WAAOA;AAAA,EACT;AAEA,QAAM,SAAkC,CAAC;AACzC,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC5C,WAAO,GAAG,IAAI,YAAY,KAAK,MAAM,UAAU,UAAU,SAAS;AAAA,EACpE;AACA,SAAO;AACT;;;AClKA,SAAS,cAAc;AACvB,SAAS,WAAAC,gBAAe;AAgBxB,SAAS,sBAAsB,SAA4B;AACzD,MAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACrE,WAAO,CAAC;AAAA,EACV;AAIA,SAAO,OAAO,KAAK,OAAkC,EAAE;AAAA,IACrD,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,IAAI,WAAW,GAAG;AAAA,EAChD;AACF;AAUO,SAAS,yBAAyB,SAAqC;AAC5E,MAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACrE,WAAO,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,EACxC;AAEA,QAAM,MAAM;AACZ,QAAM,cAAc;AAAA,IAClB,GAAG,sBAAsB,IAAI,QAAQ;AAAA,IACrC,GAAG,sBAAsB,IAAI,SAAS;AAAA,EACxC;AACA,SAAO;AAAA,IACL,aAAa,MAAM,KAAK,IAAI,IAAI,WAAW,CAAC;AAAA,IAC5C,SAAS,sBAAsB,IAAI,KAAK;AAAA,EAC1C;AACF;AAEA,eAAe,WAAW,cAAwC;AAChE,MAAI;AACF,UAAM,OAAO,YAAY;AACzB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,sBACb,oBACA,UAC4B;AAC5B,QAAM,eAAeC,SAAQ,UAAU,kBAAkB;AAEzD,MAAI,CAAE,MAAM,WAAW,YAAY,GAAI;AACrC,UAAM,IAAI;AAAA,MACR,kCAAkC,YAAY;AAAA,IAChD;AAAA,EACF;AAMA,MAAI;AACJ,MAAI;AACF,UAAM,EAAE,SAAS,WAAW,IAAI,MAAM,OAAO,iBAAiB;AAC9D,UAAM,SAAS,MAAM,WAAW,YAAY;AAC5C,aAAS,OAAO;AAAA,EAClB,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR,qCAAqC,YAAY,KAAM,IAAc,OAAO;AAAA,IAC9E;AAAA,EACF;AAEA,SAAO,yBAAyB,MAAM;AACxC;AAEA,SAAS,mBAAmB,OAAe,KAAuB;AAChE,MAAI,IAAI,WAAW,GAAG;AACpB,WAAO,GAAG,KAAK;AAAA,EACjB;AACA,SAAO,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;AACpC;AAUA,eAAsBC,mBACpB,IACA,SACe;AACf,QAAM,cAAc,OAAO,OAAO,GAAG,UAAU,EAAE;AAAA,IAC/C,CAAC,OAAO,GAAG,kBAAkB,UAAa,GAAG,cAAc;AAAA,EAC7D;AAEA,MAAI,CAAC,GAAG,gBAAgB;AACtB,QAAI,aAAa;AACf,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,QAAQ,QAAQ;AAE3E,aAAW,CAAC,eAAe,EAAE,KAAK,OAAO,QAAQ,GAAG,UAAU,GAAG;AAC/D,QAAI,GAAG,kBAAkB,QAAW;AAClC,UAAI,CAAC,IAAI,YAAY,SAAS,GAAG,aAAa,GAAG;AAC/C,cAAM,IAAI;AAAA,UACR,cAAc,aAAa,qBAAqB,GAAG,aAAa,sCAAsC,mBAAmB,uBAAuB,IAAI,WAAW,CAAC;AAAA,QAClK;AAAA,MACF;AAAA,IACF;AAEA,QAAI,GAAG,cAAc,QAAW;AAC9B,UAAI,CAAC,IAAI,QAAQ,SAAS,GAAG,SAAS,GAAG;AACvC,cAAM,IAAI;AAAA,UACR,cAAc,aAAa,iBAAiB,GAAG,SAAS,sCAAsC,mBAAmB,mBAAmB,IAAI,OAAO,CAAC;AAAA,QAClJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC/IA,SAAS,WAAAC,gBAAe;AAwBxB,SAAS,6BAA6B,QAAsB;AAC1D,MACE,CAAE,0BAAgD,SAAS,MAAM,GACjE;AACA,UAAM,IAAI;AAAA,MACR,+BAA+B,MAAM,iBAAiB,0BAA0B,KAAK,IAAI,CAAC;AAAA,IAC5F;AAAA,EACF;AACF;AAEA,SAAS,gBACP,KACA,UACe;AACf,MAAI,QAAiB;AACrB,MAAI,UAAU;AACZ,YAAQ,YAAY,KAAK,EAAE,SAAS,CAAC;AAAA,EACvC;AAEA,MAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,MAAM;AACZ,QAAI,YAAY,OAAO,IAAI,UAAU,OAAO,IAAI,WAAW,UAAU;AACnE,aAAO,EAAE,QAAQ,IAAI,OAAqB;AAAA,IAC5C;AACA,QAAI,UAAU,OAAO,OAAO,IAAI,MAAM,MAAM,UAAU;AACpD,aAAO,EAAE,MAAM,IAAI,MAAM,EAAE;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,uBACP,OAC8B;AAC9B,MAAI,CAAC,OAAO;AACV,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,SAAuC,CAAC;AAC9C,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,QAAQ,IAAI,EAAE,UAAU,OAAO,WAAW,YAAY;AAAA,IAC/D,OAAO;AACL,aAAO,QAAQ,IAAI;AAAA,QACjB,UAAU,MAAM;AAAA,QAChB,WAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAwD;AAC9E,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AACA,MAAI,YAAY,OAAO,IAAI,UAAU,OAAO,IAAI,WAAW,UAAU;AACnE,WAAO,IAAI;AAAA,EACb;AACA,MAAI,EAAE,UAAU,MAAM;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAUO,SAAS,sBACd,WACU;AACV,QAAM,SAAS,eAAe,SAAS;AACvC,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,iBAAiB,OAAO,iBAAiB;AAC/C,MAAI,MAAM,QAAQ,cAAc,GAAG;AACjC,WAAO,eAAe,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AAAA,EACxE;AAEA,QAAM,aAAa,OAAO,YAAY;AACtC,MAAI,cAAc,OAAO,eAAe,UAAU;AAChD,UAAM,eAAgB,WAAuC,eAAe;AAC5E,QAAI,gBAAgB,OAAO,iBAAiB,UAAU;AACpD,YAAM,aAAc,aAAyC,MAAM;AACnE,UAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,eAAO,WAAW,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO,OAAO;AAC5B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,UAAoB,CAAC;AAC3B,eAAW,WAAW,OAAO;AAC3B,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C;AAAA,MACF;AACA,YAAM,MAAM;AACZ,UAAI,OAAO,IAAI,OAAO,MAAM,UAAU;AACpC,gBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB;AAAA,MACF;AACA,YAAM,QAAQ,IAAI,YAAY;AAC9B,UAAI,SAAS,OAAO,UAAU,UAAU;AACtC,cAAM,KAAM,MAAkC,eAAe;AAC7D,YAAI,MAAM,OAAO,OAAO,UAAU;AAChC,gBAAM,IAAK,GAA+B,OAAO;AACjD,cAAI,OAAO,MAAM,UAAU;AACzB,oBAAQ,KAAK,CAAC;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,SAAS,GAAG;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,cAAc,KAA0B;AAC/C,SAAO;AAAA,IACL,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,UAAU,IAAI,YAAY;AAAA,IAC1B,aAAa,IAAI;AAAA,EACnB;AACF;AAEA,SAAS,iBAAiB,IAAkB,UAAgC;AAC1E,QAAM,SAAS;AAAA,IACb,SAAS,gBAAgB,GAAG,OAAO,SAAS,QAAQ;AAAA,IACpD,QAAQ,GAAG,OAAO,SACd,gBAAgB,GAAG,OAAO,QAAQ,QAAQ,IAC1C;AAAA,EACN;AAEA,SAAO;AAAA,IACL,aAAa,GAAG;AAAA,IAChB,eAAe,GAAG;AAAA,IAClB,WAAW,GAAG;AAAA,IACd,SAAS,GAAG;AAAA,IACZ,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,aAAa;AAAA,IAC7C,OAAO,GAAG,QAAQ,gBAAgB,GAAG,OAAO,QAAQ,IAAI;AAAA,IACxD;AAAA,IACA,YAAY;AAAA,MACV,gBAAgB,sBAAsB,OAAO,MAAM;AAAA,IACrD;AAAA,IACA,eAAe,uBAAuB,GAAG,aAAa;AAAA,IACtD,WAAY,GAAG,aAAa;AAAA,IAC5B,YAAY,GAAG,cAAc;AAAA,IAC7B,sBAAsB,GAAG,wBAAwB;AAAA,IACjD,WAAW;AAAA,MACT,WAAW,GAAG,WAAW;AAAA,MACzB,gBAAgB,GAAG,WAAW;AAAA,IAChC;AAAA,IACA,WAAW,GAAG;AAAA,EAChB;AACF;AAWO,SAAS,iBACd,KACA,UAAmC,CAAC,GACvB;AACb,+BAA6B,IAAI,MAAM;AAEvC,QAAM,aAA0C,CAAC;AACjD,aAAW,CAAC,MAAM,EAAE,KAAK,OAAO,QAAQ,IAAI,UAAU,GAAG;AACvD,eAAW,IAAI,IAAI,iBAAiB,IAAI,QAAQ,QAAQ;AAAA,EAC1D;AAEA,SAAO;AAAA,IACL,QAAQ,IAAI;AAAA,IACZ,MAAM;AAAA,MACJ,IAAI,IAAI,KAAK;AAAA,MACb,SAAS,IAAI,KAAK;AAAA,MAClB,aAAa,IAAI,KAAK;AAAA,IACxB;AAAA,IACA,gBAAgB,IAAI;AAAA,IACpB,gBAAgB,IAAI;AAAA,IACpB,aAAa,CAAC,GAAG,IAAI,WAAW;AAAA,IAChC,YAAY,IAAI,aACZ;AAAA,MACE,YAAY,IAAI,WAAW;AAAA,MAC3B,eAAe,IAAI,WAAW;AAAA,IAChC,IACA;AAAA,IACJ;AAAA,EACF;AACF;AAEA,eAAe,uBACb,IACA,SACe;AACf,MAAI,QAAQ,aAAa,OAAO;AAC9B;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,UAAU;AACrB;AAAA,EACF;AACA,QAAMC,mBAAkB,IAAI,EAAE,UAAU,QAAQ,SAAS,CAAC;AAC5D;AAMA,eAAsB,sBACpB,KACA,UAAmC,CAAC,GACd;AACtB,QAAM,KAAK,iBAAiB,KAAK,OAAO;AACxC,QAAM,uBAAuB,IAAI,OAAO;AACxC,SAAO;AACT;AAKA,eAAsB,qBACpB,UACA,UAAqD,CAAC,GAChC;AACtB,QAAM,WAAWC,SAAQ,QAAQ;AACjC,QAAM,MAAM,MAAM,mBAAmB,QAAQ;AAC7C,QAAM,KAAK,iBAAiB,KAAK,EAAE,GAAG,SAAS,SAAS,CAAC;AACzD,QAAM,uBAAuB,IAAI,EAAE,GAAG,SAAS,SAAS,CAAC;AACzD,SAAO;AACT;;;AC/QA,SAAS,aAAa,qBAAqB;AAI3C,SAAS,aAAa,KAAqE;AACzF,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AACA,MAAI,YAAY,OAAO,IAAI,UAAU,OAAO,IAAI,WAAW,UAAU;AACnE,WAAO,IAAI;AAAA,EACb;AACA,MAAI,UAAU,KAAK;AACjB,WAAO,EAAE,MAAM,IAAI,KAAK;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,SAAS,aACP,eACqD;AACrD,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAmB,CAAC;AAE1B,aAAW,CAAC,UAAU,IAAI,KAAK,OAAO,QAAQ,aAAa,GAAG;AAC5D,QAAI,KAAK,cAAc,UAAU,KAAK,cAAc,aAAa;AAC/D,YAAM,KAAK,QAAQ;AAAA,IACrB;AACA,QAAI,KAAK,cAAc,WAAW,KAAK,cAAc,aAAa;AAChE,aAAO,KAAK,QAAQ;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,MAAM,WAAW,KAAK,OAAO,WAAW,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,QAAM,UAAmD,CAAC;AAC1D,MAAI,MAAM,SAAS,GAAG;AACpB,YAAQ,QAAQ;AAAA,EAClB;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,YAAQ,SAAS;AAAA,EACnB;AACA,SAAO;AACT;AAEA,SAAS,WAAW,IAA0D;AAC5E,QAAM,QAAiD;AAAA,IACrD,KAAK;AAAA,MACH,aAAa;AAAA,IACf;AAAA,EACF;AAEA,QAAM,gBAAgB,aAAa,GAAG,OAAO,OAAO;AACpD,MAAI,eAAe;AACjB,UAAM,GAAG,EAAE,SAAS;AAAA,MAClB,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,eAAe,aAAa,GAAG,OAAO,MAAM;AAClD,MAAI,cAAc;AAChB,UAAM,WAAW,GAAG,WAAW,eAAe,SAAS,IAAI,MAAM;AACjE,UAAM,QAAQ,IAAI;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,GAAG,WAAW,eAAe,QAAQ,KAAK;AAC5D,UAAM,OAAO,OAAO,IAAI,CAAC;AACzB,QAAI,CAAC,MAAM,IAAI,GAAG;AAChB,YAAM,IAAI,IAAI;AAAA,QACZ,aAAa,YAAY,GAAG,WAAW,eAAe,CAAC,CAAC;AAAA,MAC1D;AACA,UAAI,cAAc;AAChB,cAAM,IAAI,EAAE,SAAS;AAAA,UACnB,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,eAAuB,IAA0C;AACrF,QAAM,UAAmC;AAAA,IACvC,SAAS,GAAG;AAAA,EACd;AAEA,MAAI,OAAO,KAAK,GAAG,aAAa,EAAE,SAAS,GAAG;AAC5C,UAAM,QAA+C,CAAC;AACtD,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,GAAG,aAAa,GAAG;AAC3D,YAAM,IAAI,IAAI,EAAE,WAAW,KAAK,UAAU;AAAA,IAC5C;AACA,YAAQ,iBAAiB;AAAA,EAC3B;AAEA,MAAI,GAAG,QAAQ,SAAS,GAAG;AACzB,YAAQ,UAAU,GAAG,QAAQ,IAAI,CAAC,QAAQ;AACxC,YAAM,QAAiC;AAAA,QACrC,MAAM,IAAI;AAAA,QACV,QAAQ,IAAI;AAAA,MACd;AACA,UAAI,IAAI,aAAa;AACnB,cAAM,cAAc,IAAI;AAAA,MAC1B;AACA,UAAI,IAAI,UAAU;AAChB,cAAM,WAAW;AAAA,MACnB;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,aAAa,GAAG,KAAK;AACzC,MAAI,aAAa;AACf,YAAQ,UAAU;AAAA,MAChB,OAAO,EAAE,QAAQ,YAAY;AAAA,IAC/B;AAAA,EACF;AAEA,UAAQ,QAAQ,WAAW,EAAE;AAE7B,QAAM,UAAU,aAAa,GAAG,aAAa;AAC7C,MAAI,SAAS;AACX,YAAQ,UAAU;AAAA,EACpB;AAEA,QAAM,SAAkC;AAAA,IACtC,YAAY,GAAG;AAAA,IACf,uBAAuB,GAAG;AAAA,IAC1B,YAAY,GAAG;AAAA,EACjB;AACA,MAAI,GAAG,eAAe;AACpB,WAAO,eAAe,GAAG;AAAA,EAC3B;AACA,MAAI,GAAG,WAAW;AAChB,WAAO,WAAW,GAAG;AAAA,EACvB;AACA,MAAI,GAAG,UAAU,cAAc,QAAW;AACxC,WAAO,uBAAuB,GAAG,UAAU;AAAA,EAC7C;AACA,UAAQ,SAAS,IAAI;AAErB,SAAO;AACT;AAEA,IAAM,sBAAsB;AAAA,EAC1B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,SAAS;AAAA,IAC1B,WAAW,EAAE,MAAM,SAAS;AAAA,IAC5B,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,WAAW,EAAE,MAAM,SAAS;AAAA,QAC5B,MAAM,EAAE,MAAM,SAAS;AAAA,MACzB;AAAA,IACF;AAAA,IACA,WAAW,EAAE,MAAM,SAAS;AAAA,IAC5B,SAAS,EAAE,MAAM,SAAS;AAAA,EAC5B;AACF;AAEA,IAAM,uBAAuB;AAAA,EAC3B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,YAAY,EAAE,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE;AAAA,IAC7C,cAAc,EAAE,MAAM,SAAS;AAAA,IAC/B,eAAe,EAAE,MAAM,SAAS;AAAA,IAChC,mBAAmB,EAAE,MAAM,SAAS;AAAA,EACtC;AACF;AAEA,SAAS,qBAA8C;AACrD,SAAO;AAAA,IACL,kBAAkB;AAAA,MAChB,SACE;AAAA,MACF,SAAS;AAAA,QACP,OAAO,EAAE,QAAQ,oBAAoB;AAAA,MACvC;AAAA,MACA,OAAO;AAAA,QACL,KAAK;AAAA,UACH,aAAa;AAAA,UACb,QAAQ,EAAE,QAAQ,QAAQ,QAAQ,qBAAqB;AAAA,QACzD;AAAA,QACA,KAAK;AAAA,UACH,aAAa;AAAA,UACb,QAAQ,EAAE,QAAQ,QAAQ,QAAQ,qBAAqB;AAAA,QACzD;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,uBAAuB;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,QACL,KAAK;AAAA,UACH,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,QAAQ;AAAA,YACR,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,QAAQ,EAAE,MAAM,SAAS;AAAA,gBACzB,SAAS,EAAE,MAAM,QAAQ;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,uBAAuB;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,MACd,SAAS;AAAA,MACT,OAAO;AAAA,QACL,KAAK;AAAA,UACH,aAAa;AAAA,UACb,QAAQ;AAAA,YACN,QAAQ;AAAA,YACR,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,YAAY,EAAE,MAAM,UAAU;AAAA,gBAC9B,SAAS,EAAE,MAAM,SAAS;AAAA,gBAC1B,cAAc,EAAE,MAAM,QAAQ;AAAA,cAChC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,uBAAuB;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,IAA0C;AAClE,QAAM,WAAoC,CAAC;AAC3C,aAAW,CAAC,MAAM,EAAE,KAAK,OAAO,QAAQ,GAAG,UAAU,GAAG;AACtD,aAAS,IAAI,IAAI,aAAa,MAAM,EAAE;AAAA,EACxC;AAEA,MAAI,GAAG,YAAY,eAAe,MAAM;AACtC,WAAO,OAAO,UAAU,mBAAmB,CAAC;AAAA,EAC9C;AAEA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,MAAM;AAAA,MACJ,OAAO,GAAG,KAAK;AAAA,MACf,SAAS,GAAG,KAAK;AAAA,MACjB,aAAa,GAAG,KAAK,eAAe,GAAG,GAAG,KAAK,EAAE;AAAA,IACnD;AAAA,IACA,cAAc;AAAA,MACZ,CAAC,GAAG,KAAK,EAAE,GAAG;AAAA,QACZ,SAAS,GAAG,KAAK,eAAe,GAAG,KAAK;AAAA,QACxC,gBAAgB;AAAA,UACd;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,EAAE,MAAM,SAAS;AAAA,YACzB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB;AAAA;AAGlB,IAAM,eAA0B;AAAA,EACrC,SAAS,IAAiB,UAA4C;AACpE,UAAM,WAAW,iBAAiB,EAAE;AACpC,UAAM,cAAc;AAAA,EAAsD,cAAc,QAAQ,CAAC;AAEjG,UAAM,QAAyB;AAAA,MAC7B;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF;AAEA,QAAI,GAAG,YAAY,SAAS,KAAK,GAAG;AAClC,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,QACT,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;;;ACvTA,SAASC,cAAa,KAAwD;AAC5E,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AACA,MAAI,YAAY,OAAO,IAAI,UAAU,OAAO,IAAI,WAAW,UAAU;AACnE,WAAO,IAAI;AAAA,EACb;AACA,MAAI,UAAU,KAAK;AACjB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAuB;AAChD,SAAO,6BAA6B,KAAK,IAAI;AAC/C;AAEA,SAAS,SAAS,MAAsB;AACtC,SAAO,kBAAkB,IAAI,IAAI,OAAO,KAAK,UAAU,IAAI;AAC7D;AAmBO,SAAS,aAAa,MAAsB;AACjD,SAAO,KACJ,MAAM,MAAM,EACZ,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAChC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AACZ;AAaA,SAAS,eACP,QACA,QACA,WACQ;AACR,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,OAAO,MAAM;AAChC,MAAI,MAAM,QAAQ,UAAU,KAAK,WAAW,SAAS,GAAG;AACtD,WAAO,WACJ,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,CAAE,EAClE,KAAK,KAAK;AAAA,EACf;AAEA,QAAM,OAAO,OAAO,MAAM;AAC1B,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,YAAY,SAAS,WAAW;AAC3C,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW;AACtB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,SAAS;AACpB,UAAM,QAAQ,OAAO,OAAO;AAC5B,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,aAAO,GAAG,eAAe,OAAqB,QAAQ,SAAS,CAAC;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AACA,MAAI,SAAS,YAAY,OAAO,YAAY,GAAG;AAC7C,UAAM,aAAa,OAAO,YAAY;AACtC,QAAI,CAAC,cAAc,OAAO,eAAe,UAAU;AACjD,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,QAAQ,OAAO,UAAU,CAAC,IAC5C,OAAO,UAAU,IAClB,CAAC;AACL,UAAM,QAAkB,CAAC;AAEzB,eAAW,CAAC,UAAU,UAAU,KAAK,OAAO;AAAA,MAC1C;AAAA,IACF,GAAG;AACD,UAAI,CAAC,cAAc,OAAO,eAAe,UAAU;AACjD;AAAA,MACF;AACA,YAAM,WAAW,SAAS,SAAS,QAAQ,IAAI,KAAK;AACpD,YAAM,SAAS;AAAA,QACb;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MACF;AACA,YAAM,KAAK,GAAG,MAAM,KAAK,SAAS,QAAQ,CAAC,GAAG,QAAQ,KAAK,MAAM,GAAG;AAAA,IACtE;AAEA,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EAAM,MAAM,KAAK,IAAI,CAAC;AAAA,EAAK,MAAM;AAAA,EAC1C;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,KACA,WAAW,WACH;AACR,SAAO,eAAeC,cAAa,GAAG,GAAG,IAAI,oBAAI,IAAI,CAAC,KAAK;AAC7D;AAEO,SAAS,mBAAmB,eAMjC;AACA,QAAM,OAAO,aAAa,aAAa;AACvC,SAAO;AAAA,IACL,OAAO,GAAG,IAAI;AAAA,IACd,QAAQ,GAAG,IAAI;AAAA,IACf,SAAS,GAAG,IAAI;AAAA,IAChB,SAAS,GAAG,IAAI;AAAA,IAChB,cAAc,GAAG,IAAI;AAAA,EACvB;AACF;AAEO,SAAS,oBACd,MACA,KACA,cACoB;AACpB,QAAM,SAASA,cAAa,GAAG;AAC/B,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,eAAe,QAAQ,IAAI,oBAAI,IAAI,CAAC;AACjD,MAAI,SAAS,aAAa,CAAC,OAAO,YAAY,GAAG;AAC/C,WAAO,eAAe,IAAI,MAAM,YAAY;AAAA;AAAA,EAC9C;AACA,MAAI,KAAK,WAAW,GAAG,GAAG;AACxB,WAAO,oBAAoB,IAAI,IAAI,IAAI;AAAA;AAAA,EACzC;AACA,SAAO,eAAe,IAAI,MAAM,IAAI;AAAA;AACtC;;;ACrKO,IAAM,kBAA6B;AAAA,EACxC,SAAS,IAAiB,UAA4C;AACpE,UAAM,YAAY,OAAO,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,kBAAkB;AAClE,YAAM,QAAQ,mBAAmB,aAAa;AAC9C,aAAO,yBAAyB,aAAa;AAAA,aACtC,MAAM,OAAO;AAAA,WACf,MAAM,KAAK;AAAA;AAAA;AAAA,aAGT,MAAM,MAAM;AAAA,2BACE,KAAK,UAAU,aAAa,CAAC;AAAA;AAAA,IAEpD,CAAC;AAED,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA,EAIlB,OAAO,KAAK,GAAG,UAAU,EACxB,QAAQ,CAAC,SAAS;AACjB,YAAM,IAAI,mBAAmB,IAAI;AACjC,YAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;AAC3C,aAAO,MAAM,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG;AAAA,IACnC,CAAC,EACA,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAIX,UAAU,KAAK,MAAM,CAAC;AAAA;AAGpB,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;AC3CA,SAAS,kBAAkB;AAC3B,SAAS,MAAM,UAAU,WAAAC,gBAAe;AAKxC,SAAS,gBAAgB,aAA6B;AACpD,QAAM,aAAaC,SAAQ,WAAW;AACtC,QAAM,MAAM,SAAS,YAAY,2BAA2B;AAC5D,QAAM,aAAa,IAAI,WAAW,GAAG,IAAI,MAAM,KAAK,GAAG;AACvD,SAAO,GAAG,UAAU;AACtB;AAEA,SAAS,qBACP,eACA,cACA,aACQ;AACR,QAAM,QAAQ,mBAAmB,aAAa;AAC9C,QAAM,cAAc,gBAAgB,WAAW;AAE/C,SAAO;AAAA;AAAA;AAAA,gBAGO,MAAM,KAAK,KAAK,MAAM,MAAM,YAAY,WAAW;AAAA;AAAA,wBAE3C,YAAY;AAAA,WACzB,MAAM,KAAK;AAAA,aACT,MAAM,MAAM;AAAA;AAAA,sCAEa,YAAY;AAAA;AAAA;AAGlD;AAEO,IAAM,mBAA8B;AAAA,EACzC,SAAS,IAAiB,SAA2C;AACnE,UAAM,QAAyB,CAAC;AAEhC,eAAW,CAAC,eAAe,EAAE,KAAK,OAAO,QAAQ,GAAG,UAAU,GAAG;AAC/D,UAAI,CAAC,GAAG,SAAS;AACf;AAAA,MACF;AAEA,YAAM,eAAe,GAAG;AACxB,YAAM,cAAc,cAAc,YAAY;AAC9C,YAAM,UAAU,KAAK,QAAQ,WAAW,WAAW;AACnD,UAAI,WAAW,OAAO,GAAG;AACvB,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,SAAS;AAAA,UACT,WAAW;AAAA,UACX,SAAS,0CAA0C,WAAW;AAAA,QAChE,CAAC;AACD;AAAA,MACF;AAEA,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,SAAS,qBAAqB,eAAe,cAAc,WAAW;AAAA,QACtE,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;;;AC9DA,SAAS,kBAAkB,cAA8B;AAGvD,SAAO,eAAe,YAAY;AACpC;AAEA,SAAS,mBAAmB,IAAyB;AACnD,QAAM,OAA+B;AAAA,IACnC,IAAI,GAAG,KAAK;AAAA,IACZ,SAAS,GAAG,KAAK;AAAA,EACnB;AACA,MAAI,GAAG,KAAK,aAAa;AACvB,SAAK,cAAc,GAAG,KAAK;AAAA,EAC7B;AAEA,SAAO,KAAK;AAAA,IACV;AAAA,MACE,QAAQ,GAAG;AAAA,MACX;AAAA,MACA,aAAa,GAAG;AAAA,MAChB,YAAY,GAAG;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,0BACP,IACkD;AAClD,QAAM,UAAoB,CAAC;AAC3B,QAAM,kBAA4B,CAAC;AAEnC,aAAW,CAAC,eAAe,EAAE,KAAK,OAAO,QAAQ,GAAG,UAAU,GAAG;AAC/D,QAAI,CAAC,GAAG,SAAS;AACf;AAAA,IACF;AAEA,UAAM,eAAe,GAAG;AACxB,UAAM,aAAa,kBAAkB,YAAY;AACjD,UAAM,QAAQ,YAAY,YAAY;AACtC,YAAQ;AAAA,MACN,YAAY,YAAY,OAAO,KAAK,WAAW,KAAK,UAAU,UAAU,CAAC;AAAA,IAC3E;AACA,UAAM,QAAQ,mBAAmB,aAAa;AAC9C,oBAAgB;AAAA,MACd,KAAK,KAAK,UAAU,aAAa,CAAC,sCAAsC,KAAK,aAAa,MAAM,KAAK;AAAA,IACvG;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,gBAAgB;AACpC;AAEO,IAAM,mBAA8B;AAAA,EACzC,SAAS,IAAiB,SAA2C;AACnE,UAAM,iBAAiB,GAAG,aAAa,GAAG,KAAK,EAAE,CAAC;AAClD,UAAM,EAAE,SAAS,gBAAgB,gBAAgB,IAC/C,0BAA0B,EAAE;AAE9B,UAAM,cAAc,gBAAgB,SAAS;AAC7C,UAAM,cAAc,cAChB,wBAAwB,cAAc;AAAA,EAAe,gBAAgB,KAAK,IAAI,CAAC;AAAA,MAC/E,wBAAwB,cAAc;AAE1C,UAAM,cACJ,OAAO,KAAK,GAAG,UAAU,EAAE,SAAS,IAChC;AAAA,EACR,OAAO,KAAK,GAAG,UAAU,EACxB,QAAQ,CAAC,SAAS;AACjB,YAAM,IAAI,mBAAmB,IAAI;AACjC,aAAO,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,OAAO,GAAG;AAAA,IAC9D,CAAC,EACA,KAAK,IAAI,CAAC;AAAA;AAAA,IAGH;AAAA;AAGN,UAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlB,WAAW,GAAG,eAAe,SAAS,IAAI,GAAG,eAAe,KAAK,IAAI,CAAC;AAAA,IAAO,EAAE;AAAA,QACzE,cAAc,MAAM,mBAAmB,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAoB/B,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4B1B,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;AC1IA,SAAS,uBACP,eACA,IACQ;AACR,QAAM,QAAQ,mBAAmB,aAAa;AAC9C,QAAM,QAAkB,CAAC;AAEzB,MAAI,GAAG,OAAO;AACZ,UAAM,QAAQ;AAAA,MACZ,MAAM;AAAA,MACN,GAAG;AAAA,MACH;AAAA,IACF;AACA,UAAM,KAAK,SAAS,eAAe,MAAM,KAAK;AAAA,CAA+B;AAAA,EAC/E,OAAO;AACL,UAAM,KAAK,eAAe,MAAM,KAAK;AAAA,CAA+B;AAAA,EACtE;AAEA,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,GAAG,OAAO;AAAA,IACV;AAAA,EACF;AACA,QAAM,KAAK,eAAe,eAAe,MAAM,MAAM;AAAA,CAAe;AAEpE,MAAI,GAAG,QAAQ,SAAS,GAAG;AACzB,UAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,QAAQ;AACrC,YAAM,YAAY,IAAI,KAAK,SAAS,GAAG,KAAK,IAAI,KAAK,SAAS,GAAG,IAC7D,KAAK,UAAU,IAAI,IAAI,IACvB,IAAI;AACR,YAAM,WAAW,IAAI,WAAW,KAAK;AACrC,YAAM,SAAS,kBAAkB,EAAE,QAAQ,IAAI,OAAO,CAAC;AACvD,YAAM,OAAO,IAAI,cACb,SAAS,IAAI,WAAW;AAAA,IACxB;AACJ,aAAO,GAAG,IAAI,KAAK,SAAS,GAAG,QAAQ,KAAK,MAAM;AAAA,IACpD,CAAC;AACD,UAAM,KAAK,oBAAoB,MAAM,OAAO;AAAA,EAAO,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA,CAAO;AAAA,EAC7E,OAAO;AACL,UAAM,KAAK,eAAe,MAAM,OAAO;AAAA,CAA6B;AAAA,EACtE;AAEA,MAAI,GAAG,OAAO,QAAQ;AACpB,UAAM,eAAe;AAAA,MACnB,MAAM;AAAA,MACN,GAAG,OAAO;AAAA,MACV;AAAA,IACF;AACA,UAAM,KAAK,gBAAgB,eAAe,MAAM,OAAO;AAAA,CAAe;AAAA,EACxE;AAEA,MAAI,GAAG,WAAW,eAAe,SAAS,GAAG;AAC3C,UAAM,QAAQ,GAAG,WAAW,eACzB,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAC5B,KAAK,KAAK;AACb,UAAM,KAAK,eAAe,MAAM,YAAY,MAAM,KAAK;AAAA,CAAK;AAAA,EAC9D;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEO,IAAM,iBAA4B;AAAA,EACvC,SAAS,IAAiB,UAA4C;AACpE,UAAM,kBAAkB,OAAO,QAAQ,GAAG,UAAU,EAAE;AAAA,MACpD,CAAC,CAAC,MAAM,EAAE,MAAM,uBAAuB,MAAM,EAAE;AAAA,IACjD;AAEA,UAAM,UAAU;AAAA;AAAA;AAAA,EAGlB,gBAAgB,KAAK,IAAI,CAAC;AAAA;AAGxB,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;ACzFA,SAAS,OAAO,WAAW,UAAAC,eAAc;AACzC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAgB9B,IAAM,iBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,YACd,IACA,SACiB;AACjB,SAAO,eAAe,QAAQ,CAAC,QAAQ,IAAI,SAAS,IAAI,OAAO,CAAC;AAClE;AAEA,eAAeC,YAAW,MAAgC;AACxD,MAAI;AACF,UAAMC,QAAO,IAAI;AACjB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAOA,eAAsB,oBACpB,OACA,WACuE;AACvE,QAAM,UAAoB,CAAC;AAC3B,QAAM,UAAoB,CAAC;AAC3B,QAAM,WAAqB,CAAC;AAE5B,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAaC,MAAK,WAAW,KAAK,IAAI;AAE5C,QAAI,KAAK,SAAS;AAChB,eAAS,KAAK,KAAK,OAAO;AAAA,IAC5B;AAEA,QAAI,CAAC,KAAK,aAAc,MAAMF,YAAW,UAAU,GAAI;AACrD,cAAQ,KAAK,KAAK,IAAI;AACtB;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,WAAW;AACpC,cAAQ,KAAK,KAAK,IAAI;AACtB;AAAA,IACF;AAEA,UAAM,MAAMG,SAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AACpD,UAAM,UAAU,YAAY,KAAK,SAAS,OAAO;AACjD,YAAQ,KAAK,KAAK,IAAI;AAAA,EACxB;AAEA,SAAO,EAAE,SAAS,SAAS,SAAS;AACtC;","names":["parseYaml","target","result","resolve","resolve","validateComponent","dirname","validateComponent","dirname","unwrapSchema","unwrapSchema","dirname","dirname","access","dirname","join","fileExists","access","join","dirname"]}
|
package/dist/cli/index.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -83,12 +83,17 @@ declare const ComponentSchema: z.ZodObject<{
|
|
|
83
83
|
description: z.ZodOptional<z.ZodString>;
|
|
84
84
|
}, z.core.$strip>;
|
|
85
85
|
implementation: z.ZodOptional<z.ZodString>;
|
|
86
|
+
embedded_dsl_dir: z.ZodOptional<z.ZodString>;
|
|
86
87
|
projections: z.ZodArray<z.ZodEnum<{
|
|
87
88
|
library: "library";
|
|
88
89
|
cli: "cli";
|
|
89
90
|
claude: "claude";
|
|
90
91
|
openai: "openai";
|
|
91
92
|
}>>;
|
|
93
|
+
governance: z.ZodOptional<z.ZodObject<{
|
|
94
|
+
guardrails: z.ZodOptional<z.ZodBoolean>;
|
|
95
|
+
observability: z.ZodOptional<z.ZodBoolean>;
|
|
96
|
+
}, z.core.$strip>>;
|
|
92
97
|
operations: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
93
98
|
description: z.ZodString;
|
|
94
99
|
agentWorkflow: z.ZodOptional<z.ZodString>;
|
|
@@ -211,6 +216,10 @@ interface OperationIR {
|
|
|
211
216
|
costCeilingUsd?: number;
|
|
212
217
|
};
|
|
213
218
|
}
|
|
219
|
+
interface GovernanceConfig {
|
|
220
|
+
guardrails?: boolean;
|
|
221
|
+
observability?: boolean;
|
|
222
|
+
}
|
|
214
223
|
interface ComponentIR {
|
|
215
224
|
schema: string;
|
|
216
225
|
info: {
|
|
@@ -219,7 +228,9 @@ interface ComponentIR {
|
|
|
219
228
|
description?: string;
|
|
220
229
|
};
|
|
221
230
|
implementation?: string;
|
|
231
|
+
embeddedDslDir?: string;
|
|
222
232
|
projections: ProjectionTarget[];
|
|
233
|
+
governance?: GovernanceConfig;
|
|
223
234
|
operations: Record<string, OperationIR>;
|
|
224
235
|
}
|
|
225
236
|
|
|
@@ -267,9 +278,12 @@ interface ImplementationIds {
|
|
|
267
278
|
taskIds: string[];
|
|
268
279
|
}
|
|
269
280
|
/**
|
|
270
|
-
* Extract workflow and task IDs from a
|
|
281
|
+
* Extract workflow and task IDs from a (resolved) agent-contracts DSL document.
|
|
271
282
|
*
|
|
272
|
-
*
|
|
283
|
+
* Reads workflow IDs from BOTH the canonical `workflow` (singular) key used by
|
|
284
|
+
* the aaac DSL convention AND the legacy `workflows` (plural) key, unioned for
|
|
285
|
+
* backward compatibility. Task IDs come from `tasks`. `$`-prefixed directive
|
|
286
|
+
* keys (e.g. `$refs`) are excluded.
|
|
273
287
|
*/
|
|
274
288
|
declare function extractImplementationIds(content: unknown): ImplementationIds;
|
|
275
289
|
/**
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aaac/contracts",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Contract definitions for the
|
|
3
|
+
"version": "0.1.7",
|
|
4
|
+
"description": "Contract definitions for the AaaC (Agent-Assisted Architecture Contracts) toolchain",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"aaac": "./dist/cli/index.js"
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"node": ">=20.0.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
+
"agent-contracts": "^0.35.1",
|
|
43
44
|
"yaml": "^2.8.3",
|
|
44
45
|
"zod": "^4.0.0"
|
|
45
46
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts","../src/parser.ts","../src/errors.ts","../src/ref-resolver.ts","../src/validation.ts","../src/compiler.ts","../src/generators/cli-generator.ts","../src/generators/schema-to-ts.ts","../src/generators/client-generator.ts","../src/generators/handler-generator.ts","../src/generators/runtime-generator.ts","../src/generators/types-generator.ts","../src/generators/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** Supported AaaC schema versions (compiler accepts only these). */\nexport const SUPPORTED_SCHEMA_VERSIONS = [\"aaac/0.1\"] as const;\n\n/** Pattern for schema version field: `aaac/x.y` */\nexport const SCHEMA_VERSION_PATTERN = /^aaac\\/\\d+\\.\\d+$/;\n\nexport const JSONSchemaRefSchema = z.union([\n z.object({ schema: z.record(z.string(), z.unknown()) }),\n z.object({ $ref: z.string() }),\n]);\n\nexport const OptionSchema = z.object({\n name: z.string().min(1),\n schema: z.record(z.string(), z.unknown()),\n required: z.boolean().optional(),\n description: z.string().optional(),\n});\n\nexport const ArtifactSlotValueSchema = z.union([\n z.string(),\n z.object({\n artifact: z.string(),\n direction: z.enum([\"read\", \"write\", \"readwrite\"]),\n }),\n]);\n\nexport const OperationSchema = z\n .object({\n description: z.string().min(1),\n agentWorkflow: z.string().optional(),\n agentTask: z.string().optional(),\n handler: z.string().optional(),\n options: z.array(OptionSchema).optional(),\n input: JSONSchemaRefSchema.optional(),\n output: z.object({\n success: JSONSchemaRefSchema,\n failed: JSONSchemaRefSchema.optional(),\n }),\n artifactSlots: z.record(z.string(), ArtifactSlotValueSchema).optional(),\n riskLevel: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n idempotent: z.boolean().optional(),\n requiresConfirmation: z.boolean().optional(),\n execution: z\n .object({\n timeoutMs: z.number().optional(),\n costCeilingUsd: z.number().optional(),\n })\n .optional(),\n memoryRef: z\n .object({\n input: z.boolean().optional(),\n output: z.boolean().optional(),\n })\n .optional(),\n })\n .superRefine((op, ctx) => {\n const dispatchCount = [op.agentWorkflow, op.agentTask, op.handler].filter(\n (v) => v !== undefined,\n ).length;\n\n if (dispatchCount === 0) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"Exactly one of agentWorkflow, agentTask, or handler must be specified\",\n path: [\"agentWorkflow\"],\n });\n } else if (dispatchCount > 1) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"Only one of agentWorkflow, agentTask, or handler may be specified\",\n path: [\"agentWorkflow\"],\n });\n }\n });\n\nexport const ComponentSchema = z\n .object({\n schema: z\n .string()\n .regex(SCHEMA_VERSION_PATTERN, 'schema must match pattern \"aaac/x.y\"'),\n info: z.object({\n id: z.string().min(1),\n version: z.string().min(1),\n description: z.string().optional(),\n }),\n implementation: z.string().optional(),\n projections: z.array(\n z.enum([\"library\", \"cli\", \"claude\", \"openai\"]),\n ),\n operations: z.record(z.string(), OperationSchema),\n })\n .superRefine((component, ctx) => {\n const usesAgentic = Object.values(component.operations).some(\n (op) => op.agentWorkflow !== undefined || op.agentTask !== undefined,\n );\n\n if (usesAgentic && !component.implementation) {\n ctx.addIssue({\n code: \"custom\",\n message:\n \"implementation is required when any operation uses agentWorkflow or agentTask\",\n path: [\"implementation\"],\n });\n }\n });\n\nexport type ComponentDSL = z.infer<typeof ComponentSchema>;\nexport type OperationDSL = z.infer<typeof OperationSchema>;\nexport type OptionDSL = z.infer<typeof OptionSchema>;\nexport type JSONSchemaRefDSL = z.infer<typeof JSONSchemaRefSchema>;\n","import { readFile } from \"node:fs/promises\";\nimport { parse as parseYaml } from \"yaml\";\nimport { ZodError } from \"zod\";\nimport { ComponentSchema, type ComponentDSL } from \"./schema.js\";\n\nexport class ComponentParseError extends Error {\n constructor(\n message: string,\n public readonly filePath?: string,\n public readonly cause?: unknown,\n ) {\n super(filePath ? `${filePath}: ${message}` : message);\n this.name = \"ComponentParseError\";\n }\n}\n\nfunction formatZodError(error: ZodError, filePath?: string): string {\n const prefix = filePath ? `${filePath}: ` : \"\";\n const details = error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n return `${prefix}Validation failed: ${details}`;\n}\n\nfunction normalizeOperation(\n op: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n description: op.description,\n agentWorkflow: op.agentWorkflow ?? op.agent_workflow,\n agentTask: op.agentTask ?? op.agent_task,\n handler: op.handler,\n options: op.options,\n input: op.input,\n output: op.output,\n artifactSlots: op.artifactSlots ?? op.artifact_slots,\n riskLevel: op.riskLevel ?? op.risk_level,\n idempotent: op.idempotent,\n requiresConfirmation: op.requiresConfirmation ?? op.requires_confirmation,\n execution: op.execution,\n memoryRef: op.memoryRef ?? op.memory_ref,\n };\n}\n\nfunction normalizeComponent(\n raw: Record<string, unknown>,\n): Record<string, unknown> {\n const operations = raw.operations;\n const normalizedOps: Record<string, unknown> = {};\n\n if (operations && typeof operations === \"object\" && !Array.isArray(operations)) {\n for (const [name, op] of Object.entries(operations)) {\n if (op && typeof op === \"object\" && !Array.isArray(op)) {\n normalizedOps[name] = normalizeOperation(op as Record<string, unknown>);\n } else {\n normalizedOps[name] = op;\n }\n }\n }\n\n return {\n schema: raw.schema,\n info: raw.info,\n implementation: raw.implementation,\n projections: raw.projections,\n operations:\n Object.keys(normalizedOps).length > 0 ? normalizedOps : raw.operations,\n };\n}\n\nfunction validateComponent(raw: unknown, filePath?: string): ComponentDSL {\n const normalized =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? normalizeComponent(raw as Record<string, unknown>)\n : raw;\n\n const result = ComponentSchema.safeParse(normalized);\n if (!result.success) {\n throw new ComponentParseError(\n formatZodError(result.error, filePath),\n filePath,\n result.error,\n );\n }\n return result.data;\n}\n\n/**\n * Parse and validate a component YAML string.\n * When `filePath` is provided, `$ref` pointers resolve relative to its directory.\n */\nexport function parseComponentString(\n content: string,\n filePath?: string,\n): ComponentDSL {\n let raw: unknown;\n try {\n raw = parseYaml(content);\n } catch (err) {\n throw new ComponentParseError(\n `Invalid YAML: ${(err as Error).message}`,\n filePath,\n err,\n );\n }\n\n return validateComponent(raw, filePath);\n}\n\n/**\n * Read a component YAML file, resolve `$ref` pointers, and validate.\n */\nexport async function parseComponentFile(\n filePath: string,\n): Promise<ComponentDSL> {\n let content: string;\n try {\n content = await readFile(filePath, \"utf-8\");\n } catch (err) {\n throw new ComponentParseError(\n `Cannot read file: ${(err as Error).message}`,\n filePath,\n err,\n );\n }\n return parseComponentString(content, filePath);\n}\n","export class ComponentCompileError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ComponentCompileError\";\n }\n}\n\nexport class ComponentValidationError extends ComponentCompileError {\n constructor(message: string) {\n super(message);\n this.name = \"ComponentValidationError\";\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { resolve, dirname, extname } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nexport class RefResolutionError extends Error {\n constructor(\n public readonly ref: string,\n message: string,\n ) {\n super(`Cannot resolve $ref \"${ref}\": ${message}`);\n this.name = \"RefResolutionError\";\n }\n}\n\nexport interface ResolveRefsOptions {\n basePath?: string;\n}\n\nfunction loadFile(filePath: string, fileCache: Map<string, unknown>): unknown {\n const absPath = resolve(filePath);\n const cached = fileCache.get(absPath);\n if (cached !== undefined) {\n return cached;\n }\n\n try {\n const content = readFileSync(absPath, \"utf-8\");\n const ext = extname(absPath).toLowerCase();\n const parsed =\n ext === \".json\" ? (JSON.parse(content) as unknown) : parseYaml(content);\n fileCache.set(absPath, parsed);\n return parsed;\n } catch (err) {\n throw new RefResolutionError(\n filePath,\n `Cannot read external file: ${(err as Error).message}`,\n );\n }\n}\n\nfunction resolveJsonPointer(root: unknown, pointer: string): unknown {\n const segments = pointer\n .split(\"/\")\n .filter((s) => s.length > 0)\n .map((s) => s.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = root;\n for (const segment of segments) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n throw new RefResolutionError(\n `#${pointer}`,\n `Cannot traverse into non-object at \"${segment}\"`,\n );\n }\n const obj = current as Record<string, unknown>;\n if (!(segment in obj)) {\n throw new RefResolutionError(`#${pointer}`, `Key \"${segment}\" not found`);\n }\n current = obj[segment];\n }\n return current;\n}\n\nfunction resolveExternalRef(\n ref: string,\n basePath: string,\n fileCache: Map<string, unknown>,\n): unknown {\n const hashIndex = ref.indexOf(\"#/\");\n const filePart = hashIndex >= 0 ? ref.slice(0, hashIndex) : ref;\n const pointer = hashIndex >= 0 ? ref.slice(hashIndex + 1) : null;\n\n const absFilePath = resolve(basePath, filePart);\n const externalDoc = loadFile(absFilePath, fileCache);\n\n if (pointer) {\n return resolveJsonPointer(externalDoc, pointer);\n }\n return externalDoc;\n}\n\n/**\n * Resolves `$ref` pointers within a value tree.\n *\n * - Internal refs (`#/path/to/key`) resolve against `root`.\n * - External file refs (`./path/file.yaml` or `./file.yaml#/pointer`) resolve\n * relative to `basePath`.\n */\nexport function resolveRefs<T>(\n value: T,\n options: ResolveRefsOptions = {},\n): T {\n const resolved = new Set<string>();\n const fileCache = new Map<string, unknown>();\n const basePath = options.basePath ?? process.cwd();\n return deepResolve(value, value, resolved, basePath, fileCache) as T;\n}\n\nfunction deepResolve(\n value: unknown,\n root: unknown,\n resolved: Set<string>,\n basePath: string,\n fileCache: Map<string, unknown>,\n): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value !== \"object\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n deepResolve(item, root, resolved, basePath, fileCache),\n );\n }\n\n const obj = value as Record<string, unknown>;\n\n if (\"$ref\" in obj && typeof obj[\"$ref\"] === \"string\") {\n const ref = obj[\"$ref\"] as string;\n\n if (ref.startsWith(\"#/\")) {\n if (resolved.has(ref)) {\n throw new RefResolutionError(ref, \"Circular reference detected\");\n }\n resolved.add(ref);\n const pointer = ref.slice(1);\n const target = resolveJsonPointer(root, pointer);\n const result = deepResolve(target, root, resolved, basePath, fileCache);\n resolved.delete(ref);\n return result;\n }\n\n if (resolved.has(ref)) {\n throw new RefResolutionError(ref, \"Circular reference detected\");\n }\n resolved.add(ref);\n\n const target = resolveExternalRef(ref, basePath, fileCache);\n const hashIndex = ref.indexOf(\"#/\");\n const externalBasePath =\n hashIndex >= 0 ? dirname(resolve(basePath, ref.slice(0, hashIndex))) : dirname(resolve(basePath, ref));\n\n const externalResolved = new Set<string>();\n const result = deepResolve(\n target,\n target,\n externalResolved,\n externalBasePath,\n fileCache,\n );\n resolved.delete(ref);\n return result;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = deepResolve(val, root, resolved, basePath, fileCache);\n }\n return result;\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport type { ComponentIR } from \"./ir.js\";\nimport { ComponentValidationError } from \"./errors.js\";\n\nexport { ComponentValidationError };\n\nexport interface ValidationOptions {\n /** Base directory for resolving relative implementation paths. */\n basePath: string;\n}\n\nexport interface ImplementationIds {\n workflowIds: string[];\n taskIds: string[];\n}\n\nfunction extractIdsFromSection(section: unknown): string[] {\n if (!section || typeof section !== \"object\" || Array.isArray(section)) {\n return [];\n }\n\n return Object.keys(section as Record<string, unknown>).filter(\n (key) => key.length > 0,\n );\n}\n\n/**\n * Extract workflow and task IDs from a parsed agent-contracts DSL document.\n *\n * Looks for top-level `workflows` / `tasks` keys (map of ID → definition).\n */\nexport function extractImplementationIds(content: unknown): ImplementationIds {\n if (!content || typeof content !== \"object\" || Array.isArray(content)) {\n return { workflowIds: [], taskIds: [] };\n }\n\n const doc = content as Record<string, unknown>;\n return {\n workflowIds: extractIdsFromSection(doc.workflows),\n taskIds: extractIdsFromSection(doc.tasks),\n };\n}\n\nasync function fileExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function loadImplementationIds(\n implementationPath: string,\n basePath: string,\n): Promise<ImplementationIds> {\n const absolutePath = resolve(basePath, implementationPath);\n\n if (!(await fileExists(absolutePath))) {\n throw new ComponentValidationError(\n `Implementation file not found: ${absolutePath}`,\n );\n }\n\n let content: string;\n try {\n content = await readFile(absolutePath, \"utf-8\");\n } catch (err) {\n throw new ComponentValidationError(\n `Cannot read implementation file ${absolutePath}: ${(err as Error).message}`,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = parseYaml(content);\n } catch (err) {\n throw new ComponentValidationError(\n `Invalid YAML in implementation file ${absolutePath}: ${(err as Error).message}`,\n );\n }\n\n return extractImplementationIds(parsed);\n}\n\nfunction formatAvailableIds(label: string, ids: string[]): string {\n if (ids.length === 0) {\n return `${label}: (none)`;\n }\n return `${label}: ${ids.join(\", \")}`;\n}\n\n/**\n * Validate a compiled Component IR against its implementation DSL.\n *\n * Checks:\n * - implementation file exists (when specified)\n * - agentWorkflow IDs exist in implementation DSL\n * - agentTask IDs exist in implementation DSL\n */\nexport async function validateComponent(\n ir: ComponentIR,\n options: ValidationOptions,\n): Promise<void> {\n const usesAgentic = Object.values(ir.operations).some(\n (op) => op.agentWorkflow !== undefined || op.agentTask !== undefined,\n );\n\n if (!ir.implementation) {\n if (usesAgentic) {\n throw new ComponentValidationError(\n \"implementation is required when any operation uses agentWorkflow or agentTask\",\n );\n }\n return;\n }\n\n const ids = await loadImplementationIds(ir.implementation, options.basePath);\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (op.agentWorkflow !== undefined) {\n if (!ids.workflowIds.includes(op.agentWorkflow)) {\n throw new ComponentValidationError(\n `Operation \"${operationName}\": agentWorkflow \"${op.agentWorkflow}\" not found in implementation DSL. ${formatAvailableIds(\"Available workflows\", ids.workflowIds)}`,\n );\n }\n }\n\n if (op.agentTask !== undefined) {\n if (!ids.taskIds.includes(op.agentTask)) {\n throw new ComponentValidationError(\n `Operation \"${operationName}\": agentTask \"${op.agentTask}\" not found in implementation DSL. ${formatAvailableIds(\"Available tasks\", ids.taskIds)}`,\n );\n }\n }\n }\n}\n","import { dirname } from \"node:path\";\nimport { ComponentCompileError } from \"./errors.js\";\nimport type {\n ArtifactDirection,\n ComponentIR,\n JSONSchema,\n JSONSchemaRef,\n OperationIR,\n OptionIR,\n RiskLevel,\n} from \"./ir.js\";\nimport { parseComponentFile } from \"./parser.js\";\nimport { resolveRefs } from \"./ref-resolver.js\";\nimport {\n SUPPORTED_SCHEMA_VERSIONS,\n type ComponentDSL,\n type JSONSchemaRefDSL,\n type OperationDSL,\n type OptionDSL,\n} from \"./schema.js\";\nimport { validateComponent } from \"./validation.js\";\n\nexport { ComponentCompileError };\n\nfunction assertSupportedSchemaVersion(schema: string): void {\n if (\n !(SUPPORTED_SCHEMA_VERSIONS as readonly string[]).includes(schema)\n ) {\n throw new ComponentCompileError(\n `Unsupported schema version \"${schema}\". Supported: ${SUPPORTED_SCHEMA_VERSIONS.join(\", \")}`,\n );\n }\n}\n\nfunction toJSONSchemaRef(\n ref: JSONSchemaRefDSL,\n basePath?: string,\n): JSONSchemaRef {\n let value: unknown = ref;\n if (basePath) {\n value = resolveRefs(ref, { basePath });\n }\n\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>;\n if (\"schema\" in obj && obj.schema && typeof obj.schema === \"object\") {\n return { schema: obj.schema as JSONSchema };\n }\n if (\"$ref\" in obj && typeof obj[\"$ref\"] === \"string\") {\n return { $ref: obj[\"$ref\"] };\n }\n return obj as JSONSchema;\n }\n return ref as JSONSchemaRef;\n}\n\nfunction normalizeArtifactSlots(\n slots: OperationDSL[\"artifactSlots\"],\n): OperationIR[\"artifactSlots\"] {\n if (!slots) {\n return {};\n }\n\n const result: OperationIR[\"artifactSlots\"] = {};\n for (const [slotName, value] of Object.entries(slots)) {\n if (typeof value === \"string\") {\n result[slotName] = { artifact: value, direction: \"readwrite\" };\n } else {\n result[slotName] = {\n artifact: value.artifact,\n direction: value.direction as ArtifactDirection,\n };\n }\n }\n return result;\n}\n\nfunction asSchemaObject(ref: JSONSchemaRef | undefined): JSONSchema | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as JSONSchema;\n }\n if (!(\"$ref\" in ref)) {\n return ref as JSONSchema;\n }\n return undefined;\n}\n\n/**\n * Extract failure class names from a resolved failed output schema.\n *\n * Checks, in order:\n * 1. Top-level `failure_classes` array\n * 2. `properties.failure_class.enum`\n * 3. `oneOf` entries with `const` or `properties.failure_class.const`\n */\nexport function extractFailureClasses(\n failedRef: JSONSchemaRef | undefined,\n): string[] {\n const schema = asSchemaObject(failedRef);\n if (!schema) {\n return [];\n }\n\n const failureClasses = schema[\"failure_classes\"];\n if (Array.isArray(failureClasses)) {\n return failureClasses.filter((v): v is string => typeof v === \"string\");\n }\n\n const properties = schema[\"properties\"];\n if (properties && typeof properties === \"object\") {\n const failureClass = (properties as Record<string, unknown>)[\"failure_class\"];\n if (failureClass && typeof failureClass === \"object\") {\n const enumValues = (failureClass as Record<string, unknown>)[\"enum\"];\n if (Array.isArray(enumValues)) {\n return enumValues.filter((v): v is string => typeof v === \"string\");\n }\n }\n }\n\n const oneOf = schema[\"oneOf\"];\n if (Array.isArray(oneOf)) {\n const classes: string[] = [];\n for (const variant of oneOf) {\n if (!variant || typeof variant !== \"object\") {\n continue;\n }\n const obj = variant as Record<string, unknown>;\n if (typeof obj[\"const\"] === \"string\") {\n classes.push(obj[\"const\"]);\n continue;\n }\n const props = obj[\"properties\"];\n if (props && typeof props === \"object\") {\n const fc = (props as Record<string, unknown>)[\"failure_class\"];\n if (fc && typeof fc === \"object\") {\n const c = (fc as Record<string, unknown>)[\"const\"];\n if (typeof c === \"string\") {\n classes.push(c);\n }\n }\n }\n }\n if (classes.length > 0) {\n return classes;\n }\n }\n\n return [];\n}\n\nfunction compileOption(opt: OptionDSL): OptionIR {\n return {\n name: opt.name,\n schema: opt.schema,\n required: opt.required ?? false,\n description: opt.description,\n };\n}\n\nfunction compileOperation(op: OperationDSL, basePath?: string): OperationIR {\n const output = {\n success: toJSONSchemaRef(op.output.success, basePath),\n failed: op.output.failed\n ? toJSONSchemaRef(op.output.failed, basePath)\n : undefined,\n };\n\n return {\n description: op.description,\n agentWorkflow: op.agentWorkflow,\n agentTask: op.agentTask,\n handler: op.handler,\n options: (op.options ?? []).map(compileOption),\n input: op.input ? toJSONSchemaRef(op.input, basePath) : undefined,\n output,\n errorModel: {\n failureClasses: extractFailureClasses(output.failed),\n },\n artifactSlots: normalizeArtifactSlots(op.artifactSlots),\n riskLevel: (op.riskLevel ?? \"medium\") as RiskLevel,\n idempotent: op.idempotent ?? false,\n requiresConfirmation: op.requiresConfirmation ?? false,\n execution: {\n timeoutMs: op.execution?.timeoutMs,\n costCeilingUsd: op.execution?.costCeilingUsd,\n },\n memoryRef: op.memoryRef,\n };\n}\n\nexport interface CompileComponentOptions {\n basePath?: string;\n /** When true (default), validate implementation file and agent workflow/task IDs. */\n validate?: boolean;\n}\n\n/**\n * Compile a validated Component DSL into Component IR.\n */\nexport function compileComponent(\n dsl: ComponentDSL,\n options: CompileComponentOptions = {},\n): ComponentIR {\n assertSupportedSchemaVersion(dsl.schema);\n\n const operations: Record<string, OperationIR> = {};\n for (const [name, op] of Object.entries(dsl.operations)) {\n operations[name] = compileOperation(op, options.basePath);\n }\n\n return {\n schema: dsl.schema,\n info: {\n id: dsl.info.id,\n version: dsl.info.version,\n description: dsl.info.description,\n },\n implementation: dsl.implementation,\n projections: [...dsl.projections],\n operations,\n };\n}\n\nasync function maybeValidateComponent(\n ir: ComponentIR,\n options: CompileComponentOptions,\n): Promise<void> {\n if (options.validate === false) {\n return;\n }\n if (!options.basePath) {\n return;\n }\n await validateComponent(ir, { basePath: options.basePath });\n}\n\n/**\n * Compile a validated Component DSL into Component IR, optionally validating\n * implementation references.\n */\nexport async function compileComponentAsync(\n dsl: ComponentDSL,\n options: CompileComponentOptions = {},\n): Promise<ComponentIR> {\n const ir = compileComponent(dsl, options);\n await maybeValidateComponent(ir, options);\n return ir;\n}\n\n/**\n * Parse a component YAML file and compile it to IR.\n */\nexport async function compileComponentFile(\n filePath: string,\n options: Omit<CompileComponentOptions, \"basePath\"> = {},\n): Promise<ComponentIR> {\n const basePath = dirname(filePath);\n const dsl = await parseComponentFile(filePath);\n const ir = compileComponent(dsl, { ...options, basePath });\n await maybeValidateComponent(ir, { ...options, basePath });\n return ir;\n}\n","import { stringify as stringifyYaml } from \"yaml\";\nimport type { ComponentIR, JSONSchemaRef, OperationIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\nfunction unwrapSchema(ref: JSONSchemaRef | undefined): Record<string, unknown> | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as Record<string, unknown>;\n }\n if (\"$ref\" in ref) {\n return { $ref: ref.$ref };\n }\n return ref as Record<string, unknown>;\n}\n\nfunction buildEffects(\n artifactSlots: OperationIR[\"artifactSlots\"],\n): { reads?: string[]; writes?: string[] } | undefined {\n const reads: string[] = [];\n const writes: string[] = [];\n\n for (const [slotName, slot] of Object.entries(artifactSlots)) {\n if (slot.direction === \"read\" || slot.direction === \"readwrite\") {\n reads.push(slotName);\n }\n if (slot.direction === \"write\" || slot.direction === \"readwrite\") {\n writes.push(slotName);\n }\n }\n\n if (reads.length === 0 && writes.length === 0) {\n return undefined;\n }\n\n const effects: { reads?: string[]; writes?: string[] } = {};\n if (reads.length > 0) {\n effects.reads = reads;\n }\n if (writes.length > 0) {\n effects.writes = writes;\n }\n return effects;\n}\n\nfunction buildExits(op: OperationIR): Record<string, Record<string, unknown>> {\n const exits: Record<string, Record<string, unknown>> = {\n \"0\": {\n description: \"Success\",\n },\n };\n\n const successSchema = unwrapSchema(op.output.success);\n if (successSchema) {\n exits[\"0\"].stdout = {\n format: \"json\",\n schema: successSchema,\n };\n }\n\n const failedSchema = unwrapSchema(op.output.failed);\n if (failedSchema) {\n const exitCode = op.errorModel.failureClasses.length > 0 ? \"1\" : \"1\";\n exits[exitCode] = {\n description: \"Operation failed\",\n stderr: {\n format: \"json\",\n schema: failedSchema,\n },\n };\n }\n\n for (let i = 0; i < op.errorModel.failureClasses.length; i++) {\n const code = String(i + 1);\n if (!exits[code]) {\n exits[code] = {\n description: `Failure: ${op.errorModel.failureClasses[i]}`,\n };\n if (failedSchema) {\n exits[code].stderr = {\n format: \"json\",\n schema: failedSchema,\n };\n }\n }\n }\n\n return exits;\n}\n\nfunction buildCommand(operationName: string, op: OperationIR): Record<string, unknown> {\n const command: Record<string, unknown> = {\n summary: op.description,\n };\n\n if (Object.keys(op.artifactSlots).length > 0) {\n const slots: Record<string, { direction: string }> = {};\n for (const [name, slot] of Object.entries(op.artifactSlots)) {\n slots[name] = { direction: slot.direction };\n }\n command.artifact_slots = slots;\n }\n\n if (op.options.length > 0) {\n command.options = op.options.map((opt) => {\n const entry: Record<string, unknown> = {\n name: opt.name,\n schema: opt.schema,\n };\n if (opt.description) {\n entry.description = opt.description;\n }\n if (opt.required) {\n entry.required = true;\n }\n return entry;\n });\n }\n\n const inputSchema = unwrapSchema(op.input);\n if (inputSchema) {\n command.streams = {\n stdin: { schema: inputSchema },\n };\n }\n\n command.exits = buildExits(op);\n\n const effects = buildEffects(op.artifactSlots);\n if (effects) {\n command.effects = effects;\n }\n\n const xAgent: Record<string, unknown> = {\n risk_level: op.riskLevel,\n requires_confirmation: op.requiresConfirmation,\n idempotent: op.idempotent,\n };\n if (op.agentWorkflow) {\n xAgent.dsl_workflow = op.agentWorkflow;\n }\n if (op.agentTask) {\n xAgent.dsl_task = op.agentTask;\n }\n if (op.execution.timeoutMs !== undefined) {\n xAgent.expected_duration_ms = op.execution.timeoutMs;\n }\n command[\"x-agent\"] = xAgent;\n\n return command;\n}\n\nfunction buildCliContract(ir: ComponentIR): Record<string, unknown> {\n const commands: Record<string, unknown> = {};\n for (const [name, op] of Object.entries(ir.operations)) {\n commands[name] = buildCommand(name, op);\n }\n\n return {\n cli_contracts: \"0.1.0\",\n info: {\n title: ir.info.id,\n version: ir.info.version,\n description: ir.info.description ?? `${ir.info.id} component CLI`,\n },\n command_sets: {\n [ir.info.id]: {\n summary: ir.info.description ?? ir.info.id,\n global_options: [\n {\n name: \"resume\",\n schema: { type: \"string\" },\n description: \"Resume from a previous memory_ref ID\",\n },\n ],\n commands,\n },\n },\n };\n}\n\nconst CLI_STUB_CONTENT = `extends: ./generated/cli-contract.generated.yaml\n`;\n\nexport const cliGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const contract = buildCliContract(ir);\n const yamlContent = `# Auto-generated by @aaac/contracts. Do not edit.\\n${stringifyYaml(contract)}`;\n\n const files: GeneratedFile[] = [\n {\n path: \"generated/cli-contract.generated.yaml\",\n content: yamlContent,\n overwrite: true,\n },\n ];\n\n if (ir.projections.includes(\"cli\")) {\n files.push({\n path: \"cli-contract.yaml\",\n content: CLI_STUB_CONTENT,\n overwrite: false,\n });\n }\n\n return files;\n },\n};\n","import type { JSONSchema, JSONSchemaRef } from \"../ir.js\";\n\nfunction unwrapSchema(ref: JSONSchemaRef | undefined): JSONSchema | undefined {\n if (!ref) {\n return undefined;\n }\n if (\"schema\" in ref && ref.schema && typeof ref.schema === \"object\") {\n return ref.schema as JSONSchema;\n }\n if (\"$ref\" in ref) {\n return undefined;\n }\n return ref as JSONSchema;\n}\n\nfunction isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n}\n\nfunction quoteKey(name: string): string {\n return isValidIdentifier(name) ? name : JSON.stringify(name);\n}\n\nfunction schemaTypeName(\n schema: JSONSchema | undefined,\n fallback: string,\n): string {\n if (!schema) {\n return fallback;\n }\n const title = schema[\"title\"];\n if (typeof title === \"string\" && title.length > 0) {\n return title;\n }\n return fallback;\n}\n\n/**\n * Convert a kebab-case or snake_case name to PascalCase.\n */\nexport function toPascalCase(name: string): string {\n return name\n .split(/[-_]/)\n .filter((part) => part.length > 0)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Convert a kebab-case or snake_case name to camelCase.\n */\nexport function toCamelCase(name: string): string {\n const pascal = toPascalCase(name);\n if (pascal.length === 0) {\n return name;\n }\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\nfunction jsonSchemaToTs(\n schema: JSONSchema | undefined,\n indent: string,\n generated: Set<string>,\n): string {\n if (!schema) {\n return \"unknown\";\n }\n\n const enumValues = schema[\"enum\"];\n if (Array.isArray(enumValues) && enumValues.length > 0) {\n return enumValues\n .map((v) => (typeof v === \"string\" ? JSON.stringify(v) : String(v)))\n .join(\" | \");\n }\n\n const type = schema[\"type\"];\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"number\" || type === \"integer\") {\n return \"number\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n if (type === \"array\") {\n const items = schema[\"items\"];\n if (items && typeof items === \"object\" && !Array.isArray(items)) {\n return `${jsonSchemaToTs(items as JSONSchema, indent, generated)}[]`;\n }\n return \"unknown[]\";\n }\n if (type === \"object\" || schema[\"properties\"]) {\n const properties = schema[\"properties\"];\n if (!properties || typeof properties !== \"object\") {\n return \"Record<string, unknown>\";\n }\n\n const required = Array.isArray(schema[\"required\"])\n ? (schema[\"required\"] as string[])\n : [];\n const lines: string[] = [];\n\n for (const [propName, propSchema] of Object.entries(\n properties as Record<string, unknown>,\n )) {\n if (!propSchema || typeof propSchema !== \"object\") {\n continue;\n }\n const optional = required.includes(propName) ? \"\" : \"?\";\n const tsType = jsonSchemaToTs(\n propSchema as JSONSchema,\n indent + \" \",\n generated,\n );\n lines.push(`${indent} ${quoteKey(propName)}${optional}: ${tsType};`);\n }\n\n if (lines.length === 0) {\n return \"Record<string, unknown>\";\n }\n return `{\\n${lines.join(\"\\n\")}\\n${indent}}`;\n }\n\n return \"unknown\";\n}\n\nexport function schemaRefToTsType(\n ref: JSONSchemaRef | undefined,\n fallback = \"unknown\",\n): string {\n return jsonSchemaToTs(unwrapSchema(ref), \"\", new Set()) || fallback;\n}\n\nexport function operationTypeNames(operationName: string): {\n input: string;\n output: string;\n options: string;\n failure: string;\n failureClass: string;\n} {\n const base = toPascalCase(operationName);\n return {\n input: `${base}Input`,\n output: `${base}Output`,\n options: `${base}Options`,\n failure: `${base}Failure`,\n failureClass: `${base}FailureClass`,\n };\n}\n\nexport function interfaceFromSchema(\n name: string,\n ref: JSONSchemaRef | undefined,\n fallbackBody: string,\n): string | undefined {\n const schema = unwrapSchema(ref);\n if (!schema) {\n return undefined;\n }\n\n const body = jsonSchemaToTs(schema, \"\", new Set());\n if (body === \"unknown\" && !schema[\"properties\"]) {\n return `export type ${name} = ${fallbackBody};\\n`;\n }\n if (body.startsWith(\"{\")) {\n return `export interface ${name} ${body}\\n`;\n }\n return `export type ${name} = ${body};\\n`;\n}\n\nexport { unwrapSchema, schemaTypeName };\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames } from \"./schema-to-ts.js\";\n\nexport const clientGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const functions = Object.keys(ir.operations).map((operationName) => {\n const names = operationTypeNames(operationName);\n return `export async function ${operationName}(\n options: ${names.options},\n input: ${names.input},\n ctx: AaacInvocationContext,\n memoryRef?: string,\n): Promise<${names.output}> {\n return runtime.execute(${JSON.stringify(operationName)}, options, input, ctx, memoryRef);\n}`;\n });\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\nimport type {\n${Object.keys(ir.operations)\n .flatMap((name) => {\n const n = operationTypeNames(name);\n const types = [n.input, n.output, n.options];\n return types.map((t) => ` ${t},`);\n })\n .join(\"\\n\")}\n} from \"./component.types.js\";\nimport { runtime, type AaacInvocationContext } from \"./component.runtime.js\";\n\n${functions.join(\"\\n\\n\")}\n`;\n\n return [\n {\n path: \"generated/component.client.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import { existsSync } from \"node:fs\";\nimport { join, relative, dirname } from \"node:path\";\nimport type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames } from \"./schema-to-ts.js\";\n\nfunction typesImportPath(handlerPath: string): string {\n const handlerDir = dirname(handlerPath);\n const rel = relative(handlerDir, \"generated/component.types\");\n const importPath = rel.startsWith(\".\") ? rel : `./${rel}`;\n return `${importPath}.js`;\n}\n\nfunction buildHandlerSkeleton(\n operationName: string,\n functionName: string,\n handlerPath: string,\n): string {\n const names = operationTypeNames(operationName);\n const typesImport = typesImportPath(handlerPath);\n\n return `/** Handler skeleton — implement the logic below. */\n/* eslint-disable */\n\nimport type { ${names.input}, ${names.output} } from \"${typesImport}\";\n\nexport async function ${functionName}(\n input: ${names.input},\n): Promise<${names.output}> {\n // TODO: implement\n throw new Error(\"Not implemented: ${functionName}\");\n}\n`;\n}\n\nexport const handlerGenerator: Generator = {\n generate(ir: ComponentIR, options: GenerateOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (!op.handler) {\n continue;\n }\n\n const functionName = op.handler;\n const handlerPath = `./handlers/${functionName}.ts`;\n const absPath = join(options.outputDir, handlerPath);\n if (existsSync(absPath)) {\n files.push({\n path: handlerPath,\n content: \"\",\n overwrite: false,\n warning: `Handler file already exists, skipping: ${handlerPath}`,\n });\n continue;\n }\n\n files.push({\n path: handlerPath,\n content: buildHandlerSkeleton(operationName, functionName, handlerPath),\n overwrite: false,\n });\n }\n\n return files;\n },\n};\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport { operationTypeNames, toPascalCase } from \"./schema-to-ts.js\";\n\nfunction handlerImportPath(functionName: string): string {\n // Convention: handler file lives at ../handlers/{functionName}.js\n // (relative from generated/component.runtime.ts)\n return `../handlers/${functionName}.js`;\n}\n\nfunction serializeComponent(ir: ComponentIR): string {\n const info: Record<string, string> = {\n id: ir.info.id,\n version: ir.info.version,\n };\n if (ir.info.description) {\n info.description = ir.info.description;\n }\n\n return JSON.stringify(\n {\n schema: ir.schema,\n info,\n projections: ir.projections,\n operations: ir.operations,\n },\n null,\n 2,\n );\n}\n\nfunction buildHandlerImportsAndMap(\n ir: ComponentIR,\n): { imports: string[]; handlersEntries: string[] } {\n const imports: string[] = [];\n const handlersEntries: string[] = [];\n\n for (const [operationName, op] of Object.entries(ir.operations)) {\n if (!op.handler) {\n continue;\n }\n\n const functionName = op.handler;\n const importPath = handlerImportPath(functionName);\n const alias = `_handler_${functionName}`;\n imports.push(\n `import { ${functionName} as ${alias} } from ${JSON.stringify(importPath)};`,\n );\n const names = operationTypeNames(operationName);\n handlersEntries.push(\n ` ${JSON.stringify(operationName)}: async (_options, input, _ctx) => ${alias}(input as ${names.input}),`,\n );\n }\n\n return { imports, handlersEntries };\n}\n\nexport const runtimeGenerator: Generator = {\n generate(ir: ComponentIR, options: GenerateOptions): GeneratedFile[] {\n const componentConst = `${toPascalCase(ir.info.id)}Component`;\n const { imports: handlerImports, handlersEntries } =\n buildHandlerImportsAndMap(ir);\n\n const hasHandlers = handlersEntries.length > 0;\n const bindingCall = hasHandlers\n ? `createRuntimeBinding(${componentConst} as any, {\\n${handlersEntries.join(\"\\n\")}\\n})`\n : `createRuntimeBinding(${componentConst} as any)`;\n\n const typeImports =\n Object.keys(ir.operations).length > 0\n ? `import type {\n${Object.keys(ir.operations)\n .flatMap((name) => {\n const n = operationTypeNames(name);\n return [` ${n.input},`, ` ${n.output},`, ` ${n.options},`];\n })\n .join(\"\\n\")}\n} from \"./component.types.js\";\n`\n : `import type {} from \"./component.types.js\";\n`;\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\nimport {\n createRuntimeBinding,\n type AaacInvocationContext,\n} from \"@aaac/runtime\";\n${typeImports}${handlerImports.length > 0 ? `${handlerImports.join(\"\\n\")}\\n` : \"\"}\nconst ${componentConst} = ${serializeComponent(ir)};\n\nfunction applyMemoryRef(\n ctx: AaacInvocationContext,\n memoryRef?: string,\n): AaacInvocationContext {\n if (!memoryRef) {\n return ctx;\n }\n return {\n ...ctx,\n memoryRef: {\n id: memoryRef,\n provider: \"aaac\",\n compat: \"v1\",\n created_at: new Date().toISOString(),\n },\n };\n}\n\nconst _binding = ${bindingCall};\n\nexport { type AaacInvocationContext };\n\nexport const runtime = {\n getOperationNames(): string[] {\n return _binding.getOperationNames();\n },\n getOperationIR(name: string) {\n return _binding.getOperationIR(name);\n },\n execute(\n operationName: string,\n options: Record<string, unknown>,\n input: unknown,\n ctx: AaacInvocationContext,\n memoryRef?: string,\n ): Promise<unknown> {\n return _binding.execute(\n operationName,\n options,\n input,\n applyMemoryRef(ctx, memoryRef),\n );\n },\n};\n`;\n\n return [\n {\n path: \"generated/component.runtime.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nimport {\n interfaceFromSchema,\n operationTypeNames,\n schemaRefToTsType,\n} from \"./schema-to-ts.js\";\n\nfunction generateOperationTypes(\n operationName: string,\n op: ComponentIR[\"operations\"][string],\n): string {\n const names = operationTypeNames(operationName);\n const parts: string[] = [];\n\n if (op.input) {\n const iface = interfaceFromSchema(\n names.input,\n op.input,\n \"Record<string, unknown>\",\n );\n parts.push(iface ?? `export type ${names.input} = Record<string, unknown>;\\n`);\n } else {\n parts.push(`export type ${names.input} = Record<string, unknown>;\\n`);\n }\n\n const outputIface = interfaceFromSchema(\n names.output,\n op.output.success,\n \"unknown\",\n );\n parts.push(outputIface ?? `export type ${names.output} = unknown;\\n`);\n\n if (op.options.length > 0) {\n const fields = op.options.map((opt) => {\n const fieldName = opt.name.includes(\"-\") || opt.name.includes(\"_\")\n ? JSON.stringify(opt.name)\n : opt.name;\n const optional = opt.required ? \"\" : \"?\";\n const tsType = schemaRefToTsType({ schema: opt.schema });\n const desc = opt.description\n ? ` /** ${opt.description} */\\n`\n : \"\";\n return `${desc} ${fieldName}${optional}: ${tsType};`;\n });\n parts.push(`export interface ${names.options} {\\n${fields.join(\"\\n\")}\\n}\\n`);\n } else {\n parts.push(`export type ${names.options} = Record<string, never>;\\n`);\n }\n\n if (op.output.failed) {\n const failureIface = interfaceFromSchema(\n names.failure,\n op.output.failed,\n \"unknown\",\n );\n parts.push(failureIface ?? `export type ${names.failure} = unknown;\\n`);\n }\n\n if (op.errorModel.failureClasses.length > 0) {\n const union = op.errorModel.failureClasses\n .map((c) => JSON.stringify(c))\n .join(\" | \");\n parts.push(`export type ${names.failureClass} = ${union};\\n`);\n }\n\n return parts.join(\"\\n\");\n}\n\nexport const typesGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const operationBlocks = Object.entries(ir.operations).map(\n ([name, op]) => generateOperationTypes(name, op),\n );\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\n${operationBlocks.join(\"\\n\")}\n`;\n\n return [\n {\n path: \"generated/component.types.ts\",\n content,\n overwrite: true,\n },\n ];\n },\n};\n","import { mkdir, writeFile, access } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { ComponentIR } from \"../ir.js\";\nimport { cliGenerator } from \"./cli-generator.js\";\nimport { clientGenerator } from \"./client-generator.js\";\nimport { handlerGenerator } from \"./handler-generator.js\";\nimport { runtimeGenerator } from \"./runtime-generator.js\";\nimport { typesGenerator } from \"./types-generator.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\nexport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\nexport { typesGenerator } from \"./types-generator.js\";\nexport { clientGenerator } from \"./client-generator.js\";\nexport { runtimeGenerator } from \"./runtime-generator.js\";\nexport { cliGenerator } from \"./cli-generator.js\";\nexport { handlerGenerator } from \"./handler-generator.js\";\n\nconst ALL_GENERATORS: Generator[] = [\n typesGenerator,\n clientGenerator,\n runtimeGenerator,\n cliGenerator,\n handlerGenerator,\n];\n\n/**\n * Run all code generators for a compiled Component IR.\n */\nexport function generateAll(\n ir: ComponentIR,\n options: GenerateOptions,\n): GeneratedFile[] {\n return ALL_GENERATORS.flatMap((gen) => gen.generate(ir, options));\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Write generated files to disk, respecting overwrite policy.\n * - `overwrite: true` — always write (generated/ artifacts)\n * - `overwrite: false` — skip if target already exists (handlers, cli stub)\n */\nexport async function writeGeneratedFiles(\n files: GeneratedFile[],\n outputDir: string,\n): Promise<{ written: string[]; skipped: string[]; warnings: string[] }> {\n const written: string[] = [];\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const file of files) {\n const targetPath = join(outputDir, file.path);\n\n if (file.warning) {\n warnings.push(file.warning);\n }\n\n if (!file.overwrite && (await fileExists(targetPath))) {\n skipped.push(file.path);\n continue;\n }\n\n if (!file.content && !file.overwrite) {\n skipped.push(file.path);\n continue;\n }\n\n await mkdir(dirname(targetPath), { recursive: true });\n await writeFile(targetPath, file.content, \"utf-8\");\n written.push(file.path);\n }\n\n return { written, skipped, warnings };\n}\n"],"mappings":"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","names":["parseYaml","target","result","readFile","resolve","parseYaml","resolve","readFile","parseYaml","validateComponent","dirname","validateComponent","dirname","unwrapSchema","unwrapSchema","dirname","dirname","access","dirname","join","fileExists","access","join","dirname"]}
|