@manifesto-ai/compiler 3.3.0 → 3.4.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mel-module.ts"],"sourcesContent":["/**\n * MEL Module Helpers\n *\n * Utilities for turning MEL source into JavaScript module code.\n */\n\nimport type { Diagnostic } from \"./diagnostics/types.js\";\nimport { compileMelDomain } from \"./api/index.js\";\n\nexport function formatDiagnostic(diagnostic: Diagnostic): string {\n const location = diagnostic.location;\n\n if (!location) {\n return `[${diagnostic.code}] ${diagnostic.message}`;\n }\n\n const { line, column } = location.start;\n return `[${diagnostic.code}] ${diagnostic.message} (${line}:${column})`;\n}\n\n/**\n * Compile MEL source and emit ESM source that exports the compiled schema.\n *\n * @param melSource - MEL domain source text\n * @param sourceId - Human-readable source identifier for diagnostics\n */\nexport function compileMelToModuleCode(melSource: string, sourceId: string): string {\n const result = compileMelDomain(melSource, { mode: \"domain\" });\n\n if (result.errors.length > 0) {\n const details = result.errors.map(formatDiagnostic).join(\"\\n\");\n throw new Error(`MEL compilation failed for ${sourceId}\\n${details}`);\n }\n\n if (!result.schema) {\n throw new Error(`MEL compilation produced no schema for ${sourceId}`);\n }\n\n const serializedSchema = JSON.stringify(result.schema, null, 2);\n return `export default ${serializedSchema};\\n`;\n}\n\n"],"mappings":"wCASO,SAASA,EAAiBC,EAAgC,CAC/D,IAAMC,EAAWD,EAAW,SAE5B,GAAI,CAACC,EACH,MAAO,IAAID,EAAW,IAAI,KAAKA,EAAW,OAAO,GAGnD,GAAM,CAAE,KAAAE,EAAM,OAAAC,CAAO,EAAIF,EAAS,MAClC,MAAO,IAAID,EAAW,IAAI,KAAKA,EAAW,OAAO,KAAKE,CAAI,IAAIC,CAAM,GACtE,CAQO,SAASC,EAAuBC,EAAmBC,EAA0B,CAClF,IAAMC,EAASC,EAAiBH,EAAW,CAAE,KAAM,QAAS,CAAC,EAE7D,GAAIE,EAAO,OAAO,OAAS,EAAG,CAC5B,IAAME,EAAUF,EAAO,OAAO,IAAIR,CAAgB,EAAE,KAAK;AAAA,CAAI,EAC7D,MAAM,IAAI,MAAM,8BAA8BO,CAAQ;AAAA,EAAKG,CAAO,EAAE,CACtE,CAEA,GAAI,CAACF,EAAO,OACV,MAAM,IAAI,MAAM,0CAA0CD,CAAQ,EAAE,EAItE,MAAO,kBADkB,KAAK,UAAUC,EAAO,OAAQ,KAAM,CAAC,CACrB;AAAA,CAC3C","names":["formatDiagnostic","diagnostic","location","line","column","compileMelToModuleCode","melSource","sourceId","result","compileMelDomain","details"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/unplugin.ts"],"sourcesContent":["/**\n * Unified MEL plugin via unplugin.\n *\n * Single implementation that targets Vite, Webpack, Rollup, esbuild, and Rspack.\n */\n\nimport { createHash } from \"node:crypto\";\nimport * as nodePath from \"node:path\";\nimport { createUnplugin } from \"unplugin\";\nimport type { DomainSchema } from \"@manifesto-ai/core\";\nimport { compileMelDomain } from \"./api/index.js\";\nimport { formatDiagnostic } from \"./mel-module.js\";\n\nexport type MelCodegenArtifact = {\n readonly schema: DomainSchema;\n readonly sourceId: string;\n};\n\nexport type MelCodegenEmitter = (\n artifact: MelCodegenArtifact\n) => unknown | Promise<unknown>;\n\nexport type MelCodegenTiming = \"transform\" | \"build\" | \"both\";\n\nexport type MelCodegenOptions = {\n readonly emit: MelCodegenEmitter;\n readonly timing?: MelCodegenTiming;\n};\n\nexport type MelPluginOptions = {\n readonly include?: RegExp;\n readonly codegen?: MelCodegenEmitter | MelCodegenOptions | false;\n};\n\nconst VALID_CODEGEN_TIMINGS = new Set<MelCodegenTiming>([\"transform\", \"build\", \"both\"]);\n\nfunction normalizeId(id: string): string {\n return id.split(\"?\", 1)[0];\n}\n\nfunction testRegex(regex: RegExp, value: string): boolean {\n regex.lastIndex = 0;\n return regex.test(value);\n}\n\nfunction normalizeArtifactSourceId(sourceId: string): string {\n const normalized = normalizeId(sourceId).replace(/\\\\/g, \"/\");\n if (!normalized) {\n return \"domain.mel\";\n }\n\n if (!nodePath.isAbsolute(sourceId)) {\n return normalized.replace(/^\\.\\//, \"\");\n }\n\n const relative = nodePath.relative(process.cwd(), sourceId);\n if (!relative || relative.startsWith(\"..\") || nodePath.isAbsolute(relative)) {\n return createExternalArtifactSourceId(normalized);\n }\n\n return relative.split(nodePath.sep).join(\"/\");\n}\n\nfunction createExternalArtifactSourceId(sourceId: string): string {\n const basename = nodePath.posix.basename(sourceId) || \"domain.mel\";\n const extension = nodePath.posix.extname(basename);\n const stem = basename.slice(0, basename.length - extension.length) || \"domain\";\n const hash = createHash(\"sha256\").update(sourceId).digest(\"hex\").slice(0, 12);\n const safeStem = sanitizePathSegment(stem);\n return `external/${safeStem}--${hash}${extension}`;\n}\n\nfunction sanitizePathSegment(value: string): string {\n const normalized = value.replace(/[^a-zA-Z0-9._-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n return normalized || \"domain\";\n}\n\nfunction resolveCodegenOptions(\n codegen: MelPluginOptions[\"codegen\"]\n): MelCodegenOptions | null {\n if (!codegen) {\n return null;\n }\n\n if (typeof codegen === \"function\") {\n return { emit: codegen, timing: \"transform\" };\n }\n\n if (typeof codegen === \"object\" && typeof codegen.emit === \"function\") {\n const timing = codegen.timing ?? \"transform\";\n if (!VALID_CODEGEN_TIMINGS.has(timing)) {\n throw new TypeError(\n `manifesto:mel codegen timing must be one of \"transform\", \"build\", or \"both\" (received ${JSON.stringify(timing)})`\n );\n }\n\n return {\n emit: codegen.emit,\n timing,\n };\n }\n\n throw new TypeError(\n \"manifesto:mel codegen must be a function or an object with a callable emit field\"\n );\n}\n\nexport const unpluginMel = createUnplugin((options: MelPluginOptions = {}) => {\n const include = options.include ?? /\\.mel$/;\n const compiledSchemas = new Map<string, DomainSchema>();\n const codegen = resolveCodegenOptions(options.codegen);\n\n return {\n name: \"manifesto:mel\",\n enforce: \"pre\" as const,\n\n transformInclude(id: string) {\n return testRegex(include, normalizeId(id));\n },\n\n async transform(source: string, id: string) {\n const sourceId = normalizeId(id);\n const result = compileMelDomain(source, { mode: \"domain\" });\n\n if (result.errors.length > 0) {\n const details = result.errors.map(formatDiagnostic).join(\"\\n\");\n throw new Error(`MEL compilation failed for ${sourceId}\\n${details}`);\n }\n\n if (!result.schema) {\n throw new Error(`MEL compilation produced no schema for ${sourceId}`);\n }\n\n const artifactSourceId = normalizeArtifactSourceId(sourceId);\n\n if (codegen) {\n if (codegen.timing === \"transform\" || codegen.timing === \"both\") {\n await codegen.emit({ schema: result.schema, sourceId: artifactSourceId });\n }\n\n if (codegen.timing === \"build\" || codegen.timing === \"both\") {\n compiledSchemas.set(artifactSourceId, result.schema);\n }\n }\n\n const serializedSchema = JSON.stringify(result.schema, null, 2);\n return `export default ${serializedSchema};\\n`;\n },\n\n async buildEnd() {\n if (!codegen || compiledSchemas.size === 0) {\n return;\n }\n\n for (const [sourceId, schema] of compiledSchemas) {\n await codegen.emit({ schema, sourceId });\n }\n },\n };\n});\n"],"mappings":"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","names":["createHash","nodePath","createUnplugin","VALID_CODEGEN_TIMINGS","normalizeId","id","testRegex","regex","value","normalizeArtifactSourceId","sourceId","normalized","relative","createExternalArtifactSourceId","basename","extension","stem","hash","createHash","sanitizePathSegment","resolveCodegenOptions","codegen","timing","unpluginMel","createUnplugin","options","include","compiledSchemas","source","result","compileMelDomain","details","formatDiagnostic","artifactSourceId","schema"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/esbuild.ts"],"sourcesContent":["/**\n * esbuild plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.esbuild;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,QAC9BC,EAAQF","names":["melPlugin","unpluginMel","esbuild_default"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagnostics/codes.ts","../src/diagnostics/format.ts","../src/generator/normalizer.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/evaluation/context.ts","../src/evaluation/evaluate-expr.ts","../src/evaluation/evaluate-patch.ts","../src/evaluation/evaluate-runtime-patch.ts","../src/schema-graph.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, once, or onceIntent)\",\n category: \"semantic\",\n },\n E007: {\n code: \"E007\",\n message: \"stop must be inside a guard (when, once, or onceIntent)\",\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 E013: {\n code: \"E013\",\n message: \"Circular include detected\",\n category: \"semantic\",\n },\n E014: {\n code: \"E014\",\n message: \"Include expansion depth exceeds limit\",\n category: \"semantic\",\n },\n E015: {\n code: \"E015\",\n message: \"Include target is not a declared flow\",\n category: \"semantic\",\n },\n E016: {\n code: \"E016\",\n message: \"Include not allowed in InnerStmt position\",\n category: \"semantic\",\n },\n E017: {\n code: \"E017\",\n message: \"once() not allowed in flow\",\n category: \"semantic\",\n },\n E018: {\n code: \"E018\",\n message: \"onceIntent not allowed in flow\",\n category: \"semantic\",\n },\n E019: {\n code: \"E019\",\n message: \"patch not allowed in flow\",\n category: \"semantic\",\n },\n E020: {\n code: \"E020\",\n message: \"effect not allowed in flow\",\n category: \"semantic\",\n },\n E021: {\n code: \"E021\",\n message: \"Flow parameter name conflicts with top-level identifier\",\n category: \"semantic\",\n },\n E022: {\n code: \"E022\",\n message: \"Flow and action share the same name\",\n category: \"semantic\",\n },\n E023: {\n code: \"E023\",\n message: \"Wrong number of arguments for included flow\",\n category: \"semantic\",\n },\n E024: {\n code: \"E024\",\n message: \"Include argument type mismatch\",\n category: \"type\",\n },\n E030: {\n code: \"E030\",\n message: \"Collection element type does not have an 'id' field\",\n category: \"type\",\n },\n E030a: {\n code: \"E030a\",\n message: \"Collection element 'id' field is not a primitive type\",\n category: \"type\",\n },\n E030b: {\n code: \"E030b\",\n message: \"Duplicate '.id' values detected in state initializer\",\n category: \"type\",\n },\n E031: {\n code: \"E031\",\n message: \"updateById/removeById not allowed in this context\",\n category: \"semantic\",\n },\n E032: {\n code: \"E032\",\n message: \"Nested transform primitive\",\n category: \"semantic\",\n },\n E033: {\n code: \"E033\",\n message: \"Transform primitive collection argument is not a state path\",\n category: \"semantic\",\n },\n E034: {\n code: \"E034\",\n message: \"Transform primitive in guard condition\",\n category: \"semantic\",\n },\n E035: {\n code: \"E035\",\n message: \"Transform primitive in available condition\",\n category: \"semantic\",\n },\n E040: {\n code: \"E040\",\n message: \"Circular computed dependency\",\n category: \"semantic\",\n },\n E041: {\n code: \"E041\",\n message: \"Computed references undeclared identifier\",\n category: \"semantic\",\n },\n E042: {\n code: \"E042\",\n message: \"State initializer references non-constant value\",\n category: \"semantic\",\n },\n E043: {\n code: \"E043\",\n message: \"Non-trivial union type cannot be lowered to FieldSpec\",\n category: \"type\",\n },\n E044: {\n code: \"E044\",\n message: \"Recursive named type cannot be lowered to FieldSpec\",\n category: \"type\",\n },\n E045: {\n code: \"E045\",\n message: \"Nullable type cannot be lowered to FieldSpec\",\n category: \"type\",\n },\n E046: {\n code: \"E046\",\n message: \"Record type cannot be lowered to FieldSpec\",\n category: \"type\",\n },\n E047: {\n code: \"E047\",\n message: \"dispatchable expression must be pure (state/computed/action parameters only)\",\n category: \"semantic\",\n },\n E048: {\n code: \"E048\",\n message: \"Transform primitive in dispatchable condition\",\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 * Expression Normalizer\n * Converts MEL operators and function calls to Core ExprNode format\n * Based on MEL SPEC v0.3.1 Section 4 and FDR-MEL-038\n */\n\nimport type { CoreExprNode } from \"./ir.js\";\nimport type { BinaryOperator } from \"../parser/ast.js\";\n\n/**\n * Normalize a binary operator to Core ExprNode\n */\nexport function normalizeExpr(\n op: BinaryOperator,\n left: CoreExprNode,\n right: CoreExprNode\n): CoreExprNode {\n switch (op) {\n // Arithmetic\n case \"+\": return { kind: \"add\", left, right };\n case \"-\": return { kind: \"sub\", left, right };\n case \"*\": return { kind: \"mul\", left, right };\n case \"/\": return { kind: \"div\", left, right };\n case \"%\": return { kind: \"mod\", left, right };\n\n // Comparison\n case \"==\": return { kind: \"eq\", left, right };\n case \"!=\": return { kind: \"neq\", left, right };\n case \"<\": return { kind: \"lt\", left, right };\n case \"<=\": return { kind: \"lte\", left, right };\n case \">\": return { kind: \"gt\", left, right };\n case \">=\": return { kind: \"gte\", left, right };\n\n // Logical\n case \"&&\": return { kind: \"and\", args: [left, right] };\n case \"||\": return { kind: \"or\", args: [left, right] };\n\n // Nullish coalescing\n case \"??\": return { kind: \"coalesce\", args: [left, right] };\n }\n}\n\n/**\n * Function name to Core ExprNode mapping\n */\nexport function normalizeFunctionCall(\n name: string,\n args: CoreExprNode[]\n): CoreExprNode {\n switch (name) {\n // ============ Arithmetic ============\n case \"add\":\n return { kind: \"add\", left: args[0], right: args[1] };\n case \"sub\":\n return { kind: \"sub\", left: args[0], right: args[1] };\n case \"mul\":\n return { kind: \"mul\", left: args[0], right: args[1] };\n case \"div\":\n return { kind: \"div\", left: args[0], right: args[1] };\n case \"mod\":\n return { kind: \"mod\", left: args[0], right: args[1] };\n case \"neg\":\n return { kind: \"neg\", arg: args[0] };\n case \"abs\":\n return { kind: \"abs\", arg: args[0] };\n case \"min\":\n // v0.3.2: single arg = array aggregation, multiple args = value comparison\n if (args.length === 1) {\n return { kind: \"minArray\", array: args[0] };\n }\n return { kind: \"min\", args };\n case \"max\":\n // v0.3.2: single arg = array aggregation, multiple args = value comparison\n if (args.length === 1) {\n return { kind: \"maxArray\", array: args[0] };\n }\n return { kind: \"max\", args };\n // v0.3.2: sum array aggregation\n case \"sum\":\n return { kind: \"sumArray\", array: args[0] };\n case \"floor\":\n return { kind: \"floor\", arg: args[0] };\n case \"ceil\":\n return { kind: \"ceil\", arg: args[0] };\n case \"round\":\n return { kind: \"round\", arg: args[0] };\n case \"sqrt\":\n return { kind: \"sqrt\", arg: args[0] };\n case \"pow\":\n return { kind: \"pow\", base: args[0], exponent: args[1] };\n\n // ============ Comparison ============\n case \"eq\":\n return { kind: \"eq\", left: args[0], right: args[1] };\n case \"neq\":\n return { kind: \"neq\", left: args[0], right: args[1] };\n case \"gt\":\n return { kind: \"gt\", left: args[0], right: args[1] };\n case \"gte\":\n return { kind: \"gte\", left: args[0], right: args[1] };\n case \"lt\":\n return { kind: \"lt\", left: args[0], right: args[1] };\n case \"lte\":\n return { kind: \"lte\", left: args[0], right: args[1] };\n\n // ============ Logical ============\n case \"and\":\n return { kind: \"and\", args };\n case \"or\":\n return { kind: \"or\", args };\n case \"not\":\n return { kind: \"not\", arg: args[0] };\n\n // ============ Type Checking ============\n case \"isNull\":\n return { kind: \"isNull\", arg: args[0] };\n case \"isNotNull\":\n // isNotNull(x) -> not(isNull(x))\n return { kind: \"not\", arg: { kind: \"isNull\", arg: args[0] } };\n case \"typeof\":\n return { kind: \"typeof\", arg: args[0] };\n case \"coalesce\":\n return { kind: \"coalesce\", args };\n\n // ============ String ============\n case \"concat\":\n return { kind: \"concat\", args };\n case \"trim\":\n return { kind: \"trim\", str: args[0] };\n case \"lower\":\n case \"toLowerCase\":\n return { kind: \"toLowerCase\", str: args[0] };\n case \"upper\":\n case \"toUpperCase\":\n return { kind: \"toUpperCase\", str: args[0] };\n case \"strlen\":\n case \"strLen\":\n return { kind: \"strLen\", str: args[0] };\n case \"substr\":\n case \"substring\":\n return args[2]\n ? { kind: \"substring\", str: args[0], start: args[1], end: args[2] }\n : { kind: \"substring\", str: args[0], start: args[1] };\n case \"toString\":\n return { kind: \"toString\", arg: args[0] };\n\n // ============ Collection ============\n case \"len\":\n case \"length\":\n return { kind: \"len\", arg: args[0] };\n case \"at\":\n return { kind: \"at\", array: args[0], index: args[1] };\n case \"first\":\n return { kind: \"first\", array: args[0] };\n case \"last\":\n return { kind: \"last\", array: args[0] };\n case \"slice\":\n return args[2]\n ? { kind: \"slice\", array: args[0], start: args[1], end: args[2] }\n : { kind: \"slice\", array: args[0], start: args[1] };\n case \"includes\":\n return { kind: \"includes\", array: args[0], item: args[1] };\n case \"filter\":\n return { kind: \"filter\", array: args[0], predicate: args[1] };\n case \"map\":\n return { kind: \"map\", array: args[0], mapper: args[1] };\n case \"find\":\n return { kind: \"find\", array: args[0], predicate: args[1] };\n case \"every\":\n return { kind: \"every\", array: args[0], predicate: args[1] };\n case \"some\":\n return { kind: \"some\", array: args[0], predicate: args[1] };\n case \"append\":\n return { kind: \"append\", array: args[0], items: args.slice(1) };\n\n // ============ Object ============\n case \"keys\":\n return { kind: \"keys\", obj: args[0] };\n case \"values\":\n return { kind: \"values\", obj: args[0] };\n case \"entries\":\n return { kind: \"entries\", obj: args[0] };\n case \"merge\":\n return { kind: \"merge\", objects: args };\n\n // ============ Conditional ============\n case \"if\":\n case \"cond\":\n return { kind: \"if\", cond: args[0], then: args[1], else: args[2] };\n\n // ============ Unknown Function ============\n default:\n // For unknown functions, create a generic call representation\n // This will be caught during semantic analysis\n return {\n kind: \"object\",\n fields: {\n __call: { kind: \"lit\", value: name },\n __args: { kind: \"lit\", value: args },\n },\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 normalizedKey: string;\n valuePath: string; // e.g., \"$mel.sys.addTask.uuid.value\"\n intentPath: string; // e.g., \"$mel.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 ensureSystemSlotFields(result.state.fields, actionName, slot);\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 ensureObjectField(fields: Record<string, FieldSpec>, name: string): FieldSpec {\n const existing = fields[name];\n if (existing && existing.type === \"object\") {\n existing.required = false;\n existing.default ??= {};\n existing.fields ??= {};\n return existing;\n }\n\n const created: FieldSpec = {\n type: \"object\",\n required: false,\n default: {},\n fields: {},\n };\n fields[name] = created;\n return created;\n}\n\nfunction ensureSystemSlotFields(\n rootFields: Record<string, FieldSpec>,\n actionName: string,\n slot: SystemSlot\n): void {\n const melField = ensureObjectField(rootFields, \"$mel\");\n const sysField = ensureObjectField(melField.fields ?? (melField.fields = {}), \"sys\");\n const actionField = ensureObjectField(sysField.fields ?? (sysField.fields = {}), actionName);\n const keyField = ensureObjectField(actionField.fields ?? (actionField.fields = {}), slot.normalizedKey);\n const keyFields = keyField.fields ?? (keyField.fields = {});\n\n keyFields.intent = {\n type: \"string\",\n required: false,\n default: null,\n };\n keyFields.value = {\n type: systemValueType(slot.key),\n required: false,\n default: null,\n };\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 normalizedKey,\n valuePath: `$mel.sys.${ctx.actionName}.${normalizedKey}.value`,\n intentPath: `$mel.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($mel.sys.action.key.intent) {\n // patch $mel.sys.action.key.intent = $meta.intentId\n // effect system.get({ key: \"uuid\", into: $mel.sys.action.key.value })\n // }\n const acquisitionFlow: CoreFlowNode = {\n kind: \"if\",\n cond: {\n kind: \"neq\",\n left: { kind: \"get\", path: slot.intentPath },\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.intentPath),\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.valuePath },\n },\n },\n ],\n },\n };\n acquisitionSteps.push(acquisitionFlow);\n }\n\n // Generate readiness condition\n // eq($mel.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.intentPath },\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: CoreFlowNode) => 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.valuePath };\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","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\";\nimport { compareUnicodeCodePoints } from \"../utils/unicode-order.js\";\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 case \"neg\":\n return evaluateNeg(expr.arg, 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\nfunction evaluateNeg(arg: ExprNode, ctx: EvaluationContext): number | null {\n const value = evaluateNode(arg, ctx);\n return typeof value === \"number\" ? -value : null;\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 of Object.keys(fields).sort(compareUnicodeCodePoints)) {\n const value = fields[key];\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).sort(compareUnicodeCodePoints);\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.keys(o)\n .sort(compareUnicodeCodePoints)\n .map((key) => (o as Record<string, unknown>)[key]);\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.keys(o)\n .sort(compareUnicodeCodePoints)\n .map((key) => [key, (o as Record<string, unknown>)[key]]);\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","import type { PatchPath } from \"@manifesto-ai/core\";\nimport type {\n CoreExprNode,\n CoreFlowNode,\n DomainSchema,\n} from \"./generator/ir.js\";\n\nexport type SchemaGraphNodeKind = \"state\" | \"computed\" | \"action\";\n\nexport type SchemaGraphNodeId =\n | `state:${string}`\n | `computed:${string}`\n | `action:${string}`;\n\nexport type SchemaGraphNode = {\n readonly id: SchemaGraphNodeId;\n readonly kind: SchemaGraphNodeKind;\n readonly name: string;\n};\n\nexport type SchemaGraphEdgeRelation = \"feeds\" | \"mutates\" | \"unlocks\";\n\nexport type SchemaGraphEdge = {\n readonly from: SchemaGraphNodeId;\n readonly to: SchemaGraphNodeId;\n readonly relation: SchemaGraphEdgeRelation;\n};\n\nexport type SchemaGraph = {\n readonly nodes: readonly SchemaGraphNode[];\n readonly edges: readonly SchemaGraphEdge[];\n};\n\nconst COLLECTION_CONTEXT_ROOTS = new Set([\"$item\", \"$index\", \"$array\"]);\n\nexport function extractSchemaGraph(schema: DomainSchema): SchemaGraph {\n const stateNames = Object.keys(schema.state.fields)\n .filter((name) => !name.startsWith(\"$\"));\n const visibleComputedNames = getVisibleComputedNames(schema);\n const visibleComputedNameSet = new Set(visibleComputedNames);\n const stateNameSet = new Set(stateNames);\n const actionNames = Object.keys(schema.actions);\n\n const nodes: SchemaGraphNode[] = [\n ...stateNames.map((name) => ({\n id: stateNodeId(name),\n kind: \"state\" as const,\n name,\n })),\n ...visibleComputedNames.map((name) => ({\n id: computedNodeId(name),\n kind: \"computed\" as const,\n name,\n })),\n ...actionNames.map((name) => ({\n id: actionNodeId(name),\n kind: \"action\" as const,\n name,\n })),\n ];\n\n const dedupe = new Set<string>();\n const edges: SchemaGraphEdge[] = [];\n\n const pushEdge = (\n from: SchemaGraphNodeId | null,\n to: SchemaGraphNodeId | null,\n relation: SchemaGraphEdgeRelation,\n ): void => {\n if (!from || !to) {\n return;\n }\n\n const key = `${from}|${relation}|${to}`;\n if (dedupe.has(key)) {\n return;\n }\n\n dedupe.add(key);\n edges.push({ from, to, relation });\n };\n\n for (const name of visibleComputedNames) {\n const field = schema.computed.fields[name];\n if (!field) {\n continue;\n }\n\n for (const dep of field.deps) {\n pushEdge(\n resolveSourceNodeId(dep, schema, visibleComputedNameSet, stateNameSet),\n computedNodeId(name),\n \"feeds\",\n );\n }\n }\n\n for (const actionName of actionNames) {\n const action = schema.actions[actionName];\n const actionId = actionNodeId(actionName);\n\n for (const root of collectMutationRootsFromFlow(action.flow, schema)) {\n if (stateNameSet.has(root)) {\n pushEdge(actionId, stateNodeId(root), \"mutates\");\n }\n }\n\n if (!action.available) {\n continue;\n }\n\n for (const dep of collectExprGetPaths(action.available)) {\n pushEdge(\n resolveSourceNodeId(dep, schema, visibleComputedNameSet, stateNameSet),\n actionId,\n \"unlocks\",\n );\n }\n }\n\n return freezeGraph({ nodes, edges });\n}\n\nfunction getVisibleComputedNames(schema: DomainSchema): string[] {\n const computedFields = schema.computed.fields;\n const memo = new Map<string, boolean>();\n\n const isVisibleComputed = (name: string, visiting: Set<string>): boolean => {\n const cached = memo.get(name);\n if (cached !== undefined) {\n return cached;\n }\n\n if (visiting.has(name)) {\n return false;\n }\n\n visiting.add(name);\n\n const field = computedFields[name];\n if (!field) {\n visiting.delete(name);\n memo.set(name, true);\n return true;\n }\n\n for (const path of collectExprGetPaths(field.expr)) {\n if (isPlatformDependency(path)) {\n visiting.delete(name);\n memo.set(name, false);\n return false;\n }\n\n const computedDependency = resolveComputedDependency(path, computedFields);\n if (\n computedDependency !== null\n && !isVisibleComputed(computedDependency, visiting)\n ) {\n visiting.delete(name);\n memo.set(name, false);\n return false;\n }\n }\n\n visiting.delete(name);\n memo.set(name, true);\n return true;\n };\n\n return Object.keys(computedFields)\n .filter((name) => isVisibleComputed(name, new Set()));\n}\n\nfunction collectMutationRootsFromFlow(\n flow: CoreFlowNode,\n schema: DomainSchema,\n): string[] {\n const roots = new Set<string>();\n\n const visit = (\n node: CoreFlowNode | undefined,\n callStack: ReadonlySet<string>,\n ): void => {\n if (!node) {\n return;\n }\n\n switch (node.kind) {\n case \"seq\":\n node.steps.forEach((step) => visit(step, callStack));\n return;\n case \"if\":\n visit(node.then, callStack);\n visit(node.else, callStack);\n return;\n case \"patch\": {\n const root = rootFromPatchPath(node.path);\n if (root) {\n roots.add(root);\n }\n return;\n }\n case \"effect\": {\n const root = rootFromEffectInto(node.params.into);\n if (root) {\n roots.add(root);\n }\n return;\n }\n case \"call\": {\n if (callStack.has(node.flow)) {\n return;\n }\n\n const action = schema.actions[node.flow];\n if (!action) {\n return;\n }\n\n const nextCallStack = new Set(callStack);\n nextCallStack.add(node.flow);\n visit(action.flow, nextCallStack);\n return;\n }\n case \"halt\":\n case \"fail\":\n return;\n }\n };\n\n visit(flow, new Set());\n return [...roots];\n}\n\nfunction rootFromPatchPath(path: PatchPath): string | null {\n const [head] = path;\n if (!head || head.kind !== \"prop\" || head.name.startsWith(\"$\")) {\n return null;\n }\n\n return head.name;\n}\n\nfunction rootFromEffectInto(value: unknown): string | null {\n if (\n typeof value !== \"object\"\n || value === null\n || (value as { kind?: unknown }).kind !== \"lit\"\n || typeof (value as { value?: unknown }).value !== \"string\"\n ) {\n return null;\n }\n\n return rootFromSemanticPath((value as { value: string }).value);\n}\n\nfunction resolveSourceNodeId(\n dep: string,\n schema: DomainSchema,\n visibleComputedNames: ReadonlySet<string>,\n stateNames: ReadonlySet<string>,\n): SchemaGraphNodeId | null {\n const computedDependency = resolveComputedDependency(dep, schema.computed.fields);\n if (\n computedDependency !== null\n && visibleComputedNames.has(computedDependency)\n ) {\n return computedNodeId(computedDependency);\n }\n\n if (isPlatformDependency(dep)) {\n return null;\n }\n\n const root = rootFromSemanticPath(dep);\n if (!root || !stateNames.has(root)) {\n return null;\n }\n\n return stateNodeId(root);\n}\n\nfunction resolveComputedDependency(\n dep: string,\n computedFields: DomainSchema[\"computed\"][\"fields\"],\n): string | null {\n if (Object.prototype.hasOwnProperty.call(computedFields, dep)) {\n return dep;\n }\n\n if (!dep.startsWith(\"computed.\")) {\n return null;\n }\n\n const candidate = dep.slice(\"computed.\".length);\n return Object.prototype.hasOwnProperty.call(computedFields, candidate)\n ? candidate\n : null;\n}\n\nfunction rootFromSemanticPath(path: string): string | null {\n const normalized = normalizeSemanticPath(path);\n const withoutDataRoot = normalized.startsWith(\"data.\")\n ? normalized.slice(\"data.\".length)\n : normalized;\n const match = /^([^.[\\]]+)/.exec(withoutDataRoot);\n if (!match) {\n return null;\n }\n\n const [root] = match.slice(1);\n if (!root || root.startsWith(\"$\")) {\n return null;\n }\n\n return root;\n}\n\nfunction normalizeSemanticPath(path: string): string {\n if (path.startsWith(\"/\")) {\n return path.slice(1).replace(/\\//g, \".\");\n }\n\n return path;\n}\n\nfunction isPlatformDependency(dep: string): boolean {\n const normalized = normalizeSemanticPath(dep);\n const withoutDataRoot = normalized.startsWith(\"data.\")\n ? normalized.slice(\"data.\".length)\n : normalized;\n const match = /^([^.[\\]]+)/.exec(withoutDataRoot);\n const root = match?.[1] ?? \"\";\n if (!root.startsWith(\"$\")) {\n return false;\n }\n\n return !COLLECTION_CONTEXT_ROOTS.has(root);\n}\n\nfunction collectExprGetPaths(expr: CoreExprNode | unknown): string[] {\n const paths: string[] = [];\n const seen = new WeakSet<object>();\n\n const visit = (node: unknown): void => {\n if (node === null || node === undefined) {\n return;\n }\n\n if (Array.isArray(node)) {\n node.forEach(visit);\n return;\n }\n\n if (typeof node !== \"object\") {\n return;\n }\n\n const objectNode = node as Record<string, unknown>;\n if (seen.has(objectNode)) {\n return;\n }\n seen.add(objectNode);\n\n if (objectNode.kind === \"lit\") {\n return;\n }\n\n if (objectNode.kind === \"get\" && typeof objectNode.path === \"string\") {\n paths.push(objectNode.path);\n return;\n }\n\n for (const value of Object.values(objectNode)) {\n visit(value);\n }\n };\n\n visit(expr);\n return paths;\n}\n\nfunction stateNodeId(name: string): SchemaGraphNodeId {\n return `state:${name}`;\n}\n\nfunction computedNodeId(name: string): SchemaGraphNodeId {\n return `computed:${name}`;\n}\n\nfunction actionNodeId(name: string): SchemaGraphNodeId {\n return `action:${name}`;\n}\n\nfunction freezeGraph(graph: SchemaGraph): SchemaGraph {\n return Object.freeze({\n nodes: Object.freeze(graph.nodes.map((node) => Object.freeze(node))),\n edges: Object.freeze(\n [...graph.edges]\n .sort(compareSchemaGraphEdges)\n .map((edge) => Object.freeze(edge)),\n ),\n });\n}\n\nfunction compareSchemaGraphEdges(\n left: SchemaGraphEdge,\n right: SchemaGraphEdge,\n): number {\n return (\n left.from.localeCompare(right.from)\n || left.to.localeCompare(right.to)\n || left.relation.localeCompare(right.relation)\n );\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\";\nexport * from \"./schema-graph.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 { validateAndExpandFlows } from \"./analyzer/flow-composition.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 const analyzeStart = performance.now();\n const flowResult = validateAndExpandFlows(parseResult.program!);\n diagnostics.push(...flowResult.diagnostics);\n\n if (!options.skipSemanticAnalysis) {\n const scopeResult = analyzeScope(flowResult.program);\n const validateResult = validateSemantics(flowResult.program);\n diagnostics.push(...scopeResult.diagnostics, ...validateResult.diagnostics);\n }\n trace.push({ phase: \"analyze\", durationMs: performance.now() - analyzeStart });\n\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n return {\n schema: null,\n trace,\n warnings: diagnostics.filter((diagnostic) => diagnostic.severity === \"warning\"),\n errors: diagnostics.filter((diagnostic) => diagnostic.severity === \"error\"),\n success: false,\n };\n }\n\n const generateStart = performance.now();\n const genResult: GenerateResult = generate(flowResult.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":["DIAGNOSTIC_CODES","getDiagnosticInfo","code","formatDiagnosticCode","info","formatDiagnostic","diagnostic","source","code","message","location","line","column","header","lineContent","lineNumStr","sourceLine","underlineLen","underline","formatDiagnostics","diagnostics","d","normalizeExpr","op","left","right","normalizeFunctionCall","name","args","hashSchemaSync","semanticPathToPatchPath","lowerSystemValues","schema","result","lowered","actionName","action","ctx","createContext","collectSystemRefs","slot","ensureSystemSlotFields","lowerFlow","_hash","schemaWithoutHash","nextHash","systemValueType","key","normalizeSystemKeyForSlot","ensureObjectField","fields","name","existing","created","rootFields","melField","sysField","actionField","keyField","keyFields","toPatchPath","path","flow","step","collectSystemRefsFromExpr","param","expr","normalizedKey","value","item","acquisitionSteps","acquisitionFlow","readinessConditions","readinessCond","transformedFlow","transformFlow","guardedFlow","s","transformExpr","params","a","i","renderTypeExpr","typeExpr","renderLiteralValue","renderUnion","renderObjectType","value","escapeString","members","fields","field","optional","renderTypeField","defaultValue","typeStr","renderValue","k","v","str","renderExprNode","expr","renderLiteral","renderPath","renderObjectExpr","value","escapeString","k","v","path","fields","key","str","parsePath","DEFAULT_OPTIONS","renderPatchOp","op","options","opts","renderAddType","renderAddField","renderSetFieldType","renderSetDefaultValue","renderAddConstraint","renderAddComputed","renderAddActionAvailable","indent","fields","field","renderTypeField","renderTypeExpr","_opts","typeStr","fieldName","extractFieldName","lines","valueStr","renderValue","exprStr","renderExprNode","messageStr","path","parts","extractTypeName","DEFAULT_FRAGMENT_OPTIONS","renderFragment","fragment","options","opts","lines","confidencePercent","evidence","opStr","renderPatchOp","renderFragments","fragments","renderFragmentsByKind","grouped","kind","result","kindFragments","renderAsDomain","domainName","indent","types","fields","defaults","computed","constraints","actions","rendered","indented","line","parsePath","createEvaluationContext","options","applyPatchToWorkingSnapshot","snapshot","path","value","newData","setValueAtPath","obj","parts","current","part","lastPart","parsePath","evaluateExpr","expr","ctx","evaluateNode","resolvePath","evaluateEq","evaluateNeq","evaluateComparison","a","b","evaluateAnd","evaluateOr","evaluateNot","evaluateIf","evaluateArithmetic","evaluateDiv","evaluateMod","evaluateNeg","evaluateConcat","evaluateSubstring","evaluateTrim","evaluateLen","evaluateAt","evaluateFirst","evaluateLast","evaluateSlice","evaluateIncludes","evaluateFilter","evaluateMap","evaluateFind","evaluateEvery","evaluateSome","evaluateAppend","evaluateObject","evaluateFieldAccess","evaluateKeys","evaluateValues","evaluateEntries","evaluateMerge","evaluateTypeof","evaluateIsNull","evaluateCoalesce","path","parts","parsePath","getValueAtPath","obj","head","rest","next","left","right","l","r","deepEqual","result","compare","item","i","aKeys","bKeys","key","args","arg","cond","thenExpr","elseExpr","condResult","op","value","values","val","str","start","end","s","startIdx","endIdx","array","index","base","arr","el","predicate","itemCtx","keep","mapper","mapped","match","items","itemValues","fields","compareUnicodeCodePoints","objectExpr","property","o","objects","objExpr","evaluateConditionalPatchOps","ops","ctx","patches","skipped","workingSnapshot","op","evalCtx","conditionResult","evaluateExpr","reason","evaluated","updateWorkingSnapshot","evaluatePatches","snapshot","_ctx","applyPatchToWorkingSnapshot","evaluatePatchExpressions","evaluateCondition","condition","classifyCondition","result","mergeAtPatchPath","patchPathToDisplayString","setByPatchPath","unsetByPatchPath","UNSAFE_PROP_SEGMENTS","evaluateRuntimePatches","ops","ctx","evaluateRuntimePatchesWithTrace","patches","skipped","warnings","workingSnapshot","guardScopeStack","i","op","isScopedSet","isScopedMarkerPath","isInScope","activeSnapshot","evalCtx","conditionResult","evaluateExpr","reason","irPathToDisplayString","resolvedPath","resolveIRPath","concretePath","concreteValue","patch","buildConcretePatch","isPatchPathEqual","applyConcretePatchToWorkingSnapshot","path","value","isRecord","snapshot","baseData","setByPatchPath","unsetByPatchPath","mergeAtPatchPath","resolved","segment","isValidPropSegment","concrete","toConcreteSegment","name","hasPropPrefix","prefix","a","b","left","right","concretePrefix","patchPathToDisplayString","COLLECTION_CONTEXT_ROOTS","extractSchemaGraph","schema","stateNames","name","visibleComputedNames","getVisibleComputedNames","visibleComputedNameSet","stateNameSet","actionNames","nodes","stateNodeId","computedNodeId","actionNodeId","dedupe","edges","pushEdge","from","to","relation","key","field","dep","resolveSourceNodeId","actionName","action","actionId","root","collectMutationRootsFromFlow","collectExprGetPaths","freezeGraph","computedFields","memo","isVisibleComputed","visiting","cached","path","isPlatformDependency","computedDependency","resolveComputedDependency","flow","roots","visit","node","callStack","step","rootFromPatchPath","rootFromEffectInto","nextCallStack","head","value","rootFromSemanticPath","candidate","normalized","normalizeSemanticPath","withoutDataRoot","match","expr","paths","seen","objectNode","graph","compareSchemaGraphEdges","edge","left","right","compile","source","options","trace","lexStart","lexResult","tokenize","hasErrors","d","parseStart","parseResult","parse","parseErrors","diagnostics","analyzeStart","flowResult","validateAndExpandFlows","scopeResult","analyzeScope","validateResult","validateSemantics","diagnostic","generateStart","genResult","generate","errors","schema","lowerStart","lowerSystemValues","warnings","parseSource","check"]}
@@ -1 +0,0 @@
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":"oEAMA,OAAS,YAAAA,MAAgB,cAEzB,OAAS,iBAAAC,MAAqB,MAG9B,SAASC,EAAmBC,EAAuB,CACjD,GAAM,CAACC,CAAa,EAAID,EAAM,MAAM,IAAK,CAAC,EACpC,CAACE,CAAW,EAAID,EAAc,MAAM,IAAK,CAAC,EAChD,OAAOC,CACT,CAEA,SAASC,EAAeH,EAAwB,CAC9C,OAAOD,EAAmBC,CAAK,EAAE,SAAS,MAAM,CAClD,CAEA,SAASI,EAAWC,EAA2B,CAC7C,GAAI,CACF,OAAOC,EAAcD,CAAS,CAChC,MAAQ,CACN,OAAOA,CACT,CACF,CAKO,IAAME,EAAuB,MAAOC,EAAWC,EAASC,IACxDP,EAAeK,CAAS,EAKtB,CAAE,GADQ,MAAME,EAAYF,EAAWC,CAAO,EAC/B,aAAc,EAAK,EAJhCC,EAAYF,EAAWC,CAAO,EAU5BE,EAAiB,MAAOC,EAAKH,EAASI,IAAa,CAC9D,GAAI,CAACV,EAAeS,CAAG,EACrB,OAAOC,EAASD,EAAKH,CAAO,EAG9B,IAAMK,EAAY,MAAMC,EAAS,IAAI,IAAIH,CAAG,EAAG,MAAM,EAGrD,MAAO,CACL,OAAQ,SACR,OAJaI,EAAuBF,EAAWV,EAAWQ,CAAG,CAAC,EAK9D,aAAc,EAChB,CACF","names":["readFile","fileURLToPath","stripSearchAndHash","value","withoutSearch","withoutHash","isMelReference","toSourceId","urlOrPath","fileURLToPath","resolve","specifier","context","nextResolve","load","url","nextLoad","melSource","readFile","compileMelToModuleCode"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/rollup.ts"],"sourcesContent":["/**\n * Rollup plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rollup;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,OAC9BC,EAAQF","names":["melPlugin","unpluginMel","rollup_default"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/rspack.ts"],"sourcesContent":["/**\n * Rspack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.rspack;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,OAC9BC,EAAQF","names":["melPlugin","unpluginMel","rspack_default"]}
package/dist/vite.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["/**\n * Vite plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.vite;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,KAC9BC,EAAQF","names":["melPlugin","unpluginMel","vite_default"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/webpack.ts"],"sourcesContent":["/**\n * Webpack plugin for MEL files.\n */\n\nimport { unpluginMel } from \"./unplugin.js\";\n\nexport type {\n MelPluginOptions,\n MelCodegenOptions,\n MelCodegenEmitter,\n MelCodegenArtifact,\n} from \"./unplugin.js\";\nexport const melPlugin = unpluginMel.webpack;\nexport default melPlugin;\n"],"mappings":"gGAYO,IAAMA,EAAYC,EAAY,QAC9BC,EAAQF","names":["melPlugin","unpluginMel","webpack_default"]}