@manifesto-ai/compiler 3.4.0 → 3.5.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.
@@ -65,6 +65,8 @@ export declare class SemanticValidator {
65
65
  private requireArrayCompatible;
66
66
  private requireLenCompatible;
67
67
  private validateCoalesceTypes;
68
+ private validateMatchCall;
69
+ private validateArgSelectionCall;
68
70
  private error;
69
71
  private warn;
70
72
  }
@@ -1,4 +1,4 @@
1
- import{a as d}from"./chunk-JM4I5DPC.js";import{$ as f}from"./chunk-BJMGKJRO.js";import{createHash as u}from"crypto";import*as i from"path";import{createUnplugin as p}from"unplugin";var h=new Set(["transform","build","both"]);function l(e){return e.split("?",1)[0]}function y(e,t){return e.lastIndex=0,e.test(t)}function b(e){let t=l(e).replace(/\\/g,"/");if(!t)return"domain.mel";if(!i.isAbsolute(e))return t.replace(/^\.\//,"");let n=i.relative(process.cwd(),e);return!n||n.startsWith("..")||i.isAbsolute(n)?M(t):n.split(i.sep).join("/")}function M(e){let t=i.posix.basename(e)||"domain.mel",n=i.posix.extname(t),o=t.slice(0,t.length-n.length)||"domain",r=u("sha256").update(e).digest("hex").slice(0,12);return`external/${x(o)}--${r}${n}`}function x(e){return e.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"domain"}function w(e){if(!e)return null;if(typeof e=="function")return{emit:e,timing:"transform"};if(typeof e=="object"&&typeof e.emit=="function"){let t=e.timing??"transform";if(!h.has(t))throw new TypeError(`manifesto:mel codegen timing must be one of "transform", "build", or "both" (received ${JSON.stringify(t)})`);return{emit:e.emit,timing:t}}throw new TypeError("manifesto:mel codegen must be a function or an object with a callable emit field")}var I=p((e={})=>{let t=e.include??/\.mel$/,n=new Map,o=w(e.codegen);return{name:"manifesto:mel",enforce:"pre",transformInclude(r){return y(t,l(r))},async transform(r,s){let m=l(s),a=f(r,{mode:"domain"});if(a.errors.length>0){let g=a.errors.map(d).join(`
1
+ import{a as d}from"./chunk-WE6GIOLD.js";import{$ as f}from"./chunk-XIAVDXPY.js";import{createHash as u}from"crypto";import*as i from"path";import{createUnplugin as p}from"unplugin";var h=new Set(["transform","build","both"]);function l(e){return e.split("?",1)[0]}function y(e,t){return e.lastIndex=0,e.test(t)}function b(e){let t=l(e).replace(/\\/g,"/");if(!t)return"domain.mel";if(!i.isAbsolute(e))return t.replace(/^\.\//,"");let n=i.relative(process.cwd(),e);return!n||n.startsWith("..")||i.isAbsolute(n)?M(t):n.split(i.sep).join("/")}function M(e){let t=i.posix.basename(e)||"domain.mel",n=i.posix.extname(t),o=t.slice(0,t.length-n.length)||"domain",r=u("sha256").update(e).digest("hex").slice(0,12);return`external/${x(o)}--${r}${n}`}function x(e){return e.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"domain"}function w(e){if(!e)return null;if(typeof e=="function")return{emit:e,timing:"transform"};if(typeof e=="object"&&typeof e.emit=="function"){let t=e.timing??"transform";if(!h.has(t))throw new TypeError(`manifesto:mel codegen timing must be one of "transform", "build", or "both" (received ${JSON.stringify(t)})`);return{emit:e.emit,timing:t}}throw new TypeError("manifesto:mel codegen must be a function or an object with a callable emit field")}var I=p((e={})=>{let t=e.include??/\.mel$/,n=new Map,o=w(e.codegen);return{name:"manifesto:mel",enforce:"pre",transformInclude(r){return y(t,l(r))},async transform(r,s){let m=l(s),a=f(r,{mode:"domain"});if(a.errors.length>0){let g=a.errors.map(d).join(`
2
2
  `);throw new Error(`MEL compilation failed for ${m}
3
3
  ${g}`)}if(!a.schema)throw new Error(`MEL compilation produced no schema for ${m}`);let c=b(m);return o&&((o.timing==="transform"||o.timing==="both")&&await o.emit({schema:a.schema,sourceId:c}),(o.timing==="build"||o.timing==="both")&&n.set(c,a.schema)),`export default ${JSON.stringify(a.schema,null,2)};
4
4
  `},async buildEnd(){if(!(!o||n.size===0))for(let[r,s]of n)await o.emit({schema:s,sourceId:r})}}});export{I as a};
@@ -1,4 +1,4 @@
1
- import{$ as n}from"./chunk-BJMGKJRO.js";function s(o){let r=o.location;if(!r)return`[${o.code}] ${o.message}`;let{line:e,column:t}=r.start;return`[${o.code}] ${o.message} (${e}:${t})`}function c(o,r){let e=n(o,{mode:"domain"});if(e.errors.length>0){let i=e.errors.map(s).join(`
1
+ import{$ as n}from"./chunk-XIAVDXPY.js";function s(o){let r=o.location;if(!r)return`[${o.code}] ${o.message}`;let{line:e,column:t}=r.start;return`[${o.code}] ${o.message} (${e}:${t})`}function c(o,r){let e=n(o,{mode:"domain"});if(e.errors.length>0){let i=e.errors.map(s).join(`
2
2
  `);throw new Error(`MEL compilation failed for ${r}
3
3
  ${i}`)}if(!e.schema)throw new Error(`MEL compilation produced no schema for ${r}`);return`export default ${JSON.stringify(e.schema,null,2)};
4
4
  `}export{s as a,c as b};
@@ -0,0 +1,12 @@
1
+ var Ge={domain:"DOMAIN",state:"STATE",computed:"COMPUTED",action:"ACTION",effect:"EFFECT",when:"WHEN",once:"ONCE",patch:"PATCH",unset:"UNSET",merge:"MERGE",true:"TRUE",false:"FALSE",null:"NULL",as:"AS",available:"AVAILABLE",dispatchable:"DISPATCHABLE",fail:"FAIL",stop:"STOP",with:"WITH",type:"TYPE",import:"IMPORT",from:"FROM",export:"EXPORT"},an=new Set(["function","var","let","const","if","else","for","while","do","switch","case","break","continue","return","throw","try","catch","finally","new","delete","instanceof","void","debugger","this","super","arguments","eval","async","await","yield","class","extends","interface","enum","namespace","module"]);function cr(t){return t in Ge}function ft(t){return an.has(t)}function yt(t){return Object.hasOwn(Ge,t)?Ge[t]:void 0}function qe(t,e,n,i){return{kind:t,lexeme:e,location:n,value:i}}function gt(t,e,n){return{line:t,column:e,offset:n}}function Et(t,e,n){return{start:t,end:e,source:n}}function dr(t,e){return{start:t,end:t,source:e}}function h(t,e){return{start:t.start.offset<e.start.offset?t.start:e.start,end:t.end.offset>e.end.offset?t.end:e.end,source:t.source??e.source}}var He=class{source;sourcePath;tokens=[];diagnostics=[];start=0;current=0;line=1;column=1;lineStart=0;constructor(e,n){this.source=e,this.sourcePath=n}tokenize(){for(;!this.isAtEnd();)this.start=this.current,this.scanToken();return this.tokens.push(qe("EOF","",this.currentLocation())),{tokens:this.tokens,diagnostics:this.diagnostics}}scanToken(){let e=this.advance();switch(e){case"(":this.addToken("LPAREN");break;case")":this.addToken("RPAREN");break;case"{":this.addToken("LBRACE");break;case"}":this.addToken("RBRACE");break;case"[":this.addToken("LBRACKET");break;case"]":this.addToken("RBRACKET");break;case",":this.addToken("COMMA");break;case";":this.addToken("SEMICOLON");break;case".":this.addToken("DOT");break;case"+":this.addToken("PLUS");break;case"-":this.addToken("MINUS");break;case"*":this.addToken("STAR");break;case"%":this.addToken("PERCENT");break;case":":this.addToken("COLON");break;case"=":this.addToken(this.match("=")?"EQ_EQ":"EQ");break;case"!":this.addToken(this.match("=")?"BANG_EQ":"BANG");break;case"<":this.addToken(this.match("=")?"LT_EQ":"LT");break;case">":this.addToken(this.match("=")?"GT_EQ":"GT");break;case"&":this.match("&")?this.addToken("AMP_AMP"):this.error("Expected '&&' for logical AND");break;case"|":this.match("|")?this.addToken("PIPE_PIPE"):this.addToken("PIPE");break;case"?":this.addToken(this.match("?")?"QUESTION_QUESTION":"QUESTION");break;case"/":this.match("/")?this.lineComment():this.match("*")?this.blockComment():this.addToken("SLASH");break;case" ":case"\r":case" ":break;case`
2
+ `:this.newline();break;case'"':this.string('"');break;case"'":this.string("'");break;case"$":this.systemIdentifier();break;default:this.isDigit(e)?this.number():this.isAlpha(e)?this.identifier():this.error(`Unexpected character '${e}'`)}}lineComment(){for(;this.peek()!==`
3
+ `&&!this.isAtEnd();)this.advance()}blockComment(){let e=this.line,n=this.column-2;for(;!this.isAtEnd();){if(this.peek()==="*"&&this.peekNext()==="/"){this.advance(),this.advance();return}this.peek()===`
4
+ `&&this.newline(),this.advance()}this.error(`Unterminated block comment starting at line ${e}:${n}`)}string(e){let n=this.line,i=this.column-1,r="";for(;this.peek()!==e&&!this.isAtEnd();){if(this.peek()===`
5
+ `){this.error("Unterminated string literal");return}if(this.peek()==="\\"){this.advance();let o=this.advance();switch(o){case"n":r+=`
6
+ `;break;case"r":r+="\r";break;case"t":r+=" ";break;case"\\":r+="\\";break;case"'":r+="'";break;case'"':r+='"';break;case"0":r+="\0";break;default:this.error(`Invalid escape sequence '\\${o}'`),r+=o}}else r+=this.advance()}if(this.isAtEnd()){this.error(`Unterminated string starting at line ${n}:${i}`);return}this.advance(),this.addToken("STRING",r)}number(){if(this.source[this.start]==="0"&&(this.peek()==="x"||this.peek()==="X")){for(this.advance();this.isHexDigit(this.peek());)this.advance();let n=this.source.slice(this.start+2,this.current),i=parseInt(n,16);this.addToken("NUMBER",i);return}for(;this.isDigit(this.peek());)this.advance();if(this.peek()==="."&&this.isDigit(this.peekNext()))for(this.advance();this.isDigit(this.peek());)this.advance();if(this.peek()==="e"||this.peek()==="E"){if(this.advance(),(this.peek()==="+"||this.peek()==="-")&&this.advance(),!this.isDigit(this.peek())){this.error("Invalid number: expected digits after exponent");return}for(;this.isDigit(this.peek());)this.advance()}let e=parseFloat(this.source.slice(this.start,this.current));this.addToken("NUMBER",e)}identifier(){for(;this.isAlphaNumeric(this.peek());){if(this.peek()==="$"){this.advance(),this.error("'$' is forbidden in identifiers (MEL A17)","E004");continue}this.advance()}let e=this.source.slice(this.start,this.current);if(e.startsWith("__sys__")){this.error("'__sys__' prefix is reserved for compiler-generated identifiers (MEL A26)","E004"),this.addToken("ERROR");return}if(ft(e)){this.error(`'${e}' is a reserved keyword and cannot be used`),this.addToken("ERROR");return}let n=yt(e);n?this.addToken(n):this.addToken("IDENTIFIER")}systemIdentifier(){if(!this.isAlpha(this.peek())){this.error("Expected identifier after '$'"),this.addToken("ERROR");return}for(;this.isAlphaNumeric(this.peek());)this.advance();let e=this.source.slice(this.start,this.current);if(e==="$item"){this.addToken("ITEM");return}if(e==="$system"||e==="$meta"||e==="$input"){for(;this.peek()==="."&&this.isAlpha(this.peekNext());)for(this.advance();this.isAlphaNumeric(this.peek());)this.advance();this.addToken("SYSTEM_IDENT");return}this.error(`Invalid system identifier '${e}'. Expected $system.*, $meta.*, $input.*, or $item`),this.addToken("ERROR")}isAtEnd(){return this.current>=this.source.length}advance(){let e=this.source[this.current];return this.current++,this.column++,e}peek(){return this.isAtEnd()?"\0":this.source[this.current]}peekNext(){return this.current+1>=this.source.length?"\0":this.source[this.current+1]}match(e){return this.isAtEnd()||this.source[this.current]!==e?!1:(this.current++,this.column++,!0)}newline(){this.line++,this.column=1,this.lineStart=this.current}isDigit(e){return e>="0"&&e<="9"}isHexDigit(e){return this.isDigit(e)||e>="a"&&e<="f"||e>="A"&&e<="F"}isAlpha(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_"}isAlphaNumeric(e){return this.isAlpha(e)||this.isDigit(e)}currentLocation(){let e=this.positionAt(this.start),n=this.positionAt(this.current);return Et(e,n,this.sourcePath)}positionAt(e){let n=1,i=0;for(let r=0;r<e;r++)this.source[r]===`
7
+ `&&(n++,i=r+1);return gt(n,e-i+1,e)}addToken(e,n){let i=this.source.slice(this.start,this.current);this.tokens.push(qe(e,i,this.currentLocation(),n))}error(e,n="MEL_LEXER"){let i=this.currentLocation();this.diagnostics.push({severity:"error",code:n,message:e,location:i,source:this.getSourceLine(i.start.line)})}getSourceLine(e){return this.source.split(`
8
+ `)[e-1]??""}};function ye(t,e){return new He(t,e).tokenize()}function kr(t){return["literal","identifier","systemIdent","iterationVar","propertyAccess","indexAccess","functionCall","unary","binary","ternary","objectLiteral","arrayLiteral"].includes(t.kind)}function Tr(t){return["when","once","onceIntent","patch","effect","fail","stop"].includes(t.kind)}var kt=(m=>(m[m.NONE=0]="NONE",m[m.TERNARY=1]="TERNARY",m[m.NULLISH=2]="NULLISH",m[m.OR=3]="OR",m[m.AND=4]="AND",m[m.EQUALITY=5]="EQUALITY",m[m.COMPARISON=6]="COMPARISON",m[m.ADDITIVE=7]="ADDITIVE",m[m.MULTIPLICATIVE=8]="MULTIPLICATIVE",m[m.UNARY=9]="UNARY",m[m.CALL=10]="CALL",m[m.ACCESS=11]="ACCESS",m))(kt||{});function Ve(t){switch(t){case"QUESTION":return 1;case"QUESTION_QUESTION":return 2;case"PIPE_PIPE":return 3;case"AMP_AMP":return 4;case"EQ_EQ":case"BANG_EQ":return 5;case"LT":case"LT_EQ":case"GT":case"GT_EQ":return 6;case"PLUS":case"MINUS":return 7;case"STAR":case"SLASH":case"PERCENT":return 8;default:return 0}}function Tt(t){switch(t){case"PLUS":return"+";case"MINUS":return"-";case"STAR":return"*";case"SLASH":return"/";case"PERCENT":return"%";case"EQ_EQ":return"==";case"BANG_EQ":return"!=";case"LT":return"<";case"LT_EQ":return"<=";case"GT":return">";case"GT_EQ":return">=";case"AMP_AMP":return"&&";case"PIPE_PIPE":return"||";case"QUESTION_QUESTION":return"??";default:return null}}function br(t){return Ve(t)!==0}function Sr(t){return t==="BANG"||t==="MINUS"}function Nt(t){return t==="QUESTION"||t==="QUESTION_QUESTION"}var ze=class{tokens;current=0;diagnostics=[];constructor(e){this.tokens=e}parse(){try{return{program:this.parseProgram(),diagnostics:this.diagnostics}}catch{return{program:null,diagnostics:this.diagnostics}}}parseProgram(){let e=this.peek().location,n=[];for(;this.check("IMPORT");)n.push(this.parseImport());let i=this.parseDomain();return{kind:"program",imports:n,domain:i,location:h(e,i.location)}}parseImport(){let e=this.consume("IMPORT","Expected 'import'").location;this.consume("LBRACE","Expected '{' after 'import'");let n=[];do n.push(this.consume("IDENTIFIER","Expected identifier").lexeme);while(this.match("COMMA"));this.consume("RBRACE","Expected '}' after import names"),this.consume("FROM","Expected 'from' after import names");let i=this.consume("STRING","Expected string after 'from'");return{kind:"import",names:n,from:i.value,location:h(e,i.location)}}parseDomain(){let e=this.consume("DOMAIN","Expected 'domain'").location,n=this.consume("IDENTIFIER","Expected domain name").lexeme;this.consume("LBRACE","Expected '{' after domain name");let i=[];for(;this.check("TYPE")&&!this.isAtEnd();)i.push(this.parseTypeDecl());let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)if(this.check("TYPE"))i.push(this.parseTypeDecl());else{let a=this.parseDomainMember();a&&r.push(a)}let o=this.consume("RBRACE","Expected '}' to close domain").location;return{kind:"domain",name:n,types:i,members:r,location:h(e,o)}}parseTypeDecl(){let e=this.consume("TYPE","Expected 'type'").location,n=this.consume("IDENTIFIER","Expected type name").lexeme;this.consume("EQ","Expected '=' after type name");let i=this.parseTypeExpr();return{kind:"typeDecl",name:n,typeExpr:i,location:h(e,i.location)}}parseDomainMember(){return this.check("STATE")?this.parseState():this.check("COMPUTED")?this.parseComputed():this.check("ACTION")?this.parseAction():this.isFlowDeclContext()?this.parseFlowDecl():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'state', 'computed', 'action', or 'flow'.`),this.advance(),null)}parseState(){let e=this.consume("STATE","Expected 'state'").location;this.consume("LBRACE","Expected '{' after 'state'");let n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)n.push(this.parseStateField());let i=this.consume("RBRACE","Expected '}' to close state block").location;return{kind:"state",fields:n,location:h(e,i)}}parseStateField(){let e=this.consume("IDENTIFIER","Expected field name");this.consume("COLON","Expected ':' after field name");let n=this.parseTypeExpr(),i;return this.match("EQ")&&(i=this.parseExpression()),{kind:"stateField",name:e.lexeme,typeExpr:n,initializer:i,location:h(e.location,i?.location??n.location)}}parseComputed(){let e=this.consume("COMPUTED","Expected 'computed'").location,n=this.consume("IDENTIFIER","Expected computed name").lexeme;this.consume("EQ","Expected '=' after computed name");let i=this.parseExpression();return{kind:"computed",name:n,expression:i,location:h(e,i.location)}}parseAction(){let e=this.consume("ACTION","Expected 'action'").location,n=this.consume("IDENTIFIER","Expected action name").lexeme;this.consume("LPAREN","Expected '(' after action name");let i=[];if(!this.check("RPAREN"))do i.push(this.parseParam());while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters");let r;this.match("AVAILABLE")&&(this.consume("WHEN","Expected 'when' after 'available'"),r=this.parseExpression());let o;if(this.match("DISPATCHABLE")&&(this.consume("WHEN","Expected 'when' after 'dispatchable'"),o=this.parseExpression()),this.check("AVAILABLE")){let c=o?"'available when' must appear before 'dispatchable when' in an action":"Action can declare 'available when' at most once";throw this.errorAtCurrent(c)}if(this.check("DISPATCHABLE"))throw this.errorAtCurrent("Action can declare 'dispatchable when' at most once");this.consume("LBRACE","Expected '{' to start action body");let a=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let c=this.parseGuardedStmt();c&&a.push(c)}let s=this.consume("RBRACE","Expected '}' to close action").location;return{kind:"action",name:n,params:i,available:r,dispatchable:o,body:a,location:h(e,s)}}parseFlowDecl(){let e=this.consume("IDENTIFIER","Expected 'flow'"),n=this.consume("IDENTIFIER","Expected flow name").lexeme;this.consume("LPAREN","Expected '(' after flow name");let i=[];if(!this.check("RPAREN"))do i.push(this.parseParam());while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters"),this.consume("LBRACE","Expected '{' to start flow body");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseFlowStmt();a&&r.push(a)}let o=this.consume("RBRACE","Expected '}' to close flow").location;return{kind:"flow",name:n,params:i,body:r,location:h(e.location,o)}}parseParam(){let e=this.consume("IDENTIFIER","Expected parameter name");this.consume("COLON","Expected ':' after parameter name");let n=this.parseTypeExpr();return{kind:"param",name:e.lexeme,typeExpr:n,location:h(e.location,n.location)}}parseGuardedStmt(){if(this.check("WHEN"))return this.parseWhenStmt();if(this.check("ONCE"))return this.parseOnceStmt();if(this.isOnceIntentContext())return this.parseOnceIntentStmt();if(this.isIncludeContext())return this.parseIncludeStmt();if(this.check("FAIL"))return this.parseFailStmt();if(this.check("STOP"))return this.parseStopStmt();let e=this.peek();return e.kind==="PATCH"||e.lexeme==="patch"||e.kind==="EFFECT"||e.lexeme==="effect"?(this.error(`'${e.lexeme}' must be inside a guard block (when, once, or onceIntent). Wrap it: when true { ${e.lexeme} ... }`),this.skipToRecoveryPoint(),null):(this.error(`Unexpected token '${e.lexeme}'. Expected 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseFlowStmt(){return this.check("WHEN")?this.parseWhenStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'when', 'include', 'once', 'onceIntent', 'patch', or 'effect'.`),this.advance(),null)}skipToRecoveryPoint(){let e=0;for(;!this.isAtEnd();){let n=this.peek();if(n.kind==="LBRACE"){e++,this.advance();continue}if(n.kind==="RBRACE"){if(e===0)return;e--,this.advance();continue}if(e===0&&(n.kind==="WHEN"||n.kind==="ONCE"||n.lexeme==="onceIntent"||this.isIncludeContext()||n.kind==="FAIL"||n.kind==="STOP"))return;this.advance()}}parseWhenStmt(){let e=this.consume("WHEN","Expected 'when'").location,n=this.parseExpression();this.consume("LBRACE","Expected '{' after when condition");let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseInnerStmt();o&&i.push(o)}let r=this.consume("RBRACE","Expected '}' to close when block").location;return{kind:"when",condition:n,body:i,location:h(e,r)}}parseOnceStmt(){let e=this.consume("ONCE","Expected 'once'").location;this.consume("LPAREN","Expected '(' after 'once'");let n=this.parsePath();this.consume("RPAREN","Expected ')' after marker");let i;this.match("WHEN")&&(i=this.parseExpression()),this.consume("LBRACE","Expected '{' to start once block");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseInnerStmt();a&&r.push(a)}let o=this.consume("RBRACE","Expected '}' to close once block").location;return{kind:"once",marker:n,condition:i,body:r,location:h(e,o)}}parseOnceIntentStmt(){let e=this.consume("IDENTIFIER","Expected 'onceIntent'"),n;this.match("WHEN")&&(n=this.parseExpression()),this.consume("LBRACE","Expected '{' to start onceIntent block");let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseInnerStmt();o&&i.push(o)}let r=this.consume("RBRACE","Expected '}' to close onceIntent block").location;return{kind:"onceIntent",condition:n,body:i,location:h(e.location,r)}}parseInnerStmt(){return this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():this.check("WHEN")?this.parseWhenStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("FAIL")?this.parseFailStmt():this.check("STOP")?this.parseStopStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'patch', 'effect', 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseIncludeStmt(){let e=this.consume("IDENTIFIER","Expected 'include'"),n=this.consume("IDENTIFIER","Expected flow name after 'include'");this.consume("LPAREN","Expected '(' after flow name");let i=[];if(!this.check("RPAREN"))do i.push(this.parseExpression());while(this.match("COMMA"));let r=this.consume("RPAREN","Expected ')' after include arguments").location;return{kind:"include",flowName:n.lexeme,args:i,location:h(e.location,r)}}parsePatchStmt(){let e=this.consume("PATCH","Expected 'patch'").location,n=this.parsePath(),i,r,o;return this.match("UNSET")?(i="unset",o=this.previous().location):this.match("MERGE")?(i="merge",r=this.parseExpression(),o=r.location):(this.consume("EQ","Expected '=', 'unset', or 'merge' after path"),i="set",r=this.parseExpression(),o=r.location),{kind:"patch",path:n,op:i,value:r,location:h(e,o)}}parseEffectStmt(){let e=this.consume("EFFECT","Expected 'effect'").location,n=this.consume("IDENTIFIER","Expected effect type").lexeme;for(;this.match("DOT");)n+="."+this.consume("IDENTIFIER","Expected identifier after '.'").lexeme;this.consume("LPAREN","Expected '(' after effect type"),this.consume("LBRACE","Expected '{' for effect arguments");let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)i.push(this.parseEffectArg()),this.match("COMMA");this.consume("RBRACE","Expected '}' after effect arguments");let r=this.consume("RPAREN","Expected ')' to close effect").location;return{kind:"effect",effectType:n,args:i,location:h(e,r)}}parseEffectArg(){let e=this.match("IDENTIFIER","FAIL")?this.previous():this.consume("IDENTIFIER","Expected argument name");this.consume("COLON","Expected ':' after argument name");let n=["into","pass","fail"].includes(e.lexeme),i=n?this.parsePath():this.parseExpression();return{kind:"effectArg",name:e.lexeme,value:i,isPath:n,location:h(e.location,i.location)}}parseFailStmt(){let e=this.consume("FAIL","Expected 'fail'").location,n=this.consume("STRING","Expected error code string after 'fail'"),i=n.value,r,o=n.location;return this.match("WITH")&&(r=this.parseExpression(),o=r.location),{kind:"fail",code:i,message:r,location:h(e,o)}}parseStopStmt(){let e=this.consume("STOP","Expected 'stop'").location,n=this.consume("STRING","Expected reason string after 'stop'");return{kind:"stop",reason:n.value,location:h(e,n.location)}}parseTypeExpr(){let e=this.parseBaseType();if(this.check("PIPE")){let n=[e];for(;this.match("PIPE");)n.push(this.parseBaseType());e={kind:"unionType",types:n,location:h(n[0].location,n[n.length-1].location)}}return e}parseBaseType(){if(this.check("LBRACE"))return this.parseObjectType();if(this.check("STRING")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("NUMBER")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("TRUE")||this.check("FALSE")){let n=this.advance();return{kind:"literalType",value:n.kind==="TRUE",location:n.location}}if(this.check("NULL"))return{kind:"literalType",value:null,location:this.advance().location};let e=this.consume("IDENTIFIER","Expected type name");if(this.match("LT"))if(e.lexeme==="Array"){let n=this.parseTypeExpr(),i=this.consume("GT","Expected '>' after array element type").location;return{kind:"arrayType",elementType:n,location:h(e.location,i)}}else if(e.lexeme==="Record"){let n=this.parseTypeExpr();this.consume("COMMA","Expected ',' between Record type parameters");let i=this.parseTypeExpr(),r=this.consume("GT","Expected '>' after Record value type").location;return{kind:"recordType",keyType:n,valueType:i,location:h(e.location,r)}}else{for(this.error(`Unknown generic type '${e.lexeme}'`);!this.check("GT")&&!this.isAtEnd();)this.advance();this.match("GT")}return{kind:"simpleType",name:e.lexeme,location:e.location}}parseObjectType(){let e=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let r=this.consume("IDENTIFIER","Expected field name"),o=this.match("QUESTION");this.consume("COLON","Expected ':' after field name");let a=this.parseTypeExpr();n.push({kind:"typeField",name:r.lexeme,typeExpr:a,optional:o,location:h(r.location,a.location)}),this.match("COMMA")}let i=this.consume("RBRACE","Expected '}' to close object type").location;return{kind:"objectType",fields:n,location:h(e,i)}}parseExpression(e=0){let n=this.parsePrimary();for(;;){let i=Ve(this.peek().kind);if(i<=e)break;if(this.peek().kind==="QUESTION"){n=this.parseTernary(n);continue}let r=Tt(this.peek().kind);if(!r)break;this.advance();let o=Nt(this.previous().kind)?i-1:i,a=this.parseExpression(o);n={kind:"binary",operator:r,left:n,right:a,location:h(n.location,a.location)}}return n}parseTernary(e){this.consume("QUESTION","Expected '?'");let n=this.parseExpression();this.consume("COLON","Expected ':' in ternary expression");let i=this.parseExpression(0);return{kind:"ternary",condition:e,consequent:n,alternate:i,location:h(e.location,i.location)}}parsePrimary(){if(this.check("BANG")||this.check("MINUS")&&this.isUnaryContext()){let e=this.advance(),n=this.parsePrimary();return{kind:"unary",operator:e.kind==="BANG"?"!":"-",operand:n,location:h(e.location,n.location)}}if(this.match("LPAREN")){let e=this.parseExpression();return this.consume("RPAREN","Expected ')' after expression"),e}if(this.check("LBRACE"))return this.parseObjectLiteral();if(this.check("LBRACKET"))return this.parseArrayLiteral();if(this.check("NUMBER")){let e=this.advance();return{kind:"literal",value:e.value,literalType:"number",location:e.location}}if(this.check("STRING")){let e=this.advance();return{kind:"literal",value:e.value,literalType:"string",location:e.location}}if(this.check("TRUE")||this.check("FALSE")){let e=this.advance();return{kind:"literal",value:e.kind==="TRUE",literalType:"boolean",location:e.location}}if(this.check("NULL"))return{kind:"literal",value:null,literalType:"null",location:this.advance().location};if(this.check("SYSTEM_IDENT")){let e=this.advance(),n=e.lexeme.slice(1).split(".");return this.parsePostfix({kind:"systemIdent",path:n,location:e.location})}if(this.check("ITEM")){let e=this.advance();return this.parsePostfix({kind:"iterationVar",name:"item",location:e.location})}if(this.check("MERGE")&&this.peekNext()?.kind==="LPAREN"){let e=this.advance();return this.parseFunctionCall(e)}if(this.check("IDENTIFIER")){let e=this.advance();return this.check("LPAREN")?this.parseFunctionCall(e):this.parsePostfix({kind:"identifier",name:e.lexeme,location:e.location})}return this.error(`Unexpected token '${this.peek().lexeme}'`),{kind:"literal",value:null,literalType:"null",location:this.peek().location}}parseFunctionCall(e){this.consume("LPAREN","Expected '(' for function call");let n=[];if(!this.check("RPAREN"))do n.push(this.parseExpression());while(this.match("COMMA"));let i=this.consume("RPAREN","Expected ')' after arguments").location;return this.parsePostfix({kind:"functionCall",name:e.lexeme,args:n,location:h(e.location,i)})}parsePostfix(e){for(;;)if(this.match("DOT")){let n=this.consume("IDENTIFIER","Expected property name after '.'");e={kind:"propertyAccess",object:e,property:n.lexeme,location:h(e.location,n.location)}}else if(this.match("LBRACKET")){let n=this.parseExpression(),i=this.consume("RBRACKET","Expected ']' after index").location;e={kind:"indexAccess",object:e,index:n,location:h(e.location,i)}}else break;return e}parseObjectLiteral(){let e=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let r=this.consume("IDENTIFIER","Expected property name");this.consume("COLON","Expected ':' after property name");let o=this.parseExpression();n.push({kind:"objectProperty",key:r.lexeme,value:o,location:h(r.location,o.location)}),this.check("RBRACE")||this.consume("COMMA","Expected ',' between properties")}let i=this.consume("RBRACE","Expected '}' to close object").location;return{kind:"objectLiteral",properties:n,location:h(e,i)}}parseArrayLiteral(){let e=this.consume("LBRACKET","Expected '['").location,n=[];for(;!this.check("RBRACKET")&&!this.isAtEnd();)n.push(this.parseExpression()),this.check("RBRACKET")||this.consume("COMMA","Expected ',' between elements");let i=this.consume("RBRACKET","Expected ']' to close array").location;return{kind:"arrayLiteral",elements:n,location:h(e,i)}}parsePath(){let e=[],n=this.peek().location,i=this.consume("IDENTIFIER","Expected identifier");for(e.push({kind:"propertySegment",name:i.lexeme,location:i.location});;)if(this.match("DOT")){let o=this.consume("IDENTIFIER","Expected property name");e.push({kind:"propertySegment",name:o.lexeme,location:o.location})}else if(this.match("LBRACKET")){let o=this.parseExpression(),a=this.consume("RBRACKET","Expected ']'").location;e.push({kind:"indexSegment",index:o,location:h(o.location,a)})}else break;let r=e[e.length-1];return{kind:"path",segments:e,location:h(n,r.location)}}isUnaryContext(){if(this.current===0)return!0;let e=this.previous();return["LPAREN","LBRACKET","LBRACE","COMMA","COLON","EQ","PLUS","MINUS","STAR","SLASH","PERCENT","EQ_EQ","BANG_EQ","LT","LT_EQ","GT","GT_EQ","AMP_AMP","PIPE_PIPE","BANG","QUESTION","QUESTION_QUESTION"].includes(e.kind)}peek(){return this.tokens[this.current]}peekNext(){return this.peekAt(1)}peekAt(e){return this.current+e>=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[this.current+e]}previous(){return this.tokens[this.current-1]}isAtEnd(){return this.peek().kind==="EOF"}advance(){return this.isAtEnd()||this.current++,this.previous()}check(e){return this.isAtEnd()?!1:this.peek().kind===e}isOnceIntentContext(){if(!this.check("IDENTIFIER")||this.peek().lexeme!=="onceIntent")return!1;let n=this.peekNext();return n.kind==="LBRACE"||n.kind==="WHEN"}isFlowDeclContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="flow"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}isIncludeContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="include"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}match(...e){for(let n of e)if(this.check(n))return this.advance(),!0;return!1}consume(e,n){if(this.check(e))return this.advance();throw this.errorAtCurrent(n)}error(e){this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:e,location:this.previous().location})}errorAtCurrent(e){return this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:e,location:this.peek().location}),new Error(e)}};function ge(t){return new ze(t).parse()}var Ee=class{parent;symbols=new Map;kind;constructor(e,n=null){this.kind=e,this.parent=n}define(e){this.symbols.set(e.name,e)}lookup(e){let n=this.symbols.get(e);return n||this.parent?.lookup(e)}isDefined(e){return this.symbols.has(e)}},Ke=class{diagnostics=[];scopes=new Map;currentScope=null;domainScope=null;analyze(e){return this.diagnostics=[],this.scopes=new Map,this.currentScope=null,this.domainScope=null,this.analyzeDomain(e.domain),{scopes:this.scopes,diagnostics:this.diagnostics}}analyzeDomain(e){let n=new Ee("domain");this.domainScope=n,this.currentScope=n,this.scopes.set("domain",n);for(let i of e.members)if(i.kind==="state")for(let r of i.fields)this.defineSymbol({name:r.name,kind:"state",location:r.location});else i.kind==="computed"?this.defineSymbol({name:i.name,kind:"computed",location:i.location}):i.kind==="action"?this.defineSymbol({name:i.name,kind:"action",location:i.location}):i.kind;for(let i of e.members)i.kind==="computed"?this.analyzeComputedExpr(i):i.kind==="action"&&this.analyzeAction(i)}analyzeComputedExpr(e){this.analyzeExpr(e.expression,"computed")}analyzeAction(e){let n=new Ee("action",this.domainScope);this.currentScope=n,this.scopes.set(`action.${e.name}`,n);for(let i of e.params)n.define({name:i.name,kind:"param",location:i.location});for(let i of e.body)this.analyzeStmt(i);this.currentScope=this.domainScope}analyzeStmt(e){switch(e.kind){case"when":this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"onceIntent":e.condition&&this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"once":this.validatePath(e.marker),e.condition&&this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"patch":this.validatePath(e.path),e.value&&this.analyzeExpr(e.value,"action");break;case"effect":for(let n of e.args)n.isPath?this.validatePath(n.value):this.analyzeExpr(n.value,"action");break;case"include":case"fail":case"stop":break}}analyzeExpr(e,n){switch(e.kind){case"identifier":this.checkIdentifier(e.name,e.location,n);break;case"systemIdent":this.checkSystemIdent(e.path,e.location,n);break;case"propertyAccess":this.analyzeExpr(e.object,n);break;case"indexAccess":this.analyzeExpr(e.object,n),this.analyzeExpr(e.index,n);break;case"functionCall":for(let i of e.args)this.analyzeExpr(i,n);break;case"binary":this.analyzeExpr(e.left,n),this.analyzeExpr(e.right,n);break;case"unary":this.analyzeExpr(e.operand,n);break;case"ternary":this.analyzeExpr(e.condition,n),this.analyzeExpr(e.consequent,n),this.analyzeExpr(e.alternate,n);break;case"objectLiteral":for(let i of e.properties)this.analyzeExpr(i.value,n);break;case"arrayLiteral":for(let i of e.elements)this.analyzeExpr(i,n);break;case"iterationVar":break;case"literal":break}}checkIdentifier(e,n,i){let r=this.currentScope?.lookup(e);if(!r){this.error(`Undefined identifier '${e}'`,n,"E_UNDEFINED");return}i==="computed"&&r.kind==="param"&&this.error(`Cannot access parameter '${e}' in computed expression`,n,"E_INVALID_ACCESS")}checkSystemIdent(e,n,i){let[r,...o]=e;if(r==="system"&&i==="computed"&&this.error("Cannot use $system.* in computed expressions (non-deterministic)",n,"E001"),r==="system"){let a=["uuid","timestamp","time.now","random"],s=o.join(".");s&&!a.includes(s)&&this.error(`Invalid system value '$system.${s}'. Valid values: ${a.join(", ")}`,n,"E003")}if(r==="meta"){let a=["intentId","actionName","timestamp"],s=o.join(".");s&&!a.includes(s)&&this.error(`Invalid meta value '$meta.${s}'. Valid values: ${a.join(", ")}`,n,"E003")}}validatePath(e){if(!e||!e.segments)return;let n=e.segments[0];n?.kind==="propertySegment"&&(this.currentScope?.lookup(n.name)||this.error(`Undefined identifier '${n.name}' in path`,e.location,"E_UNDEFINED"))}defineSymbol(e){if(this.currentScope){if(this.currentScope.isDefined(e.name)){this.error(`Duplicate identifier '${e.name}'`,e.location,"E_DUPLICATE");return}this.currentScope.define(e)}}error(e,n,i){this.diagnostics.push({severity:"error",code:i,message:e,location:n})}};function bt(t){return new Ke().analyze(t)}function ke(t,e,n,i){return{severity:"error",code:t,message:e,location:n,...i}}function St(t,e,n,i){return{severity:"warning",code:t,message:e,location:n,...i}}function Rr(t,e,n){return{severity:"info",code:t,message:e,location:n}}function sn(t){return t.severity==="error"}function Lr(t){return t.some(sn)}function Fr(t,e){return t.filter(n=>n.severity===e)}var xt=new Set(["eq","neq","gt","gte","lt","lte","and","or","not","isNull","isNotNull","hasKey","startsWith","endsWith","strIncludes","includes","every","some","existsById"]),vt=new Set(["add","sub","mul","div","mod","absDiff","abs","clamp","floor","ceil","round","sqrt","pow","len","strlen","indexOf","streak","sum","min","max","toNumber"]),wt=new Set(["trim","lower","upper","concat","typeof","toString","substring","substr","replace"]),cn=new Set(["keys","values","entries","merge","filter","map","append","reverse","unique","flat","split","fromEntries"]),ln=new Set(["updateById","removeById"]);function Te(t){let e=new Map,n=new Map,i=new Map;for(let r of t.types)i.set(r.name,r);for(let r of t.members){if(r.kind==="state"){for(let o of r.fields)e.set(o.name,o.typeExpr);continue}r.kind==="computed"&&n.set(r.name,r)}return{stateTypes:e,computedDecls:n,typeDefs:i,computedTypeCache:new Map,computedTypeInFlight:new Set}}function Ne(t){let e=new Map;for(let n of t)e.set(n.name,n.typeExpr);return e}function k(t,e,n){switch(t.kind){case"literal":return yn(t.value,t.location);case"identifier":return e.get(t.name)??n.stateTypes.get(t.name)??dn(t.name,n);case"propertyAccess":return K(k(t.object,e,n),t.property,n);case"indexAccess":return ae(k(t.object,e,n),n);case"objectLiteral":return{kind:"objectType",fields:t.properties.map(i=>{let r=k(i.value,e,n);return r?{kind:"typeField",name:i.key,typeExpr:r,optional:!1,location:i.location}:null}).filter(i=>i!==null),location:t.location};case"arrayLiteral":{let i=I(t.elements.map(r=>k(r,e,n)),t.location);return i?{kind:"arrayType",elementType:i,location:t.location}:null}case"unary":return pn(t);case"binary":return un(t,e,n);case"ternary":return I([k(t.consequent,e,n),k(t.alternate,e,n)],t.location);case"functionCall":return mn(t,e,n);case"systemIdent":return null;case"iterationVar":return e.get("$item")??null}}function j(t,e,n){let i=k(t,e,n);if(i)return At(i,n);switch(t.kind){case"literal":return"primitive";case"objectLiteral":case"arrayLiteral":return"nonprimitive";case"binary":return t.operator==="??"?oe([j(t.left,e,n),j(t.right,e,n)]):t.operator==="=="||t.operator==="!="||t.operator==="+"||t.operator==="-"||t.operator==="*"||t.operator==="/"||t.operator==="%"||t.operator==="<"||t.operator==="<="||t.operator===">"||t.operator===">="||t.operator==="&&"||t.operator==="||"?"primitive":"unknown";case"unary":return"primitive";case"ternary":return oe([j(t.consequent,e,n),j(t.alternate,e,n)]);case"functionCall":return cn.has(t.name)?"nonprimitive":xt.has(t.name)||vt.has(t.name)||wt.has(t.name)||t.name==="toBoolean"?"primitive":(t.name==="cond"||t.name==="if")&&t.args.length>=3?oe([j(t.args[1],e,n),j(t.args[2],e,n)]):t.name==="coalesce"?oe(t.args.map(r=>j(r,e,n))):"unknown";case"identifier":case"propertyAccess":case"indexAccess":case"systemIdent":case"iterationVar":return"unknown"}}function At(t,e){let n=M(t,e);if(!n)return"unknown";switch(n.kind){case"simpleType":return n.name==="object"?"nonprimitive":n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null"?"primitive":"unknown";case"literalType":return"primitive";case"arrayType":case"recordType":case"objectType":return"nonprimitive";case"unionType":return oe(n.types.map(i=>At(i,e)))}}function M(t,e,n=new Set){return t?t.kind==="simpleType"&&e.typeDefs.has(t.name)?n.has(t.name)?null:(n.add(t.name),M(e.typeDefs.get(t.name).typeExpr,e,n)):t:null}function K(t,e,n){let i=M(t,n);if(!i)return null;if(i.kind==="objectType")return i.fields.find(o=>o.name===e)?.typeExpr??null;if(i.kind==="unionType"){let r=i.types.filter(o=>!Q(o)).map(o=>K(o,e,n)).filter(o=>o!==null);return I(r,i.location)}return null}function ae(t,e){let n=M(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType"){let i=n.types.filter(r=>!Q(r)).map(r=>ae(r,e)).filter(r=>r!==null);return I(i,n.location)}return null}function _(t,e){let n=M(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="unionType"){let i=n.types.filter(r=>!Q(r)).map(r=>_(r,e)).filter(r=>r!==null);return I(i,n.location)}return null}function be(t,e){let n=M(t,e);if(!n)return!1;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number";case"literalType":return typeof n.value=="string"||typeof n.value=="number";case"unionType":return n.types.length>0&&n.types.every(i=>be(i,e));default:return!1}}function Q(t){return t.kind==="simpleType"&&t.name==="null"||t.kind==="literalType"&&t.value===null}function dn(t,e){if(e.computedTypeCache.has(t))return e.computedTypeCache.get(t)??null;let n=e.computedDecls.get(t);if(!n||e.computedTypeInFlight.has(t))return null;e.computedTypeInFlight.add(t);let i=k(n.expression,new Map,e);return e.computedTypeInFlight.delete(t),e.computedTypeCache.set(t,i),i}function pn(t){return t.operator==="!"?C("boolean",t.location):C("number",t.location)}function un(t,e,n){switch(t.operator){case"==":case"!=":case"<":case"<=":case">":case">=":case"&&":case"||":return C("boolean",t.location);case"+":case"-":case"*":case"/":case"%":return C("number",t.location);case"??":return I([k(t.left,e,n),k(t.right,e,n)],t.location)}}function mn(t,e,n){if(xt.has(t.name))return C("boolean",t.location);if(vt.has(t.name))return C("number",t.location);if(t.name==="idiv")return I([C("number",t.location),C("null",t.location)],t.location);if(wt.has(t.name))return C("string",t.location);if(t.name==="toBoolean")return C("boolean",t.location);if(t.name==="findById"&&t.args.length>=1){let i=_(k(t.args[0],e,n),n);return i?I([i,C("null",t.location)],t.location):null}if(t.name==="find"&&t.args.length>=1){let i=_(k(t.args[0],e,n),n);return i?I([i,C("null",t.location)],t.location):null}if(t.name==="filter"&&t.args.length>=1)return k(t.args[0],e,n);if(t.name==="map"&&t.args.length>=2){let i=k(t.args[0],e,n),r=_(i,n);if(!r)return null;let o=k(t.args[1],En(e,r),n);return o?{kind:"arrayType",elementType:o,location:t.location}:null}if((t.name==="first"||t.name==="last")&&t.args.length>=1)return _(k(t.args[0],e,n),n);if(t.name==="at"&&t.args.length>=1)return ae(k(t.args[0],e,n),n);if(t.name==="field"&&t.args.length>=2){let i=gn(t.args[1]);return i?K(k(t.args[0],e,n),i,n):null}return ln.has(t.name)&&t.args.length>=1?k(t.args[0],e,n):(t.name==="cond"||t.name==="if")&&t.args.length>=3?I([k(t.args[1],e,n),k(t.args[2],e,n)],t.location):t.name==="coalesce"?I(t.args.map(i=>k(i,e,n)),t.location):t.name==="match"?hn(t,e,n):t.name==="argmax"||t.name==="argmin"?fn(t,e,n):t.name==="slice"&&t.args.length>=1?k(t.args[0],e,n):t.name==="split"?{kind:"arrayType",elementType:C("string",t.location),location:t.location}:t.name==="keys"?{kind:"arrayType",elementType:C("string",t.location),location:t.location}:null}function oe(t){let e=!1;for(let n of t){if(n==="nonprimitive")return"nonprimitive";n==="unknown"&&(e=!0)}return e?"unknown":"primitive"}function I(t,e){let n=t.filter(o=>o!==null);if(n.length===0)return null;if(n.length===1)return n[0];let i=[],r=new Set;for(let o of n){let a=JSON.stringify(o);r.has(a)||(r.add(a),i.push(o))}return i.length===1?i[0]:{kind:"unionType",types:i,location:e}}function hn(t,e,n){if(t.args.length<3)return null;let i=[];for(let r=1;r<t.args.length-1;r+=1){let o=t.args[r];if(o.kind!=="arrayLiteral"||o.elements.length!==2)return null;i.push(k(o.elements[1],e,n))}return i.push(k(t.args[t.args.length-1],e,n)),I(i,t.location)}function fn(t,e,n){if(t.args.length<2)return null;let i=[];for(let o=0;o<t.args.length-1;o+=1){let a=t.args[o];if(a.kind!=="arrayLiteral"||a.elements.length!==3)return null;i.push(k(a.elements[0],e,n))}let r=I(i,t.location);return r?I([r,C("null",t.location)],t.location):null}function yn(t,e){return{kind:"literalType",value:t,location:e}}function C(t,e){return{kind:"simpleType",name:t,location:e}}function gn(t){return t.kind==="literal"&&typeof t.value=="string"?t.value:null}function En(t,e){let n=new Map(t);return n.set("$item",e),n}var kn=new Set(["findById","existsById"]),Ye=new Set(["updateById","removeById"]),Tn=new Set([...kn,...Ye]);function G(t,e,n,i,r){let o=`${n}:${r.start.offset}:${r.end.offset}:${i}`;e.has(o)||(e.add(o),t.push(ke(n,i,r)))}function Ct(t){let e=[],n=new Set,i=Te(t.domain);xn(t.domain,i,e,n);for(let r of t.domain.members)switch(r.kind){case"computed":b(r.expression,"computed",new Map,i,e,n,0);break;case"action":{let o=Ne(r.params);Nn(r,o,i,e,n);break}case"state":case"flow":break}return e}function Nn(t,e,n,i,r){t.available&&b(t.available,"available",e,n,i,r,0),t.dispatchable&&b(t.dispatchable,"dispatchable",e,n,i,r,0);for(let o of t.body)bn(o,e,n,i,r)}function bn(t,e,n,i,r){switch(t.kind){case"when":b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"once":t.condition&&b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"onceIntent":t.condition&&b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"include":break}}function X(t,e,n,i,r){switch(t.kind){case"when":b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"once":t.condition&&b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"onceIntent":t.condition&&b(t.condition,"guard",e,n,i,r,0);for(let o of t.body)X(o,e,n,i,r);break;case"patch":t.value&&b(t.value,"patch",e,n,i,r,0);break;case"effect":for(let o of t.args)o.isPath||b(o.value,"action",e,n,i,r,0);break;case"fail":t.message&&b(t.message,"action",e,n,i,r,0);break;case"include":case"stop":break}}function b(t,e,n,i,r,o,a){switch(t.kind){case"functionCall":{Sn(t,e,n,i,r,o,a);let s=a+(Ye.has(t.name)?1:0);for(let c of t.args)b(c,e,n,i,r,o,s);break}case"binary":b(t.left,e,n,i,r,o,a),b(t.right,e,n,i,r,o,a);break;case"unary":b(t.operand,e,n,i,r,o,a);break;case"ternary":b(t.condition,e,n,i,r,o,a),b(t.consequent,e,n,i,r,o,a),b(t.alternate,e,n,i,r,o,a);break;case"propertyAccess":b(t.object,e,n,i,r,o,a);break;case"indexAccess":b(t.object,e,n,i,r,o,a),b(t.index,e,n,i,r,o,a);break;case"objectLiteral":for(let s of t.properties)b(s.value,e,n,i,r,o,a);break;case"arrayLiteral":for(let s of t.elements)b(s,e,n,i,r,o,a);break;case"literal":case"identifier":case"systemIdent":case"iterationVar":break}}function Sn(t,e,n,i,r,o,a){if(!Tn.has(t.name)||t.args.length===0)return;Ye.has(t.name)&&(e==="available"?G(r,o,"E035","updateById/removeById are not allowed in available conditions.",t.location):e==="dispatchable"?G(r,o,"E048","updateById/removeById are not allowed in dispatchable conditions.",t.location):e==="guard"?G(r,o,"E034","updateById/removeById are not allowed in guard conditions.",t.location):e!=="patch"&&G(r,o,"E031","updateById/removeById are only allowed in patch RHS.",t.location),a>0&&G(r,o,"E032","Nested transform primitives are not allowed.",t.location),e==="patch"&&!We(t.args[0],i)&&G(r,o,"E033","Transform primitive collection argument must resolve to a state path.",t.args[0].location));let s=wn(t.args[0],n,i);if(!s)return;let c=Pt(s,i);if(!c){G(r,o,"E030","Collection element type must declare an 'id' field for entity primitives.",t.args[0].location);return}be(c,i)||G(r,o,"E030a","Entity 'id' field must be string or number.",t.args[0].location)}function xn(t,e,n,i){for(let r of t.members)if(r.kind==="state")for(let o of r.fields)vn(o,e,n,i)}function vn(t,e,n,i){if(!t.initializer||t.initializer.kind!=="arrayLiteral")return;let r=_(t.typeExpr,e);if(!r)return;let o=Pt(r,e);if(!o||!be(o,e))return;let a=new Map;for(let s of t.initializer.elements){if(s.kind!=="objectLiteral")continue;let c=s.properties.find(u=>u.key==="id");if(!c||c.value.kind!=="literal"||typeof c.value.value!="string"&&typeof c.value.value!="number")continue;let l=`${typeof c.value.value}:${String(c.value.value)}`;if(a.get(l)){G(n,i,"E030b","Duplicate '.id' values detected in state initializer.",c.value.location);continue}a.set(l,c.value.location)}}function wn(t,e,n){return _(k(t,e,n),n)}function Pt(t,e){return K(t,"id",e)}function We(t,e){switch(t.kind){case"identifier":return e.stateTypes.has(t.name);case"propertyAccess":return We(t.object,e);case"indexAccess":return We(t.object,e);default:return!1}}function It(){return{inAction:!1,inGuard:!1,guardDepth:0,hasMarkerPatch:!1,currentActionParamTypes:new Map,diagnostics:[]}}var An=/\b(await(?:ing)?|wait(?:ing)?|pending)\b/i;function y(t,e){return{kind:"simpleType",name:t,location:e}}function q(t,e,n){let i=M(t,n),r=M(e,n);if(!i||!r)return null;if(r.kind==="unionType"){let o=i.kind==="unionType"?i.types:[i],a=!1;for(let s of o){let c=r.types.map(l=>q(s,l,n));if(!c.includes(!0)){if(c.every(l=>l===!1))return!1;a=!0}}return a?null:!0}if(i.kind==="unionType"){let o=!1;for(let a of i.types){let s=q(a,r,n);if(s===!1)return!1;s===null&&(o=!0)}return o?null:!0}if(r.kind==="simpleType"){if(i.kind==="simpleType")return i.name===r.name;if(i.kind==="literalType")return r.name==="null"?i.value===null:typeof i.value===r.name}if(r.kind==="literalType")return i.kind!=="literalType"?!1:i.value===r.value;if(r.kind==="arrayType")return i.kind!=="arrayType"?!1:q(i.elementType,r.elementType,n);if(r.kind==="objectType"){if(i.kind!=="objectType")return!1;for(let o of r.fields){let a=i.fields.find(c=>c.name===o.name);if(!a){if(o.optional)continue;return!1}let s=q(a.typeExpr,o.typeExpr,n);if(s!==!0)return s}return!0}return r.kind==="recordType"?i.kind!=="recordType"?null:q(i.valueType,r.valueType,n):null}function x(t,e){let n=M(t,e);if(!n)return"unknown";switch(n.kind){case"simpleType":return n.name;case"literalType":return JSON.stringify(n.value);case"arrayType":return`Array<${x(n.elementType,e)}>`;case"recordType":return`Record<${x(n.keyType,e)}, ${x(n.valueType,e)}>`;case"objectType":return`{ ${n.fields.map(i=>`${i.name}${i.optional?"?":""}: ${x(i.typeExpr,e)}`).join("; ")} }`;case"unionType":return n.types.map(i=>x(i,e)).join(" | ")}}function Se(t,e){let n=M(t,e);if(!n)return null;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null"?new Set([n.name]):n.name==="object"?"nonprimitive":null;case"literalType":return new Set([n.value===null?"null":typeof n.value]);case"arrayType":case"recordType":case"objectType":return"nonprimitive";case"unionType":{let i=new Set;for(let r of n.types){let o=Se(r,e);if(o===null)return null;if(o==="nonprimitive")return"nonprimitive";for(let a of o)i.add(a)}return i}}}function Qe(t,e){let n=Se(t,e);if(n===null)return null;if(n==="nonprimitive")return"invalid";let i=[...n].filter(r=>r!=="null");return i.length!==1||n.has("null")?"invalid":i[0]}function Dt(t,e,n){let i=Se(t,n),r=Se(e,n);if(i===null||r===null)return null;if(i==="nonprimitive"||r==="nonprimitive")return!1;if(!(i instanceof Set)||!(r instanceof Set))return null;let o=[...i].filter(s=>s!=="null"),a=[...r].filter(s=>s!=="null");return o.length===0||a.length===0?!0:o.some(s=>a.includes(s))}function Cn(t,e){let n=M(t,e);if(!n||Q(n))return null;if(n.kind!=="unionType")return n;let i=n.types.filter(r=>!Q(r));return i.length===0?null:i.length===1?i[0]:{kind:"unionType",types:i,location:n.location}}function Xe(t,e,n){if(!t||!e)return null;let i=q(t,e,n);if(i===!0)return!0;let r=q(e,t,n);if(r===!0)return!0;let o=Dt(t,e,n);return o!==null?o:i===!1&&r===!1?!1:null}function Rt(t,e){let n=M(t,e);if(!n)return null;if(n.kind==="unionType"){let i=n.types.map(r=>Rt(r,e));return i.every(r=>r===!0)?!0:i.some(r=>r===!1)?!1:null}return n.kind==="arrayType"}function Lt(t,e){let n=M(t,e);if(!n)return null;if(n.kind==="unionType"){let i=n.types.map(r=>Lt(r,e));return i.every(r=>r===!0)?!0:i.some(r=>r===!1)?!1:null}return n.kind==="arrayType"||n.kind==="recordType"||n.kind==="objectType"?!0:n.kind==="literalType"?typeof n.value=="string":n.kind==="simpleType"?n.name==="string"||n.name==="object":!1}function Pn(t,e){let n=new Map(t);return n.set("$item",e),n}function Mt(t){let e=xe(t);if(typeof e=="number")return e;if(t.kind==="literal")return t.literalType==="null"?null:typeof t.value=="string"||typeof t.value=="number"||typeof t.value=="boolean"?t.value:void 0}function xe(t){if(t.kind==="literal"&&t.literalType==="number"&&typeof t.value=="number")return t.value;if(t.kind==="unary"&&t.operator==="-"){let e=xe(t.operand);return typeof e=="number"?-e:void 0}}function In(t,e){let[n,...i]=t.segments;if(!n||n.kind!=="propertySegment")return null;let r=e.stateTypes.get(n.name)??null;for(let o of i){if(!r)return null;r=o.kind==="propertySegment"?K(r,o.name,e):ae(r,e)}return r}function Mn(t){let e="";for(let[n,i]of t.segments.entries()){if(i.kind==="propertySegment"){e+=n===0?i.name:`.${i.name}`;continue}i.index.kind==="literal"?e+=`[${JSON.stringify(i.index.value)}]`:e+="[*]"}return e}var Je=class{ctx=It();symbols=null;validate(e){return this.ctx=It(),this.symbols=Te(e.domain),this.validateDomain(e.domain),this.symbols=null,{valid:!this.ctx.diagnostics.some(n=>n.severity==="error"),diagnostics:this.ctx.diagnostics}}validateDomain(e){e.name.startsWith("__")&&this.error("Domain name cannot start with '__' (reserved prefix)",e.location,"E_RESERVED_NAME");for(let n of e.members)switch(n.kind){case"state":this.validateState(n);break;case"computed":this.validateExpr(n.expression,"computed");break;case"action":this.validateAction(n);break;case"flow":break}}validateState(e){let n=new Map;for(let i of e.fields){let r=n.get(i.name);r?this.error(`Duplicate state field '${i.name}'. First declared at line ${r.start.line}`,i.location,"E_DUPLICATE_FIELD"):n.set(i.name,i.location),this.validateStateField(i)}}validateStateField(e){this.checkAnonymousObjectType(e.typeExpr,e.location),e.initializer&&this.validateStateInitializer(e.initializer)}validateStateInitializer(e){switch(e.kind){case"literal":return;case"identifier":case"iterationVar":this.error("State initializers must be compile-time constants",e.location,"E042");return;case"systemIdent":e.path[0]==="system"?this.error("$system.* cannot be used in state initializers",e.location,"E002"):this.error("State initializers must be compile-time constants",e.location,"E042");return;case"objectLiteral":for(let n of e.properties)this.validateStateInitializer(n.value);return;case"arrayLiteral":for(let n of e.elements)this.validateStateInitializer(n);return;case"functionCall":{let n=this.ctx.diagnostics.length;for(let i of e.args)this.validateStateInitializer(i);this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"binary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.left),this.validateStateInitializer(e.right),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"unary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.operand),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"ternary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.condition),this.validateStateInitializer(e.consequent),this.validateStateInitializer(e.alternate),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"propertyAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.object),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"indexAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.object),this.validateStateInitializer(e.index),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}}}checkAnonymousObjectType(e,n){switch(e.kind){case"objectType":this.ctx.diagnostics.push(St("W012","Anonymous object type in state field. Use a named type declaration instead: type MyType = { ... }",e.location,{suggestion:"Define this type using 'type TypeName = { ... }' and reference it by name"}));for(let i of e.fields)this.checkAnonymousObjectType(i.typeExpr,n);break;case"arrayType":this.checkAnonymousObjectType(e.elementType,n);break;case"recordType":this.checkAnonymousObjectType(e.keyType,n),this.checkAnonymousObjectType(e.valueType,n);break;case"unionType":for(let i of e.types)this.checkAnonymousObjectType(i,n);break}}validateAction(e){this.ctx.inAction=!0,this.ctx.currentActionParamTypes=Ne(e.params),e.available&&this.validateAvailableExpr(e.available),e.dispatchable&&this.validateDispatchableExpr(e.dispatchable);for(let n of e.body)this.validateGuardedStmt(n);this.ctx.inAction=!1,this.ctx.currentActionParamTypes=new Map}validateAvailableExpr(e){switch(e.kind){case"identifier":this.ctx.currentActionParamTypes.has(e.name)&&this.error("Action parameters cannot be used in available condition",e.location,"E005");break;case"systemIdent":e.path[0]==="system"&&this.error("$system.* cannot be used in available condition (must be pure expression)",e.location,"E005"),e.path[0]==="input"&&this.error("$input.* cannot be used in available condition (parameters not available at availability check)",e.location,"E005"),e.path[0]==="meta"&&this.error("$meta.* cannot be used in available condition (availability is schema-context only)",e.location,"E005");break;case"functionCall":for(let n of e.args)this.validateAvailableExpr(n);break;case"binary":this.validateAvailableExpr(e.left),this.validateAvailableExpr(e.right);break;case"unary":this.validateAvailableExpr(e.operand);break;case"ternary":this.validateAvailableExpr(e.condition),this.validateAvailableExpr(e.consequent),this.validateAvailableExpr(e.alternate);break;case"propertyAccess":this.validateAvailableExpr(e.object);break;case"indexAccess":this.validateAvailableExpr(e.object),this.validateAvailableExpr(e.index);break;case"objectLiteral":for(let n of e.properties)this.validateAvailableExpr(n.value);break;case"arrayLiteral":for(let n of e.elements)this.validateAvailableExpr(n);break}}validateDispatchableExpr(e){switch(e.kind){case"systemIdent":e.path[0]==="system"&&this.error("$system.* cannot be used in dispatchable condition (must be pure expression)",e.location,"E047"),e.path[0]==="input"&&this.error("$input.* cannot be used in dispatchable condition (use bare action parameter names)",e.location,"E047"),e.path[0]==="meta"&&this.error("$meta.* cannot be used in dispatchable condition (dispatchability is snapshot + bound-input only)",e.location,"E047");break;case"functionCall":for(let n of e.args)this.validateDispatchableExpr(n);break;case"binary":this.validateDispatchableExpr(e.left),this.validateDispatchableExpr(e.right);break;case"unary":this.validateDispatchableExpr(e.operand);break;case"ternary":this.validateDispatchableExpr(e.condition),this.validateDispatchableExpr(e.consequent),this.validateDispatchableExpr(e.alternate);break;case"propertyAccess":this.validateDispatchableExpr(e.object);break;case"indexAccess":this.validateDispatchableExpr(e.object),this.validateDispatchableExpr(e.index);break;case"objectLiteral":for(let n of e.properties)this.validateDispatchableExpr(n.value);break;case"arrayLiteral":for(let n of e.elements)this.validateDispatchableExpr(n);break}}validateGuardedStmt(e){switch(e.kind){case"when":this.validateWhen(e);break;case"once":this.validateOnce(e);break;case"onceIntent":this.validateOnceIntent(e);break;case"patch":this.validatePatch(e);break;case"effect":this.validateEffect(e);break;case"include":break;case"fail":this.validateFail(e);break;case"stop":this.validateStop(e);break}}validateWhen(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.validateCondition(e.condition,"when");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnce(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.ctx.hasMarkerPatch=!1,e.condition&&this.validateCondition(e.condition,"once");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnceIntent(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,e.condition&&this.validateCondition(e.condition,"onceIntent");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validatePatch(e){if(this.ctx.inGuard||this.error("Patch must be inside a guard (when, once, or onceIntent)",e.location,"E_UNGUARDED_PATCH"),e.value){let n=this.ctx.diagnostics.length,i=this.validateExpr(e.value,"action");if(!this.symbols||n!==this.ctx.diagnostics.length)return;let r=In(e.path,this.symbols);if(!r||!i)return;q(i,r,this.symbols)===!1&&this.error(`Patch value for '${Mn(e.path)}' must be assignable to ${x(r,this.symbols)}, got ${x(i,this.symbols)}`,e.value.location,"E_TYPE_MISMATCH")}}validateEffect(e){this.ctx.inGuard||this.error("Effect must be inside a guard (when, once, or onceIntent)",e.location,"E_UNGUARDED_EFFECT");for(let n of e.args)n.isPath||this.validateExpr(n.value,"action")}validateFail(e){this.ctx.inGuard||this.error("fail must be inside a guard (when, once, or onceIntent)",e.location,"E006"),e.message&&this.validateExpr(e.message,"action")}validateStop(e){this.ctx.inGuard||this.error("stop must be inside a guard (when, once, or onceIntent)",e.location,"E007"),An.test(e.reason)&&this.error("stop message suggests waiting/pending - use 'Already processed' style instead",e.location,"E008")}validateCondition(e,n){let i=this.ctx.diagnostics.length,r=this.validateExpr(e,"action");i===this.ctx.diagnostics.length&&this.requireAssignable(r,y("boolean",e.location),e.location,`Condition in ${n} must evaluate to boolean`)}validateExpr(e,n,i=this.ctx.currentActionParamTypes){switch(e.kind){case"functionCall":return this.validateFunctionCall(e,n,i),this.inferType(e,i);case"binary":{let r=this.ctx.diagnostics.length,o=this.validateExpr(e.left,n,i),a=this.validateExpr(e.right,n,i);if(!(r!==this.ctx.diagnostics.length))switch(e.operator){case"==":case"!=":this.validatePrimitiveEquality(e.left,e.right,o,a,e.location);break;case"<":case"<=":case">":case">=":this.requireAssignable(o,y("number",e.left.location),e.left.location,`Operator '${e.operator}' requires a numeric left operand`),this.requireAssignable(a,y("number",e.right.location),e.right.location,`Operator '${e.operator}' requires a numeric right operand`);break;case"&&":case"||":this.requireAssignable(o,y("boolean",e.left.location),e.left.location,`Operator '${e.operator}' requires a boolean left operand`),this.requireAssignable(a,y("boolean",e.right.location),e.right.location,`Operator '${e.operator}' requires a boolean right operand`);break;case"+":case"-":case"*":case"/":case"%":this.requireAssignable(o,y("number",e.left.location),e.left.location,`Operator '${e.operator}' requires a numeric left operand`),this.requireAssignable(a,y("number",e.right.location),e.right.location,`Operator '${e.operator}' requires a numeric right operand`);break;case"??":this.validateCoalesceTypes([o,a],e.location);break}return this.inferType(e,i)}case"unary":{let r=this.ctx.diagnostics.length,o=this.validateExpr(e.operand,n,i);return r===this.ctx.diagnostics.length&&this.requireAssignable(o,y(e.operator==="!"?"boolean":"number",e.operand.location),e.operand.location,e.operator==="!"?"Unary '!' requires a boolean operand":"Unary '-' requires a numeric operand"),this.inferType(e,i)}case"ternary":{let r=this.ctx.diagnostics.length,o=this.validateExpr(e.condition,n,i);return this.validateExpr(e.consequent,n,i),this.validateExpr(e.alternate,n,i),r===this.ctx.diagnostics.length&&this.requireAssignable(o,y("boolean",e.condition.location),e.condition.location,"Ternary condition must evaluate to boolean"),this.inferType(e,i)}case"propertyAccess":return this.validateExpr(e.object,n,i),this.inferType(e,i);case"indexAccess":return this.validateExpr(e.object,n,i),this.validateExpr(e.index,n,i),this.inferType(e,i);case"objectLiteral":for(let r of e.properties)this.validateExpr(r.value,n,i);return this.inferType(e,i);case"arrayLiteral":for(let r of e.elements)this.validateExpr(r,n,i);return this.inferType(e,i);case"systemIdent":return this.inferType(e,i);case"literal":case"identifier":case"iterationVar":return this.inferType(e,i)}}validateFunctionCall(e,n,i){let{name:r,args:o,location:a}=e;if(["reduce","fold","foldl","foldr","scan"].includes(r)&&this.error(`Function '${r}' is forbidden. Use sum(), min(), max() for aggregation instead`,a,"E011"),["sum","min","max"].includes(r)&&o.length===1){n==="action"&&this.error(`Primitive aggregation '${r}()' can only be used in computed expressions, not in actions`,a,"E009");let c=o[0];c.kind==="functionCall"&&this.error(`Primitive aggregation '${r}()' does not allow composition. Use a direct reference, not '${c.name}()'`,a,"E010")}switch(r){case"eq":case"neq":break;case"len":case"sum":o.length!==1&&this.error(`Function '${r}' expects 1 argument, got ${o.length}`,a,"E_ARG_COUNT");break;case"add":case"sub":case"mul":case"div":case"mod":case"absDiff":case"idiv":case"gt":case"gte":case"lt":case"lte":o.length!==2&&this.error(`Function '${r}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"not":case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":case"isNull":case"isNotNull":case"trim":case"lower":case"upper":case"strlen":case"keys":case"values":case"entries":case"first":case"last":case"typeof":case"toString":case"toNumber":case"toBoolean":case"reverse":case"unique":case"flat":case"fromEntries":o.length!==1&&this.error(`Function '${r}' expects 1 argument, got ${o.length}`,a,"E_ARG_COUNT");break;case"pow":case"findById":case"existsById":case"filter":case"map":case"find":case"every":case"some":case"at":case"includes":case"field":case"hasKey":case"pick":case"omit":case"startsWith":case"endsWith":case"strIncludes":case"indexOf":o.length!==2&&this.error(`Function '${r}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"updateById":case"clamp":o.length!==3&&this.error(`Function '${r}' expects 3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"removeById":case"streak":o.length!==2&&this.error(`Function '${r}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"slice":case"substring":case"substr":case"replace":(o.length<2||o.length>3)&&this.error(`Function '${r}' expects 2-3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"split":o.length!==2&&this.error(`Function '${r}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"and":case"or":case"concat":case"min":case"max":case"merge":case"coalesce":case"append":o.length<1&&this.error(`Function '${r}' expects at least 1 argument`,a,"E_ARG_COUNT");break;case"match":o.length<3&&this.error("Function 'match' expects a selector, at least one [key, value] arm, and a default value",a,"E050");break;case"argmax":case"argmin":o.length<2&&this.error(`Function '${r}' expects at least one [label, eligible, score] candidate and a tie-break literal`,a,"E052");break;case"if":case"cond":o.length!==3&&this.error(`Function '${r}' expects 3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;default:this.error(`Unknown function '${r}'. Check spelling or see MEL builtin function reference`,a,"E_UNKNOWN_FN");break}let s=[];if(["filter","map","find","every","some"].includes(r)&&o.length>0){let c=this.validateExpr(o[0],n,i);s.push(c);let l=i;if(this.symbols){let d=_(c,this.symbols);d&&(l=Pn(i,d))}for(let d=1;d<o.length;d+=1)s.push(this.validateExpr(o[d],n,d===1?l:i))}else for(let c of o)s.push(this.validateExpr(c,n,i));if(this.symbols)switch(r){case"eq":case"neq":o.length===2&&this.validatePrimitiveEquality(o[0],o[1],s[0],s[1],a);break;case"add":case"sub":case"mul":case"div":case"mod":case"absDiff":case"idiv":case"pow":o.length===2&&(this.requireAssignable(s[0],y("number",o[0].location),o[0].location,`Function '${r}' expects a numeric first argument`),this.requireAssignable(s[1],y("number",o[1].location),o[1].location,`Function '${r}' expects a numeric second argument`));break;case"gt":case"gte":case"lt":case"lte":o.length===2&&(this.requireAssignable(s[0],y("number",o[0].location),o[0].location,`Function '${r}' expects a numeric first argument`),this.requireAssignable(s[1],y("number",o[1].location),o[1].location,`Function '${r}' expects a numeric second argument`));break;case"and":case"or":for(let[c,l]of o.entries())this.requireAssignable(s[c],y("boolean",l.location),l.location,`Function '${r}' expects boolean arguments`);break;case"not":o.length===1&&this.requireAssignable(s[0],y("boolean",o[0].location),o[0].location,"Function 'not' expects a boolean argument");break;case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":o.length===1&&this.requireAssignable(s[0],y("number",o[0].location),o[0].location,`Function '${r}' expects a numeric argument`);break;case"clamp":if(o.length===3){this.requireAssignable(s[0],y("number",o[0].location),o[0].location,"Function 'clamp' expects a numeric first argument"),this.requireAssignable(s[1],y("number",o[1].location),o[1].location,"Function 'clamp' expects a numeric second argument"),this.requireAssignable(s[2],y("number",o[2].location),o[2].location,"Function 'clamp' expects a numeric third argument");let c=xe(o[1]),l=xe(o[2]);typeof c=="number"&&typeof l=="number"&&c>l&&this.error("Function 'clamp' requires literal bounds in lo, hi order",a,"E049")}break;case"streak":o.length===2&&(this.requireAssignable(s[0],y("number",o[0].location),o[0].location,"Function 'streak' expects a numeric first argument"),this.requireAssignable(s[1],y("boolean",o[1].location),o[1].location,"Function 'streak' expects a boolean second argument"));break;case"trim":case"lower":case"upper":case"strlen":o.length===1&&this.requireAssignable(s[0],y("string",o[0].location),o[0].location,`Function '${r}' expects a string argument`);break;case"startsWith":case"endsWith":case"strIncludes":case"indexOf":case"split":o.length===2&&(this.requireAssignable(s[0],y("string",o[0].location),o[0].location,`Function '${r}' expects a string first argument`),this.requireAssignable(s[1],y("string",o[1].location),o[1].location,`Function '${r}' expects a string second argument`));break;case"replace":o.length>=2&&(this.requireAssignable(s[0],y("string",o[0].location),o[0].location,"Function 'replace' expects a string first argument"),this.requireAssignable(s[1],y("string",o[1].location),o[1].location,"Function 'replace' expects a string second argument")),o.length===3&&this.requireAssignable(s[2],y("string",o[2].location),o[2].location,"Function 'replace' expects a string replacement argument");break;case"substring":case"substr":o.length>=2&&(this.requireAssignable(s[0],y("string",o[0].location),o[0].location,`Function '${r}' expects a string first argument`),this.requireAssignable(s[1],y("number",o[1].location),o[1].location,`Function '${r}' expects a numeric second argument`)),o.length===3&&this.requireAssignable(s[2],y("number",o[2].location),o[2].location,`Function '${r}' expects a numeric third argument`);break;case"len":o.length===1&&this.requireLenCompatible(s[0],o[0].location);break;case"filter":case"find":case"every":case"some":o.length===2&&(this.requireArrayCompatible(s[0],o[0].location,r),this.requireAssignable(s[1],y("boolean",o[1].location),o[1].location,`Function '${r}' requires a boolean-valued callback`));break;case"map":o.length===2&&this.requireArrayCompatible(s[0],o[0].location,r);break;case"coalesce":this.validateCoalesceTypes(s,a);break;case"match":this.validateMatchCall(o,s,a,i);break;case"argmax":case"argmin":this.validateArgSelectionCall(r,o,a,i);break;case"if":case"cond":o.length===3&&this.requireAssignable(s[0],y("boolean",o[0].location),o[0].location,`Function '${r}' expects a boolean condition`);break}}validatePrimitiveEquality(e,n,i,r,o){if(!this.symbols)return;if(e.kind==="objectLiteral"||e.kind==="arrayLiteral"||n.kind==="objectLiteral"||n.kind==="arrayLiteral"){this.error("eq/neq operands must be compatible primitive types, not object or array literals",o,"E_TYPE_MISMATCH");return}Dt(i,r,this.symbols)===!1&&this.error(`eq/neq operands must be compatible primitive types, got ${x(i,this.symbols)} and ${x(r,this.symbols)}`,o,"E_TYPE_MISMATCH")}inferType(e,n){return this.symbols?k(e,n,this.symbols):null}requireAssignable(e,n,i,r){if(!this.symbols||!e)return;q(e,n,this.symbols)===!1&&this.error(`${r}, got ${x(e,this.symbols)}`,i,"E_TYPE_MISMATCH")}requireArrayCompatible(e,n,i){if(!this.symbols||!e)return;Rt(e,this.symbols)===!1&&this.error(`Function '${i}' expects an array first argument, got ${x(e,this.symbols)}`,n,"E_TYPE_MISMATCH")}requireLenCompatible(e,n){if(!this.symbols||!e)return;Lt(e,this.symbols)===!1&&this.error(`Function 'len' expects a string, array, object, or record argument, got ${x(e,this.symbols)}`,n,"E_TYPE_MISMATCH")}validateCoalesceTypes(e,n){if(!this.symbols)return;let i=e.map(r=>Cn(r,this.symbols)).filter(r=>r!==null);for(let r=0;r<i.length;r+=1)for(let o=r+1;o<i.length;o+=1)if(Xe(i[r],i[o],this.symbols)===!1){this.error(`coalesce arguments must have compatible non-null types, got ${x(i[r],this.symbols)} and ${x(i[o],this.symbols)}`,n,"E_TYPE_MISMATCH");return}}validateMatchCall(e,n,i,r){if(!this.symbols||e.length<3)return;let o=n[0],a=Qe(o,this.symbols);a==="invalid"&&this.error(`Function 'match' requires a selector of type string, number, or boolean, got ${x(o,this.symbols)}`,e[0].location,"E_TYPE_MISMATCH");let s=new Set,c=[];for(let l=1;l<e.length-1;l+=1){let d=e[l];if(d.kind!=="arrayLiteral"||d.elements.length!==2){this.error("Function 'match' requires each arm to be an inline [key, value] array literal",d.location,"E050");continue}let[u,m]=d.elements,g=Mt(u);if(g==null)this.error("Function 'match' requires literal string, number, or boolean arm keys",u.location,"E050");else{let O=`${typeof g}:${String(g)}`;s.has(O)?this.error(`Function 'match' has duplicate arm key ${JSON.stringify(g)}`,u.location,"E051"):s.add(O)}let N=this.inferType(u,r),S=Qe(N,this.symbols);(S==="invalid"||a!==null&&S!==null&&a!==S)&&this.error(`Function 'match' selector and arm keys must use the same primitive type, got ${x(o,this.symbols)} and ${x(N,this.symbols)}`,u.location,"E_TYPE_MISMATCH"),c.push(this.inferType(m,r))}c.push(n[n.length-1]);for(let l=0;l<c.length;l+=1)for(let d=l+1;d<c.length;d+=1)if(Xe(c[l],c[d],this.symbols)===!1){this.error(`Function 'match' arm values and default must have compatible types, got ${x(c[l],this.symbols)} and ${x(c[d],this.symbols)}`,i,"E_TYPE_MISMATCH");return}}validateArgSelectionCall(e,n,i,r){if(!this.symbols||n.length<2)return;let o=n[n.length-1],a=Mt(o);a!=="first"&&a!=="last"&&this.error(`Function '${e}' requires a final tie-break literal of "first" or "last"`,o.location,"E052");let s=[],c=null;for(let l=0;l<n.length-1;l+=1){let d=n[l];if(d.kind!=="arrayLiteral"||d.elements.length!==3){this.error(`Function '${e}' requires inline [label, eligible, score] array literal candidates`,d.location,"E052");continue}let[u,m,g]=d.elements,N=this.inferType(u,r),S=Qe(N,this.symbols);S==="invalid"?this.error(`Function '${e}' requires labels with exactly one primitive scalar type, got ${x(N,this.symbols)}`,u.location,"E_TYPE_MISMATCH"):c===null?c=S:S!==null&&S!==c&&this.error(`Function '${e}' candidate labels must share one primitive scalar type, got ${c} and ${S}`,u.location,"E_TYPE_MISMATCH"),this.requireAssignable(this.inferType(m,r),y("boolean",m.location),m.location,`Function '${e}' expects a boolean eligible value`),this.requireAssignable(this.inferType(g,r),y("number",g.location),g.location,`Function '${e}' expects a numeric score value`),s.push(N)}for(let l=0;l<s.length;l+=1)for(let d=l+1;d<s.length;d+=1)if(Xe(s[l],s[d],this.symbols)===!1){this.error(`Function '${e}' candidate labels must have compatible scalar types, got ${x(s[l],this.symbols)} and ${x(s[d],this.symbols)}`,i,"E_TYPE_MISMATCH");return}}error(e,n,i){this.ctx.diagnostics.push({severity:"error",code:i,message:e,location:n})}warn(e,n,i){this.ctx.diagnostics.push({severity:"warning",code:i,message:e,location:n})}};function Ft(t){let n=new Je().validate(t),i=Ct(t),r=[...n.diagnostics,...i];return{valid:!r.some(o=>o.severity==="error"),diagnostics:r}}var Ze={mode:"schema",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!1},et={mode:"action",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!1},tt={mode:"action",allowSysPaths:{prefixes:["input"]},fnTableVersion:"1.0",allowItem:!1},nt={mode:"action",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!0},Dn={allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0"};var F=class extends Error{code;path;details;constructor(e,n,i){super(n),this.name="LoweringError",this.code=e,this.path=i?.path,this.details=i?.details}};function ve(t,e,n){return new F("INVALID_KIND_FOR_CONTEXT",`Node kind '${t}' is not allowed in ${e} context`,{path:n,details:{kind:t,context:e}})}function f(t,e){return new F("UNKNOWN_CALL_FN",`Unknown function '${t}' in call expression`,{path:e,details:{fn:t}})}function we(t,e){return new F("INVALID_SYS_PATH",`System path '${t.join(".")}' is not allowed in Translator path`,{path:e,details:{sysPath:t}})}function it(t,e){return new F("UNSUPPORTED_BASE",`Unsupported base expression kind '${t}'. Only var(item) is supported.`,{path:e,details:{baseKind:t}})}function Rn(t,e){return new F("INVALID_SHAPE",`Invalid node shape: ${t}`,{path:e,details:{description:t}})}function rt(t,e){return new F("UNKNOWN_NODE_KIND",`Unknown expression node kind '${t}'`,{path:e,details:{kind:t}})}function Ln(t,e){let n=Array.from(t),i=Array.from(e),r=Math.min(n.length,i.length);for(let o=0;o<r;o+=1){let a=n[o].codePointAt(0)??0,s=i[o].codePointAt(0)??0;if(a!==s)return a-s}return n.length-i.length}function Ot(t){return t.map((e,n)=>({item:e,index:n})).sort((e,n)=>{let i=Ln(e.item.key,n.item.key);return i!==0?i:e.index-n.index}).map(({item:e})=>e)}function p(t,e){switch(t.kind){case"lit":return Fn(t);case"var":return On(t,e);case"sys":return jn(t,e);case"get":return _n(t,e);case"field":return jt(t,e);case"call":return $n(t,e);case"obj":return Bn(t,e);case"arr":return Un(t,e);default:throw rt(t.kind)}}function Fn(t){return{kind:"lit",value:t.value}}function On(t,e){if(!e.allowItem)throw ve("var",e.mode);return{kind:"get",path:"$item"}}function jn(t,e){if(t.path.length===0)throw we(t.path);let n=t.path[0];if(!(e.allowSysPaths?.prefixes??["meta","input"]).includes(n))throw we(t.path);return{kind:"get",path:t.path.join(".")}}function _n(t,e){let n=t.path.map(i=>i.name).join(".");if(t.base===void 0)return{kind:"get",path:n};if(t.base.kind==="var"&&t.base.name==="item"){if(!e.allowItem)throw ve("var",e.mode);return{kind:"get",path:`$item.${n}`}}throw it(t.base.kind)}function jt(t,e){if(t.object.kind==="get"&&t.object.base===void 0){let n=t.object.path.map(i=>i.name).join(".");return{kind:"get",path:n?`${n}.${t.property}`:t.property}}return{kind:"field",object:p(t.object,e),property:t.property}}function $n(t,e){let{fn:n,args:i}=t;if(n==="absDiff"){if(i.length!==2)throw f(n);return{kind:"abs",arg:{kind:"sub",left:p(i[0],e),right:p(i[1],e)}}}if(n==="clamp"){if(i.length!==3)throw f(n);return{kind:"min",args:[{kind:"max",args:[p(i[0],e),p(i[1],e)]},p(i[2],e)]}}if(n==="idiv"){if(i.length!==2)throw f(n);return{kind:"floor",arg:{kind:"div",left:p(i[0],e),right:p(i[1],e)}}}if(n==="streak"){if(i.length!==2)throw f(n);return{kind:"if",cond:p(i[1],e),then:{kind:"add",left:p(i[0],e),right:{kind:"lit",value:1}},else:{kind:"lit",value:0}}}if(n==="match")return Gn(i,e);if(n==="argmax"||n==="argmin")return qn(n,i,e);if(Wn(n)){if(i.length!==2)throw f(n);let[r,o]=i;return{kind:n,left:p(r,e),right:p(o,e)}}if(n==="isNotNull"){if(i.length!==1)throw f(n);return{kind:"not",arg:{kind:"isNull",arg:p(i[0],e)}}}if(_t(n)){if(i.length!==1)throw f(n);return{kind:Yn(n),arg:p(i[0],e)}}if(n==="trim"){if(i.length!==1)throw f(n);return{kind:"trim",str:p(i[0],e)}}if(n==="lower"||n==="toLowerCase"){if(i.length!==1)throw f(n);return{kind:"toLowerCase",str:p(i[0],e)}}if(n==="upper"||n==="toUpperCase"){if(i.length!==1)throw f(n);return{kind:"toUpperCase",str:p(i[0],e)}}if(n==="strlen"||n==="strLen"){if(i.length!==1)throw f(n);return{kind:"strLen",str:p(i[0],e)}}if(Qn(n))return i.length===1?{kind:n==="min"?"minArray":"maxArray",array:p(i[0],e)}:{kind:n,args:i.map(r=>p(r,e))};if(n==="sum"){if(i.length!==1)throw f(n);return{kind:"sumArray",array:p(i[0],e)}}if(n==="pow"){if(i.length!==2)throw f(n);return{kind:"pow",base:p(i[0],e),exponent:p(i[1],e)}}if(Xn(n))return{kind:n,args:i.map(r=>p(r,e))};if(n==="if"||n==="cond"){if(i.length!==3)throw f(n);return{kind:"if",cond:p(i[0],e),then:p(i[1],e),else:p(i[2],e)}}if(n==="field"){if(i.length!==2)throw f(n);let r=p(i[0],e),o=i[1];if(o.kind!=="lit"||typeof o.value!="string")throw f(n);return jt({kind:"field",object:i[0],property:o.value},e)}if(Jn(n)){if(i.length!==1)throw f(n);return{kind:n,array:p(i[0],e)}}if(Zn(n)){if(i.length!==1)throw f(n);return{kind:n,obj:p(i[0],e)}}if(n==="at"){if(i.length!==2)throw f(n);return{kind:"at",array:p(i[0],e),index:p(i[1],e)}}if(n==="includes"){if(i.length!==2)throw f(n);return{kind:"includes",array:p(i[0],e),item:p(i[1],e)}}if(ei(n)){if(i.length!==2)throw f(n);let r={...e,allowItem:!0};return n==="map"?{kind:"map",array:p(i[0],e),mapper:p(i[1],r)}:{kind:n,array:p(i[0],e),predicate:p(i[1],r)}}if(n==="slice"){if(i.length<2||i.length>3)throw f(n);let r={kind:"slice",array:p(i[0],e),start:p(i[1],e)};return i.length===3&&(r.end=p(i[2],e)),r}if(n==="substring"||n==="substr"){if(i.length<2||i.length>3)throw f(n);let r={kind:"substring",str:p(i[0],e),start:p(i[1],e)};return i.length===3&&(r.end=p(i[2],e)),r}if(n==="append"){if(i.length<1)throw f(n);return{kind:"append",array:p(i[0],e),items:i.slice(1).map(r=>p(r,e))}}if(n==="merge")return{kind:"merge",objects:i.map(r=>p(r,e))};throw f(n)}function Bn(t,e){let n={};for(let i of Ot(t.fields))n[i.key]=p(i.value,e);return{kind:"object",fields:n}}function Un(t,e){if(t.elements.every(r=>r.kind==="lit"))return{kind:"lit",value:t.elements.map(o=>o.value)};let i=t.elements.map(r=>p(r,e));return i.length===0?{kind:"lit",value:[]}:{kind:"append",array:{kind:"lit",value:[]},items:i}}function Gn(t,e){if(t.length<3)throw f("match");let n=p(t[0],e),i=p(t[t.length-1],e);for(let r=t.length-2;r>=1;r-=1){let o=t[r];if(o.kind!=="arr"||o.elements.length!==2)throw f("match");i={kind:"if",cond:{kind:"eq",left:n,right:p(o.elements[0],e)},then:p(o.elements[1],e),else:i}}return i}function qn(t,e,n){if(e.length<2)throw f(t);let i=e[e.length-1];if(i.kind!=="lit"||i.value!=="first"&&i.value!=="last")throw f(t);let r=e.slice(0,-1).map(o=>Hn(o,n,t));if(r.length===0)throw f(t);return Vn(t,r,i.value)}function Hn(t,e,n){if(t.kind!=="arr"||t.elements.length!==3)throw f(n);return{label:p(t.elements[0],e),eligible:p(t.elements[1],e),score:p(t.elements[2],e)}}function Vn(t,e,n){let i={kind:"lit",value:null};for(let r=e.length-1;r>=0;r-=1)i={kind:"if",cond:zn(t,e,n,r),then:e[r].label,else:i};return i}function zn(t,e,n,i){let r=e[i],o=[];for(let a=0;a<e.length;a+=1){if(a===i)continue;let s=e[a];o.push({kind:"or",args:[{kind:"not",arg:s.eligible},{kind:Kn(t,n,i,a),left:r.score,right:s.score}]})}return o.length===0?r.eligible:{kind:"and",args:[r.eligible,...o]}}function Kn(t,e,n,i){let r=e==="first"?n<i:n>i;return t==="argmax"?r?"gte":"gt":r?"lte":"lt"}function Wn(t){return["eq","neq","gt","gte","lt","lte","add","sub","mul","div","mod"].includes(t)}function _t(t){return["not","neg","abs","floor","ceil","round","sqrt","len","typeof","isNull","toString"].includes(t)}function Yn(t){if(t==="isNotNull")throw f(t);if(!_t(t))throw f(t);return t}function Qn(t){return t==="min"||t==="max"}function Xn(t){return["and","or","concat","coalesce"].includes(t)}function Jn(t){return["first","last"].includes(t)}function Zn(t){return["keys","values","entries"].includes(t)}function ei(t){return["filter","find","every","some","map"].includes(t)}function ti(t,e){return t.map(n=>ni(n,e))}function ni(t,e){let n=t.condition?p(t.condition,Ae(e,"action")):void 0,i=ii(t.op,e);return{fragmentId:t.fragmentId,condition:n,op:i,confidence:t.confidence}}function ii(t,e){switch(t.kind){case"addType":return{kind:"addType",typeName:t.typeName,typeExpr:J(t.typeExpr)};case"addField":return{kind:"addField",typeName:t.typeName,field:{name:t.field.name,type:J(t.field.type),optional:t.field.optional,defaultValue:t.field.defaultValue}};case"setFieldType":return{kind:"setFieldType",path:t.path,typeExpr:J(t.typeExpr)};case"setDefaultValue":return{kind:"setDefaultValue",path:t.path,value:t.value};case"addConstraint":return{kind:"addConstraint",targetPath:t.targetPath,rule:p(t.rule,Ae(e,"schema")),message:t.message};case"addComputed":return{kind:"addComputed",name:t.name,expr:p(t.expr,Ae(e,"schema")),deps:t.deps};case"addActionAvailable":return{kind:"addActionAvailable",actionName:t.actionName,expr:p(t.expr,Ae(e,"schema"))}}}function J(t){switch(t.kind){case"primitive":return{kind:"primitive",name:t.name};case"array":return{kind:"array",element:J(t.element)};case"object":return{kind:"object",fields:t.fields.map(e=>({name:e.name,type:J(e.type),optional:e.optional}))};case"union":return{kind:"union",members:t.members.map(J)};case"literal":return{kind:"literal",value:t.value};case"ref":return{kind:"ref",name:t.name}}}function Ae(t,e){return{mode:e,allowSysPaths:t.allowSysPaths,fnTableVersion:t.fnTableVersion,actionName:t.actionName,allowItem:!1}}function ri(t,e){return t.map(n=>Ce(n,e))}function Ce(t,e){let n=t.condition?p(t.condition,e):void 0,i=t.value?p(t.value,e):void 0;return{condition:n,op:t.op,path:oi(t.path,e),value:i}}function oi(t,e){return t.map(n=>n.kind==="prop"?n:{kind:"expr",expr:p(n.expr,e)})}function A(t,e={}){switch(t.kind){case"literal":return{kind:"lit",value:ci(t.value,t.literalType)};case"identifier":return e.resolveIdentifier?.(t.name)??$(t.name);case"systemIdent":return ai(t,e);case"iterationVar":return{kind:"var",name:t.name};case"propertyAccess":return si(t.object,t.property,e);case"indexAccess":return{kind:"call",fn:"at",args:[A(t.object,e),A(t.index,e)]};case"functionCall":return{kind:"call",fn:t.name,args:t.args.map(n=>A(n,e))};case"unary":return{kind:"call",fn:t.operator==="!"?"not":"neg",args:[A(t.operand,e)]};case"binary":return{kind:"call",fn:li(t.operator),args:[A(t.left,e),A(t.right,e)]};case"ternary":return{kind:"call",fn:"cond",args:[A(t.condition,e),A(t.consequent,e),A(t.alternate,e)]};case"objectLiteral":return{kind:"obj",fields:t.properties.map(n=>({key:n.key,value:A(n.value,e)}))};case"arrayLiteral":return{kind:"arr",elements:t.elements.map(n=>A(n,e))}}}function $(...t){return{kind:"get",path:$t(...t)}}function ot(t,...e){return{kind:"get",base:t,path:$t(...e)}}function se(...t){return{kind:"sys",path:t}}function Pe(t){return{kind:"obj",fields:Object.entries(t).map(([e,n])=>({key:e,value:n}))}}function $t(...t){return t.map(e=>({kind:"prop",name:e}))}function ai(t,e){return e.resolveSystemIdent?.(t.path)??se(...t.path)}function si(t,e,n){let i=A(t,n);return i.kind==="get"?{kind:"get",...i.base?{base:i.base}:void 0,path:[...i.path,{kind:"prop",name:e}]}:i.kind==="var"&&i.name==="item"?ot(i,e):{kind:"field",object:i,property:e}}function ci(t,e){if(e==="null")return null;if(e==="number"){if(typeof t=="number")return t;if(typeof t=="bigint")return Number(t);if(typeof t=="string"&&t.length>0){let n=Number(t);if(!Number.isNaN(n))return n}throw new Error("Invalid number literal")}if(e==="string"){if(typeof t=="string")return t;throw new Error("Invalid string literal")}if(e==="boolean"){if(typeof t=="boolean")return t;throw new Error("Invalid boolean literal")}throw new Error("Unsupported literal type")}function li(t){switch(t){case"+":return"add";case"-":return"sub";case"*":return"mul";case"/":return"div";case"%":return"mod";case"==":return"eq";case"!=":return"neq";case"<":return"lt";case"<=":return"lte";case">":return"gt";case">=":return"gte";case"&&":return"and";case"||":return"or";case"??":return"coalesce"}}import{hashSchemaSync as fi,semanticPathToPatchPath as yi,sha256Sync as gi}from"@manifesto-ai/core";var di=new Set(["findById","existsById","updateById","removeById"]);function Bt(t){return{...t,computed:{fields:Object.fromEntries(Object.entries(t.computed.fields).map(([e,n])=>[e,pi(n)]))},actions:Object.fromEntries(Object.entries(t.actions).map(([e,n])=>[e,ui(n)]))}}function pi(t){return{...t,expr:Ut(t.expr)}}function ui(t){return{...t,flow:Ie(t.flow),available:t.available?Ut(t.available):void 0,dispatchable:t.dispatchable?mi(t.dispatchable):void 0}}function Ie(t){switch(t.kind){case"seq":return{kind:"seq",steps:t.steps.map(e=>Ie(e))};case"if":return{kind:"if",cond:at(t.cond),then:Ie(t.then),else:t.else?Ie(t.else):void 0};case"patch":return{kind:"patch",op:t.op,path:t.path,value:t.value?at(t.value):void 0};case"effect":return{kind:"effect",type:t.type,params:Object.fromEntries(Object.entries(t.params).map(([e,n])=>[e,hi(n)]))};case"fail":return{kind:"fail",code:t.code,message:t.message?at(t.message):void 0};case"call":case"halt":return t}}function Ut(t){return p(D(t),Ze)}function at(t){return p(D(t),et)}function mi(t){return p(D(t),tt)}function hi(t){return p(D(t),nt)}function D(t){switch(t.kind){case"lit":case"var":return t;case"sys":return t.path[0]==="system"?$("$system",...t.path.slice(1)):t;case"get":return{kind:"get",...t.base?{base:D(t.base)}:void 0,path:t.path};case"field":return{kind:"field",object:D(t.object),property:t.property};case"obj":return{kind:"obj",fields:t.fields.map(e=>({key:e.key,value:D(e.value)}))};case"arr":return{kind:"arr",elements:t.elements.map(e=>D(e))};case"call":return di.has(t.fn)?D(Gt(t.fn,t.args)):{kind:"call",fn:t.fn,args:t.args.map(e=>D(e))}}}function Gt(t,e){let[n,i,r]=e,o=D(n),a=i?D(i):{kind:"lit",value:null},s={kind:"var",name:"item"},c=ot(s,"id");switch(t){case"findById":return{kind:"call",fn:"find",args:[o,{kind:"call",fn:"eq",args:[c,a]}]};case"existsById":return{kind:"call",fn:"not",args:[{kind:"call",fn:"isNull",args:[Gt("findById",e)]}]};case"updateById":{let l=r?D(r):Pe({});return{kind:"call",fn:"map",args:[o,{kind:"call",fn:"cond",args:[{kind:"call",fn:"eq",args:[c,a]},{kind:"call",fn:"merge",args:[s,l]},s]}]}}case"removeById":return{kind:"call",fn:"filter",args:[o,{kind:"call",fn:"not",args:[{kind:"call",fn:"eq",args:[c,a]}]}]};default:return{kind:"call",fn:t,args:e.map(l=>D(l))}}}function Ei(t){return{domainName:t,stateFields:new Set,computedFields:new Set,actionParams:new Map,onceIntentCounters:new Map,currentAction:null,diagnostics:[],typeDefs:new Map,typeDefinitions:new Map,stateFieldSpecs:new Map,stateFieldTypes:new Map}}function ki(t){let e=Ei(t.domain.name);Ti(t.domain,e);let n=Ni(t.domain,e),i=bi(t.domain,e),r=xi(t.domain,e),o=Pi(t.domain,e);if(e.diagnostics.some(l=>l.severity==="error"))return{schema:null,diagnostics:e.diagnostics};let a={id:`mel:${t.domain.name.toLowerCase()}`,version:"1.0.0",types:n,state:i,computed:r,actions:o,meta:{name:t.domain.name}},s=Ui(a);return{schema:{...a,hash:s},diagnostics:e.diagnostics}}function qt(t){let e=ki(t);return e.schema?{schema:Bt(e.schema),diagnostics:e.diagnostics}:{schema:null,diagnostics:e.diagnostics}}function Ti(t,e){for(let n of t.types)e.typeDefs.set(n.name,n);for(let n of t.members)if(n.kind==="state")for(let i of n.fields)e.stateFields.add(i.name);else n.kind==="computed"?e.computedFields.add(n.name):n.kind}function Ni(t,e){let n={};for(let i of t.types){let r=H(i.typeExpr);e.typeDefinitions.set(i.name,r),n[i.name]={name:i.name,definition:r}}return n}function H(t){switch(t.kind){case"simpleType":return["string","number","boolean","null","object","array"].includes(t.name)?{kind:"primitive",type:t.name}:{kind:"ref",name:t.name};case"arrayType":return{kind:"array",element:H(t.elementType)};case"recordType":return{kind:"record",key:H(t.keyType),value:H(t.valueType)};case"objectType":let e={};for(let i of t.fields)e[i.name]={type:H(i.typeExpr),optional:i.optional};return{kind:"object",fields:e};case"unionType":return{kind:"union",types:t.types.map(H)};case"literalType":return{kind:"literal",value:t.value};default:let n=t;throw new Error(`Unknown type expression kind: ${t.kind}`)}}function bi(t,e){let n={},i={};for(let r of t.members)if(r.kind==="state")for(let o of r.fields){let a=H(o.typeExpr);i[o.name]=a,e.stateFieldTypes.set(o.name,a);let s=Y(o.typeExpr,e);s&&e.stateFieldSpecs.set(o.name,s);let c=Si(o,e);c&&(n[o.name]=c)}return{fields:n,fieldTypes:i}}function Si(t,e){let n=Y(t.typeExpr,e);if(!n)return null;let i=t.initializer?De(t.initializer,e):void 0;return i!==void 0&&le(i,H(t.typeExpr),t.name,t.location,e),{...n,required:!0,default:i}}function Y(t,e,n=[]){switch(t.kind){case"simpleType":switch(t.name){case"string":return{type:"string",required:!0};case"number":return{type:"number",required:!0};case"boolean":return{type:"boolean",required:!0};case"null":return{type:"null",required:!0};default:{let i=e.typeDefs.get(t.name);return i?n.includes(t.name)?(st(e,"E044",`Recursive type '${t.name}' cannot be lowered to FieldSpec in a schema position`,t.location),null):Y(i.typeExpr,e,[...n,t.name]):{type:"object",required:!0}}}case"unionType":{let i=t.types.filter(s=>!(s.kind==="simpleType"&&s.name==="null")&&!(s.kind==="literalType"&&s.value===null)),r=i.length!==t.types.length,o=[],a=!r;for(let s of i){if(s.kind!=="literalType"){a=!1;break}o.push(s.value)}return a&&o.length>0?{type:{enum:o},required:!0}:r&&i.length===1?Y(i[0],e,n):(st(e,"E043",`Union type '${Z(t)}' cannot be soundly lowered to FieldSpec`,t.location),null)}case"arrayType":{let i=Y(t.elementType,e,n);return i?{type:"array",required:!0,items:i}:null}case"recordType":return{type:"object",required:!0};case"literalType":return typeof t.value=="string"?{type:"string",required:!0}:typeof t.value=="number"?{type:"number",required:!0}:typeof t.value=="boolean"?{type:"boolean",required:!0}:{type:"null",required:!0};case"objectType":{let i={};for(let r of t.fields){let o=Y(r.typeExpr,e,n);if(!o)return null;i[r.name]={...o,required:!r.optional}}return{type:"object",required:!0,fields:i}}}}function st(t,e,n,i){t.diagnostics.push({severity:"error",code:e,message:n,location:i})}function Z(t){switch(t.kind){case"simpleType":return t.name;case"unionType":return t.types.map(e=>Z(e)).join(" | ");case"arrayType":return`Array<${Z(t.elementType)}>`;case"recordType":return`Record<${Z(t.keyType)}, ${Z(t.valueType)}>`;case"literalType":return JSON.stringify(t.value);case"objectType":return`{ ${t.fields.map(e=>`${e.name}${e.optional?"?":""}: ${Z(e.typeExpr)}`).join("; ")} }`}}function de(t,e,n=[]){if(t.kind!=="ref")return t;if(n.includes(t.name))return null;let i=e.typeDefinitions.get(t.name);return i?de(i,e,[...n,t.name]):null}function V(t){switch(t.kind){case"primitive":return t.type;case"array":return`Array<${V(t.element)}>`;case"record":return`Record<${V(t.key)}, ${V(t.value)}>`;case"object":return`{ ${Object.entries(t.fields).map(([e,n])=>`${e}${n.optional?"?":""}: ${V(n.type)}`).join("; ")} }`;case"union":return t.types.map(e=>V(e)).join(" | ");case"literal":return JSON.stringify(t.value);case"ref":return t.name}}function ce(t,e,n){let i=de(e,n);if(!i)return!1;switch(i.kind){case"primitive":switch(i.type){case"null":return t===null;case"string":return typeof t=="string";case"number":return typeof t=="number";case"boolean":return typeof t=="boolean";case"object":return t!==null&&!Array.isArray(t)&&typeof t=="object";case"array":return Array.isArray(t);default:return!1}case"literal":return Object.is(t,i.value);case"array":return Array.isArray(t)&&t.every(r=>ce(r,i.element,n));case"record":return t!==null&&!Array.isArray(t)&&typeof t=="object"&&Object.values(t).every(r=>ce(r,i.value,n));case"object":if(t===null||Array.isArray(t)||typeof t!="object")return!1;for(let r of Object.keys(t))if(!(r in i.fields))return!1;for(let[r,o]of Object.entries(i.fields)){if(!(r in t)){if(!o.optional)return!1;continue}if(!ce(t[r],o.type,n))return!1}return!0;case"union":return i.types.some(r=>ce(t,r,n));case"ref":return!1}}function le(t,e,n,i,r){if(t===void 0)return;let o=de(e,r);if(!o){r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${V(e)}, got ${JSON.stringify(t)}`,location:i});return}if(o.kind==="union"){if(ce(t,o,r))return;r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${V(o)}, got ${JSON.stringify(t)}`,location:i});return}switch(o.kind){case"primitive":{let a=Array.isArray(t)?"array":t===null?"null":typeof t;switch(o.type){case"null":t!==null&&W(r,n,"null",a,i);return;case"string":case"number":case"boolean":typeof t!==o.type&&W(r,n,o.type,a,i);return;case"object":(t===null||Array.isArray(t)||typeof t!="object")&&W(r,n,"object",a,i);return;case"array":Array.isArray(t)||W(r,n,"array",a,i);return}return}case"literal":Object.is(t,o.value)||r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects literal ${JSON.stringify(o.value)}, got ${JSON.stringify(t)}`,location:i});return;case"array":if(!Array.isArray(t)){W(r,n,"array",t===null?"null":typeof t=="object"?"object":typeof t,i);return}for(let a=0;a<t.length;a+=1)le(t[a],o.element,`${n}[${a}]`,i,r);return;case"record":if(t===null||Array.isArray(t)||typeof t!="object"){let a=Array.isArray(t)?"array":t===null?"null":typeof t;W(r,n,"object",a,i);return}for(let[a,s]of Object.entries(t))le(s,o.value,`${n}.${a}`,i,r);return;case"object":if(t===null||Array.isArray(t)||typeof t!="object"){let a=Array.isArray(t)?"array":t===null?"null":typeof t;W(r,n,"object",a,i);return}for(let a of Object.keys(t))a in o.fields||r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is not declared in ${V(o)}`,location:i});for(let[a,s]of Object.entries(o.fields)){if(!(a in t)){s.optional||r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is required`,location:i});continue}le(t[a],s.type,`${n}.${a}`,i,r)}return;case"ref":r.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${V(e)}, got ${JSON.stringify(t)}`,location:i});return}}function W(t,e,n,i,r){t.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${e}' expects ${n}, got ${i}`,location:r})}function De(t,e){switch(t.kind){case"literal":return t.value;case"arrayLiteral":return t.elements.map(n=>De(n,e));case"objectLiteral":{let n={};for(let i of t.properties)n[i.key]=De(i.value,e);return n}default:return}}function xi(t,e){let n=[],i=0;for(let o of t.members)if(o.kind==="computed"){let a=B(o.expression,e),s=Ci(a);n.push({name:o.name,deps:s,expr:a,location:o.location,order:i}),i+=1}let r={};for(let o of vi(n,e))r[o.name]={deps:o.deps,expr:o.expr};return{fields:r}}function vi(t,e){if(t.length<=1)return[...t];let n=new Map(t.map(c=>[c.name,c])),i=new Map,r=new Map,o=new Map;for(let c of t)r.set(c.name,[]),o.set(c.name,0);for(let c of t){let l=Array.from(new Set(c.deps.filter(d=>n.has(d))));i.set(c.name,l),o.set(c.name,l.length);for(let d of l)r.get(d).push(c.name)}let a=t.filter(c=>(o.get(c.name)??0)===0).map(c=>c.name),s=[];for(;a.length>0;){let c=a.shift();s.push(n.get(c));for(let l of r.get(c)??[]){let d=(o.get(l)??0)-1;o.set(l,d),d===0&&wi(a,l,n)}}if(s.length!==t.length){let c=new Set(s.map(m=>m.name)),l=t.filter(m=>!c.has(m.name)),d=Ai(l[0].name,i),u=d?d.join(" -> "):l.map(m=>m.name).join(", ");return st(e,"E040",`Circular computed dependency: ${u}`,(d?n.get(d[0]):l[0]).location),[...t]}return s}function wi(t,e,n){let i=n.get(e)?.order??Number.MAX_SAFE_INTEGER,r=t.length;for(let o=0;o<t.length;o+=1){let a=n.get(t[o])?.order??Number.MAX_SAFE_INTEGER;if(i<a){r=o;break}}t.splice(r,0,e)}function Ai(t,e){let n=new Set,i=[],r=new Set;function o(a){n.add(a),i.push(a),r.add(a);for(let s of e.get(a)??[])if(n.has(s)){if(r.has(s)){let c=i.indexOf(s);return[...i.slice(c),s]}}else{let c=o(s);if(c)return c}return i.pop(),r.delete(a),null}return o(t)}function Ci(t){let e=new Set;function n(i){switch(i.kind){case"lit":case"sys":case"var":return;case"get":i.base===void 0?e.add(i.path.map(r=>r.name).join(".")):n(i.base);return;case"field":n(i.object);return;case"call":for(let r of i.args)n(r);return;case"obj":for(let r of i.fields)n(r.value);return;case"arr":for(let r of i.elements)n(r);return}}return n(t),Array.from(e)}function Pi(t,e){let n={};for(let i of t.members)if(i.kind==="action"){e.currentAction=i.name,e.onceIntentCounters.set(i.name,0);let r=new Set;for(let u of i.params)r.add(u.name);e.actionParams.set(i.name,r);let o=i.params.map(u=>u.name),a=Ht(i.body,e),s,c;if(i.params.length>0){let u={},m={};for(let g of i.params){let N=Y(g.typeExpr,e);N&&(u[g.name]=structuredClone(N),m[g.name]={type:H(g.typeExpr),optional:!1})}s={type:"object",required:!0,fields:u},c={kind:"object",fields:m}}let l;i.available&&(l=B(i.available,e));let d;i.dispatchable&&(d=B(i.dispatchable,e,{preferActionParams:!0})),n[i.name]={flow:a,input:s,inputType:c,params:o,available:l,dispatchable:d},e.currentAction=null}return n}function Ht(t,e){return t.length===0?{kind:"seq",steps:[]}:t.length===1?Re(t[0],e):{kind:"seq",steps:t.map(n=>Re(n,e))}}function Re(t,e){switch(t.kind){case"when":return Ii(t,e);case"once":return Mi(t,e);case"onceIntent":return Di(t,e);case"patch":return Ri(t,e);case"effect":return Li(t,e);case"fail":return Oi(t,e);case"stop":return ji(t,e);case"include":return{kind:"seq",steps:[]}}}function Ii(t,e){let n=B(t.condition,e),i=Ht(t.body,e);return{kind:"if",cond:n,then:i}}function Mi(t,e){let n=ct(t.marker,e),i=se("meta","intentId"),r=Le("neq",[$(...Vt(n)),i]);if(t.condition){let s=B(t.condition,e);r=Le("and",[r,s])}let o={kind:"patch",op:"set",path:lt(n),value:i},a=t.body.map(s=>Re(s,e));return{kind:"if",cond:r,then:{kind:"seq",steps:[o,...a]}}}function Di(t,e){let n=e.currentAction??"unknown",i=e.onceIntentCounters.get(n)??0;e.onceIntentCounters.set(n,i+1);let r=gi(`${n}:${i}:intent`),o=`$mel.guards.intent.${r}`,a=se("meta","intentId"),s=Le("neq",[$(...Vt(o)),a]);if(t.condition){let d=B(t.condition,e);s=Le("and",[s,d])}let c={kind:"patch",op:"merge",path:lt("$mel.guards.intent"),value:Pe({[r]:a})},l=t.body.map(d=>Re(d,e));return{kind:"if",cond:s,then:{kind:"seq",steps:[c,...l]}}}function Ri(t,e){let n=ct(t.path,e),i={kind:"patch",op:t.op,path:lt(n)};if(t.value){let r=B(t.value,e);if(i.value=r,t.op==="set"){let o=t.path.segments[0];if(o.kind==="propertySegment"){let a=e.stateFieldTypes.get(o.name);if(a){let s=a,c=t.path.segments;for(let l=1;l<c.length;l++){let d=c[l],u=s?de(s,e):null;if(!u){s=null;break}if(u.kind==="union"){let m=u.types.filter(g=>{let N=de(g,e);return!(N?.kind==="primitive"&&N.type==="null")&&!(N?.kind==="literal"&&N.value===null)});if(m.length!==1){s=null;break}s=m[0],l-=1;continue}if(d.kind==="propertySegment"&&u.kind==="object"&&u.fields[d.name])s=u.fields[d.name].type;else if(d.kind==="propertySegment"&&u.kind==="record")s=u.value;else if(d.kind==="indexSegment"&&u.kind==="array")s=u.element;else{s=null;break}}if(s){let l=Fi(t.value,e);if(l!==void 0){let d=t.path.segments.map(u=>u.kind==="propertySegment"?u.name:"[*]").join(".");le(l,s,d,t.location,e)}}}}}}return i}function Li(t,e){let n={};for(let i of t.args)i.isPath?n[i.name]={kind:"lit",value:ct(i.value,e)}:n[i.name]=B(i.value,e);return{kind:"effect",type:t.effectType,params:n}}function Fi(t,e){return De(t,e)}function Oi(t,e){let n={kind:"fail",code:t.code};return t.message&&(n.message=B(t.message,e)),n}function ji(t,e){return{kind:"halt",reason:t.reason}}function _i(t){return t.replaceAll("\\","\\\\").replaceAll(".","\\.")}function Me(...t){return t.map(_i).join(".")}function ct(t,e){let n=[];for(let r of t.segments)if(r.kind==="propertySegment")n.push(r.name);else{let o=B(r.index,e);o.kind==="lit"?n.push(String(o.value)):n.push("*")}let i=n[0];return e.stateFields.has(i)?Me(...n):e.computedFields.has(i)?Me(...n):e.currentAction&&e.actionParams.get(e.currentAction)?.has(i)?`input.${Me(...n)}`:Me(...n)}function lt(t){return yi(t)}function Le(t,e){return{kind:"call",fn:t,args:e}}function Vt(t){return t.split(/(?<!\\)\./g).map(e=>e.replaceAll("\\.",".").replaceAll("\\\\","\\"))}function B(t,e,n={}){return A(t,{resolveIdentifier:i=>$i(i,e,n),resolveSystemIdent:i=>Bi(i,e)})}function $i(t,e,n={}){return n.preferActionParams&&e.currentAction&&e.actionParams.get(e.currentAction)?.has(t)?$("input",t):e.stateFields.has(t)||e.computedFields.has(t)?$(t):e.currentAction&&e.actionParams.get(e.currentAction)?.has(t)?$("input",t):(e.diagnostics.push({severity:"error",code:"E_UNKNOWN_IDENT",message:`Unknown identifier '${t}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),$(t))}function Bi(t,e){let[n,...i]=t;switch(n){case"system":case"meta":case"input":return se(n,...i);default:return e.diagnostics.push({severity:"error",code:"E_INVALID_SYSTEM",message:`Invalid system identifier namespace '$${n}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),{kind:"lit",value:null}}}function Ui(t){return fi(t)}var dt=16;function T(t){return structuredClone(t)}function w(t,e,n,i,r){let o=`${n}:${r.start.offset}:${r.end.offset}:${i}`;e.has(o)||(e.add(o),t.push(ke(n,i,r)))}function Gi(t){let e=new Map,n=new Set,i=new Map,r=new Set,o=new Map;for(let a of t.types)i.set(a.name,a);for(let a of t.members)switch(a.kind){case"state":for(let s of a.fields)e.set(s.name,s.typeExpr);break;case"computed":n.add(a.name);break;case"action":r.add(a.name);break;case"flow":o.has(a.name)||o.set(a.name,a);break}return{stateTypes:e,computedNames:n,typeDefs:i,actionNames:r,flows:o}}function qi(t){let e=new Map;for(let n of t.params)e.set(n.name,n.typeExpr);return e}function Hi(t){let e=new Map;for(let n of t.params)e.set(n.name,n.typeExpr);return e}function Vi(t,e,n,i){let r=new Map;for(let o of e.flows.values()){r.set(o.name,[]),e.actionNames.has(o.name)&&w(n,i,"E022",`Flow '${o.name}' conflicts with action '${o.name}'.`,o.location);for(let s of o.params)(e.stateTypes.has(s.name)||e.computedNames.has(s.name)||e.typeDefs.has(s.name))&&w(n,i,"E021",`Flow parameter '${s.name}' conflicts with a top-level identifier.`,s.location);let a=qi(o);for(let s of o.body)Ki(s,o.name,a,e,n,i,r.get(o.name))}for(let o of t.members)if(o.kind==="action"){let a=Hi(o);for(let s of o.body)zi(s,a,e,n,i)}return r}function zi(t,e,n,i,r){switch(t.kind){case"include":Oe(t,e,n,i,r);break;case"when":for(let o of t.body)te(o,e,n,i,r);break;case"once":for(let o of t.body)te(o,e,n,i,r);break;case"onceIntent":for(let o of t.body)te(o,e,n,i,r);break;case"fail":case"stop":break}}function te(t,e,n,i,r){switch(t.kind){case"include":w(i,r,"E016","include is only allowed at action or flow body top-level.",t.location),Oe(t,e,n,i,r);break;case"when":for(let o of t.body)te(o,e,n,i,r);break;case"once":for(let o of t.body)te(o,e,n,i,r);break;case"onceIntent":for(let o of t.body)te(o,e,n,i,r);break;case"patch":case"effect":case"fail":case"stop":break}}function Ki(t,e,n,i,r,o,a){switch(t.kind){case"include":Oe(t,n,i,r,o)&&a.push({target:t.flowName,location:t.location});break;case"when":for(let s of t.body)Fe(s,e,n,i,r,o);break;case"once":w(r,o,"E017","once() is not allowed in flow bodies.",t.location);break;case"onceIntent":w(r,o,"E018","onceIntent is not allowed in flow bodies.",t.location);break;case"patch":w(r,o,"E019","patch is not allowed in flow bodies.",t.location);break;case"effect":w(r,o,"E020","effect is not allowed in flow bodies.",t.location);break}}function Fe(t,e,n,i,r,o){switch(t.kind){case"include":w(r,o,"E016","include is only allowed at action or flow body top-level.",t.location),Oe(t,n,i,r,o);break;case"when":for(let a of t.body)Fe(a,e,n,i,r,o);break;case"once":w(r,o,"E017","once() is not allowed in flow bodies.",t.location);for(let a of t.body)Fe(a,e,n,i,r,o);break;case"onceIntent":w(r,o,"E018","onceIntent is not allowed in flow bodies.",t.location);for(let a of t.body)Fe(a,e,n,i,r,o);break;case"patch":w(r,o,"E019","patch is not allowed in flow bodies.",t.location);break;case"effect":w(r,o,"E020","effect is not allowed in flow bodies.",t.location);break;case"fail":case"stop":break}}function Oe(t,e,n,i,r){let o=n.flows.get(t.flowName);if(!o)return w(i,r,"E015",`'${t.flowName}' is not a declared flow.`,t.location),!1;if(t.args.length!==o.params.length)return w(i,r,"E023",`include '${t.flowName}' expected ${o.params.length} argument(s), got ${t.args.length}.`,t.location),!0;for(let a=0;a<t.args.length;a+=1){let s=t.args[a],c=o.params[a],l=pe(s,e,n);if(!l)continue;ee(l,c.typeExpr,n)===!1&&w(i,r,"E024",`include '${t.flowName}' argument ${a+1} is not assignable to parameter '${c.name}'.`,s.location)}return!0}function Wi(t,e,n,i){function r(o,a,s){s.add(o);for(let c of t.get(o)??[]){if(a+1>dt){w(n,i,"E014",`Include expansion depth exceeds limit (${dt}).`,c.location);continue}if(s.has(c.target)){w(n,i,"E013","Circular include detected.",c.location);continue}r(c.target,a+1,new Set(s))}}for(let o of e.flows.keys())r(o,1,new Set)}function P(t,e){switch(t.kind){case"identifier":return e.has(t.name)?T(e.get(t.name)):T(t);case"systemIdent":case"literal":case"iterationVar":return T(t);case"functionCall":return{...T(t),args:t.args.map(n=>P(n,e))};case"binary":return{...T(t),left:P(t.left,e),right:P(t.right,e)};case"unary":return{...T(t),operand:P(t.operand,e)};case"ternary":return{...T(t),condition:P(t.condition,e),consequent:P(t.consequent,e),alternate:P(t.alternate,e)};case"propertyAccess":return{...T(t),object:P(t.object,e)};case"indexAccess":return{...T(t),object:P(t.object,e),index:P(t.index,e)};case"objectLiteral":return{...T(t),properties:t.properties.map(n=>({...T(n),value:P(n.value,e)}))};case"arrayLiteral":return{...T(t),elements:t.elements.map(n=>P(n,e))}}}function Yi(t,e){switch(t.kind){case"when":return[zt(t,e)];case"fail":return[{...T(t),message:t.message?P(t.message,e):void 0}];case"stop":return[T(t)];case"patch":case"effect":case"once":case"onceIntent":case"include":return[]}}function zt(t,e){return{...T(t),condition:P(t.condition,e),body:t.body.flatMap(n=>Yi(n,e))}}function Qi(t,e,n){let i=new Map;for(let r=0;r<t.params.length;r+=1)i.set(t.params[r].name,P(e.args[r],n));return i}function Xi(t,e,n,i,r){switch(t.kind){case"when":return[zt(t,n)];case"include":return Kt(t,e,n,i,r);case"once":case"onceIntent":case"patch":case"effect":return[]}}function Kt(t,e,n,i,r){let o=e.flows.get(t.flowName);if(!o||t.args.length!==o.params.length||i>dt||r.includes(t.flowName))return[];let a=Qi(o,t,n),s=[...r,t.flowName];return o.body.flatMap(c=>Xi(c,e,a,i+1,s))}function ne(t){switch(t.kind){case"when":return[{...T(t),body:t.body.flatMap(e=>ne(e))}];case"once":return[{...T(t),body:t.body.flatMap(e=>ne(e))}];case"onceIntent":return[{...T(t),body:t.body.flatMap(e=>ne(e))}];case"include":return[];case"patch":case"effect":case"fail":case"stop":return[T(t)]}}function Ji(t,e,n){switch(t.kind){case"include":return Kt(t,e,new Map,n,[]);case"when":return[{...T(t),body:t.body.flatMap(i=>ne(i))}];case"once":return[{...T(t),body:t.body.flatMap(i=>ne(i))}];case"onceIntent":return[{...T(t),body:t.body.flatMap(i=>ne(i))}];case"fail":case"stop":return[T(t)]}}function Zi(t,e){let n=[];for(let i of t.domain.members)switch(i.kind){case"state":case"computed":n.push(T(i));break;case"action":n.push({...T(i),body:i.body.flatMap(r=>Ji(r,e,1))});break;case"flow":break}return{...T(t),domain:{...T(t.domain),types:t.domain.types.map(i=>T(i)),members:n}}}function pe(t,e,n){switch(t.kind){case"literal":return{kind:"literalType",value:t.value,location:t.location};case"identifier":return e.get(t.name)??n.stateTypes.get(t.name)??null;case"propertyAccess":{let i=pe(t.object,e,n);return Wt(i,t.property,n)}case"indexAccess":{let i=pe(t.object,e,n);return Yt(i,n)}case"objectLiteral":return{kind:"objectType",fields:t.properties.map(i=>{let r=pe(i.value,e,n);return r?{kind:"typeField",name:i.key,typeExpr:r,optional:!1,location:i.location}:null}).filter(i=>i!==null),location:t.location};case"arrayLiteral":{if(t.elements.length===0)return null;let i=pe(t.elements[0],e,n);return i?{kind:"arrayType",elementType:i,location:t.location}:null}case"systemIdent":case"functionCall":case"binary":case"unary":case"ternary":case"iterationVar":return null}}function ue(t,e,n=new Set){return t?t.kind==="simpleType"&&e.typeDefs.has(t.name)?n.has(t.name)?null:(n.add(t.name),ue(e.typeDefs.get(t.name).typeExpr,e,n)):t:null}function Wt(t,e,n){let i=ue(t,n);if(!i)return null;if(i.kind==="objectType")return i.fields.find(o=>o.name===e)?.typeExpr??null;if(i.kind==="unionType")for(let r of i.types){if(r.kind==="simpleType"&&r.name==="null")continue;let o=Wt(r,e,n);if(o)return o}return null}function Yt(t,e){let n=ue(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType")for(let i of n.types){if(i.kind==="simpleType"&&i.name==="null")continue;let r=Yt(i,e);if(r)return r}return null}function ee(t,e,n){let i=ue(t,n),r=ue(e,n);if(!i||!r)return null;if(r.kind==="unionType"){let o=r.types.map(a=>ee(i,a,n));return o.includes(!0)?!0:o.every(a=>a===!1)?!1:null}if(i.kind==="unionType"){let o=i.types.map(a=>ee(a,r,n));return o.every(a=>a===!0)?!0:o.some(a=>a===!1)?!1:null}if(r.kind==="simpleType"){if(i.kind==="simpleType")return i.name===r.name;if(i.kind==="literalType")return r.name==="null"?i.value===null:typeof i.value===r.name}if(r.kind==="literalType")return i.kind!=="literalType"?!1:i.value===r.value;if(r.kind==="arrayType")return i.kind!=="arrayType"?!1:ee(i.elementType,r.elementType,n);if(r.kind==="objectType"){if(i.kind!=="objectType")return!1;for(let o of r.fields){let a=i.fields.find(c=>c.name===o.name);if(!a){if(o.optional)continue;return!1}let s=ee(a.typeExpr,o.typeExpr,n);if(s!==!0)return s}return!0}return r.kind==="recordType"?i.kind!=="recordType"?null:ee(i.valueType,r.valueType,n):null}function Qt(t){let e=Gi(t.domain),n=[],i=new Set,r=Vi(t.domain,e,n,i);return Wi(r,e,n,i),{program:Zi(t,e),diagnostics:n}}import{sha256Sync as je}from"@manifesto-ai/core";function Xt(t){return t.kind==="literal"&&t.literalType==="boolean"&&t.value===!0}function ie(t){return A(t)}var _e=class{constructor(e){this.deps=e;this.exprValidator=new ut(e.mapLocation)}conditionComposer=new pt;exprValidator;collect(e,n,i,r){return this.collectPatchStatements(e,n,i,r)}collectPatchStatements(e,n,i,r){let o=[];for(let a of e){if(a.kind==="patch"){this.exprValidator.validatePath(a.path,n),a.value&&this.exprValidator.validateExpr(a.value,n),o.push({patch:a,condition:r});continue}if(a.kind==="when"){this.exprValidator.validateExpr(a.condition,n);let s=r;try{s=this.conditionComposer.and(r,this.deps.toMelExpr(a.condition))}catch(m){n.push({severity:"error",code:"E_LOWER",message:m.message,location:this.deps.mapLocation(a.condition.location)})}let c=je(`${i.actionName}:${i.whenCounter}:when`);i.whenCounter+=1;let l={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:a.location},{kind:"propertySegment",name:"__whenGuards",location:a.location},{kind:"propertySegment",name:c,location:a.location}],location:a.location},d=me(l),u=this.collectPatchStatements(a.body,n,i,void 0).map(m=>({patch:m.patch,condition:this.conditionComposer.and(d,m.condition)}));o.push({patch:{kind:"patch",op:"set",path:l,value:{kind:"literal",literalType:"boolean",value:!0,location:a.location},location:a.location},condition:s},...u,{patch:{kind:"patch",op:"unset",path:l,location:a.location}});continue}if(a.kind==="once"){this.exprValidator.validatePath(a.marker,n);let s=r,c=me(a.marker),l=a.marker,d=a.location,u={kind:"call",fn:"neq",args:[c,{kind:"sys",path:["meta","intentId"]}]};if(a.condition){this.exprValidator.validateExpr(a.condition,n);try{u=this.conditionComposer.and(u,this.deps.toMelExpr(a.condition))??u}catch(O){n.push({severity:"error",code:"E_LOWER",message:O.message,location:this.deps.mapLocation(a.condition.location)})}}s=this.conditionComposer.and(r,u);let m=je(`${i.actionName}:${i.onceCounter}:once`);i.onceCounter+=1;let g={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:d},{kind:"propertySegment",name:"__onceScopeGuards",location:d},{kind:"propertySegment",name:m,location:d}],location:d},N=me(g),S=this.collectPatchStatements(a.body,n,i,N);o.push({patch:{kind:"patch",op:"set",path:g,value:{kind:"literal",literalType:"boolean",value:!0,location:d},location:d},condition:s},{patch:{kind:"patch",op:"set",path:l,value:{kind:"systemIdent",path:["meta","intentId"],location:d},location:d},condition:N},...S,{patch:{kind:"patch",op:"unset",path:g,location:d},condition:s});continue}if(a.kind==="onceIntent"){let s=je(`${i.actionName}:${i.onceCounter}:onceIntent`);i.onceCounter+=1;let c={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:a.location},{kind:"propertySegment",name:"__onceScopeGuards",location:a.location},{kind:"propertySegment",name:s,location:a.location}],location:a.location},l=me(c),d=je(`${i.actionName}:${i.onceIntentCounter}:intent`);i.onceIntentCounter+=1;let u=a.location,g={kind:"call",fn:"neq",args:[me({kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:u},{kind:"propertySegment",name:"guards",location:u},{kind:"propertySegment",name:"intent",location:u},{kind:"propertySegment",name:d,location:u}],location:u}),{kind:"sys",path:["meta","intentId"]}]};if(a.condition){this.exprValidator.validateExpr(a.condition,n);try{g=this.conditionComposer.and(g,this.deps.toMelExpr(a.condition))??g}catch(U){n.push({severity:"error",code:"E_LOWER",message:U.message,location:this.deps.mapLocation(a.condition.location)})}}let N=this.conditionComposer.and(r,g),S={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:u},{kind:"propertySegment",name:"guards",location:u},{kind:"propertySegment",name:"intent",location:u}],location:u},O=this.collectPatchStatements(a.body,n,i,l);o.push({patch:{kind:"patch",op:"set",path:c,value:{kind:"literal",literalType:"boolean",value:!0,location:u},location:u},condition:N},{patch:{kind:"patch",op:"merge",path:S,value:{kind:"objectLiteral",properties:[{kind:"objectProperty",key:d,value:{kind:"systemIdent",path:["meta","intentId"],location:u},location:u}],location:u},location:u},condition:l},...O,{patch:{kind:"patch",op:"unset",path:c,location:u},condition:N});continue}n.push({severity:"error",code:"E_UNSUPPORTED_STMT",message:`Unsupported statement '${a.kind}' in patch text. Only patch statements are allowed.`,location:this.deps.mapLocation(a.location)})}return o}};function Jt(t){return{op:t.patch.op,path:er(t.patch.path),...t.condition?{condition:t.condition}:void 0,...t.patch.value?{value:ie(t.patch.value)}:void 0}}function me(t){let e=t.segments,n;for(let i of e){if(i.kind==="propertySegment"){let r={kind:"prop",name:i.name};n?n={kind:"call",fn:"field",args:[n,{kind:"lit",value:i.name}]}:n={kind:"get",path:[r]};continue}if(!n)throw new Error("Path cannot start with index access in compileMelPatch guard.");n={kind:"call",fn:"at",args:[n,ie(i.index)]}}if(!n)throw new Error("Empty patch guard path.");return n}function er(t){return t.segments.map(e=>e.kind==="propertySegment"?{kind:"prop",name:e.name}:{kind:"expr",expr:ie(e.index)})}var pt=class{and(e,n){return e?n?{kind:"call",fn:"and",args:[e,n]}:e:n}},ut=class{constructor(e){this.mapLocation=e}symbols={stateTypes:new Map,computedDecls:new Map,typeDefs:new Map,computedTypeCache:new Map,computedTypeInFlight:new Set};validatePath(e,n){for(let i of e.segments)i.kind==="indexSegment"&&this.validateExpr(i.index,n)}validateExpr(e,n){switch(e.kind){case"functionCall":(e.name==="eq"||e.name==="neq")&&e.args.length>=2&&this.validatePrimitiveEquality(e.args[0],e.args[1],e.location,n);for(let i of e.args)this.validateExpr(i,n);return;case"binary":(e.operator==="=="||e.operator==="!=")&&this.validatePrimitiveEquality(e.left,e.right,e.location,n),this.validateExpr(e.left,n),this.validateExpr(e.right,n);return;case"unary":this.validateExpr(e.operand,n);return;case"ternary":this.validateExpr(e.condition,n),this.validateExpr(e.consequent,n),this.validateExpr(e.alternate,n);return;case"propertyAccess":this.validateExpr(e.object,n);return;case"indexAccess":this.validateExpr(e.object,n),this.validateExpr(e.index,n);return;case"objectLiteral":for(let i of e.properties)this.validateExpr(i.value,n);return;case"arrayLiteral":for(let i of e.elements)this.validateExpr(i,n);return;case"literal":case"identifier":case"systemIdent":case"iterationVar":return}}validatePrimitiveEquality(e,n,i,r){let o=j(e,new Map,this.symbols),a=j(n,new Map,this.symbols);o!=="nonprimitive"&&a!=="nonprimitive"||r.push({severity:"error",code:"E_TYPE_MISMATCH",message:"eq/neq operands must be primitive types (null, boolean, number, string)",location:this.mapLocation(i)})}};function en(t){let e=[],n=0;for(let i of t)e.push(n),n+=i.length+1;return e}function tn(t,e){return n=>nn(n,t,e)}function mt(t,e,n){return t.map(i=>tr(i,e,n))}function tr(t,e,n){return{...t,location:nn(t.location,e,n)}}function nn(t,e,n){return{...t,start:Zt(t.start,e,n),end:Zt(t.end,e,n)}}function Zt(t,e,n){let i=t.line-3,r=e.length,o=Math.min(Math.max(i,1),r),a=n[o-1]??0,s=e[o-1]??"",c=Math.max(s.length+1,1),l=Math.min(Math.max(t.column-6,1),c);return{line:o,column:l,offset:Math.max(a+l-1,0)}}var he="__compileMelPatch",ir="__patchDomain",rr=" ";function rn(t,e){let n=[],i=[],r=[],o=t.split(`
9
+ `),a=en(o),s=tn(o,a),c=or(t,he),l=performance.now(),d;try{let v=ye(c);d=v.tokens;let R=mt(v.diagnostics.filter(fe=>fe.severity==="error"),o,a);if(R.length>0)return r.push(...R),n.push({phase:"lex",durationMs:performance.now()-l,details:{tokenCount:d.length}}),{ops:[],trace:n,warnings:i,errors:r}}catch(v){return r.push({severity:"error",code:"E_LEX",message:v.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"lex",durationMs:performance.now()-l}),{ops:[],trace:n,warnings:i,errors:r}}n.push({phase:"lex",durationMs:performance.now()-l,details:{tokenCount:d.length}});let u=performance.now(),m;try{let v=ge(d),R=mt(v.diagnostics,o,a),fe=R.filter(Ue=>Ue.severity==="error"),Be=R.filter(Ue=>Ue.severity!=="error");if(fe.length>0)return r.push(...fe),i.push(...Be),n.push({phase:"parse",durationMs:performance.now()-u}),{ops:[],trace:n,warnings:i,errors:r};if(!v.program)return r.push({severity:"error",code:"E_PARSE",message:"Failed to parse MEL patch program",location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),i.push(...Be),n.push({phase:"parse",durationMs:performance.now()-u}),{ops:[],trace:n,warnings:i,errors:r};m=v.program,i.push(...Be)}catch(v){return r.push({severity:"error",code:"E_PARSE",message:v.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"parse",durationMs:performance.now()-u}),{ops:[],trace:n,warnings:i,errors:r}}n.push({phase:"parse",durationMs:performance.now()-u});let g=performance.now(),N={actionName:e.actionName,onceCounter:0,onceIntentCounter:0,whenCounter:0},S=m.domain.members.find(v=>v.kind==="action"&&v.name===he);if(!S)return r.push({severity:"error",code:"E_ANALYZE",message:`Synthetic patch action '${he}' not found during parsing`,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"analyze",durationMs:performance.now()-g}),{ops:[],trace:n,warnings:i,errors:r};let O=o.length+3+2;if(S.location.end.line!==O)return r.push({severity:"error",code:"E_PATCH_WRAPPER",message:`Malformed synthetic patch wrapper for action '${he}'.`,location:s(S.location)}),n.push({phase:"analyze",durationMs:performance.now()-g}),{ops:[],trace:n,warnings:i,errors:r};let[U]=S.body;if(!U||U.kind!=="when"||!Xt(U.condition)||S.body.length!==1)return r.push({severity:"error",code:"E_PATCH_WRAPPER",message:`Malformed synthetic patch wrapper for action '${he}'.`,location:s(S.location)}),n.push({phase:"analyze",durationMs:performance.now()-g}),{ops:[],trace:n,warnings:i,errors:r};let E=new _e({mapLocation:s,toMelExpr:ie}).collect(U.body,r,N,void 0);if(r.length===0&&t.trim()!==""&&E.length===0&&r.push({severity:"error",code:"E_PATCH_WRAPPER",message:"Patch wrapper parsing produced no patch statements. The patch source may be malformed.",location:s(U.location)}),n.push({phase:"analyze",durationMs:performance.now()-g,details:{count:E.length}}),r.length>0)return{ops:[],trace:n,warnings:i,errors:r};let L=performance.now(),re={mode:"action",allowSysPaths:e.allowSysPaths??{prefixes:["meta","input"]},fnTableVersion:e.fnTableVersion??"1.0",actionName:e.actionName},z=[];for(let v of E)try{let R=Jt(v);z.push(Ce(R,re))}catch(R){R instanceof F?r.push({severity:"error",code:R.code,message:R.message,location:s(v.patch.location)}):R instanceof Error?r.push({severity:"error",code:"E_LOWER",message:R.message,location:s(v.patch.location)}):r.push({severity:"error",code:"E_LOWER",message:"Unknown lowering failure",location:s(v.patch.location)})}return n.push({phase:"lower",durationMs:performance.now()-L,details:{count:z.length}}),r.length>0?{ops:[],trace:n,warnings:i,errors:r}:{ops:z,trace:n,warnings:i,errors:r}}function or(t,e){let n=t.split(`
10
+ `).map(i=>`${rr}${i}`).join(`
11
+ `);return[`domain ${ir} {`,` action ${e}() {`," when true {",n," }"," }","}"].join(`
12
+ `)}function ar(t,e){let n=[],i=[],r=[],o=performance.now(),a;try{let E=ye(t);a=E.tokens;let L=E.diagnostics.filter(z=>z.severity==="error");if(L.length>0)return r.push(...L),n.push({phase:"lex",durationMs:performance.now()-o,details:{tokenCount:a.length}}),{schema:null,trace:n,warnings:i,errors:r};let re=E.diagnostics.filter(z=>z.severity==="warning");i.push(...re)}catch(E){let L=E;return r.push({severity:"error",code:"E_LEX",message:L.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"lex",durationMs:performance.now()-o}),{schema:null,trace:n,warnings:i,errors:r}}n.push({phase:"lex",durationMs:performance.now()-o,details:{tokenCount:a.length}});let s=performance.now(),c;try{let E=ge(a),L=E.diagnostics.filter(re=>re.severity==="error");if(L.length>0)return r.push(...L),n.push({phase:"parse",durationMs:performance.now()-s}),{schema:null,trace:n,warnings:i,errors:on(r)};c=E.program}catch(E){let L=E;return r.push({severity:"error",code:"E_PARSE",message:L.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"parse",durationMs:performance.now()-s}),{schema:null,trace:n,warnings:i,errors:r}}n.push({phase:"parse",durationMs:performance.now()-s});let l=performance.now(),d=Qt(c),u=d.diagnostics.filter(E=>E.severity==="error"),m=d.diagnostics.filter(E=>E.severity==="warning"),g=bt(d.program),N=Ft(d.program),S=[...u,...g.diagnostics.filter(E=>E.severity==="error"),...N.diagnostics.filter(E=>E.severity==="error")],O=[...m,...g.diagnostics.filter(E=>E.severity==="warning"),...N.diagnostics.filter(E=>E.severity==="warning")];if(i.push(...O),n.push({phase:"analyze",durationMs:performance.now()-l}),S.length>0)return r.push(...S),{schema:null,trace:n,warnings:i,errors:r};let U=performance.now(),$e=qt(d.program);n.push({phase:"generate",durationMs:performance.now()-U});for(let E of $e.diagnostics)E.severity==="warning"?i.push(E):r.push(E);return{schema:$e.schema,trace:n,warnings:i,errors:on(r)}}var ht=10;function on(t){if(t.length<=ht)return t;let e=t.slice(0,ht);return e.push({severity:"error",code:"E_TOO_MANY",message:`... and ${t.length-ht} more error(s). Fix the errors above first.`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),e}function sr(t,e){return rn(t,e)}export{Ge as a,an as b,cr as c,ft as d,yt as e,qe as f,gt as g,Et as h,dr as i,h as j,He as k,ye as l,kr as m,Tr as n,kt as o,Ve as p,Tt as q,br as r,Sr as s,Nt as t,ze as u,ge as v,Ee as w,Ke as x,bt as y,ke as z,St as A,Rr as B,sn as C,Lr as D,Fr as E,Je as F,Ft as G,Ze as H,et as I,tt as J,nt as K,Dn as L,F as M,ve as N,f as O,we as P,it as Q,Rn as R,rt as S,Ln as T,p as U,ti as V,ri as W,Ce as X,ki as Y,qt as Z,Qt as _,ar as $,sr as aa};
package/dist/esbuild.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"./chunk-QXTUKGFJ.js";import"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";var t=e.esbuild,n=t;export{n as default,t as melPlugin};
1
+ import{a as e}from"./chunk-H5YT4Z3G.js";import"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";var t=e.esbuild,n=t;export{n as default,t as melPlugin};
package/dist/index.js CHANGED
@@ -1,21 +1,21 @@
1
- import{$ as Un,A as Nn,B as vn,C as bn,D as x,E as Cn,F as Sn,G as B,H as Pn,I as $n,J as wn,K as An,L as xn,M as On,N as Rn,O as Fn,P as jn,Q as Tn,R as Dn,S as In,T as w,U as _n,V as Gn,W as qn,X as Ln,Y as Mn,Z as H,_ as X,a as Jt,aa as Vn,b as Yt,c as Qt,d as Zt,e as en,f as tn,g as nn,h as rn,i as an,j as on,k as sn,l as _,m as cn,n as un,o as dn,p as ln,q as pn,r as fn,s as mn,t as gn,u as yn,v as G,w as hn,x as En,y as K,z as kn}from"./chunk-BJMGKJRO.js";var J={E001:{code:"E001",message:"$system.* cannot be used in computed expressions (non-deterministic)",category:"semantic"},E002:{code:"E002",message:"$system.* cannot be used in state initializers",category:"semantic"},E003:{code:"E003",message:"Invalid $system reference",category:"semantic"},E004:{code:"E004",message:"Identifier starts with reserved prefix '__sys__'",category:"syntax"},E005:{code:"E005",message:"available expression must be pure (no Effects, no $system.*)",category:"semantic"},E006:{code:"E006",message:"fail must be inside a guard (when, once, or onceIntent)",category:"semantic"},E007:{code:"E007",message:"stop must be inside a guard (when, once, or onceIntent)",category:"semantic"},E008:{code:"E008",message:"stop message suggests waiting/pending - use 'Already processed' style instead",category:"semantic"},E009:{code:"E009",message:"Primitive aggregation (sum, min, max) only allowed in computed",category:"semantic"},E010:{code:"E010",message:"Primitive aggregation does not allow composition - use direct reference only",category:"semantic"},E011:{code:"E011",message:"reduce/fold/scan is forbidden - use sum, min, max for aggregation",category:"semantic"},E013:{code:"E013",message:"Circular include detected",category:"semantic"},E014:{code:"E014",message:"Include expansion depth exceeds limit",category:"semantic"},E015:{code:"E015",message:"Include target is not a declared flow",category:"semantic"},E016:{code:"E016",message:"Include not allowed in InnerStmt position",category:"semantic"},E017:{code:"E017",message:"once() not allowed in flow",category:"semantic"},E018:{code:"E018",message:"onceIntent not allowed in flow",category:"semantic"},E019:{code:"E019",message:"patch not allowed in flow",category:"semantic"},E020:{code:"E020",message:"effect not allowed in flow",category:"semantic"},E021:{code:"E021",message:"Flow parameter name conflicts with top-level identifier",category:"semantic"},E022:{code:"E022",message:"Flow and action share the same name",category:"semantic"},E023:{code:"E023",message:"Wrong number of arguments for included flow",category:"semantic"},E024:{code:"E024",message:"Include argument type mismatch",category:"type"},E030:{code:"E030",message:"Collection element type does not have an 'id' field",category:"type"},E030a:{code:"E030a",message:"Collection element 'id' field is not a primitive type",category:"type"},E030b:{code:"E030b",message:"Duplicate '.id' values detected in state initializer",category:"type"},E031:{code:"E031",message:"updateById/removeById not allowed in this context",category:"semantic"},E032:{code:"E032",message:"Nested transform primitive",category:"semantic"},E033:{code:"E033",message:"Transform primitive collection argument is not a state path",category:"semantic"},E034:{code:"E034",message:"Transform primitive in guard condition",category:"semantic"},E035:{code:"E035",message:"Transform primitive in available condition",category:"semantic"},E040:{code:"E040",message:"Circular computed dependency",category:"semantic"},E041:{code:"E041",message:"Computed references undeclared identifier",category:"semantic"},E042:{code:"E042",message:"State initializer references non-constant value",category:"semantic"},E043:{code:"E043",message:"Non-trivial union type cannot be lowered to FieldSpec",category:"type"},E044:{code:"E044",message:"Recursive named type cannot be lowered to FieldSpec",category:"type"},E045:{code:"E045",message:"Nullable type cannot be lowered to FieldSpec",category:"type"},E046:{code:"E046",message:"Record type cannot be lowered to FieldSpec",category:"type"},E047:{code:"E047",message:"dispatchable expression must be pure (state/computed/action parameters only)",category:"semantic"},E048:{code:"E048",message:"Transform primitive in dispatchable condition",category:"semantic"},E_UNDEFINED:{code:"E_UNDEFINED",message:"Undefined identifier",category:"semantic"},E_DUPLICATE:{code:"E_DUPLICATE",message:"Duplicate identifier",category:"semantic"},E_INVALID_ACCESS:{code:"E_INVALID_ACCESS",message:"Invalid access to identifier in this context",category:"semantic"},E_UNGUARDED_STMT:{code:"E_UNGUARDED_STMT",message:"Statement must be inside a guard (when or once)",category:"semantic"},E_UNGUARDED_PATCH:{code:"E_UNGUARDED_PATCH",message:"Patch must be inside a guard",category:"semantic"},E_UNGUARDED_EFFECT:{code:"E_UNGUARDED_EFFECT",message:"Effect must be inside a guard",category:"semantic"},E_ARG_COUNT:{code:"E_ARG_COUNT",message:"Wrong number of arguments",category:"type"},E_TYPE_MISMATCH:{code:"E_TYPE_MISMATCH",message:"Type mismatch",category:"type"},W_NON_BOOL_COND:{code:"W_NON_BOOL_COND",message:"Condition may not be boolean",category:"semantic"},W_UNUSED:{code:"W_UNUSED",message:"Unused identifier",category:"semantic"},W012:{code:"W012",message:"Anonymous object type in state field - use named type declaration instead",category:"type"},MEL_LEXER:{code:"MEL_LEXER",message:"Lexer error",category:"syntax"},MEL_PARSER:{code:"MEL_PARSER",message:"Parser error",category:"syntax"}};function Bn(e){return J[e]}function Hn(e){let t=J[e];return t?`${e}: ${t.message}`:e}function Y(e,t){let{code:n,message:r,location:a}=e;if(!a||a.start.line===0&&a.start.column===0)return`[${n}] ${r}`;let{line:o,column:i}=a.start,u=`[${n}] ${r} (${o}:${i})`;if(!t)return u;let y=t.split(`
2
- `)[o-1];if(!y)return u;let p=String(o).padStart(4," "),f=`${p} | ${y}`,l=Math.max(1,a.end.line===a.start.line?Math.min(a.end.column-i,y.length-i+1):1),E=`${" ".repeat(p.length+3+i-1)}${"^".repeat(l)}`;return`${u}
1
+ import{$ as Zn,A as Rn,B as Fn,C as jn,D as x,E as Tn,F as Dn,G as B,H as In,I as _n,J as Mn,K as Gn,L as qn,M as Ln,N as Un,O as Vn,P as Wn,Q as zn,R as Kn,S as Bn,T as w,U as Hn,V as Xn,W as Jn,X as Yn,Y as Qn,Z as H,_ as X,a as un,aa as er,b as cn,c as ln,d as dn,e as pn,f as fn,g as mn,h as gn,i as yn,j as hn,k as En,l as _,m as kn,n as vn,o as Nn,p as bn,q as Cn,r as Sn,s as Pn,t as $n,u as wn,v as M,w as An,x as xn,y as K,z as On}from"./chunk-XIAVDXPY.js";var J={E001:{code:"E001",message:"$system.* cannot be used in computed expressions (non-deterministic)",category:"semantic"},E002:{code:"E002",message:"$system.* cannot be used in state initializers",category:"semantic"},E003:{code:"E003",message:"Invalid $system reference",category:"semantic"},E004:{code:"E004",message:"Identifier starts with reserved prefix '__sys__'",category:"syntax"},E005:{code:"E005",message:"available expression must be pure (no Effects, no $system.*)",category:"semantic"},E006:{code:"E006",message:"fail must be inside a guard (when, once, or onceIntent)",category:"semantic"},E007:{code:"E007",message:"stop must be inside a guard (when, once, or onceIntent)",category:"semantic"},E008:{code:"E008",message:"stop message suggests waiting/pending - use 'Already processed' style instead",category:"semantic"},E009:{code:"E009",message:"Primitive aggregation (sum, min, max) only allowed in computed",category:"semantic"},E010:{code:"E010",message:"Primitive aggregation does not allow composition - use direct reference only",category:"semantic"},E011:{code:"E011",message:"reduce/fold/scan is forbidden - use sum, min, max for aggregation",category:"semantic"},E013:{code:"E013",message:"Circular include detected",category:"semantic"},E014:{code:"E014",message:"Include expansion depth exceeds limit",category:"semantic"},E015:{code:"E015",message:"Include target is not a declared flow",category:"semantic"},E016:{code:"E016",message:"Include not allowed in InnerStmt position",category:"semantic"},E017:{code:"E017",message:"once() not allowed in flow",category:"semantic"},E018:{code:"E018",message:"onceIntent not allowed in flow",category:"semantic"},E019:{code:"E019",message:"patch not allowed in flow",category:"semantic"},E020:{code:"E020",message:"effect not allowed in flow",category:"semantic"},E021:{code:"E021",message:"Flow parameter name conflicts with top-level identifier",category:"semantic"},E022:{code:"E022",message:"Flow and action share the same name",category:"semantic"},E023:{code:"E023",message:"Wrong number of arguments for included flow",category:"semantic"},E024:{code:"E024",message:"Include argument type mismatch",category:"type"},E030:{code:"E030",message:"Collection element type does not have an 'id' field",category:"type"},E030a:{code:"E030a",message:"Collection element 'id' field is not a primitive type",category:"type"},E030b:{code:"E030b",message:"Duplicate '.id' values detected in state initializer",category:"type"},E031:{code:"E031",message:"updateById/removeById not allowed in this context",category:"semantic"},E032:{code:"E032",message:"Nested transform primitive",category:"semantic"},E033:{code:"E033",message:"Transform primitive collection argument is not a state path",category:"semantic"},E034:{code:"E034",message:"Transform primitive in guard condition",category:"semantic"},E035:{code:"E035",message:"Transform primitive in available condition",category:"semantic"},E040:{code:"E040",message:"Circular computed dependency",category:"semantic"},E041:{code:"E041",message:"Computed references undeclared identifier",category:"semantic"},E042:{code:"E042",message:"State initializer references non-constant value",category:"semantic"},E043:{code:"E043",message:"Non-trivial union type cannot be lowered to FieldSpec",category:"type"},E044:{code:"E044",message:"Recursive named type cannot be lowered to FieldSpec",category:"type"},E045:{code:"E045",message:"Nullable type cannot be lowered to FieldSpec",category:"type"},E046:{code:"E046",message:"Record type cannot be lowered to FieldSpec",category:"type"},E047:{code:"E047",message:"dispatchable expression must be pure (state/computed/action parameters only)",category:"semantic"},E048:{code:"E048",message:"Transform primitive in dispatchable condition",category:"semantic"},E049:{code:"E049",message:"Invalid literal clamp bounds",category:"semantic"},E050:{code:"E050",message:"Invalid match() form",category:"semantic"},E051:{code:"E051",message:"Duplicate match() key",category:"semantic"},E052:{code:"E052",message:"Invalid argmax()/argmin() form",category:"semantic"},E_UNDEFINED:{code:"E_UNDEFINED",message:"Undefined identifier",category:"semantic"},E_DUPLICATE:{code:"E_DUPLICATE",message:"Duplicate identifier",category:"semantic"},E_INVALID_ACCESS:{code:"E_INVALID_ACCESS",message:"Invalid access to identifier in this context",category:"semantic"},E_UNGUARDED_STMT:{code:"E_UNGUARDED_STMT",message:"Statement must be inside a guard (when or once)",category:"semantic"},E_UNGUARDED_PATCH:{code:"E_UNGUARDED_PATCH",message:"Patch must be inside a guard",category:"semantic"},E_UNGUARDED_EFFECT:{code:"E_UNGUARDED_EFFECT",message:"Effect must be inside a guard",category:"semantic"},E_ARG_COUNT:{code:"E_ARG_COUNT",message:"Wrong number of arguments",category:"type"},E_TYPE_MISMATCH:{code:"E_TYPE_MISMATCH",message:"Type mismatch",category:"type"},W_NON_BOOL_COND:{code:"W_NON_BOOL_COND",message:"Condition may not be boolean",category:"semantic"},W_UNUSED:{code:"W_UNUSED",message:"Unused identifier",category:"semantic"},W012:{code:"W012",message:"Anonymous object type in state field - use named type declaration instead",category:"type"},MEL_LEXER:{code:"MEL_LEXER",message:"Lexer error",category:"syntax"},MEL_PARSER:{code:"MEL_PARSER",message:"Parser error",category:"syntax"}};function ar(e){return J[e]}function or(e){let t=J[e];return t?`${e}: ${t.message}`:e}function Y(e,t){let{code:n,message:r,location:a}=e;if(!a||a.start.line===0&&a.start.column===0)return`[${n}] ${r}`;let{line:o,column:i}=a.start,c=`[${n}] ${r} (${o}:${i})`;if(!t)return c;let y=t.split(`
2
+ `)[o-1];if(!y)return c;let p=String(o).padStart(4," "),f=`${p} | ${y}`,d=Math.max(1,a.end.line===a.start.line?Math.min(a.end.column-i,y.length-i+1):1),E=`${" ".repeat(p.length+3+i-1)}${"^".repeat(d)}`;return`${c}
3
3
  ${f}
4
- ${E}`}function Ne(e,t){return e.map(n=>Y(n,t)).join(`
4
+ ${E}`}function ve(e,t){return e.map(n=>Y(n,t)).join(`
5
5
 
6
- `)}function tr(e,t,n){switch(e){case"+":return{kind:"add",left:t,right:n};case"-":return{kind:"sub",left:t,right:n};case"*":return{kind:"mul",left:t,right:n};case"/":return{kind:"div",left:t,right:n};case"%":return{kind:"mod",left:t,right:n};case"==":return{kind:"eq",left:t,right:n};case"!=":return{kind:"neq",left:t,right:n};case"<":return{kind:"lt",left:t,right:n};case"<=":return{kind:"lte",left:t,right:n};case">":return{kind:"gt",left:t,right:n};case">=":return{kind:"gte",left:t,right:n};case"&&":return{kind:"and",args:[t,n]};case"||":return{kind:"or",args:[t,n]};case"??":return{kind:"coalesce",args:[t,n]}}}function nr(e,t){switch(e){case"add":return{kind:"add",left:t[0],right:t[1]};case"sub":return{kind:"sub",left:t[0],right:t[1]};case"mul":return{kind:"mul",left:t[0],right:t[1]};case"div":return{kind:"div",left:t[0],right:t[1]};case"mod":return{kind:"mod",left:t[0],right:t[1]};case"neg":return{kind:"neg",arg:t[0]};case"abs":return{kind:"abs",arg:t[0]};case"min":return t.length===1?{kind:"minArray",array:t[0]}:{kind:"min",args:t};case"max":return t.length===1?{kind:"maxArray",array:t[0]}:{kind:"max",args:t};case"sum":return{kind:"sumArray",array:t[0]};case"floor":return{kind:"floor",arg:t[0]};case"ceil":return{kind:"ceil",arg:t[0]};case"round":return{kind:"round",arg:t[0]};case"sqrt":return{kind:"sqrt",arg:t[0]};case"pow":return{kind:"pow",base:t[0],exponent:t[1]};case"eq":return{kind:"eq",left:t[0],right:t[1]};case"neq":return{kind:"neq",left:t[0],right:t[1]};case"gt":return{kind:"gt",left:t[0],right:t[1]};case"gte":return{kind:"gte",left:t[0],right:t[1]};case"lt":return{kind:"lt",left:t[0],right:t[1]};case"lte":return{kind:"lte",left:t[0],right:t[1]};case"and":return{kind:"and",args:t};case"or":return{kind:"or",args:t};case"not":return{kind:"not",arg:t[0]};case"isNull":return{kind:"isNull",arg:t[0]};case"isNotNull":return{kind:"not",arg:{kind:"isNull",arg:t[0]}};case"typeof":return{kind:"typeof",arg:t[0]};case"coalesce":return{kind:"coalesce",args:t};case"concat":return{kind:"concat",args:t};case"trim":return{kind:"trim",str:t[0]};case"lower":case"toLowerCase":return{kind:"toLowerCase",str:t[0]};case"upper":case"toUpperCase":return{kind:"toUpperCase",str:t[0]};case"strlen":case"strLen":return{kind:"strLen",str:t[0]};case"substr":case"substring":return t[2]?{kind:"substring",str:t[0],start:t[1],end:t[2]}:{kind:"substring",str:t[0],start:t[1]};case"toString":return{kind:"toString",arg:t[0]};case"len":case"length":return{kind:"len",arg:t[0]};case"at":return{kind:"at",array:t[0],index:t[1]};case"first":return{kind:"first",array:t[0]};case"last":return{kind:"last",array:t[0]};case"slice":return t[2]?{kind:"slice",array:t[0],start:t[1],end:t[2]}:{kind:"slice",array:t[0],start:t[1]};case"includes":return{kind:"includes",array:t[0],item:t[1]};case"filter":return{kind:"filter",array:t[0],predicate:t[1]};case"map":return{kind:"map",array:t[0],mapper:t[1]};case"find":return{kind:"find",array:t[0],predicate:t[1]};case"every":return{kind:"every",array:t[0],predicate:t[1]};case"some":return{kind:"some",array:t[0],predicate:t[1]};case"append":return{kind:"append",array:t[0],items:t.slice(1)};case"keys":return{kind:"keys",obj:t[0]};case"values":return{kind:"values",obj:t[0]};case"entries":return{kind:"entries",obj:t[0]};case"merge":return{kind:"merge",objects:t};case"if":case"cond":return{kind:"if",cond:t[0],then:t[1],else:t[2]};default:return{kind:"object",fields:{__call:{kind:"lit",value:e},__args:{kind:"lit",value:t}}}}}import{hashSchemaSync as ve,semanticPathToPatchPath as be}from"@manifesto-ai/core";function Q(e){let t=structuredClone(e),n=!1;for(let[i,u]of Object.entries(t.actions)){let d=Ce(i);if(R(u.flow,d),d.slots.size!==0){n=!0;for(let y of d.slots.values())$e(t.state.fields,i,y);t.actions[i]={...u,flow:Ae(u.flow,d)}}}if(!n)return t;let{hash:r,...a}=t,o=ve(a);return{...a,hash:o}}function Ce(e){return{actionName:e,slots:new Map}}function Se(e){switch(e){case"timestamp":case"time.now":return"number";default:return"string"}}function Pe(e){return e.replaceAll(".","_")}function O(e,t){let n=e[t];if(n&&n.type==="object")return n.required=!1,n.default??={},n.fields??={},n;let r={type:"object",required:!1,default:{},fields:{}};return e[t]=r,r}function $e(e,t,n){let r=O(e,"$mel"),a=O(r.fields??(r.fields={}),"sys"),o=O(a.fields??(a.fields={}),t),i=O(o.fields??(o.fields={}),n.normalizedKey),u=i.fields??(i.fields={});u.intent={type:"string",required:!1,default:null},u.value={type:Se(n.key),required:!1,default:null}}function we(e){return be(e)}function R(e,t){switch(e.kind){case"seq":for(let n of e.steps)R(n,t);break;case"if":C(e.cond,t),R(e.then,t),e.else&&R(e.else,t);break;case"patch":e.value&&C(e.value,t);break;case"effect":for(let n of Object.values(e.params))C(n,t);break;case"fail":e.message&&C(e.message,t);break}}function C(e,t){if(e.kind==="get"&&e.path.startsWith("$system.")){let n=e.path.slice(8);if(!t.slots.has(n)){let r=Pe(n);t.slots.set(n,{key:n,normalizedKey:r,valuePath:`$mel.sys.${t.actionName}.${r}.value`,intentPath:`$mel.sys.${t.actionName}.${r}.intent`})}return}if(e.kind==="object"){for(let n of Object.values(e.fields))n&&typeof n=="object"&&"kind"in n&&C(n,t);return}for(let n of Object.values(e))if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(let r of n)typeof r=="object"&&r!==null&&"kind"in r&&C(r,t);else"kind"in n&&C(n,t)}function Ae(e,t){if(t.slots.size===0)return e;let n=[];for(let u of t.slots.values()){let d={kind:"if",cond:{kind:"neq",left:{kind:"get",path:u.intentPath},right:{kind:"get",path:"meta.intentId"}},then:{kind:"seq",steps:[{kind:"patch",op:"set",path:we(u.intentPath),value:{kind:"get",path:"meta.intentId"}},{kind:"effect",type:"system.get",params:{key:{kind:"lit",value:u.key},into:{kind:"lit",value:u.valuePath}}}]}};n.push(d)}let r=[];for(let u of t.slots.values())r.push({kind:"eq",left:{kind:"get",path:u.intentPath},right:{kind:"get",path:"meta.intentId"}});let a=r.length===1?r[0]:{kind:"and",args:r},o=F(e,t),i={kind:"if",cond:a,then:o};return{kind:"seq",steps:[...n,i]}}function F(e,t){switch(e.kind){case"seq":return{kind:"seq",steps:e.steps.map(r=>F(r,t))};case"if":return{kind:"if",cond:h(e.cond,t),then:F(e.then,t),else:e.else?F(e.else,t):void 0};case"patch":return{kind:"patch",op:e.op,path:e.path,value:e.value?h(e.value,t):void 0};case"effect":let n={};for(let[r,a]of Object.entries(e.params))n[r]=h(a,t);return{kind:"effect",type:e.type,params:n};case"fail":return{kind:"fail",code:e.code,message:e.message?h(e.message,t):void 0};default:return e}}function h(e,t){if(e.kind==="get"&&e.path.startsWith("$system.")){let n=e.path.slice(8),r=t.slots.get(n);if(r)return{kind:"get",path:r.valuePath}}switch(e.kind){case"eq":case"neq":case"gt":case"gte":case"lt":case"lte":case"add":case"sub":case"mul":case"div":case"mod":return{kind:e.kind,left:h(e.left,t),right:h(e.right,t)};case"and":case"or":case"coalesce":case"concat":case"min":case"max":case"merge":return{kind:e.kind,args:e.args.map(r=>h(r,t))};case"not":case"neg":case"abs":case"floor":case"ceil":case"round":case"isNull":case"typeof":case"toString":case"len":case"keys":case"values":case"entries":case"first":case"last":return{kind:e.kind,arg:h(e.arg,t)};case"trim":case"toLowerCase":case"toUpperCase":case"strLen":return{kind:e.kind,str:h(e.str,t)};case"at":case"includes":return{kind:e.kind,array:h(e.array,t),index:h(e.index??e.item,t)};case"filter":case"map":case"find":case"every":case"some":return{kind:e.kind,array:h(e.array,t),predicate:h(e.predicate??e.mapper,t)};case"if":return{kind:"if",cond:h(e.cond,t),then:h(e.then,t),else:h(e.else,t)};case"field":return{kind:"field",object:h(e.object,t),property:e.property};case"object":let n={};for(let[r,a]of Object.entries(e.fields))n[r]=h(a,t);return{kind:"object",fields:n};case"append":return{kind:"append",array:h(e.array,t),items:e.items.map(r=>h(r,t))};default:return e}}function k(e){switch(e.kind){case"primitive":return e.name;case"literal":return xe(e.value);case"ref":return e.name;case"array":return`Array<${k(e.element)}>`;case"record":return`Record<${k(e.key)}, ${k(e.value)}>`;case"union":return Oe(e.members);case"object":return Re(e.fields)}}function xe(e){return e===null?"null":typeof e=="string"?`"${Z(e)}"`:typeof e=="boolean"?e?"true":"false":String(e)}function Oe(e){return e.length===0?"never":e.map(k).join(" | ")}function Re(e){return e.length===0?"{}":`{ ${e.map(n=>{let r=n.optional?"?":"";return`${n.name}${r}: ${k(n.type)}`}).join(", ")} }`}function P(e,t){let n=k(e.type);return t!==void 0?`${e.name}: ${n} = ${S(t)}`:e.optional?`${e.name}?: ${n}`:`${e.name}: ${n}`}function S(e){return e===null||e===void 0?"null":typeof e=="string"?`"${Z(e)}"`:typeof e=="number"?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)?`[${e.map(S).join(", ")}]`:typeof e=="object"?`{ ${Object.entries(e).map(([n,r])=>`${n}: ${S(r)}`).join(", ")} }`:String(e)}function Z(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}function s(e){switch(e.kind){case"lit":return q(e.value);case"get":return Fe(e.path);case"eq":return`eq(${s(e.left)}, ${s(e.right)})`;case"neq":return`neq(${s(e.left)}, ${s(e.right)})`;case"gt":return`gt(${s(e.left)}, ${s(e.right)})`;case"gte":return`gte(${s(e.left)}, ${s(e.right)})`;case"lt":return`lt(${s(e.left)}, ${s(e.right)})`;case"lte":return`lte(${s(e.left)}, ${s(e.right)})`;case"and":return!e.args||!Array.isArray(e.args)?"and(/* malformed: args undefined */)":`and(${e.args.map(s).join(", ")})`;case"or":return!e.args||!Array.isArray(e.args)?"or(/* malformed: args undefined */)":`or(${e.args.map(s).join(", ")})`;case"not":return e.arg?`not(${s(e.arg)})`:"not(/* malformed: arg undefined */)";case"if":return`if(${s(e.cond)}, ${s(e.then)}, ${s(e.else)})`;case"add":return`add(${s(e.left)}, ${s(e.right)})`;case"sub":return`sub(${s(e.left)}, ${s(e.right)})`;case"mul":return`mul(${s(e.left)}, ${s(e.right)})`;case"div":return`div(${s(e.left)}, ${s(e.right)})`;case"mod":return`mod(${s(e.left)}, ${s(e.right)})`;case"concat":return!e.args||!Array.isArray(e.args)?"concat(/* malformed: args undefined */)":`concat(${e.args.map(s).join(", ")})`;case"substring":return e.end!==void 0?`substring(${s(e.str)}, ${s(e.start)}, ${s(e.end)})`:`substring(${s(e.str)}, ${s(e.start)})`;case"trim":return`trim(${s(e.str)})`;case"len":return`len(${s(e.arg)})`;case"at":return`at(${s(e.array)}, ${s(e.index)})`;case"first":return`first(${s(e.array)})`;case"last":return`last(${s(e.array)})`;case"slice":return e.end!==void 0?`slice(${s(e.array)}, ${s(e.start)}, ${s(e.end)})`:`slice(${s(e.array)}, ${s(e.start)})`;case"includes":return`includes(${s(e.array)}, ${s(e.item)})`;case"filter":return`filter(${s(e.array)}, ${s(e.predicate)})`;case"map":return`map(${s(e.array)}, ${s(e.mapper)})`;case"find":return`find(${s(e.array)}, ${s(e.predicate)})`;case"every":return`every(${s(e.array)}, ${s(e.predicate)})`;case"some":return`some(${s(e.array)}, ${s(e.predicate)})`;case"append":return!e.items||!Array.isArray(e.items)?`append(${s(e.array)}, /* malformed: items undefined */)`:`append(${s(e.array)}, ${e.items.map(s).join(", ")})`;case"object":return je(e.fields);case"field":return`${s(e.object)}.${e.property}`;case"keys":return`keys(${s(e.obj)})`;case"values":return`values(${s(e.obj)})`;case"entries":return`entries(${s(e.obj)})`;case"merge":return!e.objects||!Array.isArray(e.objects)?"merge(/* malformed: objects undefined */)":`merge(${e.objects.map(s).join(", ")})`;case"typeof":return`typeof(${s(e.arg)})`;case"isNull":return`isNull(${s(e.arg)})`;case"coalesce":return!e.args||!Array.isArray(e.args)?"coalesce(/* malformed: args undefined */)":`coalesce(${e.args.map(s).join(", ")})`;default:return`/* unknown: ${JSON.stringify(e)} */`}}function q(e){return e===null||e===void 0?"null":typeof e=="string"?`"${Te(e)}"`:typeof e=="number"?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)?`[${e.map(q).join(", ")}]`:typeof e=="object"?`{ ${Object.entries(e).map(([n,r])=>`${n}: ${q(r)}`).join(", ")} }`:String(e)}function Fe(e){return e.startsWith("$meta.")||e.startsWith("$system.")||e.startsWith("$input.")?e:e.startsWith("data.")?e.slice(5):e}function je(e){return`{ ${Object.entries(e).map(([n,r])=>`${n}: ${s(r)}`).join(", ")} }`}function Te(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}import{parsePath as ee}from"@manifesto-ai/core";var De={indent:" ",includeComments:!1,commentPrefix:"// "};function v(e,t){let n={...De,...t};switch(e.kind){case"addType":return Ie(e,n);case"addField":return _e(e,n);case"setFieldType":return Ge(e,n);case"setDefaultValue":return qe(e,n);case"addConstraint":return Le(e,n);case"addComputed":return Me(e,n);case"addActionAvailable":return Ue(e,n);default:return`// Unknown operation: ${JSON.stringify(e)}`}}function Ie(e,t){let{indent:n}=t;if(e.typeExpr.kind==="object"){let r=e.typeExpr.fields.map(a=>`${n}${P(a)}`).join(`
6
+ `)}function pr(e,t,n){switch(e){case"+":return{kind:"add",left:t,right:n};case"-":return{kind:"sub",left:t,right:n};case"*":return{kind:"mul",left:t,right:n};case"/":return{kind:"div",left:t,right:n};case"%":return{kind:"mod",left:t,right:n};case"==":return{kind:"eq",left:t,right:n};case"!=":return{kind:"neq",left:t,right:n};case"<":return{kind:"lt",left:t,right:n};case"<=":return{kind:"lte",left:t,right:n};case">":return{kind:"gt",left:t,right:n};case">=":return{kind:"gte",left:t,right:n};case"&&":return{kind:"and",args:[t,n]};case"||":return{kind:"or",args:[t,n]};case"??":return{kind:"coalesce",args:[t,n]}}}function fr(e,t){switch(e){case"add":return{kind:"add",left:t[0],right:t[1]};case"sub":return{kind:"sub",left:t[0],right:t[1]};case"mul":return{kind:"mul",left:t[0],right:t[1]};case"div":return{kind:"div",left:t[0],right:t[1]};case"mod":return{kind:"mod",left:t[0],right:t[1]};case"neg":return{kind:"neg",arg:t[0]};case"abs":return{kind:"abs",arg:t[0]};case"min":return t.length===1?{kind:"minArray",array:t[0]}:{kind:"min",args:t};case"max":return t.length===1?{kind:"maxArray",array:t[0]}:{kind:"max",args:t};case"sum":return{kind:"sumArray",array:t[0]};case"floor":return{kind:"floor",arg:t[0]};case"ceil":return{kind:"ceil",arg:t[0]};case"round":return{kind:"round",arg:t[0]};case"sqrt":return{kind:"sqrt",arg:t[0]};case"pow":return{kind:"pow",base:t[0],exponent:t[1]};case"eq":return{kind:"eq",left:t[0],right:t[1]};case"neq":return{kind:"neq",left:t[0],right:t[1]};case"gt":return{kind:"gt",left:t[0],right:t[1]};case"gte":return{kind:"gte",left:t[0],right:t[1]};case"lt":return{kind:"lt",left:t[0],right:t[1]};case"lte":return{kind:"lte",left:t[0],right:t[1]};case"and":return{kind:"and",args:t};case"or":return{kind:"or",args:t};case"not":return{kind:"not",arg:t[0]};case"isNull":return{kind:"isNull",arg:t[0]};case"isNotNull":return{kind:"not",arg:{kind:"isNull",arg:t[0]}};case"typeof":return{kind:"typeof",arg:t[0]};case"coalesce":return{kind:"coalesce",args:t};case"concat":return{kind:"concat",args:t};case"trim":return{kind:"trim",str:t[0]};case"lower":case"toLowerCase":return{kind:"toLowerCase",str:t[0]};case"upper":case"toUpperCase":return{kind:"toUpperCase",str:t[0]};case"strlen":case"strLen":return{kind:"strLen",str:t[0]};case"substr":case"substring":return t[2]?{kind:"substring",str:t[0],start:t[1],end:t[2]}:{kind:"substring",str:t[0],start:t[1]};case"toString":return{kind:"toString",arg:t[0]};case"len":case"length":return{kind:"len",arg:t[0]};case"at":return{kind:"at",array:t[0],index:t[1]};case"first":return{kind:"first",array:t[0]};case"last":return{kind:"last",array:t[0]};case"slice":return t[2]?{kind:"slice",array:t[0],start:t[1],end:t[2]}:{kind:"slice",array:t[0],start:t[1]};case"includes":return{kind:"includes",array:t[0],item:t[1]};case"filter":return{kind:"filter",array:t[0],predicate:t[1]};case"map":return{kind:"map",array:t[0],mapper:t[1]};case"find":return{kind:"find",array:t[0],predicate:t[1]};case"every":return{kind:"every",array:t[0],predicate:t[1]};case"some":return{kind:"some",array:t[0],predicate:t[1]};case"append":return{kind:"append",array:t[0],items:t.slice(1)};case"keys":return{kind:"keys",obj:t[0]};case"values":return{kind:"values",obj:t[0]};case"entries":return{kind:"entries",obj:t[0]};case"merge":return{kind:"merge",objects:t};case"if":case"cond":return{kind:"if",cond:t[0],then:t[1],else:t[2]};default:return{kind:"object",fields:{__call:{kind:"lit",value:e},__args:{kind:"lit",value:t}}}}}import{hashSchemaSync as Ne,semanticPathToPatchPath as be}from"@manifesto-ai/core";function Q(e){let t=structuredClone(e),n=!1;for(let[i,c]of Object.entries(t.actions)){let l=Ce(i);if(R(c.flow,l),l.slots.size!==0){n=!0;for(let y of l.slots.values())$e(t.state.fields,i,y);t.actions[i]={...c,flow:Ae(c.flow,l)}}}if(!n)return t;let{hash:r,...a}=t,o=Ne(a);return{...a,hash:o}}function Ce(e){return{actionName:e,slots:new Map}}function Se(e){switch(e){case"timestamp":case"time.now":return"number";default:return"string"}}function Pe(e){return e.replaceAll(".","_")}function O(e,t){let n=e[t];if(n&&n.type==="object")return n.required=!1,n.default??={},n.fields??={},n;let r={type:"object",required:!1,default:{},fields:{}};return e[t]=r,r}function $e(e,t,n){let r=O(e,"$mel"),a=O(r.fields??(r.fields={}),"sys"),o=O(a.fields??(a.fields={}),t),i=O(o.fields??(o.fields={}),n.normalizedKey),c=i.fields??(i.fields={});c.intent={type:"string",required:!1,default:null},c.value={type:Se(n.key),required:!1,default:null}}function we(e){return be(e)}function R(e,t){switch(e.kind){case"seq":for(let n of e.steps)R(n,t);break;case"if":C(e.cond,t),R(e.then,t),e.else&&R(e.else,t);break;case"patch":e.value&&C(e.value,t);break;case"effect":for(let n of Object.values(e.params))C(n,t);break;case"fail":e.message&&C(e.message,t);break}}function C(e,t){if(e.kind==="get"&&e.path.startsWith("$system.")){let n=e.path.slice(8);if(!t.slots.has(n)){let r=Pe(n);t.slots.set(n,{key:n,normalizedKey:r,valuePath:`$mel.sys.${t.actionName}.${r}.value`,intentPath:`$mel.sys.${t.actionName}.${r}.intent`})}return}if(e.kind==="object"){for(let n of Object.values(e.fields))n&&typeof n=="object"&&"kind"in n&&C(n,t);return}for(let n of Object.values(e))if(typeof n=="object"&&n!==null)if(Array.isArray(n))for(let r of n)typeof r=="object"&&r!==null&&"kind"in r&&C(r,t);else"kind"in n&&C(n,t)}function Ae(e,t){if(t.slots.size===0)return e;let n=[];for(let c of t.slots.values()){let l={kind:"if",cond:{kind:"neq",left:{kind:"get",path:c.intentPath},right:{kind:"get",path:"meta.intentId"}},then:{kind:"seq",steps:[{kind:"patch",op:"set",path:we(c.intentPath),value:{kind:"get",path:"meta.intentId"}},{kind:"effect",type:"system.get",params:{key:{kind:"lit",value:c.key},into:{kind:"lit",value:c.valuePath}}}]}};n.push(l)}let r=[];for(let c of t.slots.values())r.push({kind:"eq",left:{kind:"get",path:c.intentPath},right:{kind:"get",path:"meta.intentId"}});let a=r.length===1?r[0]:{kind:"and",args:r},o=F(e,t),i={kind:"if",cond:a,then:o};return{kind:"seq",steps:[...n,i]}}function F(e,t){switch(e.kind){case"seq":return{kind:"seq",steps:e.steps.map(r=>F(r,t))};case"if":return{kind:"if",cond:h(e.cond,t),then:F(e.then,t),else:e.else?F(e.else,t):void 0};case"patch":return{kind:"patch",op:e.op,path:e.path,value:e.value?h(e.value,t):void 0};case"effect":let n={};for(let[r,a]of Object.entries(e.params))n[r]=h(a,t);return{kind:"effect",type:e.type,params:n};case"fail":return{kind:"fail",code:e.code,message:e.message?h(e.message,t):void 0};default:return e}}function h(e,t){if(e.kind==="get"&&e.path.startsWith("$system.")){let n=e.path.slice(8),r=t.slots.get(n);if(r)return{kind:"get",path:r.valuePath}}switch(e.kind){case"eq":case"neq":case"gt":case"gte":case"lt":case"lte":case"add":case"sub":case"mul":case"div":case"mod":return{kind:e.kind,left:h(e.left,t),right:h(e.right,t)};case"and":case"or":case"coalesce":case"concat":case"min":case"max":case"merge":return{kind:e.kind,args:e.args.map(r=>h(r,t))};case"not":case"neg":case"abs":case"floor":case"ceil":case"round":case"isNull":case"typeof":case"toString":case"len":case"keys":case"values":case"entries":case"first":case"last":return{kind:e.kind,arg:h(e.arg,t)};case"trim":case"toLowerCase":case"toUpperCase":case"strLen":return{kind:e.kind,str:h(e.str,t)};case"at":case"includes":return{kind:e.kind,array:h(e.array,t),index:h(e.index??e.item,t)};case"filter":case"map":case"find":case"every":case"some":return{kind:e.kind,array:h(e.array,t),predicate:h(e.predicate??e.mapper,t)};case"if":return{kind:"if",cond:h(e.cond,t),then:h(e.then,t),else:h(e.else,t)};case"field":return{kind:"field",object:h(e.object,t),property:e.property};case"object":let n={};for(let[r,a]of Object.entries(e.fields))n[r]=h(a,t);return{kind:"object",fields:n};case"append":return{kind:"append",array:h(e.array,t),items:e.items.map(r=>h(r,t))};default:return e}}function k(e){switch(e.kind){case"primitive":return e.name;case"literal":return xe(e.value);case"ref":return e.name;case"array":return`Array<${k(e.element)}>`;case"record":return`Record<${k(e.key)}, ${k(e.value)}>`;case"union":return Oe(e.members);case"object":return Re(e.fields)}}function xe(e){return e===null?"null":typeof e=="string"?`"${Z(e)}"`:typeof e=="boolean"?e?"true":"false":String(e)}function Oe(e){return e.length===0?"never":e.map(k).join(" | ")}function Re(e){return e.length===0?"{}":`{ ${e.map(n=>{let r=n.optional?"?":"";return`${n.name}${r}: ${k(n.type)}`}).join(", ")} }`}function P(e,t){let n=k(e.type);return t!==void 0?`${e.name}: ${n} = ${S(t)}`:e.optional?`${e.name}?: ${n}`:`${e.name}: ${n}`}function S(e){return e===null||e===void 0?"null":typeof e=="string"?`"${Z(e)}"`:typeof e=="number"?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)?`[${e.map(S).join(", ")}]`:typeof e=="object"?`{ ${Object.entries(e).map(([n,r])=>`${n}: ${S(r)}`).join(", ")} }`:String(e)}function Z(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}function s(e){switch(e.kind){case"lit":return G(e.value);case"get":return Fe(e.path);case"eq":return`eq(${s(e.left)}, ${s(e.right)})`;case"neq":return`neq(${s(e.left)}, ${s(e.right)})`;case"gt":return`gt(${s(e.left)}, ${s(e.right)})`;case"gte":return`gte(${s(e.left)}, ${s(e.right)})`;case"lt":return`lt(${s(e.left)}, ${s(e.right)})`;case"lte":return`lte(${s(e.left)}, ${s(e.right)})`;case"and":return!e.args||!Array.isArray(e.args)?"and(/* malformed: args undefined */)":`and(${e.args.map(s).join(", ")})`;case"or":return!e.args||!Array.isArray(e.args)?"or(/* malformed: args undefined */)":`or(${e.args.map(s).join(", ")})`;case"not":return e.arg?`not(${s(e.arg)})`:"not(/* malformed: arg undefined */)";case"if":return`if(${s(e.cond)}, ${s(e.then)}, ${s(e.else)})`;case"add":return`add(${s(e.left)}, ${s(e.right)})`;case"sub":return`sub(${s(e.left)}, ${s(e.right)})`;case"mul":return`mul(${s(e.left)}, ${s(e.right)})`;case"div":return`div(${s(e.left)}, ${s(e.right)})`;case"mod":return`mod(${s(e.left)}, ${s(e.right)})`;case"concat":return!e.args||!Array.isArray(e.args)?"concat(/* malformed: args undefined */)":`concat(${e.args.map(s).join(", ")})`;case"substring":return e.end!==void 0?`substring(${s(e.str)}, ${s(e.start)}, ${s(e.end)})`:`substring(${s(e.str)}, ${s(e.start)})`;case"trim":return`trim(${s(e.str)})`;case"len":return`len(${s(e.arg)})`;case"at":return`at(${s(e.array)}, ${s(e.index)})`;case"first":return`first(${s(e.array)})`;case"last":return`last(${s(e.array)})`;case"slice":return e.end!==void 0?`slice(${s(e.array)}, ${s(e.start)}, ${s(e.end)})`:`slice(${s(e.array)}, ${s(e.start)})`;case"includes":return`includes(${s(e.array)}, ${s(e.item)})`;case"filter":return`filter(${s(e.array)}, ${s(e.predicate)})`;case"map":return`map(${s(e.array)}, ${s(e.mapper)})`;case"find":return`find(${s(e.array)}, ${s(e.predicate)})`;case"every":return`every(${s(e.array)}, ${s(e.predicate)})`;case"some":return`some(${s(e.array)}, ${s(e.predicate)})`;case"append":return!e.items||!Array.isArray(e.items)?`append(${s(e.array)}, /* malformed: items undefined */)`:`append(${s(e.array)}, ${e.items.map(s).join(", ")})`;case"object":return je(e.fields);case"field":return`${s(e.object)}.${e.property}`;case"keys":return`keys(${s(e.obj)})`;case"values":return`values(${s(e.obj)})`;case"entries":return`entries(${s(e.obj)})`;case"merge":return!e.objects||!Array.isArray(e.objects)?"merge(/* malformed: objects undefined */)":`merge(${e.objects.map(s).join(", ")})`;case"typeof":return`typeof(${s(e.arg)})`;case"isNull":return`isNull(${s(e.arg)})`;case"coalesce":return!e.args||!Array.isArray(e.args)?"coalesce(/* malformed: args undefined */)":`coalesce(${e.args.map(s).join(", ")})`;default:return`/* unknown: ${JSON.stringify(e)} */`}}function G(e){return e===null||e===void 0?"null":typeof e=="string"?`"${Te(e)}"`:typeof e=="number"?String(e):typeof e=="boolean"?e?"true":"false":Array.isArray(e)?`[${e.map(G).join(", ")}]`:typeof e=="object"?`{ ${Object.entries(e).map(([n,r])=>`${n}: ${G(r)}`).join(", ")} }`:String(e)}function Fe(e){return e.startsWith("$meta.")||e.startsWith("$system.")||e.startsWith("$input.")?e:e.startsWith("data.")?e.slice(5):e}function je(e){return`{ ${Object.entries(e).map(([n,r])=>`${n}: ${s(r)}`).join(", ")} }`}function Te(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}import{parsePath as ee}from"@manifesto-ai/core";var De={indent:" ",includeComments:!1,commentPrefix:"// "};function N(e,t){let n={...De,...t};switch(e.kind){case"addType":return Ie(e,n);case"addField":return _e(e,n);case"setFieldType":return Me(e,n);case"setDefaultValue":return Ge(e,n);case"addConstraint":return qe(e,n);case"addComputed":return Le(e,n);case"addActionAvailable":return Ue(e,n);default:return`// Unknown operation: ${JSON.stringify(e)}`}}function Ie(e,t){let{indent:n}=t;if(e.typeExpr.kind==="object"){let r=e.typeExpr.fields.map(a=>`${n}${P(a)}`).join(`
7
7
  `);return`type ${e.typeName} {
8
8
  ${r}
9
- }`}return`type ${e.typeName} = ${k(e.typeExpr)}`}function _e(e,t){let n=e.field;return"defaultValue"in n&&n.defaultValue!==void 0?P(n,n.defaultValue):P(n)}function Ge(e,t){let n=k(e.typeExpr),r=te(e.path),a=[];return t.includeComments&&a.push(`${t.commentPrefix}Change ${e.path} type to: ${n}`),a.push(`${r}: ${n}`),a.join(`
10
- `)}function qe(e,t){let n=te(e.path),r=S(e.value),a=[];return t.includeComments&&a.push(`${t.commentPrefix}Set default value for ${e.path}`),a.push(`${n} = ${r}`),a.join(`
11
- `)}function Le(e,t){let n=s(e.rule),r=e.message?` - "${e.message}"`:"";return`${t.commentPrefix}Constraint on ${e.targetPath}: ${n}${r}`}function Me(e,t){let n=s(e.expr),r=[];return t.includeComments&&e.deps&&e.deps.length>0&&r.push(`${t.commentPrefix}Dependencies: ${e.deps.join(", ")}`),r.push(`computed ${e.name} = ${n}`),r.join(`
9
+ }`}return`type ${e.typeName} = ${k(e.typeExpr)}`}function _e(e,t){let n=e.field;return"defaultValue"in n&&n.defaultValue!==void 0?P(n,n.defaultValue):P(n)}function Me(e,t){let n=k(e.typeExpr),r=te(e.path),a=[];return t.includeComments&&a.push(`${t.commentPrefix}Change ${e.path} type to: ${n}`),a.push(`${r}: ${n}`),a.join(`
10
+ `)}function Ge(e,t){let n=te(e.path),r=S(e.value),a=[];return t.includeComments&&a.push(`${t.commentPrefix}Set default value for ${e.path}`),a.push(`${n} = ${r}`),a.join(`
11
+ `)}function qe(e,t){let n=s(e.rule),r=e.message?` - "${e.message}"`:"";return`${t.commentPrefix}Constraint on ${e.targetPath}: ${n}${r}`}function Le(e,t){let n=s(e.expr),r=[];return t.includeComments&&e.deps&&e.deps.length>0&&r.push(`${t.commentPrefix}Dependencies: ${e.deps.join(", ")}`),r.push(`computed ${e.name} = ${n}`),r.join(`
12
12
  `)}function Ue(e,t){let n=s(e.expr),r=[];return t.includeComments&&r.push(`${t.commentPrefix}Add availability condition to ${e.actionName}`),r.push(`action ${e.actionName}() available when ${n} {`),r.push(`${t.indent}// action body...`),r.push("}"),r.join(`
13
- `)}function te(e){let t=ee(e);return t[t.length-1]??""}function ne(e){let t=ee(e);if(t.length>=2)return t[0]}var j={indent:" ",includeComments:!0,commentPrefix:"// ",includeMetadata:!0,includeEvidence:!1,includeConfidence:!0,includeFragmentId:!1};function L(e,t){let n={...j,...t},r=[];if(n.includeMetadata){if(n.includeFragmentId&&r.push(`${n.commentPrefix}Fragment: ${e.fragmentId}`),n.includeConfidence){let o=(e.confidence*100).toFixed(0);r.push(`${n.commentPrefix}Confidence: ${o}%`)}if(n.includeEvidence&&e.evidence.length>0){r.push(`${n.commentPrefix}Evidence:`);for(let o of e.evidence)r.push(`${n.commentPrefix} - ${o}`)}}let a=v(e.op,{indent:n.indent,includeComments:n.includeComments,commentPrefix:n.commentPrefix});return r.push(a),r.join(`
14
- `)}function M(e,t){let n={...j,...t};return e.map(a=>L(a,n)).join(`
13
+ `)}function te(e){let t=ee(e);return t[t.length-1]??""}function ne(e){let t=ee(e);if(t.length>=2)return t[0]}var j={indent:" ",includeComments:!0,commentPrefix:"// ",includeMetadata:!0,includeEvidence:!1,includeConfidence:!0,includeFragmentId:!1};function q(e,t){let n={...j,...t},r=[];if(n.includeMetadata){if(n.includeFragmentId&&r.push(`${n.commentPrefix}Fragment: ${e.fragmentId}`),n.includeConfidence){let o=(e.confidence*100).toFixed(0);r.push(`${n.commentPrefix}Confidence: ${o}%`)}if(n.includeEvidence&&e.evidence.length>0){r.push(`${n.commentPrefix}Evidence:`);for(let o of e.evidence)r.push(`${n.commentPrefix} - ${o}`)}}let a=N(e.op,{indent:n.indent,includeComments:n.includeComments,commentPrefix:n.commentPrefix});return r.push(a),r.join(`
14
+ `)}function L(e,t){let n={...j,...t};return e.map(a=>q(a,n)).join(`
15
15
 
16
- `)}function re(e,t){let n={...j,...t},r={};for(let o of e){let i=o.op.kind;r[i]||(r[i]=[]),r[i].push(o)}let a={};for(let[o,i]of Object.entries(r))a[o]=M(i,n);return a}function ae(e,t,n){let a={...j,...n}.indent??" ",o=[],i=[],u=[],d=[],y=[],p=[];for(let l of t)switch(l.op.kind){case"addType":o.push(l);break;case"addField":case"setFieldType":i.push(l);break;case"setDefaultValue":u.push(l);break;case"addComputed":d.push(l);break;case"addConstraint":y.push(l);break;case"addActionAvailable":p.push(l);break}let f=[];if(f.push(`domain ${e} {`),i.length>0||u.length>0){f.push(`${a}state {`);for(let l of[...i,...u]){let g=v(l.op,{indent:a+a,includeComments:!1});f.push(`${a}${a}${g}`)}f.push(`${a}}`),f.push("")}for(let l of o){let E=v(l.op,{indent:a,includeComments:!1}).split(`
16
+ `)}function re(e,t){let n={...j,...t},r={};for(let o of e){let i=o.op.kind;r[i]||(r[i]=[]),r[i].push(o)}let a={};for(let[o,i]of Object.entries(r))a[o]=L(i,n);return a}function ae(e,t,n){let a={...j,...n}.indent??" ",o=[],i=[],c=[],l=[],y=[],p=[];for(let d of t)switch(d.op.kind){case"addType":o.push(d);break;case"addField":case"setFieldType":i.push(d);break;case"setDefaultValue":c.push(d);break;case"addComputed":l.push(d);break;case"addConstraint":y.push(d);break;case"addActionAvailable":p.push(d);break}let f=[];if(f.push(`domain ${e} {`),i.length>0||c.length>0){f.push(`${a}state {`);for(let d of[...i,...c]){let g=N(d.op,{indent:a+a,includeComments:!1});f.push(`${a}${a}${g}`)}f.push(`${a}}`),f.push("")}for(let d of o){let E=N(d.op,{indent:a,includeComments:!1}).split(`
17
17
  `).map(b=>`${a}${b}`).join(`
18
- `);f.push(E),f.push("")}for(let l of d){let g=v(l.op,{indent:a,includeComments:!1});f.push(`${a}${g}`)}d.length>0&&f.push("");for(let l of y){let g=v(l.op,{indent:a,includeComments:!0});f.push(`${a}${g}`)}y.length>0&&f.push("");for(let l of p){let E=v(l.op,{indent:a,includeComments:!1}).split(`
18
+ `);f.push(E),f.push("")}for(let d of l){let g=N(d.op,{indent:a,includeComments:!1});f.push(`${a}${g}`)}l.length>0&&f.push("");for(let d of y){let g=N(d.op,{indent:a,includeComments:!0});f.push(`${a}${g}`)}y.length>0&&f.push("");for(let d of p){let E=N(d.op,{indent:a,includeComments:!1}).split(`
19
19
  `).map(b=>`${a}${b}`).join(`
20
20
  `);f.push(E),f.push("")}return f.push("}"),f.join(`
21
- `)}import{parsePath as Ve}from"@manifesto-ai/core";function We(e){return{snapshot:e.snapshot??{data:{},computed:{}},meta:e.meta,input:e.input??{},item:e.item}}function U(e,t,n){let r=structuredClone(e.data);return ze(r,t,n),{data:r,computed:e.computed}}function ze(e,t,n){let r=Ve(t),a=e;for(let i=0;i<r.length-1;i++){let u=r[i];(!(u in a)||typeof a[u]!="object")&&(a[u]={}),a=a[u]}let o=r[r.length-1];a[o]=n}import{parsePath as Ke}from"@manifesto-ai/core";function N(e,t){try{return c(e,t)}catch{return null}}function c(e,t){switch(e.kind){case"lit":return e.value;case"get":return Be(e.path,t);case"eq":return oe(e.left,e.right,t);case"neq":return He(e.left,e.right,t);case"gt":return T(e.left,e.right,t,(n,r)=>n>r);case"gte":return T(e.left,e.right,t,(n,r)=>n>=r);case"lt":return T(e.left,e.right,t,(n,r)=>n<r);case"lte":return T(e.left,e.right,t,(n,r)=>n<=r);case"and":return Xe(e.args,t);case"or":return Je(e.args,t);case"not":return Ye(e.arg,t);case"if":return Qe(e.cond,e.then,e.else,t);case"add":return V(e.left,e.right,t,(n,r)=>n+r);case"sub":return V(e.left,e.right,t,(n,r)=>n-r);case"mul":return V(e.left,e.right,t,(n,r)=>n*r);case"div":return Ze(e.left,e.right,t);case"mod":return et(e.left,e.right,t);case"neg":return tt(e.arg,t);case"concat":return nt(e.args,t);case"substring":return rt(e.str,e.start,e.end,t);case"trim":return at(e.str,t);case"len":return ot(e.arg,t);case"at":return it(e.array,e.index,t);case"first":return st(e.array,t);case"last":return ct(e.array,t);case"slice":return ut(e.array,e.start,e.end,t);case"includes":return dt(e.array,e.item,t);case"filter":return lt(e.array,e.predicate,t);case"map":return pt(e.array,e.mapper,t);case"find":return ft(e.array,e.predicate,t);case"every":return mt(e.array,e.predicate,t);case"some":return gt(e.array,e.predicate,t);case"append":return yt(e.array,e.items,t);case"object":return ht(e.fields,t);case"field":return Et(e.object,e.property,t);case"keys":return kt(e.obj,t);case"values":return Nt(e.obj,t);case"entries":return vt(e.obj,t);case"merge":return bt(e.objects,t);case"typeof":return Ct(e.arg,t);case"isNull":return St(e.arg,t);case"coalesce":return Pt(e.args,t);default:return null}}function Be(e,t){let n=Ke(e);return n[0]==="meta"?A(t.meta,n.slice(1)):n[0]==="input"?A(t.input,n.slice(1)):n[0]==="$item"?t.item===void 0?null:n.length===1?t.item:A(t.item,n.slice(1)):e in t.snapshot.computed?t.snapshot.computed[e]:A(t.snapshot.data,n)}function A(e,t){if(t.length===0)return e;if(e==null||typeof e!="object")return null;let[n,...r]=t,a=e[n];return r.length===0?a===void 0?null:a:A(a,r)}function oe(e,t,n){let r=c(e,n),a=c(t,n);return D(r,a)}function He(e,t,n){let r=oe(e,t,n);return r===null?null:!r}function T(e,t,n,r){let a=c(e,n),o=c(t,n);return typeof a!="number"||typeof o!="number"?null:r(a,o)}function D(e,t){if(e===t)return!0;if(e===null||t===null)return e===t;if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t))return e.length!==t.length?!1:e.every((n,r)=>D(n,t[r]));if(typeof e=="object"&&typeof t=="object"){let n=Object.keys(e),r=Object.keys(t);return n.length!==r.length?!1:n.every(a=>Object.prototype.hasOwnProperty.call(t,a)&&D(e[a],t[a]))}return!1}function Xe(e,t){for(let n of e){let r=c(n,t);if(r!==!0)return r===!1?!1:null}return!0}function Je(e,t){for(let n of e){let r=c(n,t);if(r===!0)return!0;if(r!==!1)return null}return!1}function Ye(e,t){let n=c(e,t);return typeof n!="boolean"?null:!n}function Qe(e,t,n,r){let a=c(e,r);return a===!0?c(t,r):a===!1?c(n,r):null}function V(e,t,n,r){let a=c(e,n),o=c(t,n);if(typeof a!="number"||typeof o!="number")return null;let i=r(a,o);return Number.isFinite(i)?i:null}function Ze(e,t,n){let r=c(e,n),a=c(t,n);return typeof r!="number"||typeof a!="number"||a===0?null:r/a}function et(e,t,n){let r=c(e,n),a=c(t,n);return typeof r!="number"||typeof a!="number"||a===0?null:r%a}function tt(e,t){let n=c(e,t);return typeof n=="number"?-n:null}function nt(e,t){let n=[];for(let r of e){let a=c(r,t);if(typeof a!="string")return null;n.push(a)}return n.join("")}function rt(e,t,n,r){let a=c(e,r),o=c(t,r);if(typeof a!="string"||typeof o!="number")return null;if(n===void 0)return a.substring(o);let i=c(n,r);return typeof i!="number"?null:a.substring(o,i)}function at(e,t){let n=c(e,t);return typeof n!="string"?null:n.trim()}function ot(e,t){let n=c(e,t);return Array.isArray(n)||typeof n=="string"?n.length:n!==null&&typeof n=="object"?Object.keys(n).length:null}function it(e,t,n){let r=c(e,n),a=c(t,n);return Array.isArray(r)&&typeof a=="number"?a<0||a>=r.length?null:r[a]:typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof a=="string"?r[a]??null:null}function st(e,t){let n=c(e,t);return!Array.isArray(n)||n.length===0?null:n[0]}function ct(e,t){let n=c(e,t);return!Array.isArray(n)||n.length===0?null:n[n.length-1]}function ut(e,t,n,r){let a=c(e,r),o=c(t,r);if(!Array.isArray(a)||typeof o!="number")return null;if(n===void 0)return a.slice(o);let i=c(n,r);return typeof i!="number"?null:a.slice(o,i)}function dt(e,t,n){let r=c(e,n),a=c(t,n);return Array.isArray(r)?r.some(o=>D(o,a)):null}function lt(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;let a=[];for(let o of r){let i={...n,item:o},u=c(t,i);if(u===!0)a.push(o);else if(u!==!1)return null}return a}function pt(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;let a=[];for(let o of r){let i={...n,item:o},u=c(t,i);a.push(u)}return a}function ft(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=c(t,o);if(i===!0)return a;if(i!==!1)return null}return null}function mt(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=c(t,o);if(i===!1)return!1;if(i!==!0)return null}return!0}function gt(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=c(t,o);if(i===!0)return!0;if(i!==!1)return null}return!1}function yt(e,t,n){let r=c(e,n);if(!Array.isArray(r))return null;let a=t.map(o=>c(o,n));return[...r,...a]}function ht(e,t){let n={};for(let r of Object.keys(e).sort(w)){let a=e[r];n[r]=c(a,t)}return n}function Et(e,t,n){let r=c(e,n);return r===null||typeof r!="object"||Array.isArray(r)?null:r[t]??null}function kt(e,t){let n=c(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w)}function Nt(e,t){let n=c(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w).map(r=>n[r])}function vt(e,t){let n=c(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w).map(r=>[r,n[r]])}function bt(e,t){let n={};for(let r of e){let a=c(r,t);if(a===null||typeof a!="object"||Array.isArray(a))return null;Object.assign(n,a)}return n}function Ct(e,t){let n=c(e,t);return n===null?"null":Array.isArray(n)?"array":typeof n}function St(e,t){return c(e,t)===null}function Pt(e,t){for(let n of e){let r=c(n,t);if(r!=null)return r}return null}function $t(e,t){let n=[],r=[],a=t.snapshot;for(let o of e){let i={...t,snapshot:a};if(o.condition!==void 0){let d=N(o.condition,i);if(d!==!0){let y=d===!1?"false":d===null?"null":"non-boolean";r.push({fragmentId:o.fragmentId,reason:y});continue}}let u={fragmentId:o.fragmentId,op:o.op,confidence:o.confidence,conditionEvaluated:o.condition!==void 0};n.push(u),a=At(a,o.op,i)}return{patches:n,skipped:r,finalSnapshot:a}}function wt(e,t){return e.filter(n=>n.condition===void 0?!0:N(n.condition,t)===!0).map(n=>({fragmentId:n.fragmentId,op:n.op,confidence:n.confidence,conditionEvaluated:n.condition!==void 0}))}function At(e,t,n){switch(t.kind){case"setDefaultValue":return U(e,t.path,t.value);case"addType":case"addField":case"setFieldType":case"addConstraint":case"addComputed":case"addActionAvailable":return e}}function xt(e,t){switch(e.kind){case"addType":case"addField":case"setFieldType":case"setDefaultValue":return e;case"addConstraint":return{...e};case"addComputed":return{...e};case"addActionAvailable":return{...e}}}function Ot(e,t){return e===void 0?!0:N(e,t)===!0}function Rt(e,t){if(e===void 0)return{passes:!0,reason:"no-condition"};let n=N(e,t);return n===!0?{passes:!0,reason:"true"}:n===!1?{passes:!1,reason:"false"}:n===null?{passes:!1,reason:"null"}:{passes:!1,reason:"non-boolean"}}import{mergeAtPatchPath as Ft,patchPathToDisplayString as ie,setByPatchPath as jt,unsetByPatchPath as Tt}from"@manifesto-ai/core";var Dt=new Set(["__proto__","constructor","prototype"]);function It(e,t){return de(e,t).patches}function de(e,t){let n=[],r=[],a=[],o=t.snapshot,i=[];for(let u=0;u<e.length;u++){let d=e[u],y=d.op==="set"&&I(d.path),p=i.length>0,f=y||!p?o:i[i.length-1].snapshot,l={...t,snapshot:f};if(d.condition!==void 0){let $=N(d.condition,l);if($!==!0){let ke=$===!1?"false":$===null?"null":"non-boolean";r.push({index:u,path:ue(d.path),reason:ke});continue}}let g=qt(d.path,l);if(!g.ok){r.push({index:u,path:ue(d.path),reason:"invalid-path"}),a.push(`Skipped runtime patch at index ${u}: ${g.warning}`);continue}let E=g.path,b=d.value?N(d.value,l):void 0,m=_t(d.op,E,b);if(m!==null&&!(d.op==="unset"&&I(d.path)&&(!p||!ce(i[i.length-1].markerPath,E)))){if(n.push(m),o=Gt(o,m),d.op==="set"&&I(d.path)){i.push({markerPath:E,snapshot:o});continue}d.op==="unset"&&I(d.path)&&i.length>0&&ce(i[i.length-1].markerPath,E)&&i.pop()}}return{patches:n,skipped:r,warnings:a,finalSnapshot:o}}function _t(e,t,n){switch(e){case"set":return{op:"set",path:t,value:n};case"unset":return{op:"unset",path:t};case"merge":return Mt(n)?{op:"merge",path:t,value:n}:{op:"set",path:t,value:null}}}function Gt(e,t){let n=e.data;return{data:(()=>{switch(t.op){case"set":return jt(n,t.path,t.value);case"unset":return Tt(n,t.path);case"merge":return Ft(n,t.path,t.value)}})(),computed:e.computed}}function qt(e,t){if(e.length===0)return{ok:!1,warning:"path is empty"};let n=[];for(let r=0;r<e.length;r++){let a=e[r];if(a.kind==="prop"){if(!le(a.name))return{ok:!1,warning:`invalid prop segment '${a.name}'`};n.push({kind:"prop",name:a.name});continue}let o=N(a.expr,t),i=Lt(o);if(i===null)return{ok:!1,warning:`expr segment at index ${r} resolved to invalid value`};n.push(i)}return{ok:!0,path:n}}function Lt(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)&&e>=0?{kind:"index",index:e}:typeof e=="string"&&e.length>0&&le(e)?{kind:"prop",name:e}:null}function le(e){return e.length>0&&!Dt.has(e)}function I(e){return se(e,["$mel","__whenGuards"])||se(e,["$mel","__onceScopeGuards"])}function se(e,t){if(e.length<t.length)return!1;for(let n=0;n<t.length;n++){let r=e[n];if(r.kind!=="prop"||r.name!==t[n])return!1}return!0}function ce(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],a=t[n];if(r.kind!==a.kind||r.kind==="prop"&&a.kind==="prop"&&r.name!==a.name||r.kind==="index"&&a.kind==="index"&&r.index!==a.index)return!1}return!0}function ue(e){let t=[];for(let n of e){if(n.kind==="prop"){t.push({kind:"prop",name:n.name});continue}return t.length===0?"[expr]":`${ie(t)}.[expr]`}return t.length===0?"":ie(t)}function Mt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var Ut=new Set(["$item","$index","$array"]);function Wr(e){let t=Object.keys(e.state.fields).filter(p=>!p.startsWith("$")),n=Vt(e),r=new Set(n),a=new Set(t),o=Object.keys(e.actions),i=[...t.map(p=>({id:W(p),kind:"state",name:p})),...n.map(p=>({id:z(p),kind:"computed",name:p})),...o.map(p=>({id:fe(p),kind:"action",name:p}))],u=new Set,d=[],y=(p,f,l)=>{if(!p||!f)return;let g=`${p}|${l}|${f}`;u.has(g)||(u.add(g),d.push({from:p,to:f,relation:l}))};for(let p of n){let f=e.computed.fields[p];if(f)for(let l of f.deps)y(pe(l,e,r,a),z(p),"feeds")}for(let p of o){let f=e.actions[p],l=fe(p);for(let g of Wt(f.flow,e))a.has(g)&&y(l,W(g),"mutates");if(f.available)for(let g of Ee(f.available))y(pe(g,e,r,a),l,"unlocks")}return Bt({nodes:i,edges:d})}function Vt(e){let t=e.computed.fields,n=new Map,r=(a,o)=>{let i=n.get(a);if(i!==void 0)return i;if(o.has(a))return!1;o.add(a);let u=t[a];if(!u)return o.delete(a),n.set(a,!0),!0;for(let d of Ee(u.expr)){if(he(d))return o.delete(a),n.set(a,!1),!1;let y=me(d,t);if(y!==null&&!r(y,o))return o.delete(a),n.set(a,!1),!1}return o.delete(a),n.set(a,!0),!0};return Object.keys(t).filter(a=>r(a,new Set))}function Wt(e,t){let n=new Set,r=(a,o)=>{if(a)switch(a.kind){case"seq":a.steps.forEach(i=>r(i,o));return;case"if":r(a.then,o),r(a.else,o);return;case"patch":{let i=zt(a.path);i&&n.add(i);return}case"effect":{let i=Kt(a.params.into);i&&n.add(i);return}case"call":{if(o.has(a.flow))return;let i=t.actions[a.flow];if(!i)return;let u=new Set(o);u.add(a.flow),r(i.flow,u);return}case"halt":case"fail":return}};return r(e,new Set),[...n]}function zt(e){let[t]=e;return!t||t.kind!=="prop"||t.name.startsWith("$")?null:t.name}function Kt(e){return typeof e!="object"||e===null||e.kind!=="lit"||typeof e.value!="string"?null:ge(e.value)}function pe(e,t,n,r){let a=me(e,t.computed.fields);if(a!==null&&n.has(a))return z(a);if(he(e))return null;let o=ge(e);return!o||!r.has(o)?null:W(o)}function me(e,t){if(Object.prototype.hasOwnProperty.call(t,e))return e;if(!e.startsWith("computed."))return null;let n=e.slice(9);return Object.prototype.hasOwnProperty.call(t,n)?n:null}function ge(e){let t=ye(e),n=t.startsWith("data.")?t.slice(5):t,r=/^([^.[\]]+)/.exec(n);if(!r)return null;let[a]=r.slice(1);return!a||a.startsWith("$")?null:a}function ye(e){return e.startsWith("/")?e.slice(1).replace(/\//g,"."):e}function he(e){let t=ye(e),n=t.startsWith("data.")?t.slice(5):t,a=/^([^.[\]]+)/.exec(n)?.[1]??"";return a.startsWith("$")?!Ut.has(a):!1}function Ee(e){let t=[],n=new WeakSet,r=a=>{if(a==null)return;if(Array.isArray(a)){a.forEach(r);return}if(typeof a!="object")return;let o=a;if(!n.has(o)&&(n.add(o),o.kind!=="lit")){if(o.kind==="get"&&typeof o.path=="string"){t.push(o.path);return}for(let i of Object.values(o))r(i)}};return r(e),t}function W(e){return`state:${e}`}function z(e){return`computed:${e}`}function fe(e){return`action:${e}`}function Bt(e){return Object.freeze({nodes:Object.freeze(e.nodes.map(t=>Object.freeze(t))),edges:Object.freeze([...e.edges].sort(Ht).map(t=>Object.freeze(t)))})}function Ht(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)||e.relation.localeCompare(t.relation)}function Xt(e,t={}){let n=[],r=performance.now(),a=_(e);if(n.push({phase:"lex",durationMs:performance.now()-r,details:{tokenCount:a.tokens.length}}),x(a.diagnostics))return{schema:null,trace:n,warnings:a.diagnostics.filter(m=>m.severity==="warning"),errors:a.diagnostics.filter(m=>m.severity==="error"),success:!1};let o=performance.now(),i=G(a.tokens),u=i.diagnostics;if(n.push({phase:"parse",durationMs:performance.now()-o}),x(u))return{schema:null,trace:n,warnings:u.filter(m=>m.severity==="warning"),errors:u.filter(m=>m.severity==="error"),success:!1};let d=[],y=performance.now(),p=X(i.program);if(d.push(...p.diagnostics),!t.skipSemanticAnalysis){let m=K(p.program),$=B(p.program);d.push(...m.diagnostics,...$.diagnostics)}if(n.push({phase:"analyze",durationMs:performance.now()-y}),d.some(m=>m.severity==="error"))return{schema:null,trace:n,warnings:d.filter(m=>m.severity==="warning"),errors:d.filter(m=>m.severity==="error"),success:!1};let f=performance.now(),l=H(p.program);d.push(...l.diagnostics),n.push({phase:"generate",durationMs:performance.now()-f}),t.skipSemanticAnalysis&&d.push(...i.diagnostics);let g=d.filter(m=>m.severity==="error");if(l.schema===null||g.length>0)return{schema:null,trace:n,warnings:d.filter(m=>m.severity==="warning"),errors:g,success:!1};let E=l.schema;if(t.lowerSystemValues){let m=performance.now();E=Q(E),n.push({phase:"lower",durationMs:performance.now()-m})}let b=d.filter(m=>m.severity==="warning");return{schema:E,trace:n,warnings:b,errors:d.filter(m=>m.severity==="error"),success:g.length===0}}function Zr(e){let t=_(e);return x(t.diagnostics)?{program:null,diagnostics:t.diagnostics}:G(t.tokens)}function ea(e){return Xt(e).errors}export{$n as DEFAULT_ACTION_CONTEXT,wn as DEFAULT_DISPATCHABLE_CONTEXT,xn as DEFAULT_PATCH_CONTEXT,Pn as DEFAULT_SCHEMA_CONTEXT,J as DIAGNOSTIC_CODES,An as EFFECT_ARGS_CONTEXT,Jt as KEYWORDS,sn as Lexer,On as LoweringError,yn as Parser,dn as Precedence,Yt as RESERVED_KEYWORDS,hn as Scope,En as ScopeAnalyzer,Sn as SemanticValidator,K as analyzeScope,U as applyPatchToWorkingSnapshot,ea as check,Rt as classifyCondition,Xt as compile,Un as compileMelDomain,Vn as compileMelPatch,kn as createError,We as createEvaluationContext,vn as createInfo,rn as createLocation,an as createPointLocation,nn as createPosition,tn as createToken,Nn as createWarning,Ot as evaluateCondition,$t as evaluateConditionalPatchOps,N as evaluateExpr,xt as evaluatePatchExpressions,wt as evaluatePatches,It as evaluateRuntimePatches,de as evaluateRuntimePatchesWithTrace,Wr as extractSchemaGraph,ne as extractTypeName,Cn as filterBySeverity,Y as formatDiagnostic,Hn as formatDiagnosticCode,Ne as formatDiagnostics,H as generate,Mn as generateCanonical,ln as getBinaryPrecedence,Bn as getDiagnosticInfo,en as getKeywordKind,x as hasErrors,Rn as invalidKindForContext,Dn as invalidShape,jn as invalidSysPath,fn as isBinaryOp,bn as isError,cn as isExprNode,Qt as isKeyword,Zt as isReserved,gn as isRightAssociative,un as isStmtNode,mn as isUnaryOp,_n as lowerExprNode,Gn as lowerPatchFragments,Ln as lowerRuntimePatch,qn as lowerRuntimePatches,Q as lowerSystemValues,on as mergeLocations,tr as normalizeExpr,nr as normalizeFunctionCall,G as parse,Zr as parseSource,ae as renderAsDomain,s as renderExprNode,L as renderFragment,M as renderFragments,re as renderFragmentsByKind,v as renderPatchOp,k as renderTypeExpr,P as renderTypeField,S as renderValue,pn as tokenToBinaryOp,_ as tokenize,Fn as unknownCallFn,In as unknownNodeKind,Tn as unsupportedBase,B as validateSemantics};
21
+ `)}import{parsePath as Ve}from"@manifesto-ai/core";function We(e){return{snapshot:e.snapshot??{data:{},computed:{}},meta:e.meta,input:e.input??{},item:e.item}}function U(e,t,n){let r=structuredClone(e.data);return ze(r,t,n),{data:r,computed:e.computed}}function ze(e,t,n){let r=Ve(t),a=e;for(let i=0;i<r.length-1;i++){let c=r[i];(!(c in a)||typeof a[c]!="object")&&(a[c]={}),a=a[c]}let o=r[r.length-1];a[o]=n}import{parsePath as Ke}from"@manifesto-ai/core";function v(e,t){try{return u(e,t)}catch{return null}}function u(e,t){switch(e.kind){case"lit":return e.value;case"get":return Be(e.path,t);case"eq":return oe(e.left,e.right,t);case"neq":return He(e.left,e.right,t);case"gt":return T(e.left,e.right,t,(n,r)=>n>r);case"gte":return T(e.left,e.right,t,(n,r)=>n>=r);case"lt":return T(e.left,e.right,t,(n,r)=>n<r);case"lte":return T(e.left,e.right,t,(n,r)=>n<=r);case"and":return Xe(e.args,t);case"or":return Je(e.args,t);case"not":return Ye(e.arg,t);case"if":return Qe(e.cond,e.then,e.else,t);case"add":return V(e.left,e.right,t,(n,r)=>n+r);case"sub":return V(e.left,e.right,t,(n,r)=>n-r);case"mul":return V(e.left,e.right,t,(n,r)=>n*r);case"div":return Ze(e.left,e.right,t);case"mod":return et(e.left,e.right,t);case"neg":return tt(e.arg,t);case"min":return nt(e.args,t);case"max":return rt(e.args,t);case"abs":return at(e.arg,t);case"floor":return ot(e.arg,t);case"ceil":return it(e.arg,t);case"round":return st(e.arg,t);case"sqrt":return ut(e.arg,t);case"pow":return ct(e.base,e.exponent,t);case"concat":return lt(e.args,t);case"substring":return dt(e.str,e.start,e.end,t);case"trim":return pt(e.str,t);case"len":return ft(e.arg,t);case"at":return mt(e.array,e.index,t);case"first":return gt(e.array,t);case"last":return yt(e.array,t);case"slice":return ht(e.array,e.start,e.end,t);case"includes":return Et(e.array,e.item,t);case"filter":return kt(e.array,e.predicate,t);case"map":return vt(e.array,e.mapper,t);case"find":return Nt(e.array,e.predicate,t);case"every":return bt(e.array,e.predicate,t);case"some":return Ct(e.array,e.predicate,t);case"append":return St(e.array,e.items,t);case"sumArray":return Pt(e.array,t);case"minArray":return $t(e.array,t);case"maxArray":return wt(e.array,t);case"object":return At(e.fields,t);case"field":return xt(e.object,e.property,t);case"keys":return Ot(e.obj,t);case"values":return Rt(e.obj,t);case"entries":return Ft(e.obj,t);case"merge":return jt(e.objects,t);case"typeof":return Tt(e.arg,t);case"isNull":return Dt(e.arg,t);case"coalesce":return It(e.args,t);default:return null}}function Be(e,t){let n=Ke(e);return n[0]==="meta"?A(t.meta,n.slice(1)):n[0]==="input"?A(t.input,n.slice(1)):n[0]==="$item"?t.item===void 0?null:n.length===1?t.item:A(t.item,n.slice(1)):e in t.snapshot.computed?t.snapshot.computed[e]:A(t.snapshot.data,n)}function A(e,t){if(t.length===0)return e;if(e==null||typeof e!="object")return null;let[n,...r]=t,a=e[n];return r.length===0?a===void 0?null:a:A(a,r)}function oe(e,t,n){let r=u(e,n),a=u(t,n);return D(r,a)}function He(e,t,n){let r=oe(e,t,n);return r===null?null:!r}function T(e,t,n,r){let a=u(e,n),o=u(t,n);return typeof a!="number"||typeof o!="number"?null:r(a,o)}function D(e,t){if(e===t)return!0;if(e===null||t===null)return e===t;if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t))return e.length!==t.length?!1:e.every((n,r)=>D(n,t[r]));if(typeof e=="object"&&typeof t=="object"){let n=Object.keys(e),r=Object.keys(t);return n.length!==r.length?!1:n.every(a=>Object.prototype.hasOwnProperty.call(t,a)&&D(e[a],t[a]))}return!1}function Xe(e,t){for(let n of e){let r=u(n,t);if(r!==!0)return r===!1?!1:null}return!0}function Je(e,t){for(let n of e){let r=u(n,t);if(r===!0)return!0;if(r!==!1)return null}return!1}function Ye(e,t){let n=u(e,t);return typeof n!="boolean"?null:!n}function Qe(e,t,n,r){let a=u(e,r);return a===!0?u(t,r):a===!1?u(n,r):null}function V(e,t,n,r){let a=u(e,n),o=u(t,n);if(typeof a!="number"||typeof o!="number")return null;let i=r(a,o);return Number.isFinite(i)?i:null}function Ze(e,t,n){let r=u(e,n),a=u(t,n);return typeof r!="number"||typeof a!="number"||a===0?null:r/a}function et(e,t,n){let r=u(e,n),a=u(t,n);return typeof r!="number"||typeof a!="number"||a===0?null:r%a}function tt(e,t){let n=u(e,t);return typeof n=="number"?-n:null}function nt(e,t){if(e.length===0)return null;let n=null;for(let r of e){let a=u(r,t);if(typeof a!="number")return null;n=n===null?a:Math.min(n,a)}return n}function rt(e,t){if(e.length===0)return null;let n=null;for(let r of e){let a=u(r,t);if(typeof a!="number")return null;n=n===null?a:Math.max(n,a)}return n}function at(e,t){let n=u(e,t);return typeof n=="number"?Math.abs(n):null}function ot(e,t){let n=u(e,t);return typeof n=="number"?Math.floor(n):null}function it(e,t){let n=u(e,t);return typeof n=="number"?Math.ceil(n):null}function st(e,t){let n=u(e,t);return typeof n=="number"?Math.round(n):null}function ut(e,t){let n=u(e,t);return typeof n!="number"||n<0?null:Math.sqrt(n)}function ct(e,t,n){let r=u(e,n),a=u(t,n);if(typeof r!="number"||typeof a!="number")return null;let o=Math.pow(r,a);return Number.isFinite(o)?o:null}function lt(e,t){let n=[];for(let r of e){let a=u(r,t);if(typeof a!="string")return null;n.push(a)}return n.join("")}function dt(e,t,n,r){let a=u(e,r),o=u(t,r);if(typeof a!="string"||typeof o!="number")return null;if(n===void 0)return a.substring(o);let i=u(n,r);return typeof i!="number"?null:a.substring(o,i)}function pt(e,t){let n=u(e,t);return typeof n!="string"?null:n.trim()}function ft(e,t){let n=u(e,t);return Array.isArray(n)||typeof n=="string"?n.length:n!==null&&typeof n=="object"?Object.keys(n).length:null}function mt(e,t,n){let r=u(e,n),a=u(t,n);return Array.isArray(r)&&typeof a=="number"?a<0||a>=r.length?null:r[a]:typeof r=="object"&&r!==null&&!Array.isArray(r)&&typeof a=="string"?r[a]??null:null}function gt(e,t){let n=u(e,t);return!Array.isArray(n)||n.length===0?null:n[0]}function yt(e,t){let n=u(e,t);return!Array.isArray(n)||n.length===0?null:n[n.length-1]}function ht(e,t,n,r){let a=u(e,r),o=u(t,r);if(!Array.isArray(a)||typeof o!="number")return null;if(n===void 0)return a.slice(o);let i=u(n,r);return typeof i!="number"?null:a.slice(o,i)}function Et(e,t,n){let r=u(e,n),a=u(t,n);return Array.isArray(r)?r.some(o=>D(o,a)):null}function kt(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;let a=[];for(let o of r){let i={...n,item:o},c=u(t,i);if(c===!0)a.push(o);else if(c!==!1)return null}return a}function vt(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;let a=[];for(let o of r){let i={...n,item:o},c=u(t,i);a.push(c)}return a}function Nt(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=u(t,o);if(i===!0)return a;if(i!==!1)return null}return null}function bt(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=u(t,o);if(i===!1)return!1;if(i!==!0)return null}return!0}function Ct(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;for(let a of r){let o={...n,item:a},i=u(t,o);if(i===!0)return!0;if(i!==!1)return null}return!1}function St(e,t,n){let r=u(e,n);if(!Array.isArray(r))return null;let a=t.map(o=>u(o,n));return[...r,...a]}function Pt(e,t){let n=u(e,t);if(!Array.isArray(n))return null;let r=0;for(let a of n){if(typeof a!="number")return null;r+=a}return r}function $t(e,t){let n=u(e,t);if(!Array.isArray(n)||n.length===0)return null;let r=null;for(let a of n){if(typeof a!="number")return null;r=r===null?a:Math.min(r,a)}return r}function wt(e,t){let n=u(e,t);if(!Array.isArray(n)||n.length===0)return null;let r=null;for(let a of n){if(typeof a!="number")return null;r=r===null?a:Math.max(r,a)}return r}function At(e,t){let n={};for(let r of Object.keys(e).sort(w)){let a=e[r];n[r]=u(a,t)}return n}function xt(e,t,n){let r=u(e,n);return r===null||typeof r!="object"||Array.isArray(r)?null:r[t]??null}function Ot(e,t){let n=u(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w)}function Rt(e,t){let n=u(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w).map(r=>n[r])}function Ft(e,t){let n=u(e,t);return n===null||typeof n!="object"||Array.isArray(n)?null:Object.keys(n).sort(w).map(r=>[r,n[r]])}function jt(e,t){let n={};for(let r of e){let a=u(r,t);if(a===null||typeof a!="object"||Array.isArray(a))return null;Object.assign(n,a)}return n}function Tt(e,t){let n=u(e,t);return n===null?"null":Array.isArray(n)?"array":typeof n}function Dt(e,t){return u(e,t)===null}function It(e,t){for(let n of e){let r=u(n,t);if(r!=null)return r}return null}function _t(e,t){let n=[],r=[],a=t.snapshot;for(let o of e){let i={...t,snapshot:a};if(o.condition!==void 0){let l=v(o.condition,i);if(l!==!0){let y=l===!1?"false":l===null?"null":"non-boolean";r.push({fragmentId:o.fragmentId,reason:y});continue}}let c={fragmentId:o.fragmentId,op:o.op,confidence:o.confidence,conditionEvaluated:o.condition!==void 0};n.push(c),a=Gt(a,o.op,i)}return{patches:n,skipped:r,finalSnapshot:a}}function Mt(e,t){return e.filter(n=>n.condition===void 0?!0:v(n.condition,t)===!0).map(n=>({fragmentId:n.fragmentId,op:n.op,confidence:n.confidence,conditionEvaluated:n.condition!==void 0}))}function Gt(e,t,n){switch(t.kind){case"setDefaultValue":return U(e,t.path,t.value);case"addType":case"addField":case"setFieldType":case"addConstraint":case"addComputed":case"addActionAvailable":return e}}function qt(e,t){switch(e.kind){case"addType":case"addField":case"setFieldType":case"setDefaultValue":return e;case"addConstraint":return{...e};case"addComputed":return{...e};case"addActionAvailable":return{...e}}}function Lt(e,t){return e===void 0?!0:v(e,t)===!0}function Ut(e,t){if(e===void 0)return{passes:!0,reason:"no-condition"};let n=v(e,t);return n===!0?{passes:!0,reason:"true"}:n===!1?{passes:!1,reason:"false"}:n===null?{passes:!1,reason:"null"}:{passes:!1,reason:"non-boolean"}}import{mergeAtPatchPath as Vt,patchPathToDisplayString as ie,setByPatchPath as Wt,unsetByPatchPath as zt}from"@manifesto-ai/core";var Kt=new Set(["__proto__","constructor","prototype"]);function Bt(e,t){return le(e,t).patches}function le(e,t){let n=[],r=[],a=[],o=t.snapshot,i=[];for(let c=0;c<e.length;c++){let l=e[c],y=l.op==="set"&&I(l.path),p=i.length>0,f=y||!p?o:i[i.length-1].snapshot,d={...t,snapshot:f};if(l.condition!==void 0){let $=v(l.condition,d);if($!==!0){let ke=$===!1?"false":$===null?"null":"non-boolean";r.push({index:c,path:ce(l.path),reason:ke});continue}}let g=Jt(l.path,d);if(!g.ok){r.push({index:c,path:ce(l.path),reason:"invalid-path"}),a.push(`Skipped runtime patch at index ${c}: ${g.warning}`);continue}let E=g.path,b=l.value?v(l.value,d):void 0,m=Ht(l.op,E,b);if(m!==null&&!(l.op==="unset"&&I(l.path)&&(!p||!ue(i[i.length-1].markerPath,E)))){if(n.push(m),o=Xt(o,m),l.op==="set"&&I(l.path)){i.push({markerPath:E,snapshot:o});continue}l.op==="unset"&&I(l.path)&&i.length>0&&ue(i[i.length-1].markerPath,E)&&i.pop()}}return{patches:n,skipped:r,warnings:a,finalSnapshot:o}}function Ht(e,t,n){switch(e){case"set":return{op:"set",path:t,value:n};case"unset":return{op:"unset",path:t};case"merge":return Qt(n)?{op:"merge",path:t,value:n}:{op:"set",path:t,value:null}}}function Xt(e,t){let n=e.data;return{data:(()=>{switch(t.op){case"set":return Wt(n,t.path,t.value);case"unset":return zt(n,t.path);case"merge":return Vt(n,t.path,t.value)}})(),computed:e.computed}}function Jt(e,t){if(e.length===0)return{ok:!1,warning:"path is empty"};let n=[];for(let r=0;r<e.length;r++){let a=e[r];if(a.kind==="prop"){if(!de(a.name))return{ok:!1,warning:`invalid prop segment '${a.name}'`};n.push({kind:"prop",name:a.name});continue}let o=v(a.expr,t),i=Yt(o);if(i===null)return{ok:!1,warning:`expr segment at index ${r} resolved to invalid value`};n.push(i)}return{ok:!0,path:n}}function Yt(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)&&e>=0?{kind:"index",index:e}:typeof e=="string"&&e.length>0&&de(e)?{kind:"prop",name:e}:null}function de(e){return e.length>0&&!Kt.has(e)}function I(e){return se(e,["$mel","__whenGuards"])||se(e,["$mel","__onceScopeGuards"])}function se(e,t){if(e.length<t.length)return!1;for(let n=0;n<t.length;n++){let r=e[n];if(r.kind!=="prop"||r.name!==t[n])return!1}return!0}function ue(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],a=t[n];if(r.kind!==a.kind||r.kind==="prop"&&a.kind==="prop"&&r.name!==a.name||r.kind==="index"&&a.kind==="index"&&r.index!==a.index)return!1}return!0}function ce(e){let t=[];for(let n of e){if(n.kind==="prop"){t.push({kind:"prop",name:n.name});continue}return t.length===0?"[expr]":`${ie(t)}.[expr]`}return t.length===0?"":ie(t)}function Qt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var Zt=new Set(["$item","$index","$array"]);function ta(e){let t=Object.keys(e.state.fields).filter(p=>!p.startsWith("$")),n=en(e),r=new Set(n),a=new Set(t),o=Object.keys(e.actions),i=[...t.map(p=>({id:W(p),kind:"state",name:p})),...n.map(p=>({id:z(p),kind:"computed",name:p})),...o.map(p=>({id:fe(p),kind:"action",name:p}))],c=new Set,l=[],y=(p,f,d)=>{if(!p||!f)return;let g=`${p}|${d}|${f}`;c.has(g)||(c.add(g),l.push({from:p,to:f,relation:d}))};for(let p of n){let f=e.computed.fields[p];if(f)for(let d of f.deps)y(pe(d,e,r,a),z(p),"feeds")}for(let p of o){let f=e.actions[p],d=fe(p);for(let g of tn(f.flow,e))a.has(g)&&y(d,W(g),"mutates");if(f.available)for(let g of Ee(f.available))y(pe(g,e,r,a),d,"unlocks")}return an({nodes:i,edges:l})}function en(e){let t=e.computed.fields,n=new Map,r=(a,o)=>{let i=n.get(a);if(i!==void 0)return i;if(o.has(a))return!1;o.add(a);let c=t[a];if(!c)return o.delete(a),n.set(a,!0),!0;for(let l of Ee(c.expr)){if(he(l))return o.delete(a),n.set(a,!1),!1;let y=me(l,t);if(y!==null&&!r(y,o))return o.delete(a),n.set(a,!1),!1}return o.delete(a),n.set(a,!0),!0};return Object.keys(t).filter(a=>r(a,new Set))}function tn(e,t){let n=new Set,r=(a,o)=>{if(a)switch(a.kind){case"seq":a.steps.forEach(i=>r(i,o));return;case"if":r(a.then,o),r(a.else,o);return;case"patch":{let i=nn(a.path);i&&n.add(i);return}case"effect":{let i=rn(a.params.into);i&&n.add(i);return}case"call":{if(o.has(a.flow))return;let i=t.actions[a.flow];if(!i)return;let c=new Set(o);c.add(a.flow),r(i.flow,c);return}case"halt":case"fail":return}};return r(e,new Set),[...n]}function nn(e){let[t]=e;return!t||t.kind!=="prop"||t.name.startsWith("$")?null:t.name}function rn(e){return typeof e!="object"||e===null||e.kind!=="lit"||typeof e.value!="string"?null:ge(e.value)}function pe(e,t,n,r){let a=me(e,t.computed.fields);if(a!==null&&n.has(a))return z(a);if(he(e))return null;let o=ge(e);return!o||!r.has(o)?null:W(o)}function me(e,t){if(Object.prototype.hasOwnProperty.call(t,e))return e;if(!e.startsWith("computed."))return null;let n=e.slice(9);return Object.prototype.hasOwnProperty.call(t,n)?n:null}function ge(e){let t=ye(e),n=t.startsWith("data.")?t.slice(5):t,r=/^([^.[\]]+)/.exec(n);if(!r)return null;let[a]=r.slice(1);return!a||a.startsWith("$")?null:a}function ye(e){return e.startsWith("/")?e.slice(1).replace(/\//g,"."):e}function he(e){let t=ye(e),n=t.startsWith("data.")?t.slice(5):t,a=/^([^.[\]]+)/.exec(n)?.[1]??"";return a.startsWith("$")?!Zt.has(a):!1}function Ee(e){let t=[],n=new WeakSet,r=a=>{if(a==null)return;if(Array.isArray(a)){a.forEach(r);return}if(typeof a!="object")return;let o=a;if(!n.has(o)&&(n.add(o),o.kind!=="lit")){if(o.kind==="get"&&typeof o.path=="string"){t.push(o.path);return}for(let i of Object.values(o))r(i)}};return r(e),t}function W(e){return`state:${e}`}function z(e){return`computed:${e}`}function fe(e){return`action:${e}`}function an(e){return Object.freeze({nodes:Object.freeze(e.nodes.map(t=>Object.freeze(t))),edges:Object.freeze([...e.edges].sort(on).map(t=>Object.freeze(t)))})}function on(e,t){return e.from.localeCompare(t.from)||e.to.localeCompare(t.to)||e.relation.localeCompare(t.relation)}function sn(e,t={}){let n=[],r=performance.now(),a=_(e);if(n.push({phase:"lex",durationMs:performance.now()-r,details:{tokenCount:a.tokens.length}}),x(a.diagnostics))return{schema:null,trace:n,warnings:a.diagnostics.filter(m=>m.severity==="warning"),errors:a.diagnostics.filter(m=>m.severity==="error"),success:!1};let o=performance.now(),i=M(a.tokens),c=i.diagnostics;if(n.push({phase:"parse",durationMs:performance.now()-o}),x(c))return{schema:null,trace:n,warnings:c.filter(m=>m.severity==="warning"),errors:c.filter(m=>m.severity==="error"),success:!1};let l=[],y=performance.now(),p=X(i.program);if(l.push(...p.diagnostics),!t.skipSemanticAnalysis){let m=K(p.program),$=B(p.program);l.push(...m.diagnostics,...$.diagnostics)}if(n.push({phase:"analyze",durationMs:performance.now()-y}),l.some(m=>m.severity==="error"))return{schema:null,trace:n,warnings:l.filter(m=>m.severity==="warning"),errors:l.filter(m=>m.severity==="error"),success:!1};let f=performance.now(),d=H(p.program);l.push(...d.diagnostics),n.push({phase:"generate",durationMs:performance.now()-f}),t.skipSemanticAnalysis&&l.push(...i.diagnostics);let g=l.filter(m=>m.severity==="error");if(d.schema===null||g.length>0)return{schema:null,trace:n,warnings:l.filter(m=>m.severity==="warning"),errors:g,success:!1};let E=d.schema;if(t.lowerSystemValues){let m=performance.now();E=Q(E),n.push({phase:"lower",durationMs:performance.now()-m})}let b=l.filter(m=>m.severity==="warning");return{schema:E,trace:n,warnings:b,errors:l.filter(m=>m.severity==="error"),success:g.length===0}}function la(e){let t=_(e);return x(t.diagnostics)?{program:null,diagnostics:t.diagnostics}:M(t.tokens)}function da(e){return sn(e).errors}export{_n as DEFAULT_ACTION_CONTEXT,Mn as DEFAULT_DISPATCHABLE_CONTEXT,qn as DEFAULT_PATCH_CONTEXT,In as DEFAULT_SCHEMA_CONTEXT,J as DIAGNOSTIC_CODES,Gn as EFFECT_ARGS_CONTEXT,un as KEYWORDS,En as Lexer,Ln as LoweringError,wn as Parser,Nn as Precedence,cn as RESERVED_KEYWORDS,An as Scope,xn as ScopeAnalyzer,Dn as SemanticValidator,K as analyzeScope,U as applyPatchToWorkingSnapshot,da as check,Ut as classifyCondition,sn as compile,Zn as compileMelDomain,er as compileMelPatch,On as createError,We as createEvaluationContext,Fn as createInfo,gn as createLocation,yn as createPointLocation,mn as createPosition,fn as createToken,Rn as createWarning,Lt as evaluateCondition,_t as evaluateConditionalPatchOps,v as evaluateExpr,qt as evaluatePatchExpressions,Mt as evaluatePatches,Bt as evaluateRuntimePatches,le as evaluateRuntimePatchesWithTrace,ta as extractSchemaGraph,ne as extractTypeName,Tn as filterBySeverity,Y as formatDiagnostic,or as formatDiagnosticCode,ve as formatDiagnostics,H as generate,Qn as generateCanonical,bn as getBinaryPrecedence,ar as getDiagnosticInfo,pn as getKeywordKind,x as hasErrors,Un as invalidKindForContext,Kn as invalidShape,Wn as invalidSysPath,Sn as isBinaryOp,jn as isError,kn as isExprNode,ln as isKeyword,dn as isReserved,$n as isRightAssociative,vn as isStmtNode,Pn as isUnaryOp,Hn as lowerExprNode,Xn as lowerPatchFragments,Yn as lowerRuntimePatch,Jn as lowerRuntimePatches,Q as lowerSystemValues,hn as mergeLocations,pr as normalizeExpr,fr as normalizeFunctionCall,M as parse,la as parseSource,ae as renderAsDomain,s as renderExprNode,q as renderFragment,L as renderFragments,re as renderFragmentsByKind,N as renderPatchOp,k as renderTypeExpr,P as renderTypeField,S as renderValue,Cn as tokenToBinaryOp,_ as tokenize,Vn as unknownCallFn,Bn as unknownNodeKind,zn as unsupportedBase,B as validateSemantics};
@@ -1 +1 @@
1
- import{b as n}from"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";import{readFile as i}from"fs/promises";import{fileURLToPath as c}from"url";function u(o){let[t]=o.split("?",1),[r]=t.split("#",1);return r}function s(o){return u(o).endsWith(".mel")}function a(o){try{return c(o)}catch{return o}}var h=async(o,t,r)=>s(o)?{...await r(o,t),shortCircuit:!0}:r(o,t),p=async(o,t,r)=>{if(!s(o))return r(o,t);let e=await i(new URL(o),"utf8");return{format:"module",source:n(e,a(o)),shortCircuit:!0}};export{p as load,h as resolve};
1
+ import{b as n}from"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";import{readFile as i}from"fs/promises";import{fileURLToPath as c}from"url";function u(o){let[t]=o.split("?",1),[r]=t.split("#",1);return r}function s(o){return u(o).endsWith(".mel")}function a(o){try{return c(o)}catch{return o}}var h=async(o,t,r)=>s(o)?{...await r(o,t),shortCircuit:!0}:r(o,t),p=async(o,t,r)=>{if(!s(o))return r(o,t);let e=await i(new URL(o),"utf8");return{format:"module",source:n(e,a(o)),shortCircuit:!0}};export{p as load,h as resolve};
package/dist/rollup.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"./chunk-QXTUKGFJ.js";import"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";var l=e.rollup,t=l;export{t as default,l as melPlugin};
1
+ import{a as e}from"./chunk-H5YT4Z3G.js";import"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";var l=e.rollup,t=l;export{t as default,l as melPlugin};
package/dist/rspack.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"./chunk-QXTUKGFJ.js";import"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";var t=e.rspack,o=t;export{o as default,t as melPlugin};
1
+ import{a as e}from"./chunk-H5YT4Z3G.js";import"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";var t=e.rspack,o=t;export{o as default,t as melPlugin};
package/dist/vite.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"./chunk-QXTUKGFJ.js";import"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";var t=e.vite,o=t;export{o as default,t as melPlugin};
1
+ import{a as e}from"./chunk-H5YT4Z3G.js";import"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";var t=e.vite,o=t;export{o as default,t as melPlugin};
package/dist/webpack.js CHANGED
@@ -1 +1 @@
1
- import{a as e}from"./chunk-QXTUKGFJ.js";import"./chunk-JM4I5DPC.js";import"./chunk-BJMGKJRO.js";var t=e.webpack,o=t;export{o as default,t as melPlugin};
1
+ import{a as e}from"./chunk-H5YT4Z3G.js";import"./chunk-WE6GIOLD.js";import"./chunk-XIAVDXPY.js";var t=e.webpack,o=t;export{o as default,t as melPlugin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manifesto-ai/compiler",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Manifesto Compiler - MEL (Manifesto Expression Language) to DomainSchema compiler",
5
5
  "author": "eggplantiny <eggplantiny@gmail.com>",
6
6
  "license": "MIT",
@@ -1,12 +0,0 @@
1
- var Be={domain:"DOMAIN",state:"STATE",computed:"COMPUTED",action:"ACTION",effect:"EFFECT",when:"WHEN",once:"ONCE",patch:"PATCH",unset:"UNSET",merge:"MERGE",true:"TRUE",false:"FALSE",null:"NULL",as:"AS",available:"AVAILABLE",dispatchable:"DISPATCHABLE",fail:"FAIL",stop:"STOP",with:"WITH",type:"TYPE",import:"IMPORT",from:"FROM",export:"EXPORT"},tn=new Set(["function","var","let","const","if","else","for","while","do","switch","case","break","continue","return","throw","try","catch","finally","new","delete","instanceof","void","debugger","this","super","arguments","eval","async","await","yield","class","extends","interface","enum","namespace","module"]);function Xr(t){return t in Be}function ut(t){return tn.has(t)}function mt(t){return Object.hasOwn(Be,t)?Be[t]:void 0}function Ue(t,e,n,r){return{kind:t,lexeme:e,location:n,value:r}}function ht(t,e,n){return{line:t,column:e,offset:n}}function ft(t,e,n){return{start:t,end:e,source:n}}function Zr(t,e){return{start:t,end:t,source:e}}function h(t,e){return{start:t.start.offset<e.start.offset?t.start:e.start,end:t.end.offset>e.end.offset?t.end:e.end,source:t.source??e.source}}var Ge=class{source;sourcePath;tokens=[];diagnostics=[];start=0;current=0;line=1;column=1;lineStart=0;constructor(e,n){this.source=e,this.sourcePath=n}tokenize(){for(;!this.isAtEnd();)this.start=this.current,this.scanToken();return this.tokens.push(Ue("EOF","",this.currentLocation())),{tokens:this.tokens,diagnostics:this.diagnostics}}scanToken(){let e=this.advance();switch(e){case"(":this.addToken("LPAREN");break;case")":this.addToken("RPAREN");break;case"{":this.addToken("LBRACE");break;case"}":this.addToken("RBRACE");break;case"[":this.addToken("LBRACKET");break;case"]":this.addToken("RBRACKET");break;case",":this.addToken("COMMA");break;case";":this.addToken("SEMICOLON");break;case".":this.addToken("DOT");break;case"+":this.addToken("PLUS");break;case"-":this.addToken("MINUS");break;case"*":this.addToken("STAR");break;case"%":this.addToken("PERCENT");break;case":":this.addToken("COLON");break;case"=":this.addToken(this.match("=")?"EQ_EQ":"EQ");break;case"!":this.addToken(this.match("=")?"BANG_EQ":"BANG");break;case"<":this.addToken(this.match("=")?"LT_EQ":"LT");break;case">":this.addToken(this.match("=")?"GT_EQ":"GT");break;case"&":this.match("&")?this.addToken("AMP_AMP"):this.error("Expected '&&' for logical AND");break;case"|":this.match("|")?this.addToken("PIPE_PIPE"):this.addToken("PIPE");break;case"?":this.addToken(this.match("?")?"QUESTION_QUESTION":"QUESTION");break;case"/":this.match("/")?this.lineComment():this.match("*")?this.blockComment():this.addToken("SLASH");break;case" ":case"\r":case" ":break;case`
2
- `:this.newline();break;case'"':this.string('"');break;case"'":this.string("'");break;case"$":this.systemIdentifier();break;default:this.isDigit(e)?this.number():this.isAlpha(e)?this.identifier():this.error(`Unexpected character '${e}'`)}}lineComment(){for(;this.peek()!==`
3
- `&&!this.isAtEnd();)this.advance()}blockComment(){let e=this.line,n=this.column-2;for(;!this.isAtEnd();){if(this.peek()==="*"&&this.peekNext()==="/"){this.advance(),this.advance();return}this.peek()===`
4
- `&&this.newline(),this.advance()}this.error(`Unterminated block comment starting at line ${e}:${n}`)}string(e){let n=this.line,r=this.column-1,i="";for(;this.peek()!==e&&!this.isAtEnd();){if(this.peek()===`
5
- `){this.error("Unterminated string literal");return}if(this.peek()==="\\"){this.advance();let o=this.advance();switch(o){case"n":i+=`
6
- `;break;case"r":i+="\r";break;case"t":i+=" ";break;case"\\":i+="\\";break;case"'":i+="'";break;case'"':i+='"';break;case"0":i+="\0";break;default:this.error(`Invalid escape sequence '\\${o}'`),i+=o}}else i+=this.advance()}if(this.isAtEnd()){this.error(`Unterminated string starting at line ${n}:${r}`);return}this.advance(),this.addToken("STRING",i)}number(){if(this.source[this.start]==="0"&&(this.peek()==="x"||this.peek()==="X")){for(this.advance();this.isHexDigit(this.peek());)this.advance();let n=this.source.slice(this.start+2,this.current),r=parseInt(n,16);this.addToken("NUMBER",r);return}for(;this.isDigit(this.peek());)this.advance();if(this.peek()==="."&&this.isDigit(this.peekNext()))for(this.advance();this.isDigit(this.peek());)this.advance();if(this.peek()==="e"||this.peek()==="E"){if(this.advance(),(this.peek()==="+"||this.peek()==="-")&&this.advance(),!this.isDigit(this.peek())){this.error("Invalid number: expected digits after exponent");return}for(;this.isDigit(this.peek());)this.advance()}let e=parseFloat(this.source.slice(this.start,this.current));this.addToken("NUMBER",e)}identifier(){for(;this.isAlphaNumeric(this.peek());){if(this.peek()==="$"){this.advance(),this.error("'$' is forbidden in identifiers (MEL A17)","E004");continue}this.advance()}let e=this.source.slice(this.start,this.current);if(e.startsWith("__sys__")){this.error("'__sys__' prefix is reserved for compiler-generated identifiers (MEL A26)","E004"),this.addToken("ERROR");return}if(ut(e)){this.error(`'${e}' is a reserved keyword and cannot be used`),this.addToken("ERROR");return}let n=mt(e);n?this.addToken(n):this.addToken("IDENTIFIER")}systemIdentifier(){if(!this.isAlpha(this.peek())){this.error("Expected identifier after '$'"),this.addToken("ERROR");return}for(;this.isAlphaNumeric(this.peek());)this.advance();let e=this.source.slice(this.start,this.current);if(e==="$item"){this.addToken("ITEM");return}if(e==="$system"||e==="$meta"||e==="$input"){for(;this.peek()==="."&&this.isAlpha(this.peekNext());)for(this.advance();this.isAlphaNumeric(this.peek());)this.advance();this.addToken("SYSTEM_IDENT");return}this.error(`Invalid system identifier '${e}'. Expected $system.*, $meta.*, $input.*, or $item`),this.addToken("ERROR")}isAtEnd(){return this.current>=this.source.length}advance(){let e=this.source[this.current];return this.current++,this.column++,e}peek(){return this.isAtEnd()?"\0":this.source[this.current]}peekNext(){return this.current+1>=this.source.length?"\0":this.source[this.current+1]}match(e){return this.isAtEnd()||this.source[this.current]!==e?!1:(this.current++,this.column++,!0)}newline(){this.line++,this.column=1,this.lineStart=this.current}isDigit(e){return e>="0"&&e<="9"}isHexDigit(e){return this.isDigit(e)||e>="a"&&e<="f"||e>="A"&&e<="F"}isAlpha(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_"}isAlphaNumeric(e){return this.isAlpha(e)||this.isDigit(e)}currentLocation(){let e=this.positionAt(this.start),n=this.positionAt(this.current);return ft(e,n,this.sourcePath)}positionAt(e){let n=1,r=0;for(let i=0;i<e;i++)this.source[i]===`
7
- `&&(n++,r=i+1);return ht(n,e-r+1,e)}addToken(e,n){let r=this.source.slice(this.start,this.current);this.tokens.push(Ue(e,r,this.currentLocation(),n))}error(e,n="MEL_LEXER"){let r=this.currentLocation();this.diagnostics.push({severity:"error",code:n,message:e,location:r,source:this.getSourceLine(r.start.line)})}getSourceLine(e){return this.source.split(`
8
- `)[e-1]??""}};function ye(t,e){return new Ge(t,e).tokenize()}function ci(t){return["literal","identifier","systemIdent","iterationVar","propertyAccess","indexAccess","functionCall","unary","binary","ternary","objectLiteral","arrayLiteral"].includes(t.kind)}function li(t){return["when","once","onceIntent","patch","effect","fail","stop"].includes(t.kind)}var yt=(m=>(m[m.NONE=0]="NONE",m[m.TERNARY=1]="TERNARY",m[m.NULLISH=2]="NULLISH",m[m.OR=3]="OR",m[m.AND=4]="AND",m[m.EQUALITY=5]="EQUALITY",m[m.COMPARISON=6]="COMPARISON",m[m.ADDITIVE=7]="ADDITIVE",m[m.MULTIPLICATIVE=8]="MULTIPLICATIVE",m[m.UNARY=9]="UNARY",m[m.CALL=10]="CALL",m[m.ACCESS=11]="ACCESS",m))(yt||{});function qe(t){switch(t){case"QUESTION":return 1;case"QUESTION_QUESTION":return 2;case"PIPE_PIPE":return 3;case"AMP_AMP":return 4;case"EQ_EQ":case"BANG_EQ":return 5;case"LT":case"LT_EQ":case"GT":case"GT_EQ":return 6;case"PLUS":case"MINUS":return 7;case"STAR":case"SLASH":case"PERCENT":return 8;default:return 0}}function gt(t){switch(t){case"PLUS":return"+";case"MINUS":return"-";case"STAR":return"*";case"SLASH":return"/";case"PERCENT":return"%";case"EQ_EQ":return"==";case"BANG_EQ":return"!=";case"LT":return"<";case"LT_EQ":return"<=";case"GT":return">";case"GT_EQ":return">=";case"AMP_AMP":return"&&";case"PIPE_PIPE":return"||";case"QUESTION_QUESTION":return"??";default:return null}}function pi(t){return qe(t)!==0}function ui(t){return t==="BANG"||t==="MINUS"}function Et(t){return t==="QUESTION"||t==="QUESTION_QUESTION"}var ze=class{tokens;current=0;diagnostics=[];constructor(e){this.tokens=e}parse(){try{return{program:this.parseProgram(),diagnostics:this.diagnostics}}catch{return{program:null,diagnostics:this.diagnostics}}}parseProgram(){let e=this.peek().location,n=[];for(;this.check("IMPORT");)n.push(this.parseImport());let r=this.parseDomain();return{kind:"program",imports:n,domain:r,location:h(e,r.location)}}parseImport(){let e=this.consume("IMPORT","Expected 'import'").location;this.consume("LBRACE","Expected '{' after 'import'");let n=[];do n.push(this.consume("IDENTIFIER","Expected identifier").lexeme);while(this.match("COMMA"));this.consume("RBRACE","Expected '}' after import names"),this.consume("FROM","Expected 'from' after import names");let r=this.consume("STRING","Expected string after 'from'");return{kind:"import",names:n,from:r.value,location:h(e,r.location)}}parseDomain(){let e=this.consume("DOMAIN","Expected 'domain'").location,n=this.consume("IDENTIFIER","Expected domain name").lexeme;this.consume("LBRACE","Expected '{' after domain name");let r=[];for(;this.check("TYPE")&&!this.isAtEnd();)r.push(this.parseTypeDecl());let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)if(this.check("TYPE"))r.push(this.parseTypeDecl());else{let a=this.parseDomainMember();a&&i.push(a)}let o=this.consume("RBRACE","Expected '}' to close domain").location;return{kind:"domain",name:n,types:r,members:i,location:h(e,o)}}parseTypeDecl(){let e=this.consume("TYPE","Expected 'type'").location,n=this.consume("IDENTIFIER","Expected type name").lexeme;this.consume("EQ","Expected '=' after type name");let r=this.parseTypeExpr();return{kind:"typeDecl",name:n,typeExpr:r,location:h(e,r.location)}}parseDomainMember(){return this.check("STATE")?this.parseState():this.check("COMPUTED")?this.parseComputed():this.check("ACTION")?this.parseAction():this.isFlowDeclContext()?this.parseFlowDecl():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'state', 'computed', 'action', or 'flow'.`),this.advance(),null)}parseState(){let e=this.consume("STATE","Expected 'state'").location;this.consume("LBRACE","Expected '{' after 'state'");let n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)n.push(this.parseStateField());let r=this.consume("RBRACE","Expected '}' to close state block").location;return{kind:"state",fields:n,location:h(e,r)}}parseStateField(){let e=this.consume("IDENTIFIER","Expected field name");this.consume("COLON","Expected ':' after field name");let n=this.parseTypeExpr(),r;return this.match("EQ")&&(r=this.parseExpression()),{kind:"stateField",name:e.lexeme,typeExpr:n,initializer:r,location:h(e.location,r?.location??n.location)}}parseComputed(){let e=this.consume("COMPUTED","Expected 'computed'").location,n=this.consume("IDENTIFIER","Expected computed name").lexeme;this.consume("EQ","Expected '=' after computed name");let r=this.parseExpression();return{kind:"computed",name:n,expression:r,location:h(e,r.location)}}parseAction(){let e=this.consume("ACTION","Expected 'action'").location,n=this.consume("IDENTIFIER","Expected action name").lexeme;this.consume("LPAREN","Expected '(' after action name");let r=[];if(!this.check("RPAREN"))do r.push(this.parseParam());while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters");let i;this.match("AVAILABLE")&&(this.consume("WHEN","Expected 'when' after 'available'"),i=this.parseExpression());let o;if(this.match("DISPATCHABLE")&&(this.consume("WHEN","Expected 'when' after 'dispatchable'"),o=this.parseExpression()),this.check("AVAILABLE")){let c=o?"'available when' must appear before 'dispatchable when' in an action":"Action can declare 'available when' at most once";throw this.errorAtCurrent(c)}if(this.check("DISPATCHABLE"))throw this.errorAtCurrent("Action can declare 'dispatchable when' at most once");this.consume("LBRACE","Expected '{' to start action body");let a=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let c=this.parseGuardedStmt();c&&a.push(c)}let s=this.consume("RBRACE","Expected '}' to close action").location;return{kind:"action",name:n,params:r,available:i,dispatchable:o,body:a,location:h(e,s)}}parseFlowDecl(){let e=this.consume("IDENTIFIER","Expected 'flow'"),n=this.consume("IDENTIFIER","Expected flow name").lexeme;this.consume("LPAREN","Expected '(' after flow name");let r=[];if(!this.check("RPAREN"))do r.push(this.parseParam());while(this.match("COMMA"));this.consume("RPAREN","Expected ')' after parameters"),this.consume("LBRACE","Expected '{' to start flow body");let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseFlowStmt();a&&i.push(a)}let o=this.consume("RBRACE","Expected '}' to close flow").location;return{kind:"flow",name:n,params:r,body:i,location:h(e.location,o)}}parseParam(){let e=this.consume("IDENTIFIER","Expected parameter name");this.consume("COLON","Expected ':' after parameter name");let n=this.parseTypeExpr();return{kind:"param",name:e.lexeme,typeExpr:n,location:h(e.location,n.location)}}parseGuardedStmt(){if(this.check("WHEN"))return this.parseWhenStmt();if(this.check("ONCE"))return this.parseOnceStmt();if(this.isOnceIntentContext())return this.parseOnceIntentStmt();if(this.isIncludeContext())return this.parseIncludeStmt();if(this.check("FAIL"))return this.parseFailStmt();if(this.check("STOP"))return this.parseStopStmt();let e=this.peek();return e.kind==="PATCH"||e.lexeme==="patch"||e.kind==="EFFECT"||e.lexeme==="effect"?(this.error(`'${e.lexeme}' must be inside a guard block (when, once, or onceIntent). Wrap it: when true { ${e.lexeme} ... }`),this.skipToRecoveryPoint(),null):(this.error(`Unexpected token '${e.lexeme}'. Expected 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseFlowStmt(){return this.check("WHEN")?this.parseWhenStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'when', 'include', 'once', 'onceIntent', 'patch', or 'effect'.`),this.advance(),null)}skipToRecoveryPoint(){let e=0;for(;!this.isAtEnd();){let n=this.peek();if(n.kind==="LBRACE"){e++,this.advance();continue}if(n.kind==="RBRACE"){if(e===0)return;e--,this.advance();continue}if(e===0&&(n.kind==="WHEN"||n.kind==="ONCE"||n.lexeme==="onceIntent"||this.isIncludeContext()||n.kind==="FAIL"||n.kind==="STOP"))return;this.advance()}}parseWhenStmt(){let e=this.consume("WHEN","Expected 'when'").location,n=this.parseExpression();this.consume("LBRACE","Expected '{' after when condition");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseInnerStmt();o&&r.push(o)}let i=this.consume("RBRACE","Expected '}' to close when block").location;return{kind:"when",condition:n,body:r,location:h(e,i)}}parseOnceStmt(){let e=this.consume("ONCE","Expected 'once'").location;this.consume("LPAREN","Expected '(' after 'once'");let n=this.parsePath();this.consume("RPAREN","Expected ')' after marker");let r;this.match("WHEN")&&(r=this.parseExpression()),this.consume("LBRACE","Expected '{' to start once block");let i=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let a=this.parseInnerStmt();a&&i.push(a)}let o=this.consume("RBRACE","Expected '}' to close once block").location;return{kind:"once",marker:n,condition:r,body:i,location:h(e,o)}}parseOnceIntentStmt(){let e=this.consume("IDENTIFIER","Expected 'onceIntent'"),n;this.match("WHEN")&&(n=this.parseExpression()),this.consume("LBRACE","Expected '{' to start onceIntent block");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let o=this.parseInnerStmt();o&&r.push(o)}let i=this.consume("RBRACE","Expected '}' to close onceIntent block").location;return{kind:"onceIntent",condition:n,body:r,location:h(e.location,i)}}parseInnerStmt(){return this.check("PATCH")?this.parsePatchStmt():this.check("EFFECT")?this.parseEffectStmt():this.check("WHEN")?this.parseWhenStmt():this.check("ONCE")?this.parseOnceStmt():this.isOnceIntentContext()?this.parseOnceIntentStmt():this.isIncludeContext()?this.parseIncludeStmt():this.check("FAIL")?this.parseFailStmt():this.check("STOP")?this.parseStopStmt():(this.error(`Unexpected token '${this.peek().lexeme}'. Expected 'patch', 'effect', 'when', 'once', 'onceIntent', 'include', 'fail', or 'stop'.`),this.advance(),null)}parseIncludeStmt(){let e=this.consume("IDENTIFIER","Expected 'include'"),n=this.consume("IDENTIFIER","Expected flow name after 'include'");this.consume("LPAREN","Expected '(' after flow name");let r=[];if(!this.check("RPAREN"))do r.push(this.parseExpression());while(this.match("COMMA"));let i=this.consume("RPAREN","Expected ')' after include arguments").location;return{kind:"include",flowName:n.lexeme,args:r,location:h(e.location,i)}}parsePatchStmt(){let e=this.consume("PATCH","Expected 'patch'").location,n=this.parsePath(),r,i,o;return this.match("UNSET")?(r="unset",o=this.previous().location):this.match("MERGE")?(r="merge",i=this.parseExpression(),o=i.location):(this.consume("EQ","Expected '=', 'unset', or 'merge' after path"),r="set",i=this.parseExpression(),o=i.location),{kind:"patch",path:n,op:r,value:i,location:h(e,o)}}parseEffectStmt(){let e=this.consume("EFFECT","Expected 'effect'").location,n=this.consume("IDENTIFIER","Expected effect type").lexeme;for(;this.match("DOT");)n+="."+this.consume("IDENTIFIER","Expected identifier after '.'").lexeme;this.consume("LPAREN","Expected '(' after effect type"),this.consume("LBRACE","Expected '{' for effect arguments");let r=[];for(;!this.check("RBRACE")&&!this.isAtEnd();)r.push(this.parseEffectArg()),this.match("COMMA");this.consume("RBRACE","Expected '}' after effect arguments");let i=this.consume("RPAREN","Expected ')' to close effect").location;return{kind:"effect",effectType:n,args:r,location:h(e,i)}}parseEffectArg(){let e=this.match("IDENTIFIER","FAIL")?this.previous():this.consume("IDENTIFIER","Expected argument name");this.consume("COLON","Expected ':' after argument name");let n=["into","pass","fail"].includes(e.lexeme),r=n?this.parsePath():this.parseExpression();return{kind:"effectArg",name:e.lexeme,value:r,isPath:n,location:h(e.location,r.location)}}parseFailStmt(){let e=this.consume("FAIL","Expected 'fail'").location,n=this.consume("STRING","Expected error code string after 'fail'"),r=n.value,i,o=n.location;return this.match("WITH")&&(i=this.parseExpression(),o=i.location),{kind:"fail",code:r,message:i,location:h(e,o)}}parseStopStmt(){let e=this.consume("STOP","Expected 'stop'").location,n=this.consume("STRING","Expected reason string after 'stop'");return{kind:"stop",reason:n.value,location:h(e,n.location)}}parseTypeExpr(){let e=this.parseBaseType();if(this.check("PIPE")){let n=[e];for(;this.match("PIPE");)n.push(this.parseBaseType());e={kind:"unionType",types:n,location:h(n[0].location,n[n.length-1].location)}}return e}parseBaseType(){if(this.check("LBRACE"))return this.parseObjectType();if(this.check("STRING")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("NUMBER")){let n=this.advance();return{kind:"literalType",value:n.value,location:n.location}}if(this.check("TRUE")||this.check("FALSE")){let n=this.advance();return{kind:"literalType",value:n.kind==="TRUE",location:n.location}}if(this.check("NULL"))return{kind:"literalType",value:null,location:this.advance().location};let e=this.consume("IDENTIFIER","Expected type name");if(this.match("LT"))if(e.lexeme==="Array"){let n=this.parseTypeExpr(),r=this.consume("GT","Expected '>' after array element type").location;return{kind:"arrayType",elementType:n,location:h(e.location,r)}}else if(e.lexeme==="Record"){let n=this.parseTypeExpr();this.consume("COMMA","Expected ',' between Record type parameters");let r=this.parseTypeExpr(),i=this.consume("GT","Expected '>' after Record value type").location;return{kind:"recordType",keyType:n,valueType:r,location:h(e.location,i)}}else{for(this.error(`Unknown generic type '${e.lexeme}'`);!this.check("GT")&&!this.isAtEnd();)this.advance();this.match("GT")}return{kind:"simpleType",name:e.lexeme,location:e.location}}parseObjectType(){let e=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let i=this.consume("IDENTIFIER","Expected field name"),o=this.match("QUESTION");this.consume("COLON","Expected ':' after field name");let a=this.parseTypeExpr();n.push({kind:"typeField",name:i.lexeme,typeExpr:a,optional:o,location:h(i.location,a.location)}),this.match("COMMA")}let r=this.consume("RBRACE","Expected '}' to close object type").location;return{kind:"objectType",fields:n,location:h(e,r)}}parseExpression(e=0){let n=this.parsePrimary();for(;;){let r=qe(this.peek().kind);if(r<=e)break;if(this.peek().kind==="QUESTION"){n=this.parseTernary(n);continue}let i=gt(this.peek().kind);if(!i)break;this.advance();let o=Et(this.previous().kind)?r-1:r,a=this.parseExpression(o);n={kind:"binary",operator:i,left:n,right:a,location:h(n.location,a.location)}}return n}parseTernary(e){this.consume("QUESTION","Expected '?'");let n=this.parseExpression();this.consume("COLON","Expected ':' in ternary expression");let r=this.parseExpression(0);return{kind:"ternary",condition:e,consequent:n,alternate:r,location:h(e.location,r.location)}}parsePrimary(){if(this.check("BANG")||this.check("MINUS")&&this.isUnaryContext()){let e=this.advance(),n=this.parsePrimary();return{kind:"unary",operator:e.kind==="BANG"?"!":"-",operand:n,location:h(e.location,n.location)}}if(this.match("LPAREN")){let e=this.parseExpression();return this.consume("RPAREN","Expected ')' after expression"),e}if(this.check("LBRACE"))return this.parseObjectLiteral();if(this.check("LBRACKET"))return this.parseArrayLiteral();if(this.check("NUMBER")){let e=this.advance();return{kind:"literal",value:e.value,literalType:"number",location:e.location}}if(this.check("STRING")){let e=this.advance();return{kind:"literal",value:e.value,literalType:"string",location:e.location}}if(this.check("TRUE")||this.check("FALSE")){let e=this.advance();return{kind:"literal",value:e.kind==="TRUE",literalType:"boolean",location:e.location}}if(this.check("NULL"))return{kind:"literal",value:null,literalType:"null",location:this.advance().location};if(this.check("SYSTEM_IDENT")){let e=this.advance(),n=e.lexeme.slice(1).split(".");return this.parsePostfix({kind:"systemIdent",path:n,location:e.location})}if(this.check("ITEM")){let e=this.advance();return this.parsePostfix({kind:"iterationVar",name:"item",location:e.location})}if(this.check("MERGE")&&this.peekNext()?.kind==="LPAREN"){let e=this.advance();return this.parseFunctionCall(e)}if(this.check("IDENTIFIER")){let e=this.advance();return this.check("LPAREN")?this.parseFunctionCall(e):this.parsePostfix({kind:"identifier",name:e.lexeme,location:e.location})}return this.error(`Unexpected token '${this.peek().lexeme}'`),{kind:"literal",value:null,literalType:"null",location:this.peek().location}}parseFunctionCall(e){this.consume("LPAREN","Expected '(' for function call");let n=[];if(!this.check("RPAREN"))do n.push(this.parseExpression());while(this.match("COMMA"));let r=this.consume("RPAREN","Expected ')' after arguments").location;return this.parsePostfix({kind:"functionCall",name:e.lexeme,args:n,location:h(e.location,r)})}parsePostfix(e){for(;;)if(this.match("DOT")){let n=this.consume("IDENTIFIER","Expected property name after '.'");e={kind:"propertyAccess",object:e,property:n.lexeme,location:h(e.location,n.location)}}else if(this.match("LBRACKET")){let n=this.parseExpression(),r=this.consume("RBRACKET","Expected ']' after index").location;e={kind:"indexAccess",object:e,index:n,location:h(e.location,r)}}else break;return e}parseObjectLiteral(){let e=this.consume("LBRACE","Expected '{'").location,n=[];for(;!this.check("RBRACE")&&!this.isAtEnd();){let i=this.consume("IDENTIFIER","Expected property name");this.consume("COLON","Expected ':' after property name");let o=this.parseExpression();n.push({kind:"objectProperty",key:i.lexeme,value:o,location:h(i.location,o.location)}),this.check("RBRACE")||this.consume("COMMA","Expected ',' between properties")}let r=this.consume("RBRACE","Expected '}' to close object").location;return{kind:"objectLiteral",properties:n,location:h(e,r)}}parseArrayLiteral(){let e=this.consume("LBRACKET","Expected '['").location,n=[];for(;!this.check("RBRACKET")&&!this.isAtEnd();)n.push(this.parseExpression()),this.check("RBRACKET")||this.consume("COMMA","Expected ',' between elements");let r=this.consume("RBRACKET","Expected ']' to close array").location;return{kind:"arrayLiteral",elements:n,location:h(e,r)}}parsePath(){let e=[],n=this.peek().location,r=this.consume("IDENTIFIER","Expected identifier");for(e.push({kind:"propertySegment",name:r.lexeme,location:r.location});;)if(this.match("DOT")){let o=this.consume("IDENTIFIER","Expected property name");e.push({kind:"propertySegment",name:o.lexeme,location:o.location})}else if(this.match("LBRACKET")){let o=this.parseExpression(),a=this.consume("RBRACKET","Expected ']'").location;e.push({kind:"indexSegment",index:o,location:h(o.location,a)})}else break;let i=e[e.length-1];return{kind:"path",segments:e,location:h(n,i.location)}}isUnaryContext(){if(this.current===0)return!0;let e=this.previous();return["LPAREN","LBRACKET","LBRACE","COMMA","COLON","EQ","PLUS","MINUS","STAR","SLASH","PERCENT","EQ_EQ","BANG_EQ","LT","LT_EQ","GT","GT_EQ","AMP_AMP","PIPE_PIPE","BANG","QUESTION","QUESTION_QUESTION"].includes(e.kind)}peek(){return this.tokens[this.current]}peekNext(){return this.peekAt(1)}peekAt(e){return this.current+e>=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[this.current+e]}previous(){return this.tokens[this.current-1]}isAtEnd(){return this.peek().kind==="EOF"}advance(){return this.isAtEnd()||this.current++,this.previous()}check(e){return this.isAtEnd()?!1:this.peek().kind===e}isOnceIntentContext(){if(!this.check("IDENTIFIER")||this.peek().lexeme!=="onceIntent")return!1;let n=this.peekNext();return n.kind==="LBRACE"||n.kind==="WHEN"}isFlowDeclContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="flow"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}isIncludeContext(){return!this.check("IDENTIFIER")||this.peek().lexeme!=="include"?!1:this.peekNext().kind==="IDENTIFIER"&&this.peekAt(2).kind==="LPAREN"}match(...e){for(let n of e)if(this.check(n))return this.advance(),!0;return!1}consume(e,n){if(this.check(e))return this.advance();throw this.errorAtCurrent(n)}error(e){this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:e,location:this.previous().location})}errorAtCurrent(e){return this.diagnostics.push({severity:"error",code:"MEL_PARSER",message:e,location:this.peek().location}),new Error(e)}};function ge(t){return new ze(t).parse()}var Ee=class{parent;symbols=new Map;kind;constructor(e,n=null){this.kind=e,this.parent=n}define(e){this.symbols.set(e.name,e)}lookup(e){let n=this.symbols.get(e);return n||this.parent?.lookup(e)}isDefined(e){return this.symbols.has(e)}},Ve=class{diagnostics=[];scopes=new Map;currentScope=null;domainScope=null;analyze(e){return this.diagnostics=[],this.scopes=new Map,this.currentScope=null,this.domainScope=null,this.analyzeDomain(e.domain),{scopes:this.scopes,diagnostics:this.diagnostics}}analyzeDomain(e){let n=new Ee("domain");this.domainScope=n,this.currentScope=n,this.scopes.set("domain",n);for(let r of e.members)if(r.kind==="state")for(let i of r.fields)this.defineSymbol({name:i.name,kind:"state",location:i.location});else r.kind==="computed"?this.defineSymbol({name:r.name,kind:"computed",location:r.location}):r.kind==="action"?this.defineSymbol({name:r.name,kind:"action",location:r.location}):r.kind;for(let r of e.members)r.kind==="computed"?this.analyzeComputedExpr(r):r.kind==="action"&&this.analyzeAction(r)}analyzeComputedExpr(e){this.analyzeExpr(e.expression,"computed")}analyzeAction(e){let n=new Ee("action",this.domainScope);this.currentScope=n,this.scopes.set(`action.${e.name}`,n);for(let r of e.params)n.define({name:r.name,kind:"param",location:r.location});for(let r of e.body)this.analyzeStmt(r);this.currentScope=this.domainScope}analyzeStmt(e){switch(e.kind){case"when":this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"onceIntent":e.condition&&this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"once":this.validatePath(e.marker),e.condition&&this.analyzeExpr(e.condition,"action");for(let n of e.body)this.analyzeStmt(n);break;case"patch":this.validatePath(e.path),e.value&&this.analyzeExpr(e.value,"action");break;case"effect":for(let n of e.args)n.isPath?this.validatePath(n.value):this.analyzeExpr(n.value,"action");break;case"include":case"fail":case"stop":break}}analyzeExpr(e,n){switch(e.kind){case"identifier":this.checkIdentifier(e.name,e.location,n);break;case"systemIdent":this.checkSystemIdent(e.path,e.location,n);break;case"propertyAccess":this.analyzeExpr(e.object,n);break;case"indexAccess":this.analyzeExpr(e.object,n),this.analyzeExpr(e.index,n);break;case"functionCall":for(let r of e.args)this.analyzeExpr(r,n);break;case"binary":this.analyzeExpr(e.left,n),this.analyzeExpr(e.right,n);break;case"unary":this.analyzeExpr(e.operand,n);break;case"ternary":this.analyzeExpr(e.condition,n),this.analyzeExpr(e.consequent,n),this.analyzeExpr(e.alternate,n);break;case"objectLiteral":for(let r of e.properties)this.analyzeExpr(r.value,n);break;case"arrayLiteral":for(let r of e.elements)this.analyzeExpr(r,n);break;case"iterationVar":break;case"literal":break}}checkIdentifier(e,n,r){let i=this.currentScope?.lookup(e);if(!i){this.error(`Undefined identifier '${e}'`,n,"E_UNDEFINED");return}r==="computed"&&i.kind==="param"&&this.error(`Cannot access parameter '${e}' in computed expression`,n,"E_INVALID_ACCESS")}checkSystemIdent(e,n,r){let[i,...o]=e;if(i==="system"&&r==="computed"&&this.error("Cannot use $system.* in computed expressions (non-deterministic)",n,"E001"),i==="system"){let a=["uuid","timestamp","time.now","random"],s=o.join(".");s&&!a.includes(s)&&this.error(`Invalid system value '$system.${s}'. Valid values: ${a.join(", ")}`,n,"E003")}if(i==="meta"){let a=["intentId","actionName","timestamp"],s=o.join(".");s&&!a.includes(s)&&this.error(`Invalid meta value '$meta.${s}'. Valid values: ${a.join(", ")}`,n,"E003")}}validatePath(e){if(!e||!e.segments)return;let n=e.segments[0];n?.kind==="propertySegment"&&(this.currentScope?.lookup(n.name)||this.error(`Undefined identifier '${n.name}' in path`,e.location,"E_UNDEFINED"))}defineSymbol(e){if(this.currentScope){if(this.currentScope.isDefined(e.name)){this.error(`Duplicate identifier '${e.name}'`,e.location,"E_DUPLICATE");return}this.currentScope.define(e)}}error(e,n,r){this.diagnostics.push({severity:"error",code:r,message:e,location:n})}};function kt(t){return new Ve().analyze(t)}function ke(t,e,n,r){return{severity:"error",code:t,message:e,location:n,...r}}function Nt(t,e,n,r){return{severity:"warning",code:t,message:e,location:n,...r}}function bi(t,e,n){return{severity:"info",code:t,message:e,location:n}}function nn(t){return t.severity==="error"}function Si(t){return t.some(nn)}function xi(t,e){return t.filter(n=>n.severity===e)}var Tt=new Set(["eq","neq","gt","gte","lt","lte","and","or","not","isNull","isNotNull","hasKey","startsWith","endsWith","strIncludes","includes","every","some","existsById"]),bt=new Set(["add","sub","mul","div","mod","abs","floor","ceil","round","sqrt","pow","len","strlen","indexOf","sum","min","max","toNumber"]),St=new Set(["trim","lower","upper","concat","typeof","toString","substring","substr","replace"]),rn=new Set(["keys","values","entries","merge","filter","map","append","reverse","unique","flat","split","fromEntries"]),on=new Set(["updateById","removeById"]);function Ne(t){let e=new Map,n=new Map,r=new Map;for(let i of t.types)r.set(i.name,i);for(let i of t.members){if(i.kind==="state"){for(let o of i.fields)e.set(o.name,o.typeExpr);continue}i.kind==="computed"&&n.set(i.name,i)}return{stateTypes:e,computedDecls:n,typeDefs:r,computedTypeCache:new Map,computedTypeInFlight:new Set}}function Te(t){let e=new Map;for(let n of t)e.set(n.name,n.typeExpr);return e}function g(t,e,n){switch(t.kind){case"literal":return dn(t.value,t.location);case"identifier":return e.get(t.name)??n.stateTypes.get(t.name)??an(t.name,n);case"propertyAccess":return K(g(t.object,e,n),t.property,n);case"indexAccess":return ae(g(t.object,e,n),n);case"objectLiteral":return{kind:"objectType",fields:t.properties.map(r=>{let i=g(r.value,e,n);return i?{kind:"typeField",name:r.key,typeExpr:i,optional:!1,location:r.location}:null}).filter(r=>r!==null),location:t.location};case"arrayLiteral":{let r=j(t.elements.map(i=>g(i,e,n)),t.location);return r?{kind:"arrayType",elementType:r,location:t.location}:null}case"unary":return sn(t);case"binary":return cn(t,e,n);case"ternary":return j([g(t.consequent,e,n),g(t.alternate,e,n)],t.location);case"functionCall":return ln(t,e,n);case"systemIdent":return null;case"iterationVar":return e.get("$item")??null}}function F(t,e,n){let r=g(t,e,n);if(r)return xt(r,n);switch(t.kind){case"literal":return"primitive";case"objectLiteral":case"arrayLiteral":return"nonprimitive";case"binary":return t.operator==="??"?oe([F(t.left,e,n),F(t.right,e,n)]):t.operator==="=="||t.operator==="!="||t.operator==="+"||t.operator==="-"||t.operator==="*"||t.operator==="/"||t.operator==="%"||t.operator==="<"||t.operator==="<="||t.operator===">"||t.operator===">="||t.operator==="&&"||t.operator==="||"?"primitive":"unknown";case"unary":return"primitive";case"ternary":return oe([F(t.consequent,e,n),F(t.alternate,e,n)]);case"functionCall":return rn.has(t.name)?"nonprimitive":Tt.has(t.name)||bt.has(t.name)||St.has(t.name)||t.name==="toBoolean"?"primitive":(t.name==="cond"||t.name==="if")&&t.args.length>=3?oe([F(t.args[1],e,n),F(t.args[2],e,n)]):t.name==="coalesce"?oe(t.args.map(i=>F(i,e,n))):"unknown";case"identifier":case"propertyAccess":case"indexAccess":case"systemIdent":case"iterationVar":return"unknown"}}function xt(t,e){let n=A(t,e);if(!n)return"unknown";switch(n.kind){case"simpleType":return n.name==="object"?"nonprimitive":n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null"?"primitive":"unknown";case"literalType":return"primitive";case"arrayType":case"recordType":case"objectType":return"nonprimitive";case"unionType":return oe(n.types.map(r=>xt(r,e)))}}function A(t,e,n=new Set){return t?t.kind==="simpleType"&&e.typeDefs.has(t.name)?n.has(t.name)?null:(n.add(t.name),A(e.typeDefs.get(t.name).typeExpr,e,n)):t:null}function K(t,e,n){let r=A(t,n);if(!r)return null;if(r.kind==="objectType")return r.fields.find(o=>o.name===e)?.typeExpr??null;if(r.kind==="unionType"){let i=r.types.filter(o=>!Y(o)).map(o=>K(o,e,n)).filter(o=>o!==null);return j(i,r.location)}return null}function ae(t,e){let n=A(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType"){let r=n.types.filter(i=>!Y(i)).map(i=>ae(i,e)).filter(i=>i!==null);return j(r,n.location)}return null}function O(t,e){let n=A(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="unionType"){let r=n.types.filter(i=>!Y(i)).map(i=>O(i,e)).filter(i=>i!==null);return j(r,n.location)}return null}function be(t,e){let n=A(t,e);if(!n)return!1;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number";case"literalType":return typeof n.value=="string"||typeof n.value=="number";case"unionType":return n.types.length>0&&n.types.every(r=>be(r,e));default:return!1}}function Y(t){return t.kind==="simpleType"&&t.name==="null"||t.kind==="literalType"&&t.value===null}function an(t,e){if(e.computedTypeCache.has(t))return e.computedTypeCache.get(t)??null;let n=e.computedDecls.get(t);if(!n||e.computedTypeInFlight.has(t))return null;e.computedTypeInFlight.add(t);let r=g(n.expression,new Map,e);return e.computedTypeInFlight.delete(t),e.computedTypeCache.set(t,r),r}function sn(t){return t.operator==="!"?D("boolean",t.location):D("number",t.location)}function cn(t,e,n){switch(t.operator){case"==":case"!=":case"<":case"<=":case">":case">=":case"&&":case"||":return D("boolean",t.location);case"+":case"-":case"*":case"/":case"%":return D("number",t.location);case"??":return j([g(t.left,e,n),g(t.right,e,n)],t.location)}}function ln(t,e,n){if(Tt.has(t.name))return D("boolean",t.location);if(bt.has(t.name))return D("number",t.location);if(St.has(t.name))return D("string",t.location);if(t.name==="toBoolean")return D("boolean",t.location);if(t.name==="findById"&&t.args.length>=1){let r=O(g(t.args[0],e,n),n);return r?j([r,D("null",t.location)],t.location):null}if(t.name==="find"&&t.args.length>=1){let r=O(g(t.args[0],e,n),n);return r?j([r,D("null",t.location)],t.location):null}if(t.name==="filter"&&t.args.length>=1)return g(t.args[0],e,n);if(t.name==="map"&&t.args.length>=2){let r=g(t.args[0],e,n),i=O(r,n);if(!i)return null;let o=g(t.args[1],un(e,i),n);return o?{kind:"arrayType",elementType:o,location:t.location}:null}if((t.name==="first"||t.name==="last")&&t.args.length>=1)return O(g(t.args[0],e,n),n);if(t.name==="at"&&t.args.length>=1)return ae(g(t.args[0],e,n),n);if(t.name==="field"&&t.args.length>=2){let r=pn(t.args[1]);return r?K(g(t.args[0],e,n),r,n):null}return on.has(t.name)&&t.args.length>=1?g(t.args[0],e,n):(t.name==="cond"||t.name==="if")&&t.args.length>=3?j([g(t.args[1],e,n),g(t.args[2],e,n)],t.location):t.name==="coalesce"?j(t.args.map(r=>g(r,e,n)),t.location):t.name==="slice"&&t.args.length>=1?g(t.args[0],e,n):t.name==="split"?{kind:"arrayType",elementType:D("string",t.location),location:t.location}:t.name==="keys"?{kind:"arrayType",elementType:D("string",t.location),location:t.location}:null}function oe(t){let e=!1;for(let n of t){if(n==="nonprimitive")return"nonprimitive";n==="unknown"&&(e=!0)}return e?"unknown":"primitive"}function j(t,e){let n=t.filter(o=>o!==null);if(n.length===0)return null;if(n.length===1)return n[0];let r=[],i=new Set;for(let o of n){let a=JSON.stringify(o);i.has(a)||(i.add(a),r.push(o))}return r.length===1?r[0]:{kind:"unionType",types:r,location:e}}function dn(t,e){return{kind:"literalType",value:t,location:e}}function D(t,e){return{kind:"simpleType",name:t,location:e}}function pn(t){return t.kind==="literal"&&typeof t.value=="string"?t.value:null}function un(t,e){let n=new Map(t);return n.set("$item",e),n}var mn=new Set(["findById","existsById"]),Ke=new Set(["updateById","removeById"]),hn=new Set([...mn,...Ke]);function U(t,e,n,r,i){let o=`${n}:${i.start.offset}:${i.end.offset}:${r}`;e.has(o)||(e.add(o),t.push(ke(n,r,i)))}function vt(t){let e=[],n=new Set,r=Ne(t.domain);En(t.domain,r,e,n);for(let i of t.domain.members)switch(i.kind){case"computed":N(i.expression,"computed",new Map,r,e,n,0);break;case"action":{let o=Te(i.params);fn(i,o,r,e,n);break}case"state":case"flow":break}return e}function fn(t,e,n,r,i){t.available&&N(t.available,"available",e,n,r,i,0),t.dispatchable&&N(t.dispatchable,"dispatchable",e,n,r,i,0);for(let o of t.body)yn(o,e,n,r,i)}function yn(t,e,n,r,i){switch(t.kind){case"when":N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"once":t.condition&&N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"onceIntent":t.condition&&N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"include":break}}function X(t,e,n,r,i){switch(t.kind){case"when":N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"once":t.condition&&N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"onceIntent":t.condition&&N(t.condition,"guard",e,n,r,i,0);for(let o of t.body)X(o,e,n,r,i);break;case"patch":t.value&&N(t.value,"patch",e,n,r,i,0);break;case"effect":for(let o of t.args)o.isPath||N(o.value,"action",e,n,r,i,0);break;case"fail":t.message&&N(t.message,"action",e,n,r,i,0);break;case"include":case"stop":break}}function N(t,e,n,r,i,o,a){switch(t.kind){case"functionCall":{gn(t,e,n,r,i,o,a);let s=a+(Ke.has(t.name)?1:0);for(let c of t.args)N(c,e,n,r,i,o,s);break}case"binary":N(t.left,e,n,r,i,o,a),N(t.right,e,n,r,i,o,a);break;case"unary":N(t.operand,e,n,r,i,o,a);break;case"ternary":N(t.condition,e,n,r,i,o,a),N(t.consequent,e,n,r,i,o,a),N(t.alternate,e,n,r,i,o,a);break;case"propertyAccess":N(t.object,e,n,r,i,o,a);break;case"indexAccess":N(t.object,e,n,r,i,o,a),N(t.index,e,n,r,i,o,a);break;case"objectLiteral":for(let s of t.properties)N(s.value,e,n,r,i,o,a);break;case"arrayLiteral":for(let s of t.elements)N(s,e,n,r,i,o,a);break;case"literal":case"identifier":case"systemIdent":case"iterationVar":break}}function gn(t,e,n,r,i,o,a){if(!hn.has(t.name)||t.args.length===0)return;Ke.has(t.name)&&(e==="available"?U(i,o,"E035","updateById/removeById are not allowed in available conditions.",t.location):e==="dispatchable"?U(i,o,"E048","updateById/removeById are not allowed in dispatchable conditions.",t.location):e==="guard"?U(i,o,"E034","updateById/removeById are not allowed in guard conditions.",t.location):e!=="patch"&&U(i,o,"E031","updateById/removeById are only allowed in patch RHS.",t.location),a>0&&U(i,o,"E032","Nested transform primitives are not allowed.",t.location),e==="patch"&&!He(t.args[0],r)&&U(i,o,"E033","Transform primitive collection argument must resolve to a state path.",t.args[0].location));let s=Nn(t.args[0],n,r);if(!s)return;let c=wt(s,r);if(!c){U(i,o,"E030","Collection element type must declare an 'id' field for entity primitives.",t.args[0].location);return}be(c,r)||U(i,o,"E030a","Entity 'id' field must be string or number.",t.args[0].location)}function En(t,e,n,r){for(let i of t.members)if(i.kind==="state")for(let o of i.fields)kn(o,e,n,r)}function kn(t,e,n,r){if(!t.initializer||t.initializer.kind!=="arrayLiteral")return;let i=O(t.typeExpr,e);if(!i)return;let o=wt(i,e);if(!o||!be(o,e))return;let a=new Map;for(let s of t.initializer.elements){if(s.kind!=="objectLiteral")continue;let c=s.properties.find(p=>p.key==="id");if(!c||c.value.kind!=="literal"||typeof c.value.value!="string"&&typeof c.value.value!="number")continue;let l=`${typeof c.value.value}:${String(c.value.value)}`;if(a.get(l)){U(n,r,"E030b","Duplicate '.id' values detected in state initializer.",c.value.location);continue}a.set(l,c.value.location)}}function Nn(t,e,n){return O(g(t,e,n),n)}function wt(t,e){return K(t,"id",e)}function He(t,e){switch(t.kind){case"identifier":return e.stateTypes.has(t.name);case"propertyAccess":return He(t.object,e);case"indexAccess":return He(t.object,e);default:return!1}}function At(){return{inAction:!1,inGuard:!1,guardDepth:0,hasMarkerPatch:!1,currentActionParamTypes:new Map,diagnostics:[]}}var Tn=/\b(await(?:ing)?|wait(?:ing)?|pending)\b/i;function E(t,e){return{kind:"simpleType",name:t,location:e}}function G(t,e,n){let r=A(t,n),i=A(e,n);if(!r||!i)return null;if(i.kind==="unionType"){let o=r.kind==="unionType"?r.types:[r],a=!1;for(let s of o){let c=i.types.map(l=>G(s,l,n));if(!c.includes(!0)){if(c.every(l=>l===!1))return!1;a=!0}}return a?null:!0}if(r.kind==="unionType"){let o=!1;for(let a of r.types){let s=G(a,i,n);if(s===!1)return!1;s===null&&(o=!0)}return o?null:!0}if(i.kind==="simpleType"){if(r.kind==="simpleType")return r.name===i.name;if(r.kind==="literalType")return i.name==="null"?r.value===null:typeof r.value===i.name}if(i.kind==="literalType")return r.kind!=="literalType"?!1:r.value===i.value;if(i.kind==="arrayType")return r.kind!=="arrayType"?!1:G(r.elementType,i.elementType,n);if(i.kind==="objectType"){if(r.kind!=="objectType")return!1;for(let o of i.fields){let a=r.fields.find(c=>c.name===o.name);if(!a){if(o.optional)continue;return!1}let s=G(a.typeExpr,o.typeExpr,n);if(s!==!0)return s}return!0}return i.kind==="recordType"?r.kind!=="recordType"?null:G(r.valueType,i.valueType,n):null}function C(t,e){let n=A(t,e);if(!n)return"unknown";switch(n.kind){case"simpleType":return n.name;case"literalType":return JSON.stringify(n.value);case"arrayType":return`Array<${C(n.elementType,e)}>`;case"recordType":return`Record<${C(n.keyType,e)}, ${C(n.valueType,e)}>`;case"objectType":return`{ ${n.fields.map(r=>`${r.name}${r.optional?"?":""}: ${C(r.typeExpr,e)}`).join("; ")} }`;case"unionType":return n.types.map(r=>C(r,e)).join(" | ")}}function We(t,e){let n=A(t,e);if(!n)return null;switch(n.kind){case"simpleType":return n.name==="string"||n.name==="number"||n.name==="boolean"||n.name==="null"?new Set([n.name]):n.name==="object"?"nonprimitive":null;case"literalType":return new Set([n.value===null?"null":typeof n.value]);case"arrayType":case"recordType":case"objectType":return"nonprimitive";case"unionType":{let r=new Set;for(let i of n.types){let o=We(i,e);if(o===null)return null;if(o==="nonprimitive")return"nonprimitive";for(let a of o)r.add(a)}return r}}}function Ct(t,e,n){let r=We(t,n),i=We(e,n);if(r===null||i===null)return null;if(r==="nonprimitive"||i==="nonprimitive")return!1;if(!(r instanceof Set)||!(i instanceof Set))return null;let o=[...r].filter(s=>s!=="null"),a=[...i].filter(s=>s!=="null");return o.length===0||a.length===0?!0:o.some(s=>a.includes(s))}function bn(t,e){let n=A(t,e);if(!n||Y(n))return null;if(n.kind!=="unionType")return n;let r=n.types.filter(i=>!Y(i));return r.length===0?null:r.length===1?r[0]:{kind:"unionType",types:r,location:n.location}}function Sn(t,e,n){if(!t||!e)return null;let r=G(t,e,n);if(r===!0)return!0;let i=G(e,t,n);if(i===!0)return!0;let o=Ct(t,e,n);return o!==null?o:r===!1&&i===!1?!1:null}function Pt(t,e){let n=A(t,e);if(!n)return null;if(n.kind==="unionType"){let r=n.types.map(i=>Pt(i,e));return r.every(i=>i===!0)?!0:r.some(i=>i===!1)?!1:null}return n.kind==="arrayType"}function It(t,e){let n=A(t,e);if(!n)return null;if(n.kind==="unionType"){let r=n.types.map(i=>It(i,e));return r.every(i=>i===!0)?!0:r.some(i=>i===!1)?!1:null}return n.kind==="arrayType"||n.kind==="recordType"||n.kind==="objectType"?!0:n.kind==="literalType"?typeof n.value=="string":n.kind==="simpleType"?n.name==="string"||n.name==="object":!1}function xn(t,e){let n=new Map(t);return n.set("$item",e),n}function vn(t,e){let[n,...r]=t.segments;if(!n||n.kind!=="propertySegment")return null;let i=e.stateTypes.get(n.name)??null;for(let o of r){if(!i)return null;i=o.kind==="propertySegment"?K(i,o.name,e):ae(i,e)}return i}function wn(t){let e="";for(let[n,r]of t.segments.entries()){if(r.kind==="propertySegment"){e+=n===0?r.name:`.${r.name}`;continue}r.index.kind==="literal"?e+=`[${JSON.stringify(r.index.value)}]`:e+="[*]"}return e}var Qe=class{ctx=At();symbols=null;validate(e){return this.ctx=At(),this.symbols=Ne(e.domain),this.validateDomain(e.domain),this.symbols=null,{valid:!this.ctx.diagnostics.some(n=>n.severity==="error"),diagnostics:this.ctx.diagnostics}}validateDomain(e){e.name.startsWith("__")&&this.error("Domain name cannot start with '__' (reserved prefix)",e.location,"E_RESERVED_NAME");for(let n of e.members)switch(n.kind){case"state":this.validateState(n);break;case"computed":this.validateExpr(n.expression,"computed");break;case"action":this.validateAction(n);break;case"flow":break}}validateState(e){let n=new Map;for(let r of e.fields){let i=n.get(r.name);i?this.error(`Duplicate state field '${r.name}'. First declared at line ${i.start.line}`,r.location,"E_DUPLICATE_FIELD"):n.set(r.name,r.location),this.validateStateField(r)}}validateStateField(e){this.checkAnonymousObjectType(e.typeExpr,e.location),e.initializer&&this.validateStateInitializer(e.initializer)}validateStateInitializer(e){switch(e.kind){case"literal":return;case"identifier":case"iterationVar":this.error("State initializers must be compile-time constants",e.location,"E042");return;case"systemIdent":e.path[0]==="system"?this.error("$system.* cannot be used in state initializers",e.location,"E002"):this.error("State initializers must be compile-time constants",e.location,"E042");return;case"objectLiteral":for(let n of e.properties)this.validateStateInitializer(n.value);return;case"arrayLiteral":for(let n of e.elements)this.validateStateInitializer(n);return;case"functionCall":{let n=this.ctx.diagnostics.length;for(let r of e.args)this.validateStateInitializer(r);this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"binary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.left),this.validateStateInitializer(e.right),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"unary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.operand),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"ternary":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.condition),this.validateStateInitializer(e.consequent),this.validateStateInitializer(e.alternate),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"propertyAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.object),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}case"indexAccess":{let n=this.ctx.diagnostics.length;this.validateStateInitializer(e.object),this.validateStateInitializer(e.index),this.ctx.diagnostics.length===n&&this.error("State initializers must be compile-time constants",e.location,"E042");return}}}checkAnonymousObjectType(e,n){switch(e.kind){case"objectType":this.ctx.diagnostics.push(Nt("W012","Anonymous object type in state field. Use a named type declaration instead: type MyType = { ... }",e.location,{suggestion:"Define this type using 'type TypeName = { ... }' and reference it by name"}));for(let r of e.fields)this.checkAnonymousObjectType(r.typeExpr,n);break;case"arrayType":this.checkAnonymousObjectType(e.elementType,n);break;case"recordType":this.checkAnonymousObjectType(e.keyType,n),this.checkAnonymousObjectType(e.valueType,n);break;case"unionType":for(let r of e.types)this.checkAnonymousObjectType(r,n);break}}validateAction(e){this.ctx.inAction=!0,this.ctx.currentActionParamTypes=Te(e.params),e.available&&this.validateAvailableExpr(e.available),e.dispatchable&&this.validateDispatchableExpr(e.dispatchable);for(let n of e.body)this.validateGuardedStmt(n);this.ctx.inAction=!1,this.ctx.currentActionParamTypes=new Map}validateAvailableExpr(e){switch(e.kind){case"identifier":this.ctx.currentActionParamTypes.has(e.name)&&this.error("Action parameters cannot be used in available condition",e.location,"E005");break;case"systemIdent":e.path[0]==="system"&&this.error("$system.* cannot be used in available condition (must be pure expression)",e.location,"E005"),e.path[0]==="input"&&this.error("$input.* cannot be used in available condition (parameters not available at availability check)",e.location,"E005"),e.path[0]==="meta"&&this.error("$meta.* cannot be used in available condition (availability is schema-context only)",e.location,"E005");break;case"functionCall":for(let n of e.args)this.validateAvailableExpr(n);break;case"binary":this.validateAvailableExpr(e.left),this.validateAvailableExpr(e.right);break;case"unary":this.validateAvailableExpr(e.operand);break;case"ternary":this.validateAvailableExpr(e.condition),this.validateAvailableExpr(e.consequent),this.validateAvailableExpr(e.alternate);break;case"propertyAccess":this.validateAvailableExpr(e.object);break;case"indexAccess":this.validateAvailableExpr(e.object),this.validateAvailableExpr(e.index);break;case"objectLiteral":for(let n of e.properties)this.validateAvailableExpr(n.value);break;case"arrayLiteral":for(let n of e.elements)this.validateAvailableExpr(n);break}}validateDispatchableExpr(e){switch(e.kind){case"systemIdent":e.path[0]==="system"&&this.error("$system.* cannot be used in dispatchable condition (must be pure expression)",e.location,"E047"),e.path[0]==="input"&&this.error("$input.* cannot be used in dispatchable condition (use bare action parameter names)",e.location,"E047"),e.path[0]==="meta"&&this.error("$meta.* cannot be used in dispatchable condition (dispatchability is snapshot + bound-input only)",e.location,"E047");break;case"functionCall":for(let n of e.args)this.validateDispatchableExpr(n);break;case"binary":this.validateDispatchableExpr(e.left),this.validateDispatchableExpr(e.right);break;case"unary":this.validateDispatchableExpr(e.operand);break;case"ternary":this.validateDispatchableExpr(e.condition),this.validateDispatchableExpr(e.consequent),this.validateDispatchableExpr(e.alternate);break;case"propertyAccess":this.validateDispatchableExpr(e.object);break;case"indexAccess":this.validateDispatchableExpr(e.object),this.validateDispatchableExpr(e.index);break;case"objectLiteral":for(let n of e.properties)this.validateDispatchableExpr(n.value);break;case"arrayLiteral":for(let n of e.elements)this.validateDispatchableExpr(n);break}}validateGuardedStmt(e){switch(e.kind){case"when":this.validateWhen(e);break;case"once":this.validateOnce(e);break;case"onceIntent":this.validateOnceIntent(e);break;case"patch":this.validatePatch(e);break;case"effect":this.validateEffect(e);break;case"include":break;case"fail":this.validateFail(e);break;case"stop":this.validateStop(e);break}}validateWhen(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.validateCondition(e.condition,"when");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnce(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,this.ctx.hasMarkerPatch=!1,e.condition&&this.validateCondition(e.condition,"once");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validateOnceIntent(e){this.ctx.inGuard=!0,this.ctx.guardDepth++,e.condition&&this.validateCondition(e.condition,"onceIntent");for(let n of e.body)this.validateGuardedStmt(n);this.ctx.guardDepth--,this.ctx.guardDepth===0&&(this.ctx.inGuard=!1)}validatePatch(e){if(this.ctx.inGuard||this.error("Patch must be inside a guard (when, once, or onceIntent)",e.location,"E_UNGUARDED_PATCH"),e.value){let n=this.ctx.diagnostics.length,r=this.validateExpr(e.value,"action");if(!this.symbols||n!==this.ctx.diagnostics.length)return;let i=vn(e.path,this.symbols);if(!i||!r)return;G(r,i,this.symbols)===!1&&this.error(`Patch value for '${wn(e.path)}' must be assignable to ${C(i,this.symbols)}, got ${C(r,this.symbols)}`,e.value.location,"E_TYPE_MISMATCH")}}validateEffect(e){this.ctx.inGuard||this.error("Effect must be inside a guard (when, once, or onceIntent)",e.location,"E_UNGUARDED_EFFECT");for(let n of e.args)n.isPath||this.validateExpr(n.value,"action")}validateFail(e){this.ctx.inGuard||this.error("fail must be inside a guard (when, once, or onceIntent)",e.location,"E006"),e.message&&this.validateExpr(e.message,"action")}validateStop(e){this.ctx.inGuard||this.error("stop must be inside a guard (when, once, or onceIntent)",e.location,"E007"),Tn.test(e.reason)&&this.error("stop message suggests waiting/pending - use 'Already processed' style instead",e.location,"E008")}validateCondition(e,n){let r=this.ctx.diagnostics.length,i=this.validateExpr(e,"action");r===this.ctx.diagnostics.length&&this.requireAssignable(i,E("boolean",e.location),e.location,`Condition in ${n} must evaluate to boolean`)}validateExpr(e,n,r=this.ctx.currentActionParamTypes){switch(e.kind){case"functionCall":return this.validateFunctionCall(e,n,r),this.inferType(e,r);case"binary":{let i=this.ctx.diagnostics.length,o=this.validateExpr(e.left,n,r),a=this.validateExpr(e.right,n,r);if(!(i!==this.ctx.diagnostics.length))switch(e.operator){case"==":case"!=":this.validatePrimitiveEquality(e.left,e.right,o,a,e.location);break;case"<":case"<=":case">":case">=":this.requireAssignable(o,E("number",e.left.location),e.left.location,`Operator '${e.operator}' requires a numeric left operand`),this.requireAssignable(a,E("number",e.right.location),e.right.location,`Operator '${e.operator}' requires a numeric right operand`);break;case"&&":case"||":this.requireAssignable(o,E("boolean",e.left.location),e.left.location,`Operator '${e.operator}' requires a boolean left operand`),this.requireAssignable(a,E("boolean",e.right.location),e.right.location,`Operator '${e.operator}' requires a boolean right operand`);break;case"+":case"-":case"*":case"/":case"%":this.requireAssignable(o,E("number",e.left.location),e.left.location,`Operator '${e.operator}' requires a numeric left operand`),this.requireAssignable(a,E("number",e.right.location),e.right.location,`Operator '${e.operator}' requires a numeric right operand`);break;case"??":this.validateCoalesceTypes([o,a],e.location);break}return this.inferType(e,r)}case"unary":{let i=this.ctx.diagnostics.length,o=this.validateExpr(e.operand,n,r);return i===this.ctx.diagnostics.length&&this.requireAssignable(o,E(e.operator==="!"?"boolean":"number",e.operand.location),e.operand.location,e.operator==="!"?"Unary '!' requires a boolean operand":"Unary '-' requires a numeric operand"),this.inferType(e,r)}case"ternary":{let i=this.ctx.diagnostics.length,o=this.validateExpr(e.condition,n,r);return this.validateExpr(e.consequent,n,r),this.validateExpr(e.alternate,n,r),i===this.ctx.diagnostics.length&&this.requireAssignable(o,E("boolean",e.condition.location),e.condition.location,"Ternary condition must evaluate to boolean"),this.inferType(e,r)}case"propertyAccess":return this.validateExpr(e.object,n,r),this.inferType(e,r);case"indexAccess":return this.validateExpr(e.object,n,r),this.validateExpr(e.index,n,r),this.inferType(e,r);case"objectLiteral":for(let i of e.properties)this.validateExpr(i.value,n,r);return this.inferType(e,r);case"arrayLiteral":for(let i of e.elements)this.validateExpr(i,n,r);return this.inferType(e,r);case"systemIdent":return this.inferType(e,r);case"literal":case"identifier":case"iterationVar":return this.inferType(e,r)}}validateFunctionCall(e,n,r){let{name:i,args:o,location:a}=e;if(["reduce","fold","foldl","foldr","scan"].includes(i)&&this.error(`Function '${i}' is forbidden. Use sum(), min(), max() for aggregation instead`,a,"E011"),["sum","min","max"].includes(i)&&o.length===1){n==="action"&&this.error(`Primitive aggregation '${i}()' can only be used in computed expressions, not in actions`,a,"E009");let c=o[0];c.kind==="functionCall"&&this.error(`Primitive aggregation '${i}()' does not allow composition. Use a direct reference, not '${c.name}()'`,a,"E010")}switch(i){case"eq":case"neq":break;case"len":case"sum":o.length!==1&&this.error(`Function '${i}' expects 1 argument, got ${o.length}`,a,"E_ARG_COUNT");break;case"add":case"sub":case"mul":case"div":case"mod":case"gt":case"gte":case"lt":case"lte":o.length!==2&&this.error(`Function '${i}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"not":case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":case"isNull":case"isNotNull":case"trim":case"lower":case"upper":case"strlen":case"keys":case"values":case"entries":case"first":case"last":case"typeof":case"toString":case"toNumber":case"toBoolean":case"reverse":case"unique":case"flat":case"fromEntries":o.length!==1&&this.error(`Function '${i}' expects 1 argument, got ${o.length}`,a,"E_ARG_COUNT");break;case"pow":case"findById":case"existsById":case"filter":case"map":case"find":case"every":case"some":case"at":case"includes":case"field":case"hasKey":case"pick":case"omit":case"startsWith":case"endsWith":case"strIncludes":case"indexOf":o.length!==2&&this.error(`Function '${i}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"updateById":o.length!==3&&this.error(`Function '${i}' expects 3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"removeById":o.length!==2&&this.error(`Function '${i}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"slice":case"substring":case"substr":case"replace":(o.length<2||o.length>3)&&this.error(`Function '${i}' expects 2-3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"split":o.length!==2&&this.error(`Function '${i}' expects 2 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;case"and":case"or":case"concat":case"min":case"max":case"merge":case"coalesce":case"append":o.length<1&&this.error(`Function '${i}' expects at least 1 argument`,a,"E_ARG_COUNT");break;case"if":case"cond":o.length!==3&&this.error(`Function '${i}' expects 3 arguments, got ${o.length}`,a,"E_ARG_COUNT");break;default:this.error(`Unknown function '${i}'. Check spelling or see MEL builtin function reference`,a,"E_UNKNOWN_FN");break}let s=[];if(["filter","map","find","every","some"].includes(i)&&o.length>0){let c=this.validateExpr(o[0],n,r);s.push(c);let l=r;if(this.symbols){let d=O(c,this.symbols);d&&(l=xn(r,d))}for(let d=1;d<o.length;d+=1)s.push(this.validateExpr(o[d],n,d===1?l:r))}else for(let c of o)s.push(this.validateExpr(c,n,r));if(this.symbols)switch(i){case"eq":case"neq":o.length===2&&this.validatePrimitiveEquality(o[0],o[1],s[0],s[1],a);break;case"add":case"sub":case"mul":case"div":case"mod":case"pow":o.length===2&&(this.requireAssignable(s[0],E("number",o[0].location),o[0].location,`Function '${i}' expects a numeric first argument`),this.requireAssignable(s[1],E("number",o[1].location),o[1].location,`Function '${i}' expects a numeric second argument`));break;case"gt":case"gte":case"lt":case"lte":o.length===2&&(this.requireAssignable(s[0],E("number",o[0].location),o[0].location,`Function '${i}' expects a numeric first argument`),this.requireAssignable(s[1],E("number",o[1].location),o[1].location,`Function '${i}' expects a numeric second argument`));break;case"and":case"or":for(let[c,l]of o.entries())this.requireAssignable(s[c],E("boolean",l.location),l.location,`Function '${i}' expects boolean arguments`);break;case"not":o.length===1&&this.requireAssignable(s[0],E("boolean",o[0].location),o[0].location,"Function 'not' expects a boolean argument");break;case"neg":case"abs":case"floor":case"ceil":case"round":case"sqrt":o.length===1&&this.requireAssignable(s[0],E("number",o[0].location),o[0].location,`Function '${i}' expects a numeric argument`);break;case"trim":case"lower":case"upper":case"strlen":o.length===1&&this.requireAssignable(s[0],E("string",o[0].location),o[0].location,`Function '${i}' expects a string argument`);break;case"startsWith":case"endsWith":case"strIncludes":case"indexOf":case"split":o.length===2&&(this.requireAssignable(s[0],E("string",o[0].location),o[0].location,`Function '${i}' expects a string first argument`),this.requireAssignable(s[1],E("string",o[1].location),o[1].location,`Function '${i}' expects a string second argument`));break;case"replace":o.length>=2&&(this.requireAssignable(s[0],E("string",o[0].location),o[0].location,"Function 'replace' expects a string first argument"),this.requireAssignable(s[1],E("string",o[1].location),o[1].location,"Function 'replace' expects a string second argument")),o.length===3&&this.requireAssignable(s[2],E("string",o[2].location),o[2].location,"Function 'replace' expects a string replacement argument");break;case"substring":case"substr":o.length>=2&&(this.requireAssignable(s[0],E("string",o[0].location),o[0].location,`Function '${i}' expects a string first argument`),this.requireAssignable(s[1],E("number",o[1].location),o[1].location,`Function '${i}' expects a numeric second argument`)),o.length===3&&this.requireAssignable(s[2],E("number",o[2].location),o[2].location,`Function '${i}' expects a numeric third argument`);break;case"len":o.length===1&&this.requireLenCompatible(s[0],o[0].location);break;case"filter":case"find":case"every":case"some":o.length===2&&(this.requireArrayCompatible(s[0],o[0].location,i),this.requireAssignable(s[1],E("boolean",o[1].location),o[1].location,`Function '${i}' requires a boolean-valued callback`));break;case"map":o.length===2&&this.requireArrayCompatible(s[0],o[0].location,i);break;case"coalesce":this.validateCoalesceTypes(s,a);break;case"if":case"cond":o.length===3&&this.requireAssignable(s[0],E("boolean",o[0].location),o[0].location,`Function '${i}' expects a boolean condition`);break}}validatePrimitiveEquality(e,n,r,i,o){if(!this.symbols)return;if(e.kind==="objectLiteral"||e.kind==="arrayLiteral"||n.kind==="objectLiteral"||n.kind==="arrayLiteral"){this.error("eq/neq operands must be compatible primitive types, not object or array literals",o,"E_TYPE_MISMATCH");return}Ct(r,i,this.symbols)===!1&&this.error(`eq/neq operands must be compatible primitive types, got ${C(r,this.symbols)} and ${C(i,this.symbols)}`,o,"E_TYPE_MISMATCH")}inferType(e,n){return this.symbols?g(e,n,this.symbols):null}requireAssignable(e,n,r,i){if(!this.symbols||!e)return;G(e,n,this.symbols)===!1&&this.error(`${i}, got ${C(e,this.symbols)}`,r,"E_TYPE_MISMATCH")}requireArrayCompatible(e,n,r){if(!this.symbols||!e)return;Pt(e,this.symbols)===!1&&this.error(`Function '${r}' expects an array first argument, got ${C(e,this.symbols)}`,n,"E_TYPE_MISMATCH")}requireLenCompatible(e,n){if(!this.symbols||!e)return;It(e,this.symbols)===!1&&this.error(`Function 'len' expects a string, array, object, or record argument, got ${C(e,this.symbols)}`,n,"E_TYPE_MISMATCH")}validateCoalesceTypes(e,n){if(!this.symbols)return;let r=e.map(i=>bn(i,this.symbols)).filter(i=>i!==null);for(let i=0;i<r.length;i+=1)for(let o=i+1;o<r.length;o+=1)if(Sn(r[i],r[o],this.symbols)===!1){this.error(`coalesce arguments must have compatible non-null types, got ${C(r[i],this.symbols)} and ${C(r[o],this.symbols)}`,n,"E_TYPE_MISMATCH");return}}error(e,n,r){this.ctx.diagnostics.push({severity:"error",code:r,message:e,location:n})}warn(e,n,r){this.ctx.diagnostics.push({severity:"warning",code:r,message:e,location:n})}};function Mt(t){let n=new Qe().validate(t),r=vt(t),i=[...n.diagnostics,...r];return{valid:!i.some(o=>o.severity==="error"),diagnostics:i}}var Ye={mode:"schema",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!1},Xe={mode:"action",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!1},Je={mode:"action",allowSysPaths:{prefixes:["input"]},fnTableVersion:"1.0",allowItem:!1},Ze={mode:"action",allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0",allowItem:!0},An={allowSysPaths:{prefixes:["meta","input"]},fnTableVersion:"1.0"};var L=class extends Error{code;path;details;constructor(e,n,r){super(n),this.name="LoweringError",this.code=e,this.path=r?.path,this.details=r?.details}};function Se(t,e,n){return new L("INVALID_KIND_FOR_CONTEXT",`Node kind '${t}' is not allowed in ${e} context`,{path:n,details:{kind:t,context:e}})}function k(t,e){return new L("UNKNOWN_CALL_FN",`Unknown function '${t}' in call expression`,{path:e,details:{fn:t}})}function xe(t,e){return new L("INVALID_SYS_PATH",`System path '${t.join(".")}' is not allowed in Translator path`,{path:e,details:{sysPath:t}})}function et(t,e){return new L("UNSUPPORTED_BASE",`Unsupported base expression kind '${t}'. Only var(item) is supported.`,{path:e,details:{baseKind:t}})}function Cn(t,e){return new L("INVALID_SHAPE",`Invalid node shape: ${t}`,{path:e,details:{description:t}})}function tt(t,e){return new L("UNKNOWN_NODE_KIND",`Unknown expression node kind '${t}'`,{path:e,details:{kind:t}})}function Pn(t,e){let n=Array.from(t),r=Array.from(e),i=Math.min(n.length,r.length);for(let o=0;o<i;o+=1){let a=n[o].codePointAt(0)??0,s=r[o].codePointAt(0)??0;if(a!==s)return a-s}return n.length-r.length}function Dt(t){return t.map((e,n)=>({item:e,index:n})).sort((e,n)=>{let r=Pn(e.item.key,n.item.key);return r!==0?r:e.index-n.index}).map(({item:e})=>e)}function u(t,e){switch(t.kind){case"lit":return In(t);case"var":return Mn(t,e);case"sys":return Dn(t,e);case"get":return Rn(t,e);case"field":return Rt(t,e);case"call":return Ln(t,e);case"obj":return Fn(t,e);case"arr":return On(t,e);default:throw tt(t.kind)}}function In(t){return{kind:"lit",value:t.value}}function Mn(t,e){if(!e.allowItem)throw Se("var",e.mode);return{kind:"get",path:"$item"}}function Dn(t,e){if(t.path.length===0)throw xe(t.path);let n=t.path[0];if(!(e.allowSysPaths?.prefixes??["meta","input"]).includes(n))throw xe(t.path);return{kind:"get",path:t.path.join(".")}}function Rn(t,e){let n=t.path.map(r=>r.name).join(".");if(t.base===void 0)return{kind:"get",path:n};if(t.base.kind==="var"&&t.base.name==="item"){if(!e.allowItem)throw Se("var",e.mode);return{kind:"get",path:`$item.${n}`}}throw et(t.base.kind)}function Rt(t,e){if(t.object.kind==="get"&&t.object.base===void 0){let n=t.object.path.map(r=>r.name).join(".");return{kind:"get",path:n?`${n}.${t.property}`:t.property}}return{kind:"field",object:u(t.object,e),property:t.property}}function Ln(t,e){let{fn:n,args:r}=t;if(jn(n)){if(r.length!==2)throw k(n);let[i,o]=r;return{kind:n,left:u(i,e),right:u(o,e)}}if(n==="isNotNull"){if(r.length!==1)throw k(n);return{kind:"not",arg:{kind:"isNull",arg:u(r[0],e)}}}if(Lt(n)){if(r.length!==1)throw k(n);return{kind:_n(n),arg:u(r[0],e)}}if(n==="trim"){if(r.length!==1)throw k(n);return{kind:"trim",str:u(r[0],e)}}if(n==="lower"||n==="toLowerCase"){if(r.length!==1)throw k(n);return{kind:"toLowerCase",str:u(r[0],e)}}if(n==="upper"||n==="toUpperCase"){if(r.length!==1)throw k(n);return{kind:"toUpperCase",str:u(r[0],e)}}if(n==="strlen"||n==="strLen"){if(r.length!==1)throw k(n);return{kind:"strLen",str:u(r[0],e)}}if($n(n))return r.length===1?{kind:n==="min"?"minArray":"maxArray",array:u(r[0],e)}:{kind:n,args:r.map(i=>u(i,e))};if(n==="sum"){if(r.length!==1)throw k(n);return{kind:"sumArray",array:u(r[0],e)}}if(n==="pow"){if(r.length!==2)throw k(n);return{kind:"pow",base:u(r[0],e),exponent:u(r[1],e)}}if(Bn(n))return{kind:n,args:r.map(i=>u(i,e))};if(n==="if"||n==="cond"){if(r.length!==3)throw k(n);return{kind:"if",cond:u(r[0],e),then:u(r[1],e),else:u(r[2],e)}}if(n==="field"){if(r.length!==2)throw k(n);let i=u(r[0],e),o=r[1];if(o.kind!=="lit"||typeof o.value!="string")throw k(n);return Rt({kind:"field",object:r[0],property:o.value},e)}if(Un(n)){if(r.length!==1)throw k(n);return{kind:n,array:u(r[0],e)}}if(Gn(n)){if(r.length!==1)throw k(n);return{kind:n,obj:u(r[0],e)}}if(n==="at"){if(r.length!==2)throw k(n);return{kind:"at",array:u(r[0],e),index:u(r[1],e)}}if(n==="includes"){if(r.length!==2)throw k(n);return{kind:"includes",array:u(r[0],e),item:u(r[1],e)}}if(qn(n)){if(r.length!==2)throw k(n);let i={...e,allowItem:!0};return n==="map"?{kind:"map",array:u(r[0],e),mapper:u(r[1],i)}:{kind:n,array:u(r[0],e),predicate:u(r[1],i)}}if(n==="slice"){if(r.length<2||r.length>3)throw k(n);let i={kind:"slice",array:u(r[0],e),start:u(r[1],e)};return r.length===3&&(i.end=u(r[2],e)),i}if(n==="substring"||n==="substr"){if(r.length<2||r.length>3)throw k(n);let i={kind:"substring",str:u(r[0],e),start:u(r[1],e)};return r.length===3&&(i.end=u(r[2],e)),i}if(n==="append"){if(r.length<1)throw k(n);return{kind:"append",array:u(r[0],e),items:r.slice(1).map(i=>u(i,e))}}if(n==="merge")return{kind:"merge",objects:r.map(i=>u(i,e))};throw k(n)}function Fn(t,e){let n={};for(let r of Dt(t.fields))n[r.key]=u(r.value,e);return{kind:"object",fields:n}}function On(t,e){if(t.elements.every(i=>i.kind==="lit"))return{kind:"lit",value:t.elements.map(o=>o.value)};let r=t.elements.map(i=>u(i,e));return r.length===0?{kind:"lit",value:[]}:{kind:"append",array:{kind:"lit",value:[]},items:r}}function jn(t){return["eq","neq","gt","gte","lt","lte","add","sub","mul","div","mod"].includes(t)}function Lt(t){return["not","neg","abs","floor","ceil","round","sqrt","len","typeof","isNull","toString"].includes(t)}function _n(t){if(t==="isNotNull")throw k(t);if(!Lt(t))throw k(t);return t}function $n(t){return t==="min"||t==="max"}function Bn(t){return["and","or","concat","coalesce"].includes(t)}function Un(t){return["first","last"].includes(t)}function Gn(t){return["keys","values","entries"].includes(t)}function qn(t){return["filter","find","every","some","map"].includes(t)}function zn(t,e){return t.map(n=>Vn(n,e))}function Vn(t,e){let n=t.condition?u(t.condition,ve(e,"action")):void 0,r=Hn(t.op,e);return{fragmentId:t.fragmentId,condition:n,op:r,confidence:t.confidence}}function Hn(t,e){switch(t.kind){case"addType":return{kind:"addType",typeName:t.typeName,typeExpr:J(t.typeExpr)};case"addField":return{kind:"addField",typeName:t.typeName,field:{name:t.field.name,type:J(t.field.type),optional:t.field.optional,defaultValue:t.field.defaultValue}};case"setFieldType":return{kind:"setFieldType",path:t.path,typeExpr:J(t.typeExpr)};case"setDefaultValue":return{kind:"setDefaultValue",path:t.path,value:t.value};case"addConstraint":return{kind:"addConstraint",targetPath:t.targetPath,rule:u(t.rule,ve(e,"schema")),message:t.message};case"addComputed":return{kind:"addComputed",name:t.name,expr:u(t.expr,ve(e,"schema")),deps:t.deps};case"addActionAvailable":return{kind:"addActionAvailable",actionName:t.actionName,expr:u(t.expr,ve(e,"schema"))}}}function J(t){switch(t.kind){case"primitive":return{kind:"primitive",name:t.name};case"array":return{kind:"array",element:J(t.element)};case"object":return{kind:"object",fields:t.fields.map(e=>({name:e.name,type:J(e.type),optional:e.optional}))};case"union":return{kind:"union",members:t.members.map(J)};case"literal":return{kind:"literal",value:t.value};case"ref":return{kind:"ref",name:t.name}}}function ve(t,e){return{mode:e,allowSysPaths:t.allowSysPaths,fnTableVersion:t.fnTableVersion,actionName:t.actionName,allowItem:!1}}function Kn(t,e){return t.map(n=>we(n,e))}function we(t,e){let n=t.condition?u(t.condition,e):void 0,r=t.value?u(t.value,e):void 0;return{condition:n,op:t.op,path:Wn(t.path,e),value:r}}function Wn(t,e){return t.map(n=>n.kind==="prop"?n:{kind:"expr",expr:u(n.expr,e)})}function v(t,e={}){switch(t.kind){case"literal":return{kind:"lit",value:Xn(t.value,t.literalType)};case"identifier":return e.resolveIdentifier?.(t.name)??_(t.name);case"systemIdent":return Qn(t,e);case"iterationVar":return{kind:"var",name:t.name};case"propertyAccess":return Yn(t.object,t.property,e);case"indexAccess":return{kind:"call",fn:"at",args:[v(t.object,e),v(t.index,e)]};case"functionCall":return{kind:"call",fn:t.name,args:t.args.map(n=>v(n,e))};case"unary":return{kind:"call",fn:t.operator==="!"?"not":"neg",args:[v(t.operand,e)]};case"binary":return{kind:"call",fn:Jn(t.operator),args:[v(t.left,e),v(t.right,e)]};case"ternary":return{kind:"call",fn:"cond",args:[v(t.condition,e),v(t.consequent,e),v(t.alternate,e)]};case"objectLiteral":return{kind:"obj",fields:t.properties.map(n=>({key:n.key,value:v(n.value,e)}))};case"arrayLiteral":return{kind:"arr",elements:t.elements.map(n=>v(n,e))}}}function _(...t){return{kind:"get",path:Ft(...t)}}function nt(t,...e){return{kind:"get",base:t,path:Ft(...e)}}function se(...t){return{kind:"sys",path:t}}function Ae(t){return{kind:"obj",fields:Object.entries(t).map(([e,n])=>({key:e,value:n}))}}function Ft(...t){return t.map(e=>({kind:"prop",name:e}))}function Qn(t,e){return e.resolveSystemIdent?.(t.path)??se(...t.path)}function Yn(t,e,n){let r=v(t,n);return r.kind==="get"?{kind:"get",...r.base?{base:r.base}:void 0,path:[...r.path,{kind:"prop",name:e}]}:r.kind==="var"&&r.name==="item"?nt(r,e):{kind:"field",object:r,property:e}}function Xn(t,e){if(e==="null")return null;if(e==="number"){if(typeof t=="number")return t;if(typeof t=="bigint")return Number(t);if(typeof t=="string"&&t.length>0){let n=Number(t);if(!Number.isNaN(n))return n}throw new Error("Invalid number literal")}if(e==="string"){if(typeof t=="string")return t;throw new Error("Invalid string literal")}if(e==="boolean"){if(typeof t=="boolean")return t;throw new Error("Invalid boolean literal")}throw new Error("Unsupported literal type")}function Jn(t){switch(t){case"+":return"add";case"-":return"sub";case"*":return"mul";case"/":return"div";case"%":return"mod";case"==":return"eq";case"!=":return"neq";case"<":return"lt";case"<=":return"lte";case">":return"gt";case">=":return"gte";case"&&":return"and";case"||":return"or";case"??":return"coalesce"}}import{hashSchemaSync as ir,semanticPathToPatchPath as or,sha256Sync as ar}from"@manifesto-ai/core";var Zn=new Set(["findById","existsById","updateById","removeById"]);function Ot(t){return{...t,computed:{fields:Object.fromEntries(Object.entries(t.computed.fields).map(([e,n])=>[e,er(n)]))},actions:Object.fromEntries(Object.entries(t.actions).map(([e,n])=>[e,tr(n)]))}}function er(t){return{...t,expr:jt(t.expr)}}function tr(t){return{...t,flow:Ce(t.flow),available:t.available?jt(t.available):void 0,dispatchable:t.dispatchable?nr(t.dispatchable):void 0}}function Ce(t){switch(t.kind){case"seq":return{kind:"seq",steps:t.steps.map(e=>Ce(e))};case"if":return{kind:"if",cond:rt(t.cond),then:Ce(t.then),else:t.else?Ce(t.else):void 0};case"patch":return{kind:"patch",op:t.op,path:t.path,value:t.value?rt(t.value):void 0};case"effect":return{kind:"effect",type:t.type,params:Object.fromEntries(Object.entries(t.params).map(([e,n])=>[e,rr(n)]))};case"fail":return{kind:"fail",code:t.code,message:t.message?rt(t.message):void 0};case"call":case"halt":return t}}function jt(t){return u(P(t),Ye)}function rt(t){return u(P(t),Xe)}function nr(t){return u(P(t),Je)}function rr(t){return u(P(t),Ze)}function P(t){switch(t.kind){case"lit":case"var":return t;case"sys":return t.path[0]==="system"?_("$system",...t.path.slice(1)):t;case"get":return{kind:"get",...t.base?{base:P(t.base)}:void 0,path:t.path};case"field":return{kind:"field",object:P(t.object),property:t.property};case"obj":return{kind:"obj",fields:t.fields.map(e=>({key:e.key,value:P(e.value)}))};case"arr":return{kind:"arr",elements:t.elements.map(e=>P(e))};case"call":return Zn.has(t.fn)?P(_t(t.fn,t.args)):{kind:"call",fn:t.fn,args:t.args.map(e=>P(e))}}}function _t(t,e){let[n,r,i]=e,o=P(n),a=r?P(r):{kind:"lit",value:null},s={kind:"var",name:"item"},c=nt(s,"id");switch(t){case"findById":return{kind:"call",fn:"find",args:[o,{kind:"call",fn:"eq",args:[c,a]}]};case"existsById":return{kind:"call",fn:"not",args:[{kind:"call",fn:"isNull",args:[_t("findById",e)]}]};case"updateById":{let l=i?P(i):Ae({});return{kind:"call",fn:"map",args:[o,{kind:"call",fn:"cond",args:[{kind:"call",fn:"eq",args:[c,a]},{kind:"call",fn:"merge",args:[s,l]},s]}]}}case"removeById":return{kind:"call",fn:"filter",args:[o,{kind:"call",fn:"not",args:[{kind:"call",fn:"eq",args:[c,a]}]}]};default:return{kind:"call",fn:t,args:e.map(l=>P(l))}}}function sr(t){return{domainName:t,stateFields:new Set,computedFields:new Set,actionParams:new Map,onceIntentCounters:new Map,currentAction:null,diagnostics:[],typeDefs:new Map,typeDefinitions:new Map,stateFieldSpecs:new Map,stateFieldTypes:new Map}}function cr(t){let e=sr(t.domain.name);lr(t.domain,e);let n=dr(t.domain,e),r=pr(t.domain,e),i=mr(t.domain,e),o=Er(t.domain,e);if(e.diagnostics.some(l=>l.severity==="error"))return{schema:null,diagnostics:e.diagnostics};let a={id:`mel:${t.domain.name.toLowerCase()}`,version:"1.0.0",types:n,state:r,computed:i,actions:o,meta:{name:t.domain.name}},s=Ir(a);return{schema:{...a,hash:s},diagnostics:e.diagnostics}}function $t(t){let e=cr(t);return e.schema?{schema:Ot(e.schema),diagnostics:e.diagnostics}:{schema:null,diagnostics:e.diagnostics}}function lr(t,e){for(let n of t.types)e.typeDefs.set(n.name,n);for(let n of t.members)if(n.kind==="state")for(let r of n.fields)e.stateFields.add(r.name);else n.kind==="computed"?e.computedFields.add(n.name):n.kind}function dr(t,e){let n={};for(let r of t.types){let i=q(r.typeExpr);e.typeDefinitions.set(r.name,i),n[r.name]={name:r.name,definition:i}}return n}function q(t){switch(t.kind){case"simpleType":return["string","number","boolean","null","object","array"].includes(t.name)?{kind:"primitive",type:t.name}:{kind:"ref",name:t.name};case"arrayType":return{kind:"array",element:q(t.elementType)};case"recordType":return{kind:"record",key:q(t.keyType),value:q(t.valueType)};case"objectType":let e={};for(let r of t.fields)e[r.name]={type:q(r.typeExpr),optional:r.optional};return{kind:"object",fields:e};case"unionType":return{kind:"union",types:t.types.map(q)};case"literalType":return{kind:"literal",value:t.value};default:let n=t;throw new Error(`Unknown type expression kind: ${t.kind}`)}}function pr(t,e){let n={},r={};for(let i of t.members)if(i.kind==="state")for(let o of i.fields){let a=q(o.typeExpr);r[o.name]=a,e.stateFieldTypes.set(o.name,a);let s=Q(o.typeExpr,e);s&&e.stateFieldSpecs.set(o.name,s);let c=ur(o,e);c&&(n[o.name]=c)}return{fields:n,fieldTypes:r}}function ur(t,e){let n=Q(t.typeExpr,e);if(!n)return null;let r=t.initializer?Ie(t.initializer,e):void 0;return r!==void 0&&le(r,q(t.typeExpr),t.name,t.location,e),{...n,required:!0,default:r}}function Q(t,e,n=[]){switch(t.kind){case"simpleType":switch(t.name){case"string":return{type:"string",required:!0};case"number":return{type:"number",required:!0};case"boolean":return{type:"boolean",required:!0};case"null":return{type:"null",required:!0};default:{let r=e.typeDefs.get(t.name);return r?n.includes(t.name)?(it(e,"E044",`Recursive type '${t.name}' cannot be lowered to FieldSpec in a schema position`,t.location),null):Q(r.typeExpr,e,[...n,t.name]):{type:"object",required:!0}}}case"unionType":{let r=t.types.filter(s=>!(s.kind==="simpleType"&&s.name==="null")&&!(s.kind==="literalType"&&s.value===null)),i=r.length!==t.types.length,o=[],a=!i;for(let s of r){if(s.kind!=="literalType"){a=!1;break}o.push(s.value)}return a&&o.length>0?{type:{enum:o},required:!0}:i&&r.length===1?Q(r[0],e,n):(it(e,"E043",`Union type '${Z(t)}' cannot be soundly lowered to FieldSpec`,t.location),null)}case"arrayType":{let r=Q(t.elementType,e,n);return r?{type:"array",required:!0,items:r}:null}case"recordType":return{type:"object",required:!0};case"literalType":return typeof t.value=="string"?{type:"string",required:!0}:typeof t.value=="number"?{type:"number",required:!0}:typeof t.value=="boolean"?{type:"boolean",required:!0}:{type:"null",required:!0};case"objectType":{let r={};for(let i of t.fields){let o=Q(i.typeExpr,e,n);if(!o)return null;r[i.name]={...o,required:!i.optional}}return{type:"object",required:!0,fields:r}}}}function it(t,e,n,r){t.diagnostics.push({severity:"error",code:e,message:n,location:r})}function Z(t){switch(t.kind){case"simpleType":return t.name;case"unionType":return t.types.map(e=>Z(e)).join(" | ");case"arrayType":return`Array<${Z(t.elementType)}>`;case"recordType":return`Record<${Z(t.keyType)}, ${Z(t.valueType)}>`;case"literalType":return JSON.stringify(t.value);case"objectType":return`{ ${t.fields.map(e=>`${e.name}${e.optional?"?":""}: ${Z(e.typeExpr)}`).join("; ")} }`}}function de(t,e,n=[]){if(t.kind!=="ref")return t;if(n.includes(t.name))return null;let r=e.typeDefinitions.get(t.name);return r?de(r,e,[...n,t.name]):null}function z(t){switch(t.kind){case"primitive":return t.type;case"array":return`Array<${z(t.element)}>`;case"record":return`Record<${z(t.key)}, ${z(t.value)}>`;case"object":return`{ ${Object.entries(t.fields).map(([e,n])=>`${e}${n.optional?"?":""}: ${z(n.type)}`).join("; ")} }`;case"union":return t.types.map(e=>z(e)).join(" | ");case"literal":return JSON.stringify(t.value);case"ref":return t.name}}function ce(t,e,n){let r=de(e,n);if(!r)return!1;switch(r.kind){case"primitive":switch(r.type){case"null":return t===null;case"string":return typeof t=="string";case"number":return typeof t=="number";case"boolean":return typeof t=="boolean";case"object":return t!==null&&!Array.isArray(t)&&typeof t=="object";case"array":return Array.isArray(t);default:return!1}case"literal":return Object.is(t,r.value);case"array":return Array.isArray(t)&&t.every(i=>ce(i,r.element,n));case"record":return t!==null&&!Array.isArray(t)&&typeof t=="object"&&Object.values(t).every(i=>ce(i,r.value,n));case"object":if(t===null||Array.isArray(t)||typeof t!="object")return!1;for(let i of Object.keys(t))if(!(i in r.fields))return!1;for(let[i,o]of Object.entries(r.fields)){if(!(i in t)){if(!o.optional)return!1;continue}if(!ce(t[i],o.type,n))return!1}return!0;case"union":return r.types.some(i=>ce(t,i,n));case"ref":return!1}}function le(t,e,n,r,i){if(t===void 0)return;let o=de(e,i);if(!o){i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${z(e)}, got ${JSON.stringify(t)}`,location:r});return}if(o.kind==="union"){if(ce(t,o,i))return;i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${z(o)}, got ${JSON.stringify(t)}`,location:r});return}switch(o.kind){case"primitive":{let a=Array.isArray(t)?"array":t===null?"null":typeof t;switch(o.type){case"null":t!==null&&W(i,n,"null",a,r);return;case"string":case"number":case"boolean":typeof t!==o.type&&W(i,n,o.type,a,r);return;case"object":(t===null||Array.isArray(t)||typeof t!="object")&&W(i,n,"object",a,r);return;case"array":Array.isArray(t)||W(i,n,"array",a,r);return}return}case"literal":Object.is(t,o.value)||i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects literal ${JSON.stringify(o.value)}, got ${JSON.stringify(t)}`,location:r});return;case"array":if(!Array.isArray(t)){W(i,n,"array",t===null?"null":typeof t=="object"?"object":typeof t,r);return}for(let a=0;a<t.length;a+=1)le(t[a],o.element,`${n}[${a}]`,r,i);return;case"record":if(t===null||Array.isArray(t)||typeof t!="object"){let a=Array.isArray(t)?"array":t===null?"null":typeof t;W(i,n,"object",a,r);return}for(let[a,s]of Object.entries(t))le(s,o.value,`${n}.${a}`,r,i);return;case"object":if(t===null||Array.isArray(t)||typeof t!="object"){let a=Array.isArray(t)?"array":t===null?"null":typeof t;W(i,n,"object",a,r);return}for(let a of Object.keys(t))a in o.fields||i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is not declared in ${z(o)}`,location:r});for(let[a,s]of Object.entries(o.fields)){if(!(a in t)){s.optional||i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}.${a}' is required`,location:r});continue}le(t[a],s.type,`${n}.${a}`,r,i)}return;case"ref":i.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${n}' expects ${z(e)}, got ${JSON.stringify(t)}`,location:r});return}}function W(t,e,n,r,i){t.diagnostics.push({severity:"error",code:"E_TYPE_MISMATCH",message:`Type mismatch: field '${e}' expects ${n}, got ${r}`,location:i})}function Ie(t,e){switch(t.kind){case"literal":return t.value;case"arrayLiteral":return t.elements.map(n=>Ie(n,e));case"objectLiteral":{let n={};for(let r of t.properties)n[r.key]=Ie(r.value,e);return n}default:return}}function mr(t,e){let n=[],r=0;for(let o of t.members)if(o.kind==="computed"){let a=$(o.expression,e),s=gr(a);n.push({name:o.name,deps:s,expr:a,location:o.location,order:r}),r+=1}let i={};for(let o of hr(n,e))i[o.name]={deps:o.deps,expr:o.expr};return{fields:i}}function hr(t,e){if(t.length<=1)return[...t];let n=new Map(t.map(c=>[c.name,c])),r=new Map,i=new Map,o=new Map;for(let c of t)i.set(c.name,[]),o.set(c.name,0);for(let c of t){let l=Array.from(new Set(c.deps.filter(d=>n.has(d))));r.set(c.name,l),o.set(c.name,l.length);for(let d of l)i.get(d).push(c.name)}let a=t.filter(c=>(o.get(c.name)??0)===0).map(c=>c.name),s=[];for(;a.length>0;){let c=a.shift();s.push(n.get(c));for(let l of i.get(c)??[]){let d=(o.get(l)??0)-1;o.set(l,d),d===0&&fr(a,l,n)}}if(s.length!==t.length){let c=new Set(s.map(m=>m.name)),l=t.filter(m=>!c.has(m.name)),d=yr(l[0].name,r),p=d?d.join(" -> "):l.map(m=>m.name).join(", ");return it(e,"E040",`Circular computed dependency: ${p}`,(d?n.get(d[0]):l[0]).location),[...t]}return s}function fr(t,e,n){let r=n.get(e)?.order??Number.MAX_SAFE_INTEGER,i=t.length;for(let o=0;o<t.length;o+=1){let a=n.get(t[o])?.order??Number.MAX_SAFE_INTEGER;if(r<a){i=o;break}}t.splice(i,0,e)}function yr(t,e){let n=new Set,r=[],i=new Set;function o(a){n.add(a),r.push(a),i.add(a);for(let s of e.get(a)??[])if(n.has(s)){if(i.has(s)){let c=r.indexOf(s);return[...r.slice(c),s]}}else{let c=o(s);if(c)return c}return r.pop(),i.delete(a),null}return o(t)}function gr(t){let e=new Set;function n(r){switch(r.kind){case"lit":case"sys":case"var":return;case"get":r.base===void 0?e.add(r.path.map(i=>i.name).join(".")):n(r.base);return;case"field":n(r.object);return;case"call":for(let i of r.args)n(i);return;case"obj":for(let i of r.fields)n(i.value);return;case"arr":for(let i of r.elements)n(i);return}}return n(t),Array.from(e)}function Er(t,e){let n={};for(let r of t.members)if(r.kind==="action"){e.currentAction=r.name,e.onceIntentCounters.set(r.name,0);let i=new Set;for(let p of r.params)i.add(p.name);e.actionParams.set(r.name,i);let o=r.params.map(p=>p.name),a=Bt(r.body,e),s,c;if(r.params.length>0){let p={},m={};for(let T of r.params){let b=Q(T.typeExpr,e);b&&(p[T.name]=structuredClone(b),m[T.name]={type:q(T.typeExpr),optional:!1})}s={type:"object",required:!0,fields:p},c={kind:"object",fields:m}}let l;r.available&&(l=$(r.available,e));let d;r.dispatchable&&(d=$(r.dispatchable,e,{preferActionParams:!0})),n[r.name]={flow:a,input:s,inputType:c,params:o,available:l,dispatchable:d},e.currentAction=null}return n}function Bt(t,e){return t.length===0?{kind:"seq",steps:[]}:t.length===1?Me(t[0],e):{kind:"seq",steps:t.map(n=>Me(n,e))}}function Me(t,e){switch(t.kind){case"when":return kr(t,e);case"once":return Nr(t,e);case"onceIntent":return Tr(t,e);case"patch":return br(t,e);case"effect":return Sr(t,e);case"fail":return vr(t,e);case"stop":return wr(t,e);case"include":return{kind:"seq",steps:[]}}}function kr(t,e){let n=$(t.condition,e),r=Bt(t.body,e);return{kind:"if",cond:n,then:r}}function Nr(t,e){let n=ot(t.marker,e),r=se("meta","intentId"),i=De("neq",[_(...Ut(n)),r]);if(t.condition){let s=$(t.condition,e);i=De("and",[i,s])}let o={kind:"patch",op:"set",path:at(n),value:r},a=t.body.map(s=>Me(s,e));return{kind:"if",cond:i,then:{kind:"seq",steps:[o,...a]}}}function Tr(t,e){let n=e.currentAction??"unknown",r=e.onceIntentCounters.get(n)??0;e.onceIntentCounters.set(n,r+1);let i=ar(`${n}:${r}:intent`),o=`$mel.guards.intent.${i}`,a=se("meta","intentId"),s=De("neq",[_(...Ut(o)),a]);if(t.condition){let d=$(t.condition,e);s=De("and",[s,d])}let c={kind:"patch",op:"merge",path:at("$mel.guards.intent"),value:Ae({[i]:a})},l=t.body.map(d=>Me(d,e));return{kind:"if",cond:s,then:{kind:"seq",steps:[c,...l]}}}function br(t,e){let n=ot(t.path,e),r={kind:"patch",op:t.op,path:at(n)};if(t.value){let i=$(t.value,e);if(r.value=i,t.op==="set"){let o=t.path.segments[0];if(o.kind==="propertySegment"){let a=e.stateFieldTypes.get(o.name);if(a){let s=a,c=t.path.segments;for(let l=1;l<c.length;l++){let d=c[l],p=s?de(s,e):null;if(!p){s=null;break}if(p.kind==="union"){let m=p.types.filter(T=>{let b=de(T,e);return!(b?.kind==="primitive"&&b.type==="null")&&!(b?.kind==="literal"&&b.value===null)});if(m.length!==1){s=null;break}s=m[0],l-=1;continue}if(d.kind==="propertySegment"&&p.kind==="object"&&p.fields[d.name])s=p.fields[d.name].type;else if(d.kind==="propertySegment"&&p.kind==="record")s=p.value;else if(d.kind==="indexSegment"&&p.kind==="array")s=p.element;else{s=null;break}}if(s){let l=xr(t.value,e);if(l!==void 0){let d=t.path.segments.map(p=>p.kind==="propertySegment"?p.name:"[*]").join(".");le(l,s,d,t.location,e)}}}}}}return r}function Sr(t,e){let n={};for(let r of t.args)r.isPath?n[r.name]={kind:"lit",value:ot(r.value,e)}:n[r.name]=$(r.value,e);return{kind:"effect",type:t.effectType,params:n}}function xr(t,e){return Ie(t,e)}function vr(t,e){let n={kind:"fail",code:t.code};return t.message&&(n.message=$(t.message,e)),n}function wr(t,e){return{kind:"halt",reason:t.reason}}function Ar(t){return t.replaceAll("\\","\\\\").replaceAll(".","\\.")}function Pe(...t){return t.map(Ar).join(".")}function ot(t,e){let n=[];for(let i of t.segments)if(i.kind==="propertySegment")n.push(i.name);else{let o=$(i.index,e);o.kind==="lit"?n.push(String(o.value)):n.push("*")}let r=n[0];return e.stateFields.has(r)?Pe(...n):e.computedFields.has(r)?Pe(...n):e.currentAction&&e.actionParams.get(e.currentAction)?.has(r)?`input.${Pe(...n)}`:Pe(...n)}function at(t){return or(t)}function De(t,e){return{kind:"call",fn:t,args:e}}function Ut(t){return t.split(/(?<!\\)\./g).map(e=>e.replaceAll("\\.",".").replaceAll("\\\\","\\"))}function $(t,e,n={}){return v(t,{resolveIdentifier:r=>Cr(r,e,n),resolveSystemIdent:r=>Pr(r,e)})}function Cr(t,e,n={}){return n.preferActionParams&&e.currentAction&&e.actionParams.get(e.currentAction)?.has(t)?_("input",t):e.stateFields.has(t)||e.computedFields.has(t)?_(t):e.currentAction&&e.actionParams.get(e.currentAction)?.has(t)?_("input",t):(e.diagnostics.push({severity:"error",code:"E_UNKNOWN_IDENT",message:`Unknown identifier '${t}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),_(t))}function Pr(t,e){let[n,...r]=t;switch(n){case"system":case"meta":case"input":return se(n,...r);default:return e.diagnostics.push({severity:"error",code:"E_INVALID_SYSTEM",message:`Invalid system identifier namespace '$${n}'`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),{kind:"lit",value:null}}}function Ir(t){return ir(t)}var st=16;function y(t){return structuredClone(t)}function x(t,e,n,r,i){let o=`${n}:${i.start.offset}:${i.end.offset}:${r}`;e.has(o)||(e.add(o),t.push(ke(n,r,i)))}function Mr(t){let e=new Map,n=new Set,r=new Map,i=new Set,o=new Map;for(let a of t.types)r.set(a.name,a);for(let a of t.members)switch(a.kind){case"state":for(let s of a.fields)e.set(s.name,s.typeExpr);break;case"computed":n.add(a.name);break;case"action":i.add(a.name);break;case"flow":o.has(a.name)||o.set(a.name,a);break}return{stateTypes:e,computedNames:n,typeDefs:r,actionNames:i,flows:o}}function Dr(t){let e=new Map;for(let n of t.params)e.set(n.name,n.typeExpr);return e}function Rr(t){let e=new Map;for(let n of t.params)e.set(n.name,n.typeExpr);return e}function Lr(t,e,n,r){let i=new Map;for(let o of e.flows.values()){i.set(o.name,[]),e.actionNames.has(o.name)&&x(n,r,"E022",`Flow '${o.name}' conflicts with action '${o.name}'.`,o.location);for(let s of o.params)(e.stateTypes.has(s.name)||e.computedNames.has(s.name)||e.typeDefs.has(s.name))&&x(n,r,"E021",`Flow parameter '${s.name}' conflicts with a top-level identifier.`,s.location);let a=Dr(o);for(let s of o.body)Or(s,o.name,a,e,n,r,i.get(o.name))}for(let o of t.members)if(o.kind==="action"){let a=Rr(o);for(let s of o.body)Fr(s,a,e,n,r)}return i}function Fr(t,e,n,r,i){switch(t.kind){case"include":Le(t,e,n,r,i);break;case"when":for(let o of t.body)te(o,e,n,r,i);break;case"once":for(let o of t.body)te(o,e,n,r,i);break;case"onceIntent":for(let o of t.body)te(o,e,n,r,i);break;case"fail":case"stop":break}}function te(t,e,n,r,i){switch(t.kind){case"include":x(r,i,"E016","include is only allowed at action or flow body top-level.",t.location),Le(t,e,n,r,i);break;case"when":for(let o of t.body)te(o,e,n,r,i);break;case"once":for(let o of t.body)te(o,e,n,r,i);break;case"onceIntent":for(let o of t.body)te(o,e,n,r,i);break;case"patch":case"effect":case"fail":case"stop":break}}function Or(t,e,n,r,i,o,a){switch(t.kind){case"include":Le(t,n,r,i,o)&&a.push({target:t.flowName,location:t.location});break;case"when":for(let s of t.body)Re(s,e,n,r,i,o);break;case"once":x(i,o,"E017","once() is not allowed in flow bodies.",t.location);break;case"onceIntent":x(i,o,"E018","onceIntent is not allowed in flow bodies.",t.location);break;case"patch":x(i,o,"E019","patch is not allowed in flow bodies.",t.location);break;case"effect":x(i,o,"E020","effect is not allowed in flow bodies.",t.location);break}}function Re(t,e,n,r,i,o){switch(t.kind){case"include":x(i,o,"E016","include is only allowed at action or flow body top-level.",t.location),Le(t,n,r,i,o);break;case"when":for(let a of t.body)Re(a,e,n,r,i,o);break;case"once":x(i,o,"E017","once() is not allowed in flow bodies.",t.location);for(let a of t.body)Re(a,e,n,r,i,o);break;case"onceIntent":x(i,o,"E018","onceIntent is not allowed in flow bodies.",t.location);for(let a of t.body)Re(a,e,n,r,i,o);break;case"patch":x(i,o,"E019","patch is not allowed in flow bodies.",t.location);break;case"effect":x(i,o,"E020","effect is not allowed in flow bodies.",t.location);break;case"fail":case"stop":break}}function Le(t,e,n,r,i){let o=n.flows.get(t.flowName);if(!o)return x(r,i,"E015",`'${t.flowName}' is not a declared flow.`,t.location),!1;if(t.args.length!==o.params.length)return x(r,i,"E023",`include '${t.flowName}' expected ${o.params.length} argument(s), got ${t.args.length}.`,t.location),!0;for(let a=0;a<t.args.length;a+=1){let s=t.args[a],c=o.params[a],l=pe(s,e,n);if(!l)continue;ee(l,c.typeExpr,n)===!1&&x(r,i,"E024",`include '${t.flowName}' argument ${a+1} is not assignable to parameter '${c.name}'.`,s.location)}return!0}function jr(t,e,n,r){function i(o,a,s){s.add(o);for(let c of t.get(o)??[]){if(a+1>st){x(n,r,"E014",`Include expansion depth exceeds limit (${st}).`,c.location);continue}if(s.has(c.target)){x(n,r,"E013","Circular include detected.",c.location);continue}i(c.target,a+1,new Set(s))}}for(let o of e.flows.keys())i(o,1,new Set)}function w(t,e){switch(t.kind){case"identifier":return e.has(t.name)?y(e.get(t.name)):y(t);case"systemIdent":case"literal":case"iterationVar":return y(t);case"functionCall":return{...y(t),args:t.args.map(n=>w(n,e))};case"binary":return{...y(t),left:w(t.left,e),right:w(t.right,e)};case"unary":return{...y(t),operand:w(t.operand,e)};case"ternary":return{...y(t),condition:w(t.condition,e),consequent:w(t.consequent,e),alternate:w(t.alternate,e)};case"propertyAccess":return{...y(t),object:w(t.object,e)};case"indexAccess":return{...y(t),object:w(t.object,e),index:w(t.index,e)};case"objectLiteral":return{...y(t),properties:t.properties.map(n=>({...y(n),value:w(n.value,e)}))};case"arrayLiteral":return{...y(t),elements:t.elements.map(n=>w(n,e))}}}function _r(t,e){switch(t.kind){case"when":return[Gt(t,e)];case"fail":return[{...y(t),message:t.message?w(t.message,e):void 0}];case"stop":return[y(t)];case"patch":case"effect":case"once":case"onceIntent":case"include":return[]}}function Gt(t,e){return{...y(t),condition:w(t.condition,e),body:t.body.flatMap(n=>_r(n,e))}}function $r(t,e,n){let r=new Map;for(let i=0;i<t.params.length;i+=1)r.set(t.params[i].name,w(e.args[i],n));return r}function Br(t,e,n,r,i){switch(t.kind){case"when":return[Gt(t,n)];case"include":return qt(t,e,n,r,i);case"once":case"onceIntent":case"patch":case"effect":return[]}}function qt(t,e,n,r,i){let o=e.flows.get(t.flowName);if(!o||t.args.length!==o.params.length||r>st||i.includes(t.flowName))return[];let a=$r(o,t,n),s=[...i,t.flowName];return o.body.flatMap(c=>Br(c,e,a,r+1,s))}function ne(t){switch(t.kind){case"when":return[{...y(t),body:t.body.flatMap(e=>ne(e))}];case"once":return[{...y(t),body:t.body.flatMap(e=>ne(e))}];case"onceIntent":return[{...y(t),body:t.body.flatMap(e=>ne(e))}];case"include":return[];case"patch":case"effect":case"fail":case"stop":return[y(t)]}}function Ur(t,e,n){switch(t.kind){case"include":return qt(t,e,new Map,n,[]);case"when":return[{...y(t),body:t.body.flatMap(r=>ne(r))}];case"once":return[{...y(t),body:t.body.flatMap(r=>ne(r))}];case"onceIntent":return[{...y(t),body:t.body.flatMap(r=>ne(r))}];case"fail":case"stop":return[y(t)]}}function Gr(t,e){let n=[];for(let r of t.domain.members)switch(r.kind){case"state":case"computed":n.push(y(r));break;case"action":n.push({...y(r),body:r.body.flatMap(i=>Ur(i,e,1))});break;case"flow":break}return{...y(t),domain:{...y(t.domain),types:t.domain.types.map(r=>y(r)),members:n}}}function pe(t,e,n){switch(t.kind){case"literal":return{kind:"literalType",value:t.value,location:t.location};case"identifier":return e.get(t.name)??n.stateTypes.get(t.name)??null;case"propertyAccess":{let r=pe(t.object,e,n);return zt(r,t.property,n)}case"indexAccess":{let r=pe(t.object,e,n);return Vt(r,n)}case"objectLiteral":return{kind:"objectType",fields:t.properties.map(r=>{let i=pe(r.value,e,n);return i?{kind:"typeField",name:r.key,typeExpr:i,optional:!1,location:r.location}:null}).filter(r=>r!==null),location:t.location};case"arrayLiteral":{if(t.elements.length===0)return null;let r=pe(t.elements[0],e,n);return r?{kind:"arrayType",elementType:r,location:t.location}:null}case"systemIdent":case"functionCall":case"binary":case"unary":case"ternary":case"iterationVar":return null}}function ue(t,e,n=new Set){return t?t.kind==="simpleType"&&e.typeDefs.has(t.name)?n.has(t.name)?null:(n.add(t.name),ue(e.typeDefs.get(t.name).typeExpr,e,n)):t:null}function zt(t,e,n){let r=ue(t,n);if(!r)return null;if(r.kind==="objectType")return r.fields.find(o=>o.name===e)?.typeExpr??null;if(r.kind==="unionType")for(let i of r.types){if(i.kind==="simpleType"&&i.name==="null")continue;let o=zt(i,e,n);if(o)return o}return null}function Vt(t,e){let n=ue(t,e);if(!n)return null;if(n.kind==="arrayType")return n.elementType;if(n.kind==="recordType")return n.valueType;if(n.kind==="unionType")for(let r of n.types){if(r.kind==="simpleType"&&r.name==="null")continue;let i=Vt(r,e);if(i)return i}return null}function ee(t,e,n){let r=ue(t,n),i=ue(e,n);if(!r||!i)return null;if(i.kind==="unionType"){let o=i.types.map(a=>ee(r,a,n));return o.includes(!0)?!0:o.every(a=>a===!1)?!1:null}if(r.kind==="unionType"){let o=r.types.map(a=>ee(a,i,n));return o.every(a=>a===!0)?!0:o.some(a=>a===!1)?!1:null}if(i.kind==="simpleType"){if(r.kind==="simpleType")return r.name===i.name;if(r.kind==="literalType")return i.name==="null"?r.value===null:typeof r.value===i.name}if(i.kind==="literalType")return r.kind!=="literalType"?!1:r.value===i.value;if(i.kind==="arrayType")return r.kind!=="arrayType"?!1:ee(r.elementType,i.elementType,n);if(i.kind==="objectType"){if(r.kind!=="objectType")return!1;for(let o of i.fields){let a=r.fields.find(c=>c.name===o.name);if(!a){if(o.optional)continue;return!1}let s=ee(a.typeExpr,o.typeExpr,n);if(s!==!0)return s}return!0}return i.kind==="recordType"?r.kind!=="recordType"?null:ee(r.valueType,i.valueType,n):null}function Ht(t){let e=Mr(t.domain),n=[],r=new Set,i=Lr(t.domain,e,n,r);return jr(i,e,n,r),{program:Gr(t,e),diagnostics:n}}import{sha256Sync as Fe}from"@manifesto-ai/core";function Kt(t){return t.kind==="literal"&&t.literalType==="boolean"&&t.value===!0}function re(t){return v(t)}var Oe=class{constructor(e){this.deps=e;this.exprValidator=new lt(e.mapLocation)}conditionComposer=new ct;exprValidator;collect(e,n,r,i){return this.collectPatchStatements(e,n,r,i)}collectPatchStatements(e,n,r,i){let o=[];for(let a of e){if(a.kind==="patch"){this.exprValidator.validatePath(a.path,n),a.value&&this.exprValidator.validateExpr(a.value,n),o.push({patch:a,condition:i});continue}if(a.kind==="when"){this.exprValidator.validateExpr(a.condition,n);let s=i;try{s=this.conditionComposer.and(i,this.deps.toMelExpr(a.condition))}catch(m){n.push({severity:"error",code:"E_LOWER",message:m.message,location:this.deps.mapLocation(a.condition.location)})}let c=Fe(`${r.actionName}:${r.whenCounter}:when`);r.whenCounter+=1;let l={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:a.location},{kind:"propertySegment",name:"__whenGuards",location:a.location},{kind:"propertySegment",name:c,location:a.location}],location:a.location},d=me(l),p=this.collectPatchStatements(a.body,n,r,void 0).map(m=>({patch:m.patch,condition:this.conditionComposer.and(d,m.condition)}));o.push({patch:{kind:"patch",op:"set",path:l,value:{kind:"literal",literalType:"boolean",value:!0,location:a.location},location:a.location},condition:s},...p,{patch:{kind:"patch",op:"unset",path:l,location:a.location}});continue}if(a.kind==="once"){this.exprValidator.validatePath(a.marker,n);let s=i,c=me(a.marker),l=a.marker,d=a.location,p={kind:"call",fn:"neq",args:[c,{kind:"sys",path:["meta","intentId"]}]};if(a.condition){this.exprValidator.validateExpr(a.condition,n);try{p=this.conditionComposer.and(p,this.deps.toMelExpr(a.condition))??p}catch(V){n.push({severity:"error",code:"E_LOWER",message:V.message,location:this.deps.mapLocation(a.condition.location)})}}s=this.conditionComposer.and(i,p);let m=Fe(`${r.actionName}:${r.onceCounter}:once`);r.onceCounter+=1;let T={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:d},{kind:"propertySegment",name:"__onceScopeGuards",location:d},{kind:"propertySegment",name:m,location:d}],location:d},b=me(T),I=this.collectPatchStatements(a.body,n,r,b);o.push({patch:{kind:"patch",op:"set",path:T,value:{kind:"literal",literalType:"boolean",value:!0,location:d},location:d},condition:s},{patch:{kind:"patch",op:"set",path:l,value:{kind:"systemIdent",path:["meta","intentId"],location:d},location:d},condition:b},...I,{patch:{kind:"patch",op:"unset",path:T,location:d},condition:s});continue}if(a.kind==="onceIntent"){let s=Fe(`${r.actionName}:${r.onceCounter}:onceIntent`);r.onceCounter+=1;let c={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:a.location},{kind:"propertySegment",name:"__onceScopeGuards",location:a.location},{kind:"propertySegment",name:s,location:a.location}],location:a.location},l=me(c),d=Fe(`${r.actionName}:${r.onceIntentCounter}:intent`);r.onceIntentCounter+=1;let p=a.location,T={kind:"call",fn:"neq",args:[me({kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:p},{kind:"propertySegment",name:"guards",location:p},{kind:"propertySegment",name:"intent",location:p},{kind:"propertySegment",name:d,location:p}],location:p}),{kind:"sys",path:["meta","intentId"]}]};if(a.condition){this.exprValidator.validateExpr(a.condition,n);try{T=this.conditionComposer.and(T,this.deps.toMelExpr(a.condition))??T}catch(B){n.push({severity:"error",code:"E_LOWER",message:B.message,location:this.deps.mapLocation(a.condition.location)})}}let b=this.conditionComposer.and(i,T),I={kind:"path",segments:[{kind:"propertySegment",name:"$mel",location:p},{kind:"propertySegment",name:"guards",location:p},{kind:"propertySegment",name:"intent",location:p}],location:p},V=this.collectPatchStatements(a.body,n,r,l);o.push({patch:{kind:"patch",op:"set",path:c,value:{kind:"literal",literalType:"boolean",value:!0,location:p},location:p},condition:b},{patch:{kind:"patch",op:"merge",path:I,value:{kind:"objectLiteral",properties:[{kind:"objectProperty",key:d,value:{kind:"systemIdent",path:["meta","intentId"],location:p},location:p}],location:p},location:p},condition:l},...V,{patch:{kind:"patch",op:"unset",path:c,location:p},condition:b});continue}n.push({severity:"error",code:"E_UNSUPPORTED_STMT",message:`Unsupported statement '${a.kind}' in patch text. Only patch statements are allowed.`,location:this.deps.mapLocation(a.location)})}return o}};function Wt(t){return{op:t.patch.op,path:qr(t.patch.path),...t.condition?{condition:t.condition}:void 0,...t.patch.value?{value:re(t.patch.value)}:void 0}}function me(t){let e=t.segments,n;for(let r of e){if(r.kind==="propertySegment"){let i={kind:"prop",name:r.name};n?n={kind:"call",fn:"field",args:[n,{kind:"lit",value:r.name}]}:n={kind:"get",path:[i]};continue}if(!n)throw new Error("Path cannot start with index access in compileMelPatch guard.");n={kind:"call",fn:"at",args:[n,re(r.index)]}}if(!n)throw new Error("Empty patch guard path.");return n}function qr(t){return t.segments.map(e=>e.kind==="propertySegment"?{kind:"prop",name:e.name}:{kind:"expr",expr:re(e.index)})}var ct=class{and(e,n){return e?n?{kind:"call",fn:"and",args:[e,n]}:e:n}},lt=class{constructor(e){this.mapLocation=e}symbols={stateTypes:new Map,computedDecls:new Map,typeDefs:new Map,computedTypeCache:new Map,computedTypeInFlight:new Set};validatePath(e,n){for(let r of e.segments)r.kind==="indexSegment"&&this.validateExpr(r.index,n)}validateExpr(e,n){switch(e.kind){case"functionCall":(e.name==="eq"||e.name==="neq")&&e.args.length>=2&&this.validatePrimitiveEquality(e.args[0],e.args[1],e.location,n);for(let r of e.args)this.validateExpr(r,n);return;case"binary":(e.operator==="=="||e.operator==="!=")&&this.validatePrimitiveEquality(e.left,e.right,e.location,n),this.validateExpr(e.left,n),this.validateExpr(e.right,n);return;case"unary":this.validateExpr(e.operand,n);return;case"ternary":this.validateExpr(e.condition,n),this.validateExpr(e.consequent,n),this.validateExpr(e.alternate,n);return;case"propertyAccess":this.validateExpr(e.object,n);return;case"indexAccess":this.validateExpr(e.object,n),this.validateExpr(e.index,n);return;case"objectLiteral":for(let r of e.properties)this.validateExpr(r.value,n);return;case"arrayLiteral":for(let r of e.elements)this.validateExpr(r,n);return;case"literal":case"identifier":case"systemIdent":case"iterationVar":return}}validatePrimitiveEquality(e,n,r,i){let o=F(e,new Map,this.symbols),a=F(n,new Map,this.symbols);o!=="nonprimitive"&&a!=="nonprimitive"||i.push({severity:"error",code:"E_TYPE_MISMATCH",message:"eq/neq operands must be primitive types (null, boolean, number, string)",location:this.mapLocation(r)})}};function Yt(t){let e=[],n=0;for(let r of t)e.push(n),n+=r.length+1;return e}function Xt(t,e){return n=>Jt(n,t,e)}function dt(t,e,n){return t.map(r=>zr(r,e,n))}function zr(t,e,n){return{...t,location:Jt(t.location,e,n)}}function Jt(t,e,n){return{...t,start:Qt(t.start,e,n),end:Qt(t.end,e,n)}}function Qt(t,e,n){let r=t.line-3,i=e.length,o=Math.min(Math.max(r,1),i),a=n[o-1]??0,s=e[o-1]??"",c=Math.max(s.length+1,1),l=Math.min(Math.max(t.column-6,1),c);return{line:o,column:l,offset:Math.max(a+l-1,0)}}var he="__compileMelPatch",Hr="__patchDomain",Kr=" ";function Zt(t,e){let n=[],r=[],i=[],o=t.split(`
9
- `),a=Yt(o),s=Xt(o,a),c=Wr(t,he),l=performance.now(),d;try{let S=ye(c);d=S.tokens;let M=dt(S.diagnostics.filter(fe=>fe.severity==="error"),o,a);if(M.length>0)return i.push(...M),n.push({phase:"lex",durationMs:performance.now()-l,details:{tokenCount:d.length}}),{ops:[],trace:n,warnings:r,errors:i}}catch(S){return i.push({severity:"error",code:"E_LEX",message:S.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"lex",durationMs:performance.now()-l}),{ops:[],trace:n,warnings:r,errors:i}}n.push({phase:"lex",durationMs:performance.now()-l,details:{tokenCount:d.length}});let p=performance.now(),m;try{let S=ge(d),M=dt(S.diagnostics,o,a),fe=M.filter($e=>$e.severity==="error"),_e=M.filter($e=>$e.severity!=="error");if(fe.length>0)return i.push(...fe),r.push(..._e),n.push({phase:"parse",durationMs:performance.now()-p}),{ops:[],trace:n,warnings:r,errors:i};if(!S.program)return i.push({severity:"error",code:"E_PARSE",message:"Failed to parse MEL patch program",location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),r.push(..._e),n.push({phase:"parse",durationMs:performance.now()-p}),{ops:[],trace:n,warnings:r,errors:i};m=S.program,r.push(..._e)}catch(S){return i.push({severity:"error",code:"E_PARSE",message:S.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"parse",durationMs:performance.now()-p}),{ops:[],trace:n,warnings:r,errors:i}}n.push({phase:"parse",durationMs:performance.now()-p});let T=performance.now(),b={actionName:e.actionName,onceCounter:0,onceIntentCounter:0,whenCounter:0},I=m.domain.members.find(S=>S.kind==="action"&&S.name===he);if(!I)return i.push({severity:"error",code:"E_ANALYZE",message:`Synthetic patch action '${he}' not found during parsing`,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"analyze",durationMs:performance.now()-T}),{ops:[],trace:n,warnings:r,errors:i};let V=o.length+3+2;if(I.location.end.line!==V)return i.push({severity:"error",code:"E_PATCH_WRAPPER",message:`Malformed synthetic patch wrapper for action '${he}'.`,location:s(I.location)}),n.push({phase:"analyze",durationMs:performance.now()-T}),{ops:[],trace:n,warnings:r,errors:i};let[B]=I.body;if(!B||B.kind!=="when"||!Kt(B.condition)||I.body.length!==1)return i.push({severity:"error",code:"E_PATCH_WRAPPER",message:`Malformed synthetic patch wrapper for action '${he}'.`,location:s(I.location)}),n.push({phase:"analyze",durationMs:performance.now()-T}),{ops:[],trace:n,warnings:r,errors:i};let f=new Oe({mapLocation:s,toMelExpr:re}).collect(B.body,i,b,void 0);if(i.length===0&&t.trim()!==""&&f.length===0&&i.push({severity:"error",code:"E_PATCH_WRAPPER",message:"Patch wrapper parsing produced no patch statements. The patch source may be malformed.",location:s(B.location)}),n.push({phase:"analyze",durationMs:performance.now()-T,details:{count:f.length}}),i.length>0)return{ops:[],trace:n,warnings:r,errors:i};let R=performance.now(),ie={mode:"action",allowSysPaths:e.allowSysPaths??{prefixes:["meta","input"]},fnTableVersion:e.fnTableVersion??"1.0",actionName:e.actionName},H=[];for(let S of f)try{let M=Wt(S);H.push(we(M,ie))}catch(M){M instanceof L?i.push({severity:"error",code:M.code,message:M.message,location:s(S.patch.location)}):M instanceof Error?i.push({severity:"error",code:"E_LOWER",message:M.message,location:s(S.patch.location)}):i.push({severity:"error",code:"E_LOWER",message:"Unknown lowering failure",location:s(S.patch.location)})}return n.push({phase:"lower",durationMs:performance.now()-R,details:{count:H.length}}),i.length>0?{ops:[],trace:n,warnings:r,errors:i}:{ops:H,trace:n,warnings:r,errors:i}}function Wr(t,e){let n=t.split(`
10
- `).map(r=>`${Kr}${r}`).join(`
11
- `);return[`domain ${Hr} {`,` action ${e}() {`," when true {",n," }"," }","}"].join(`
12
- `)}function Qr(t,e){let n=[],r=[],i=[],o=performance.now(),a;try{let f=ye(t);a=f.tokens;let R=f.diagnostics.filter(H=>H.severity==="error");if(R.length>0)return i.push(...R),n.push({phase:"lex",durationMs:performance.now()-o,details:{tokenCount:a.length}}),{schema:null,trace:n,warnings:r,errors:i};let ie=f.diagnostics.filter(H=>H.severity==="warning");r.push(...ie)}catch(f){let R=f;return i.push({severity:"error",code:"E_LEX",message:R.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"lex",durationMs:performance.now()-o}),{schema:null,trace:n,warnings:r,errors:i}}n.push({phase:"lex",durationMs:performance.now()-o,details:{tokenCount:a.length}});let s=performance.now(),c;try{let f=ge(a),R=f.diagnostics.filter(ie=>ie.severity==="error");if(R.length>0)return i.push(...R),n.push({phase:"parse",durationMs:performance.now()-s}),{schema:null,trace:n,warnings:r,errors:en(i)};c=f.program}catch(f){let R=f;return i.push({severity:"error",code:"E_PARSE",message:R.message,location:{start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}}}),n.push({phase:"parse",durationMs:performance.now()-s}),{schema:null,trace:n,warnings:r,errors:i}}n.push({phase:"parse",durationMs:performance.now()-s});let l=performance.now(),d=Ht(c),p=d.diagnostics.filter(f=>f.severity==="error"),m=d.diagnostics.filter(f=>f.severity==="warning"),T=kt(d.program),b=Mt(d.program),I=[...p,...T.diagnostics.filter(f=>f.severity==="error"),...b.diagnostics.filter(f=>f.severity==="error")],V=[...m,...T.diagnostics.filter(f=>f.severity==="warning"),...b.diagnostics.filter(f=>f.severity==="warning")];if(r.push(...V),n.push({phase:"analyze",durationMs:performance.now()-l}),I.length>0)return i.push(...I),{schema:null,trace:n,warnings:r,errors:i};let B=performance.now(),je=$t(d.program);n.push({phase:"generate",durationMs:performance.now()-B});for(let f of je.diagnostics)f.severity==="warning"?r.push(f):i.push(f);return{schema:je.schema,trace:n,warnings:r,errors:en(i)}}var pt=10;function en(t){if(t.length<=pt)return t;let e=t.slice(0,pt);return e.push({severity:"error",code:"E_TOO_MANY",message:`... and ${t.length-pt} more error(s). Fix the errors above first.`,location:{start:{line:0,column:0,offset:0},end:{line:0,column:0,offset:0}}}),e}function Yr(t,e){return Zt(t,e)}export{Be as a,tn as b,Xr as c,ut as d,mt as e,Ue as f,ht as g,ft as h,Zr as i,h as j,Ge as k,ye as l,ci as m,li as n,yt as o,qe as p,gt as q,pi as r,ui as s,Et as t,ze as u,ge as v,Ee as w,Ve as x,kt as y,ke as z,Nt as A,bi as B,nn as C,Si as D,xi as E,Qe as F,Mt as G,Ye as H,Xe as I,Je as J,Ze as K,An as L,L as M,Se as N,k as O,xe as P,et as Q,Cn as R,tt as S,Pn as T,u as U,zn as V,Kn as W,we as X,cr as Y,$t as Z,Ht as _,Qr as $,Yr as aa};