@aaac/contracts 0.1.14 → 0.1.16

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.
@@ -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/bindings-generator.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","../src/generators/embedded-dsl-generator.ts","../src/cli/governance.ts","../src/cli/observ-config.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\n/**\n * Reference to an external binding package (e.g. `@aaac/binding-cursor`).\n *\n * The core toolchain stays binding-agnostic: it only knows that a binding\n * exists, which package implements it, and the CLI command name to expose.\n * The `config` payload is opaque to the core and is validated by the binding\n * package itself at runtime (via its own `configSchema`).\n */\nexport const BindingRefSchema = z.object({\n /** npm package name implementing the binding (e.g. \"@aaac/binding-cursor\"). */\n package: z.string().min(1),\n /** CLI command name to expose (defaults to the binding id). */\n command: z.string().optional(),\n /** Binding-specific configuration; validated by the binding package. */\n config: z.record(z.string(), z.unknown()).default({}),\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 embedded_dsl_dir: z.string().optional(),\n projections: z.array(\n z.enum([\"library\", \"cli\", \"claude\", \"openai\"]),\n ),\n governance: GovernanceSchema,\n bindings: z.record(z.string(), BindingRefSchema).optional(),\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 BindingRefDSL = z.infer<typeof BindingRefSchema>;\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 bindings: raw.bindings,\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 BindingIR,\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 bindings: dsl.bindings ? compileBindings(dsl.bindings) : undefined,\n operations,\n };\n}\n\nfunction compileBindings(\n bindings: NonNullable<ComponentDSL[\"bindings\"]>,\n): Record<string, BindingIR> {\n const result: Record<string, BindingIR> = {};\n for (const [id, binding] of Object.entries(bindings)) {\n result[id] = {\n package: binding.package,\n command: binding.command ?? id,\n config: binding.config ?? {},\n };\n }\n return result;\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 type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\n/**\n * Emit a generated module exposing the resolved binding configs.\n *\n * The app's hand-written CLI handler imports this to obtain each binding's\n * `config` payload (and package name) at runtime, then delegates to the\n * binding package's `sync` / `check` function. Mirrors how the embedded DSL is\n * surfaced to the runtime.\n *\n * Emits nothing when the component declares no bindings — keeping output\n * byte-identical for components that don't use bindings (backward compat).\n */\nexport const bindingsGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n if (!ir.bindings || Object.keys(ir.bindings).length === 0) {\n return [];\n }\n\n const entries = Object.entries(ir.bindings).map(([id, binding]) => {\n return ` ${JSON.stringify(id)}: {\\n package: ${JSON.stringify(binding.package)},\\n command: ${JSON.stringify(binding.command)},\\n config: ${JSON.stringify(binding.config)},\\n },`;\n });\n\n const content = `// Auto-generated by @aaac/contracts. Do not edit.\n\nexport interface BindingEntry {\n /** npm package implementing the binding. */\n package: string;\n /** CLI command name exposed for this binding. */\n command: string;\n /** Binding-specific configuration (validated by the binding package). */\n config: Record<string, unknown>;\n}\n\nexport const bindings: Record<string, BindingEntry> = {\n${entries.join(\"\\n\")}\n};\n`;\n\n return [\n {\n path: \"bindings.generated.ts\",\n content,\n overwrite: true,\n },\n ];\n },\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: { format: \"json\", 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: { format: \"json\", 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 buildPromptCommand(): Record<string, unknown> {\n return {\n summary:\n \"Send a natural language request — the right operation is selected automatically.\",\n streams: {\n stdin: {\n format: \"json\",\n schema: {\n type: \"object\",\n required: [\"message\"],\n properties: {\n message: {\n type: \"string\",\n description:\n \"Natural language request describing what you want to do\",\n },\n },\n },\n },\n },\n options: [\n {\n name: \"dry-run\",\n schema: { type: \"boolean\" },\n description:\n \"Show only the routing decision without executing the operation\",\n },\n ],\n exits: {\n \"0\": {\n description: \"Success\",\n stdout: {\n format: \"json\",\n schema: {\n type: \"object\",\n properties: {\n selectedOperation: { type: \"string\" },\n mappedInput: { type: \"object\" },\n output: {},\n dryRun: { type: \"boolean\" },\n model: { type: \"string\" },\n },\n },\n },\n },\n \"1\": {\n description: \"Routing or execution failed\",\n },\n },\n \"x-agent\": {\n risk_level: \"medium\",\n requires_confirmation: false,\n idempotent: false,\n prompt_routing: true,\n },\n };\n}\n\nfunction countAgenticOperations(ir: ComponentIR): number {\n return Object.values(ir.operations).filter((op) => !op.handler).length;\n}\n\n/**\n * Build CLI commands contributed by external bindings.\n *\n * The core toolchain is binding-agnostic: for every declared binding it\n * exposes a uniform `<command>.sync` / `<command>.check` pair. `sync`\n * materializes the binding's output files; `check` is a read-only drift gate\n * (exit 2 on drift) for CI. The actual output logic lives in the binding\n * package's runtime function — the generated CLI only declares the contract.\n */\nfunction buildBindingCommands(ir: ComponentIR): Record<string, unknown> {\n const commands: Record<string, unknown> = {};\n if (!ir.bindings) {\n return commands;\n }\n\n for (const [bindingId, binding] of Object.entries(ir.bindings)) {\n const cmd = binding.command;\n commands[`${cmd}.sync`] = {\n summary: `Materialize ${bindingId} binding output files from the embedded DSL`,\n options: [\n {\n name: \"dry-run\",\n schema: { type: \"boolean\" },\n description: \"Report changes without writing files\",\n },\n ],\n exits: {\n \"0\": { description: \"Synced\" },\n \"1\": { description: \"Materialization failed\" },\n },\n \"x-agent\": {\n risk_level: \"low\",\n requires_confirmation: false,\n idempotent: true,\n binding: bindingId,\n },\n };\n commands[`${cmd}.check`] = {\n summary: `Fail if ${bindingId} binding output drifts from the DSL`,\n exits: {\n \"0\": { description: \"In sync\" },\n \"2\": { description: \"Drift detected\" },\n },\n \"x-agent\": {\n risk_level: \"low\",\n requires_confirmation: false,\n idempotent: true,\n binding: bindingId,\n },\n };\n }\n\n return commands;\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 Object.assign(commands, buildBindingCommands(ir));\n\n if (countAgenticOperations(ir) >= 2) {\n commands.prompt = buildPromptCommand();\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 name: \"adapter\",\n aliases: [\"a\"],\n schema: {\n type: \"string\",\n enum: [\"mock\", \"claude\", \"gemini\", \"openai\"],\n },\n description:\n \"SDK adapter to use (overrides model_mapping default).\",\n },\n {\n name: \"model\",\n schema: { type: \"string\" },\n description: \"Model name override for the selected adapter.\",\n },\n {\n name: \"config\",\n aliases: [\"c\"],\n schema: { type: \"string\" },\n description: \"Path to project.yaml governance manifest.\",\n },\n ],\n commands,\n },\n },\n };\n}\n\nconst CLI_STUB_CONTENT = `extends: ./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: \"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\nfunction countAgenticOperations(ir: ComponentIR): number {\n return Object.values(ir.operations).filter((op) => !op.handler).length;\n}\n\nexport const clientGenerator: Generator = {\n generate(ir: ComponentIR, _options: GenerateOptions): GeneratedFile[] {\n const agenticOpsCount = countAgenticOperations(ir);\n\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) as Promise<${names.output}>;\n}`;\n });\n\n if (agenticOpsCount >= 2) {\n functions.push(`export async function prompt(\n options: PromptExecuteOptions,\n input: { message: string },\n ctx: AaacInvocationContext,\n): Promise<PromptResult> {\n return runtime.executePrompt(input.message, options as unknown as Record<string, unknown>, ctx) as Promise<PromptResult>;\n}`);\n }\n\n const runtimeTypeImports =\n agenticOpsCount >= 2\n ? `import type { PromptResult, PromptExecuteOptions } from \"@aaac/runtime\";\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\";\n${runtimeTypeImports}import { runtime, type AaacInvocationContext } from \"./component.runtime.js\";\n\n${functions.join(\"\\n\\n\")}\n`;\n\n return [\n {\n path: \"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\nfunction countAgenticOperations(ir: ComponentIR): number {\n return Object.values(ir.operations).filter((op) => !op.handler).length;\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 agenticOpsCount = countAgenticOperations(ir);\n const hasPromptRouting = agenticOpsCount >= 2;\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 runtimeImports = hasPromptRouting\n ? `import {\n createRuntimeBinding,\n executePrompt as _executePrompt,\n type AaacInvocationContext,\n} from \"@aaac/runtime\";`\n : `import {\n createRuntimeBinding,\n type AaacInvocationContext,\n} from \"@aaac/runtime\";`;\n\n const promptExports = hasPromptRouting\n ? `\nexport const componentIR = ${componentConst} as any;\nexport { _binding as binding };\n`\n : \"\";\n\n const executePromptMethod = hasPromptRouting\n ? `\n executePrompt(\n message: string,\n options: Record<string, unknown>,\n ctx: AaacInvocationContext,\n ): Promise<unknown> {\n return _executePrompt(message, ${componentConst} as any, _binding, ctx, options as any);\n },`\n : \"\";\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n/* eslint-disable */\n\n${runtimeImports}\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${promptExports}\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 },${executePromptMethod}\n};\n`;\n\n return [\n {\n path: \"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: \"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 { bindingsGenerator } from \"./bindings-generator.js\";\nimport { cliGenerator } from \"./cli-generator.js\";\nimport { clientGenerator } from \"./client-generator.js\";\nimport { embeddedDslGenerator } from \"./embedded-dsl-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\";\nexport { embeddedDslGenerator } from \"./embedded-dsl-generator.js\";\nexport { bindingsGenerator } from \"./bindings-generator.js\";\n\nconst ALL_GENERATORS: Generator[] = [\n typesGenerator,\n clientGenerator,\n runtimeGenerator,\n cliGenerator,\n handlerGenerator,\n embeddedDslGenerator,\n bindingsGenerator,\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","import type { ComponentIR } from \"../ir.js\";\nimport type { GeneratedFile, GenerateOptions, Generator } from \"./types.js\";\n\nexport const embeddedDslGenerator: Generator = {\n generate(ir: ComponentIR, options: GenerateOptions): GeneratedFile[] {\n if (!ir.embeddedDslDir || !options.resolvedDslData) {\n return [];\n }\n\n const content = `/** Auto-generated by @aaac/contracts. Do not edit. */\n\nexport const resolvedDsl: Record<string, unknown> = ${JSON.stringify(options.resolvedDslData, null, 2)} as const;\n`;\n\n return [\n {\n path: \"dsl-data.ts\",\n content,\n overwrite: true,\n targetDir: ir.embeddedDslDir,\n },\n ];\n },\n};\n","/**\n * Governance operations for aaac init / update / uninstall.\n *\n * Self-contained implementation (mirrors packages/runtime/src/lib/governance-hooks.ts\n * and the relevant parts of packages/runtime/src/generator/config.ts) to avoid a\n * circular package dependency: @aaac/runtime already depends on @aaac/contracts.\n *\n * Keep in sync with the runtime counterpart when modifying managed-block semantics.\n *\n * .cursor/hooks.json is written in Cursor's real schema:\n * { \"version\": 1, \"hooks\": { \"<event>\": [{ \"command\": \"...\" }] } }\n * A legacy flat-array format ([{ event, command }]) is still parsed for\n * backward compatibility and migrated to the nested schema on write.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { z } from \"zod\";\nimport { generateObservConfig } from \"./observ-config.js\";\n\n// ---------------------------------------------------------------------------\n// Constants (mirror governance-hooks.ts)\n// ---------------------------------------------------------------------------\n\nexport const MANAGED_BLOCK_START = \"# >>> aaac-governance:managed (do not edit) >>>\";\nexport const MANAGED_BLOCK_END = \"# <<< aaac-governance:managed <<<\";\nexport const GOVERNANCE_LOCK_PATH = \".agent-logs/governance-manifest.lock\";\n\nconst DEFAULT_RECORDER = \".cursor/hooks/observ-record.sh\";\nconst DEFAULT_CURSOR_HOOKS_JSON = \".cursor/hooks.json\";\nconst DEFAULT_BINARY_DEST = \"bin/aaac.js\";\nconst CURSOR_HOOKS_VERSION = 1;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Flat internal representation of a single Cursor hook binding.\n * Used for building defaults and merging; serialized into the nested\n * {@link CursorHooksFile} schema before writing to disk.\n */\nexport interface CursorHookEntry {\n event: string;\n command: string;\n [key: string]: unknown;\n}\n\n/** A single command binding under an event in Cursor's hooks.json schema. */\nexport interface CursorHookCommand {\n command: string;\n [key: string]: unknown;\n}\n\n/** Cursor's real .cursor/hooks.json schema. */\nexport interface CursorHooksFile {\n version: number;\n hooks: Record<string, CursorHookCommand[]>;\n}\n\nexport interface MaterializeResult {\n materialized: Array<{ path: string; action: \"created\" | \"updated\" | \"unchanged\" }>;\n lockEntries: Array<{ path: string; type: \"git-hook\" | \"cursor-hook\" | \"generated\" }>;\n}\n\nexport interface GovernanceLockFile {\n materialized_at: string;\n entries: Array<{ path: string; type: \"git-hook\" | \"cursor-hook\" | \"generated\" }>;\n}\n\nexport interface GovernanceMaterializeOptions {\n projectRoot: string;\n environments: {\n git?: { hooks?: string[] };\n cursor?: { hooks_json?: string };\n };\n observabilityBinding?: {\n event_mapping?: string;\n recorder?: string;\n };\n /**\n * Path to artifact-contracts.yaml (relative to projectRoot), used to generate\n * .agent-logs/config/artifact-lookup.json. Sourced from project.yaml `artifacts`.\n */\n artifactContracts?: string;\n /**\n * Gate commands declared in bindings.hooks, keyed by git hook name\n * (e.g. \"pre-commit\" -> [\"npm run lint\", \"npx tsc --noEmit\"]).\n * Each command is run sequentially in the hook's managed block and a\n * non-zero exit fails the hook (acts as a gate).\n */\n hookCommands?: Record<string, string[]>;\n}\n\n// ---------------------------------------------------------------------------\n// Minimal project.yaml schema (environments + bindings only)\n// ---------------------------------------------------------------------------\n\nconst EnvironmentsSchema = z\n .object({\n git: z.object({ hooks: z.array(z.string()).optional() }).optional(),\n cursor: z.object({ hooks_json: z.string().optional() }).optional(),\n })\n .optional();\n\nconst BindingsObservabilitySchema = z\n .object({\n event_mapping: z.string().optional(),\n recorder: z.string().optional(),\n })\n .optional();\n\nconst BindingsSchema = z\n .object({\n observability: BindingsObservabilitySchema,\n hooks: z.array(z.string()).optional(),\n })\n .optional();\n\nconst InitProjectConfigSchema = z.object({\n environments: EnvironmentsSchema,\n bindings: BindingsSchema,\n artifacts: z.string().optional(),\n});\n\nexport type InitProjectConfig = z.infer<typeof InitProjectConfigSchema>;\n\nexport async function loadInitConfig(configPath: string): Promise<InitProjectConfig> {\n const absPath = resolve(configPath);\n const raw = await readFile(absPath, \"utf8\");\n const parsed = parseYaml(raw) as unknown;\n return InitProjectConfigSchema.parse(parsed ?? {});\n}\n\n// ---------------------------------------------------------------------------\n// Hook bindings (bindings.hooks) — git hook gate commands\n// ---------------------------------------------------------------------------\n\nconst HookCommandSchema = z.object({\n command: z.string(),\n description: z.string().optional(),\n});\n\nconst HookBindingSchema = z.object({\n hooks: z.record(z.string(), z.array(HookCommandSchema)).optional(),\n});\n\n/**\n * Load one or more bindings.hooks YAML files and aggregate their declared\n * gate commands into a single map keyed by git hook name.\n *\n * Binding paths are resolved relative to {@link projectRoot}. Missing files\n * are skipped (the binding is declarative — absence is not fatal). Commands\n * from multiple bindings for the same hook are concatenated in declaration\n * order; exact-duplicate commands are de-duplicated to keep repeated runs\n * idempotent.\n */\nexport async function loadHookBindings(\n projectRoot: string,\n bindingPaths: string[] | undefined,\n): Promise<Record<string, string[]>> {\n const result: Record<string, string[]> = {};\n if (!bindingPaths?.length) return result;\n\n const root = resolve(projectRoot);\n for (const bindingPath of bindingPaths) {\n const absPath = resolve(root, bindingPath);\n if (!existsSync(absPath)) continue;\n\n const raw = await readFile(absPath, \"utf8\");\n const parsed = HookBindingSchema.parse(parseYaml(raw) ?? {});\n if (!parsed.hooks) continue;\n\n for (const [hookName, commands] of Object.entries(parsed.hooks)) {\n const list = result[hookName] ?? [];\n for (const { command } of commands) {\n if (!list.includes(command)) list.push(command);\n }\n result[hookName] = list;\n }\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Managed-block helpers (mirror governance-hooks.ts)\n// Use a fresh RegExp per call to avoid global-flag lastIndex state issues.\n// ---------------------------------------------------------------------------\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction createManagedBlockRegex(): RegExp {\n return new RegExp(\n `${escapeRegex(MANAGED_BLOCK_START)}[\\\\s\\\\S]*?${escapeRegex(MANAGED_BLOCK_END)}\\\\n?`,\n \"g\",\n );\n}\n\nfunction buildManagedBlock(blockContent: string): string {\n return `${MANAGED_BLOCK_START}\\n${blockContent.trimEnd()}\\n${MANAGED_BLOCK_END}\\n`;\n}\n\nexport function injectManagedBlock(existingContent: string, blockContent: string): string {\n const managedBlock = buildManagedBlock(blockContent);\n const re = createManagedBlockRegex();\n\n if (re.test(existingContent)) {\n return existingContent.replace(createManagedBlockRegex(), managedBlock);\n }\n\n const trimmed = existingContent.replace(/\\s+$/, \"\");\n if (trimmed.length === 0) {\n return `#!/bin/sh\\n${managedBlock}`;\n }\n\n const separator = trimmed.endsWith(\"\\n\") ? \"\" : \"\\n\";\n return `${trimmed}${separator}${managedBlock}`;\n}\n\nexport function removeManagedBlock(existingContent: string): string {\n if (!existingContent.includes(MANAGED_BLOCK_START)) {\n return existingContent;\n }\n\n const withoutBlock = existingContent.replace(createManagedBlockRegex(), \"\");\n const meaningful = withoutBlock.split(\"\\n\").filter((line) => {\n const t = line.trim();\n return t.length > 0 && t !== \"#!/bin/sh\" && t !== \"#!/bin/bash\";\n });\n\n if (meaningful.length === 0) {\n return \"\";\n }\n\n return withoutBlock.replace(/\\n{3,}/g, \"\\n\\n\").replace(/\\s+$/, \"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// Cursor-hook merge helpers (mirror governance-hooks.ts)\n// ---------------------------------------------------------------------------\n\nexport function parseCursorHooksFile(raw: string | undefined): CursorHooksFile {\n if (!raw || !raw.trim()) {\n return { version: CURSOR_HOOKS_VERSION, hooks: {} };\n }\n\n const parsed = JSON.parse(raw) as unknown;\n\n // Legacy flat-array format: [{ event, command }, ...]\n if (Array.isArray(parsed)) {\n return flatEntriesToFile(\n parsed.filter(\n (entry): entry is CursorHookEntry =>\n entry !== null &&\n typeof entry === \"object\" &&\n typeof (entry as CursorHookEntry).event === \"string\" &&\n typeof (entry as CursorHookEntry).command === \"string\",\n ),\n );\n }\n\n if (parsed && typeof parsed === \"object\") {\n const obj = parsed as Record<string, unknown>;\n const version = typeof obj.version === \"number\" ? obj.version : CURSOR_HOOKS_VERSION;\n const hooks: Record<string, CursorHookCommand[]> = {};\n const rawHooks = obj.hooks;\n if (rawHooks && typeof rawHooks === \"object\" && !Array.isArray(rawHooks)) {\n for (const [event, commands] of Object.entries(rawHooks as Record<string, unknown>)) {\n if (Array.isArray(commands)) {\n hooks[event] = commands.filter(\n (c): c is CursorHookCommand =>\n c !== null &&\n typeof c === \"object\" &&\n typeof (c as CursorHookCommand).command === \"string\",\n );\n }\n }\n }\n return { version, hooks };\n }\n\n return { version: CURSOR_HOOKS_VERSION, hooks: {} };\n}\n\nexport function serializeCursorHooksFile(file: CursorHooksFile): string {\n return JSON.stringify(file, null, 2) + \"\\n\";\n}\n\nfunction flatEntriesToFile(entries: CursorHookEntry[]): CursorHooksFile {\n return mergeCursorHooks({ version: CURSOR_HOOKS_VERSION, hooks: {} }, entries);\n}\n\n/**\n * Idempotently merge new hook entries into an existing Cursor hooks file.\n *\n * Entries are keyed by `(event, command)`: an existing command is updated in\n * place, a new one is appended. This lets multiple independent writers (the\n * observability recorder, the cursor binding, future guardrail hooks) share a\n * single `.cursor/hooks.json` without clobbering each other — no single writer\n * owns the file. Merge order does not affect the final set.\n */\nexport function mergeCursorHooks(\n existing: CursorHooksFile,\n newEntries: CursorHookEntry[],\n): CursorHooksFile {\n const hooks: Record<string, CursorHookCommand[]> = {};\n for (const [event, commands] of Object.entries(existing.hooks)) {\n hooks[event] = commands.map((c) => ({ ...c }));\n }\n\n for (const entry of newEntries) {\n const { event, ...command } = entry;\n const list = hooks[event] ?? [];\n const idx = list.findIndex((c) => c.command === command.command);\n if (idx >= 0) {\n list[idx] = command;\n } else {\n list.push(command);\n }\n hooks[event] = list;\n }\n\n return { version: existing.version ?? CURSOR_HOOKS_VERSION, hooks };\n}\n\nfunction removeCursorHooks(\n existing: CursorHooksFile,\n commands: string[],\n): CursorHooksFile {\n const removeSet = new Set(commands);\n const hooks: Record<string, CursorHookCommand[]> = {};\n for (const [event, list] of Object.entries(existing.hooks)) {\n const filtered = list.filter((c) => !removeSet.has(c.command));\n if (filtered.length > 0) {\n hooks[event] = filtered;\n }\n }\n return { version: existing.version ?? CURSOR_HOOKS_VERSION, hooks };\n}\n\n/**\n * Build the managed-block body for a git hook.\n *\n * The observability recorder runs first and is fail-open (`|| true`): a\n * recorder failure never blocks the commit/push. Each declared gate command\n * then runs sequentially; a non-zero exit fails the hook (`|| exit 1`).\n *\n * `exec` is intentionally NOT used — it would replace the shell process and\n * prevent the gate commands from running.\n *\n * Keep in sync with buildGitHookBlock in\n * packages/runtime/src/lib/governance-hooks.ts.\n */\nfunction buildGitHookBlock(\n hookName: string,\n recorder: string,\n gateCommands: string[] = [],\n): string {\n const lines = [`${recorder} ${hookName} \"$@\" || true`];\n for (const command of gateCommands) {\n lines.push(`${command} || exit 1`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Cursor hook events recorded by the observability recorder.\n *\n * Mirrors the full set required by\n * docs/observability-spec/shift-left-event-mapping.md §1.1/§2.\n * `beforeShellExecution` is intentionally excluded — it is wired separately to\n * the guardrail (guard evaluate) hook and merged in via mergeCursorHooks.\n *\n * Keep in sync with DEFAULT_CURSOR_HOOK_EVENTS in\n * packages/runtime/src/lib/governance-hooks.ts.\n */\nconst DEFAULT_CURSOR_HOOK_EVENTS = [\n \"sessionStart\",\n \"sessionEnd\",\n \"subagentStart\",\n \"subagentStop\",\n \"beforeSubmitPrompt\",\n \"afterShellExecution\",\n \"preToolUse\",\n \"postToolUse\",\n \"postToolUseFailure\",\n \"afterFileEdit\",\n \"preCompact\",\n \"stop\",\n] as const;\n\nfunction buildDefaultCursorHooks(recorder: string): CursorHookEntry[] {\n return DEFAULT_CURSOR_HOOK_EVENTS.map((event) => ({\n event,\n command: `${recorder} ${event}`,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// File helpers\n// ---------------------------------------------------------------------------\n\nasync function ensureParentDir(filePath: string): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n}\n\nasync function readTextFileIfExists(filePath: string): Promise<string | undefined> {\n if (!existsSync(filePath)) return undefined;\n return readFile(filePath, \"utf8\");\n}\n\n// ---------------------------------------------------------------------------\n// Lock file (mirror governance-hooks.ts)\n// ---------------------------------------------------------------------------\n\nexport async function writeGovernanceLock(\n projectRoot: string,\n entries: MaterializeResult[\"lockEntries\"],\n): Promise<string> {\n const lockPath = join(projectRoot, GOVERNANCE_LOCK_PATH);\n const lock: GovernanceLockFile = {\n materialized_at: new Date().toISOString(),\n entries,\n };\n await ensureParentDir(lockPath);\n await writeFile(lockPath, JSON.stringify(lock, null, 2) + \"\\n\", \"utf8\");\n return GOVERNANCE_LOCK_PATH;\n}\n\nexport async function readGovernanceLock(\n projectRoot: string,\n): Promise<GovernanceLockFile | undefined> {\n const lockPath = join(projectRoot, GOVERNANCE_LOCK_PATH);\n if (!existsSync(lockPath)) return undefined;\n const raw = await readFile(lockPath, \"utf8\");\n if (!raw.trim()) return undefined;\n return JSON.parse(raw) as GovernanceLockFile;\n}\n\n// ---------------------------------------------------------------------------\n// materializeHooks (mirror governance-hooks.ts)\n// ---------------------------------------------------------------------------\n\nexport async function materializeHooks(\n options: GovernanceMaterializeOptions,\n): Promise<MaterializeResult> {\n const projectRoot = resolve(options.projectRoot);\n const result: MaterializeResult = { materialized: [], lockEntries: [] };\n const recorder = options.observabilityBinding?.recorder ?? DEFAULT_RECORDER;\n\n // --- git hooks ---\n if (options.environments.git?.hooks?.length) {\n for (const hookName of options.environments.git.hooks) {\n const relPath = join(\".git/hooks\", hookName);\n const absPath = join(projectRoot, relPath);\n const blockContent = buildGitHookBlock(\n hookName,\n recorder,\n options.hookCommands?.[hookName],\n );\n\n const existing = (await readTextFileIfExists(absPath)) ?? \"\";\n const updated = injectManagedBlock(existing, blockContent);\n\n let action: \"created\" | \"updated\" | \"unchanged\" = \"unchanged\";\n if (!existsSync(absPath)) {\n action = \"created\";\n } else if (updated !== existing) {\n action = \"updated\";\n }\n\n if (action !== \"unchanged\") {\n await ensureParentDir(absPath);\n await writeFile(absPath, updated, \"utf8\");\n await chmod(absPath, 0o755);\n }\n\n result.materialized.push({ path: relPath, action });\n result.lockEntries.push({ path: relPath, type: \"git-hook\" });\n }\n }\n\n // --- cursor hooks ---\n if (options.environments.cursor) {\n const rawHooksJsonValue = options.environments.cursor.hooks_json;\n // resolve() handles both relative (against projectRoot) and absolute paths correctly\n const hooksJsonPath = rawHooksJsonValue\n ? resolve(projectRoot, rawHooksJsonValue)\n : join(projectRoot, DEFAULT_CURSOR_HOOKS_JSON);\n\n const relPath = hooksJsonPath.startsWith(projectRoot + \"/\")\n ? hooksJsonPath.slice(projectRoot.length + 1)\n : DEFAULT_CURSOR_HOOKS_JSON;\n\n const newEntries = buildDefaultCursorHooks(recorder);\n const existingRaw = await readTextFileIfExists(hooksJsonPath);\n const existing = parseCursorHooksFile(existingRaw);\n const merged = mergeCursorHooks(existing, newEntries);\n const serialized = serializeCursorHooksFile(merged);\n\n let action: \"created\" | \"updated\" | \"unchanged\" = \"unchanged\";\n if (!existsSync(hooksJsonPath)) {\n action = \"created\";\n } else if (serialized !== existingRaw) {\n action = \"updated\";\n }\n\n if (action !== \"unchanged\") {\n await ensureParentDir(hooksJsonPath);\n await writeFile(hooksJsonPath, serialized, \"utf8\");\n }\n\n result.materialized.push({ path: relPath, action });\n result.lockEntries.push({ path: relPath, type: \"cursor-hook\" });\n }\n\n // --- observability config (.agent-logs/config/*.json) ---\n // Generated only when an observability binding is configured. Deterministic\n // and idempotent (see observ-config.ts).\n if (options.observabilityBinding) {\n const { generated, lockEntries } = await generateObservConfig({\n projectRoot,\n eventMapping: options.observabilityBinding.event_mapping,\n artifactContracts: options.artifactContracts,\n });\n for (const g of generated) {\n result.materialized.push({ path: g.path, action: g.action });\n }\n result.lockEntries.push(...lockEntries);\n }\n\n // --- write lock file ---\n if (result.lockEntries.length > 0) {\n const lockExisted = existsSync(join(projectRoot, GOVERNANCE_LOCK_PATH));\n await writeGovernanceLock(projectRoot, result.lockEntries);\n result.materialized.push({\n path: GOVERNANCE_LOCK_PATH,\n action: lockExisted ? \"updated\" : \"created\",\n });\n result.lockEntries.push({ path: GOVERNANCE_LOCK_PATH, type: \"generated\" });\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// unmaterializeHooks (mirror governance-hooks.ts)\n// ---------------------------------------------------------------------------\n\nexport async function unmaterializeHooks(\n projectRoot: string,\n lockEntries: MaterializeResult[\"lockEntries\"],\n): Promise<void> {\n const root = resolve(projectRoot);\n\n for (const entry of lockEntries) {\n if (entry.type === \"generated\") {\n const absPath = join(root, entry.path);\n if (existsSync(absPath)) {\n await writeFile(absPath, \"\", \"utf8\");\n }\n continue;\n }\n\n if (entry.type === \"git-hook\") {\n const absPath = join(root, entry.path);\n const existing = await readTextFileIfExists(absPath);\n if (existing === undefined) continue;\n\n const updated = removeManagedBlock(existing);\n await writeFile(absPath, updated, \"utf8\");\n continue;\n }\n\n if (entry.type === \"cursor-hook\") {\n const absPath = join(root, entry.path);\n const existingRaw = await readTextFileIfExists(absPath);\n if (existingRaw === undefined) continue;\n\n const existing = parseCursorHooksFile(existingRaw);\n const commandsToRemove = buildDefaultCursorHooks(DEFAULT_RECORDER).map((h) => h.command);\n const updated = removeCursorHooks(existing, commandsToRemove);\n await writeFile(absPath, serializeCursorHooksFile(updated), \"utf8\");\n }\n }\n\n // Clear the lock file itself\n const lockPath = join(root, GOVERNANCE_LOCK_PATH);\n if (existsSync(lockPath)) {\n await writeFile(lockPath, \"\", \"utf8\");\n }\n}\n\n// ---------------------------------------------------------------------------\n// Binary copy (SHA256 idempotent)\n// ---------------------------------------------------------------------------\n\nexport async function copyCLIBinary(\n srcPath: string,\n projectRoot: string,\n destRelPath = DEFAULT_BINARY_DEST,\n): Promise<{ path: string; action: \"created\" | \"updated\" | \"unchanged\" }> {\n const dstPath = join(projectRoot, destRelPath);\n const srcContent = await readFile(srcPath);\n const srcHash = createHash(\"sha256\").update(srcContent).digest(\"hex\");\n\n if (existsSync(dstPath)) {\n const dstContent = await readFile(dstPath);\n const dstHash = createHash(\"sha256\").update(dstContent).digest(\"hex\");\n if (srcHash === dstHash) {\n return { path: destRelPath, action: \"unchanged\" };\n }\n await writeFile(dstPath, srcContent);\n await chmod(dstPath, 0o755);\n return { path: destRelPath, action: \"updated\" };\n }\n\n await ensureParentDir(dstPath);\n await writeFile(dstPath, srcContent);\n await chmod(dstPath, 0o755);\n return { path: destRelPath, action: \"created\" };\n}\n\n// ---------------------------------------------------------------------------\n// Scaffold project.yaml template\n// ---------------------------------------------------------------------------\n\nexport const SCAFFOLD_PROJECT_YAML = `schema: aaac/project/0.1\n\n# Uncomment and configure to enable git hook governance:\n#\n# environments:\n# git:\n# # commit-msg/post-commit are observability-only (promotion axis): post-commit\n# # records promotion.commit + promotion.file, feeding Enricher R1/R2/R5.\n# hooks: [pre-commit, commit-msg, post-commit, pre-push]\n# cursor:\n# hooks_json: .cursor/hooks.json\n#\n# bindings:\n# observability:\n# event_mapping: ./bindings/observability.yaml\n# recorder: aaac-observ\n# hooks:\n# # Each file declares gate commands per git hook; a non-zero exit\n# # blocks the commit/push. Only hooks listed in environments.git.hooks\n# # are materialized.\n# - ./bindings/git.yaml\n`;\n","/**\n * Observability config generation for aaac init / update.\n *\n * Resolves the declarative `event_mapping` binding and the artifact-contracts\n * path globs into the deterministic JSON lookup tables consumed at record time\n * by `.cursor/hooks/observ-record.sh` and `@aaac/observability`:\n *\n * .agent-logs/config/event-mapping.json — resolved hook → span/link rules\n * .agent-logs/config/artifact-lookup.json — artifact_id ← path glob (longest-match)\n * .agent-logs/config/task-patterns.json — structured tag → field mapping\n *\n * See docs/observability-spec/shift-left-event-mapping.md §6.3 / §7.\n *\n * Self-contained (no @aaac/observability dependency) to keep the CLI package\n * free of the observability runtime/OTEL dependency — mirroring the same\n * \"avoid cross-package coupling\" rationale documented in governance.ts. The\n * generated JSON is the contract: it must stay loadable by\n * @aaac/observability's loadEventMappingConfig() / lookupArtifact(), and the\n * generators below must be kept in sync with\n * packages/observability/src/event-mapping/lookup.ts.\n *\n * Writes are byte-deterministic (stable key order from the source YAML, no\n * timestamps) so repeated `aaac update` runs leave the files unchanged.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Paths (relative to project root)\n// ---------------------------------------------------------------------------\n\nexport const OBSERV_CONFIG_DIR = \".agent-logs/config\";\nexport const EVENT_MAPPING_JSON = `${OBSERV_CONFIG_DIR}/event-mapping.json`;\nexport const ARTIFACT_LOOKUP_JSON = `${OBSERV_CONFIG_DIR}/artifact-lookup.json`;\nexport const TASK_PATTERNS_JSON = `${OBSERV_CONFIG_DIR}/task-patterns.json`;\n\n// ---------------------------------------------------------------------------\n// Types (mirror packages/observability/src/event-mapping/lookup.ts &\n// packages/observability/src/enrich/api.ts — keep in sync)\n// ---------------------------------------------------------------------------\n\n/** One structured-tag → canonical field mapping (shift-left §3.2). */\nexport interface TaskPattern {\n tag_prefix: string;\n field: string;\n}\n\n/** One artifact_id ← glob entry (shift-left §3.3). */\nexport interface ArtifactPattern {\n artifact_id: string;\n pattern: string;\n}\n\nexport interface GeneratedConfigFile {\n path: string;\n action: \"created\" | \"updated\" | \"unchanged\";\n}\n\n// ---------------------------------------------------------------------------\n// Generators (mirror lookup.ts — keep in sync)\n// ---------------------------------------------------------------------------\n\n/**\n * Default structured-tag patterns parsed from `subagentStart.task`\n * (shift-left-event-mapping.md §3.2). Mirrors generateTaskPatterns() in\n * packages/observability/src/event-mapping/lookup.ts.\n */\nexport function generateTaskPatterns(): TaskPattern[] {\n return [\n { tag_prefix: \"DSL_TASK\", field: \"task.id\" },\n { tag_prefix: \"AGENT_ROLE\", field: \"task.target_agent\" },\n { tag_prefix: \"WORKFLOW_PHASE\", field: \"workflow.phase\" },\n ];\n}\n\n/**\n * Flatten artifact declarations into per-glob lookup entries\n * (shift-left-event-mapping.md §3.3). Mirrors generateArtifactLookup() in\n * packages/observability/src/event-mapping/lookup.ts. Declaration order is\n * preserved so the generated JSON is deterministic.\n */\nexport function generateArtifactLookup(\n artifactDeclarations: Array<{ artifact_id: string; path_patterns: string[] }>,\n): ArtifactPattern[] {\n const patterns: ArtifactPattern[] = [];\n for (const decl of artifactDeclarations) {\n for (const pattern of decl.path_patterns) {\n patterns.push({ artifact_id: decl.artifact_id, pattern });\n }\n }\n return patterns;\n}\n\n// ---------------------------------------------------------------------------\n// Binding / artifact-contracts loaders\n// ---------------------------------------------------------------------------\n\n/**\n * Extract the hook → span/link rules from an observability binding file.\n * Accepts both `event_mapping:` (binding form) and `mappings:` (resolved form)\n * top-level keys, matching @aaac/observability's loadEventMappingConfig().\n * Returns the rules object as parsed (insertion order preserved by `yaml`).\n */\nexport function extractEventMappingRules(\n parsed: unknown,\n): Record<string, unknown> {\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const obj = parsed as Record<string, unknown>;\n const rules =\n (obj.event_mapping as Record<string, unknown> | undefined) ??\n (obj.mappings as Record<string, unknown> | undefined);\n if (rules && typeof rules === \"object\") {\n return rules;\n }\n }\n return {};\n}\n\nconst ArtifactContractsSchema = z.object({\n artifacts: z\n .record(\n z.string(),\n z\n .object({ path_patterns: z.array(z.string()).optional() })\n .passthrough(),\n )\n .optional(),\n});\n\n/**\n * Load artifact-contracts.yaml and return the declarations that carry path\n * globs, in declaration order. Artifacts without `path_patterns` are skipped.\n */\nexport function parseArtifactDeclarations(\n parsed: unknown,\n): Array<{ artifact_id: string; path_patterns: string[] }> {\n const { artifacts } = ArtifactContractsSchema.parse(parsed ?? {});\n if (!artifacts) return [];\n\n const decls: Array<{ artifact_id: string; path_patterns: string[] }> = [];\n for (const [artifact_id, decl] of Object.entries(artifacts)) {\n if (decl.path_patterns && decl.path_patterns.length > 0) {\n decls.push({ artifact_id, path_patterns: decl.path_patterns });\n }\n }\n return decls;\n}\n\n// ---------------------------------------------------------------------------\n// Deterministic JSON write (idempotent)\n// ---------------------------------------------------------------------------\n\nfunction serialize(value: unknown): string {\n return JSON.stringify(value, null, 2) + \"\\n\";\n}\n\n/**\n * Write `value` as pretty JSON only when the on-disk content differs.\n * Returns the action so callers can report and lock the entry.\n */\nasync function writeJsonIfChanged(\n absPath: string,\n value: unknown,\n): Promise<GeneratedConfigFile[\"action\"]> {\n const serialized = serialize(value);\n const existed = existsSync(absPath);\n const existing = existed ? await readFile(absPath, \"utf8\") : undefined;\n\n if (existing === serialized) {\n return \"unchanged\";\n }\n\n await mkdir(dirname(absPath), { recursive: true });\n await writeFile(absPath, serialized, \"utf8\");\n return existed ? \"updated\" : \"created\";\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport interface GenerateObservConfigOptions {\n projectRoot: string;\n /** Path to the observability event_mapping binding (relative to projectRoot or absolute). */\n eventMapping?: string;\n /** Path to artifact-contracts.yaml (relative to projectRoot or absolute). */\n artifactContracts?: string;\n}\n\n/**\n * Generate the .agent-logs/config/*.json lookup tables from the declarative\n * binding + artifact-contracts. Idempotent and deterministic.\n *\n * - event-mapping.json is written when `eventMapping` resolves to an existing file.\n * - artifact-lookup.json is written when `artifactContracts` resolves to an existing file.\n * - task-patterns.json is always written (constant content).\n *\n * Returns the generated files (for reporting) and lock entries so the caller\n * can register them for `aaac uninstall`.\n */\nexport async function generateObservConfig(\n options: GenerateObservConfigOptions,\n): Promise<{\n generated: GeneratedConfigFile[];\n lockEntries: Array<{ path: string; type: \"generated\" }>;\n}> {\n const root = resolve(options.projectRoot);\n const generated: GeneratedConfigFile[] = [];\n\n // --- event-mapping.json ---\n if (options.eventMapping) {\n const bindingPath = resolve(root, options.eventMapping);\n if (existsSync(bindingPath)) {\n const parsed = parseYaml(await readFile(bindingPath, \"utf8\")) as unknown;\n const mappings = extractEventMappingRules(parsed);\n const action = await writeJsonIfChanged(\n join(root, EVENT_MAPPING_JSON),\n { mappings },\n );\n generated.push({ path: EVENT_MAPPING_JSON, action });\n }\n }\n\n // --- artifact-lookup.json ---\n if (options.artifactContracts) {\n const contractsPath = resolve(root, options.artifactContracts);\n if (existsSync(contractsPath)) {\n const parsed = parseYaml(await readFile(contractsPath, \"utf8\")) as unknown;\n const lookup = generateArtifactLookup(parseArtifactDeclarations(parsed));\n const action = await writeJsonIfChanged(\n join(root, ARTIFACT_LOOKUP_JSON),\n lookup,\n );\n generated.push({ path: ARTIFACT_LOOKUP_JSON, action });\n }\n }\n\n // --- task-patterns.json (constant) ---\n {\n const action = await writeJsonIfChanged(\n join(root, TASK_PATTERNS_JSON),\n generateTaskPatterns(),\n );\n generated.push({ path: TASK_PATTERNS_JSON, action });\n }\n\n const lockEntries = generated.map((g) => ({\n path: g.path,\n type: \"generated\" as const,\n }));\n\n return { generated, lockEntries };\n}\n"],"mappings":"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","names":["parseYaml","target","result","resolve","resolve","validateComponent","dirname","validateComponent","dirname","unwrapSchema","unwrapSchema","countAgenticOperations","dirname","dirname","countAgenticOperations","access","dirname","join","fileExists","access","join","dirname","existsSync","mkdir","readFile","writeFile","dirname","join","resolve","parseYaml","z","existsSync","mkdir","readFile","writeFile","dirname","join","resolve","parseYaml","z","z","resolve","readFile","parseYaml","existsSync","mkdir","dirname","join","writeFile"]}