@manifesto-ai/compiler 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -16
- package/dist/chunk-DJY6BFGK.js +74 -0
- package/dist/chunk-DJY6BFGK.js.map +1 -0
- package/dist/chunk-QP2LGMBA.js +4522 -0
- package/dist/chunk-QP2LGMBA.js.map +1 -0
- package/dist/chunk-QXLPDCLA.js +33 -0
- package/dist/chunk-QXLPDCLA.js.map +1 -0
- package/dist/esbuild.d.ts +8 -0
- package/dist/esbuild.js +14 -0
- package/dist/esbuild.js.map +1 -0
- package/dist/index.d.ts +2710 -11
- package/dist/index.js +2189 -43
- package/dist/index.js.map +1 -1
- package/dist/node-loader.d.ts +18 -0
- package/dist/node-loader.js +47 -0
- package/dist/node-loader.js.map +1 -0
- package/dist/rollup.d.ts +8 -0
- package/dist/rollup.js +14 -0
- package/dist/rollup.js.map +1 -0
- package/dist/rspack.d.ts +7 -0
- package/dist/rspack.js +14 -0
- package/dist/rspack.js.map +1 -0
- package/dist/unplugin-6wnvFiEo.d.ts +17 -0
- package/dist/vite.d.ts +8 -17
- package/dist/vite.js +13 -33
- package/dist/vite.js.map +1 -1
- package/dist/webpack.d.ts +8 -0
- package/dist/webpack.js +14 -0
- package/dist/webpack.js.map +1 -0
- package/package.json +39 -21
- package/dist/analyzer/index.d.ts +0 -6
- package/dist/analyzer/index.d.ts.map +0 -1
- package/dist/analyzer/index.js +0 -6
- package/dist/analyzer/index.js.map +0 -1
- package/dist/analyzer/scope.d.ts +0 -77
- package/dist/analyzer/scope.d.ts.map +0 -1
- package/dist/analyzer/scope.js +0 -296
- package/dist/analyzer/scope.js.map +0 -1
- package/dist/analyzer/validator.d.ts +0 -60
- package/dist/analyzer/validator.d.ts.map +0 -1
- package/dist/analyzer/validator.js +0 -439
- package/dist/analyzer/validator.js.map +0 -1
- package/dist/api/compile-mel-patch-collector.d.ts +0 -32
- package/dist/api/compile-mel-patch-collector.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-collector.js +0 -425
- package/dist/api/compile-mel-patch-collector.js.map +0 -1
- package/dist/api/compile-mel-patch-expr.d.ts +0 -9
- package/dist/api/compile-mel-patch-expr.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-expr.js +0 -179
- package/dist/api/compile-mel-patch-expr.js.map +0 -1
- package/dist/api/compile-mel-patch-location.d.ts +0 -10
- package/dist/api/compile-mel-patch-location.d.ts.map +0 -1
- package/dist/api/compile-mel-patch-location.js +0 -48
- package/dist/api/compile-mel-patch-location.js.map +0 -1
- package/dist/api/compile-mel-patch.d.ts +0 -6
- package/dist/api/compile-mel-patch.d.ts.map +0 -1
- package/dist/api/compile-mel-patch.js +0 -244
- package/dist/api/compile-mel-patch.js.map +0 -1
- package/dist/api/compile-mel.d.ts +0 -126
- package/dist/api/compile-mel.d.ts.map +0 -1
- package/dist/api/compile-mel.js +0 -114
- package/dist/api/compile-mel.js.map +0 -1
- package/dist/api/index.d.ts +0 -10
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -9
- package/dist/api/index.js.map +0 -1
- package/dist/diagnostics/codes.d.ts +0 -25
- package/dist/diagnostics/codes.d.ts.map +0 -1
- package/dist/diagnostics/codes.js +0 -154
- package/dist/diagnostics/codes.js.map +0 -1
- package/dist/diagnostics/index.d.ts +0 -6
- package/dist/diagnostics/index.d.ts.map +0 -1
- package/dist/diagnostics/index.js +0 -6
- package/dist/diagnostics/index.js.map +0 -1
- package/dist/diagnostics/types.d.ts +0 -67
- package/dist/diagnostics/types.d.ts.map +0 -1
- package/dist/diagnostics/types.js +0 -58
- package/dist/diagnostics/types.js.map +0 -1
- package/dist/evaluation/context.d.ts +0 -91
- package/dist/evaluation/context.d.ts.map +0 -1
- package/dist/evaluation/context.js +0 -53
- package/dist/evaluation/context.js.map +0 -1
- package/dist/evaluation/evaluate-expr.d.ts +0 -24
- package/dist/evaluation/evaluate-expr.d.ts.map +0 -1
- package/dist/evaluation/evaluate-expr.js +0 -577
- package/dist/evaluation/evaluate-expr.js.map +0 -1
- package/dist/evaluation/evaluate-patch.d.ts +0 -123
- package/dist/evaluation/evaluate-patch.d.ts.map +0 -1
- package/dist/evaluation/evaluate-patch.js +0 -202
- package/dist/evaluation/evaluate-patch.js.map +0 -1
- package/dist/evaluation/evaluate-runtime-patch.d.ts +0 -86
- package/dist/evaluation/evaluate-runtime-patch.d.ts.map +0 -1
- package/dist/evaluation/evaluate-runtime-patch.js +0 -185
- package/dist/evaluation/evaluate-runtime-patch.js.map +0 -1
- package/dist/evaluation/index.d.ts +0 -15
- package/dist/evaluation/index.d.ts.map +0 -1
- package/dist/evaluation/index.js +0 -13
- package/dist/evaluation/index.js.map +0 -1
- package/dist/generator/index.d.ts +0 -7
- package/dist/generator/index.d.ts.map +0 -1
- package/dist/generator/index.js +0 -7
- package/dist/generator/index.js.map +0 -1
- package/dist/generator/ir.d.ts +0 -348
- package/dist/generator/ir.d.ts.map +0 -1
- package/dist/generator/ir.js +0 -715
- package/dist/generator/ir.js.map +0 -1
- package/dist/generator/lowering.d.ts +0 -11
- package/dist/generator/lowering.d.ts.map +0 -1
- package/dist/generator/lowering.js +0 -369
- package/dist/generator/lowering.js.map +0 -1
- package/dist/generator/normalizer.d.ts +0 -16
- package/dist/generator/normalizer.d.ts.map +0 -1
- package/dist/generator/normalizer.js +0 -181
- package/dist/generator/normalizer.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lexer/index.d.ts +0 -7
- package/dist/lexer/index.d.ts.map +0 -1
- package/dist/lexer/index.js +0 -7
- package/dist/lexer/index.js.map +0 -1
- package/dist/lexer/lexer.d.ts +0 -59
- package/dist/lexer/lexer.d.ts.map +0 -1
- package/dist/lexer/lexer.js +0 -433
- package/dist/lexer/lexer.js.map +0 -1
- package/dist/lexer/source-location.d.ts +0 -41
- package/dist/lexer/source-location.d.ts.map +0 -1
- package/dist/lexer/source-location.js +0 -33
- package/dist/lexer/source-location.js.map +0 -1
- package/dist/lexer/tokens.d.ts +0 -47
- package/dist/lexer/tokens.d.ts.map +0 -1
- package/dist/lexer/tokens.js +0 -73
- package/dist/lexer/tokens.js.map +0 -1
- package/dist/loader.d.ts +0 -23
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -62
- package/dist/loader.js.map +0 -1
- package/dist/lowering/context.d.ts +0 -96
- package/dist/lowering/context.d.ts.map +0 -1
- package/dist/lowering/context.js +0 -42
- package/dist/lowering/context.js.map +0 -1
- package/dist/lowering/errors.d.ts +0 -84
- package/dist/lowering/errors.d.ts.map +0 -1
- package/dist/lowering/errors.js +0 -81
- package/dist/lowering/errors.js.map +0 -1
- package/dist/lowering/index.d.ts +0 -20
- package/dist/lowering/index.d.ts.map +0 -1
- package/dist/lowering/index.js +0 -13
- package/dist/lowering/index.js.map +0 -1
- package/dist/lowering/lower-expr.d.ts +0 -76
- package/dist/lowering/lower-expr.d.ts.map +0 -1
- package/dist/lowering/lower-expr.js +0 -366
- package/dist/lowering/lower-expr.js.map +0 -1
- package/dist/lowering/lower-patch.d.ts +0 -231
- package/dist/lowering/lower-patch.d.ts.map +0 -1
- package/dist/lowering/lower-patch.js +0 -146
- package/dist/lowering/lower-patch.js.map +0 -1
- package/dist/lowering/lower-runtime-patch.d.ts +0 -100
- package/dist/lowering/lower-runtime-patch.d.ts.map +0 -1
- package/dist/lowering/lower-runtime-patch.js +0 -49
- package/dist/lowering/lower-runtime-patch.js.map +0 -1
- package/dist/mel-module.d.ts +0 -13
- package/dist/mel-module.d.ts.map +0 -1
- package/dist/mel-module.js +0 -33
- package/dist/mel-module.js.map +0 -1
- package/dist/parser/ast.d.ts +0 -344
- package/dist/parser/ast.d.ts.map +0 -1
- package/dist/parser/ast.js +0 -24
- package/dist/parser/ast.js.map +0 -1
- package/dist/parser/index.d.ts +0 -7
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -7
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/parser.d.ts +0 -92
- package/dist/parser/parser.d.ts.map +0 -1
- package/dist/parser/parser.js +0 -892
- package/dist/parser/parser.js.map +0 -1
- package/dist/parser/precedence.d.ts +0 -44
- package/dist/parser/precedence.d.ts.map +0 -1
- package/dist/parser/precedence.js +0 -69
- package/dist/parser/precedence.js.map +0 -1
- package/dist/renderer/expr-node.d.ts +0 -172
- package/dist/renderer/expr-node.d.ts.map +0 -1
- package/dist/renderer/expr-node.js +0 -218
- package/dist/renderer/expr-node.js.map +0 -1
- package/dist/renderer/fragment.d.ts +0 -84
- package/dist/renderer/fragment.d.ts.map +0 -1
- package/dist/renderer/fragment.js +0 -172
- package/dist/renderer/fragment.js.map +0 -1
- package/dist/renderer/index.d.ts +0 -23
- package/dist/renderer/index.d.ts.map +0 -1
- package/dist/renderer/index.js +0 -27
- package/dist/renderer/index.js.map +0 -1
- package/dist/renderer/patch-op.d.ts +0 -82
- package/dist/renderer/patch-op.d.ts.map +0 -1
- package/dist/renderer/patch-op.js +0 -204
- package/dist/renderer/patch-op.js.map +0 -1
- package/dist/renderer/type-expr.d.ts +0 -61
- package/dist/renderer/type-expr.d.ts.map +0 -1
- package/dist/renderer/type-expr.js +0 -131
- package/dist/renderer/type-expr.js.map +0 -1
- package/dist/vite.d.ts.map +0 -1
- package/loader.cjs +0 -22
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,cAAc,kBAAkB,CAAC;AAEjC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,cAAc,mBAAmB,CAAC;AAElC,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,cAAc,qBAAqB,CAAC;AAEpC,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,cAAc,wBAAwB,CAAC;AAEvC,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,cAAc,sBAAsB,CAAC;AAErC,+EAA+E;AAC/E,0CAA0C;AAC1C,kEAAkE;AAClE,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,cAAc,GAef,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,cAAc,qBAAqB,CAAC;AAEpC,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E,cAAc,uBAAuB,CAAC;AAEtC,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/diagnostics/codes.ts","../src/diagnostics/format.ts","../src/generator/lowering.ts","../src/renderer/type-expr.ts","../src/renderer/expr-node.ts","../src/renderer/patch-op.ts","../src/renderer/fragment.ts","../src/lowering/context.ts","../src/lowering/lower-patch.ts","../src/evaluation/context.ts","../src/evaluation/evaluate-expr.ts","../src/evaluation/evaluate-patch.ts","../src/evaluation/evaluate-runtime-patch.ts","../src/index.ts"],"sourcesContent":["/**\n * MEL Compiler Diagnostic Codes\n * Based on MEL SPEC v0.3.3 Appendix A\n */\n\n/**\n * Diagnostic code information\n */\nexport interface DiagnosticCode {\n code: string;\n message: string;\n category: \"syntax\" | \"semantic\" | \"type\" | \"system\";\n}\n\n/**\n * All diagnostic codes\n */\nexport const DIAGNOSTIC_CODES: Record<string, DiagnosticCode> = {\n // ============ Syntax Errors (E0xx) ============\n E001: {\n code: \"E001\",\n message: \"$system.* cannot be used in computed expressions (non-deterministic)\",\n category: \"semantic\",\n },\n E002: {\n code: \"E002\",\n message: \"$system.* cannot be used in state initializers\",\n category: \"semantic\",\n },\n E003: {\n code: \"E003\",\n message: \"Invalid $system reference\",\n category: \"semantic\",\n },\n E004: {\n code: \"E004\",\n message: \"Identifier starts with reserved prefix '__sys__'\",\n category: \"syntax\",\n },\n\n // ============ v0.3.3 Errors (E0xx) ============\n E005: {\n code: \"E005\",\n message: \"available expression must be pure (no Effects, no $system.*)\",\n category: \"semantic\",\n },\n E006: {\n code: \"E006\",\n message: \"fail must be inside a guard (when or once)\",\n category: \"semantic\",\n },\n E007: {\n code: \"E007\",\n message: \"stop must be inside a guard (when or once)\",\n category: \"semantic\",\n },\n E008: {\n code: \"E008\",\n message: \"stop message suggests waiting/pending - use 'Already processed' style instead\",\n category: \"semantic\",\n },\n E009: {\n code: \"E009\",\n message: \"Primitive aggregation (sum, min, max) only allowed in computed\",\n category: \"semantic\",\n },\n E010: {\n code: \"E010\",\n message: \"Primitive aggregation does not allow composition - use direct reference only\",\n category: \"semantic\",\n },\n E011: {\n code: \"E011\",\n message: \"reduce/fold/scan is forbidden - use sum, min, max for aggregation\",\n category: \"semantic\",\n },\n\n // ============ Scope Errors (E1xx) ============\n E_UNDEFINED: {\n code: \"E_UNDEFINED\",\n message: \"Undefined identifier\",\n category: \"semantic\",\n },\n E_DUPLICATE: {\n code: \"E_DUPLICATE\",\n message: \"Duplicate identifier\",\n category: \"semantic\",\n },\n E_INVALID_ACCESS: {\n code: \"E_INVALID_ACCESS\",\n message: \"Invalid access to identifier in this context\",\n category: \"semantic\",\n },\n\n // ============ Statement Errors (E2xx) ============\n E_UNGUARDED_STMT: {\n code: \"E_UNGUARDED_STMT\",\n message: \"Statement must be inside a guard (when or once)\",\n category: \"semantic\",\n },\n E_UNGUARDED_PATCH: {\n code: \"E_UNGUARDED_PATCH\",\n message: \"Patch must be inside a guard\",\n category: \"semantic\",\n },\n E_UNGUARDED_EFFECT: {\n code: \"E_UNGUARDED_EFFECT\",\n message: \"Effect must be inside a guard\",\n category: \"semantic\",\n },\n\n // ============ Type Errors (E3xx) ============\n E_ARG_COUNT: {\n code: \"E_ARG_COUNT\",\n message: \"Wrong number of arguments\",\n category: \"type\",\n },\n E_TYPE_MISMATCH: {\n code: \"E_TYPE_MISMATCH\",\n message: \"Type mismatch\",\n category: \"type\",\n },\n\n // ============ Warnings (W0xx) ============\n W_NON_BOOL_COND: {\n code: \"W_NON_BOOL_COND\",\n message: \"Condition may not be boolean\",\n category: \"semantic\",\n },\n W_UNUSED: {\n code: \"W_UNUSED\",\n message: \"Unused identifier\",\n category: \"semantic\",\n },\n W012: {\n code: \"W012\",\n message: \"Anonymous object type in state field - use named type declaration instead\",\n category: \"type\",\n },\n\n // ============ Lexer Errors ============\n MEL_LEXER: {\n code: \"MEL_LEXER\",\n message: \"Lexer error\",\n category: \"syntax\",\n },\n\n // ============ Parser Errors ============\n MEL_PARSER: {\n code: \"MEL_PARSER\",\n message: \"Parser error\",\n category: \"syntax\",\n },\n};\n\n/**\n * Get diagnostic code information\n */\nexport function getDiagnosticInfo(code: string): DiagnosticCode | undefined {\n return DIAGNOSTIC_CODES[code];\n}\n\n/**\n * Format a diagnostic code for display\n */\nexport function formatDiagnosticCode(code: string): string {\n const info = DIAGNOSTIC_CODES[code];\n if (info) {\n return `${code}: ${info.message}`;\n }\n return code;\n}\n","/**\n * Plain-text Diagnostic Formatter\n *\n * Browser-safe (no ANSI colors). Produces human-readable error messages\n * with optional source context and caret indicators.\n *\n * @module\n */\n\nimport type { Diagnostic } from \"./types.js\";\n\n/**\n * Format a single diagnostic as plain text.\n *\n * Without source: `[MEL_PARSER] Expected '{' (3:15)`\n * With source:\n * ```\n * [MEL_PARSER] Expected '{' (3:15)\n * 3 | domain Bad bad syntax here }\n * ^^^\n * ```\n */\nexport function formatDiagnostic(diagnostic: Diagnostic, source?: string): string {\n const { code, message, location } = diagnostic;\n\n if (!location || (location.start.line === 0 && location.start.column === 0)) {\n return `[${code}] ${message}`;\n }\n\n const { line, column } = location.start;\n const header = `[${code}] ${message} (${line}:${column})`;\n\n if (!source) {\n return header;\n }\n\n const sourceLines = source.split(\"\\n\");\n const lineContent = sourceLines[line - 1];\n\n if (!lineContent) {\n return header;\n }\n\n const lineNumStr = String(line).padStart(4, \" \");\n const sourceLine = `${lineNumStr} | ${lineContent}`;\n\n const underlineLen = Math.max(\n 1,\n location.end.line === location.start.line\n ? Math.min(location.end.column - column, lineContent.length - column + 1)\n : 1,\n );\n const padding = \" \".repeat(lineNumStr.length + 3 + column - 1);\n const underline = `${padding}${\"^\".repeat(underlineLen)}`;\n\n return `${header}\\n${sourceLine}\\n${underline}`;\n}\n\n/**\n * Format multiple diagnostics, separated by blank lines.\n */\nexport function formatDiagnostics(diagnostics: Diagnostic[], source?: string): string {\n return diagnostics\n .map((d) => formatDiagnostic(d, source))\n .join(\"\\n\\n\");\n}\n","/**\n * System Value Lowering\n * Transforms $system.* references into effect-based acquisition\n * Based on MEL SPEC v0.3.1 Section 5.4\n */\n\nimport {\n hashSchemaSync,\n semanticPathToPatchPath,\n type DomainSchema as CoreDomainSchema,\n} from \"@manifesto-ai/core\";\nimport type { DomainSchema, ActionSpec, CoreFlowNode, CoreExprNode, FieldSpec } from \"./ir.js\";\n\n// ============ Types ============\n\n/**\n * System value slot information\n */\ninterface SystemSlot {\n key: string; // e.g., \"uuid\", \"time.now\"\n valueSlot: string; // e.g., \"__sys__addTask_uuid_value\"\n intentSlot: string; // e.g., \"__sys__addTask_uuid_intent\"\n}\n\n/**\n * Lowering context for an action\n */\ninterface LoweringContext {\n actionName: string;\n slots: Map<string, SystemSlot>; // key -> slot\n}\n\n// ============ Main Lowering Function ============\n\n/**\n * Apply system value lowering to a domain schema\n */\nexport function lowerSystemValues(schema: DomainSchema): DomainSchema {\n // Clone schema\n const result = structuredClone(schema);\n let lowered = false;\n\n // Process each action\n for (const [actionName, action] of Object.entries(result.actions)) {\n const ctx = createContext(actionName);\n\n // Collect all $system.* references\n collectSystemRefs(action.flow, ctx);\n\n if (ctx.slots.size === 0) {\n continue; // No system values to lower\n }\n lowered = true;\n\n // Add state slots\n for (const slot of ctx.slots.values()) {\n result.state.fields[slot.valueSlot] = {\n type: systemValueType(slot.key),\n required: true,\n default: null,\n };\n result.state.fields[slot.intentSlot] = {\n type: \"string\",\n required: true,\n default: null,\n };\n }\n\n // Transform the flow\n result.actions[actionName] = {\n ...action,\n flow: lowerFlow(action.flow, ctx),\n };\n }\n\n if (!lowered) {\n return result;\n }\n\n const { hash: _hash, ...schemaWithoutHash } = result;\n const nextHash = hashSchemaSync(schemaWithoutHash as Omit<CoreDomainSchema, \"hash\">);\n return {\n ...schemaWithoutHash,\n hash: nextHash,\n };\n}\n\nfunction createContext(actionName: string): LoweringContext {\n return {\n actionName,\n slots: new Map(),\n };\n}\n\nfunction systemValueType(key: string): FieldSpec[\"type\"] {\n switch (key) {\n case \"timestamp\":\n case \"time.now\":\n return \"number\";\n default:\n return \"string\";\n }\n}\n\nfunction normalizeSystemKeyForSlot(key: string): string {\n return key.replaceAll(\".\", \"_\");\n}\n\nfunction toPatchPath(path: string) {\n return semanticPathToPatchPath(path);\n}\n\n// ============ Collection Phase ============\n\n/**\n * Collect all $system.* references in a flow\n */\nfunction collectSystemRefs(flow: CoreFlowNode, ctx: LoweringContext): void {\n switch (flow.kind) {\n case \"seq\":\n for (const step of flow.steps) {\n collectSystemRefs(step, ctx);\n }\n break;\n\n case \"if\":\n collectSystemRefsFromExpr(flow.cond, ctx);\n collectSystemRefs(flow.then, ctx);\n if (flow.else) {\n collectSystemRefs(flow.else, ctx);\n }\n break;\n\n case \"patch\":\n if (flow.value) {\n collectSystemRefsFromExpr(flow.value, ctx);\n }\n break;\n\n case \"effect\":\n for (const param of Object.values(flow.params)) {\n collectSystemRefsFromExpr(param, ctx);\n }\n break;\n\n case \"fail\":\n if (flow.message) {\n collectSystemRefsFromExpr(flow.message, ctx);\n }\n break;\n }\n}\n\n/**\n * Collect $system.* references from an expression\n */\nfunction collectSystemRefsFromExpr(expr: CoreExprNode, ctx: LoweringContext): void {\n if (expr.kind === \"get\" && expr.path.startsWith(\"$system.\")) {\n const key = expr.path.slice(\"$system.\".length);\n if (!ctx.slots.has(key)) {\n const normalizedKey = normalizeSystemKeyForSlot(key);\n ctx.slots.set(key, {\n key,\n valueSlot: `__sys__${ctx.actionName}_${normalizedKey}_value`,\n intentSlot: `__sys__${ctx.actionName}_${normalizedKey}_intent`,\n });\n }\n return;\n }\n\n // Object literal fields require recursive descent into property values\n if (expr.kind === \"object\") {\n for (const value of Object.values(expr.fields)) {\n if (value && typeof value === \"object\" && \"kind\" in value) {\n collectSystemRefsFromExpr(value as CoreExprNode, ctx);\n }\n }\n return;\n }\n\n // Recursively process nested expressions\n for (const value of Object.values(expr)) {\n if (typeof value === \"object\" && value !== null) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === \"object\" && item !== null && \"kind\" in item) {\n collectSystemRefsFromExpr(item as CoreExprNode, ctx);\n }\n }\n } else if (\"kind\" in value) {\n collectSystemRefsFromExpr(value as CoreExprNode, ctx);\n }\n }\n }\n}\n\n// ============ Transformation Phase ============\n\n/**\n * Lower a flow with system value acquisition\n */\nfunction lowerFlow(flow: CoreFlowNode, ctx: LoweringContext): CoreFlowNode {\n if (ctx.slots.size === 0) {\n return flow;\n }\n\n // Generate acquisition effects\n const acquisitionSteps: CoreFlowNode[] = [];\n\n for (const slot of ctx.slots.values()) {\n // once(__sys__action_key_intent) {\n // patch __sys__action_key_intent = $meta.intentId\n // effect system.get({ key: \"uuid\", into: __sys__action_key_value })\n // }\n const acquisitionFlow: CoreFlowNode = {\n kind: \"if\",\n cond: {\n kind: \"neq\",\n left: { kind: \"get\", path: slot.intentSlot },\n right: { kind: \"get\", path: \"meta.intentId\" },\n },\n then: {\n kind: \"seq\",\n steps: [\n {\n kind: \"patch\",\n op: \"set\",\n path: toPatchPath(slot.intentSlot),\n value: { kind: \"get\", path: \"meta.intentId\" },\n },\n {\n kind: \"effect\",\n type: \"system.get\",\n params: {\n key: { kind: \"lit\", value: slot.key },\n into: { kind: \"lit\", value: slot.valueSlot },\n },\n },\n ],\n },\n };\n acquisitionSteps.push(acquisitionFlow);\n }\n\n // Generate readiness condition\n // eq(__sys__action_key_intent, $meta.intentId) for all slots\n const readinessConditions: CoreExprNode[] = [];\n for (const slot of ctx.slots.values()) {\n readinessConditions.push({\n kind: \"eq\",\n left: { kind: \"get\", path: slot.intentSlot },\n right: { kind: \"get\", path: \"meta.intentId\" },\n });\n }\n\n const readinessCond: CoreExprNode = readinessConditions.length === 1\n ? readinessConditions[0]\n : { kind: \"and\", args: readinessConditions };\n\n // Transform the original flow\n const transformedFlow = transformFlow(flow, ctx);\n\n // Wrap with readiness guard\n const guardedFlow: CoreFlowNode = {\n kind: \"if\",\n cond: readinessCond,\n then: transformedFlow,\n };\n\n // Combine: acquisitions + guarded flow\n return {\n kind: \"seq\",\n steps: [...acquisitionSteps, guardedFlow],\n };\n}\n\n/**\n * Transform a flow, replacing $system.* references with slot accesses\n */\nfunction transformFlow(flow: CoreFlowNode, ctx: LoweringContext): CoreFlowNode {\n switch (flow.kind) {\n case \"seq\":\n return {\n kind: \"seq\",\n steps: flow.steps.map(s => transformFlow(s, ctx)),\n };\n\n case \"if\":\n return {\n kind: \"if\",\n cond: transformExpr(flow.cond, ctx),\n then: transformFlow(flow.then, ctx),\n else: flow.else ? transformFlow(flow.else, ctx) : undefined,\n };\n\n case \"patch\":\n return {\n kind: \"patch\",\n op: flow.op,\n path: flow.path,\n value: flow.value ? transformExpr(flow.value, ctx) : undefined,\n };\n\n case \"effect\":\n const params: Record<string, CoreExprNode> = {};\n for (const [key, value] of Object.entries(flow.params)) {\n params[key] = transformExpr(value, ctx);\n }\n return {\n kind: \"effect\",\n type: flow.type,\n params,\n };\n\n case \"fail\":\n return {\n kind: \"fail\",\n code: flow.code,\n message: flow.message ? transformExpr(flow.message, ctx) : undefined,\n };\n\n default:\n return flow;\n }\n}\n\n/**\n * Transform an expression, replacing $system.* with slot accesses\n */\nfunction transformExpr(expr: CoreExprNode, ctx: LoweringContext): CoreExprNode {\n // Replace $system.* with slot value path\n if (expr.kind === \"get\" && expr.path.startsWith(\"$system.\")) {\n const key = expr.path.slice(\"$system.\".length);\n const slot = ctx.slots.get(key);\n if (slot) {\n return { kind: \"get\", path: slot.valueSlot };\n }\n }\n\n // Recursively transform nested expressions\n switch (expr.kind) {\n case \"eq\":\n case \"neq\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n case \"add\":\n case \"sub\":\n case \"mul\":\n case \"div\":\n case \"mod\":\n return {\n kind: expr.kind,\n left: transformExpr((expr as any).left, ctx),\n right: transformExpr((expr as any).right, ctx),\n } as CoreExprNode;\n\n case \"and\":\n case \"or\":\n case \"coalesce\":\n case \"concat\":\n case \"min\":\n case \"max\":\n case \"merge\":\n return {\n kind: expr.kind,\n args: (expr as any).args.map((a: CoreExprNode) => transformExpr(a, ctx)),\n } as CoreExprNode;\n\n case \"not\":\n case \"neg\":\n case \"abs\":\n case \"floor\":\n case \"ceil\":\n case \"round\":\n case \"isNull\":\n case \"typeof\":\n case \"toString\":\n case \"len\":\n case \"keys\":\n case \"values\":\n case \"entries\":\n case \"first\":\n case \"last\":\n return {\n kind: expr.kind,\n arg: transformExpr((expr as any).arg, ctx),\n } as CoreExprNode;\n\n case \"trim\":\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"strLen\":\n return {\n kind: expr.kind,\n str: transformExpr((expr as any).str, ctx),\n } as CoreExprNode;\n\n case \"at\":\n case \"includes\":\n return {\n kind: expr.kind,\n array: transformExpr((expr as any).array, ctx),\n index: transformExpr((expr as any).index ?? (expr as any).item, ctx),\n } as CoreExprNode;\n\n case \"filter\":\n case \"map\":\n case \"find\":\n case \"every\":\n case \"some\":\n return {\n kind: expr.kind,\n array: transformExpr((expr as any).array, ctx),\n predicate: transformExpr((expr as any).predicate ?? (expr as any).mapper, ctx),\n } as CoreExprNode;\n\n case \"if\":\n return {\n kind: \"if\",\n cond: transformExpr((expr as any).cond, ctx),\n then: transformExpr((expr as any).then, ctx),\n else: transformExpr((expr as any).else, ctx),\n };\n\n case \"field\":\n return {\n kind: \"field\",\n object: transformExpr((expr as any).object, ctx),\n property: (expr as any).property,\n };\n\n case \"object\":\n const fields: Record<string, CoreExprNode> = {};\n for (const [key, value] of Object.entries((expr as any).fields)) {\n fields[key] = transformExpr(value as CoreExprNode, ctx);\n }\n return { kind: \"object\", fields };\n\n case \"append\":\n return {\n kind: \"append\",\n array: transformExpr((expr as any).array, ctx),\n items: (expr as any).items.map((i: CoreExprNode) => transformExpr(i, ctx)),\n };\n\n default:\n return expr;\n }\n}\n","/**\n * TypeExpr to MEL Renderer\n *\n * Converts TypeExpr AST to MEL type syntax.\n *\n * @example\n * // { kind: \"primitive\", name: \"string\" } -> \"string\"\n * // { kind: \"array\", element: { kind: \"ref\", name: \"Todo\" } } -> \"Array<Todo>\"\n * // { kind: \"union\", members: [...] } -> \"string | number | null\"\n */\n\n/**\n * TypeExpr type from translator package\n */\nexport type TypeExpr =\n | { kind: \"primitive\"; name: \"string\" | \"number\" | \"boolean\" | \"null\" }\n | { kind: \"literal\"; value: string | number | boolean | null }\n | { kind: \"ref\"; name: string }\n | { kind: \"array\"; element: TypeExpr }\n | { kind: \"record\"; key: TypeExpr; value: TypeExpr }\n | { kind: \"union\"; members: TypeExpr[] }\n | { kind: \"object\"; fields: TypeField[] };\n\nexport type TypeField = {\n readonly name: string;\n readonly optional: boolean;\n readonly type: TypeExpr;\n};\n\n/**\n * Renders a TypeExpr to MEL type syntax string.\n *\n * @param typeExpr - The TypeExpr to render\n * @returns MEL type syntax string\n */\nexport function renderTypeExpr(typeExpr: TypeExpr): string {\n switch (typeExpr.kind) {\n case \"primitive\":\n return typeExpr.name;\n\n case \"literal\":\n return renderLiteralValue(typeExpr.value);\n\n case \"ref\":\n return typeExpr.name;\n\n case \"array\":\n return `Array<${renderTypeExpr(typeExpr.element)}>`;\n\n case \"record\":\n return `Record<${renderTypeExpr(typeExpr.key)}, ${renderTypeExpr(typeExpr.value)}>`;\n\n case \"union\":\n return renderUnion(typeExpr.members);\n\n case \"object\":\n return renderObjectType(typeExpr.fields);\n }\n}\n\n/**\n * Renders a literal value for type syntax.\n */\nfunction renderLiteralValue(value: string | number | boolean | null): string {\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return `\"${escapeString(value)}\"`;\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n return String(value);\n}\n\n/**\n * Renders a union type.\n */\nfunction renderUnion(members: TypeExpr[]): string {\n if (members.length === 0) {\n return \"never\";\n }\n return members.map(renderTypeExpr).join(\" | \");\n}\n\n/**\n * Renders an object type with fields.\n */\nfunction renderObjectType(fields: TypeField[]): string {\n if (fields.length === 0) {\n return \"{}\";\n }\n\n const fieldStrings = fields.map((field) => {\n const optional = field.optional ? \"?\" : \"\";\n return `${field.name}${optional}: ${renderTypeExpr(field.type)}`;\n });\n\n return `{ ${fieldStrings.join(\", \")} }`;\n}\n\n/**\n * Renders a TypeField with optional default value.\n *\n * @param field - The TypeField to render\n * @param defaultValue - Optional default value\n * @returns MEL field declaration string\n */\nexport function renderTypeField(\n field: TypeField,\n defaultValue?: unknown\n): string {\n const typeStr = renderTypeExpr(field.type);\n\n if (defaultValue !== undefined) {\n return `${field.name}: ${typeStr} = ${renderValue(defaultValue)}`;\n }\n\n if (field.optional) {\n return `${field.name}?: ${typeStr}`;\n }\n\n return `${field.name}: ${typeStr}`;\n}\n\n/**\n * Renders a JavaScript value to MEL syntax.\n */\nexport function renderValue(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n if (value === undefined) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return `\"${escapeString(value)}\"`;\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n if (Array.isArray(value)) {\n const items = value.map(renderValue).join(\", \");\n return `[${items}]`;\n }\n if (typeof value === \"object\") {\n const entries = Object.entries(value)\n .map(([k, v]) => `${k}: ${renderValue(v)}`)\n .join(\", \");\n return `{ ${entries} }`;\n }\n return String(value);\n}\n\n/**\n * Escapes a string for MEL syntax.\n */\nfunction escapeString(str: string): string {\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\");\n}\n","/**\n * ExprNode to MEL Renderer\n *\n * Converts ExprNode AST to MEL expression syntax.\n *\n * @example\n * // { kind: \"lit\", value: 5 } -> \"5\"\n * // { kind: \"get\", path: \"count\" } -> \"count\"\n * // { kind: \"add\", left: { kind: \"get\", path: \"x\" }, right: { kind: \"lit\", value: 1 } } -> \"add(x, 1)\"\n * // { kind: \"gt\", left: { kind: \"get\", path: \"count\" }, right: { kind: \"lit\", value: 0 } } -> \"gt(count, 0)\"\n */\n\n/**\n * ExprNode type (subset from core package)\n */\nexport type ExprNode =\n // Literals\n | { kind: \"lit\"; value: unknown }\n | { kind: \"get\"; path: string }\n // Comparison\n | { kind: \"eq\"; left: ExprNode; right: ExprNode }\n | { kind: \"neq\"; left: ExprNode; right: ExprNode }\n | { kind: \"gt\"; left: ExprNode; right: ExprNode }\n | { kind: \"gte\"; left: ExprNode; right: ExprNode }\n | { kind: \"lt\"; left: ExprNode; right: ExprNode }\n | { kind: \"lte\"; left: ExprNode; right: ExprNode }\n // Logical\n | { kind: \"and\"; args: ExprNode[] }\n | { kind: \"or\"; args: ExprNode[] }\n | { kind: \"not\"; arg: ExprNode }\n // Conditional\n | { kind: \"if\"; cond: ExprNode; then: ExprNode; else: ExprNode }\n // Arithmetic\n | { kind: \"add\"; left: ExprNode; right: ExprNode }\n | { kind: \"sub\"; left: ExprNode; right: ExprNode }\n | { kind: \"mul\"; left: ExprNode; right: ExprNode }\n | { kind: \"div\"; left: ExprNode; right: ExprNode }\n | { kind: \"mod\"; left: ExprNode; right: ExprNode }\n // String\n | { kind: \"concat\"; args: ExprNode[] }\n | { kind: \"substring\"; str: ExprNode; start: ExprNode; end?: ExprNode }\n | { kind: \"trim\"; str: ExprNode }\n // Collection\n | { kind: \"len\"; arg: ExprNode }\n | { kind: \"at\"; array: ExprNode; index: ExprNode }\n | { kind: \"first\"; array: ExprNode }\n | { kind: \"last\"; array: ExprNode }\n | { kind: \"slice\"; array: ExprNode; start: ExprNode; end?: ExprNode }\n | { kind: \"includes\"; array: ExprNode; item: ExprNode }\n | { kind: \"filter\"; array: ExprNode; predicate: ExprNode }\n | { kind: \"map\"; array: ExprNode; mapper: ExprNode }\n | { kind: \"find\"; array: ExprNode; predicate: ExprNode }\n | { kind: \"every\"; array: ExprNode; predicate: ExprNode }\n | { kind: \"some\"; array: ExprNode; predicate: ExprNode }\n | { kind: \"append\"; array: ExprNode; items: ExprNode[] }\n // Object\n | { kind: \"object\"; fields: Record<string, ExprNode> }\n | { kind: \"field\"; object: ExprNode; property: string }\n | { kind: \"keys\"; obj: ExprNode }\n | { kind: \"values\"; obj: ExprNode }\n | { kind: \"entries\"; obj: ExprNode }\n | { kind: \"merge\"; objects: ExprNode[] }\n // Type\n | { kind: \"typeof\"; arg: ExprNode }\n | { kind: \"isNull\"; arg: ExprNode }\n | { kind: \"coalesce\"; args: ExprNode[] };\n\n/**\n * Renders an ExprNode to MEL expression syntax string.\n *\n * @param expr - The ExprNode to render\n * @returns MEL expression syntax string\n */\nexport function renderExprNode(expr: ExprNode): string {\n switch (expr.kind) {\n // Literals\n case \"lit\":\n return renderLiteral(expr.value);\n\n case \"get\":\n return renderPath(expr.path);\n\n // Comparison (binary)\n case \"eq\":\n return `eq(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"neq\":\n return `neq(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"gt\":\n return `gt(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"gte\":\n return `gte(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"lt\":\n return `lt(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"lte\":\n return `lte(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n\n // Logical\n case \"and\":\n if (!expr.args || !Array.isArray(expr.args)) {\n return `and(/* malformed: args undefined */)`;\n }\n return `and(${expr.args.map(renderExprNode).join(\", \")})`;\n case \"or\":\n if (!expr.args || !Array.isArray(expr.args)) {\n return `or(/* malformed: args undefined */)`;\n }\n return `or(${expr.args.map(renderExprNode).join(\", \")})`;\n case \"not\":\n if (!expr.arg) {\n return `not(/* malformed: arg undefined */)`;\n }\n return `not(${renderExprNode(expr.arg)})`;\n\n // Conditional\n case \"if\":\n return `if(${renderExprNode(expr.cond)}, ${renderExprNode(expr.then)}, ${renderExprNode(expr.else)})`;\n\n // Arithmetic\n case \"add\":\n return `add(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"sub\":\n return `sub(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"mul\":\n return `mul(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"div\":\n return `div(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n case \"mod\":\n return `mod(${renderExprNode(expr.left)}, ${renderExprNode(expr.right)})`;\n\n // String\n case \"concat\":\n if (!expr.args || !Array.isArray(expr.args)) {\n return `concat(/* malformed: args undefined */)`;\n }\n return `concat(${expr.args.map(renderExprNode).join(\", \")})`;\n case \"substring\":\n if (expr.end !== undefined) {\n return `substring(${renderExprNode(expr.str)}, ${renderExprNode(expr.start)}, ${renderExprNode(expr.end)})`;\n }\n return `substring(${renderExprNode(expr.str)}, ${renderExprNode(expr.start)})`;\n case \"trim\":\n return `trim(${renderExprNode(expr.str)})`;\n\n // Collection\n case \"len\":\n return `len(${renderExprNode(expr.arg)})`;\n case \"at\":\n return `at(${renderExprNode(expr.array)}, ${renderExprNode(expr.index)})`;\n case \"first\":\n return `first(${renderExprNode(expr.array)})`;\n case \"last\":\n return `last(${renderExprNode(expr.array)})`;\n case \"slice\":\n if (expr.end !== undefined) {\n return `slice(${renderExprNode(expr.array)}, ${renderExprNode(expr.start)}, ${renderExprNode(expr.end)})`;\n }\n return `slice(${renderExprNode(expr.array)}, ${renderExprNode(expr.start)})`;\n case \"includes\":\n return `includes(${renderExprNode(expr.array)}, ${renderExprNode(expr.item)})`;\n case \"filter\":\n return `filter(${renderExprNode(expr.array)}, ${renderExprNode(expr.predicate)})`;\n case \"map\":\n return `map(${renderExprNode(expr.array)}, ${renderExprNode(expr.mapper)})`;\n case \"find\":\n return `find(${renderExprNode(expr.array)}, ${renderExprNode(expr.predicate)})`;\n case \"every\":\n return `every(${renderExprNode(expr.array)}, ${renderExprNode(expr.predicate)})`;\n case \"some\":\n return `some(${renderExprNode(expr.array)}, ${renderExprNode(expr.predicate)})`;\n case \"append\":\n if (!expr.items || !Array.isArray(expr.items)) {\n return `append(${renderExprNode(expr.array)}, /* malformed: items undefined */)`;\n }\n return `append(${renderExprNode(expr.array)}, ${expr.items.map(renderExprNode).join(\", \")})`;\n\n // Object\n case \"object\":\n return renderObjectExpr(expr.fields);\n case \"field\":\n return `${renderExprNode(expr.object)}.${expr.property}`;\n case \"keys\":\n return `keys(${renderExprNode(expr.obj)})`;\n case \"values\":\n return `values(${renderExprNode(expr.obj)})`;\n case \"entries\":\n return `entries(${renderExprNode(expr.obj)})`;\n case \"merge\":\n if (!expr.objects || !Array.isArray(expr.objects)) {\n return `merge(/* malformed: objects undefined */)`;\n }\n return `merge(${expr.objects.map(renderExprNode).join(\", \")})`;\n\n // Type\n case \"typeof\":\n return `typeof(${renderExprNode(expr.arg)})`;\n case \"isNull\":\n return `isNull(${renderExprNode(expr.arg)})`;\n case \"coalesce\":\n if (!expr.args || !Array.isArray(expr.args)) {\n return `coalesce(/* malformed: args undefined */)`;\n }\n return `coalesce(${expr.args.map(renderExprNode).join(\", \")})`;\n\n default:\n // Handle unknown expression kinds gracefully\n return `/* unknown: ${JSON.stringify(expr)} */`;\n }\n}\n\n/**\n * Renders a literal value.\n */\nfunction renderLiteral(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n if (value === undefined) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return `\"${escapeString(value)}\"`;\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n if (Array.isArray(value)) {\n const items = value.map(renderLiteral).join(\", \");\n return `[${items}]`;\n }\n if (typeof value === \"object\") {\n const entries = Object.entries(value)\n .map(([k, v]) => `${k}: ${renderLiteral(v)}`)\n .join(\", \");\n return `{ ${entries} }`;\n }\n return String(value);\n}\n\n/**\n * Renders a semantic path.\n * Converts path like \"data.user.name\" to just the field reference.\n */\nfunction renderPath(path: string): string {\n // Handle special paths\n if (path.startsWith(\"$meta.\")) {\n return path;\n }\n if (path.startsWith(\"$system.\")) {\n return path;\n }\n if (path.startsWith(\"$input.\")) {\n return path;\n }\n\n // For data paths, render as field reference\n if (path.startsWith(\"data.\")) {\n return path.slice(5);\n }\n return path;\n}\n\n/**\n * Renders an object expression.\n */\nfunction renderObjectExpr(fields: Record<string, ExprNode>): string {\n const entries = Object.entries(fields)\n .map(([key, value]) => `${key}: ${renderExprNode(value)}`)\n .join(\", \");\n return `{ ${entries} }`;\n}\n\n/**\n * Escapes a string for MEL syntax.\n */\nfunction escapeString(str: string): string {\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\");\n}\n","/**\n * PatchOp to MEL Renderer\n *\n * Converts PatchOp AST to MEL syntax snippets.\n *\n * Note: These are fragments, not complete domain definitions.\n * The caller is responsible for assembling fragments into a valid MEL domain.\n */\n\nimport { renderTypeExpr, renderTypeField, renderValue, TypeExpr, TypeField } from \"./type-expr.js\";\nimport { renderExprNode, ExprNode } from \"./expr-node.js\";\nimport { parsePath } from \"@manifesto-ai/core\";\n\n// ============ PatchOp Types ============\n\nexport type AddTypeOp = {\n kind: \"addType\";\n typeName: string;\n typeExpr: TypeExpr;\n};\n\nexport type AddFieldOp = {\n kind: \"addField\";\n typeName: string;\n field: TypeField & { defaultValue?: unknown };\n};\n\nexport type SetFieldTypeOp = {\n kind: \"setFieldType\";\n path: string;\n typeExpr: TypeExpr;\n};\n\nexport type SetDefaultValueOp = {\n kind: \"setDefaultValue\";\n path: string;\n value: unknown;\n};\n\nexport type AddConstraintOp = {\n kind: \"addConstraint\";\n targetPath: string;\n rule: ExprNode;\n message?: string;\n};\n\nexport type AddComputedOp = {\n kind: \"addComputed\";\n name: string;\n expr: ExprNode;\n deps?: string[];\n};\n\nexport type AddActionAvailableOp = {\n kind: \"addActionAvailable\";\n actionName: string;\n expr: ExprNode;\n};\n\nexport type PatchOp =\n | AddTypeOp\n | AddFieldOp\n | SetFieldTypeOp\n | SetDefaultValueOp\n | AddConstraintOp\n | AddComputedOp\n | AddActionAvailableOp;\n\n// ============ Renderer Options ============\n\nexport interface RenderOptions {\n /**\n * Indentation string (default: \" \")\n */\n indent?: string;\n\n /**\n * Include comments with metadata\n */\n includeComments?: boolean;\n\n /**\n * Comment prefix for metadata\n */\n commentPrefix?: string;\n}\n\nconst DEFAULT_OPTIONS: Required<RenderOptions> = {\n indent: \" \",\n includeComments: false,\n commentPrefix: \"// \",\n};\n\n// ============ PatchOp Renderers ============\n\n/**\n * Renders a PatchOp to MEL syntax string.\n *\n * @param op - The PatchOp to render\n * @param options - Rendering options\n * @returns MEL syntax string\n */\nexport function renderPatchOp(op: PatchOp, options?: RenderOptions): string {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n switch (op.kind) {\n case \"addType\":\n return renderAddType(op, opts);\n case \"addField\":\n return renderAddField(op, opts);\n case \"setFieldType\":\n return renderSetFieldType(op, opts);\n case \"setDefaultValue\":\n return renderSetDefaultValue(op, opts);\n case \"addConstraint\":\n return renderAddConstraint(op, opts);\n case \"addComputed\":\n return renderAddComputed(op, opts);\n case \"addActionAvailable\":\n return renderAddActionAvailable(op, opts);\n default:\n return `// Unknown operation: ${JSON.stringify(op)}`;\n }\n}\n\n/**\n * Renders an addType operation.\n *\n * @example\n * // Input: { kind: \"addType\", typeName: \"Todo\", typeExpr: { kind: \"object\", fields: [...] } }\n * // Output:\n * // type Todo {\n * // id: string\n * // title: string\n * // completed: boolean\n * // }\n */\nfunction renderAddType(op: AddTypeOp, opts: Required<RenderOptions>): string {\n const { indent } = opts;\n\n if (op.typeExpr.kind === \"object\") {\n const fields = op.typeExpr.fields\n .map((field) => `${indent}${renderTypeField(field)}`)\n .join(\"\\n\");\n\n return `type ${op.typeName} {\\n${fields}\\n}`;\n }\n\n // For non-object types (aliases)\n return `type ${op.typeName} = ${renderTypeExpr(op.typeExpr)}`;\n}\n\n/**\n * Renders an addField operation.\n *\n * @example\n * // Input: { kind: \"addField\", typeName: \"Todo\", field: { name: \"priority\", type: { kind: \"primitive\", name: \"number\" }, optional: true } }\n * // Output: priority?: number\n *\n * // With default value:\n * // Input: { field: { name: \"status\", type: {...}, optional: false }, defaultValue: \"active\" }\n * // Output: status: \"idle\" | \"active\" | \"done\" = \"active\"\n */\nfunction renderAddField(op: AddFieldOp, _opts: Required<RenderOptions>): string {\n const field = op.field;\n\n if (\"defaultValue\" in field && field.defaultValue !== undefined) {\n return renderTypeField(field, field.defaultValue);\n }\n\n return renderTypeField(field);\n}\n\n/**\n * Renders a setFieldType operation.\n *\n * @example\n * // Input: { kind: \"setFieldType\", path: \"Todo.status\", typeExpr: { kind: \"union\", members: [...] } }\n * // Output: // Change Todo.status type to: \"idle\" | \"active\" | \"done\"\n * // status: \"idle\" | \"active\" | \"done\"\n */\nfunction renderSetFieldType(op: SetFieldTypeOp, opts: Required<RenderOptions>): string {\n const typeStr = renderTypeExpr(op.typeExpr);\n const fieldName = extractFieldName(op.path);\n\n const lines: string[] = [];\n if (opts.includeComments) {\n lines.push(`${opts.commentPrefix}Change ${op.path} type to: ${typeStr}`);\n }\n lines.push(`${fieldName}: ${typeStr}`);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders a setDefaultValue operation.\n *\n * @example\n * // Input: { kind: \"setDefaultValue\", path: \"Todo.completed\", value: false }\n * // Output: completed: boolean = false\n */\nfunction renderSetDefaultValue(op: SetDefaultValueOp, opts: Required<RenderOptions>): string {\n const fieldName = extractFieldName(op.path);\n const valueStr = renderValue(op.value);\n\n const lines: string[] = [];\n if (opts.includeComments) {\n lines.push(`${opts.commentPrefix}Set default value for ${op.path}`);\n }\n lines.push(`${fieldName} = ${valueStr}`);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders an addConstraint operation.\n *\n * Note: MEL constraints are typically expressed as validation rules or invariants.\n * Since MEL v0.3.3 doesn't have explicit constraint syntax in the examples,\n * we render as a comment with the constraint expression.\n *\n * @example\n * // Input: { kind: \"addConstraint\", targetPath: \"User.age\", rule: { kind: \"gte\", ... }, message: \"Must be adult\" }\n * // Output: // Constraint on User.age: gte(age, 18) - \"Must be adult\"\n */\nfunction renderAddConstraint(op: AddConstraintOp, opts: Required<RenderOptions>): string {\n const exprStr = renderExprNode(op.rule);\n const messageStr = op.message ? ` - \"${op.message}\"` : \"\";\n\n // Constraints are rendered as comments since MEL v0.3.3 doesn't have explicit constraint syntax\n // The actual validation would be done via when guards in actions\n return `${opts.commentPrefix}Constraint on ${op.targetPath}: ${exprStr}${messageStr}`;\n}\n\n/**\n * Renders an addComputed operation.\n *\n * @example\n * // Input: { kind: \"addComputed\", name: \"totalPrice\", expr: { kind: \"mul\", left: {...}, right: {...} } }\n * // Output: computed totalPrice = mul(price, quantity)\n */\nfunction renderAddComputed(op: AddComputedOp, opts: Required<RenderOptions>): string {\n const exprStr = renderExprNode(op.expr);\n\n const lines: string[] = [];\n if (opts.includeComments && op.deps && op.deps.length > 0) {\n lines.push(`${opts.commentPrefix}Dependencies: ${op.deps.join(\", \")}`);\n }\n lines.push(`computed ${op.name} = ${exprStr}`);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders an addActionAvailable operation.\n *\n * @example\n * // Input: { kind: \"addActionAvailable\", actionName: \"submit\", expr: { kind: \"and\", args: [...] } }\n * // Output: action submit() available when and(isValid, not(isSubmitting)) {\n * // // action body...\n * // }\n */\nfunction renderAddActionAvailable(op: AddActionAvailableOp, opts: Required<RenderOptions>): string {\n const exprStr = renderExprNode(op.expr);\n\n const lines: string[] = [];\n if (opts.includeComments) {\n lines.push(`${opts.commentPrefix}Add availability condition to ${op.actionName}`);\n }\n lines.push(`action ${op.actionName}() available when ${exprStr} {`);\n lines.push(`${opts.indent}// action body...`);\n lines.push(`}`);\n\n return lines.join(\"\\n\");\n}\n\n// ============ Utility Functions ============\n\n/**\n * Extracts the field name from a semantic path.\n *\n * @example\n * // \"Todo.title\" -> \"title\"\n * // \"User.address.city\" -> \"city\"\n * // \"count\" -> \"count\"\n */\nfunction extractFieldName(path: string): string {\n const parts = parsePath(path);\n return parts[parts.length - 1] ?? \"\";\n}\n\n/**\n * Gets the type name from a semantic path.\n *\n * @example\n * // \"Todo.title\" -> \"Todo\"\n * // \"User.address.city\" -> \"User\"\n * // \"count\" -> undefined\n */\nexport function extractTypeName(path: string): string | undefined {\n const parts = parsePath(path);\n if (parts.length >= 2) {\n return parts[0];\n }\n return undefined;\n}\n","/**\n * PatchFragment to MEL Renderer\n *\n * Converts PatchFragment to MEL syntax with metadata comments.\n */\n\nimport { renderPatchOp, PatchOp, RenderOptions } from \"./patch-op.js\";\n\n// ============ PatchFragment Type ============\n\nexport interface PatchFragment {\n /**\n * Unique fragment identifier (content-addressed)\n */\n fragmentId: string;\n\n /**\n * Source intent identifier\n */\n sourceIntentId: string;\n\n /**\n * Fragment operation\n */\n op: PatchOp;\n\n /**\n * Confidence score (0-1)\n */\n confidence: number;\n\n /**\n * Evidence strings\n */\n evidence: string[];\n\n /**\n * Creation timestamp (ISO 8601)\n */\n createdAt: string;\n}\n\n// ============ Render Options ============\n\nexport interface FragmentRenderOptions extends RenderOptions {\n /**\n * Include fragment metadata as comments\n */\n includeMetadata?: boolean;\n\n /**\n * Include evidence as comments\n */\n includeEvidence?: boolean;\n\n /**\n * Include confidence score\n */\n includeConfidence?: boolean;\n\n /**\n * Include fragment ID\n */\n includeFragmentId?: boolean;\n}\n\nconst DEFAULT_FRAGMENT_OPTIONS: FragmentRenderOptions = {\n indent: \" \",\n includeComments: true,\n commentPrefix: \"// \",\n includeMetadata: true,\n includeEvidence: false,\n includeConfidence: true,\n includeFragmentId: false,\n};\n\n// ============ Fragment Renderer ============\n\n/**\n * Renders a PatchFragment to MEL syntax string with optional metadata.\n *\n * @param fragment - The PatchFragment to render\n * @param options - Rendering options\n * @returns MEL syntax string with metadata comments\n */\nexport function renderFragment(\n fragment: PatchFragment,\n options?: FragmentRenderOptions\n): string {\n const opts = { ...DEFAULT_FRAGMENT_OPTIONS, ...options };\n const lines: string[] = [];\n\n // Add metadata comments\n if (opts.includeMetadata) {\n if (opts.includeFragmentId) {\n lines.push(`${opts.commentPrefix}Fragment: ${fragment.fragmentId}`);\n }\n if (opts.includeConfidence) {\n const confidencePercent = (fragment.confidence * 100).toFixed(0);\n lines.push(`${opts.commentPrefix}Confidence: ${confidencePercent}%`);\n }\n if (opts.includeEvidence && fragment.evidence.length > 0) {\n lines.push(`${opts.commentPrefix}Evidence:`);\n for (const evidence of fragment.evidence) {\n lines.push(`${opts.commentPrefix} - ${evidence}`);\n }\n }\n }\n\n // Render the operation\n const opStr = renderPatchOp(fragment.op, {\n indent: opts.indent,\n includeComments: opts.includeComments,\n commentPrefix: opts.commentPrefix,\n });\n\n lines.push(opStr);\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Renders multiple PatchFragments to MEL syntax string.\n *\n * @param fragments - The PatchFragments to render\n * @param options - Rendering options\n * @returns MEL syntax string with all fragments\n */\nexport function renderFragments(\n fragments: PatchFragment[],\n options?: FragmentRenderOptions\n): string {\n const opts = { ...DEFAULT_FRAGMENT_OPTIONS, ...options };\n\n const renderedFragments = fragments.map((fragment) =>\n renderFragment(fragment, opts)\n );\n\n return renderedFragments.join(\"\\n\\n\");\n}\n\n/**\n * Renders PatchFragments grouped by operation kind.\n *\n * @param fragments - The PatchFragments to render\n * @param options - Rendering options\n * @returns Object with rendered strings grouped by operation kind\n */\nexport function renderFragmentsByKind(\n fragments: PatchFragment[],\n options?: FragmentRenderOptions\n): Record<string, string> {\n const opts = { ...DEFAULT_FRAGMENT_OPTIONS, ...options };\n const grouped: Record<string, PatchFragment[]> = {};\n\n for (const fragment of fragments) {\n const kind = fragment.op.kind;\n if (!grouped[kind]) {\n grouped[kind] = [];\n }\n grouped[kind].push(fragment);\n }\n\n const result: Record<string, string> = {};\n for (const [kind, kindFragments] of Object.entries(grouped)) {\n result[kind] = renderFragments(kindFragments, opts);\n }\n\n return result;\n}\n\n/**\n * Renders PatchFragments as a complete MEL domain block.\n *\n * @param domainName - The domain name\n * @param fragments - The PatchFragments to render\n * @param options - Rendering options\n * @returns Complete MEL domain string\n */\nexport function renderAsDomain(\n domainName: string,\n fragments: PatchFragment[],\n options?: FragmentRenderOptions\n): string {\n const opts = { ...DEFAULT_FRAGMENT_OPTIONS, ...options };\n const indent = opts.indent ?? \" \";\n\n // Group fragments by type for organized output\n const types: PatchFragment[] = [];\n const fields: PatchFragment[] = [];\n const defaults: PatchFragment[] = [];\n const computed: PatchFragment[] = [];\n const constraints: PatchFragment[] = [];\n const actions: PatchFragment[] = [];\n\n for (const fragment of fragments) {\n switch (fragment.op.kind) {\n case \"addType\":\n types.push(fragment);\n break;\n case \"addField\":\n case \"setFieldType\":\n fields.push(fragment);\n break;\n case \"setDefaultValue\":\n defaults.push(fragment);\n break;\n case \"addComputed\":\n computed.push(fragment);\n break;\n case \"addConstraint\":\n constraints.push(fragment);\n break;\n case \"addActionAvailable\":\n actions.push(fragment);\n break;\n }\n }\n\n const lines: string[] = [];\n lines.push(`domain ${domainName} {`);\n\n // State section\n if (fields.length > 0 || defaults.length > 0) {\n lines.push(`${indent}state {`);\n for (const fragment of [...fields, ...defaults]) {\n const rendered = renderPatchOp(fragment.op, { indent: indent + indent, includeComments: false });\n lines.push(`${indent}${indent}${rendered}`);\n }\n lines.push(`${indent}}`);\n lines.push(\"\");\n }\n\n // Types section\n for (const fragment of types) {\n const rendered = renderPatchOp(fragment.op, { indent, includeComments: false });\n // Indent each line\n const indented = rendered.split(\"\\n\").map(line => `${indent}${line}`).join(\"\\n\");\n lines.push(indented);\n lines.push(\"\");\n }\n\n // Computed section\n for (const fragment of computed) {\n const rendered = renderPatchOp(fragment.op, { indent, includeComments: false });\n lines.push(`${indent}${rendered}`);\n }\n if (computed.length > 0) lines.push(\"\");\n\n // Constraints section (as comments)\n for (const fragment of constraints) {\n const rendered = renderPatchOp(fragment.op, { indent, includeComments: true });\n lines.push(`${indent}${rendered}`);\n }\n if (constraints.length > 0) lines.push(\"\");\n\n // Actions section\n for (const fragment of actions) {\n const rendered = renderPatchOp(fragment.op, { indent, includeComments: false });\n const indented = rendered.split(\"\\n\").map(line => `${indent}${line}`).join(\"\\n\");\n lines.push(indented);\n lines.push(\"\");\n }\n\n lines.push(\"}\");\n\n return lines.join(\"\\n\");\n}\n","/**\n * Lowering Context Types\n *\n * Defines contexts for expression and patch lowering.\n *\n * @see SPEC v0.4.0 §17.2\n */\n\n/**\n * Allowed system path prefixes.\n *\n * In Translator path, only 'meta' and 'input' are allowed.\n * 'system' is forbidden (requires Flow execution).\n *\n * @see FDR-MEL-071\n */\nexport type AllowedSysPrefix = \"meta\" | \"input\";\n\n/**\n * Context for single expression lowering.\n *\n * @see SPEC v0.4.0 §17.2\n */\nexport interface ExprLoweringContext {\n /**\n * Expression context mode.\n * - 'schema': for addComputed, addConstraint, etc.\n * - 'action': for guards, patches, effects\n */\n mode: \"schema\" | \"action\";\n\n /**\n * Allowed system path prefixes.\n * In Translator path: only [\"meta\", \"input\"]\n *\n * @see FDR-MEL-071\n */\n allowSysPaths?: { prefixes: AllowedSysPrefix[] };\n\n /**\n * Function table version for call lowering.\n */\n fnTableVersion: string;\n\n /**\n * Action name (for action context).\n */\n actionName?: string;\n\n /**\n * Whether $item is allowed in this context.\n * Only true for effect.args fields.\n *\n * @see FDR-MEL-068\n */\n allowItem?: boolean;\n}\n\n/**\n * Context for patch lowering.\n *\n * NO mode field - Compiler determines context per op-field.\n *\n * @see SPEC v0.4.0 §17.2, AD-COMP-LOW-002\n */\nexport interface PatchLoweringContext {\n /**\n * Allowed system path prefixes.\n * In Translator path: only [\"meta\", \"input\"]\n *\n * @see FDR-MEL-071\n */\n allowSysPaths?: { prefixes: AllowedSysPrefix[] };\n\n /**\n * Function table version for call lowering.\n */\n fnTableVersion: string;\n\n /**\n * Action name (for action-related ops).\n */\n actionName?: string;\n}\n\n/**\n * Default expression lowering context for schema mode.\n */\nexport const DEFAULT_SCHEMA_CONTEXT: ExprLoweringContext = {\n mode: \"schema\",\n allowSysPaths: { prefixes: [\"meta\", \"input\"] },\n fnTableVersion: \"1.0\",\n allowItem: false,\n};\n\n/**\n * Default expression lowering context for action mode.\n */\nexport const DEFAULT_ACTION_CONTEXT: ExprLoweringContext = {\n mode: \"action\",\n allowSysPaths: { prefixes: [\"meta\", \"input\"] },\n fnTableVersion: \"1.0\",\n allowItem: false,\n};\n\n/**\n * Context for effect.args (allows $item).\n */\nexport const EFFECT_ARGS_CONTEXT: ExprLoweringContext = {\n mode: \"action\",\n allowSysPaths: { prefixes: [\"meta\", \"input\"] },\n fnTableVersion: \"1.0\",\n allowItem: true,\n};\n\n/**\n * Default patch lowering context.\n */\nexport const DEFAULT_PATCH_CONTEXT: PatchLoweringContext = {\n allowSysPaths: { prefixes: [\"meta\", \"input\"] },\n fnTableVersion: \"1.0\",\n};\n","/**\n * Patch Lowering\n *\n * Transforms PatchFragment[] (MEL IR) to ConditionalPatchOp[] (Core IR).\n *\n * @see SPEC v0.4.0 §17.4, §17.5\n */\n\nimport type { ExprNode as CoreExprNode } from \"@manifesto-ai/core\";\nimport type { PatchLoweringContext, ExprLoweringContext } from \"./context.js\";\nimport { lowerExprNode, MelExprNode } from \"./lower-expr.js\";\n\n// ============ Input Types (from Translator) ============\n\n/**\n * MEL TypeExpr (Translator output).\n */\nexport type MelTypeExpr =\n | { kind: \"primitive\"; name: \"string\" | \"number\" | \"boolean\" | \"null\" }\n | { kind: \"array\"; element: MelTypeExpr }\n | { kind: \"object\"; fields: MelTypeField[] }\n | { kind: \"union\"; members: MelTypeExpr[] }\n | { kind: \"literal\"; value: string | number | boolean | null }\n | { kind: \"ref\"; name: string };\n\n/**\n * MEL TypeField.\n */\nexport type MelTypeField = {\n name: string;\n type: MelTypeExpr;\n optional?: boolean;\n};\n\n/**\n * MEL PatchOp (Translator output - schema operations).\n *\n * @see SPEC v0.4.0 §17.4\n */\nexport type MelPatchOp =\n | { kind: \"addType\"; typeName: string; typeExpr: MelTypeExpr }\n | {\n kind: \"addField\";\n typeName: string;\n field: MelTypeField & { defaultValue?: unknown };\n }\n | { kind: \"setFieldType\"; path: string; typeExpr: MelTypeExpr }\n | { kind: \"setDefaultValue\"; path: string; value: unknown }\n | {\n kind: \"addConstraint\";\n targetPath: string;\n rule: MelExprNode;\n message?: string;\n }\n | { kind: \"addComputed\"; name: string; expr: MelExprNode; deps?: string[] }\n | { kind: \"addActionAvailable\"; actionName: string; expr: MelExprNode };\n\n/**\n * MEL PatchFragment (Translator output).\n *\n * Contains MEL IR expressions that need lowering.\n *\n * @see SPEC v0.4.0 §17.4\n */\nexport interface MelPatchFragment {\n /**\n * Unique fragment identifier (content-addressed).\n */\n fragmentId: string;\n\n /**\n * Source intent identifier.\n */\n sourceIntentId: string;\n\n /**\n * Fragment operation with MEL IR expressions.\n */\n op: MelPatchOp;\n\n /**\n * Optional condition (MEL IR).\n * Preserved in output as Core IR.\n */\n condition?: MelExprNode;\n\n /**\n * Confidence score (0-1).\n */\n confidence: number;\n\n /**\n * Evidence strings.\n */\n evidence: string[];\n\n /**\n * Creation timestamp (ISO 8601).\n */\n createdAt: string;\n}\n\n// ============ Output Types (for Host) ============\n\n/**\n * Lowered TypeExpr (Core format).\n */\nexport type LoweredTypeExpr =\n | { kind: \"primitive\"; name: \"string\" | \"number\" | \"boolean\" | \"null\" }\n | { kind: \"array\"; element: LoweredTypeExpr }\n | { kind: \"object\"; fields: LoweredTypeField[] }\n | { kind: \"union\"; members: LoweredTypeExpr[] }\n | { kind: \"literal\"; value: string | number | boolean | null }\n | { kind: \"ref\"; name: string };\n\n/**\n * Lowered TypeField.\n */\nexport type LoweredTypeField = {\n name: string;\n type: LoweredTypeExpr;\n optional?: boolean;\n};\n\n/**\n * Lowered PatchOp (Core IR expressions).\n *\n * Same structure as MelPatchOp but with Core IR expressions.\n */\nexport type LoweredPatchOp =\n | { kind: \"addType\"; typeName: string; typeExpr: LoweredTypeExpr }\n | {\n kind: \"addField\";\n typeName: string;\n field: LoweredTypeField & { defaultValue?: unknown };\n }\n | { kind: \"setFieldType\"; path: string; typeExpr: LoweredTypeExpr }\n | { kind: \"setDefaultValue\"; path: string; value: unknown }\n | {\n kind: \"addConstraint\";\n targetPath: string;\n rule: CoreExprNode;\n message?: string;\n }\n | { kind: \"addComputed\"; name: string; expr: CoreExprNode; deps?: string[] }\n | { kind: \"addActionAvailable\"; actionName: string; expr: CoreExprNode };\n\n/**\n * Schema conditional patch operation (intermediate IR for Translator → Host).\n *\n * Used for schema evolution operations (addType, addField, addComputed, etc.).\n * Preserves fragment condition for later evaluation.\n *\n * @see SPEC v0.4.0 §17.5\n */\nexport interface SchemaConditionalPatchOp {\n /**\n * Fragment identifier (for tracing).\n */\n fragmentId: string;\n\n /**\n * Condition expression (Core IR).\n * If present, op is only applied when condition evaluates to true.\n *\n * @see FDR-MEL-073\n */\n condition?: CoreExprNode;\n\n /**\n * Lowered patch operation.\n */\n op: LoweredPatchOp;\n\n /**\n * Confidence (preserved from fragment).\n */\n confidence: number;\n}\n\n/**\n * @deprecated Use SchemaConditionalPatchOp instead.\n */\nexport type ConditionalPatchOp = SchemaConditionalPatchOp;\n\n// ============ Lowering Functions ============\n\n/**\n * Lower PatchFragment[] to SchemaConditionalPatchOp[].\n *\n * Transforms MEL IR expressions to Core IR expressions.\n * Preserves fragment conditions for evaluation phase.\n *\n * @param fragments - MEL IR patch fragments from Translator\n * @param ctx - Patch lowering context\n * @returns Core IR schema conditional patch operations\n *\n * @see SPEC v0.4.0 §17.5\n */\nexport function lowerPatchFragments(\n fragments: MelPatchFragment[],\n ctx: PatchLoweringContext\n): SchemaConditionalPatchOp[] {\n return fragments.map((fragment) => lowerPatchFragment(fragment, ctx));\n}\n\n/**\n * Lower a single PatchFragment to SchemaConditionalPatchOp.\n */\nfunction lowerPatchFragment(\n fragment: MelPatchFragment,\n ctx: PatchLoweringContext\n): SchemaConditionalPatchOp {\n // Lower condition if present\n const condition = fragment.condition\n ? lowerExprNode(fragment.condition, createExprContext(ctx, \"action\"))\n : undefined;\n\n // Lower the operation\n const op = lowerPatchOp(fragment.op, ctx);\n\n return {\n fragmentId: fragment.fragmentId,\n condition,\n op,\n confidence: fragment.confidence,\n };\n}\n\n/**\n * Lower a MelPatchOp to LoweredPatchOp.\n *\n * Determines context per op-field per AD-COMP-LOW-002.\n */\nfunction lowerPatchOp(op: MelPatchOp, ctx: PatchLoweringContext): LoweredPatchOp {\n switch (op.kind) {\n case \"addType\":\n return {\n kind: \"addType\",\n typeName: op.typeName,\n typeExpr: lowerTypeExpr(op.typeExpr),\n };\n\n case \"addField\":\n return {\n kind: \"addField\",\n typeName: op.typeName,\n field: {\n name: op.field.name,\n type: lowerTypeExpr(op.field.type),\n optional: op.field.optional,\n defaultValue: op.field.defaultValue,\n },\n };\n\n case \"setFieldType\":\n return {\n kind: \"setFieldType\",\n path: op.path,\n typeExpr: lowerTypeExpr(op.typeExpr),\n };\n\n case \"setDefaultValue\":\n return {\n kind: \"setDefaultValue\",\n path: op.path,\n value: op.value,\n };\n\n case \"addConstraint\":\n // addConstraint.rule → schema context (no $item)\n return {\n kind: \"addConstraint\",\n targetPath: op.targetPath,\n rule: lowerExprNode(op.rule, createExprContext(ctx, \"schema\")),\n message: op.message,\n };\n\n case \"addComputed\":\n // addComputed.expr → schema context (no $item)\n return {\n kind: \"addComputed\",\n name: op.name,\n expr: lowerExprNode(op.expr, createExprContext(ctx, \"schema\")),\n deps: op.deps,\n };\n\n case \"addActionAvailable\":\n // addActionAvailable.expr → schema context (no $item)\n return {\n kind: \"addActionAvailable\",\n actionName: op.actionName,\n expr: lowerExprNode(op.expr, createExprContext(ctx, \"schema\")),\n };\n }\n}\n\n/**\n * Lower TypeExpr (pass-through, no expressions inside).\n */\nfunction lowerTypeExpr(typeExpr: MelTypeExpr): LoweredTypeExpr {\n switch (typeExpr.kind) {\n case \"primitive\":\n return { kind: \"primitive\", name: typeExpr.name };\n\n case \"array\":\n return { kind: \"array\", element: lowerTypeExpr(typeExpr.element) };\n\n case \"object\":\n return {\n kind: \"object\",\n fields: typeExpr.fields.map((f) => ({\n name: f.name,\n type: lowerTypeExpr(f.type),\n optional: f.optional,\n })),\n };\n\n case \"union\":\n return {\n kind: \"union\",\n members: typeExpr.members.map(lowerTypeExpr),\n };\n\n case \"literal\":\n return { kind: \"literal\", value: typeExpr.value };\n\n case \"ref\":\n return { kind: \"ref\", name: typeExpr.name };\n }\n}\n\n/**\n * Create expression lowering context from patch context.\n *\n * @see AD-COMP-LOW-002\n */\nfunction createExprContext(\n patchCtx: PatchLoweringContext,\n mode: \"schema\" | \"action\"\n): ExprLoweringContext {\n return {\n mode,\n allowSysPaths: patchCtx.allowSysPaths,\n fnTableVersion: patchCtx.fnTableVersion,\n actionName: patchCtx.actionName,\n allowItem: false, // Only true for effect.args (not in schema ops)\n };\n}\n","import { parsePath } from \"@manifesto-ai/core\";\n\n/**\n * Evaluation Context Types\n *\n * Defines context for expression evaluation.\n *\n * @see SPEC v0.4.0 §18.3\n */\n\n/**\n * Minimal snapshot shape for evaluation.\n *\n * @see SPEC v0.4.0 §18.7\n */\nexport interface EvaluationSnapshot {\n /**\n * Domain data (matches StateSpec).\n * Path resolution default target.\n */\n data: unknown;\n\n /**\n * Computed values (matches ComputedSpec).\n * Accessed via bare key paths (e.g., \"total\", not \"computed.total\").\n */\n computed: Record<string, unknown>;\n}\n\n/**\n * Intent metadata for evaluation.\n *\n * @see SPEC v0.4.0 §18.3\n */\nexport interface EvaluationMeta {\n /**\n * Intent identifier.\n */\n intentId: string;\n\n /**\n * Actor reference (optional).\n */\n actor?: {\n type: string;\n id: string;\n };\n\n /**\n * Timestamp (optional).\n */\n timestamp?: number;\n}\n\n/**\n * Evaluation context.\n *\n * @see SPEC v0.4.0 §18.3\n */\nexport interface EvaluationContext {\n /**\n * Current snapshot for state lookups.\n * Paths resolve to snapshot.data.* by default.\n */\n snapshot: EvaluationSnapshot;\n\n /**\n * Intent metadata.\n * Paths starting with \"meta.*\" resolve here.\n */\n meta: EvaluationMeta;\n\n /**\n * Intent input.\n * Paths starting with \"input.*\" resolve here.\n */\n input: Record<string, unknown>;\n\n /**\n * Current $item value (for effect.args evaluation).\n * Paths starting with \"$item.*\" resolve here.\n */\n item?: unknown;\n}\n\n/**\n * Create a minimal evaluation context.\n *\n * @param options - Context options\n * @returns Evaluation context\n */\nexport function createEvaluationContext(\n options: Partial<EvaluationContext> & { meta: EvaluationMeta }\n): EvaluationContext {\n return {\n snapshot: options.snapshot ?? { data: {}, computed: {} },\n meta: options.meta,\n input: options.input ?? {},\n item: options.item,\n };\n}\n\n/**\n * Create a working snapshot by cloning and applying a patch.\n *\n * Used for sequential evaluation semantics.\n *\n * @see FDR-MEL-070\n */\nexport function applyPatchToWorkingSnapshot(\n snapshot: EvaluationSnapshot,\n path: string,\n value: unknown\n): EvaluationSnapshot {\n // Deep clone data\n const newData = structuredClone(snapshot.data) as Record<string, unknown>;\n\n // Apply patch at path\n setValueAtPath(newData, path, value);\n\n return {\n data: newData,\n computed: snapshot.computed,\n };\n}\n\n/**\n * Set value at a dot-separated path.\n *\n * @param obj - Target object\n * @param path - Dot-separated path (e.g., \"user.name\")\n * @param value - Value to set\n */\nfunction setValueAtPath(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): void {\n const parts = parsePath(path);\n let current: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i];\n if (!(part in current) || typeof current[part] !== \"object\") {\n current[part] = {};\n }\n current = current[part] as Record<string, unknown>;\n }\n\n const lastPart = parts[parts.length - 1];\n current[lastPart] = value;\n}\n","/**\n * Expression Evaluation\n *\n * Evaluates Core IR expressions against evaluation context.\n *\n * AXIOM A35: Expression evaluation is total; invalid operations return null, never throw.\n *\n * @see SPEC v0.4.0 §18\n */\n\nimport type { ExprNode } from \"@manifesto-ai/core\";\nimport type { EvaluationContext } from \"./context.js\";\nimport { parsePath } from \"@manifesto-ai/core\";\n\n// ============ Main Evaluation Function ============\n\n/**\n * Evaluate a Core IR expression.\n *\n * Total function: returns null on any error, never throws.\n *\n * @param expr - Core IR expression\n * @param ctx - Evaluation context\n * @returns Evaluated value or null on error\n *\n * @see SPEC v0.4.0 §18.4, A35\n */\nexport function evaluateExpr(expr: ExprNode, ctx: EvaluationContext): unknown {\n try {\n return evaluateNode(expr, ctx);\n } catch {\n // Total function: never throw\n return null;\n }\n}\n\n/**\n * Internal evaluation (may throw, caught by evaluateExpr).\n */\nfunction evaluateNode(expr: ExprNode, ctx: EvaluationContext): unknown {\n switch (expr.kind) {\n // Literals\n case \"lit\":\n return expr.value;\n\n case \"get\":\n return resolvePath(expr.path, ctx);\n\n // Comparison\n case \"eq\":\n return evaluateEq(expr.left, expr.right, ctx);\n\n case \"neq\":\n return evaluateNeq(expr.left, expr.right, ctx);\n\n case \"gt\":\n return evaluateComparison(expr.left, expr.right, ctx, (a, b) => a > b);\n\n case \"gte\":\n return evaluateComparison(expr.left, expr.right, ctx, (a, b) => a >= b);\n\n case \"lt\":\n return evaluateComparison(expr.left, expr.right, ctx, (a, b) => a < b);\n\n case \"lte\":\n return evaluateComparison(expr.left, expr.right, ctx, (a, b) => a <= b);\n\n // Logical\n case \"and\":\n return evaluateAnd(expr.args, ctx);\n\n case \"or\":\n return evaluateOr(expr.args, ctx);\n\n case \"not\":\n return evaluateNot(expr.arg, ctx);\n\n // Conditional\n case \"if\":\n return evaluateIf(expr.cond, expr.then, expr.else, ctx);\n\n // Arithmetic\n case \"add\":\n return evaluateArithmetic(expr.left, expr.right, ctx, (a, b) => a + b);\n\n case \"sub\":\n return evaluateArithmetic(expr.left, expr.right, ctx, (a, b) => a - b);\n\n case \"mul\":\n return evaluateArithmetic(expr.left, expr.right, ctx, (a, b) => a * b);\n\n case \"div\":\n return evaluateDiv(expr.left, expr.right, ctx);\n\n case \"mod\":\n return evaluateMod(expr.left, expr.right, ctx);\n\n // String\n case \"concat\":\n return evaluateConcat(expr.args, ctx);\n\n case \"substring\":\n return evaluateSubstring(expr.str, expr.start, expr.end, ctx);\n\n case \"trim\":\n return evaluateTrim(expr.str, ctx);\n\n // Collection\n case \"len\":\n return evaluateLen(expr.arg, ctx);\n\n case \"at\":\n return evaluateAt(expr.array, expr.index, ctx);\n\n case \"first\":\n return evaluateFirst(expr.array, ctx);\n\n case \"last\":\n return evaluateLast(expr.array, ctx);\n\n case \"slice\":\n return evaluateSlice(expr.array, expr.start, expr.end, ctx);\n\n case \"includes\":\n return evaluateIncludes(expr.array, expr.item, ctx);\n\n case \"filter\":\n return evaluateFilter(expr.array, expr.predicate, ctx);\n\n case \"map\":\n return evaluateMap(expr.array, expr.mapper, ctx);\n\n case \"find\":\n return evaluateFind(expr.array, expr.predicate, ctx);\n\n case \"every\":\n return evaluateEvery(expr.array, expr.predicate, ctx);\n\n case \"some\":\n return evaluateSome(expr.array, expr.predicate, ctx);\n\n case \"append\":\n return evaluateAppend(expr.array, expr.items, ctx);\n\n // Object\n case \"object\":\n return evaluateObject(expr.fields, ctx);\n\n case \"field\":\n return evaluateFieldAccess(expr.object, expr.property, ctx);\n\n case \"keys\":\n return evaluateKeys(expr.obj, ctx);\n\n case \"values\":\n return evaluateValues(expr.obj, ctx);\n\n case \"entries\":\n return evaluateEntries(expr.obj, ctx);\n\n case \"merge\":\n return evaluateMerge(expr.objects, ctx);\n\n // Type\n case \"typeof\":\n return evaluateTypeof(expr.arg, ctx);\n\n case \"isNull\":\n return evaluateIsNull(expr.arg, ctx);\n\n case \"coalesce\":\n return evaluateCoalesce(expr.args, ctx);\n\n default:\n // Unknown kind → null\n return null;\n }\n}\n\n// ============ Path Resolution ============\n\n/**\n * Resolve a path in the evaluation context.\n *\n * Path prefixes:\n * - meta.* → ctx.meta\n * - input.* → ctx.input\n * - $item.* → ctx.item\n * - computed.* → ctx.snapshot.computed\n * - (other) → ctx.snapshot.data\n *\n * @see SPEC v0.4.0 §18.7\n */\nfunction resolvePath(path: string, ctx: EvaluationContext): unknown {\n const parts = parsePath(path);\n\n // Special prefixes\n if (parts[0] === \"meta\") {\n return getValueAtPath(ctx.meta, parts.slice(1));\n }\n\n if (parts[0] === \"input\") {\n return getValueAtPath(ctx.input, parts.slice(1));\n }\n\n if (parts[0] === \"$item\") {\n if (ctx.item === undefined) {\n return null;\n }\n if (parts.length === 1) {\n return ctx.item;\n }\n return getValueAtPath(ctx.item, parts.slice(1));\n }\n\n // Computed: bare key lookup (no prefix)\n if (path in ctx.snapshot.computed) {\n return ctx.snapshot.computed[path];\n }\n\n // Default: resolve in snapshot.data\n return getValueAtPath(ctx.snapshot.data, parts);\n}\n\n/**\n * Get value at a path in an object.\n */\nfunction getValueAtPath(obj: unknown, parts: string[]): unknown {\n if (parts.length === 0) {\n return obj;\n }\n\n if (obj === null || obj === undefined) {\n return null;\n }\n\n if (typeof obj !== \"object\") {\n return null;\n }\n\n const [head, ...rest] = parts;\n const next = (obj as Record<string, unknown>)[head];\n\n if (rest.length === 0) {\n return next === undefined ? null : next;\n }\n\n return getValueAtPath(next, rest);\n}\n\n// ============ Comparison Operators ============\n\nfunction evaluateEq(left: ExprNode, right: ExprNode, ctx: EvaluationContext): boolean | null {\n const l = evaluateNode(left, ctx);\n const r = evaluateNode(right, ctx);\n return deepEqual(l, r);\n}\n\nfunction evaluateNeq(left: ExprNode, right: ExprNode, ctx: EvaluationContext): boolean | null {\n const result = evaluateEq(left, right, ctx);\n if (result === null) return null;\n return !result;\n}\n\nfunction evaluateComparison(\n left: ExprNode,\n right: ExprNode,\n ctx: EvaluationContext,\n compare: (a: number, b: number) => boolean\n): boolean | null {\n const l = evaluateNode(left, ctx);\n const r = evaluateNode(right, ctx);\n\n if (typeof l !== \"number\" || typeof r !== \"number\") {\n return null;\n }\n\n return compare(l, r);\n}\n\n/**\n * Deep equality check.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return a === b;\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => deepEqual(item, b[i]));\n }\n\n if (typeof a === \"object\" && typeof b === \"object\") {\n const aKeys = Object.keys(a as object);\n const bKeys = Object.keys(b as object);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key]\n )\n );\n }\n\n return false;\n}\n\n// ============ Logical Operators ============\n\nfunction evaluateAnd(args: ExprNode[], ctx: EvaluationContext): boolean | null {\n for (const arg of args) {\n const result = evaluateNode(arg, ctx);\n if (result !== true) {\n return result === false ? false : null;\n }\n }\n return true;\n}\n\nfunction evaluateOr(args: ExprNode[], ctx: EvaluationContext): boolean | null {\n for (const arg of args) {\n const result = evaluateNode(arg, ctx);\n if (result === true) {\n return true;\n }\n if (result !== false) {\n return null;\n }\n }\n return false;\n}\n\nfunction evaluateNot(arg: ExprNode, ctx: EvaluationContext): boolean | null {\n const result = evaluateNode(arg, ctx);\n if (typeof result !== \"boolean\") {\n return null;\n }\n return !result;\n}\n\n// ============ Conditional ============\n\nfunction evaluateIf(\n cond: ExprNode,\n thenExpr: ExprNode,\n elseExpr: ExprNode,\n ctx: EvaluationContext\n): unknown {\n const condResult = evaluateNode(cond, ctx);\n if (condResult === true) {\n return evaluateNode(thenExpr, ctx);\n }\n if (condResult === false) {\n return evaluateNode(elseExpr, ctx);\n }\n // Non-boolean condition → null\n return null;\n}\n\n// ============ Arithmetic Operators ============\n\nfunction evaluateArithmetic(\n left: ExprNode,\n right: ExprNode,\n ctx: EvaluationContext,\n op: (a: number, b: number) => number\n): number | null {\n const l = evaluateNode(left, ctx);\n const r = evaluateNode(right, ctx);\n\n if (typeof l !== \"number\" || typeof r !== \"number\") {\n return null;\n }\n\n const result = op(l, r);\n if (!Number.isFinite(result)) {\n return null;\n }\n\n return result;\n}\n\nfunction evaluateDiv(left: ExprNode, right: ExprNode, ctx: EvaluationContext): number | null {\n const l = evaluateNode(left, ctx);\n const r = evaluateNode(right, ctx);\n\n if (typeof l !== \"number\" || typeof r !== \"number\") {\n return null;\n }\n\n // Division by zero → null\n if (r === 0) {\n return null;\n }\n\n return l / r;\n}\n\nfunction evaluateMod(left: ExprNode, right: ExprNode, ctx: EvaluationContext): number | null {\n const l = evaluateNode(left, ctx);\n const r = evaluateNode(right, ctx);\n\n if (typeof l !== \"number\" || typeof r !== \"number\") {\n return null;\n }\n\n // Modulo by zero → null\n if (r === 0) {\n return null;\n }\n\n return l % r;\n}\n\n// ============ String Operators ============\n\nfunction evaluateConcat(args: ExprNode[], ctx: EvaluationContext): string | null {\n const values: string[] = [];\n for (const arg of args) {\n const val = evaluateNode(arg, ctx);\n if (typeof val !== \"string\") {\n return null;\n }\n values.push(val);\n }\n return values.join(\"\");\n}\n\nfunction evaluateSubstring(\n str: ExprNode,\n start: ExprNode,\n end: ExprNode | undefined,\n ctx: EvaluationContext\n): string | null {\n const s = evaluateNode(str, ctx);\n const startIdx = evaluateNode(start, ctx);\n\n if (typeof s !== \"string\" || typeof startIdx !== \"number\") {\n return null;\n }\n\n if (end === undefined) {\n return s.substring(startIdx);\n }\n\n const endIdx = evaluateNode(end, ctx);\n if (typeof endIdx !== \"number\") {\n return null;\n }\n\n return s.substring(startIdx, endIdx);\n}\n\nfunction evaluateTrim(str: ExprNode, ctx: EvaluationContext): string | null {\n const s = evaluateNode(str, ctx);\n if (typeof s !== \"string\") {\n return null;\n }\n return s.trim();\n}\n\n// ============ Collection Operators ============\n\nfunction evaluateLen(arg: ExprNode, ctx: EvaluationContext): number | null {\n const val = evaluateNode(arg, ctx);\n\n if (Array.isArray(val)) {\n return val.length;\n }\n\n if (typeof val === \"string\") {\n return val.length;\n }\n\n if (val !== null && typeof val === \"object\") {\n return Object.keys(val).length;\n }\n\n return null;\n}\n\nfunction evaluateAt(array: ExprNode, index: ExprNode, ctx: EvaluationContext): unknown {\n const base = evaluateNode(array, ctx);\n const key = evaluateNode(index, ctx);\n\n // Array indexing: at(array, numericIndex)\n if (Array.isArray(base) && typeof key === \"number\") {\n if (key < 0 || key >= base.length) {\n return null;\n }\n return base[key];\n }\n\n // Record lookup: at(record, stringKey) — exclude arrays\n if (typeof base === \"object\" && base !== null && !Array.isArray(base) && typeof key === \"string\") {\n return (base as Record<string, unknown>)[key] ?? null;\n }\n\n return null;\n}\n\nfunction evaluateFirst(array: ExprNode, ctx: EvaluationContext): unknown {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr) || arr.length === 0) {\n return null;\n }\n\n return arr[0];\n}\n\nfunction evaluateLast(array: ExprNode, ctx: EvaluationContext): unknown {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr) || arr.length === 0) {\n return null;\n }\n\n return arr[arr.length - 1];\n}\n\nfunction evaluateSlice(\n array: ExprNode,\n start: ExprNode,\n end: ExprNode | undefined,\n ctx: EvaluationContext\n): unknown[] | null {\n const arr = evaluateNode(array, ctx);\n const startIdx = evaluateNode(start, ctx);\n\n if (!Array.isArray(arr) || typeof startIdx !== \"number\") {\n return null;\n }\n\n if (end === undefined) {\n return arr.slice(startIdx);\n }\n\n const endIdx = evaluateNode(end, ctx);\n if (typeof endIdx !== \"number\") {\n return null;\n }\n\n return arr.slice(startIdx, endIdx);\n}\n\nfunction evaluateIncludes(array: ExprNode, item: ExprNode, ctx: EvaluationContext): boolean | null {\n const arr = evaluateNode(array, ctx);\n const val = evaluateNode(item, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n return arr.some((el) => deepEqual(el, val));\n}\n\nfunction evaluateFilter(\n array: ExprNode,\n predicate: ExprNode,\n ctx: EvaluationContext\n): unknown[] | null {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n const result: unknown[] = [];\n for (const item of arr) {\n const itemCtx = { ...ctx, item };\n const keep = evaluateNode(predicate, itemCtx);\n if (keep === true) {\n result.push(item);\n } else if (keep !== false) {\n // Non-boolean predicate → null\n return null;\n }\n }\n\n return result;\n}\n\nfunction evaluateMap(\n array: ExprNode,\n mapper: ExprNode,\n ctx: EvaluationContext\n): unknown[] | null {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n const result: unknown[] = [];\n for (const item of arr) {\n const itemCtx = { ...ctx, item };\n const mapped = evaluateNode(mapper, itemCtx);\n result.push(mapped);\n }\n\n return result;\n}\n\nfunction evaluateFind(\n array: ExprNode,\n predicate: ExprNode,\n ctx: EvaluationContext\n): unknown {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n for (const item of arr) {\n const itemCtx = { ...ctx, item };\n const match = evaluateNode(predicate, itemCtx);\n if (match === true) {\n return item;\n }\n if (match !== false) {\n // Non-boolean predicate → null\n return null;\n }\n }\n\n return null;\n}\n\nfunction evaluateEvery(\n array: ExprNode,\n predicate: ExprNode,\n ctx: EvaluationContext\n): boolean | null {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n for (const item of arr) {\n const itemCtx = { ...ctx, item };\n const result = evaluateNode(predicate, itemCtx);\n if (result === false) {\n return false;\n }\n if (result !== true) {\n // Non-boolean predicate → null\n return null;\n }\n }\n\n return true;\n}\n\nfunction evaluateSome(\n array: ExprNode,\n predicate: ExprNode,\n ctx: EvaluationContext\n): boolean | null {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n for (const item of arr) {\n const itemCtx = { ...ctx, item };\n const result = evaluateNode(predicate, itemCtx);\n if (result === true) {\n return true;\n }\n if (result !== false) {\n // Non-boolean predicate → null\n return null;\n }\n }\n\n return false;\n}\n\nfunction evaluateAppend(\n array: ExprNode,\n items: ExprNode[],\n ctx: EvaluationContext\n): unknown[] | null {\n const arr = evaluateNode(array, ctx);\n\n if (!Array.isArray(arr)) {\n return null;\n }\n\n const itemValues = items.map((item) => evaluateNode(item, ctx));\n return [...arr, ...itemValues];\n}\n\n// ============ Object Operators ============\n\nfunction evaluateObject(\n fields: Record<string, ExprNode>,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(fields)) {\n result[key] = evaluateNode(value, ctx);\n }\n return result;\n}\n\nfunction evaluateFieldAccess(\n objectExpr: ExprNode,\n property: string,\n ctx: EvaluationContext\n): unknown {\n const obj = evaluateNode(objectExpr, ctx);\n\n if (obj === null || typeof obj !== \"object\" || Array.isArray(obj)) {\n return null;\n }\n\n return (obj as Record<string, unknown>)[property] ?? null;\n}\n\nfunction evaluateKeys(obj: ExprNode, ctx: EvaluationContext): string[] | null {\n const o = evaluateNode(obj, ctx);\n\n if (o === null || typeof o !== \"object\" || Array.isArray(o)) {\n return null;\n }\n\n return Object.keys(o);\n}\n\nfunction evaluateValues(obj: ExprNode, ctx: EvaluationContext): unknown[] | null {\n const o = evaluateNode(obj, ctx);\n\n if (o === null || typeof o !== \"object\" || Array.isArray(o)) {\n return null;\n }\n\n return Object.values(o);\n}\n\nfunction evaluateEntries(obj: ExprNode, ctx: EvaluationContext): [string, unknown][] | null {\n const o = evaluateNode(obj, ctx);\n\n if (o === null || typeof o !== \"object\" || Array.isArray(o)) {\n return null;\n }\n\n return Object.entries(o);\n}\n\nfunction evaluateMerge(\n objects: ExprNode[],\n ctx: EvaluationContext\n): Record<string, unknown> | null {\n const result: Record<string, unknown> = {};\n\n for (const objExpr of objects) {\n const o = evaluateNode(objExpr, ctx);\n\n if (o === null || typeof o !== \"object\" || Array.isArray(o)) {\n return null;\n }\n\n Object.assign(result, o);\n }\n\n return result;\n}\n\n// ============ Type Operators ============\n\nfunction evaluateTypeof(arg: ExprNode, ctx: EvaluationContext): string {\n const val = evaluateNode(arg, ctx);\n\n if (val === null) return \"null\";\n if (Array.isArray(val)) return \"array\";\n return typeof val;\n}\n\nfunction evaluateIsNull(arg: ExprNode, ctx: EvaluationContext): boolean {\n const val = evaluateNode(arg, ctx);\n return val === null;\n}\n\nfunction evaluateCoalesce(args: ExprNode[], ctx: EvaluationContext): unknown {\n for (const arg of args) {\n const val = evaluateNode(arg, ctx);\n if (val !== null && val !== undefined) {\n return val;\n }\n }\n return null;\n}\n","/**\n * Patch Evaluation\n *\n * Evaluates ConditionalPatchOp[] to produce concrete schema operations.\n *\n * @see SPEC v0.4.0 §18.5, §18.6\n */\n\nimport type { ExprNode as CoreExprNode } from \"@manifesto-ai/core\";\nimport type { ConditionalPatchOp, LoweredPatchOp } from \"../lowering/lower-patch.js\";\nimport type { EvaluationContext, EvaluationSnapshot } from \"./context.js\";\nimport { applyPatchToWorkingSnapshot } from \"./context.js\";\nimport { evaluateExpr } from \"./evaluate-expr.js\";\n\n// ============ Evaluated Patch Types ============\n\n/**\n * Evaluated schema patch operation.\n *\n * All conditions have been evaluated and values resolved where appropriate.\n * Expressions in addComputed, addConstraint, addActionAvailable are preserved\n * for runtime evaluation by Core.\n */\nexport type EvaluatedPatchOp = LoweredPatchOp;\n\n/**\n * Result of evaluating a conditional patch.\n */\nexport interface EvaluatedPatch {\n /**\n * Fragment identifier (for tracing).\n */\n fragmentId: string;\n\n /**\n * The evaluated operation.\n */\n op: EvaluatedPatchOp;\n\n /**\n * Confidence (preserved from fragment).\n */\n confidence: number;\n\n /**\n * Whether condition was evaluated (true) or there was no condition.\n */\n conditionEvaluated: boolean;\n}\n\n/**\n * Result of patch evaluation.\n */\nexport interface PatchEvaluationResult {\n /**\n * Patches that passed their conditions.\n */\n patches: EvaluatedPatch[];\n\n /**\n * Patches that were skipped due to false/null conditions.\n */\n skipped: Array<{\n fragmentId: string;\n reason: \"false\" | \"null\" | \"non-boolean\";\n }>;\n\n /**\n * Final working snapshot after all evaluations.\n */\n finalSnapshot: EvaluationSnapshot;\n}\n\n// ============ Main Evaluation Function ============\n\n/**\n * Evaluate conditional patch operations.\n *\n * Implements sequential evaluation semantics: later patches see effects\n * of earlier patches via working snapshot.\n *\n * Conditions are boolean-only: true applies, false/null/non-boolean skips.\n *\n * @param ops - Conditional patch operations from lowering phase\n * @param ctx - Initial evaluation context\n * @returns Evaluation result with applied and skipped patches\n *\n * @see SPEC v0.4.0 §18.5, FDR-MEL-070, FDR-MEL-073\n */\nexport function evaluateConditionalPatchOps(\n ops: ConditionalPatchOp[],\n ctx: EvaluationContext\n): PatchEvaluationResult {\n const patches: EvaluatedPatch[] = [];\n const skipped: PatchEvaluationResult[\"skipped\"] = [];\n let workingSnapshot = ctx.snapshot;\n\n for (const op of ops) {\n // Create context with current working snapshot\n const evalCtx: EvaluationContext = {\n ...ctx,\n snapshot: workingSnapshot,\n };\n\n // Evaluate condition if present\n if (op.condition !== undefined) {\n const conditionResult = evaluateExpr(op.condition, evalCtx);\n\n if (conditionResult !== true) {\n // Skip this patch\n const reason =\n conditionResult === false\n ? \"false\"\n : conditionResult === null\n ? \"null\"\n : \"non-boolean\";\n\n skipped.push({ fragmentId: op.fragmentId, reason });\n continue;\n }\n }\n\n // Evaluate the operation and add to result\n const evaluated: EvaluatedPatch = {\n fragmentId: op.fragmentId,\n op: op.op,\n confidence: op.confidence,\n conditionEvaluated: op.condition !== undefined,\n };\n\n patches.push(evaluated);\n\n // Update working snapshot for sequential semantics\n workingSnapshot = updateWorkingSnapshot(workingSnapshot, op.op, evalCtx);\n }\n\n return {\n patches,\n skipped,\n finalSnapshot: workingSnapshot,\n };\n}\n\n/**\n * Simple evaluation: returns patches that pass conditions.\n *\n * Does not track skipped patches or maintain sequential semantics.\n * Use this for stateless condition evaluation.\n *\n * @param ops - Conditional patch operations\n * @param ctx - Evaluation context\n * @returns Patches that passed their conditions\n */\nexport function evaluatePatches(\n ops: ConditionalPatchOp[],\n ctx: EvaluationContext\n): EvaluatedPatch[] {\n return ops\n .filter((op) => {\n if (op.condition === undefined) {\n return true;\n }\n return evaluateExpr(op.condition, ctx) === true;\n })\n .map((op) => ({\n fragmentId: op.fragmentId,\n op: op.op,\n confidence: op.confidence,\n conditionEvaluated: op.condition !== undefined,\n }));\n}\n\n// ============ Working Snapshot Update ============\n\n/**\n * Update working snapshot based on patch operation.\n *\n * For schema operations, most don't affect the snapshot directly.\n * Only setDefaultValue affects the data model.\n *\n * @see FDR-MEL-070\n */\nfunction updateWorkingSnapshot(\n snapshot: EvaluationSnapshot,\n op: LoweredPatchOp,\n _ctx: EvaluationContext\n): EvaluationSnapshot {\n // Most schema operations don't affect the working snapshot\n // They modify the schema, not the runtime state\n\n switch (op.kind) {\n case \"setDefaultValue\":\n // Apply default value to working snapshot data\n // This enables sequential evaluation where later ops can see the default\n return applyPatchToWorkingSnapshot(snapshot, op.path, op.value);\n\n case \"addType\":\n case \"addField\":\n case \"setFieldType\":\n case \"addConstraint\":\n case \"addComputed\":\n case \"addActionAvailable\":\n // These don't affect runtime data, only schema structure\n return snapshot;\n }\n}\n\n// ============ Expression Evaluation in Patch Values ============\n\n/**\n * Evaluate expressions in a patch operation to concrete values.\n *\n * Use this when you need fully concrete values (no expressions).\n *\n * Note: addComputed.expr, addConstraint.rule, and addActionAvailable.expr\n * are meant to remain as expressions for runtime evaluation by Core.\n *\n * @param op - Lowered patch operation\n * @param ctx - Evaluation context\n * @returns Patch operation with evaluated expressions\n */\nexport function evaluatePatchExpressions(\n op: LoweredPatchOp,\n ctx: EvaluationContext\n): LoweredPatchOp {\n switch (op.kind) {\n case \"addType\":\n case \"addField\":\n case \"setFieldType\":\n case \"setDefaultValue\":\n // These don't have runtime expressions to evaluate\n return op;\n\n case \"addConstraint\":\n // rule is evaluated at runtime, but we can evaluate for preview\n return {\n ...op,\n // Keep rule as expression - it's evaluated at runtime by Core\n };\n\n case \"addComputed\":\n // expr is evaluated at runtime, but we can evaluate for preview\n return {\n ...op,\n // Keep expr as expression - it's evaluated at runtime by Core\n };\n\n case \"addActionAvailable\":\n // expr is evaluated at runtime\n return {\n ...op,\n // Keep expr as expression - it's evaluated at runtime by Core\n };\n }\n}\n\n// ============ Condition Utilities ============\n\n/**\n * Check if a condition evaluates to true.\n *\n * Boolean-only: only true returns true.\n * false, null, and non-boolean values return false.\n *\n * @param condition - Condition expression (or undefined for always-true)\n * @param ctx - Evaluation context\n * @returns True if condition passes\n *\n * @see FDR-MEL-073\n */\nexport function evaluateCondition(\n condition: CoreExprNode | undefined,\n ctx: EvaluationContext\n): boolean {\n if (condition === undefined) {\n return true;\n }\n\n const result = evaluateExpr(condition, ctx);\n return result === true;\n}\n\n/**\n * Classify a condition evaluation result.\n *\n * @param condition - Condition expression\n * @param ctx - Evaluation context\n * @returns Classification of condition result\n */\nexport function classifyCondition(\n condition: CoreExprNode | undefined,\n ctx: EvaluationContext\n): { passes: boolean; reason: \"no-condition\" | \"true\" | \"false\" | \"null\" | \"non-boolean\" } {\n if (condition === undefined) {\n return { passes: true, reason: \"no-condition\" };\n }\n\n const result = evaluateExpr(condition, ctx);\n\n if (result === true) {\n return { passes: true, reason: \"true\" };\n }\n\n if (result === false) {\n return { passes: false, reason: \"false\" };\n }\n\n if (result === null) {\n return { passes: false, reason: \"null\" };\n }\n\n return { passes: false, reason: \"non-boolean\" };\n}\n","/**\n * Runtime Patch Evaluation\n *\n * Evaluates RuntimeConditionalPatchOp[] to produce concrete Patch[].\n */\n\nimport type { MergePatch, Patch, PatchPath, PatchSegment, SetPatch, UnsetPatch } from \"@manifesto-ai/core\";\nimport { mergeAtPatchPath, patchPathToDisplayString, setByPatchPath, unsetByPatchPath } from \"@manifesto-ai/core\";\nimport type { IRPatchPath, RuntimeConditionalPatchOp } from \"../lowering/lower-runtime-patch.js\";\nimport type { EvaluationContext, EvaluationSnapshot } from \"./context.js\";\nimport { evaluateExpr } from \"./evaluate-expr.js\";\n\nconst UNSAFE_PROP_SEGMENTS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\ntype GuardScope = {\n markerPath: PatchPath;\n snapshot: EvaluationSnapshot;\n};\n\n// ============ Result Types ============\n\n/**\n * Skip reason for runtime patches.\n */\nexport type RuntimePatchSkipReason = \"false\" | \"null\" | \"non-boolean\" | \"invalid-path\";\n\n/**\n * Skipped patch info.\n */\nexport interface SkippedRuntimePatch {\n /**\n * Index in the original ops array.\n */\n index: number;\n\n /**\n * Target path (display form).\n */\n path: string;\n\n /**\n * Reason why patch was skipped.\n */\n reason: RuntimePatchSkipReason;\n}\n\n/**\n * Result of runtime patch evaluation with trace information.\n */\nexport interface RuntimePatchEvaluationResult {\n /**\n * Concrete patches that passed conditions.\n * Order is preserved from input.\n */\n patches: Patch[];\n\n /**\n * Patches that were skipped due to false/null/non-boolean conditions.\n */\n skipped: SkippedRuntimePatch[];\n\n /**\n * Non-fatal warnings collected during evaluation.\n */\n warnings: string[];\n\n /**\n * Final working snapshot after all evaluations.\n */\n finalSnapshot: EvaluationSnapshot;\n}\n\n// ============ Main Evaluation Functions ============\n\n/**\n * Evaluate runtime conditional patches to concrete Patch[].\n */\nexport function evaluateRuntimePatches(\n ops: RuntimeConditionalPatchOp[],\n ctx: EvaluationContext\n): Patch[] {\n const result = evaluateRuntimePatchesWithTrace(ops, ctx);\n return result.patches;\n}\n\n/**\n * Evaluate runtime patches with trace information.\n */\nexport function evaluateRuntimePatchesWithTrace(\n ops: RuntimeConditionalPatchOp[],\n ctx: EvaluationContext\n): RuntimePatchEvaluationResult {\n const patches: Patch[] = [];\n const skipped: SkippedRuntimePatch[] = [];\n const warnings: string[] = [];\n let workingSnapshot = ctx.snapshot;\n const guardScopeStack: GuardScope[] = [];\n\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n const isScopedSet = op.op === \"set\" && isScopedMarkerPath(op.path);\n const isInScope = guardScopeStack.length > 0;\n const activeSnapshot = isScopedSet || !isInScope\n ? workingSnapshot\n : guardScopeStack[guardScopeStack.length - 1].snapshot;\n\n const evalCtx: EvaluationContext = {\n ...ctx,\n snapshot: activeSnapshot,\n };\n\n if (op.condition !== undefined) {\n const conditionResult = evaluateExpr(op.condition, evalCtx);\n\n if (conditionResult !== true) {\n const reason: RuntimePatchSkipReason =\n conditionResult === false\n ? \"false\"\n : conditionResult === null\n ? \"null\"\n : \"non-boolean\";\n\n skipped.push({\n index: i,\n path: irPathToDisplayString(op.path),\n reason,\n });\n continue;\n }\n }\n\n const resolvedPath = resolveIRPath(op.path, evalCtx);\n if (!resolvedPath.ok) {\n skipped.push({\n index: i,\n path: irPathToDisplayString(op.path),\n reason: \"invalid-path\",\n });\n warnings.push(`Skipped runtime patch at index ${i}: ${resolvedPath.warning}`);\n continue;\n }\n\n const concretePath = resolvedPath.path;\n const concreteValue = op.value\n ? evaluateExpr(op.value, evalCtx)\n : undefined;\n\n const patch = buildConcretePatch(op.op, concretePath, concreteValue);\n if (patch === null) {\n continue;\n }\n\n if (\n op.op === \"unset\"\n && isScopedMarkerPath(op.path)\n && (!isInScope\n || !isPatchPathEqual(\n guardScopeStack[guardScopeStack.length - 1].markerPath,\n concretePath\n ))\n ) {\n continue;\n }\n\n patches.push(patch);\n workingSnapshot = applyConcretePatchToWorkingSnapshot(workingSnapshot, patch);\n\n if (op.op === \"set\" && isScopedMarkerPath(op.path)) {\n guardScopeStack.push({\n markerPath: concretePath,\n snapshot: workingSnapshot,\n });\n continue;\n }\n\n if (\n op.op === \"unset\"\n && isScopedMarkerPath(op.path)\n && guardScopeStack.length > 0\n && isPatchPathEqual(\n guardScopeStack[guardScopeStack.length - 1].markerPath,\n concretePath\n )\n ) {\n guardScopeStack.pop();\n }\n }\n\n return {\n patches,\n skipped,\n warnings,\n finalSnapshot: workingSnapshot,\n };\n}\n\n// ============ Helper Functions ============\n\nfunction buildConcretePatch(\n op: \"set\" | \"unset\" | \"merge\",\n path: PatchPath,\n value: unknown\n): Patch | null {\n switch (op) {\n case \"set\":\n return { op: \"set\", path, value } as SetPatch;\n\n case \"unset\":\n return { op: \"unset\", path } as UnsetPatch;\n\n case \"merge\":\n if (isRecord(value)) {\n return { op: \"merge\", path, value } as MergePatch;\n }\n return { op: \"set\", path, value: null } as SetPatch;\n }\n}\n\nfunction applyConcretePatchToWorkingSnapshot(\n snapshot: EvaluationSnapshot,\n patch: Patch\n): EvaluationSnapshot {\n const baseData = snapshot.data;\n\n const nextData = (() => {\n switch (patch.op) {\n case \"set\":\n return setByPatchPath(baseData, patch.path, patch.value);\n case \"unset\":\n return unsetByPatchPath(baseData, patch.path);\n case \"merge\":\n return mergeAtPatchPath(baseData, patch.path, patch.value);\n }\n })();\n\n return {\n data: nextData,\n computed: snapshot.computed,\n };\n}\n\nfunction resolveIRPath(\n path: IRPatchPath,\n ctx: EvaluationContext\n): { ok: true; path: PatchPath } | { ok: false; warning: string } {\n if (path.length === 0) {\n return { ok: false, warning: \"path is empty\" };\n }\n\n const resolved: PatchSegment[] = [];\n\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n\n if (segment.kind === \"prop\") {\n if (!isValidPropSegment(segment.name)) {\n return { ok: false, warning: `invalid prop segment '${segment.name}'` };\n }\n resolved.push({ kind: \"prop\", name: segment.name });\n continue;\n }\n\n const value = evaluateExpr(segment.expr, ctx);\n const concrete = toConcreteSegment(value);\n if (concrete === null) {\n return {\n ok: false,\n warning: `expr segment at index ${i} resolved to invalid value`,\n };\n }\n resolved.push(concrete);\n }\n\n return { ok: true, path: resolved as PatchPath };\n}\n\nfunction toConcreteSegment(value: unknown): PatchSegment | null {\n if (\n typeof value === \"number\"\n && Number.isInteger(value)\n && Number.isFinite(value)\n && value >= 0\n ) {\n return { kind: \"index\", index: value };\n }\n\n if (typeof value === \"string\" && value.length > 0 && isValidPropSegment(value)) {\n return { kind: \"prop\", name: value };\n }\n\n return null;\n}\n\nfunction isValidPropSegment(name: string): boolean {\n return name.length > 0 && !UNSAFE_PROP_SEGMENTS.has(name);\n}\n\nfunction isScopedMarkerPath(path: IRPatchPath): boolean {\n return hasPropPrefix(path, [\"$mel\", \"__whenGuards\"])\n || hasPropPrefix(path, [\"$mel\", \"__onceScopeGuards\"]);\n}\n\nfunction hasPropPrefix(path: IRPatchPath, prefix: string[]): boolean {\n if (path.length < prefix.length) {\n return false;\n }\n\n for (let i = 0; i < prefix.length; i++) {\n const segment = path[i];\n if (segment.kind !== \"prop\" || segment.name !== prefix[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isPatchPathEqual(a: PatchPath, b: PatchPath): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n const left = a[i];\n const right = b[i];\n if (left.kind !== right.kind) {\n return false;\n }\n if (left.kind === \"prop\" && right.kind === \"prop\" && left.name !== right.name) {\n return false;\n }\n if (left.kind === \"index\" && right.kind === \"index\" && left.index !== right.index) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction irPathToDisplayString(path: IRPatchPath): string {\n const concretePrefix: PatchSegment[] = [];\n\n for (const segment of path) {\n if (segment.kind === \"prop\") {\n concretePrefix.push({ kind: \"prop\", name: segment.name });\n continue;\n }\n\n if (concretePrefix.length === 0) {\n return \"[expr]\";\n }\n return `${patchPathToDisplayString(concretePrefix as PatchPath)}.[expr]`;\n }\n\n if (concretePrefix.length === 0) {\n return \"\";\n }\n\n return patchPathToDisplayString(concretePrefix as PatchPath);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n","/**\n * @manifesto-ai/compiler\n *\n * MEL (Manifesto Expression Language) compiler.\n * Provides lexer, parser, analyzer, lowering, evaluation, and rendering.\n */\n\n// ════════════════════════════════════════════════════════════════════════════\n// Lexer (MEL source → tokens)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./lexer/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Parser (tokens → AST)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./parser/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Analyzer (AST validation and scope analysis)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./analyzer/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Diagnostics\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./diagnostics/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Generator (AST → IR)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./generator/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// MEL Renderer (PatchFragment → MEL text)\n// Re-export with namespace to avoid ExprNode conflict with parser\n// ════════════════════════════════════════════════════════════════════════════\n\nexport {\n renderTypeExpr,\n renderTypeField,\n renderValue,\n renderExprNode,\n renderPatchOp,\n extractTypeName,\n renderFragment,\n renderFragments,\n renderFragmentsByKind,\n renderAsDomain,\n type TypeExpr,\n type TypeField,\n type ExprNode as RendererExprNode,\n type PatchOp,\n type AddTypeOp,\n type AddFieldOp,\n type SetFieldTypeOp,\n type SetDefaultValueOp,\n type AddConstraintOp,\n type AddComputedOp,\n type AddActionAvailableOp,\n type RenderOptions,\n type PatchFragment,\n type FragmentRenderOptions,\n} from \"./renderer/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Lowering (MEL IR → Core IR)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./lowering/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Evaluation (Core IR → Concrete Values)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./evaluation/index.js\";\n\n// ════════════════════════════════════════════════════════════════════════════\n// Compile API (MEL Text Ingest)\n// ════════════════════════════════════════════════════════════════════════════\n\nexport * from \"./api/index.js\";\n\n// Compatibility type used in docs for `.mel` module declarations\nexport type { DomainSchema as DomainModule } from \"./generator/ir.js\";\n\n// ===========================================================================\n// Legacy compatibility API\n// ===========================================================================\n\nimport type { ParseResult } from \"./parser/index.js\";\nimport { analyzeScope, validateSemantics } from \"./analyzer/index.js\";\nimport { generate, type GenerateResult } from \"./generator/ir.js\";\nimport { lowerSystemValues, type DomainSchema } from \"./generator/index.js\";\nimport type { CompileTrace } from \"./api/index.js\";\nimport { tokenize } from \"./lexer/index.js\";\nimport { parse } from \"./parser/index.js\";\nimport { hasErrors } from \"./diagnostics/types.js\";\nimport type { Diagnostic } from \"./diagnostics/types.js\";\n\nexport interface CompileOptions {\n /** Whether to lower system values during compilation */\n lowerSystemValues?: boolean;\n /** Skip scope/semantic validation */\n skipSemanticAnalysis?: boolean;\n /** Backward-compatible passthrough for legacy callers */\n mode?: \"domain\";\n}\n\nexport interface CompileResult {\n schema: DomainSchema | null;\n trace: CompileTrace[];\n warnings: Diagnostic[];\n errors: Diagnostic[];\n success: boolean;\n}\n\n/**\n * Backward-compatible compile API.\n *\n * Current public API is `compileMelDomain`, but several test/code paths and CLI\n * still call this legacy helper.\n *\n * This wrapper keeps the legacy contract:\n * - returns `{ success }`\n * - supports optional `lowerSystemValues` and `skipSemanticAnalysis`\n * - includes parse/analyze/generate diagnostics in one result\n */\nexport function compile(source: string, options: CompileOptions = {}): CompileResult {\n const trace: CompileTrace[] = [];\n\n const lexStart = performance.now();\n const lexResult = tokenize(source);\n trace.push({ phase: \"lex\", durationMs: performance.now() - lexStart, details: { tokenCount: lexResult.tokens.length } });\n\n if (hasErrors(lexResult.diagnostics)) {\n return {\n schema: null,\n trace,\n warnings: lexResult.diagnostics.filter(d => d.severity === \"warning\"),\n errors: lexResult.diagnostics.filter(d => d.severity === \"error\"),\n success: false,\n };\n }\n\n const parseStart = performance.now();\n const parseResult: ParseResult = parse(lexResult.tokens);\n const parseErrors = parseResult.diagnostics;\n trace.push({ phase: \"parse\", durationMs: performance.now() - parseStart });\n\n if (hasErrors(parseErrors)) {\n return {\n schema: null,\n trace,\n warnings: parseErrors.filter(d => d.severity === \"warning\"),\n errors: parseErrors.filter(d => d.severity === \"error\"),\n success: false,\n };\n }\n\n const diagnostics: Diagnostic[] = [];\n\n if (!options.skipSemanticAnalysis && parseResult.program) {\n const scopeResult = analyzeScope(parseResult.program);\n const validateResult = validateSemantics(parseResult.program);\n diagnostics.push(...scopeResult.diagnostics, ...validateResult.diagnostics);\n }\n\n const generateStart = performance.now();\n const genResult: GenerateResult = generate(parseResult.program!);\n diagnostics.push(...genResult.diagnostics);\n trace.push({ phase: \"generate\", durationMs: performance.now() - generateStart });\n\n if (options.skipSemanticAnalysis) {\n diagnostics.push(...parseResult.diagnostics);\n }\n\n const errors = diagnostics.filter(d => d.severity === \"error\");\n if (genResult.schema === null || errors.length > 0) {\n return {\n schema: null,\n trace,\n warnings: diagnostics.filter(d => d.severity === \"warning\"),\n errors,\n success: false,\n };\n }\n\n let schema: DomainSchema = genResult.schema;\n if (options.lowerSystemValues) {\n const lowerStart = performance.now();\n schema = lowerSystemValues(schema);\n trace.push({ phase: \"lower\", durationMs: performance.now() - lowerStart });\n }\n\n const warnings = diagnostics.filter(d => d.severity === \"warning\");\n\n return {\n schema,\n trace,\n warnings,\n errors: diagnostics.filter(d => d.severity === \"error\"),\n success: errors.length === 0,\n };\n}\n\n/**\n * Backward-compatible token+parse helper.\n */\nexport function parseSource(source: string): ParseResult {\n const lexResult = tokenize(source);\n if (hasErrors(lexResult.diagnostics)) {\n return { program: null, diagnostics: lexResult.diagnostics };\n }\n\n return parse(lexResult.tokens);\n}\n\n/**\n * Backward-compatible check helper.\n */\nexport function check(source: string): Diagnostic[] {\n const result = compile(source);\n return result.errors;\n}\n"],"mappings":"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","names":["escapeString","parsePath","parsePath"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ResolveHook, LoadHook } from 'node:module';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Node ESM Loader Hooks for MEL files.
|
|
5
|
+
*
|
|
6
|
+
* Usage: node --loader @manifesto-ai/compiler/node-loader app.ts
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Node loader resolve hook.
|
|
11
|
+
*/
|
|
12
|
+
declare const resolve: ResolveHook;
|
|
13
|
+
/**
|
|
14
|
+
* Node loader load hook.
|
|
15
|
+
*/
|
|
16
|
+
declare const load: LoadHook;
|
|
17
|
+
|
|
18
|
+
export { load, resolve };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
compileMelToModuleCode
|
|
3
|
+
} from "./chunk-QXLPDCLA.js";
|
|
4
|
+
import "./chunk-QP2LGMBA.js";
|
|
5
|
+
|
|
6
|
+
// src/node-loader.ts
|
|
7
|
+
import { readFile } from "fs/promises";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
function stripSearchAndHash(value) {
|
|
10
|
+
const [withoutSearch] = value.split("?", 1);
|
|
11
|
+
const [withoutHash] = withoutSearch.split("#", 1);
|
|
12
|
+
return withoutHash;
|
|
13
|
+
}
|
|
14
|
+
function isMelReference(value) {
|
|
15
|
+
return stripSearchAndHash(value).endsWith(".mel");
|
|
16
|
+
}
|
|
17
|
+
function toSourceId(urlOrPath) {
|
|
18
|
+
try {
|
|
19
|
+
return fileURLToPath(urlOrPath);
|
|
20
|
+
} catch {
|
|
21
|
+
return urlOrPath;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
var resolve = async (specifier, context, nextResolve) => {
|
|
25
|
+
if (!isMelReference(specifier)) {
|
|
26
|
+
return nextResolve(specifier, context);
|
|
27
|
+
}
|
|
28
|
+
const resolved = await nextResolve(specifier, context);
|
|
29
|
+
return { ...resolved, shortCircuit: true };
|
|
30
|
+
};
|
|
31
|
+
var load = async (url, context, nextLoad) => {
|
|
32
|
+
if (!isMelReference(url)) {
|
|
33
|
+
return nextLoad(url, context);
|
|
34
|
+
}
|
|
35
|
+
const melSource = await readFile(new URL(url), "utf8");
|
|
36
|
+
const source = compileMelToModuleCode(melSource, toSourceId(url));
|
|
37
|
+
return {
|
|
38
|
+
format: "module",
|
|
39
|
+
source,
|
|
40
|
+
shortCircuit: true
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export {
|
|
44
|
+
load,
|
|
45
|
+
resolve
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=node-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/node-loader.ts"],"sourcesContent":["/**\n * Node ESM Loader Hooks for MEL files.\n *\n * Usage: node --loader @manifesto-ai/compiler/node-loader app.ts\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type { LoadHook, ResolveHook } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport { compileMelToModuleCode } from \"./mel-module.js\";\n\nfunction stripSearchAndHash(value: string): string {\n const [withoutSearch] = value.split(\"?\", 1);\n const [withoutHash] = withoutSearch.split(\"#\", 1);\n return withoutHash;\n}\n\nfunction isMelReference(value: string): boolean {\n return stripSearchAndHash(value).endsWith(\".mel\");\n}\n\nfunction toSourceId(urlOrPath: string): string {\n try {\n return fileURLToPath(urlOrPath);\n } catch {\n return urlOrPath;\n }\n}\n\n/**\n * Node loader resolve hook.\n */\nexport const resolve: ResolveHook = async (specifier, context, nextResolve) => {\n if (!isMelReference(specifier)) {\n return nextResolve(specifier, context);\n }\n\n const resolved = await nextResolve(specifier, context);\n return { ...resolved, shortCircuit: true };\n};\n\n/**\n * Node loader load hook.\n */\nexport const load: LoadHook = async (url, context, nextLoad) => {\n if (!isMelReference(url)) {\n return nextLoad(url, context);\n }\n\n const melSource = await readFile(new URL(url), \"utf8\");\n const source = compileMelToModuleCode(melSource, toSourceId(url));\n\n return {\n format: \"module\",\n source,\n shortCircuit: true,\n };\n};\n"],"mappings":";;;;;;AAMA,SAAS,gBAAgB;AAEzB,SAAS,qBAAqB;AAG9B,SAAS,mBAAmB,OAAuB;AACjD,QAAM,CAAC,aAAa,IAAI,MAAM,MAAM,KAAK,CAAC;AAC1C,QAAM,CAAC,WAAW,IAAI,cAAc,MAAM,KAAK,CAAC;AAChD,SAAO;AACT;AAEA,SAAS,eAAe,OAAwB;AAC9C,SAAO,mBAAmB,KAAK,EAAE,SAAS,MAAM;AAClD;AAEA,SAAS,WAAW,WAA2B;AAC7C,MAAI;AACF,WAAO,cAAc,SAAS;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,IAAM,UAAuB,OAAO,WAAW,SAAS,gBAAgB;AAC7E,MAAI,CAAC,eAAe,SAAS,GAAG;AAC9B,WAAO,YAAY,WAAW,OAAO;AAAA,EACvC;AAEA,QAAM,WAAW,MAAM,YAAY,WAAW,OAAO;AACrD,SAAO,EAAE,GAAG,UAAU,cAAc,KAAK;AAC3C;AAKO,IAAM,OAAiB,OAAO,KAAK,SAAS,aAAa;AAC9D,MAAI,CAAC,eAAe,GAAG,GAAG;AACxB,WAAO,SAAS,KAAK,OAAO;AAAA,EAC9B;AAEA,QAAM,YAAY,MAAM,SAAS,IAAI,IAAI,GAAG,GAAG,MAAM;AACrD,QAAM,SAAS,uBAAuB,WAAW,WAAW,GAAG,CAAC;AAEhE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,cAAc;AAAA,EAChB;AACF;","names":[]}
|
package/dist/rollup.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as rollup from 'rollup';
|
|
2
|
+
import { M as MelPluginOptions } from './unplugin-6wnvFiEo.js';
|
|
3
|
+
export { a as MelCodegenOptions } from './unplugin-6wnvFiEo.js';
|
|
4
|
+
import '@manifesto-ai/codegen';
|
|
5
|
+
|
|
6
|
+
declare const melPlugin: (options: MelPluginOptions) => rollup.Plugin<any> | rollup.Plugin<any>[];
|
|
7
|
+
|
|
8
|
+
export { MelPluginOptions, melPlugin as default, melPlugin };
|
package/dist/rollup.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
unpluginMel
|
|
3
|
+
} from "./chunk-DJY6BFGK.js";
|
|
4
|
+
import "./chunk-QXLPDCLA.js";
|
|
5
|
+
import "./chunk-QP2LGMBA.js";
|
|
6
|
+
|
|
7
|
+
// src/rollup.ts
|
|
8
|
+
var melPlugin = unpluginMel.rollup;
|
|
9
|
+
var rollup_default = melPlugin;
|
|
10
|
+
export {
|
|
11
|
+
rollup_default as default,
|
|
12
|
+
melPlugin
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=rollup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["/**\n * Rollup plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type { MelPluginOptions, MelCodegenOptions } from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rollup;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAOO,IAAM,YAAY,YAAY;AACrC,IAAO,iBAAQ;","names":[]}
|
package/dist/rspack.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { M as MelPluginOptions } from './unplugin-6wnvFiEo.js';
|
|
2
|
+
export { a as MelCodegenOptions } from './unplugin-6wnvFiEo.js';
|
|
3
|
+
import '@manifesto-ai/codegen';
|
|
4
|
+
|
|
5
|
+
declare const melPlugin: (options: MelPluginOptions) => RspackPluginInstance;
|
|
6
|
+
|
|
7
|
+
export { MelPluginOptions, melPlugin as default, melPlugin };
|
package/dist/rspack.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
unpluginMel
|
|
3
|
+
} from "./chunk-DJY6BFGK.js";
|
|
4
|
+
import "./chunk-QXLPDCLA.js";
|
|
5
|
+
import "./chunk-QP2LGMBA.js";
|
|
6
|
+
|
|
7
|
+
// src/rspack.ts
|
|
8
|
+
var melPlugin = unpluginMel.rspack;
|
|
9
|
+
var rspack_default = melPlugin;
|
|
10
|
+
export {
|
|
11
|
+
rspack_default as default,
|
|
12
|
+
melPlugin
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=rspack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["/**\n * Rspack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type { MelPluginOptions, MelCodegenOptions } from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rspack;\nexport default melPlugin;\n"],"mappings":";;;;;;;AAOO,IAAM,YAAY,YAAY;AACrC,IAAO,iBAAQ;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as _manifesto_ai_codegen from '@manifesto-ai/codegen';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unified MEL plugin via unplugin.
|
|
5
|
+
*
|
|
6
|
+
* Single implementation that targets Vite, Webpack, Rollup, esbuild, and Rspack.
|
|
7
|
+
*/
|
|
8
|
+
type MelCodegenOptions = {
|
|
9
|
+
readonly outDir: string;
|
|
10
|
+
readonly plugins?: readonly _manifesto_ai_codegen.CodegenPlugin[];
|
|
11
|
+
};
|
|
12
|
+
type MelPluginOptions = {
|
|
13
|
+
readonly include?: RegExp;
|
|
14
|
+
readonly codegen?: MelCodegenOptions | false;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type { MelPluginOptions as M, MelCodegenOptions as a };
|
package/dist/vite.d.ts
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
readonly include?: RegExp;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Compile `.mel` files into ESM modules that export compiled DomainSchema.
|
|
14
|
-
*/
|
|
15
|
-
export declare function melPlugin(options?: MelPluginOptions): Plugin;
|
|
16
|
-
export default melPlugin;
|
|
17
|
-
//# sourceMappingURL=vite.d.ts.map
|
|
1
|
+
import * as vite from 'vite';
|
|
2
|
+
import { M as MelPluginOptions } from './unplugin-6wnvFiEo.js';
|
|
3
|
+
export { a as MelCodegenOptions } from './unplugin-6wnvFiEo.js';
|
|
4
|
+
import '@manifesto-ai/codegen';
|
|
5
|
+
|
|
6
|
+
declare const melPlugin: (options: MelPluginOptions) => vite.Plugin<any> | vite.Plugin<any>[];
|
|
7
|
+
|
|
8
|
+
export { MelPluginOptions, melPlugin as default, melPlugin };
|