@manifesto-ai/core 2.11.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -1
- package/package.json +1 -1
- package/dist/index.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
import{z as _t}from"zod";var Ua=_t.enum(["VALIDATION_ERROR","PATH_NOT_FOUND","TYPE_MISMATCH","DIVISION_BY_ZERO","INDEX_OUT_OF_BOUNDS","UNKNOWN_ACTION","ACTION_UNAVAILABLE","INVALID_INPUT","CYCLIC_DEPENDENCY","UNKNOWN_FLOW","CYCLIC_CALL","UNKNOWN_EFFECT","INTERNAL_ERROR"]);function v(e,r,t,n,o,a){return{code:e,message:r,source:{actionId:t,nodePath:n},timestamp:o,context:a}}function Za(e){if(typeof e!="object"||e===null)return!1;let r=e;return typeof r.code=="string"&&typeof r.message=="string"&&typeof r.source=="object"&&r.source!==null&&typeof r.source.actionId=="string"&&typeof r.source.nodePath=="string"&&typeof r.timestamp=="number"}import{z as w}from"zod";function Fe(e){if(e==null)return e;if(Array.isArray(e))return e.map(Fe);if(typeof e=="object"){let r={},t=Object.keys(e).sort();for(let n of t){let o=e[n];o!==void 0&&(r[n]=Fe(o))}return r}return e}function pe(e){let r=Fe(e);return JSON.stringify(r)}function _a(e){return Ie(e)}function Ie(e){if(e===null)return"null";switch(typeof e){case"string":return JSON.stringify(e);case"number":return Number.isFinite(e)?JSON.stringify(e):"null";case"boolean":return e?"true":"false";case"undefined":return"null";case"object":return Array.isArray(e)?Ht(e):Wt(e);default:return"null"}}function Ht(e){return`[${e.map(t=>t===void 0||typeof t=="function"||typeof t=="symbol"?"null":Ie(t)).join(",")}]`}function Wt(e){let r=Object.keys(e).sort(ne),t=[];for(let n of r){let o=e[n];o===void 0||typeof o=="function"||typeof o=="symbol"||t.push(`${JSON.stringify(n)}:${Ie(o)}`)}return`{${t.join(",")}}`}function ne(e,r){let t=Array.from(e),n=Array.from(r),o=Math.min(t.length,n.length);for(let a=0;a<o;a++){let s=t[a].codePointAt(0)??0,p=n[a].codePointAt(0)??0;if(s!==p)return s-p}return t.length-n.length}function Ha(e){return JSON.parse(e)}function Wa(e,r){return pe(e)===pe(r)}function Xe(e,r){if(r==="effective")return e;let t=e.state?.fields??{},n=Object.entries(t).filter(([o])=>!o.startsWith("$"));return n.length===Object.keys(t).length?e:{...e,state:{...e.state,fields:Object.fromEntries(n)}}}async function Qe(e){let r=new TextEncoder().encode(e),t=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(t)).map(o=>o.toString(16).padStart(2,"0")).join("")}var Bt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Kt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function M(e,r){return e>>>r|e<<32-r}function Gt(e){let r=e.length*8,t=e.length+1,n=t%64<=56?56-t%64:120-t%64,o=t+n+8,a=new Uint8Array(o);a.set(e),a[e.length]=128;let s=Math.floor(r/4294967296),p=r>>>0;a[o-8]=s>>>24&255,a[o-7]=s>>>16&255,a[o-6]=s>>>8&255,a[o-5]=s&255,a[o-4]=p>>>24&255,a[o-3]=p>>>16&255,a[o-2]=p>>>8&255,a[o-1]=p&255;let u=new Uint32Array(Kt),d=new DataView(a.buffer);for(let m=0;m<a.length;m+=64){let E=new Uint32Array(64);for(let R=0;R<16;R++)E[R]=d.getUint32(m+R*4);for(let R=16;R<64;R++){let Ce=M(E[R-15],7)^M(E[R-15],18)^E[R-15]>>>3,Pe=M(E[R-2],17)^M(E[R-2],19)^E[R-2]>>>10;E[R]=E[R-16]+Ce+E[R-7]+Pe>>>0}let C=u[0],I=u[1],F=u[2],A=u[3],q=u[4],H=u[5],J=u[6],ze=u[7];for(let R=0;R<64;R++){let Ce=M(q,6)^M(q,11)^M(q,25),Pe=q&H^~q&J,Je=ze+Ce+Pe+Bt[R]+E[R]>>>0,Ut=M(C,2)^M(C,13)^M(C,22),Zt=C&I^C&F^I&F,Lt=Ut+Zt>>>0;ze=J,J=H,H=q,q=A+Je>>>0,A=F,F=I,I=C,C=Je+Lt>>>0}u[0]=u[0]+C>>>0,u[1]=u[1]+I>>>0,u[2]=u[2]+F>>>0,u[3]=u[3]+A>>>0,u[4]=u[4]+q>>>0,u[5]=u[5]+H>>>0,u[6]=u[6]+J>>>0,u[7]=u[7]+ze>>>0}let h=new Uint8Array(32),b=new DataView(h.buffer);for(let m=0;m<u.length;m++)b.setUint32(m*4,u[m]);return h}function et(e){let r=new TextEncoder().encode(e),t=Gt(r),n="";for(let o of t)n+=o.toString(16).padStart(2,"0");return n}async function Yt(e,r="semantic"){let t=pe(Xe(e,r));return Qe(t)}function De(e,r="semantic"){let t=pe(Xe(e,r));return et(t)}async function Ga(e){return Yt(e,"effective")}function Ya(e){return De(e,"effective")}async function Ja(e,r,t,n){let o=`${e}:${r}:${t}:${n}`;return`req-${(await Qe(o)).slice(0,16)}`}function tt(e,r,t,n){let o=`${e}:${r}:${t}:${n}`;return`req-${et(o).slice(0,16)}`}function rt(e=0){return`trace-${e}`}var Jt=w.enum(["expr","computed","flow","patch","effect","branch","call","halt","error"]),le=w.lazy(()=>w.object({id:w.string(),kind:Jt,sourcePath:w.string(),inputs:w.record(w.string(),w.unknown()),output:w.unknown(),children:w.array(le),timestamp:w.number()})),Xt=w.enum(["complete","effect","halt","error"]),nt=w.object({root:le,nodes:w.record(w.string(),le),intent:w.object({type:w.string(),input:w.unknown()}),baseVersion:w.number(),resultVersion:w.number(),duration:w.number(),terminatedBy:Xt});function ee(e){let r=0;return{timestamp:e,nextId:()=>rt(r++)}}function g(e,r,t,n,o,a=[]){return{id:e.nextId(),kind:r,sourcePath:t,inputs:n,output:o,children:a,timestamp:e.timestamp}}function U(e,r,t,n,o,a){return{snapshot:e,schema:r,currentAction:t,nodePath:n,intentId:o,uuidCounter:0,trace:typeof a=="object"?a:ee(a)}}function X(e,r,t,n){return{...e,$item:r,$index:t,$array:n}}function Oe(e,r){return{...e,snapshot:r}}function Ee(e,r){return{...e,nodePath:r}}function D(e){if(!e)return[];let r=[],t="",n=!1;for(let o of e){if(n){o==="."||o==="\\"?t+=o:t+=`\\${o}`,n=!1;continue}if(o==="\\"){n=!0;continue}if(o==="."){r.push(t),t="";continue}t+=o}return n&&(t+="\\"),r.push(t),r}function ot(e){return e.replaceAll("\\","\\\\").replaceAll(".","\\.")}function oi(...e){return e.filter(Boolean).map(ot).join(".")}function V(e,r){if(!r)return e;let t=D(r),n=e;for(let o of t){if(n==null)return;if(typeof n=="object")n=n[o];else return}return n}function Qt(e,r,t){if(!r)return t;let n=D(r);return at(e,n,t)}function at(e,r,t){if(r.length===0)return t;let[n,...o]=r,a=e!==null&&typeof e=="object"?e:{};if(o.length===0)return{...a,[n]:t};let s=a[n];return{...a,[n]:at(s,o,t)}}function ai(e,r){if(!r)return;let t=D(r);return it(e,t)}function it(e,r){if(r.length===0||e===null||typeof e!="object")return e;let[t,...n]=r,o=e;if(n.length===0){let{[t]:s,...p}=o;return p}let a=o[t];return{...o,[t]:it(a,n)}}function ii(e,r,t){let n=V(e,r),o=n!==null&&typeof n=="object"?{...n,...t}:t;return Qt(e,r,o)}function si(e,r){if(!r)return e!==void 0;let t=D(r),n=e;for(let o of t){if(n==null||typeof n!="object"||!(o in n))return!1;n=n[o]}return!0}function pi(e){let r=D(e);return er(...r.slice(0,-1))}function li(e){let r=D(e);return r[r.length-1]??""}function er(...e){return e.map(ot).join(".")}var tr=new Set(["__proto__","constructor","prototype"]);function ge(e){let r="";for(let t=0;t<e.length;t++){let n=e[t];if(n.kind==="prop"){r+=t===0?n.name:`.${n.name}`;continue}r+=`[${n.index}]`}return r}function st(e){let r=D(e);if(r.length===0)return[{kind:"prop",name:e}];let t=[];for(let n of r){let o=nr(n);if(o){t.push(...o);continue}t.push({kind:"prop",name:n})}return t.length>0?t:[{kind:"prop",name:e}]}function pt(e){return e.every(r=>r.kind!=="prop"||!tr.has(r.name))}function rr(e,r){let t=e;for(let n of r){if(n.kind==="prop"){if(t===null||typeof t!="object"||Array.isArray(t))return;t=t[n.name];continue}if(!Array.isArray(t))return;t=t[n.index]}return t}function ue(e,r,t){return $e(e,r,t)}function ke(e,r){return Ve(e,r)}function Se(e,r,t){let n=rr(e,r),o=qe(n)?{...n,...t}:t;return ue(e,r,o)}function $e(e,r,t){if(r.length===0)return t;let[n,...o]=r;if(n.kind==="prop"){let s=qe(e)?e:{},p=$e(s[n.name],o,t);return{...s,[n.name]:p}}let a=Array.isArray(e)?[...e]:[];return a[n.index]=$e(a[n.index],o,t),a}function Ve(e,r){if(r.length===0)return e;let[t,...n]=r;if(t.kind==="prop"){if(!qe(e))return e;if(n.length===0){let{[t.name]:a,...s}=e;return s}return{...e,[t.name]:Ve(e[t.name],n)}}if(!Array.isArray(e))return e;let o=[...e];return n.length===0?(t.index>=0&&t.index<o.length&&delete o[t.index],o):(o[t.index]=Ve(o[t.index],n),o)}function qe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function nr(e){if(!e.includes("[")||e.includes("\\[")||e.includes("\\]"))return null;let r=[],t=0,n=!1;for(;t<e.length;){let o=e.indexOf("[",t);if(o===-1){let u=e.slice(t);if(u.length===0)break;if(n)return null;r.push({kind:"prop",name:u});break}let a=e.slice(t,o);if(a.length>0){if(n)return null;r.push({kind:"prop",name:a})}let s=e.indexOf("]",o+1);if(s===-1)return null;let p=e.slice(o+1,s);if(!/^[0-9]+$/.test(p))return null;r.push({kind:"index",index:Number(p)}),n=!0,t=s+1}return r.length>0?r:null}import{z as oe}from"zod";var W=oe.string().min(1),mi=(e,r)=>oe.discriminatedUnion("ok",[oe.object({ok:oe.literal(!0),value:e}),oe.object({ok:oe.literal(!1),error:r})]),l=e=>({ok:!0,value:e}),te=e=>({ok:!1,error:e}),ae=e=>e.ok,Z=e=>!e.ok;function f(e,r){switch(e.kind){case"lit":return l(e.value);case"get":return ar(e.path,r);case"eq":return B(e.left,e.right,r,(t,n)=>t===n);case"neq":return B(e.left,e.right,r,(t,n)=>t!==n);case"gt":return B(e.left,e.right,r,(t,n)=>y(t)>y(n));case"gte":return B(e.left,e.right,r,(t,n)=>y(t)>=y(n));case"lt":return B(e.left,e.right,r,(t,n)=>y(t)<y(n));case"lte":return B(e.left,e.right,r,(t,n)=>y(t)<=y(n));case"and":return ir(e.args,r);case"or":return sr(e.args,r);case"not":return pr(e.arg,r);case"if":return lr(e,r);case"add":return B(e.left,e.right,r,(t,n)=>y(t)+y(n));case"sub":return B(e.left,e.right,r,(t,n)=>y(t)-y(n));case"mul":return B(e.left,e.right,r,(t,n)=>y(t)*y(n));case"div":return ur(e.left,e.right,r);case"mod":return cr(e.left,e.right,r);case"min":return fr(e.args,r);case"max":return dr(e.args,r);case"abs":return mr(e.arg,r);case"neg":return yr(e.arg,r);case"floor":return Mr(e.arg,r);case"ceil":return Ur(e.arg,r);case"round":return Zr(e.arg,r);case"sqrt":return Lr(e.arg,r);case"pow":return _r(e.base,e.exponent,r);case"sumArray":return Hr(e.array,r);case"minArray":return Wr(e.array,r);case"maxArray":return Br(e.array,r);case"concat":return xr(e.args,r);case"substring":return hr(e,r);case"trim":return Er(e.str,r);case"toLowerCase":return Kr(e.str,r);case"toUpperCase":return Gr(e.str,r);case"strLen":return Yr(e.str,r);case"startsWith":return Jr(e.str,e.prefix,r);case"endsWith":return Xr(e.str,e.suffix,r);case"strIncludes":return Qr(e.str,e.search,r);case"indexOf":return en(e.str,e.search,r);case"replace":return tn(e.str,e.search,e.replacement,r);case"split":return rn(e.str,e.delimiter,r);case"len":return gr(e.arg,r);case"at":return kr(e.array,e.index,r);case"first":return Sr(e.array,r);case"last":return br(e.array,r);case"slice":return vr(e,r);case"includes":return Nr(e.array,e.item,r);case"filter":return Rr(e.array,e.predicate,r);case"map":return wr(e.array,e.mapper,r);case"find":return Tr(e.array,e.predicate,r);case"every":return jr(e.array,e.predicate,r);case"some":return Ar(e.array,e.predicate,r);case"append":return zr(e.array,e.items,r);case"reverse":return nn(e.array,r);case"unique":return on(e.array,r);case"flat":return an(e.array,r);case"object":return Cr(e.fields,r);case"field":return Pr(e.object,e.property,r);case"keys":return Fr(e.obj,r);case"values":return Ir(e.obj,r);case"entries":return Dr(e.obj,r);case"merge":return Or(e.objects,r);case"hasKey":return sn(e.obj,e.key,r);case"pick":return pn(e.obj,e.keys,r);case"omit":return ln(e.obj,e.keys,r);case"fromEntries":return un(e.entries,r);case"typeof":return $r(e.arg,r);case"isNull":return Vr(e.arg,r);case"coalesce":return qr(e.args,r);case"toString":return cn(e.arg,r);case"toNumber":return fn(e.arg,r);case"toBoolean":return dn(e.arg,r);default:return te(v("INTERNAL_ERROR",`Unknown expression kind: ${e.kind}`,r.currentAction??"",r.nodePath,r.trace.timestamp))}}function y(e){return typeof e=="number"?e:typeof e=="string"?parseFloat(e)||0:typeof e=="boolean"&&e?1:0}function K(e){return e==null?!1:typeof e=="boolean"?e:typeof e=="number"?e!==0:typeof e=="string"?e.length>0:!0}function T(e){return e==null?"":typeof e=="string"?e:String(e)}function or(e,r){let t=`${e}-${r}`,n=0;for(let d=0;d<t.length;d++){let h=t.charCodeAt(d);n=(n<<5)-n+h,n=n&n}let o=Math.abs(n).toString(16).padStart(8,"0"),a=Math.abs(n*31).toString(16).padStart(4,"0"),s=Math.abs(n*37).toString(16).padStart(4,"0"),p=Math.abs(n*41).toString(16).padStart(4,"0"),u=Math.abs(n*43).toString(16).padStart(12,"0");return`${o.slice(0,8)}-${a.slice(0,4)}-4${s.slice(1,4)}-${p.slice(0,4)}-${u.slice(0,12)}`}function ar(e,r){if(e.startsWith("$item")){if(r.$item===void 0)return l(void 0);if(e==="$item")return l(r.$item);let t=e.slice(6);return l(V(r.$item,t))}if(e==="$index")return l(r.$index);if(e==="$array")return l(r.$array);if(e.startsWith("$system.")){let t=e.slice(8);if(t==="uuid"){let n=r.intentId??"no-intent",o=r.uuidCounter??0;return r.uuidCounter!==void 0&&(r.uuidCounter=o+1),l(or(n,o))}return t==="timestamp"?l(new Date(r.snapshot.meta.timestamp).toISOString()):l(void 0)}if(e.startsWith("meta.")){let t=e.slice(5);return t==="intentId"?l(r.intentId):t==="actionName"?l(r.currentAction):l(V(r.snapshot.meta,t))}if(e.startsWith("input.")||e==="input"){let t=e==="input"?"":e.slice(6);return l(t?V(r.snapshot.input,t):r.snapshot.input)}if(Object.prototype.hasOwnProperty.call(r.schema.computed.fields,e))return l(r.snapshot.computed[e]);if(e.startsWith("system.")){let t=e.slice(7);return l(V(r.snapshot.system,t))}return l(V(r.snapshot.data,e))}function B(e,r,t,n){let o=f(e,t);if(!o.ok)return o;let a=f(r,t);return a.ok?l(n(o.value,a.value)):a}function ir(e,r){for(let t of e){let n=f(t,r);if(!n.ok)return n;if(!K(n.value))return l(!1)}return l(!0)}function sr(e,r){for(let t of e){let n=f(t,r);if(!n.ok)return n;if(K(n.value))return l(!0)}return l(!1)}function pr(e,r){let t=f(e,r);return t.ok?l(!K(t.value)):t}function lr(e,r){let t=f(e.cond,r);return t.ok?f(K(t.value)?e.then:e.else,r):t}function ur(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=y(o.value);return a===0?l(null):l(y(n.value)/a)}function cr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=y(o.value);return a===0?l(null):l(y(n.value)%a)}function fr(e,r){if(e.length===0)return l(null);let t=[];for(let n of e){let o=f(n,r);if(!o.ok)return o;t.push(y(o.value))}return l(Math.min(...t))}function dr(e,r){if(e.length===0)return l(null);let t=[];for(let n of e){let o=f(n,r);if(!o.ok)return o;t.push(y(o.value))}return l(Math.max(...t))}function mr(e,r){let t=f(e,r);return t.ok?l(Math.abs(y(t.value))):t}function yr(e,r){let t=f(e,r);return t.ok?l(-y(t.value)):t}function xr(e,r){let t=[];for(let a of e){let s=f(a,r);if(!s.ok)return s;t.push(s.value)}if(t.some(a=>Array.isArray(a))){let a=[];for(let s of t)Array.isArray(s)?a.push(...s):s!=null&&a.push(s);return l(a)}let o=t.map(a=>T(a));return l(o.join(""))}function hr(e,r){let t=f(e.str,r);if(!t.ok)return t;let n=f(e.start,r);if(!n.ok)return n;let o=T(t.value),a=y(n.value);if(e.end){let s=f(e.end,r);return s.ok?l(o.substring(a,y(s.value))):s}return l(o.substring(a))}function Er(e,r){let t=f(e,r);return t.ok?l(T(t.value).trim()):t}function gr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return Array.isArray(n)?l(n.length):typeof n=="string"?l(n.length):typeof n=="object"&&n!==null?l(Object.keys(n).length):l(0)}function kr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=n.value,s=o.value;if(Array.isArray(a)){let p=y(s);return p<0||p>=a.length?l(null):l(a[p])}return typeof a=="object"&&a!==null&&typeof s=="string"?l(a[s]??null):l(null)}function Sr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return!Array.isArray(n)||n.length===0?l(null):l(n[0])}function br(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return!Array.isArray(n)||n.length===0?l(null):l(n[n.length-1])}function vr(e,r){let t=f(e.array,r);if(!t.ok)return t;let n=f(e.start,r);if(!n.ok)return n;let o=t.value;if(!Array.isArray(o))return l([]);let a=y(n.value);if(e.end){let s=f(e.end,r);return s.ok?l(o.slice(a,y(s.value))):s}return l(o.slice(a))}function Nr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=n.value;return Array.isArray(a)?l(a.includes(o.value)):l(!1)}function Rr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;if(!Array.isArray(o))return l([]);let a=[];for(let s=0;s<o.length;s++){let p=X(t,o[s],s,o),u=f(r,p);if(!u.ok)return u;K(u.value)&&a.push(o[s])}return l(a)}function wr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;if(!Array.isArray(o))return l([]);let a=[];for(let s=0;s<o.length;s++){let p=X(t,o[s],s,o),u=f(r,p);if(!u.ok)return u;a.push(u.value)}return l(a)}function Tr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;if(!Array.isArray(o))return l(null);for(let a=0;a<o.length;a++){let s=X(t,o[a],a,o),p=f(r,s);if(!p.ok)return p;if(K(p.value))return l(o[a])}return l(null)}function jr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;if(!Array.isArray(o))return l(!0);for(let a=0;a<o.length;a++){let s=X(t,o[a],a,o),p=f(r,s);if(!p.ok)return p;if(!K(p.value))return l(!1)}return l(!0)}function Ar(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;if(!Array.isArray(o))return l(!1);for(let a=0;a<o.length;a++){let s=X(t,o[a],a,o),p=f(r,s);if(!p.ok)return p;if(K(p.value))return l(!0)}return l(!1)}function zr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value,a=Array.isArray(o)?[...o]:[];for(let s of r){let p=f(s,t);if(!p.ok)return p;a.push(p.value)}return l(a)}function Cr(e,r){let t={};for(let n of Object.keys(e).sort(ne)){let o=e[n],a=f(o,r);if(!a.ok)return a;t[n]=a.value}return l(t)}function Pr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=n.value;return typeof o!="object"||o===null||Array.isArray(o)?l(null):l(o[r]??null)}function Fr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return typeof n!="object"||n===null?l([]):l(Object.keys(n).sort(ne))}function Ir(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return typeof n!="object"||n===null?l([]):l(Object.keys(n).sort(ne).map(o=>n[o]))}function Dr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return typeof n!="object"||n===null?l([]):l(Object.keys(n).sort(ne).map(o=>[o,n[o]]))}function Or(e,r){let t={};for(let n of e){let o=f(n,r);if(!o.ok)return o;let a=o.value;typeof a=="object"&&a!==null&&!Array.isArray(a)&&Object.assign(t,a)}return l(t)}function $r(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return n===null?l("null"):Array.isArray(n)?l("array"):l(typeof n)}function Vr(e,r){let t=f(e,r);return t.ok?l(t.value===null||t.value===void 0):t}function qr(e,r){for(let t of e){let n=f(t,r);if(!n.ok||n.value!==null&&n.value!==void 0)return n}return l(null)}function Mr(e,r){let t=f(e,r);return t.ok?l(Math.floor(y(t.value))):t}function Ur(e,r){let t=f(e,r);return t.ok?l(Math.ceil(y(t.value))):t}function Zr(e,r){let t=f(e,r);return t.ok?l(Math.round(y(t.value))):t}function Lr(e,r){let t=f(e,r);if(!t.ok)return t;let n=y(t.value);return n<0?l(null):l(Math.sqrt(n))}function _r(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=Math.pow(y(n.value),y(o.value));return Number.isFinite(a)?l(a):l(null)}function Hr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n))return l(0);let o=0;for(let a of n)o+=y(a);return l(o)}function Wr(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n)||n.length===0)return l(null);let o=y(n[0]);for(let a=1;a<n.length;a++){let s=y(n[a]);s<o&&(o=s)}return l(o)}function Br(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n)||n.length===0)return l(null);let o=y(n[0]);for(let a=1;a<n.length;a++){let s=y(n[a]);s>o&&(o=s)}return l(o)}function Kr(e,r){let t=f(e,r);return t.ok?l(T(t.value).toLowerCase()):t}function Gr(e,r){let t=f(e,r);return t.ok?l(T(t.value).toUpperCase()):t}function Yr(e,r){let t=f(e,r);return t.ok?l(T(t.value).length):t}function Jr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);return o.ok?l(T(n.value).startsWith(T(o.value))):o}function Xr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);return o.ok?l(T(n.value).endsWith(T(o.value))):o}function Qr(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);return o.ok?l(T(n.value).includes(T(o.value))):o}function en(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);return o.ok?l(T(n.value).indexOf(T(o.value))):o}function tn(e,r,t,n){let o=f(e,n);if(!o.ok)return o;let a=f(r,n);if(!a.ok)return a;let s=f(t,n);return s.ok?l(T(o.value).replace(T(a.value),T(s.value))):s}function rn(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=T(n.value).split(T(o.value));return l(a.length===0?[""]:a)}function nn(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;return Array.isArray(n)?l([...n].reverse()):l([])}function on(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n))return l([]);let o=[],a=[];for(let s of n)o.some(p=>p===s)||(o.push(s),a.push(s));return l(a)}function an(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n))return l([]);let o=[];for(let a of n)Array.isArray(a)?o.push(...a):o.push(a);return l(o)}function sn(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=n.value;if(typeof a!="object"||a===null||Array.isArray(a))return l(!1);let s=o.value;return typeof s!="string"?l(!1):l(Object.prototype.hasOwnProperty.call(a,s))}function pn(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=n.value;if(typeof a!="object"||a===null||Array.isArray(a))return l({});let s=o.value;if(!Array.isArray(s))return l({});let p={};for(let u of s)typeof u=="string"&&Object.prototype.hasOwnProperty.call(a,u)&&(p[u]=a[u]);return l(p)}function ln(e,r,t){let n=f(e,t);if(!n.ok)return n;let o=f(r,t);if(!o.ok)return o;let a=n.value;if(typeof a!="object"||a===null||Array.isArray(a))return l({});let s=o.value,p=new Set;if(Array.isArray(s))for(let d of s)typeof d=="string"&&p.add(d);let u={};for(let[d,h]of Object.entries(a))p.has(d)||(u[d]=h);return l(u)}function un(e,r){let t=f(e,r);if(!t.ok)return t;let n=t.value;if(!Array.isArray(n))return l({});let o={};for(let a of n)Array.isArray(a)&&a.length===2&&typeof a[0]=="string"&&(o[a[0]]=a[1]);return l(o)}function cn(e,r){let t=f(e,r);return t.ok?l(T(t.value)):t}function fn(e,r){let t=f(e,r);return t.ok?l(y(t.value)):t}function dn(e,r){let t=f(e,r);return t.ok?l(K(t.value)):t}function mn(e){return/^\d+$/.test(e)}function yn(e,r){let t=L(e,r);return t?t.kind==="primitive"&&t.type==="null"||t.kind==="literal"&&t.value===null:!1}function lt(e,r){let t=L(e,r);if(!t)return null;if(t.kind!=="union")return t;let n=t.types.filter(a=>!yn(a,r));return n.length!==t.types.length?n.length!==1?null:L(n[0],r):t}function L(e,r,t=[]){if(e.kind!=="ref")return e;if(t.includes(e.name))return null;let n=r[e.name];return n?L(n.definition,r,[...t,e.name]):null}function ut(e,r,t){return t?ft(e,r,D(t))!==null:!0}function ct(e,r,t){return ft(e,r,t)!==null}function ft(e,r,t){let n=e;for(let o of t){if(!n)return null;let a=lt(n,r);if(!a)return null;switch(a.kind){case"object":n=a.fields[o]?.type??null;break;case"record":n=a.value;break;case"array":if(!mn(o))return null;n=a.element;break;case"primitive":return null;default:return null}}return n}function be(e,r,t){let n=e;for(let o of t){if(!n)return null;let a=lt(n,r);if(!a)return null;switch(a.kind){case"object":if(o.kind!=="prop")return null;n=a.fields[o.name]?.type??null;break;case"record":if(o.kind!=="prop")return null;n=a.value;break;case"array":if(o.kind!=="index")return null;n=a.element;break;case"primitive":return null;default:return null}}return n}function ve(e,r,t){if(!e.fieldTypes||t.length===0)return null;let[n,...o]=t;if(!n||n.kind!=="prop"||!(n.name in e.fields))return null;let a=e.fieldTypes[n.name];return a?o.length===0?a:be(a,r,o):null}function $(e,r,t,n){if(e===void 0)return n?.allowUndefined?{ok:!0}:{ok:!1,message:"Value is required"};let o=L(r,t);if(!o)return{ok:!1,message:"Unknown type reference"};if(o.kind==="union")return o.types.map(s=>$(e,s,t,n)).find(s=>s.ok)??{ok:!1,message:"Value does not match any union branch"};switch(o.kind){case"primitive":switch(o.type){case"null":return e===null?{ok:!0}:{ok:!1,message:"Expected null"};case"string":return typeof e=="string"?{ok:!0}:{ok:!1,message:"Expected string"};case"number":return typeof e=="number"&&Number.isFinite(e)?{ok:!0}:{ok:!1,message:"Expected number"};case"boolean":return typeof e=="boolean"?{ok:!0}:{ok:!1,message:"Expected boolean"};case"object":return e!==null&&!Array.isArray(e)&&typeof e=="object"?{ok:!0}:{ok:!1,message:"Expected object"};case"array":return Array.isArray(e)?{ok:!0}:{ok:!1,message:"Expected array"};default:return{ok:!1,message:`Unsupported primitive type: ${o.type}`}}case"literal":return Object.is(e,o.value)?{ok:!0}:{ok:!1,message:`Expected literal ${JSON.stringify(o.value)}`};case"array":if(!Array.isArray(e))return{ok:!1,message:"Expected array"};for(let s of e){let p=$(s,o.element,t,{allowUndefined:!1});if(!p.ok)return p}return{ok:!0};case"object":return e===null||Array.isArray(e)||typeof e!="object"?{ok:!1,message:"Expected object"}:xn(e,o.fields,t,n?.allowPartial??!1,n?.allowUndefined??!1);case"record":if(e===null||Array.isArray(e)||typeof e!="object")return{ok:!1,message:"Expected object"};let a=L(o.key,t);if(!a||a.kind!=="primitive"||a.type!=="string")return{ok:!1,message:"Record keys must be strings"};for(let s of Object.values(e)){let p=$(s,o.value,t,{allowUndefined:!1});if(!p.ok)return p}return{ok:!0};case"ref":return{ok:!1,message:"Unresolved type reference"}}}function xn(e,r,t,n,o){let a=new Set(Object.keys(r));for(let s of Object.keys(e))if(!a.has(s))return{ok:!1,message:`Unknown field: ${s}`};for(let[s,p]of Object.entries(r)){if(!(s in e)){if(!n&&!p.optional)return{ok:!1,message:`Missing required field: ${s}`};continue}let u=$(e[s],p.type,t,{allowPartial:n,allowUndefined:o});if(!u.ok)return u}return{ok:!0}}var hn=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,En=/^[a-zA-Z][a-zA-Z0-9+.-]*:/,gn=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function dt(e){return En.test(e)||gn.test(e)}function mt(e){return hn.test(e)}function G(e){let r=[],t=n=>{switch(n.kind){case"lit":return;case"get":r.push(n.path);return;case"eq":case"neq":case"gt":case"gte":case"lt":case"lte":case"add":case"sub":case"mul":case"div":case"mod":t(n.left),t(n.right);return;case"pow":t(n.base),t(n.exponent);return;case"and":case"or":case"concat":case"coalesce":case"min":case"max":n.args.forEach(t);return;case"not":case"typeof":case"isNull":case"len":case"abs":case"neg":case"floor":case"ceil":case"round":case"sqrt":case"toString":case"toNumber":case"toBoolean":t(n.arg);return;case"first":case"last":case"reverse":case"unique":case"flat":case"sumArray":case"minArray":case"maxArray":t(n.array);return;case"if":t(n.cond),t(n.then),t(n.else);return;case"substring":t(n.str),t(n.start),n.end&&t(n.end);return;case"trim":case"toLowerCase":case"toUpperCase":case"strLen":t(n.str);return;case"startsWith":t(n.str),t(n.prefix);return;case"endsWith":t(n.str),t(n.suffix);return;case"strIncludes":case"indexOf":t(n.str),t(n.search);return;case"replace":t(n.str),t(n.search),t(n.replacement);return;case"split":t(n.str),t(n.delimiter);return;case"at":t(n.array),t(n.index);return;case"slice":t(n.array),t(n.start),n.end&&t(n.end);return;case"includes":t(n.array),t(n.item);return;case"filter":case"find":case"every":case"some":t(n.array),t(n.predicate);return;case"map":t(n.array),t(n.mapper);return;case"append":t(n.array),n.items.forEach(t);return;case"object":Object.values(n.fields).forEach(t);return;case"field":t(n.object);return;case"keys":case"values":case"entries":t(n.obj);return;case"merge":n.objects.forEach(t);return;case"hasKey":t(n.obj),t(n.key);return;case"pick":case"omit":t(n.obj),t(n.keys);return;case"fromEntries":t(n.entries);return}};return t(e),r}function yt(e){let r=[],t=n=>{switch(n.kind){case"seq":n.steps.forEach(t);return;case"if":r.push(...G(n.cond)),t(n.then),n.else&&t(n.else);return;case"patch":n.op!=="unset"&&n.value&&r.push(...G(n.value));return;case"effect":Object.values(n.params).forEach(o=>{r.push(...G(o))});return;case"fail":n.message&&r.push(...G(n.message));return;case"call":case"halt":return}};return t(e),r}function ce(e,r,t={}){if(e.fieldTypes){if(!r)return!0;let n=D(r),[o,...a]=n;if(!o)return!0;if(!(o in e.fields))return!1;let s=e.fieldTypes[o];if(s&&(a.length===0?!0:ct(s,t,a)))return!0}return Me({type:"object",required:!0,fields:e.fields},r)}function fe(e,r){return Object.prototype.hasOwnProperty.call(e.fields,r)}function Me(e,r){if(!r)return!0;let t=D(r);if(t.length===0)return!0;let n=e;for(let o of t){if(!n)return!1;let a=n.type;if(a==="object"){if(!n.fields)return!0;if(!(o in n.fields))return!1;n=n.fields[o];continue}if(a==="array"){if(!Sn(o))return!1;n=n.items??null;continue}return!1}return!0}function Y(e,r,t){if(e===void 0)return t?.allowUndefined&&r.required===!1?{ok:!0}:{ok:!1,message:"Value is required"};if(e===null)return{ok:!0};let n=r.type;if(typeof n=="object"&&"enum"in n)return n.enum.some(o=>Object.is(o,e))?{ok:!0}:{ok:!1,message:"Value is not in enum"};switch(n){case"null":return e===null?{ok:!0}:{ok:!1,message:"Expected null"};case"string":return typeof e=="string"?{ok:!0}:{ok:!1,message:"Expected string"};case"number":return typeof e=="number"&&Number.isFinite(e)?{ok:!0}:{ok:!1,message:"Expected number"};case"boolean":return typeof e=="boolean"?{ok:!0}:{ok:!1,message:"Expected boolean"};case"object":return e===null||Array.isArray(e)||typeof e!="object"?{ok:!1,message:"Expected object"}:kn(e,r,t?.allowPartial??!1,t?.allowUndefined??!1);case"array":if(!Array.isArray(e))return{ok:!1,message:"Expected array"};if(!r.items)return{ok:!0};for(let o of e){let a=Y(o,r.items,{allowUndefined:!1});if(!a.ok)return a}return{ok:!0}}}function kn(e,r,t,n){if(!r.fields)return{ok:!0};let o=Object.entries(r.fields),a=new Set(o.map(([s])=>s));for(let s of Object.keys(e)){if(!a.has(s))return{ok:!1,message:`Unknown field: ${s}`};let p=r.fields[s],u=Y(e[s],p,{allowPartial:t,allowUndefined:n});if(!u.ok)return u}if(!t){for(let[s,p]of o)if(p.required&&!(s in e))return{ok:!1,message:`Missing required field: ${s}`}}return{ok:!0}}function Ne(e,r){if(r.length===0)return e;let t=e;for(let n of r){if(!t)return null;let o=t.type;if(o==="object"){if(n.kind!=="prop"||!t.fields||!(n.name in t.fields))return null;t=t.fields[n.name];continue}if(o==="array"){if(n.kind!=="index")return null;t=t.items??null;continue}return null}return t}function Sn(e){return/^[0-9]+$/.test(e)}function xt(e){return{snapshot:e,status:"running",patches:[],requirements:[],error:null}}function ht(e,r){let t=e.snapshot.data;switch(r.op){case"set":t=ue(t,r.path,r.value);break;case"unset":t=ke(t,r.path);break;case"merge":t=Se(t,r.path,r.value);break}return{...e,snapshot:{...e.snapshot,data:t},patches:[...e.patches,r]}}function bn(e,r){return{...e,status:"pending",requirements:[...e.requirements,r]}}function P(e,r){return{...e,status:"error",error:r}}function ie(e,r,t,n){if(t.status!=="running")return{state:t,trace:g(r.trace,"flow",n,{},null,[])};switch(e.kind){case"seq":return vn(e.steps,r,t,n);case"if":return Nn(e,r,t,n);case"patch":return Rn(e,r,t,n);case"effect":return wn(e,r,t,n);case"call":return An(e.flow,r,t,n);case"halt":return zn(e.reason,r,t,n);case"fail":return Cn(e,r,t,n);default:return{state:P(t,v("INTERNAL_ERROR",`Unknown flow kind: ${e.kind}`,r.currentAction??"",n,r.trace.timestamp)),trace:g(r.trace,"error",n,{},null,[])}}}async function Oi(e,r,t,n){return ie(e,r,t,n)}function vn(e,r,t,n){let o=t,a=[];for(let s=0;s<e.length;s++){let p=`${n}.steps[${s}]`,u=Ee(Oe(r,o.snapshot),p),d=ie(e[s],u,o,p);if(a.push(d.trace),o=d.state,o.status!=="running")break}return{state:o,trace:g(r.trace,"flow",n,{kind:"seq"},null,a)}}function Nn(e,r,t,n){let o=f(e.cond,r);if(!o.ok)return{state:P(t,o.error),trace:g(r.trace,"branch",n,{cond:!1},null,[])};let a=o.value,s=a!=null&&a!==!1,p=s?`${n}.then`:`${n}.else`,u=s?e.then:e.else;if(!u)return{state:t,trace:g(r.trace,"branch",n,{cond:s},null,[])};let d=Ee(r,p),h=ie(u,d,t,p);return{state:h.state,trace:g(r.trace,"branch",n,{cond:s},null,[h.trace])}}function Rn(e,r,t,n){let o;if(e.op!=="unset"&&e.value){let b=f(e.value,r);if(!b.ok)return{state:P(t,b.error),trace:g(r.trace,"error",n,{},null,[])};o=b.value}let a={type:"object",required:!0,fields:r.schema.state.fields},s=ve(r.schema.state,r.schema.types,e.path),p=s?null:Ne(a,e.path),u=ge(e.path);if(!s&&!p)return{state:P(t,v("PATH_NOT_FOUND",`Unknown patch path: ${u}`,r.currentAction??"",n,r.trace.timestamp)),trace:g(r.trace,"error",n,{},null,[])};if(e.op!=="unset"){let b=s?$(o,s,r.schema.types,{allowPartial:e.op==="merge",allowUndefined:!1}):Y(o,p,{allowPartial:e.op==="merge",allowUndefined:!1});if(!b.ok)return{state:P(t,v("TYPE_MISMATCH",`Invalid patch value at ${u}: ${b.message??"type mismatch"}`,r.currentAction??"",n,r.trace.timestamp)),trace:g(r.trace,"error",n,{},null,[])}}let d=e.op==="unset"?{op:"unset",path:e.path}:e.op==="merge"?{op:"merge",path:e.path,value:o}:{op:"set",path:e.path,value:o};return{state:ht(t,d),trace:g(r.trace,"patch",n,{op:e.op,path:u},o,[])}}function wn(e,r,t,n){if(e.type==="array.map"||e.type==="array.filter")return Tn(e,r,t,n);let o={};for(let[u,d]of Object.entries(e.params)){let h=f(d,r);if(!h.ok)return{state:P(t,h.error),trace:g(r.trace,"error",n,{},null,[])};o[u]=h.value}let s={id:tt(r.snapshot.meta.schemaHash,r.intentId??"",r.currentAction??"",n),type:e.type,params:o,actionId:r.currentAction??"",flowPosition:{nodePath:n,snapshotVersion:r.snapshot.meta.version},createdAt:r.trace.timestamp};return{state:bn(t,s),trace:g(r.trace,"effect",n,{type:e.type},o,[])}}function Tn(e,r,t,n){let{params:o}=e,a=Oe(r,t.snapshot),s=o.source;if(!s)return{state:P(t,v("INVALID_INPUT",`${e.type} requires 'source' parameter`,r.currentAction??"",n,r.trace.timestamp)),trace:g(a.trace,"error",n,{},null,[])};let p=f(s,a);if(!p.ok)return{state:P(t,p.error),trace:g(a.trace,"error",n,{},null,[])};let u=p.value;if(!Array.isArray(u))return{state:P(t,v("TYPE_MISMATCH",`${e.type} source must be an array`,a.currentAction??"",n,a.trace.timestamp)),trace:g(a.trace,"error",n,{},null,[])};let d=o.into;if(!d)return{state:P(t,v("INVALID_INPUT",`${e.type} requires 'into' parameter`,a.currentAction??"",n,a.trace.timestamp)),trace:g(a.trace,"error",n,{},null,[])};let h=f(d,a);if(!h.ok)return{state:P(t,h.error),trace:g(a.trace,"error",n,{},null,[])};let b=jn(h.value);if(!b)return{state:P(t,v("INVALID_INPUT",`${e.type} into must resolve to PatchPath segments or semantic string path`,a.currentAction??"",n,a.trace.timestamp)),trace:g(a.trace,"error",n,{},null,[])};let m=e.type==="array.map"?o.select:o.where;if(!m)return{state:P(t,v("INVALID_INPUT",`${e.type} requires '${e.type==="array.map"?"select":"where"}' parameter`,a.currentAction??"",n,a.trace.timestamp)),trace:g(a.trace,"error",n,{},null,[])};let E=[];for(let F=0;F<u.length;F++){let A=u[F],q=X(a,A,F,u),H=f(m,q);if(!H.ok)return{state:P(t,H.error),trace:g(a.trace,"error",n,{},null,[])};if(e.type==="array.map")E.push(H.value);else{let J=H.value;J!=null&&J!==!1&&E.push(A)}}return{state:ht(t,{op:"set",path:b,value:E}),trace:g(a.trace,"effect",n,{type:e.type,target:b},{count:E.length},[])}}function jn(e){if(typeof e=="string")return st(e);if(!Array.isArray(e))return null;let r=[];for(let t of e){if(!t||typeof t!="object")return null;let n=t.kind;if(n==="prop"){let o=t.name;if(typeof o!="string"||o.length===0)return null;r.push({kind:"prop",name:o});continue}if(n==="index"){let o=t.index;if(!Number.isInteger(o)||o<0)return null;r.push({kind:"index",index:o});continue}return null}return r.length>0?r:null}function An(e,r,t,n){let o=r.schema.actions[e];if(!o)return{state:P(t,v("UNKNOWN_FLOW",`Unknown flow: ${e}`,r.currentAction??"",n,r.trace.timestamp)),trace:g(r.trace,"error",n,{},null,[])};let a=`${n}.call(${e})`,s=Ee(r,a),p=ie(o.flow,s,t,a);return{state:p.state,trace:g(r.trace,"call",n,{flow:e},null,[p.trace])}}function zn(e,r,t,n){return{state:{...t,status:"halted"},trace:g(r.trace,"halt",n,{reason:e},null,[])}}function Cn(e,r,t,n){let o=e.code;if(e.message){let s=f(e.message,r);s.ok&&(o=String(s.value))}let a=v("VALIDATION_ERROR",o,r.currentAction??"",n,r.trace.timestamp,{code:e.code});return{state:P(t,a),trace:g(r.trace,"error",n,{code:e.code},o,[])}}function Re(e){let r=Object.keys(e.fields),t=new Map;for(let[n,o]of Object.entries(e.fields)){let a=o.deps.filter(s=>s in e.fields);t.set(n,a)}return{nodes:r,edges:t}}function we(e){let r=new Map,t=new Map;for(let a of e.nodes)r.set(a,0),t.set(a,[]);for(let[a,s]of e.edges)for(let p of s)t.has(p)&&t.get(p).push(a),r.set(a,(r.get(a)??0)+1);let n=[];for(let[a,s]of r)s===0&&n.push(a);let o=[];for(;n.length>0;){let a=n.shift();o.push(a);for(let s of t.get(a)??[]){let p=(r.get(s)??1)-1;r.set(s,p),p===0&&n.push(s)}}if(o.length!==e.nodes.length){let a=e.nodes.filter(s=>!o.includes(s));return te({code:"V-002",message:`Cyclic dependency detected in computed fields: ${a.join(", ")}`,path:a[0]})}return l(o)}function Et(e){let r=new Set,t=new Set,n=[];function o(a,s){r.add(a),t.add(a);let p=e.edges.get(a)??[];for(let u of p)if(r.has(u)){if(t.has(u)){let d=s.indexOf(u);d!==-1?n.push([...s.slice(d),u]):n.push([...s,u])}}else if(o(u,[...s,u]))return!0;return t.delete(a),!1}for(let a of e.nodes)r.has(a)||o(a,[a]);return n.length>0?n:null}function qi(e,r){let t=new Set,n=[...e.edges.get(r)??[]];for(;n.length>0;){let o=n.shift();t.has(o)||(t.add(o),n.push(...e.edges.get(o)??[]))}return t}function se(e,r){let t=ee(r.meta.timestamp),n=Re(e.computed),o=we(n);if(!o.ok)return te(v("CYCLIC_DEPENDENCY",o.error.message,"",o.error.path??"",t.timestamp));let a={},s={...r,computed:a};for(let p of o.value){let u=e.computed.fields[p];if(!u)continue;let d=U(s,e,null,p,void 0,t),h=f(u.expr,d);if(Z(h))return h;a[p]=h.value,s={...s,computed:{...a}}}return l(a)}function Bi(e,r,t){let n=ee(r.meta.timestamp),o=e.computed.fields[t];if(!o)return te(v("PATH_NOT_FOUND",`Computed field not found: ${t}`,"",t,n.timestamp));let a=U(r,e,null,t,void 0,n);return f(o.expr,a)}function Ue(e,r){let t=se(e,r);return Z(t)?{kind:"error",code:"INTERNAL_ERROR",message:`Error evaluating computed values for legality query: ${t.error.message}`}:{kind:"ok",snapshot:{...r,computed:t.value}}}function Ze(e,r,t,n){let o=e.actions[t];if(!o)return{kind:"error",code:"UNKNOWN_ACTION",message:`Unknown action: ${t}`};if(!o.available)return{kind:"ok",available:!0};let a=U(r,e,null,`actions.${t}.available`,void 0,n),s=f(o.available,a);return Z(s)?{kind:"error",code:"INTERNAL_ERROR",message:`Error evaluating availability: ${s.error.message}`}:typeof s.value!="boolean"?{kind:"error",code:"TYPE_MISMATCH",message:`Availability condition must return boolean, got ${typeof s.value}`}:{kind:"ok",available:s.value}}function Le(e,r,t,n=r.meta.timestamp){let o=Ue(e,r);return o.kind==="error"?o:Ze(e,o.snapshot,t,n)}function gt(e,r,t){let n=Le(e,r,t);if(n.kind==="error")throw new Error(n.message);return n.available}function Pn(e,r,t,n=r.meta.timestamp){let o=e.actions[t.type];if(!o)return{kind:"error",code:"UNKNOWN_ACTION",message:`Unknown action: ${t.type}`};let a=Ue(e,r);if(a.kind==="error")return a;let s=Ze(e,a.snapshot,t.type,n);if(s.kind==="error")return s;if(!s.available)return{kind:"ok",dispatchable:!1};if(!o.dispatchable)return{kind:"ok",dispatchable:!0};let p=U({...a.snapshot,input:t.input},e,t.type,`actions.${t.type}.dispatchable`,t.intentId,n),u=f(o.dispatchable,p);return Z(u)?{kind:"error",code:"INTERNAL_ERROR",message:`Error evaluating dispatchability: ${u.error.message}`}:typeof u.value!="boolean"?{kind:"error",code:"TYPE_MISMATCH",message:`Dispatchability condition must return boolean, got ${typeof u.value}`}:{kind:"ok",dispatchable:u.value}}function kt(e,r,t){let n=Pn(e,r,t);if(n.kind==="error")throw new Error(n.message);return n.dispatchable}function St(e,r){let t=Ue(e,r);if(t.kind==="error")throw new Error(t.message);return Object.keys(e.actions).filter(n=>{let o=Ze(e,t.snapshot,n,r.meta.timestamp);if(o.kind==="error")throw new Error(o.message);return o.available})}function Te(e,r){let t=_e(r,"status"),n=_e(r,"currentAction"),o=_e(r,"lastError"),a=new Set(r.removeRequirementIds??[]),s=r.addRequirements??[],p=Fn(e.system.pendingRequirements,a,s),u={...e.system,status:t?r.status:e.system.status,currentAction:n?r.currentAction??null:e.system.currentAction,lastError:o?r.lastError??null:e.system.lastError,pendingRequirements:p};return In(e.system,u)?{...e,system:u,meta:{...e.meta,version:e.meta.version+1}}:e}function Fn(e,r,t){let n=new Set(t.map(a=>a.id));return[...e.filter(a=>!r.has(a.id)&&!n.has(a.id)),...t]}function In(e,r){return e.status!==r.status||e.currentAction!==r.currentAction||!On(e.lastError,r.lastError)||!Dn(e.pendingRequirements,r.pendingRequirements)}function Dn(e,r){if(e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!$n(e[t],r[t]))return!1;return!0}function On(e,r){if(e===r)return!0;if(e===null||r===null||e.code!==r.code||e.message!==r.message||e.timestamp!==r.timestamp||e.source.actionId!==r.source.actionId||e.source.nodePath!==r.source.nodePath)return!1;let t=e.context??{},n=r.context??{};return JSON.stringify(t)===JSON.stringify(n)}function $n(e,r){return e.id===r.id&&e.type===r.type&&e.actionId===r.actionId&&e.createdAt===r.createdAt&&e.flowPosition.nodePath===r.flowPosition.nodePath&&e.flowPosition.snapshotVersion===r.flowPosition.snapshotVersion&&JSON.stringify(e.params)===JSON.stringify(r.params)}function _e(e,r){return Object.prototype.hasOwnProperty.call(e,r)}function He(e,r,t,n){let o=r,a=se(e,r);ae(a)&&(o={...r,computed:a.value});let s=e.actions[t.type];if(!s)return je(o,t,"UNKNOWN_ACTION",`Unknown action: ${t.type}`,n);let p=vt(e,t);if(p)return je(o,t,"INVALID_INPUT",p,n);let u=o.system.currentAction===t.type;if(s.available&&!u){let A=Le(e,o,t.type,n.now);if(A.kind==="error")return je(o,t,A.code,A.message,n);if(!A.available)return je(o,t,"ACTION_UNAVAILABLE",`Action "${t.type}" is not available`,n)}let d={...o,input:t.input,system:{...o.system,status:"computing",currentAction:t.type}},h=U(d,e,t.type,`actions.${t.type}.flow`,t.intentId,n.now),b=xt(d),m=ie(s.flow,h,b,`actions.${t.type}.flow`),E=Vn(m.state.status),C=Un(o,t,E,m.state.error,m.state.requirements),I=[...m.state.patches],F={root:m.trace,nodes:Mn(m.trace),intent:{type:t.type,input:t.input},baseVersion:o.meta.version,resultVersion:Nt(o,I,C),duration:n.durationMs??0,terminatedBy:qn(m.state.status)};return{patches:I,systemDelta:C,trace:F,status:E}}async function bt(e,r,t,n){return He(e,r,t,n)}function vt(e,r){if(!r.intentId||r.intentId==="")return"Intent must have a non-empty intentId";let t=e.actions[r.type];return!t||!t.input&&!t.inputType?null:Zn(e,t.inputType,t.input,r.input)}function Vn(e){switch(e){case"running":case"complete":return"complete";case"pending":return"pending";case"halted":return"halted";case"error":return"error"}}function qn(e){switch(e){case"running":case"complete":return"complete";case"pending":return"effect";case"halted":return"halt";case"error":return"error"}}function Mn(e){let r={};function t(n){r[n.id]=n;for(let o of n.children)t(o)}return t(e),r}function je(e,r,t,n,o){let a=v(t,n,r.type,"",o.now),s={status:"error",currentAction:null,lastError:a,addRequirements:[],removeRequirementIds:[]},p={root:{id:`trace-error-${r.intentId}`,kind:"error",sourcePath:"",inputs:{},output:a,children:[],timestamp:o.now},nodes:{},intent:{type:r.type,input:r.input},baseVersion:e.meta.version,resultVersion:Nt(e,[],s),duration:o.durationMs??0,terminatedBy:"error"};return{patches:[],systemDelta:s,trace:p,status:"error"}}function Un(e,r,t,n,o){let a=t==="error";return{status:t==="pending"?"pending":t==="error"?"error":"idle",currentAction:t==="pending"?r.type:null,lastError:n,addRequirements:[...o],removeRequirementIds:e.system.pendingRequirements.map(p=>p.id)}}function Nt(e,r,t){let n=e.meta.version;return n+=1,Te(e,t)!==e&&(n+=1),n}function Zn(e,r,t,n){if(r){let o=$(n,r,e.types);return o.ok?null:o.message??"Invalid input"}if(!t)return null;if(t.type==="object"){if(typeof n!="object"||n===null||Array.isArray(n))return`Expected object input, got ${typeof n}`;let o=n,a=t.fields??{};for(let[s,p]of Object.entries(a))if(p.required&&!(s in o))return`Missing required field: ${s}`;for(let s of Object.keys(o))if(!(s in a))return`Unknown field: ${s}`;for(let[s,p]of Object.entries(a))if(s in o){let u=Ln(p,o[s],s);if(u)return u}}return null}function Ln(e,r,t){if(r==null)return e.required?`Missing required field: ${t}`:null;switch(e.type){case"string":if(typeof r!="string")return`Expected string for ${t}, got ${typeof r}`;break;case"number":if(typeof r!="number")return`Expected number for ${t}, got ${typeof r}`;break;case"boolean":if(typeof r!="boolean")return`Expected boolean for ${t}, got ${typeof r}`;break;case"array":if(!Array.isArray(r))return`Expected array for ${t}, got ${typeof r}`;break;case"object":if(typeof r!="object"||Array.isArray(r))return`Expected object for ${t}, got ${typeof r}`;break}return null}var _n={type:"object",required:!1};function jt(e,r,t,n){let o=r.data,a=r.system,s=r.input,p=[],u={type:"object",required:!0,fields:e.state.fields};for(let m of t){let E=ge(m.path);if(!pt(m.path)){p.push(v("PATH_NOT_FOUND",`Unsafe patch path: ${E}`,r.system.currentAction??"",E,n.now,{patch:m}));continue}if(Hn(m.path)){if(m.op!=="unset"){if(m.path.length===1){let A=Y(m.value,_n,{allowPartial:m.op==="merge",allowUndefined:!1});if(!A.ok){p.push(v("TYPE_MISMATCH",`Invalid patch value at ${E}: ${A.message??"type mismatch"}`,r.system.currentAction??"",E,n.now,{patch:m}));continue}}if(m.op==="merge"&&!wt(o,m.path)){p.push(v("TYPE_MISMATCH",`Invalid merge target at ${E}: target path must be an object or absent`,r.system.currentAction??"",E,n.now,{patch:m}));continue}}o=Tt(o,m);continue}let I=ve(e.state,e.types,m.path),F=I?null:Ne(u,m.path);if(!I&&!F){p.push(v("PATH_NOT_FOUND",`Unknown patch path: ${E}`,r.system.currentAction??"",E,n.now,{patch:m}));continue}if(m.op==="merge"&&!wt(o,m.path)){p.push(v("TYPE_MISMATCH",`Invalid merge target at ${E}: target path must be an object or absent`,r.system.currentAction??"",E,n.now,{patch:m}));continue}if(m.op!=="unset"){let A=I?$(m.value,I,e.types,{allowPartial:m.op==="merge",allowUndefined:!1}):Y(m.value,F,{allowPartial:m.op==="merge",allowUndefined:!1});if(!A.ok){p.push(v("TYPE_MISMATCH",`Invalid patch value at ${E}: ${A.message??"type mismatch"}`,r.system.currentAction??"",E,n.now,{patch:m}));continue}}o=Tt(o,m)}if(p.length>0){let m=p[p.length-1];a={...a,status:"error",lastError:m}}let d={...r,data:o,system:a,input:s},h=se(e,d),b=r.computed;if(ae(h))b=h.value;else if(Z(h)){let m=h.error;b={},a={...a,status:"error",lastError:m}}return{data:o,computed:b,system:a,input:s,meta:{...r.meta,version:r.meta.version+1,timestamp:n.now,randomSeed:n.randomSeed}}}function Hn(e){let r=e[0];return r.kind!=="prop"?null:r.name.startsWith("$")?r.name:null}function Rt(e){return e!==null&&!Array.isArray(e)&&typeof e=="object"}function wt(e,r){let t=e;for(let n of r){if(t===void 0)return!0;if(n.kind==="prop"){if(!Rt(t))return!1;t=t[n.name];continue}if(!Array.isArray(t))return!1;t=t[n.index]}return t===void 0?!0:Rt(t)}function Tt(e,r){switch(r.op){case"set":return ue(e,r.path,r.value);case"unset":return ke(e,r.path);case"merge":return Se(e,r.path,r.value)}}import{z as O}from"zod";import{z}from"zod";import{z as k}from"zod";var _=k.lazy(()=>k.discriminatedUnion("kind",[k.object({kind:k.literal("primitive"),type:k.string()}),k.object({kind:k.literal("array"),element:_}),k.object({kind:k.literal("record"),key:_,value:_}),k.object({kind:k.literal("object"),fields:k.record(k.string(),k.object({type:_,optional:k.boolean()}))}),k.object({kind:k.literal("union"),types:k.array(_).min(1)}),k.object({kind:k.literal("literal"),value:k.union([k.string(),k.number(),k.boolean(),k.null()])}),k.object({kind:k.literal("ref"),name:k.string()})])),At=k.object({name:k.string(),definition:_});var Wn=z.enum(["string","number","boolean","null","object","array"]),Bn=z.object({enum:z.array(z.unknown()).readonly()}),Kn=z.union([Wn,Bn]),de=z.lazy(()=>z.object({type:Kn,required:z.boolean(),default:z.unknown().optional(),description:z.string().optional(),fields:z.record(z.string(),de).optional(),items:de.optional()})),zt=z.object({fields:z.record(z.string(),de),fieldTypes:z.record(z.string(),_).optional()});import{z as me}from"zod";import{z as i}from"zod";var Gn=i.object({kind:i.literal("lit"),value:i.unknown()}),Yn=i.object({kind:i.literal("get"),path:W}),Jn=i.object({kind:i.literal("eq"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),Xn=i.object({kind:i.literal("neq"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),Qn=i.object({kind:i.literal("gt"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),eo=i.object({kind:i.literal("gte"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),to=i.object({kind:i.literal("lt"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),ro=i.object({kind:i.literal("lte"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),no=i.object({kind:i.literal("and"),args:i.array(i.lazy(()=>c))}),oo=i.object({kind:i.literal("or"),args:i.array(i.lazy(()=>c))}),ao=i.object({kind:i.literal("not"),arg:i.lazy(()=>c)}),io=i.object({kind:i.literal("if"),cond:i.lazy(()=>c),then:i.lazy(()=>c),else:i.lazy(()=>c)}),so=i.object({kind:i.literal("add"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),po=i.object({kind:i.literal("sub"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),lo=i.object({kind:i.literal("mul"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),uo=i.object({kind:i.literal("div"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),co=i.object({kind:i.literal("mod"),left:i.lazy(()=>c),right:i.lazy(()=>c)}),fo=i.object({kind:i.literal("min"),args:i.array(i.lazy(()=>c))}),mo=i.object({kind:i.literal("max"),args:i.array(i.lazy(()=>c))}),yo=i.object({kind:i.literal("abs"),arg:i.lazy(()=>c)}),xo=i.object({kind:i.literal("neg"),arg:i.lazy(()=>c)}),ho=i.object({kind:i.literal("floor"),arg:i.lazy(()=>c)}),Eo=i.object({kind:i.literal("ceil"),arg:i.lazy(()=>c)}),go=i.object({kind:i.literal("round"),arg:i.lazy(()=>c)}),ko=i.object({kind:i.literal("sqrt"),arg:i.lazy(()=>c)}),So=i.object({kind:i.literal("pow"),base:i.lazy(()=>c),exponent:i.lazy(()=>c)}),bo=i.object({kind:i.literal("sumArray"),array:i.lazy(()=>c)}),vo=i.object({kind:i.literal("minArray"),array:i.lazy(()=>c)}),No=i.object({kind:i.literal("maxArray"),array:i.lazy(()=>c)}),Ro=i.object({kind:i.literal("concat"),args:i.array(i.lazy(()=>c))}),wo=i.object({kind:i.literal("substring"),str:i.lazy(()=>c),start:i.lazy(()=>c),end:i.lazy(()=>c).optional()}),To=i.object({kind:i.literal("trim"),str:i.lazy(()=>c)}),jo=i.object({kind:i.literal("toLowerCase"),str:i.lazy(()=>c)}),Ao=i.object({kind:i.literal("toUpperCase"),str:i.lazy(()=>c)}),zo=i.object({kind:i.literal("strLen"),str:i.lazy(()=>c)}),Co=i.object({kind:i.literal("startsWith"),str:i.lazy(()=>c),prefix:i.lazy(()=>c)}),Po=i.object({kind:i.literal("endsWith"),str:i.lazy(()=>c),suffix:i.lazy(()=>c)}),Fo=i.object({kind:i.literal("strIncludes"),str:i.lazy(()=>c),search:i.lazy(()=>c)}),Io=i.object({kind:i.literal("indexOf"),str:i.lazy(()=>c),search:i.lazy(()=>c)}),Do=i.object({kind:i.literal("replace"),str:i.lazy(()=>c),search:i.lazy(()=>c),replacement:i.lazy(()=>c)}),Oo=i.object({kind:i.literal("split"),str:i.lazy(()=>c),delimiter:i.lazy(()=>c)}),$o=i.object({kind:i.literal("len"),arg:i.lazy(()=>c)}),Vo=i.object({kind:i.literal("at"),array:i.lazy(()=>c),index:i.lazy(()=>c)}),qo=i.object({kind:i.literal("first"),array:i.lazy(()=>c)}),Mo=i.object({kind:i.literal("last"),array:i.lazy(()=>c)}),Uo=i.object({kind:i.literal("slice"),array:i.lazy(()=>c),start:i.lazy(()=>c),end:i.lazy(()=>c).optional()}),Zo=i.object({kind:i.literal("includes"),array:i.lazy(()=>c),item:i.lazy(()=>c)}),Lo=i.object({kind:i.literal("filter"),array:i.lazy(()=>c),predicate:i.lazy(()=>c)}),_o=i.object({kind:i.literal("map"),array:i.lazy(()=>c),mapper:i.lazy(()=>c)}),Ho=i.object({kind:i.literal("find"),array:i.lazy(()=>c),predicate:i.lazy(()=>c)}),Wo=i.object({kind:i.literal("every"),array:i.lazy(()=>c),predicate:i.lazy(()=>c)}),Bo=i.object({kind:i.literal("some"),array:i.lazy(()=>c),predicate:i.lazy(()=>c)}),Ko=i.object({kind:i.literal("append"),array:i.lazy(()=>c),items:i.array(i.lazy(()=>c))}),Go=i.object({kind:i.literal("reverse"),array:i.lazy(()=>c)}),Yo=i.object({kind:i.literal("unique"),array:i.lazy(()=>c)}),Jo=i.object({kind:i.literal("flat"),array:i.lazy(()=>c)}),Xo=i.object({kind:i.literal("object"),fields:i.record(i.string(),i.lazy(()=>c))}),Qo=i.object({kind:i.literal("field"),object:i.lazy(()=>c),property:i.string()}),ea=i.object({kind:i.literal("keys"),obj:i.lazy(()=>c)}),ta=i.object({kind:i.literal("values"),obj:i.lazy(()=>c)}),ra=i.object({kind:i.literal("entries"),obj:i.lazy(()=>c)}),na=i.object({kind:i.literal("merge"),objects:i.array(i.lazy(()=>c))}),oa=i.object({kind:i.literal("hasKey"),obj:i.lazy(()=>c),key:i.lazy(()=>c)}),aa=i.object({kind:i.literal("pick"),obj:i.lazy(()=>c),keys:i.lazy(()=>c)}),ia=i.object({kind:i.literal("omit"),obj:i.lazy(()=>c),keys:i.lazy(()=>c)}),sa=i.object({kind:i.literal("fromEntries"),entries:i.lazy(()=>c)}),pa=i.object({kind:i.literal("typeof"),arg:i.lazy(()=>c)}),la=i.object({kind:i.literal("isNull"),arg:i.lazy(()=>c)}),ua=i.object({kind:i.literal("coalesce"),args:i.array(i.lazy(()=>c))}),ca=i.object({kind:i.literal("toString"),arg:i.lazy(()=>c)}),fa=i.object({kind:i.literal("toNumber"),arg:i.lazy(()=>c)}),da=i.object({kind:i.literal("toBoolean"),arg:i.lazy(()=>c)}),c=i.union([Gn,Yn,Jn,Xn,Qn,eo,to,ro,no,oo,ao,io,so,po,lo,uo,co,fo,mo,yo,xo,ho,Eo,go,ko,So,bo,vo,No,Ro,wo,To,jo,Ao,zo,Co,Po,Fo,Io,Do,Oo,$o,Vo,qo,Mo,Uo,Zo,Lo,_o,Ho,Wo,Bo,Ko,Go,Yo,Jo,Xo,Qo,ea,ta,ra,na,oa,aa,ia,sa,pa,la,ua,ca,fa,da]),Ns=i.enum(["lit","get","eq","neq","gt","gte","lt","lte","and","or","not","if","add","sub","mul","div","mod","min","max","abs","neg","floor","ceil","round","sqrt","pow","sumArray","minArray","maxArray","concat","substring","trim","toLowerCase","toUpperCase","strLen","startsWith","endsWith","strIncludes","indexOf","replace","split","len","at","first","last","slice","includes","filter","map","find","every","some","append","reverse","unique","flat","object","field","keys","values","entries","merge","hasKey","pick","omit","fromEntries","typeof","isNull","coalesce","toString","toNumber","toBoolean"]);var ma=me.object({deps:me.array(W),expr:c,description:me.string().optional()}),Ct=me.object({fields:me.record(W,ma)});import{z as Ae}from"zod";import{z as S}from"zod";import{z as N}from"zod";var ya=N.discriminatedUnion("kind",[N.object({kind:N.literal("prop"),name:N.string().min(1)}),N.object({kind:N.literal("index"),index:N.number().int().nonnegative()})]),ye=N.array(ya).min(1),Pt=N.discriminatedUnion("op",[N.object({op:N.literal("set"),path:ye,value:N.unknown()}),N.object({op:N.literal("unset"),path:ye}),N.object({op:N.literal("merge"),path:ye,value:N.record(N.string(),N.unknown())})]),Cs=N.object({type:N.string(),input:N.unknown().optional(),intentId:N.string()});function Ps(e){return{kind:"prop",name:e}}function Fs(e){return{kind:"index",index:e}}function Is(e,r){return{op:"set",path:e,value:r}}function Ds(e){return{op:"unset",path:e}}function Os(e,r){return{op:"merge",path:e,value:r}}var xa=S.enum(["set","unset","merge"]),ha=S.object({kind:S.literal("seq"),steps:S.array(S.lazy(()=>xe))}),Ea=S.object({kind:S.literal("if"),cond:c,then:S.lazy(()=>xe),else:S.lazy(()=>xe).optional()}),ga=S.object({kind:S.literal("patch"),op:xa,path:ye,value:c.optional()}),ka=S.object({kind:S.literal("effect"),type:S.string(),params:S.record(S.string(),c)}),Sa=S.object({kind:S.literal("call"),flow:S.string()}),ba=S.object({kind:S.literal("halt"),reason:S.string().optional()}),va=S.object({kind:S.literal("fail"),code:S.string(),message:c.optional()}),xe=S.union([ha,Ea,ga,ka,Sa,ba,va]),Us=S.enum(["seq","if","patch","effect","call","halt","fail"]);var Ft=Ae.object({flow:xe,input:de.optional(),inputType:_.optional(),params:Ae.array(Ae.string()).readonly().optional(),available:c.optional(),dispatchable:c.optional(),description:Ae.string().optional()});var Na=O.object({name:O.string().optional(),description:O.string().optional(),authors:O.array(O.string()).optional()}),It=O.object({id:O.string(),version:O.string(),hash:O.string(),types:O.record(O.string(),At),state:zt,computed:Ct,actions:O.record(O.string(),Ft),meta:Na.optional()});import{z as j}from"zod";import{z as x}from"zod";var We=x.object({code:x.string(),message:x.string(),source:x.object({actionId:x.string(),nodePath:x.string()}),timestamp:x.number(),context:x.record(x.string(),x.unknown()).optional()}),Ra=x.object({nodePath:x.string(),snapshotVersion:x.number()}),Be=x.object({id:x.string(),type:x.string(),params:x.record(x.string(),x.unknown()),actionId:x.string(),flowPosition:Ra,createdAt:x.number()}),Ke=x.object({status:x.enum(["idle","computing","pending","error"]),lastError:We.nullable(),pendingRequirements:x.array(Be),currentAction:x.string().nullable()}),wa=x.object({version:x.number(),timestamp:x.number(),randomSeed:x.string(),schemaHash:x.string()}),np=x.object({data:x.unknown(),computed:x.record(W,x.unknown()),system:Ke,input:x.unknown(),meta:wa});function Dt(){return{status:"idle",lastError:null,pendingRequirements:[],currentAction:null}}var Ta=j.enum(["complete","pending","halted","error"]),ja=j.object({status:Ke.shape.status.optional(),currentAction:j.string().nullable().optional(),lastError:We.nullable().optional(),addRequirements:j.array(Be),removeRequirementIds:j.array(j.string())}),up=j.object({patches:j.array(Pt),systemDelta:ja,trace:nt,status:Ta}),Aa=j.object({code:j.string(),message:j.string(),path:j.string().optional()}),cp=j.object({valid:j.boolean(),errors:j.array(Aa)}),fp=j.object({value:j.unknown(),trace:le,deps:j.array(W)});function Ot(){return{valid:!0,errors:[]}}function Ge(e){return{valid:!1,errors:e}}function Vt(e){let r=[],t=It.safeParse(e);if(!t.success){let b=t.error.issues.map(m=>({code:"SCHEMA_ERROR",message:m.message,path:m.path.map(String).join(".")}));return Ge(b)}let n=t.data;dt(n.id)||r.push({code:"SCHEMA_ERROR",message:"Schema id must be a valid URI or UUID",path:"id"}),mt(n.version)||r.push({code:"SCHEMA_ERROR",message:"Schema version must follow Semantic Versioning 2.0",path:"version"});let o=n.hash;if(!o)r.push({code:"SCHEMA_ERROR",message:"Schema hash is required",path:"hash"});else{let b=e,{hash:m,...E}=b,C=De(E);o!==C&&r.push({code:"V-008",message:`Schema hash mismatch: expected ${C}, got ${o}`,path:"hash"})}Object.keys(n.state.fields).length===0&&r.push({code:"SCHEMA_ERROR",message:"StateSpec.fields must not be empty",path:"state.fields"}),Object.keys(n.computed.fields).length===0&&r.push({code:"SCHEMA_ERROR",message:"ComputedSpec.fields must not be empty",path:"computed.fields"}),Object.keys(n.actions).length===0&&r.push({code:"SCHEMA_ERROR",message:"actions must not be empty",path:"actions"}),r.push(...Pa(n)),r.push(...Ia(n,"state.fields")),r.push(...Da(n)),r.push(...Oa(n)),r.push(...$a(n)),r.push(...Va(n));let a=Re(n.computed),s=we(a);Z(s)&&r.push(s.error);let p=Et(a);if(p)for(let b of p)r.push({code:"V-002",message:`Cyclic dependency: ${b.join(" -> ")}`,path:b[0]});let u=new Set(Object.keys(n.actions)),d=za(n,u);r.push(...d);let h=Ca(n);return r.push(...h),r.length>0?Ge(r):Ot()}function za(e,r){let t=[];for(let[n,o]of Object.entries(e.actions)){let a=he(o.flow);for(let s of a)r.has(s)||t.push({code:"V-004",message:`Unknown flow reference: "${s}" in action "${n}"`,path:`actions.${n}`})}return t}function he(e){let r=[];switch(e.kind){case"call":r.push(e.flow);break;case"seq":for(let t of e.steps)r.push(...he(t));break;case"if":r.push(...he(e.then)),e.else&&r.push(...he(e.else));break}return r}function Ca(e){let r=[],t=new Map;for(let[s,p]of Object.entries(e.actions))t.set(s,he(p.flow));let n=new Set,o=new Set;function a(s,p){n.add(s),o.add(s);let u=t.get(s)??[];for(let d of u)if(n.has(d)){if(o.has(d))return r.push({code:"V-005",message:`Cyclic call detected: ${[...p,d].join(" -> ")}`,path:`actions.${s}`}),!0}else if(a(d,[...p,d]))return!0;return o.delete(s),!1}for(let s of t.keys())n.has(s)||a(s,[s]);return r}function Pa(e){let r=[];if(e.state.fieldTypes)for(let t of Object.keys(e.state.fieldTypes))t in e.state.fields||r.push({code:"V-010",message:`state.fieldTypes.${t} has no matching state.fields entry`,path:`state.fieldTypes.${t}`}),r.push(...Q(e.state.fieldTypes[t],e.types,`state.fieldTypes.${t}`));for(let[t,n]of Object.entries(e.actions)){if(!n.inputType){n.params&&n.params.length>0&&r.push(...$t(t,n,e.types));continue}r.push(...Q(n.inputType,e.types,`actions.${t}.inputType`)),n.params&&n.params.length>0&&r.push(...$t(t,n,e.types))}return r}function $t(e,r,t){let n=r.params??[];if(n.length===0)return[];let o=[],a=new Set;for(let[u,d]of n.entries()){if(a.has(d)){o.push({code:"V-010",message:`Duplicate parameter name "${d}" is not allowed`,path:`actions.${e}.params.${u}`});continue}a.add(d)}let s=null;if(r.inputType?s=Ye(r.inputType,t):r.input?.type==="object"&&r.input.fields&&(s=Object.keys(r.input.fields)),!s)return[...o,{code:"V-010",message:`actions.${e}.params requires an object-shaped input carrier`,path:`actions.${e}.params`}];let p=new Set(s);return[...o,...n.flatMap((u,d)=>p.has(u)?[]:[{code:"V-010",message:`Parameter "${u}" has no matching input field`,path:`actions.${e}.params.${d}`}])]}function Ye(e,r,t=[]){if(e.kind==="ref"){if(t.includes(e.name))return null;let n=r[e.name];return n?Ye(n.definition,r,[...t,e.name]):null}if(e.kind==="union"){let n=e.types.filter(o=>!Fa(o,r,t));return n.length===1?Ye(n[0],r,t):null}return e.kind==="object"?Object.keys(e.fields):null}function Fa(e,r,t=[]){let n=L(e,r,t);return n?n.kind==="primitive"&&n.type==="null"||n.kind==="literal"&&n.value===null:!1}function Q(e,r,t,n=[]){let o=[];if(e.kind==="ref"){if(n.includes(e.name))return o.push({code:"V-010",message:`Cyclic type reference "${e.name}" in typing seam`,path:t}),o;let a=r[e.name];return!a||!L(e,r)?(o.push({code:"V-010",message:`Unknown type reference "${e.name}" in typing seam`,path:t}),o):(o.push(...Q(a.definition,r,t,[...n,e.name])),o)}switch(e.kind){case"array":return Q(e.element,r,`${t}.element`,n);case"record":{let a=[...Q(e.key,r,`${t}.key`,n),...Q(e.value,r,`${t}.value`,n)],s=L(e.key,r);return s&&(s.kind!=="primitive"||s.type!=="string")&&a.push({code:"V-010",message:"Record typing seams require string keys",path:`${t}.key`}),a}case"object":for(let[a,s]of Object.entries(e.fields))o.push(...Q(s.type,r,`${t}.fields.${a}.type`,n));return o;case"union":for(let[a,s]of e.types.entries())o.push(...Q(s,r,`${t}.types.${a}`,n));return o;default:return o}}function Ia(e,r){let t=[],n=e.state,o=(a,s,p)=>{if(!a.required&&a.default===void 0&&t.push({code:"SCHEMA_ERROR",message:"Optional fields must define a default value",path:s}),a.default!==void 0){if(p){let u=$(a.default,p,e.types);u.ok||t.push({code:"V-009",message:`Default value type mismatch: ${u.message}`,path:s})}else if(a.default===null&&a.required!==!1)t.push({code:"V-009",message:`Default value 'null' is not compatible with required field type '${typeof a.type=="string"?a.type:"enum"}'`,path:s});else if(a.default!==null){let u=Y(a.default,a);u.ok||t.push({code:"V-009",message:`Default value type mismatch: ${u.message}`,path:s})}}if(a.type==="object"&&a.fields)for(let[u,d]of Object.entries(a.fields)){let h=p?be(p,e.types,[{kind:"prop",name:u}]):null;o(d,`${s}.${u}`,h??void 0)}if(a.type==="array"&&a.items){let u=p?be(p,e.types,[{kind:"index",index:0}]):null;o(a.items,`${s}[]`,u??void 0)}};for(let[a,s]of Object.entries(n.fields))o(s,`${r}.${a}`,n.fieldTypes?.[a]);return t}function Da(e){let r=[];for(let[t,n]of Object.entries(e.computed.fields))for(let o of n.deps)fe(e.computed,o)||ce(e.state,o,e.types)||r.push({code:"V-001",message:`Unknown dependency path: ${o}`,path:`computed.fields.${t}`});return r}function Oa(e){let r=[];for(let[t,n]of Object.entries(e.computed.fields)){let a=G(n.expr).filter(s=>s.startsWith("$")||fe(e.computed,s)?!1:s.startsWith("input.")||s.startsWith("system.")?!0:!ce(e.state,s,e.types));for(let s of a)r.push({code:"V-003",message:`Unknown path in computed expression: ${s}`,path:`computed.fields.${t}`})}return r}function $a(e){let r=[];for(let[t,n]of Object.entries(e.computed.fields)){let o=G(n.expr),a=new Set(n.deps),s=new Set(o.filter(p=>p.startsWith("$")||p==="input"||p.startsWith("input.")||p==="system"||p.startsWith("system.")||p==="meta"||p.startsWith("meta.")?!1:fe(e.computed,p)?!0:ce(e.state,p,e.types)));for(let p of s)a.has(p)||r.push({code:"V-001",message:`Missing dependency for computed expression path: ${p}`,path:`computed.fields.${t}`})}return r}function Va(e){let r=[];for(let[t,n]of Object.entries(e.actions)){let o=[...yt(n.flow),...n.available?G(n.available):[],...n.dispatchable?G(n.dispatchable):[]];for(let a of o)if(!a.startsWith("$")){if(a==="input"||a.startsWith("input.")){if(n.inputType){let s=a==="input"?"":a.slice(6);ut(n.inputType,e.types,s)||r.push({code:"V-003",message:`Unknown input path: ${a}`,path:`actions.${t}`})}else if(n.input){let s=a==="input"?"":a.slice(6);Me(n.input,s)||r.push({code:"V-003",message:`Unknown input path: ${a}`,path:`actions.${t}`})}continue}fe(e.computed,a)||a.startsWith("system.")||a==="meta"||a.startsWith("meta.")||ce(e.state,a,e.types)||r.push({code:"V-003",message:`Unknown state path: ${a}`,path:`actions.${t}`})}}return r}function qt(e,r,t){let n=ee(r.meta.timestamp);return Mt(e,r,t,n)}function Mt(e,r,t,n){if(e.computed.fields[t]!==void 0)return qa(e,r,t,n);if(t.startsWith("system.")){let a=V(r.system,t.slice(7));return{value:a,trace:g(n,"expr",t,{path:t},a,[]),deps:[]}}if(t.startsWith("input.")||t==="input"){let a=t==="input"?r.input:V(r.input,t.slice(6));return{value:a,trace:g(n,"expr",t,{path:t},a,[]),deps:[]}}let o=V(r.data,t);return{value:o,trace:g(n,"expr",t,{path:t},o,[]),deps:[]}}function qa(e,r,t,n){let o=e.computed.fields[t];if(!o){let d=r.computed[t];return{value:d,trace:g(n,"computed",t,{path:t},d,[]),deps:[]}}let a=U(r,e,null,t,void 0,n),s=f(o.expr,a),p=ae(s)?s.value:null,u=o.deps.map(d=>Mt(e,r,d,n).trace);return{value:p,trace:g(n,"computed",t,{expr:o.expr},p,u),deps:o.deps}}function jp(e){let r={};for(let[t,n]of Object.entries(e.fields))n.default!==void 0&&(r[t]=n.default);return r}import{z as re}from"zod";var Cp=re.object({now:re.number(),randomSeed:re.string(),env:re.record(re.string(),re.unknown()).optional(),durationMs:re.number().optional()});function il(e,r,t){return{data:e,computed:{},system:Dt(),input:void 0,meta:{version:0,timestamp:t.now,randomSeed:t.randomSeed,schemaHash:r}}}function sl(e,r,t){return t===void 0&&typeof r=="string"?{type:e,input:void 0,intentId:r}:t===void 0?{type:e,input:r,intentId:""}:{type:e,input:r,intentId:t}}function yl(){return{compute:bt,computeSync:He,apply:jt,applySystemDelta:Te,validate:Vt,explain:qt,isActionAvailable:gt,getAvailableActions:St,isIntentDispatchable:kt}}export{yo as AbsExpr,Ft as ActionSpec,so as AddExpr,no as AndExpr,Ko as AppendExpr,Vo as AtExpr,Sa as CallFlow,Eo as CeilExpr,ua as CoalesceExpr,up as ComputeResult,Ta as ComputeStatus,ma as ComputedFieldSpec,Ct as ComputedSpec,Ro as ConcatExpr,Ua as CoreErrorCode,uo as DivExpr,It as DomainSchema,ka as EffectFlow,Po as EndsWithExpr,ra as EntriesExpr,Bn as EnumFieldType,Jn as EqExpr,We as ErrorValue,Wo as EveryExpr,fp as ExplainResult,Ns as ExprKind,c as ExprNodeSchema,va as FailFlow,Qo as FieldExpr,de as FieldSpec,Kn as FieldType,Lo as FilterExpr,Ho as FindExpr,qo as FirstExpr,Jo as FlatExpr,ho as FloorExpr,Us as FlowKind,xe as FlowNodeSchema,Ra as FlowPosition,sa as FromEntriesExpr,Yn as GetExpr,Qn as GtExpr,eo as GteExpr,ba as HaltFlow,oa as HasKeyExpr,Cp as HostContext,io as IfExpr,Ea as IfFlow,Zo as IncludesExpr,Io as IndexOfExpr,Cs as Intent,la as IsNullExpr,ea as KeysExpr,Mo as LastExpr,$o as LenExpr,Gn as LitExpr,to as LtExpr,ro as LteExpr,_o as MapExpr,No as MaxArrayExpr,mo as MaxExpr,na as MergeExpr,vo as MinArrayExpr,fo as MinExpr,co as ModExpr,lo as MulExpr,xo as NegExpr,Xn as NeqExpr,ao as NotExpr,Xo as ObjectExpr,ia as OmitExpr,oo as OrExpr,Pt as Patch,ga as PatchFlow,xa as PatchOp,ye as PatchPath,ya as PatchSegment,aa as PickExpr,So as PowExpr,Wn as PrimitiveFieldType,Do as ReplaceExpr,Be as Requirement,mi as Result,Go as ReverseExpr,go as RoundExpr,Na as SchemaMeta,W as SemanticPath,ha as SeqFlow,Uo as SliceExpr,np as Snapshot,wa as SnapshotMeta,Bo as SomeExpr,Oo as SplitExpr,ko as SqrtExpr,Co as StartsWithExpr,zt as StateSpec,Fo as StrIncludesExpr,zo as StrLenExpr,po as SubExpr,wo as SubstringExpr,bo as SumArrayExpr,ja as SystemDelta,Ke as SystemState,da as ToBooleanExpr,jo as ToLowerCaseExpr,fa as ToNumberExpr,ca as ToStringExpr,Ao as ToUpperCaseExpr,nt as TraceGraph,le as TraceNode,Jt as TraceNodeKind,Xt as TraceTermination,To as TrimExpr,_ as TypeDefinition,At as TypeSpec,pa as TypeofExpr,Yo as UniqueExpr,Aa as ValidationError,cp as ValidationResult,ta as ValuesExpr,jt as apply,Te as applySystemDelta,Re as buildDependencyGraph,Wa as canonicalEqual,ne as compareUnicodeCodePoints,bt as compute,He as computeSync,U as createContext,yl as createCore,v as createError,xt as createFlowState,Dt as createInitialSystemState,sl as createIntent,il as createSnapshot,ee as createTraceContext,g as createTraceNode,Et as detectCycles,te as err,se as evaluateComputed,f as evaluateExpr,Oi as evaluateFlow,ie as evaluateFlowSync,Bi as evaluateSingleComputed,qt as explain,jp as extractDefaults,Ha as fromCanonical,Ja as generateRequirementId,tt as generateRequirementIdSync,rt as generateTraceId,St as getAvailableActions,rr as getByPatchPath,V as getByPath,qi as getTransitiveDeps,si as hasPath,Yt as hashSchema,Ga as hashSchemaEffective,Ya as hashSchemaEffectiveSync,De as hashSchemaSync,Fs as indexSegment,Ge as invalidResult,gt as isActionAvailable,Z as isErr,Za as isErrorValue,kt as isIntentDispatchable,ae as isOk,pt as isSafePatchPath,oi as joinPath,li as lastSegment,Se as mergeAtPatchPath,ii as mergeAtPath,Os as mergePatch,l as ok,pi as parentPath,D as parsePath,ge as patchPathToDisplayString,Ps as propSegment,st as semanticPathToPatchPath,ue as setByPatchPath,Qt as setByPath,Is as setPatch,Qe as sha256,et as sha256Sync,Fe as sortKeys,pe as toCanonical,_a as toJcs,we as topologicalSort,ke as unsetByPatchPath,ai as unsetByPath,Ds as unsetPatch,Ot as validResult,Vt as validate,vt as validateIntentInput,X as withCollectionContext,Ee as withNodePath,Oe as withSnapshot};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/schema/trace.ts","../src/utils/canonical.ts","../src/utils/hash.ts","../src/evaluator/context.ts","../src/utils/path.ts","../src/utils/patch-path.ts","../src/schema/common.ts","../src/evaluator/expr.ts","../src/core/type-definition-utils.ts","../src/core/validation-utils.ts","../src/evaluator/flow.ts","../src/evaluator/dag.ts","../src/evaluator/computed.ts","../src/core/action-availability.ts","../src/core/system-delta.ts","../src/core/compute.ts","../src/core/apply.ts","../src/schema/domain.ts","../src/schema/field.ts","../src/schema/type-spec.ts","../src/schema/computed.ts","../src/schema/expr.ts","../src/schema/action.ts","../src/schema/flow.ts","../src/schema/patch.ts","../src/schema/result.ts","../src/schema/snapshot.ts","../src/core/validate.ts","../src/core/explain.ts","../src/schema/defaults.ts","../src/schema/host-context.ts","../src/factories.ts","../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { ErrorValue } from \"./schema/snapshot.js\";\n\n/**\n * Core error codes\n */\nexport const CoreErrorCode = z.enum([\n \"VALIDATION_ERROR\",\n \"PATH_NOT_FOUND\",\n \"TYPE_MISMATCH\",\n \"DIVISION_BY_ZERO\",\n \"INDEX_OUT_OF_BOUNDS\",\n \"UNKNOWN_ACTION\",\n \"ACTION_UNAVAILABLE\",\n \"INVALID_INPUT\",\n \"CYCLIC_DEPENDENCY\",\n \"UNKNOWN_FLOW\",\n \"CYCLIC_CALL\",\n \"UNKNOWN_EFFECT\",\n \"INTERNAL_ERROR\",\n]);\nexport type CoreErrorCode = z.infer<typeof CoreErrorCode>;\n\n/**\n * Create an error value (errors are values, not exceptions)\n */\nexport function createError(\n code: CoreErrorCode,\n message: string,\n actionId: string,\n nodePath: string,\n timestamp: number,\n context?: Record<string, unknown>\n): ErrorValue {\n return {\n code,\n message,\n source: {\n actionId,\n nodePath,\n },\n timestamp,\n context,\n };\n}\n\n/**\n * Check if a value is an ErrorValue\n */\nexport function isErrorValue(value: unknown): value is ErrorValue {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n return (\n typeof obj.code === \"string\" &&\n typeof obj.message === \"string\" &&\n typeof obj.source === \"object\" &&\n obj.source !== null &&\n typeof (obj.source as Record<string, unknown>).actionId === \"string\" &&\n typeof (obj.source as Record<string, unknown>).nodePath === \"string\" &&\n typeof obj.timestamp === \"number\"\n );\n}\n","import { z } from \"zod\";\nimport { generateTraceId } from \"../utils/hash.js\";\n\n/**\n * TraceNodeKind - Types of trace nodes\n */\nexport const TraceNodeKind = z.enum([\n \"expr\", // Expression evaluation\n \"computed\", // Computed field evaluation\n \"flow\", // Flow execution\n \"patch\", // State mutation\n \"effect\", // Effect declaration\n \"branch\", // Conditional branch taken\n \"call\", // Flow call\n \"halt\", // Normal termination\n \"error\", // Error occurred\n]);\nexport type TraceNodeKind = z.infer<typeof TraceNodeKind>;\n\n/**\n * TraceNode - A single node in the execution trace.\n * Enables explainability - every computation produces a trace.\n */\nexport type TraceNode = {\n /**\n * Unique identifier for this trace node\n */\n id: string;\n\n /**\n * Type of trace node\n */\n kind: TraceNodeKind;\n\n /**\n * Path in the schema that produced this trace\n */\n sourcePath: string;\n\n /**\n * Input values at this point\n */\n inputs: Record<string, unknown>;\n\n /**\n * Output value produced\n */\n output: unknown;\n\n /**\n * Child trace nodes\n */\n children: TraceNode[];\n\n /**\n * Timestamp\n */\n timestamp: number;\n};\n\nexport const TraceNode: z.ZodType<TraceNode> = z.lazy(() =>\n z.object({\n id: z.string(),\n kind: TraceNodeKind,\n sourcePath: z.string(),\n inputs: z.record(z.string(), z.unknown()),\n output: z.unknown(),\n children: z.array(TraceNode),\n timestamp: z.number(),\n })\n);\n\n/**\n * TraceTermination - How the computation ended\n */\nexport const TraceTermination = z.enum([\"complete\", \"effect\", \"halt\", \"error\"]);\nexport type TraceTermination = z.infer<typeof TraceTermination>;\n\n/**\n * TraceGraph - Complete trace of a computation\n */\nexport const TraceGraph = z.object({\n /**\n * Root trace node\n */\n root: TraceNode,\n\n /**\n * All nodes indexed by ID for quick lookup\n */\n nodes: z.record(z.string(), TraceNode),\n\n /**\n * The intent that triggered this computation\n */\n intent: z.object({\n type: z.string(),\n input: z.unknown(),\n }),\n\n /**\n * Snapshot version at start\n */\n baseVersion: z.number(),\n\n /**\n * Snapshot version at end\n */\n resultVersion: z.number(),\n\n /**\n * Total computation time (ms)\n */\n duration: z.number(),\n\n /**\n * Termination reason\n */\n terminatedBy: TraceTermination,\n});\nexport type TraceGraph = z.infer<typeof TraceGraph>;\n\n/**\n * TraceContext - Deterministic trace ID generation\n */\nexport type TraceContext = {\n readonly nextId: () => string;\n readonly timestamp: number;\n};\n\n/**\n * Create a trace context for a single compute pass\n */\nexport function createTraceContext(timestamp: number): TraceContext {\n let index = 0;\n return {\n timestamp,\n nextId: () => generateTraceId(index++),\n };\n}\n\n/**\n * Create a trace node\n */\nexport function createTraceNode(\n trace: TraceContext,\n kind: TraceNodeKind,\n sourcePath: string,\n inputs: Record<string, unknown>,\n output: unknown,\n children: TraceNode[] = []\n): TraceNode {\n return {\n id: trace.nextId(),\n kind,\n sourcePath,\n inputs,\n output,\n children,\n timestamp: trace.timestamp,\n };\n}\n","/**\n * Canonical form utilities for deterministic hashing\n *\n * Algorithm:\n * 1. Sort all object keys alphabetically (recursive)\n * 2. Remove all keys with undefined value\n * 3. Preserve keys with null value\n * 4. Serialize using JSON with no whitespace\n */\n\n/**\n * Recursively sort object keys alphabetically\n */\nexport function sortKeys(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortKeys);\n }\n\n if (typeof obj === \"object\") {\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj as Record<string, unknown>).sort();\n\n for (const key of keys) {\n const value = (obj as Record<string, unknown>)[key];\n // Remove undefined values\n if (value !== undefined) {\n sorted[key] = sortKeys(value);\n }\n }\n\n return sorted;\n }\n\n return obj;\n}\n\n/**\n * Convert object to canonical JSON string\n * - Keys are sorted alphabetically\n * - Undefined values are removed\n * - No whitespace\n */\nexport function toCanonical(obj: unknown): string {\n const sorted = sortKeys(obj);\n return JSON.stringify(sorted);\n}\n\n/**\n * Canonicalize JSON per RFC 8785 (JCS)\n * - Objects: keys sorted by Unicode code points\n * - Arrays: preserve order\n * - Undefined/function/symbol: omitted in objects, null in arrays\n * - Non-finite numbers: null\n */\nexport function toJcs(value: unknown): string {\n return serializeJcsValue(value);\n}\n\nfunction serializeJcsValue(value: unknown): string {\n if (value === null) return \"null\";\n\n const valueType = typeof value;\n switch (valueType) {\n case \"string\":\n return JSON.stringify(value);\n case \"number\":\n return Number.isFinite(value) ? JSON.stringify(value) : \"null\";\n case \"boolean\":\n return value ? \"true\" : \"false\";\n case \"undefined\":\n return \"null\";\n case \"object\":\n if (Array.isArray(value)) {\n return serializeJcsArray(value);\n }\n return serializeJcsObject(value as Record<string, unknown>);\n default:\n return \"null\";\n }\n}\n\nfunction serializeJcsArray(values: unknown[]): string {\n const items = values.map((item) => {\n if (item === undefined || typeof item === \"function\" || typeof item === \"symbol\") {\n return \"null\";\n }\n return serializeJcsValue(item);\n });\n return `[${items.join(\",\")}]`;\n}\n\nfunction serializeJcsObject(obj: Record<string, unknown>): string {\n const keys = Object.keys(obj).sort(compareUnicodeCodePoints);\n const parts: string[] = [];\n\n for (const key of keys) {\n const value = obj[key];\n if (value === undefined || typeof value === \"function\" || typeof value === \"symbol\") {\n continue;\n }\n parts.push(`${JSON.stringify(key)}:${serializeJcsValue(value)}`);\n }\n\n return `{${parts.join(\",\")}}`;\n}\n\nexport function compareUnicodeCodePoints(a: string, b: string): number {\n const aPoints = Array.from(a);\n const bPoints = Array.from(b);\n const length = Math.min(aPoints.length, bPoints.length);\n\n for (let i = 0; i < length; i++) {\n const aCode = aPoints[i].codePointAt(0) ?? 0;\n const bCode = bPoints[i].codePointAt(0) ?? 0;\n if (aCode !== bCode) {\n return aCode - bCode;\n }\n }\n\n return aPoints.length - bPoints.length;\n}\n\n/**\n * Parse canonical JSON string\n */\nexport function fromCanonical<T>(canonical: string): T {\n return JSON.parse(canonical) as T;\n}\n\n/**\n * Check if two objects are equal in canonical form\n */\nexport function canonicalEqual(a: unknown, b: unknown): boolean {\n return toCanonical(a) === toCanonical(b);\n}\n","import { toCanonical } from \"./canonical.js\";\nimport type { DomainSchema } from \"../schema/domain.js\";\n\nexport type SchemaHashMode = \"semantic\" | \"effective\";\n\nexport type SchemaHashInput = {\n id: string;\n version: string;\n types: Record<string, unknown>;\n state: { fields: Record<string, unknown> };\n computed: {\n fields: Record<string, { deps: string[]; expr: unknown; description?: string }>;\n };\n actions: Record<string, unknown>;\n meta?: {\n name?: string;\n description?: string;\n authors?: string[];\n };\n};\n\nfunction normalizeSchemaForHash(\n schema: SchemaHashInput,\n mode: SchemaHashMode\n): SchemaHashInput {\n if (mode === \"effective\") {\n return schema;\n }\n\n const fields = schema.state?.fields ?? {};\n const filteredEntries = Object.entries(fields).filter(([key]) => !key.startsWith(\"$\"));\n if (filteredEntries.length === Object.keys(fields).length) {\n return schema;\n }\n\n return {\n ...schema,\n state: {\n ...schema.state,\n fields: Object.fromEntries(filteredEntries),\n },\n };\n}\n\n/**\n * SHA-256 hash using Web Crypto API\n * Works in both browser and Node.js\n */\nexport async function sha256(message: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(message);\n\n // Use Web Crypto API\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", msgBuffer);\n\n // Convert to hex string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nconst SHA256_INIT = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\nfunction sha256RotateRight(value: number, shift: number): number {\n return (value >>> shift) | (value << (32 - shift));\n}\n\nfunction sha256Bytes(data: Uint8Array): Uint8Array {\n const bitLen = data.length * 8;\n const withOne = data.length + 1;\n const padLen = withOne % 64 <= 56 ? 56 - (withOne % 64) : 120 - (withOne % 64);\n const totalLen = withOne + padLen + 8;\n const padded = new Uint8Array(totalLen);\n padded.set(data);\n padded[data.length] = 0x80;\n\n const bitLenHi = Math.floor(bitLen / 0x100000000);\n const bitLenLo = bitLen >>> 0;\n padded[totalLen - 8] = (bitLenHi >>> 24) & 0xff;\n padded[totalLen - 7] = (bitLenHi >>> 16) & 0xff;\n padded[totalLen - 6] = (bitLenHi >>> 8) & 0xff;\n padded[totalLen - 5] = bitLenHi & 0xff;\n padded[totalLen - 4] = (bitLenLo >>> 24) & 0xff;\n padded[totalLen - 3] = (bitLenLo >>> 16) & 0xff;\n padded[totalLen - 2] = (bitLenLo >>> 8) & 0xff;\n padded[totalLen - 1] = bitLenLo & 0xff;\n\n const h = new Uint32Array(SHA256_INIT);\n const view = new DataView(padded.buffer);\n\n for (let offset = 0; offset < padded.length; offset += 64) {\n const w = new Uint32Array(64);\n for (let i = 0; i < 16; i++) {\n w[i] = view.getUint32(offset + i * 4);\n }\n for (let i = 16; i < 64; i++) {\n const s0 = sha256RotateRight(w[i - 15], 7) ^ sha256RotateRight(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = sha256RotateRight(w[i - 2], 17) ^ sha256RotateRight(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n\n let a = h[0];\n let b = h[1];\n let c = h[2];\n let d = h[3];\n let e = h[4];\n let f = h[5];\n let g = h[6];\n let hh = h[7];\n\n for (let i = 0; i < 64; i++) {\n const s1 = sha256RotateRight(e, 6) ^ sha256RotateRight(e, 11) ^ sha256RotateRight(e, 25);\n const ch = (e & f) ^ (~e & g);\n const t1 = (hh + s1 + ch + SHA256_K[i] + w[i]) >>> 0;\n const s0 = sha256RotateRight(a, 2) ^ sha256RotateRight(a, 13) ^ sha256RotateRight(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const t2 = (s0 + maj) >>> 0;\n\n hh = g;\n g = f;\n f = e;\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) >>> 0;\n }\n\n h[0] = (h[0] + a) >>> 0;\n h[1] = (h[1] + b) >>> 0;\n h[2] = (h[2] + c) >>> 0;\n h[3] = (h[3] + d) >>> 0;\n h[4] = (h[4] + e) >>> 0;\n h[5] = (h[5] + f) >>> 0;\n h[6] = (h[6] + g) >>> 0;\n h[7] = (h[7] + hh) >>> 0;\n }\n\n const out = new Uint8Array(32);\n const outView = new DataView(out.buffer);\n for (let i = 0; i < h.length; i++) {\n outView.setUint32(i * 4, h[i]);\n }\n return out;\n}\n\n/**\n * SHA-256 hash using a synchronous pure JS implementation\n */\nexport function sha256Sync(message: string): string {\n const data = new TextEncoder().encode(message);\n const hash = sha256Bytes(data);\n let hex = \"\";\n for (const byte of hash) {\n hex += byte.toString(16).padStart(2, \"0\");\n }\n return hex;\n}\n\n/**\n * Hash a schema in canonical form\n */\nexport async function hashSchema(\n schema: SchemaHashInput,\n mode: SchemaHashMode = \"semantic\"\n): Promise<string> {\n // Create canonical form without the hash field\n const canonical = toCanonical(normalizeSchemaForHash(schema, mode));\n return sha256(canonical);\n}\n\n/**\n * Hash a schema in canonical form (sync)\n */\nexport function hashSchemaSync(\n schema: SchemaHashInput,\n mode: SchemaHashMode = \"semantic\"\n): string {\n const canonical = toCanonical(normalizeSchemaForHash(schema, mode));\n return sha256Sync(canonical);\n}\n\nexport async function hashSchemaEffective(\n schema: SchemaHashInput\n): Promise<string> {\n return hashSchema(schema, \"effective\");\n}\n\nexport function hashSchemaEffectiveSync(\n schema: SchemaHashInput\n): string {\n return hashSchemaSync(schema, \"effective\");\n}\n\n/**\n * Generate deterministic requirement ID\n * Based on: schemaHash, intentId, actionId, flowNodePath\n */\nexport async function generateRequirementId(\n schemaHash: string,\n intentId: string,\n actionId: string,\n flowNodePath: string\n): Promise<string> {\n const input = `${schemaHash}:${intentId}:${actionId}:${flowNodePath}`;\n const hash = await sha256(input);\n // Return first 16 characters for brevity\n return `req-${hash.slice(0, 16)}`;\n}\n\n/**\n * Generate deterministic requirement ID (sync)\n */\nexport function generateRequirementIdSync(\n schemaHash: string,\n intentId: string,\n actionId: string,\n flowNodePath: string\n): string {\n const input = `${schemaHash}:${intentId}:${actionId}:${flowNodePath}`;\n const hash = sha256Sync(input);\n return `req-${hash.slice(0, 16)}`;\n}\n\n/**\n * Generate a trace node ID\n */\nexport function generateTraceId(index: number = 0): string {\n return `trace-${index}`;\n}\n","import type { Snapshot } from \"../schema/snapshot.js\";\nimport type { DomainSchema } from \"../schema/domain.js\";\nimport { type TraceContext, createTraceContext } from \"../schema/trace.js\";\n\n/**\n * Evaluation context for expressions and flows\n */\nexport type EvalContext = {\n /**\n * Current snapshot state\n */\n readonly snapshot: Snapshot;\n\n /**\n * Domain schema\n */\n readonly schema: DomainSchema;\n\n /**\n * Current action being processed (if any)\n */\n readonly currentAction: string | null;\n\n /**\n * Current node path in the flow (for tracing)\n */\n readonly nodePath: string;\n\n /**\n * Intent ID for the current intent (for re-entry safety)\n */\n readonly intentId?: string;\n\n /**\n * UUID generator counter (for deterministic UUID generation)\n */\n uuidCounter?: number;\n\n /**\n * Trace context for deterministic trace ID generation\n */\n readonly trace: TraceContext;\n\n /**\n * Collection context variables (for filter, map, find, etc.)\n */\n readonly $item?: unknown;\n readonly $index?: number;\n readonly $array?: unknown[];\n};\n\n/**\n * Create a new evaluation context\n *\n * @param timestampOrTrace - Required timestamp or TraceContext for deterministic tracing.\n * MUST be provided by Host via HostContext.now to ensure determinism.\n */\nexport function createContext(\n snapshot: Snapshot,\n schema: DomainSchema,\n currentAction: string | null,\n nodePath: string,\n intentId: string | undefined,\n timestampOrTrace: number | TraceContext\n): EvalContext {\n return {\n snapshot,\n schema,\n currentAction,\n nodePath,\n intentId,\n uuidCounter: 0,\n trace: typeof timestampOrTrace === \"object\"\n ? timestampOrTrace\n : createTraceContext(timestampOrTrace),\n };\n}\n\n/**\n * Create context with collection variables for filter/map/find/etc.\n */\nexport function withCollectionContext(\n ctx: EvalContext,\n item: unknown,\n index: number,\n array: unknown[]\n): EvalContext {\n return {\n ...ctx,\n $item: item,\n $index: index,\n $array: array,\n };\n}\n\n/**\n * Update context with new snapshot\n */\nexport function withSnapshot(ctx: EvalContext, snapshot: Snapshot): EvalContext {\n return { ...ctx, snapshot };\n}\n\n/**\n * Update context with new node path\n */\nexport function withNodePath(ctx: EvalContext, nodePath: string): EvalContext {\n return { ...ctx, nodePath };\n}\n","import type { SemanticPath } from \"../schema/common.js\";\n\n/**\n * Parse a dot-separated path into segments.\n *\n * Supports escaping literal dots inside segments via backslash (for example `a\\\\.b` -> `a.b`).\n */\nexport function parsePath(path: SemanticPath): string[] {\n if (!path) return [];\n\n const segments: string[] = [];\n let current = \"\";\n let escaped = false;\n\n for (const char of path) {\n if (escaped) {\n if (char === \".\" || char === \"\\\\\") {\n current += char;\n } else {\n current += `\\\\${char}`;\n }\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === \".\") {\n segments.push(current);\n current = \"\";\n continue;\n }\n\n current += char;\n }\n\n if (escaped) {\n current += \"\\\\\";\n }\n\n segments.push(current);\n return segments;\n}\n\nfunction escapePathSegment(segment: string): string {\n return segment.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\".\", \"\\\\.\");\n}\n\n/**\n * Join path segments into a semantic path\n */\nexport function joinPath(...segments: string[]): SemanticPath {\n const escapedSegments = segments.filter(Boolean).map(escapePathSegment);\n return escapedSegments.join(\".\");\n}\n\n/**\n * Get value at path from object\n * Returns undefined for non-existent paths (never throws)\n */\nexport function getByPath(obj: unknown, path: SemanticPath): unknown {\n if (!path) return obj;\n\n const segments = parsePath(path);\n let current: unknown = obj;\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n\n if (typeof current === \"object\") {\n current = (current as Record<string, unknown>)[segment];\n } else {\n return undefined;\n }\n }\n\n return current;\n}\n\n/**\n * Immutably set value at path\n * Creates intermediate objects as needed\n */\nexport function setByPath(obj: unknown, path: SemanticPath, value: unknown): unknown {\n if (!path) return value;\n\n const segments = parsePath(path);\n return setByPathSegments(obj, segments, value);\n}\n\nfunction setByPathSegments(obj: unknown, segments: string[], value: unknown): unknown {\n if (segments.length === 0) return value;\n\n const [head, ...tail] = segments;\n const current = obj !== null && typeof obj === \"object\" ? obj : {};\n\n if (tail.length === 0) {\n return { ...current, [head]: value };\n }\n\n const nested = (current as Record<string, unknown>)[head];\n return {\n ...current,\n [head]: setByPathSegments(nested, tail, value),\n };\n}\n\n/**\n * Immutably remove value at path\n */\nexport function unsetByPath(obj: unknown, path: SemanticPath): unknown {\n if (!path) return undefined;\n\n const segments = parsePath(path);\n return unsetByPathSegments(obj, segments);\n}\n\nfunction unsetByPathSegments(obj: unknown, segments: string[]): unknown {\n if (segments.length === 0 || obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n const [head, ...tail] = segments;\n const current = obj as Record<string, unknown>;\n\n if (tail.length === 0) {\n const { [head]: _, ...rest } = current;\n return rest;\n }\n\n const nested = current[head];\n return {\n ...current,\n [head]: unsetByPathSegments(nested, tail),\n };\n}\n\n/**\n * Immutably shallow merge at path\n */\nexport function mergeAtPath(\n obj: unknown,\n path: SemanticPath,\n value: Record<string, unknown>\n): unknown {\n const existing = getByPath(obj, path);\n const merged =\n existing !== null && typeof existing === \"object\"\n ? { ...existing, ...value }\n : value;\n\n return setByPath(obj, path, merged);\n}\n\n/**\n * Check if a path exists in an object\n */\nexport function hasPath(obj: unknown, path: SemanticPath): boolean {\n if (!path) return obj !== undefined;\n\n const segments = parsePath(path);\n let current: unknown = obj;\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return false;\n }\n\n if (typeof current !== \"object\") {\n return false;\n }\n\n if (!(segment in (current as Record<string, unknown>))) {\n return false;\n }\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n return true;\n}\n\n/**\n * Get parent path\n */\nexport function parentPath(path: SemanticPath): SemanticPath {\n const segments = parsePath(path);\n return joinPathPreserveEmptySegments(...segments.slice(0, -1));\n}\n\n/**\n * Get last segment of path\n */\nexport function lastSegment(path: SemanticPath): string {\n const segments = parsePath(path);\n return segments[segments.length - 1] ?? \"\";\n}\n\nfunction joinPathPreserveEmptySegments(...segments: string[]): SemanticPath {\n return segments.map(escapePathSegment).join(\".\");\n}\n","import type { PatchPath, PatchSegment } from \"../schema/patch.js\";\nimport { parsePath } from \"./path.js\";\n\nconst UNSAFE_PROP_SEGMENTS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\n/**\n * Render PatchPath for logs and error messages only.\n */\nexport function patchPathToDisplayString(path: PatchPath): string {\n let output = \"\";\n\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n if (segment.kind === \"prop\") {\n output += i === 0 ? segment.name : `.${segment.name}`;\n continue;\n }\n output += `[${segment.index}]`;\n }\n\n return output;\n}\n\n/**\n * Convert a legacy semantic string path into PatchPath segments.\n * This helper exists for internal bridging only.\n */\nexport function semanticPathToPatchPath(path: string): PatchPath {\n const segments = parsePath(path);\n if (segments.length === 0) {\n return [{ kind: \"prop\", name: path }];\n }\n\n const patchPath: PatchSegment[] = [];\n for (const segment of segments) {\n const parsed = parseBracketIndexedSegment(segment);\n if (parsed) {\n patchPath.push(...parsed);\n continue;\n }\n patchPath.push({ kind: \"prop\", name: segment });\n }\n\n return patchPath.length > 0 ? patchPath : [{ kind: \"prop\", name: path }];\n}\n\nexport function isSafePatchPath(path: PatchPath): boolean {\n return path.every((segment) => segment.kind !== \"prop\" || !UNSAFE_PROP_SEGMENTS.has(segment.name));\n}\n\nexport function getByPatchPath(obj: unknown, path: PatchPath): unknown {\n let current: unknown = obj;\n\n for (const segment of path) {\n if (segment.kind === \"prop\") {\n if (current === null || typeof current !== \"object\" || Array.isArray(current)) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment.name];\n continue;\n }\n\n if (!Array.isArray(current)) {\n return undefined;\n }\n current = current[segment.index];\n }\n\n return current;\n}\n\nexport function setByPatchPath(obj: unknown, path: PatchPath, value: unknown): unknown {\n return setBySegments(obj, path, value);\n}\n\nexport function unsetByPatchPath(obj: unknown, path: PatchPath): unknown {\n return unsetBySegments(obj, path);\n}\n\nexport function mergeAtPatchPath(\n obj: unknown,\n path: PatchPath,\n value: Record<string, unknown>\n): unknown {\n const existing = getByPatchPath(obj, path);\n const merged = isRecord(existing) ? { ...existing, ...value } : value;\n return setByPatchPath(obj, path, merged);\n}\n\nfunction setBySegments(obj: unknown, segments: PatchPath, value: unknown): unknown {\n if (segments.length === 0) {\n return value;\n }\n\n const [head, ...tail] = segments;\n\n if (head.kind === \"prop\") {\n const current = isRecord(obj) ? obj : {};\n const nextValue = setBySegments(current[head.name], tail, value);\n return {\n ...current,\n [head.name]: nextValue,\n };\n }\n\n const current = Array.isArray(obj) ? [...obj] : [];\n current[head.index] = setBySegments(current[head.index], tail, value);\n return current;\n}\n\nfunction unsetBySegments(obj: unknown, segments: PatchPath): unknown {\n if (segments.length === 0) {\n return obj;\n }\n\n const [head, ...tail] = segments;\n\n if (head.kind === \"prop\") {\n if (!isRecord(obj)) {\n return obj;\n }\n\n if (tail.length === 0) {\n const { [head.name]: _removed, ...rest } = obj;\n return rest;\n }\n\n return {\n ...obj,\n [head.name]: unsetBySegments(obj[head.name], tail),\n };\n }\n\n if (!Array.isArray(obj)) {\n return obj;\n }\n\n const next = [...obj];\n if (tail.length === 0) {\n if (head.index >= 0 && head.index < next.length) {\n // Preserve index stability for same-apply patch ordering.\n // `unset` on arrays removes the slot without shifting subsequent indices.\n delete next[head.index];\n }\n return next;\n }\n\n next[head.index] = unsetBySegments(next[head.index], tail);\n return next;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseBracketIndexedSegment(segment: string): PatchSegment[] | null {\n if (!segment.includes(\"[\")) {\n return null;\n }\n if (segment.includes(\"\\\\[\") || segment.includes(\"\\\\]\")) {\n return null;\n }\n\n const parsed: PatchSegment[] = [];\n let cursor = 0;\n let sawIndex = false;\n\n while (cursor < segment.length) {\n const open = segment.indexOf(\"[\", cursor);\n if (open === -1) {\n const tail = segment.slice(cursor);\n if (tail.length === 0) {\n break;\n }\n if (sawIndex) {\n return null;\n }\n parsed.push({ kind: \"prop\", name: tail });\n break;\n }\n\n const prefix = segment.slice(cursor, open);\n if (prefix.length > 0) {\n if (sawIndex) {\n return null;\n }\n parsed.push({ kind: \"prop\", name: prefix });\n }\n\n const close = segment.indexOf(\"]\", open + 1);\n if (close === -1) {\n return null;\n }\n\n const indexText = segment.slice(open + 1, close);\n if (!/^[0-9]+$/.test(indexText)) {\n return null;\n }\n\n parsed.push({ kind: \"index\", index: Number(indexText) });\n sawIndex = true;\n cursor = close + 1;\n }\n\n return parsed.length > 0 ? parsed : null;\n}\n","import { z } from \"zod\";\n\n/**\n * Dot-separated path for accessing values (e.g., \"user.profile.name\")\n */\nexport const SemanticPath = z.string().min(1);\nexport type SemanticPath = z.infer<typeof SemanticPath>;\n\n/**\n * Result type for functions that can fail without throwing\n */\nexport const Result = <T extends z.ZodTypeAny, E extends z.ZodTypeAny>(\n valueSchema: T,\n errorSchema: E\n) =>\n z.discriminatedUnion(\"ok\", [\n z.object({ ok: z.literal(true), value: valueSchema }),\n z.object({ ok: z.literal(false), error: errorSchema }),\n ]);\n\nexport type Result<T, E> =\n | { ok: true; value: T }\n | { ok: false; error: E };\n\n/**\n * Helper functions for Result type\n */\nexport const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });\nexport const err = <E>(error: E): Result<never, E> => ({ ok: false, error });\n\nexport const isOk = <T, E>(result: Result<T, E>): result is { ok: true; value: T } =>\n result.ok;\n\nexport const isErr = <T, E>(result: Result<T, E>): result is { ok: false; error: E } =>\n !result.ok;\n","import type { ExprNode } from \"../schema/expr.js\";\nimport type { ErrorValue } from \"../schema/snapshot.js\";\nimport type { Result } from \"../schema/common.js\";\nimport { ok, err } from \"../schema/common.js\";\nimport { createError } from \"../errors.js\";\nimport { getByPath } from \"../utils/path.js\";\nimport { compareUnicodeCodePoints } from \"../utils/canonical.js\";\nimport { type EvalContext, withCollectionContext } from \"./context.js\";\n\nexport type ExprResult = Result<unknown, ErrorValue>;\n\n/**\n * Evaluate an expression node\n * All expressions are pure and total (always return a value or error)\n */\nexport function evaluateExpr(expr: ExprNode, ctx: EvalContext): ExprResult {\n switch (expr.kind) {\n // Literals\n case \"lit\":\n return ok(expr.value);\n\n case \"get\":\n return evaluateGet(expr.path, ctx);\n\n // Comparison\n case \"eq\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => a === b);\n case \"neq\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => a !== b);\n case \"gt\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) > toNumber(b));\n case \"gte\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) >= toNumber(b));\n case \"lt\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) < toNumber(b));\n case \"lte\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) <= toNumber(b));\n\n // Logical\n case \"and\":\n return evaluateAnd(expr.args, ctx);\n case \"or\":\n return evaluateOr(expr.args, ctx);\n case \"not\":\n return evaluateNot(expr.arg, ctx);\n\n // Conditional\n case \"if\":\n return evaluateIf(expr, ctx);\n\n // Arithmetic\n case \"add\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) + toNumber(b));\n case \"sub\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) - toNumber(b));\n case \"mul\":\n return evaluateBinary(expr.left, expr.right, ctx, (a, b) => toNumber(a) * toNumber(b));\n case \"div\":\n return evaluateDiv(expr.left, expr.right, ctx);\n case \"mod\":\n return evaluateMod(expr.left, expr.right, ctx);\n case \"min\":\n return evaluateMin(expr.args, ctx);\n case \"max\":\n return evaluateMax(expr.args, ctx);\n case \"abs\":\n return evaluateAbs(expr.arg, ctx);\n case \"neg\":\n return evaluateNeg(expr.arg, ctx);\n case \"floor\":\n return evaluateFloor(expr.arg, ctx);\n case \"ceil\":\n return evaluateCeil(expr.arg, ctx);\n case \"round\":\n return evaluateRound(expr.arg, ctx);\n case \"sqrt\":\n return evaluateSqrt(expr.arg, ctx);\n case \"pow\":\n return evaluatePow(expr.base, expr.exponent, ctx);\n case \"sumArray\":\n return evaluateSumArray(expr.array, ctx);\n case \"minArray\":\n return evaluateMinArray(expr.array, ctx);\n case \"maxArray\":\n return evaluateMaxArray(expr.array, ctx);\n\n // String\n case \"concat\":\n return evaluateConcat(expr.args, ctx);\n case \"substring\":\n return evaluateSubstring(expr, ctx);\n case \"trim\":\n return evaluateTrim(expr.str, ctx);\n case \"toLowerCase\":\n return evaluateToLowerCase(expr.str, ctx);\n case \"toUpperCase\":\n return evaluateToUpperCase(expr.str, ctx);\n case \"strLen\":\n return evaluateStrLen(expr.str, ctx);\n case \"startsWith\":\n return evaluateStartsWith(expr.str, expr.prefix, ctx);\n case \"endsWith\":\n return evaluateEndsWith(expr.str, expr.suffix, ctx);\n case \"strIncludes\":\n return evaluateStrIncludes(expr.str, expr.search, ctx);\n case \"indexOf\":\n return evaluateIndexOf(expr.str, expr.search, ctx);\n case \"replace\":\n return evaluateReplace(expr.str, expr.search, expr.replacement, ctx);\n case \"split\":\n return evaluateSplit(expr.str, expr.delimiter, ctx);\n\n // Collection\n case \"len\":\n return evaluateLen(expr.arg, ctx);\n case \"at\":\n return evaluateAt(expr.array, expr.index, ctx);\n case \"first\":\n return evaluateFirst(expr.array, ctx);\n case \"last\":\n return evaluateLast(expr.array, ctx);\n case \"slice\":\n return evaluateSlice(expr, ctx);\n case \"includes\":\n return evaluateIncludes(expr.array, expr.item, ctx);\n case \"filter\":\n return evaluateFilter(expr.array, expr.predicate, ctx);\n case \"map\":\n return evaluateMap(expr.array, expr.mapper, ctx);\n case \"find\":\n return evaluateFind(expr.array, expr.predicate, ctx);\n case \"every\":\n return evaluateEvery(expr.array, expr.predicate, ctx);\n case \"some\":\n return evaluateSome(expr.array, expr.predicate, ctx);\n case \"append\":\n return evaluateAppend(expr.array, expr.items, ctx);\n case \"reverse\":\n return evaluateReverse(expr.array, ctx);\n case \"unique\":\n return evaluateUnique(expr.array, ctx);\n case \"flat\":\n return evaluateFlat(expr.array, ctx);\n\n // Object\n case \"object\":\n return evaluateObject(expr.fields, ctx);\n case \"field\":\n return evaluateField(expr.object, expr.property, ctx);\n case \"keys\":\n return evaluateKeys(expr.obj, ctx);\n case \"values\":\n return evaluateValues(expr.obj, ctx);\n case \"entries\":\n return evaluateEntries(expr.obj, ctx);\n case \"merge\":\n return evaluateMerge(expr.objects, ctx);\n case \"hasKey\":\n return evaluateHasKey(expr.obj, expr.key, ctx);\n case \"pick\":\n return evaluatePick(expr.obj, expr.keys, ctx);\n case \"omit\":\n return evaluateOmit(expr.obj, expr.keys, ctx);\n case \"fromEntries\":\n return evaluateFromEntries(expr.entries, ctx);\n\n // Type\n case \"typeof\":\n return evaluateTypeof(expr.arg, ctx);\n case \"isNull\":\n return evaluateIsNull(expr.arg, ctx);\n case \"coalesce\":\n return evaluateCoalesce(expr.args, ctx);\n\n // Conversion\n case \"toString\":\n return evaluateToString(expr.arg, ctx);\n case \"toNumber\":\n return evaluateToNumber(expr.arg, ctx);\n case \"toBoolean\":\n return evaluateToBoolean(expr.arg, ctx);\n\n default:\n return err(createError(\n \"INTERNAL_ERROR\",\n `Unknown expression kind: ${(expr as ExprNode).kind}`,\n ctx.currentAction ?? \"\",\n ctx.nodePath,\n ctx.trace.timestamp\n ));\n }\n}\n\n// ============ Helper Functions ============\n\nfunction toNumber(value: unknown): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\") return parseFloat(value) || 0;\n if (typeof value === \"boolean\") return value ? 1 : 0;\n return 0;\n}\n\nfunction toBoolean(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return value !== 0;\n if (typeof value === \"string\") return value.length > 0;\n return true;\n}\n\nfunction toString(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return String(value);\n}\n\n// ============ Get ============\n\n/**\n * Generate a deterministic UUID from intentId and counter\n * Uses a simple hash to create reproducible UUIDs\n */\nfunction generateDeterministicUuid(intentId: string, counter: number): string {\n // Create a simple hash-based UUID from intentId and counter\n // This ensures the same intentId + counter always produces the same UUID\n const seed = `${intentId}-${counter}`;\n let hash = 0;\n for (let i = 0; i < seed.length; i++) {\n const char = seed.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n // Convert hash to hex string and format as UUID\n const hex = Math.abs(hash).toString(16).padStart(8, '0');\n const hex2 = Math.abs(hash * 31).toString(16).padStart(4, '0');\n const hex3 = Math.abs(hash * 37).toString(16).padStart(4, '0');\n const hex4 = Math.abs(hash * 41).toString(16).padStart(4, '0');\n const hex5 = Math.abs(hash * 43).toString(16).padStart(12, '0');\n\n return `${hex.slice(0, 8)}-${hex2.slice(0, 4)}-4${hex3.slice(1, 4)}-${hex4.slice(0, 4)}-${hex5.slice(0, 12)}`;\n}\n\nfunction evaluateGet(path: string, ctx: EvalContext): ExprResult {\n // Handle collection context variables\n if (path.startsWith(\"$item\")) {\n if (ctx.$item === undefined) {\n return ok(undefined);\n }\n if (path === \"$item\") {\n return ok(ctx.$item);\n }\n // e.g., $item.completed\n const subPath = path.slice(6); // Remove \"$item.\"\n return ok(getByPath(ctx.$item, subPath));\n }\n\n if (path === \"$index\") {\n return ok(ctx.$index);\n }\n\n if (path === \"$array\") {\n return ok(ctx.$array);\n }\n\n // Handle $system paths (special runtime values)\n if (path.startsWith(\"$system.\")) {\n const systemPath = path.slice(8); // Remove \"$system.\"\n\n if (systemPath === \"uuid\") {\n // Generate deterministic UUID from intentId + counter\n const intentId = ctx.intentId ?? \"no-intent\";\n const counter = ctx.uuidCounter ?? 0;\n // Increment counter for next uuid call (mutable on purpose for determinism across calls)\n if (ctx.uuidCounter !== undefined) {\n ctx.uuidCounter = counter + 1;\n }\n return ok(generateDeterministicUuid(intentId, counter));\n }\n\n if (systemPath === \"timestamp\") {\n // Return the snapshot's timestamp (set by Host)\n return ok(new Date(ctx.snapshot.meta.timestamp).toISOString());\n }\n\n // Unknown $system path\n return ok(undefined);\n }\n\n // Handle meta path (snapshot metadata)\n if (path.startsWith(\"meta.\")) {\n const metaPath = path.slice(5); // Remove \"meta.\"\n\n if (metaPath === \"intentId\") {\n return ok(ctx.intentId);\n }\n\n if (metaPath === \"actionName\") {\n return ok(ctx.currentAction);\n }\n\n return ok(getByPath(ctx.snapshot.meta, metaPath));\n }\n\n // Handle input path\n if (path.startsWith(\"input.\") || path === \"input\") {\n const subPath = path === \"input\" ? \"\" : path.slice(6);\n return ok(subPath ? getByPath(ctx.snapshot.input, subPath) : ctx.snapshot.input);\n }\n\n // Handle computed path (schema lookup, no prefix)\n if (Object.prototype.hasOwnProperty.call(ctx.schema.computed.fields, path)) {\n return ok(ctx.snapshot.computed[path]);\n }\n\n // Handle system path (snapshot.system, not $system)\n if (path.startsWith(\"system.\")) {\n const subPath = path.slice(7);\n return ok(getByPath(ctx.snapshot.system, subPath));\n }\n\n // Default: get from data\n return ok(getByPath(ctx.snapshot.data, path));\n}\n\n// ============ Binary Operations ============\n\nfunction evaluateBinary(\n left: ExprNode,\n right: ExprNode,\n ctx: EvalContext,\n op: (a: unknown, b: unknown) => unknown\n): ExprResult {\n const leftResult = evaluateExpr(left, ctx);\n if (!leftResult.ok) return leftResult;\n\n const rightResult = evaluateExpr(right, ctx);\n if (!rightResult.ok) return rightResult;\n\n return ok(op(leftResult.value, rightResult.value));\n}\n\n// ============ Logical ============\n\nfunction evaluateAnd(args: ExprNode[], ctx: EvalContext): ExprResult {\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n if (!toBoolean(result.value)) return ok(false);\n }\n return ok(true);\n}\n\nfunction evaluateOr(args: ExprNode[], ctx: EvalContext): ExprResult {\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n if (toBoolean(result.value)) return ok(true);\n }\n return ok(false);\n}\n\nfunction evaluateNot(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(!toBoolean(result.value));\n}\n\n// ============ Conditional ============\n\nfunction evaluateIf(expr: { cond: ExprNode; then: ExprNode; else: ExprNode }, ctx: EvalContext): ExprResult {\n const condResult = evaluateExpr(expr.cond, ctx);\n if (!condResult.ok) return condResult;\n\n return evaluateExpr(toBoolean(condResult.value) ? expr.then : expr.else, ctx);\n}\n\n// ============ Arithmetic ============\n\nfunction evaluateDiv(left: ExprNode, right: ExprNode, ctx: EvalContext): ExprResult {\n const leftResult = evaluateExpr(left, ctx);\n if (!leftResult.ok) return leftResult;\n\n const rightResult = evaluateExpr(right, ctx);\n if (!rightResult.ok) return rightResult;\n\n const divisor = toNumber(rightResult.value);\n if (divisor === 0) return ok(null); // Division by zero returns null, not error\n\n return ok(toNumber(leftResult.value) / divisor);\n}\n\nfunction evaluateMod(left: ExprNode, right: ExprNode, ctx: EvalContext): ExprResult {\n const leftResult = evaluateExpr(left, ctx);\n if (!leftResult.ok) return leftResult;\n\n const rightResult = evaluateExpr(right, ctx);\n if (!rightResult.ok) return rightResult;\n\n const divisor = toNumber(rightResult.value);\n if (divisor === 0) return ok(null);\n\n return ok(toNumber(leftResult.value) % divisor);\n}\n\nfunction evaluateMin(args: ExprNode[], ctx: EvalContext): ExprResult {\n if (args.length === 0) return ok(null);\n\n const values: number[] = [];\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n values.push(toNumber(result.value));\n }\n\n return ok(Math.min(...values));\n}\n\nfunction evaluateMax(args: ExprNode[], ctx: EvalContext): ExprResult {\n if (args.length === 0) return ok(null);\n\n const values: number[] = [];\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n values.push(toNumber(result.value));\n }\n\n return ok(Math.max(...values));\n}\n\nfunction evaluateAbs(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(Math.abs(toNumber(result.value)));\n}\n\nfunction evaluateNeg(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(-toNumber(result.value));\n}\n\n// ============ String ============\n\nfunction evaluateConcat(args: ExprNode[], ctx: EvalContext): ExprResult {\n // First, evaluate all arguments to determine if this is array or string concat\n const values: unknown[] = [];\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n values.push(result.value);\n }\n\n // If any argument is an array, treat as array concatenation\n const hasArray = values.some(v => Array.isArray(v));\n if (hasArray) {\n const result: unknown[] = [];\n for (const value of values) {\n if (Array.isArray(value)) {\n result.push(...value);\n } else if (value !== null && value !== undefined) {\n // Single value gets added as element\n result.push(value);\n }\n }\n return ok(result);\n }\n\n // Otherwise, string concatenation\n const parts = values.map(v => toString(v));\n return ok(parts.join(\"\"));\n}\n\nfunction evaluateSubstring(\n expr: { str: ExprNode; start: ExprNode; end?: ExprNode },\n ctx: EvalContext\n): ExprResult {\n const strResult = evaluateExpr(expr.str, ctx);\n if (!strResult.ok) return strResult;\n\n const startResult = evaluateExpr(expr.start, ctx);\n if (!startResult.ok) return startResult;\n\n const str = toString(strResult.value);\n const start = toNumber(startResult.value);\n\n if (expr.end) {\n const endResult = evaluateExpr(expr.end, ctx);\n if (!endResult.ok) return endResult;\n return ok(str.substring(start, toNumber(endResult.value)));\n }\n\n return ok(str.substring(start));\n}\n\nfunction evaluateTrim(str: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(str, ctx);\n if (!result.ok) return result;\n return ok(toString(result.value).trim());\n}\n\n// ============ Collection ============\n\nfunction evaluateLen(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (Array.isArray(value)) return ok(value.length);\n if (typeof value === \"string\") return ok(value.length);\n if (typeof value === \"object\" && value !== null) return ok(Object.keys(value).length);\n return ok(0);\n}\n\nfunction evaluateAt(array: ExprNode, index: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const indexResult = evaluateExpr(index, ctx);\n if (!indexResult.ok) return indexResult;\n\n const base = arrayResult.value;\n const key = indexResult.value;\n\n // Array indexing: at(array, numericIndex)\n if (Array.isArray(base)) {\n const idx = toNumber(key);\n if (idx < 0 || idx >= base.length) return ok(null);\n return ok(base[idx]);\n }\n\n // Record lookup: at(record, stringKey)\n if (typeof base === \"object\" && base !== null && typeof key === \"string\") {\n return ok((base as Record<string, unknown>)[key] ?? null);\n }\n\n return ok(null);\n}\n\nfunction evaluateFirst(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n\n const arr = result.value;\n if (!Array.isArray(arr) || arr.length === 0) return ok(null);\n return ok(arr[0]);\n}\n\nfunction evaluateLast(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n\n const arr = result.value;\n if (!Array.isArray(arr) || arr.length === 0) return ok(null);\n return ok(arr[arr.length - 1]);\n}\n\nfunction evaluateSlice(\n expr: { array: ExprNode; start: ExprNode; end?: ExprNode },\n ctx: EvalContext\n): ExprResult {\n const arrayResult = evaluateExpr(expr.array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const startResult = evaluateExpr(expr.start, ctx);\n if (!startResult.ok) return startResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok([]);\n\n const start = toNumber(startResult.value);\n\n if (expr.end) {\n const endResult = evaluateExpr(expr.end, ctx);\n if (!endResult.ok) return endResult;\n return ok(arr.slice(start, toNumber(endResult.value)));\n }\n\n return ok(arr.slice(start));\n}\n\nfunction evaluateIncludes(array: ExprNode, item: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const itemResult = evaluateExpr(item, ctx);\n if (!itemResult.ok) return itemResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok(false);\n\n return ok(arr.includes(itemResult.value));\n}\n\nfunction evaluateFilter(array: ExprNode, predicate: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok([]);\n\n const filtered: unknown[] = [];\n for (let i = 0; i < arr.length; i++) {\n const itemCtx = withCollectionContext(ctx, arr[i], i, arr);\n const predicateResult = evaluateExpr(predicate, itemCtx);\n if (!predicateResult.ok) return predicateResult;\n if (toBoolean(predicateResult.value)) {\n filtered.push(arr[i]);\n }\n }\n\n return ok(filtered);\n}\n\nfunction evaluateMap(array: ExprNode, mapper: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok([]);\n\n const mapped: unknown[] = [];\n for (let i = 0; i < arr.length; i++) {\n const itemCtx = withCollectionContext(ctx, arr[i], i, arr);\n const mapResult = evaluateExpr(mapper, itemCtx);\n if (!mapResult.ok) return mapResult;\n mapped.push(mapResult.value);\n }\n\n return ok(mapped);\n}\n\nfunction evaluateFind(array: ExprNode, predicate: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok(null);\n\n for (let i = 0; i < arr.length; i++) {\n const itemCtx = withCollectionContext(ctx, arr[i], i, arr);\n const predicateResult = evaluateExpr(predicate, itemCtx);\n if (!predicateResult.ok) return predicateResult;\n if (toBoolean(predicateResult.value)) {\n return ok(arr[i]);\n }\n }\n\n return ok(null);\n}\n\nfunction evaluateEvery(array: ExprNode, predicate: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok(true);\n\n for (let i = 0; i < arr.length; i++) {\n const itemCtx = withCollectionContext(ctx, arr[i], i, arr);\n const predicateResult = evaluateExpr(predicate, itemCtx);\n if (!predicateResult.ok) return predicateResult;\n if (!toBoolean(predicateResult.value)) {\n return ok(false);\n }\n }\n\n return ok(true);\n}\n\nfunction evaluateSome(array: ExprNode, predicate: ExprNode, ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n if (!Array.isArray(arr)) return ok(false);\n\n for (let i = 0; i < arr.length; i++) {\n const itemCtx = withCollectionContext(ctx, arr[i], i, arr);\n const predicateResult = evaluateExpr(predicate, itemCtx);\n if (!predicateResult.ok) return predicateResult;\n if (toBoolean(predicateResult.value)) {\n return ok(true);\n }\n }\n\n return ok(false);\n}\n\nfunction evaluateAppend(array: ExprNode, items: ExprNode[], ctx: EvalContext): ExprResult {\n const arrayResult = evaluateExpr(array, ctx);\n if (!arrayResult.ok) return arrayResult;\n\n const arr = arrayResult.value;\n const baseArray = Array.isArray(arr) ? [...arr] : [];\n\n for (const itemExpr of items) {\n const itemResult = evaluateExpr(itemExpr, ctx);\n if (!itemResult.ok) return itemResult;\n baseArray.push(itemResult.value);\n }\n\n return ok(baseArray);\n}\n\n// ============ Object ============\n\nfunction evaluateObject(fields: Record<string, ExprNode>, ctx: EvalContext): ExprResult {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(fields).sort(compareUnicodeCodePoints)) {\n const valueExpr = fields[key];\n const valueResult = evaluateExpr(valueExpr, ctx);\n if (!valueResult.ok) return valueResult;\n result[key] = valueResult.value;\n }\n\n return ok(result);\n}\n\nfunction evaluateField(objectExpr: ExprNode, property: string, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(objectExpr, ctx);\n if (!result.ok) return result;\n\n const obj = result.value;\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) return ok(null);\n\n return ok((obj as Record<string, unknown>)[property] ?? null);\n}\n\nfunction evaluateKeys(obj: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(obj, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (typeof value !== \"object\" || value === null) return ok([]);\n return ok(Object.keys(value).sort(compareUnicodeCodePoints));\n}\n\nfunction evaluateValues(obj: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(obj, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (typeof value !== \"object\" || value === null) return ok([]);\n return ok(\n Object.keys(value)\n .sort(compareUnicodeCodePoints)\n .map((key) => (value as Record<string, unknown>)[key])\n );\n}\n\nfunction evaluateEntries(obj: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(obj, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (typeof value !== \"object\" || value === null) return ok([]);\n return ok(\n Object.keys(value)\n .sort(compareUnicodeCodePoints)\n .map((key) => [key, (value as Record<string, unknown>)[key]])\n );\n}\n\nfunction evaluateMerge(objects: ExprNode[], ctx: EvalContext): ExprResult {\n const merged: Record<string, unknown> = {};\n\n for (const objExpr of objects) {\n const result = evaluateExpr(objExpr, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n Object.assign(merged, value);\n }\n }\n\n return ok(merged);\n}\n\n// ============ Type ============\n\nfunction evaluateTypeof(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n\n const value = result.value;\n if (value === null) return ok(\"null\");\n if (Array.isArray(value)) return ok(\"array\");\n return ok(typeof value);\n}\n\nfunction evaluateIsNull(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(result.value === null || result.value === undefined);\n}\n\nfunction evaluateCoalesce(args: ExprNode[], ctx: EvalContext): ExprResult {\n for (const arg of args) {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n if (result.value !== null && result.value !== undefined) {\n return result;\n }\n }\n return ok(null);\n}\n\n// ============ Arithmetic Extended (SPEC v2.0.0) ============\n\nfunction evaluateFloor(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(Math.floor(toNumber(result.value)));\n}\n\nfunction evaluateCeil(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(Math.ceil(toNumber(result.value)));\n}\n\nfunction evaluateRound(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(Math.round(toNumber(result.value)));\n}\n\nfunction evaluateSqrt(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n const n = toNumber(result.value);\n if (n < 0) return ok(null);\n return ok(Math.sqrt(n));\n}\n\nfunction evaluatePow(base: ExprNode, exponent: ExprNode, ctx: EvalContext): ExprResult {\n const baseResult = evaluateExpr(base, ctx);\n if (!baseResult.ok) return baseResult;\n const expResult = evaluateExpr(exponent, ctx);\n if (!expResult.ok) return expResult;\n const result = Math.pow(toNumber(baseResult.value), toNumber(expResult.value));\n if (!Number.isFinite(result)) return ok(null);\n return ok(result);\n}\n\n// ============ Array Aggregation (SPEC v2.0.0) ============\n\nfunction evaluateSumArray(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr)) return ok(0);\n let sum = 0;\n for (const item of arr) {\n sum += toNumber(item);\n }\n return ok(sum);\n}\n\nfunction evaluateMinArray(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr) || arr.length === 0) return ok(null);\n let min = toNumber(arr[0]);\n for (let i = 1; i < arr.length; i++) {\n const n = toNumber(arr[i]);\n if (n < min) min = n;\n }\n return ok(min);\n}\n\nfunction evaluateMaxArray(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr) || arr.length === 0) return ok(null);\n let max = toNumber(arr[0]);\n for (let i = 1; i < arr.length; i++) {\n const n = toNumber(arr[i]);\n if (n > max) max = n;\n }\n return ok(max);\n}\n\n// ============ String Extended (SPEC v2.0.0 + v2.0.3) ============\n\nfunction evaluateToLowerCase(str: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(str, ctx);\n if (!result.ok) return result;\n return ok(toString(result.value).toLowerCase());\n}\n\nfunction evaluateToUpperCase(str: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(str, ctx);\n if (!result.ok) return result;\n return ok(toString(result.value).toUpperCase());\n}\n\nfunction evaluateStrLen(str: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(str, ctx);\n if (!result.ok) return result;\n return ok(toString(result.value).length);\n}\n\nfunction evaluateStartsWith(str: ExprNode, prefix: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const prefixResult = evaluateExpr(prefix, ctx);\n if (!prefixResult.ok) return prefixResult;\n return ok(toString(strResult.value).startsWith(toString(prefixResult.value)));\n}\n\nfunction evaluateEndsWith(str: ExprNode, suffix: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const suffixResult = evaluateExpr(suffix, ctx);\n if (!suffixResult.ok) return suffixResult;\n return ok(toString(strResult.value).endsWith(toString(suffixResult.value)));\n}\n\nfunction evaluateStrIncludes(str: ExprNode, search: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const searchResult = evaluateExpr(search, ctx);\n if (!searchResult.ok) return searchResult;\n return ok(toString(strResult.value).includes(toString(searchResult.value)));\n}\n\nfunction evaluateIndexOf(str: ExprNode, search: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const searchResult = evaluateExpr(search, ctx);\n if (!searchResult.ok) return searchResult;\n return ok(toString(strResult.value).indexOf(toString(searchResult.value)));\n}\n\nfunction evaluateReplace(str: ExprNode, search: ExprNode, replacement: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const searchResult = evaluateExpr(search, ctx);\n if (!searchResult.ok) return searchResult;\n const replacementResult = evaluateExpr(replacement, ctx);\n if (!replacementResult.ok) return replacementResult;\n // String.prototype.replace with string arg replaces only the first occurrence\n return ok(toString(strResult.value).replace(toString(searchResult.value), toString(replacementResult.value)));\n}\n\nfunction evaluateSplit(str: ExprNode, delimiter: ExprNode, ctx: EvalContext): ExprResult {\n const strResult = evaluateExpr(str, ctx);\n if (!strResult.ok) return strResult;\n const delimiterResult = evaluateExpr(delimiter, ctx);\n if (!delimiterResult.ok) return delimiterResult;\n const result = toString(strResult.value).split(toString(delimiterResult.value));\n // JS returns [] for \"\".split(\"\"); SPEC requires at least one element\n return ok(result.length === 0 ? [\"\"] : result);\n}\n\n// ============ Collection Extended (SPEC v2.0.3) ============\n\nfunction evaluateReverse(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr)) return ok([]);\n return ok([...arr].reverse());\n}\n\nfunction evaluateUnique(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr)) return ok([]);\n // SPEC: strict equality (===), preserve first-occurrence order\n const seen: unknown[] = [];\n const unique: unknown[] = [];\n for (const item of arr) {\n if (!seen.some(s => s === item)) {\n seen.push(item);\n unique.push(item);\n }\n }\n return ok(unique);\n}\n\nfunction evaluateFlat(array: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(array, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr)) return ok([]);\n // SPEC: flatten exactly one level\n const flattened: unknown[] = [];\n for (const item of arr) {\n if (Array.isArray(item)) {\n flattened.push(...item);\n } else {\n flattened.push(item);\n }\n }\n return ok(flattened);\n}\n\n// ============ Object Extended (SPEC v2.0.3) ============\n\nfunction evaluateHasKey(obj: ExprNode, key: ExprNode, ctx: EvalContext): ExprResult {\n const objResult = evaluateExpr(obj, ctx);\n if (!objResult.ok) return objResult;\n const keyResult = evaluateExpr(key, ctx);\n if (!keyResult.ok) return keyResult;\n const value = objResult.value;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return ok(false);\n const k = keyResult.value;\n if (typeof k !== \"string\") return ok(false);\n return ok(Object.prototype.hasOwnProperty.call(value, k));\n}\n\nfunction evaluatePick(obj: ExprNode, keys: ExprNode, ctx: EvalContext): ExprResult {\n const objResult = evaluateExpr(obj, ctx);\n if (!objResult.ok) return objResult;\n const keysResult = evaluateExpr(keys, ctx);\n if (!keysResult.ok) return keysResult;\n const value = objResult.value;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return ok({});\n const keyList = keysResult.value;\n if (!Array.isArray(keyList)) return ok({});\n const result: Record<string, unknown> = {};\n for (const k of keyList) {\n if (typeof k === \"string\" && Object.prototype.hasOwnProperty.call(value, k)) {\n result[k] = (value as Record<string, unknown>)[k];\n }\n }\n return ok(result);\n}\n\nfunction evaluateOmit(obj: ExprNode, keys: ExprNode, ctx: EvalContext): ExprResult {\n const objResult = evaluateExpr(obj, ctx);\n if (!objResult.ok) return objResult;\n const keysResult = evaluateExpr(keys, ctx);\n if (!keysResult.ok) return keysResult;\n const value = objResult.value;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return ok({});\n const keyList = keysResult.value;\n const excludeSet = new Set<string>();\n if (Array.isArray(keyList)) {\n for (const k of keyList) {\n if (typeof k === \"string\") excludeSet.add(k);\n }\n }\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (!excludeSet.has(k)) {\n result[k] = v;\n }\n }\n return ok(result);\n}\n\nfunction evaluateFromEntries(entries: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(entries, ctx);\n if (!result.ok) return result;\n const arr = result.value;\n if (!Array.isArray(arr)) return ok({});\n const obj: Record<string, unknown> = {};\n for (const entry of arr) {\n // SPEC: skip entries that are not 2-element arrays with string key\n if (Array.isArray(entry) && entry.length === 2 && typeof entry[0] === \"string\") {\n obj[entry[0]] = entry[1];\n }\n }\n return ok(obj);\n}\n\n// ============ Conversion (SPEC v2.0.0 + v2.0.3) ============\n\nfunction evaluateToString(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(toString(result.value));\n}\n\nfunction evaluateToNumber(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(toNumber(result.value));\n}\n\nfunction evaluateToBoolean(arg: ExprNode, ctx: EvalContext): ExprResult {\n const result = evaluateExpr(arg, ctx);\n if (!result.ok) return result;\n return ok(toBoolean(result.value));\n}\n","import type { PatchSegment } from \"../schema/patch.js\";\nimport type { StateSpec } from \"../schema/field.js\";\nimport type { TypeDefinition, TypeSpec } from \"../schema/type-spec.js\";\nimport { parsePath } from \"../utils/path.js\";\n\nexport type TypeValidationOptions = {\n allowPartial?: boolean;\n allowUndefined?: boolean;\n};\n\ntype TypeValidationResult = { ok: boolean; message?: string };\n\nfunction isNumericSegment(segment: string): boolean {\n return /^\\d+$/.test(segment);\n}\n\nfunction isNullType(definition: TypeDefinition, types: Record<string, TypeSpec>): boolean {\n const resolved = resolveTypeDefinition(definition, types);\n if (!resolved) {\n return false;\n }\n\n return (\n (resolved.kind === \"primitive\" && resolved.type === \"null\")\n || (resolved.kind === \"literal\" && resolved.value === null)\n );\n}\n\nfunction stripNullableEnvelope(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n): TypeDefinition | null {\n const resolved = resolveTypeDefinition(definition, types);\n if (!resolved) {\n return null;\n }\n\n if (resolved.kind !== \"union\") {\n return resolved;\n }\n\n const nonNullTypes = resolved.types.filter((candidate) => !isNullType(candidate, types));\n const hasNull = nonNullTypes.length !== resolved.types.length;\n if (!hasNull) {\n return resolved;\n }\n\n if (nonNullTypes.length !== 1) {\n return null;\n }\n\n return resolveTypeDefinition(nonNullTypes[0], types);\n}\n\nexport function resolveTypeDefinition(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n seenRefs: readonly string[] = [],\n): TypeDefinition | null {\n if (definition.kind !== \"ref\") {\n return definition;\n }\n\n if (seenRefs.includes(definition.name)) {\n return null;\n }\n\n const next = types[definition.name];\n if (!next) {\n return null;\n }\n\n return resolveTypeDefinition(next.definition, types, [...seenRefs, definition.name]);\n}\n\nexport function pathExistsInTypeDefinition(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n path: string,\n): boolean {\n if (!path) {\n return true;\n }\n\n return getTypeDefinitionAtPathSegments(definition, types, parsePath(path)) !== null;\n}\n\nexport function pathExistsInTypeDefinitionSegments(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n segments: readonly string[],\n): boolean {\n return getTypeDefinitionAtPathSegments(definition, types, segments) !== null;\n}\n\nfunction getTypeDefinitionAtPathSegments(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n segments: readonly string[],\n): TypeDefinition | null {\n let current: TypeDefinition | null = definition;\n\n for (const segment of segments) {\n if (!current) {\n return null;\n }\n\n const traversable = stripNullableEnvelope(current, types);\n if (!traversable) {\n return null;\n }\n\n switch (traversable.kind) {\n case \"object\":\n current = traversable.fields[segment]?.type ?? null;\n break;\n\n case \"record\":\n current = traversable.value;\n break;\n\n case \"array\":\n if (!isNumericSegment(segment)) {\n return null;\n }\n current = traversable.element;\n break;\n\n case \"primitive\":\n return null;\n\n default:\n return null;\n }\n }\n\n return current;\n}\n\nexport function getTypeDefinitionAtSegments(\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n segments: readonly PatchSegment[],\n): TypeDefinition | null {\n let current: TypeDefinition | null = definition;\n\n for (const segment of segments) {\n if (!current) {\n return null;\n }\n\n const traversable = stripNullableEnvelope(current, types);\n if (!traversable) {\n return null;\n }\n\n switch (traversable.kind) {\n case \"object\":\n if (segment.kind !== \"prop\") {\n return null;\n }\n current = traversable.fields[segment.name]?.type ?? null;\n break;\n\n case \"record\":\n if (segment.kind !== \"prop\") {\n return null;\n }\n current = traversable.value;\n break;\n\n case \"array\":\n if (segment.kind !== \"index\") {\n return null;\n }\n current = traversable.element;\n break;\n\n case \"primitive\":\n return null;\n\n default:\n return null;\n }\n }\n\n return current;\n}\n\nexport function getStateTypeDefinitionAtSegments(\n state: StateSpec,\n types: Record<string, TypeSpec>,\n segments: readonly PatchSegment[],\n): TypeDefinition | null {\n if (!state.fieldTypes || segments.length === 0) {\n return null;\n }\n\n const [root, ...rest] = segments;\n if (!root || root.kind !== \"prop\") {\n return null;\n }\n\n if (!(root.name in state.fields)) {\n return null;\n }\n\n const rootType = state.fieldTypes[root.name];\n if (!rootType) {\n return null;\n }\n\n return rest.length === 0\n ? rootType\n : getTypeDefinitionAtSegments(rootType, types, rest);\n}\n\nexport function validateValueAgainstTypeDefinition(\n value: unknown,\n definition: TypeDefinition,\n types: Record<string, TypeSpec>,\n options?: TypeValidationOptions,\n): TypeValidationResult {\n if (value === undefined) {\n return options?.allowUndefined\n ? { ok: true }\n : { ok: false, message: \"Value is required\" };\n }\n\n const resolved = resolveTypeDefinition(definition, types);\n if (!resolved) {\n return { ok: false, message: \"Unknown type reference\" };\n }\n\n if (resolved.kind === \"union\") {\n const results = resolved.types.map((candidate) =>\n validateValueAgainstTypeDefinition(value, candidate, types, options)\n );\n return results.find((result) => result.ok)\n ?? { ok: false, message: \"Value does not match any union branch\" };\n }\n\n switch (resolved.kind) {\n case \"primitive\":\n switch (resolved.type) {\n case \"null\":\n return value === null ? { ok: true } : { ok: false, message: \"Expected null\" };\n case \"string\":\n return typeof value === \"string\" ? { ok: true } : { ok: false, message: \"Expected string\" };\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value)\n ? { ok: true }\n : { ok: false, message: \"Expected number\" };\n case \"boolean\":\n return typeof value === \"boolean\" ? { ok: true } : { ok: false, message: \"Expected boolean\" };\n case \"object\":\n return value !== null && !Array.isArray(value) && typeof value === \"object\"\n ? { ok: true }\n : { ok: false, message: \"Expected object\" };\n case \"array\":\n return Array.isArray(value)\n ? { ok: true }\n : { ok: false, message: \"Expected array\" };\n default:\n return { ok: false, message: `Unsupported primitive type: ${resolved.type}` };\n }\n\n case \"literal\":\n return Object.is(value, resolved.value)\n ? { ok: true }\n : { ok: false, message: `Expected literal ${JSON.stringify(resolved.value)}` };\n\n case \"array\":\n if (!Array.isArray(value)) {\n return { ok: false, message: \"Expected array\" };\n }\n for (const item of value) {\n const itemResult = validateValueAgainstTypeDefinition(item, resolved.element, types, {\n allowUndefined: false,\n });\n if (!itemResult.ok) {\n return itemResult;\n }\n }\n return { ok: true };\n\n case \"object\":\n if (value === null || Array.isArray(value) || typeof value !== \"object\") {\n return { ok: false, message: \"Expected object\" };\n }\n return validateObjectValue(\n value as Record<string, unknown>,\n resolved.fields,\n types,\n options?.allowPartial ?? false,\n options?.allowUndefined ?? false,\n );\n\n case \"record\":\n if (value === null || Array.isArray(value) || typeof value !== \"object\") {\n return { ok: false, message: \"Expected object\" };\n }\n const keyType = resolveTypeDefinition(resolved.key, types);\n if (!keyType || keyType.kind !== \"primitive\" || keyType.type !== \"string\") {\n return { ok: false, message: \"Record keys must be strings\" };\n }\n for (const entry of Object.values(value as Record<string, unknown>)) {\n const entryResult = validateValueAgainstTypeDefinition(entry, resolved.value, types, {\n allowUndefined: false,\n });\n if (!entryResult.ok) {\n return entryResult;\n }\n }\n return { ok: true };\n\n case \"ref\":\n return { ok: false, message: \"Unresolved type reference\" };\n }\n}\n\nfunction validateObjectValue(\n value: Record<string, unknown>,\n fields: Record<string, { type: TypeDefinition; optional: boolean }>,\n types: Record<string, TypeSpec>,\n allowPartial: boolean,\n allowUndefined: boolean,\n): TypeValidationResult {\n const fieldNames = new Set(Object.keys(fields));\n\n for (const key of Object.keys(value)) {\n if (!fieldNames.has(key)) {\n return { ok: false, message: `Unknown field: ${key}` };\n }\n }\n\n for (const [name, field] of Object.entries(fields)) {\n if (!(name in value)) {\n if (!allowPartial && !field.optional) {\n return { ok: false, message: `Missing required field: ${name}` };\n }\n continue;\n }\n\n const result = validateValueAgainstTypeDefinition(value[name], field.type, types, {\n allowPartial,\n allowUndefined,\n });\n if (!result.ok) {\n return result;\n }\n }\n\n return { ok: true };\n}\n","import type { ExprNode } from \"../schema/expr.js\";\nimport type { FlowNode } from \"../schema/flow.js\";\nimport type { FieldSpec, StateSpec } from \"../schema/field.js\";\nimport type { ComputedSpec } from \"../schema/computed.js\";\nimport type { PatchSegment } from \"../schema/patch.js\";\nimport type { TypeSpec } from \"../schema/type-spec.js\";\nimport { parsePath } from \"../utils/path.js\";\nimport { pathExistsInTypeDefinition, pathExistsInTypeDefinitionSegments } from \"./type-definition-utils.js\";\n\nconst SEMVER_REGEX =\n /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/;\nconst URI_SCHEME_REGEX = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\nconst UUID_REGEX =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function isValidSchemaId(id: string): boolean {\n return URI_SCHEME_REGEX.test(id) || UUID_REGEX.test(id);\n}\n\nexport function isValidSemver(version: string): boolean {\n return SEMVER_REGEX.test(version);\n}\n\nexport function collectGetPathsFromExpr(expr: ExprNode): string[] {\n const paths: string[] = [];\n\n const visit = (node: ExprNode) => {\n switch (node.kind) {\n case \"lit\":\n return;\n case \"get\":\n paths.push(node.path);\n return;\n case \"eq\":\n case \"neq\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n case \"add\":\n case \"sub\":\n case \"mul\":\n case \"div\":\n case \"mod\":\n visit(node.left);\n visit(node.right);\n return;\n case \"pow\":\n visit(node.base);\n visit(node.exponent);\n return;\n case \"and\":\n case \"or\":\n case \"concat\":\n case \"coalesce\":\n case \"min\":\n case \"max\":\n node.args.forEach(visit);\n return;\n case \"not\":\n case \"typeof\":\n case \"isNull\":\n case \"len\":\n case \"abs\":\n case \"neg\":\n case \"floor\":\n case \"ceil\":\n case \"round\":\n case \"sqrt\":\n case \"toString\":\n case \"toNumber\":\n case \"toBoolean\":\n visit(node.arg);\n return;\n case \"first\":\n case \"last\":\n case \"reverse\":\n case \"unique\":\n case \"flat\":\n case \"sumArray\":\n case \"minArray\":\n case \"maxArray\":\n visit(node.array);\n return;\n case \"if\":\n visit(node.cond);\n visit(node.then);\n visit(node.else);\n return;\n case \"substring\":\n visit(node.str);\n visit(node.start);\n if (node.end) visit(node.end);\n return;\n case \"trim\":\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"strLen\":\n visit(node.str);\n return;\n case \"startsWith\":\n visit(node.str);\n visit(node.prefix);\n return;\n case \"endsWith\":\n visit(node.str);\n visit(node.suffix);\n return;\n case \"strIncludes\":\n case \"indexOf\":\n visit(node.str);\n visit(node.search);\n return;\n case \"replace\":\n visit(node.str);\n visit(node.search);\n visit(node.replacement);\n return;\n case \"split\":\n visit(node.str);\n visit(node.delimiter);\n return;\n case \"at\":\n visit(node.array);\n visit(node.index);\n return;\n case \"slice\":\n visit(node.array);\n visit(node.start);\n if (node.end) visit(node.end);\n return;\n case \"includes\":\n visit(node.array);\n visit(node.item);\n return;\n case \"filter\":\n case \"find\":\n case \"every\":\n case \"some\":\n visit(node.array);\n visit(node.predicate);\n return;\n case \"map\":\n visit(node.array);\n visit(node.mapper);\n return;\n case \"append\":\n visit(node.array);\n node.items.forEach(visit);\n return;\n case \"object\":\n Object.values(node.fields).forEach(visit);\n return;\n case \"field\":\n visit(node.object);\n return;\n case \"keys\":\n case \"values\":\n case \"entries\":\n visit(node.obj);\n return;\n case \"merge\":\n node.objects.forEach(visit);\n return;\n case \"hasKey\":\n visit(node.obj);\n visit(node.key);\n return;\n case \"pick\":\n case \"omit\":\n visit(node.obj);\n visit(node.keys);\n return;\n case \"fromEntries\":\n visit(node.entries);\n return;\n }\n };\n\n visit(expr);\n return paths;\n}\n\nexport function collectGetPathsFromFlow(flow: FlowNode): string[] {\n const paths: string[] = [];\n\n const visitFlow = (node: FlowNode) => {\n switch (node.kind) {\n case \"seq\":\n node.steps.forEach(visitFlow);\n return;\n case \"if\":\n paths.push(...collectGetPathsFromExpr(node.cond));\n visitFlow(node.then);\n if (node.else) visitFlow(node.else);\n return;\n case \"patch\":\n if (node.op !== \"unset\" && node.value) {\n paths.push(...collectGetPathsFromExpr(node.value));\n }\n return;\n case \"effect\":\n Object.values(node.params).forEach((expr) => {\n paths.push(...collectGetPathsFromExpr(expr));\n });\n return;\n case \"fail\":\n if (node.message) {\n paths.push(...collectGetPathsFromExpr(node.message));\n }\n return;\n case \"call\":\n case \"halt\":\n return;\n }\n };\n\n visitFlow(flow);\n return paths;\n}\n\nexport function pathExistsInStateSpec(\n state: StateSpec,\n path: string,\n types: Record<string, TypeSpec> = {},\n): boolean {\n if (state.fieldTypes) {\n if (!path) {\n return true;\n }\n\n const segments = parsePath(path);\n const [root, ...rest] = segments;\n if (!root) {\n return true;\n }\n\n if (!(root in state.fields)) {\n return false;\n }\n\n const rootType = state.fieldTypes[root];\n if (rootType) {\n const existsInTypeDefinition = rest.length === 0\n ? true\n : pathExistsInTypeDefinitionSegments(rootType, types, rest);\n if (existsInTypeDefinition) {\n return true;\n }\n }\n }\n\n return pathExistsInFieldSpec({ type: \"object\", required: true, fields: state.fields }, path);\n}\n\nexport function pathExistsInComputedSpec(computed: ComputedSpec, path: string): boolean {\n return Object.prototype.hasOwnProperty.call(computed.fields, path);\n}\n\nexport function pathExistsInFieldSpec(spec: FieldSpec, path: string): boolean {\n if (!path) {\n return true;\n }\n\n const segments = parsePath(path);\n if (segments.length === 0) {\n return true;\n }\n\n let current: FieldSpec | null = spec;\n\n for (const segment of segments) {\n if (!current) {\n return false;\n }\n\n const fieldType = current.type;\n if (fieldType === \"object\") {\n if (!current.fields) {\n // Open object allows any nested path (e.g., Json types)\n return true;\n }\n if (!(segment in current.fields)) {\n return false;\n }\n current = current.fields[segment];\n continue;\n }\n\n if (fieldType === \"array\") {\n if (!isNumericSegment(segment)) {\n return false;\n }\n current = current.items ?? null;\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nexport function pathExistsInFieldSpecSegments(\n spec: FieldSpec,\n segments: readonly PatchSegment[]\n): boolean {\n if (segments.length === 0) {\n return true;\n }\n\n let current: FieldSpec | null = spec;\n\n for (const segment of segments) {\n if (!current) {\n return false;\n }\n\n const fieldType = current.type;\n if (fieldType === \"object\") {\n if (segment.kind !== \"prop\") {\n return false;\n }\n if (!current.fields) {\n // Open object allows any nested path (e.g., Json types)\n return true;\n }\n if (!(segment.name in current.fields)) {\n return false;\n }\n current = current.fields[segment.name];\n continue;\n }\n\n if (fieldType === \"array\") {\n if (segment.kind !== \"index\") {\n return false;\n }\n current = current.items ?? null;\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nexport function validateValueAgainstFieldSpec(\n value: unknown,\n spec: FieldSpec,\n options?: { allowPartial?: boolean; allowUndefined?: boolean }\n): { ok: boolean; message?: string } {\n if (value === undefined) {\n if (options?.allowUndefined && spec.required === false) {\n return { ok: true };\n }\n return { ok: false, message: \"Value is required\" };\n }\n\n if (value === null) {\n return { ok: true };\n }\n\n const fieldType = spec.type;\n if (typeof fieldType === \"object\" && \"enum\" in fieldType) {\n return fieldType.enum.some((entry) => Object.is(entry, value))\n ? { ok: true }\n : { ok: false, message: \"Value is not in enum\" };\n }\n\n switch (fieldType) {\n case \"null\":\n return value === null ? { ok: true } : { ok: false, message: \"Expected null\" };\n case \"string\":\n return typeof value === \"string\" ? { ok: true } : { ok: false, message: \"Expected string\" };\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value)\n ? { ok: true }\n : { ok: false, message: \"Expected number\" };\n case \"boolean\":\n return typeof value === \"boolean\" ? { ok: true } : { ok: false, message: \"Expected boolean\" };\n case \"object\":\n if (value === null || Array.isArray(value) || typeof value !== \"object\") {\n return { ok: false, message: \"Expected object\" };\n }\n return validateObjectValue(\n value as Record<string, unknown>,\n spec,\n options?.allowPartial ?? false,\n options?.allowUndefined ?? false\n );\n case \"array\":\n if (!Array.isArray(value)) {\n return { ok: false, message: \"Expected array\" };\n }\n if (!spec.items) {\n return { ok: true };\n }\n for (const item of value) {\n const result = validateValueAgainstFieldSpec(item, spec.items, { allowUndefined: false });\n if (!result.ok) {\n return result;\n }\n }\n return { ok: true };\n }\n}\n\nfunction validateObjectValue(\n value: Record<string, unknown>,\n spec: FieldSpec,\n allowPartial: boolean,\n allowUndefined: boolean\n): { ok: boolean; message?: string } {\n if (!spec.fields) {\n return { ok: true };\n }\n\n const fieldEntries = Object.entries(spec.fields);\n const fieldNames = new Set(fieldEntries.map(([name]) => name));\n\n for (const key of Object.keys(value)) {\n if (!fieldNames.has(key)) {\n return { ok: false, message: `Unknown field: ${key}` };\n }\n const fieldSpec = spec.fields[key];\n const result = validateValueAgainstFieldSpec(value[key], fieldSpec, {\n allowPartial,\n allowUndefined,\n });\n if (!result.ok) {\n return result;\n }\n }\n\n if (!allowPartial) {\n for (const [name, fieldSpec] of fieldEntries) {\n if (fieldSpec.required && !(name in value)) {\n return { ok: false, message: `Missing required field: ${name}` };\n }\n }\n }\n\n return { ok: true };\n}\n\nexport function getFieldSpecAtPath(spec: FieldSpec, path: string): FieldSpec | null {\n if (!path) {\n return spec;\n }\n\n const segments = parsePath(path);\n if (segments.length === 0) {\n return spec;\n }\n\n let current: FieldSpec | null = spec;\n\n for (const segment of segments) {\n if (!current) {\n return null;\n }\n\n const fieldType = current.type;\n if (fieldType === \"object\") {\n if (!current.fields || !(segment in current.fields)) {\n return null;\n }\n current = current.fields[segment];\n continue;\n }\n\n if (fieldType === \"array\") {\n if (!isNumericSegment(segment)) {\n return null;\n }\n current = current.items ?? null;\n continue;\n }\n\n return null;\n }\n\n return current;\n}\n\nexport function getFieldSpecAtSegments(\n spec: FieldSpec,\n segments: readonly PatchSegment[]\n): FieldSpec | null {\n if (segments.length === 0) return spec;\n\n let current: FieldSpec | null = spec;\n\n for (const segment of segments) {\n if (!current) return null;\n\n const fieldType = current.type;\n if (fieldType === \"object\") {\n if (segment.kind !== \"prop\") {\n return null;\n }\n if (!current.fields || !(segment.name in current.fields)) {\n return null;\n }\n current = current.fields[segment.name];\n continue;\n }\n\n if (fieldType === \"array\") {\n if (segment.kind !== \"index\") {\n return null;\n }\n current = current.items ?? null;\n continue;\n }\n\n return null;\n }\n\n return current;\n}\n\nfunction isNumericSegment(segment: string): boolean {\n return /^[0-9]+$/.test(segment);\n}\n","import type { FlowNode } from \"../schema/flow.js\";\nimport type { Snapshot, Requirement, ErrorValue } from \"../schema/snapshot.js\";\nimport type { Patch, PatchPath, PatchSegment } from \"../schema/patch.js\";\nimport type { TraceNode } from \"../schema/trace.js\";\nimport type { FieldSpec } from \"../schema/field.js\";\nimport { createTraceNode } from \"../schema/trace.js\";\nimport { createError } from \"../errors.js\";\nimport {\n mergeAtPatchPath,\n patchPathToDisplayString,\n semanticPathToPatchPath,\n setByPatchPath,\n unsetByPatchPath,\n} from \"../utils/patch-path.js\";\nimport { generateRequirementIdSync } from \"../utils/hash.js\";\nimport { type EvalContext, withSnapshot, withNodePath, withCollectionContext } from \"./context.js\";\nimport { evaluateExpr } from \"./expr.js\";\nimport { getFieldSpecAtSegments, validateValueAgainstFieldSpec } from \"../core/validation-utils.js\";\nimport {\n getStateTypeDefinitionAtSegments,\n validateValueAgainstTypeDefinition,\n} from \"../core/type-definition-utils.js\";\n\n/**\n * Flow execution status\n */\nexport type FlowStatus = \"running\" | \"complete\" | \"pending\" | \"halted\" | \"error\";\n\n/**\n * Flow execution state\n */\nexport type FlowState = {\n readonly snapshot: Snapshot;\n readonly status: FlowStatus;\n readonly patches: readonly Patch[];\n readonly requirements: readonly Requirement[];\n readonly error: ErrorValue | null;\n};\n\n/**\n * Flow evaluation result\n */\nexport type FlowResult = {\n readonly state: FlowState;\n readonly trace: TraceNode;\n};\n\n/**\n * Create initial flow state\n */\nexport function createFlowState(snapshot: Snapshot): FlowState {\n return {\n snapshot,\n status: \"running\",\n patches: [],\n requirements: [],\n error: null,\n };\n}\n\n/**\n * Apply a patch to flow state\n */\nfunction applyPatchToState(state: FlowState, patch: Patch): FlowState {\n let newData = state.snapshot.data;\n\n switch (patch.op) {\n case \"set\":\n newData = setByPatchPath(newData, patch.path, patch.value);\n break;\n case \"unset\":\n newData = unsetByPatchPath(newData, patch.path);\n break;\n case \"merge\":\n newData = mergeAtPatchPath(newData, patch.path, patch.value);\n break;\n }\n\n return {\n ...state,\n snapshot: {\n ...state.snapshot,\n data: newData,\n },\n patches: [...state.patches, patch],\n };\n}\n\n/**\n * Add a requirement to flow state\n */\nfunction addRequirement(state: FlowState, requirement: Requirement): FlowState {\n return {\n ...state,\n status: \"pending\",\n requirements: [...state.requirements, requirement],\n };\n}\n\n/**\n * Set error on flow state\n */\nfunction setError(state: FlowState, error: ErrorValue): FlowState {\n return {\n ...state,\n status: \"error\",\n error,\n };\n}\n\n/**\n * Evaluate a flow node\n */\nexport function evaluateFlowSync(\n flow: FlowNode,\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n // Stop if already terminated\n if (state.status !== \"running\") {\n return {\n state,\n trace: createTraceNode(ctx.trace, \"flow\", nodePath, {}, null, []),\n };\n }\n\n switch (flow.kind) {\n case \"seq\":\n return evaluateSeq(flow.steps, ctx, state, nodePath);\n\n case \"if\":\n return evaluateIf(flow, ctx, state, nodePath);\n\n case \"patch\":\n return evaluatePatch(flow, ctx, state, nodePath);\n\n case \"effect\":\n return evaluateEffect(flow, ctx, state, nodePath);\n\n case \"call\":\n return evaluateCall(flow.flow, ctx, state, nodePath);\n\n case \"halt\":\n return evaluateHalt(flow.reason, ctx, state, nodePath);\n\n case \"fail\":\n return evaluateFail(flow, ctx, state, nodePath);\n\n default:\n return {\n state: setError(state, createError(\n \"INTERNAL_ERROR\",\n `Unknown flow kind: ${(flow as FlowNode).kind}`,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp\n )),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n}\n\nexport async function evaluateFlow(\n flow: FlowNode,\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): Promise<FlowResult> {\n return evaluateFlowSync(flow, ctx, state, nodePath);\n}\n\n// ============ Flow Node Handlers ============\n\nfunction evaluateSeq(\n steps: readonly FlowNode[],\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n let currentState = state;\n const children: TraceNode[] = [];\n\n for (let i = 0; i < steps.length; i++) {\n const stepPath = `${nodePath}.steps[${i}]`;\n const stepCtx = withNodePath(withSnapshot(ctx, currentState.snapshot), stepPath);\n\n const result = evaluateFlowSync(steps[i], stepCtx, currentState, stepPath);\n children.push(result.trace);\n currentState = result.state;\n\n // Stop if status changed (effect, halt, error)\n if (currentState.status !== \"running\") {\n break;\n }\n }\n\n return {\n state: currentState,\n trace: createTraceNode(ctx.trace, \"flow\", nodePath, { kind: \"seq\" }, null, children),\n };\n}\n\nfunction evaluateIf(\n flow: { cond: import(\"../schema/expr.js\").ExprNode; then: FlowNode; else?: FlowNode },\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n const condResult = evaluateExpr(flow.cond, ctx);\n\n if (!condResult.ok) {\n return {\n state: setError(state, condResult.error),\n trace: createTraceNode(ctx.trace, \"branch\", nodePath, { cond: false }, null, []),\n };\n }\n\n const condValue = condResult.value;\n const isTruthy = condValue !== null && condValue !== undefined && condValue !== false;\n\n const branchPath = isTruthy ? `${nodePath}.then` : `${nodePath}.else`;\n const branchFlow = isTruthy ? flow.then : flow.else;\n\n if (!branchFlow) {\n return {\n state,\n trace: createTraceNode(ctx.trace, \"branch\", nodePath, { cond: isTruthy }, null, []),\n };\n }\n\n const branchCtx = withNodePath(ctx, branchPath);\n const result = evaluateFlowSync(branchFlow, branchCtx, state, branchPath);\n\n return {\n state: result.state,\n trace: createTraceNode(ctx.trace, \"branch\", nodePath, { cond: isTruthy }, null, [result.trace]),\n };\n}\n\nfunction evaluatePatch(\n flow: { op: \"set\" | \"unset\" | \"merge\"; path: PatchPath; value?: import(\"../schema/expr.js\").ExprNode },\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n let patchValue: unknown = undefined;\n\n if (flow.op !== \"unset\" && flow.value) {\n const valueResult = evaluateExpr(flow.value, ctx);\n if (!valueResult.ok) {\n return {\n state: setError(state, valueResult.error),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n patchValue = valueResult.value;\n }\n\n const rootSpec: FieldSpec = { type: \"object\", required: true, fields: ctx.schema.state.fields };\n const typeDefinition = getStateTypeDefinitionAtSegments(ctx.schema.state, ctx.schema.types, flow.path);\n const fieldSpec = typeDefinition ? null : getFieldSpecAtSegments(rootSpec, flow.path);\n const displayPath = patchPathToDisplayString(flow.path);\n if (!typeDefinition && !fieldSpec) {\n return {\n state: setError(state, createError(\n \"PATH_NOT_FOUND\",\n `Unknown patch path: ${displayPath}`,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp\n )),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n if (flow.op !== \"unset\") {\n const validation = typeDefinition\n ? validateValueAgainstTypeDefinition(patchValue, typeDefinition, ctx.schema.types, {\n allowPartial: flow.op === \"merge\",\n allowUndefined: false,\n })\n : validateValueAgainstFieldSpec(patchValue, fieldSpec as FieldSpec, {\n allowPartial: flow.op === \"merge\",\n allowUndefined: false,\n });\n if (!validation.ok) {\n return {\n state: setError(state, createError(\n \"TYPE_MISMATCH\",\n `Invalid patch value at ${displayPath}: ${validation.message ?? \"type mismatch\"}`,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp\n )),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n }\n\n const patch: Patch = flow.op === \"unset\"\n ? { op: \"unset\", path: flow.path }\n : flow.op === \"merge\"\n ? { op: \"merge\", path: flow.path, value: patchValue as Record<string, unknown> }\n : { op: \"set\", path: flow.path, value: patchValue };\n\n const newState = applyPatchToState(state, patch);\n\n return {\n state: newState,\n trace: createTraceNode(ctx.trace, \"patch\", nodePath, { op: flow.op, path: displayPath }, patchValue, []),\n };\n}\n\nfunction evaluateEffect(\n flow: { type: string; params: Record<string, import(\"../schema/expr.js\").ExprNode> },\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n // Handle pure array operations inline (no IO needed)\n if (flow.type === \"array.map\" || flow.type === \"array.filter\") {\n return evaluateArrayOperation(flow, ctx, state, nodePath);\n }\n\n // Evaluate params\n const params: Record<string, unknown> = {};\n for (const [key, expr] of Object.entries(flow.params)) {\n const result = evaluateExpr(expr, ctx);\n if (!result.ok) {\n return {\n state: setError(state, result.error),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n params[key] = result.value;\n }\n\n // Generate deterministic requirement ID\n const requirementId = generateRequirementIdSync(\n ctx.snapshot.meta.schemaHash,\n ctx.intentId ?? \"\",\n ctx.currentAction ?? \"\",\n nodePath\n );\n\n const requirement: Requirement = {\n id: requirementId,\n type: flow.type,\n params,\n actionId: ctx.currentAction ?? \"\",\n flowPosition: {\n nodePath,\n snapshotVersion: ctx.snapshot.meta.version,\n },\n createdAt: ctx.trace.timestamp,\n };\n\n const newState = addRequirement(state, requirement);\n\n return {\n state: newState,\n trace: createTraceNode(ctx.trace, \"effect\", nodePath, { type: flow.type }, params, []),\n };\n}\n\n/**\n * Evaluate pure array operations (map/filter) inline\n * These are pure transformations that don't need Host effect handlers\n */\nfunction evaluateArrayOperation(\n flow: { type: string; params: Record<string, import(\"../schema/expr.js\").ExprNode> },\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n const { params } = flow;\n\n // Use the current state's snapshot (which reflects patches applied so far)\n const currentCtx = withSnapshot(ctx, state.snapshot);\n\n // Get source array\n const sourceExpr = params.source;\n if (!sourceExpr) {\n return {\n state: setError(state, createError(\n \"INVALID_INPUT\",\n `${flow.type} requires 'source' parameter`,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp\n )),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n const sourceResult = evaluateExpr(sourceExpr, currentCtx);\n if (!sourceResult.ok) {\n return {\n state: setError(state, sourceResult.error),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n const sourceArray = sourceResult.value;\n if (!Array.isArray(sourceArray)) {\n return {\n state: setError(state, createError(\n \"TYPE_MISMATCH\",\n `${flow.type} source must be an array`,\n currentCtx.currentAction ?? \"\",\n nodePath,\n currentCtx.trace.timestamp\n )),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n // Get target path\n const intoExpr = params.into;\n if (!intoExpr) {\n return {\n state: setError(state, createError(\n \"INVALID_INPUT\",\n `${flow.type} requires 'into' parameter`,\n currentCtx.currentAction ?? \"\",\n nodePath,\n currentCtx.trace.timestamp\n )),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n const intoResult = evaluateExpr(intoExpr, currentCtx);\n if (!intoResult.ok) {\n return {\n state: setError(state, intoResult.error),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n const targetPath = toPatchPath(intoResult.value);\n if (!targetPath) {\n return {\n state: setError(state, createError(\n \"INVALID_INPUT\",\n `${flow.type} into must resolve to PatchPath segments or semantic string path`,\n currentCtx.currentAction ?? \"\",\n nodePath,\n currentCtx.trace.timestamp\n )),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n // Get the transformation expression\n const transformExpr = flow.type === \"array.map\" ? params.select : params.where;\n if (!transformExpr) {\n return {\n state: setError(state, createError(\n \"INVALID_INPUT\",\n `${flow.type} requires '${flow.type === \"array.map\" ? \"select\" : \"where\"}' parameter`,\n currentCtx.currentAction ?? \"\",\n nodePath,\n currentCtx.trace.timestamp\n )),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n // Process the array\n const resultArray: unknown[] = [];\n\n for (let index = 0; index < sourceArray.length; index++) {\n const item = sourceArray[index];\n\n // Create context with $item, $index, $array\n const itemCtx = withCollectionContext(currentCtx, item, index, sourceArray);\n\n const itemResult = evaluateExpr(transformExpr, itemCtx);\n if (!itemResult.ok) {\n return {\n state: setError(state, itemResult.error),\n trace: createTraceNode(currentCtx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n if (flow.type === \"array.map\") {\n // For map, add the transformed value\n resultArray.push(itemResult.value);\n } else {\n // For filter, add original item if predicate is truthy\n const predicate = itemResult.value;\n if (predicate !== null && predicate !== undefined && predicate !== false) {\n resultArray.push(item);\n }\n }\n }\n\n // Create patch to set the result\n const patch: Patch = { op: \"set\", path: targetPath, value: resultArray };\n const newState = applyPatchToState(state, patch);\n\n return {\n state: newState,\n trace: createTraceNode(currentCtx.trace, \"effect\", nodePath, { type: flow.type, target: targetPath }, { count: resultArray.length }, []),\n };\n}\n\nfunction toPatchPath(value: unknown): PatchPath | null {\n if (typeof value === \"string\") {\n return semanticPathToPatchPath(value);\n }\n\n if (!Array.isArray(value)) {\n return null;\n }\n\n const segments: PatchSegment[] = [];\n for (const segment of value) {\n if (!segment || typeof segment !== \"object\") {\n return null;\n }\n\n const kind = (segment as { kind?: unknown }).kind;\n if (kind === \"prop\") {\n const name = (segment as { name?: unknown }).name;\n if (typeof name !== \"string\" || name.length === 0) {\n return null;\n }\n segments.push({ kind: \"prop\", name });\n continue;\n }\n\n if (kind === \"index\") {\n const index = (segment as { index?: unknown }).index;\n if (!Number.isInteger(index) || (index as number) < 0) {\n return null;\n }\n segments.push({ kind: \"index\", index: index as number });\n continue;\n }\n\n return null;\n }\n\n return segments.length > 0 ? segments : null;\n}\n\nfunction evaluateCall(\n flowName: string,\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n // Look up the flow in the schema\n const action = ctx.schema.actions[flowName];\n if (!action) {\n return {\n state: setError(state, createError(\n \"UNKNOWN_FLOW\",\n `Unknown flow: ${flowName}`,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp\n )),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, {}, null, []),\n };\n }\n\n const callPath = `${nodePath}.call(${flowName})`;\n const callCtx = withNodePath(ctx, callPath);\n\n const result = evaluateFlowSync(action.flow, callCtx, state, callPath);\n\n return {\n state: result.state,\n trace: createTraceNode(ctx.trace, \"call\", nodePath, { flow: flowName }, null, [result.trace]),\n };\n}\n\nfunction evaluateHalt(\n reason: string | undefined,\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n return {\n state: { ...state, status: \"halted\" },\n trace: createTraceNode(ctx.trace, \"halt\", nodePath, { reason }, null, []),\n };\n}\n\nfunction evaluateFail(\n flow: { code: string; message?: import(\"../schema/expr.js\").ExprNode },\n ctx: EvalContext,\n state: FlowState,\n nodePath: string\n): FlowResult {\n let message = flow.code;\n\n if (flow.message) {\n const messageResult = evaluateExpr(flow.message, ctx);\n if (messageResult.ok) {\n message = String(messageResult.value);\n }\n }\n\n const error = createError(\n \"VALIDATION_ERROR\",\n message,\n ctx.currentAction ?? \"\",\n nodePath,\n ctx.trace.timestamp,\n { code: flow.code }\n );\n\n return {\n state: setError(state, error),\n trace: createTraceNode(ctx.trace, \"error\", nodePath, { code: flow.code }, message, []),\n };\n}\n","import type { ComputedSpec } from \"../schema/computed.js\";\nimport type { SemanticPath } from \"../schema/common.js\";\nimport type { Result } from \"../schema/common.js\";\nimport type { ValidationError } from \"../schema/result.js\";\nimport { ok, err } from \"../schema/common.js\";\n\n/**\n * Dependency graph for computed values\n */\nexport type DependencyGraph = {\n readonly nodes: readonly SemanticPath[];\n readonly edges: ReadonlyMap<SemanticPath, readonly SemanticPath[]>;\n};\n\n/**\n * Build a dependency graph from ComputedSpec\n */\nexport function buildDependencyGraph(computed: ComputedSpec): DependencyGraph {\n const nodes = Object.keys(computed.fields);\n const edges = new Map<SemanticPath, SemanticPath[]>();\n\n for (const [path, spec] of Object.entries(computed.fields)) {\n // Filter deps to only include other computed fields\n const computedDeps = spec.deps.filter((dep) => dep in computed.fields);\n edges.set(path, computedDeps);\n }\n\n return { nodes, edges };\n}\n\n/**\n * Topological sort using Kahn's algorithm\n * Returns sorted order or error if cycles detected\n */\nexport function topologicalSort(graph: DependencyGraph): Result<SemanticPath[], ValidationError> {\n const inDegree = new Map<SemanticPath, number>();\n const adjacency = new Map<SemanticPath, SemanticPath[]>();\n\n // Initialize in-degree and adjacency list\n for (const node of graph.nodes) {\n inDegree.set(node, 0);\n adjacency.set(node, []);\n }\n\n // Build reverse edges (who depends on whom)\n for (const [node, deps] of graph.edges) {\n for (const dep of deps) {\n if (adjacency.has(dep)) {\n adjacency.get(dep)!.push(node);\n }\n inDegree.set(node, (inDegree.get(node) ?? 0) + 1);\n }\n }\n\n // Find all nodes with no dependencies\n const queue: SemanticPath[] = [];\n for (const [node, degree] of inDegree) {\n if (degree === 0) {\n queue.push(node);\n }\n }\n\n const sorted: SemanticPath[] = [];\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n sorted.push(node);\n\n // Reduce in-degree of dependent nodes\n for (const dependent of adjacency.get(node) ?? []) {\n const newDegree = (inDegree.get(dependent) ?? 1) - 1;\n inDegree.set(dependent, newDegree);\n if (newDegree === 0) {\n queue.push(dependent);\n }\n }\n }\n\n // If not all nodes are sorted, there's a cycle\n if (sorted.length !== graph.nodes.length) {\n const remaining = graph.nodes.filter((n) => !sorted.includes(n));\n return err({\n code: \"V-002\",\n message: `Cyclic dependency detected in computed fields: ${remaining.join(\", \")}`,\n path: remaining[0],\n });\n }\n\n return ok(sorted);\n}\n\n/**\n * Detect cycles in the dependency graph\n * Returns array of cycle paths or null if no cycles\n */\nexport function detectCycles(graph: DependencyGraph): SemanticPath[][] | null {\n const visited = new Set<SemanticPath>();\n const recursionStack = new Set<SemanticPath>();\n const cycles: SemanticPath[][] = [];\n\n function dfs(node: SemanticPath, path: SemanticPath[]): boolean {\n visited.add(node);\n recursionStack.add(node);\n\n const deps = graph.edges.get(node) ?? [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n if (dfs(dep, [...path, dep])) {\n return true;\n }\n } else if (recursionStack.has(dep)) {\n // Found a cycle\n const cycleStart = path.indexOf(dep);\n if (cycleStart !== -1) {\n cycles.push([...path.slice(cycleStart), dep]);\n } else {\n cycles.push([...path, dep]);\n }\n }\n }\n\n recursionStack.delete(node);\n return false;\n }\n\n for (const node of graph.nodes) {\n if (!visited.has(node)) {\n dfs(node, [node]);\n }\n }\n\n return cycles.length > 0 ? cycles : null;\n}\n\n/**\n * Get all dependencies (transitive) for a given node\n */\nexport function getTransitiveDeps(\n graph: DependencyGraph,\n node: SemanticPath\n): Set<SemanticPath> {\n const deps = new Set<SemanticPath>();\n const queue = [...(graph.edges.get(node) ?? [])];\n\n while (queue.length > 0) {\n const dep = queue.shift()!;\n if (!deps.has(dep)) {\n deps.add(dep);\n queue.push(...(graph.edges.get(dep) ?? []));\n }\n }\n\n return deps;\n}\n","import type { DomainSchema } from \"../schema/domain.js\";\nimport type { Snapshot } from \"../schema/snapshot.js\";\nimport type { SemanticPath, Result } from \"../schema/common.js\";\nimport type { ErrorValue } from \"../schema/snapshot.js\";\nimport { ok, err, isErr } from \"../schema/common.js\";\nimport { createError } from \"../errors.js\";\nimport { createContext } from \"./context.js\";\nimport { createTraceContext } from \"../schema/trace.js\";\nimport { evaluateExpr } from \"./expr.js\";\nimport { buildDependencyGraph, topologicalSort } from \"./dag.js\";\n\n/**\n * Evaluate all computed values for a snapshot\n * Returns the computed values record or an error\n */\nexport function evaluateComputed(\n schema: DomainSchema,\n snapshot: Snapshot\n): Result<Record<SemanticPath, unknown>, ErrorValue> {\n const trace = createTraceContext(snapshot.meta.timestamp);\n // Build dependency graph\n const graph = buildDependencyGraph(schema.computed);\n\n // Get topological order\n const sortResult = topologicalSort(graph);\n if (!sortResult.ok) {\n return err(createError(\n \"CYCLIC_DEPENDENCY\",\n sortResult.error.message,\n \"\",\n sortResult.error.path ?? \"\",\n trace.timestamp\n ));\n }\n\n // Evaluate in topological order\n const computed: Record<SemanticPath, unknown> = {};\n\n // Create a temporary snapshot with computed values being built\n let tempSnapshot: Snapshot = {\n ...snapshot,\n computed,\n };\n\n for (const path of sortResult.value) {\n const spec = schema.computed.fields[path];\n if (!spec) continue;\n\n // Create context with current state of computed values\n const ctx = createContext(tempSnapshot, schema, null, path, undefined, trace);\n\n // Evaluate the expression\n const result = evaluateExpr(spec.expr, ctx);\n\n if (isErr(result)) {\n return result;\n }\n\n // Store the computed value\n computed[path] = result.value;\n\n // Update temp snapshot for next iteration\n tempSnapshot = {\n ...tempSnapshot,\n computed: { ...computed },\n };\n }\n\n return ok(computed);\n}\n\n/**\n * Evaluate a single computed value\n */\nexport function evaluateSingleComputed(\n schema: DomainSchema,\n snapshot: Snapshot,\n path: SemanticPath\n): Result<unknown, ErrorValue> {\n const trace = createTraceContext(snapshot.meta.timestamp);\n const spec = schema.computed.fields[path];\n if (!spec) {\n return err(createError(\n \"PATH_NOT_FOUND\",\n `Computed field not found: ${path}`,\n \"\",\n path,\n trace.timestamp\n ));\n }\n\n const ctx = createContext(snapshot, schema, null, path, undefined, trace);\n return evaluateExpr(spec.expr, ctx);\n}\n","import type { DomainSchema } from \"../schema/domain.js\";\nimport type { Snapshot } from \"../schema/snapshot.js\";\nimport type { Intent } from \"../schema/patch.js\";\nimport { createContext } from \"../evaluator/context.js\";\nimport { evaluateComputed } from \"../evaluator/computed.js\";\nimport { evaluateExpr } from \"../evaluator/expr.js\";\nimport { isErr } from \"../schema/common.js\";\n\ntype ActionAvailabilityErrorCode = \"UNKNOWN_ACTION\" | \"INTERNAL_ERROR\" | \"TYPE_MISMATCH\";\ntype ActionDispatchabilityErrorCode = \"UNKNOWN_ACTION\" | \"INTERNAL_ERROR\" | \"TYPE_MISMATCH\";\n\nexport type ActionAvailabilityEvaluation =\n | { kind: \"ok\"; available: boolean }\n | { kind: \"error\"; code: ActionAvailabilityErrorCode; message: string };\n\nexport type ActionDispatchabilityEvaluation =\n | { kind: \"ok\"; dispatchable: boolean }\n | { kind: \"error\"; code: ActionDispatchabilityErrorCode; message: string };\n\ntype PreparedQuerySnapshot =\n | { kind: \"ok\"; snapshot: Snapshot }\n | { kind: \"error\"; code: \"INTERNAL_ERROR\"; message: string };\n\nfunction prepareQuerySnapshot(\n schema: DomainSchema,\n snapshot: Snapshot\n): PreparedQuerySnapshot {\n const computed = evaluateComputed(schema, snapshot);\n if (isErr(computed)) {\n return {\n kind: \"error\",\n code: \"INTERNAL_ERROR\",\n message: `Error evaluating computed values for legality query: ${computed.error.message}`,\n };\n }\n\n return {\n kind: \"ok\",\n snapshot: {\n ...snapshot,\n computed: computed.value,\n },\n };\n}\n\nfunction evaluateAvailabilityAgainstPreparedSnapshot(\n schema: DomainSchema,\n preparedSnapshot: Snapshot,\n actionName: string,\n timestamp: number\n): ActionAvailabilityEvaluation {\n const action = schema.actions[actionName];\n if (!action) {\n return {\n kind: \"error\",\n code: \"UNKNOWN_ACTION\",\n message: `Unknown action: ${actionName}`,\n };\n }\n\n if (!action.available) {\n return { kind: \"ok\", available: true };\n }\n\n const ctx = createContext(\n preparedSnapshot,\n schema,\n null,\n `actions.${actionName}.available`,\n undefined,\n timestamp\n );\n const result = evaluateExpr(action.available, ctx);\n\n if (isErr(result)) {\n return {\n kind: \"error\",\n code: \"INTERNAL_ERROR\",\n message: `Error evaluating availability: ${result.error.message}`,\n };\n }\n\n if (typeof result.value !== \"boolean\") {\n return {\n kind: \"error\",\n code: \"TYPE_MISMATCH\",\n message: `Availability condition must return boolean, got ${typeof result.value}`,\n };\n }\n\n return { kind: \"ok\", available: result.value };\n}\n\n/**\n * Evaluate an action's availability expression without re-entry semantics.\n *\n * This is the shared evaluator used by compute() initial invocation checks and\n * the public availability query API.\n */\nexport function evaluateActionAvailability(\n schema: DomainSchema,\n snapshot: Snapshot,\n actionName: string,\n timestamp: number = snapshot.meta.timestamp\n): ActionAvailabilityEvaluation {\n const prepared = prepareQuerySnapshot(schema, snapshot);\n if (prepared.kind === \"error\") {\n return prepared;\n }\n\n return evaluateAvailabilityAgainstPreparedSnapshot(\n schema,\n prepared.snapshot,\n actionName,\n timestamp\n );\n}\n\n/**\n * Check whether an action is available for a new invocation.\n */\nexport function isActionAvailable(\n schema: DomainSchema,\n snapshot: Snapshot,\n actionName: string\n): boolean {\n const result = evaluateActionAvailability(schema, snapshot, actionName);\n if (result.kind === \"error\") {\n throw new Error(result.message);\n }\n return result.available;\n}\n\n/**\n * Evaluate whether a specific bound intent is dispatchable.\n */\nexport function evaluateIntentDispatchability(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent,\n timestamp: number = snapshot.meta.timestamp\n): ActionDispatchabilityEvaluation {\n const action = schema.actions[intent.type];\n if (!action) {\n return {\n kind: \"error\",\n code: \"UNKNOWN_ACTION\",\n message: `Unknown action: ${intent.type}`,\n };\n }\n\n const prepared = prepareQuerySnapshot(schema, snapshot);\n if (prepared.kind === \"error\") {\n return prepared;\n }\n\n const availability = evaluateAvailabilityAgainstPreparedSnapshot(\n schema,\n prepared.snapshot,\n intent.type,\n timestamp\n );\n if (availability.kind === \"error\") {\n return availability;\n }\n\n if (!availability.available) {\n return { kind: \"ok\", dispatchable: false };\n }\n\n if (!action.dispatchable) {\n return { kind: \"ok\", dispatchable: true };\n }\n\n const ctx = createContext(\n {\n ...prepared.snapshot,\n input: intent.input,\n },\n schema,\n intent.type,\n `actions.${intent.type}.dispatchable`,\n intent.intentId,\n timestamp\n );\n const result = evaluateExpr(action.dispatchable, ctx);\n\n if (isErr(result)) {\n return {\n kind: \"error\",\n code: \"INTERNAL_ERROR\",\n message: `Error evaluating dispatchability: ${result.error.message}`,\n };\n }\n\n if (typeof result.value !== \"boolean\") {\n return {\n kind: \"error\",\n code: \"TYPE_MISMATCH\",\n message: `Dispatchability condition must return boolean, got ${typeof result.value}`,\n };\n }\n\n return { kind: \"ok\", dispatchable: result.value };\n}\n\n/**\n * Check whether a specific bound intent is dispatchable.\n */\nexport function isIntentDispatchable(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent\n): boolean {\n const result = evaluateIntentDispatchability(schema, snapshot, intent);\n if (result.kind === \"error\") {\n throw new Error(result.message);\n }\n return result.dispatchable;\n}\n\n/**\n * Return all currently available actions in schema key order.\n */\nexport function getAvailableActions(\n schema: DomainSchema,\n snapshot: Snapshot\n): readonly string[] {\n const prepared = prepareQuerySnapshot(schema, snapshot);\n if (prepared.kind === \"error\") {\n throw new Error(prepared.message);\n }\n\n return Object.keys(schema.actions).filter((actionName) => {\n const result = evaluateAvailabilityAgainstPreparedSnapshot(\n schema,\n prepared.snapshot,\n actionName,\n snapshot.meta.timestamp\n );\n if (result.kind === \"error\") {\n throw new Error(result.message);\n }\n return result.available;\n });\n}\n","import type { Snapshot } from \"../schema/snapshot.js\";\nimport type { Requirement, ErrorValue, SystemState } from \"../schema/snapshot.js\";\nimport type { SystemDelta } from \"../schema/result.js\";\n\n/**\n * Apply a declarative system transition to a snapshot.\n *\n * This function is pure, deterministic, and total.\n */\nexport function applySystemDelta(snapshot: Snapshot, delta: SystemDelta): Snapshot {\n const hasStatus = hasOwn(delta, \"status\");\n const hasCurrentAction = hasOwn(delta, \"currentAction\");\n const hasLastError = hasOwn(delta, \"lastError\");\n const removeRequirementIds = new Set(delta.removeRequirementIds ?? []);\n const addRequirements = delta.addRequirements ?? [];\n\n const nextPending = applyRequirementDelta(\n snapshot.system.pendingRequirements,\n removeRequirementIds,\n addRequirements\n );\n\n const nextSystem: SystemState = {\n ...snapshot.system,\n status: hasStatus ? delta.status! : snapshot.system.status,\n currentAction: hasCurrentAction ? (delta.currentAction ?? null) : snapshot.system.currentAction,\n lastError: hasLastError ? (delta.lastError ?? null) : snapshot.system.lastError,\n pendingRequirements: nextPending,\n };\n\n if (!hasSystemChanged(snapshot.system, nextSystem)) {\n return snapshot;\n }\n\n return {\n ...snapshot,\n system: nextSystem,\n meta: {\n ...snapshot.meta,\n version: snapshot.meta.version + 1,\n },\n };\n}\n\nfunction applyRequirementDelta(\n current: readonly Requirement[],\n removeRequirementIds: ReadonlySet<string>,\n addRequirements: readonly Requirement[]\n): Requirement[] {\n const incomingIds = new Set(addRequirements.map((requirement) => requirement.id));\n const retained = current.filter(\n (requirement) => !removeRequirementIds.has(requirement.id) && !incomingIds.has(requirement.id)\n );\n\n return [...retained, ...addRequirements];\n}\n\nfunction hasSystemChanged(previous: SystemState, next: SystemState): boolean {\n if (previous.status !== next.status) {\n return true;\n }\n if (previous.currentAction !== next.currentAction) {\n return true;\n }\n if (!isErrorValueEqual(previous.lastError, next.lastError)) {\n return true;\n }\n if (!areRequirementArraysEqual(previous.pendingRequirements, next.pendingRequirements)) {\n return true;\n }\n return false;\n}\n\nfunction areRequirementArraysEqual(a: readonly Requirement[], b: readonly Requirement[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (!isRequirementEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isErrorValueEqual(a: ErrorValue | null, b: ErrorValue | null): boolean {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n if (a.code !== b.code || a.message !== b.message || a.timestamp !== b.timestamp) {\n return false;\n }\n if (a.source.actionId !== b.source.actionId || a.source.nodePath !== b.source.nodePath) {\n return false;\n }\n\n const aContext = a.context ?? {};\n const bContext = b.context ?? {};\n return JSON.stringify(aContext) === JSON.stringify(bContext);\n}\n\nfunction isRequirementEqual(a: Requirement, b: Requirement): boolean {\n return (\n a.id === b.id\n && a.type === b.type\n && a.actionId === b.actionId\n && a.createdAt === b.createdAt\n && a.flowPosition.nodePath === b.flowPosition.nodePath\n && a.flowPosition.snapshotVersion === b.flowPosition.snapshotVersion\n && JSON.stringify(a.params) === JSON.stringify(b.params)\n );\n}\n\nfunction hasOwn<T extends object, K extends PropertyKey>(obj: T, key: K): boolean {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n","import type { DomainSchema } from \"../schema/domain.js\";\nimport type { Snapshot } from \"../schema/snapshot.js\";\nimport type { ErrorValue, Requirement } from \"../schema/snapshot.js\";\nimport type { Intent, Patch } from \"../schema/patch.js\";\nimport type { ComputeResult, ComputeStatus, SystemDelta } from \"../schema/result.js\";\nimport type { TraceGraph } from \"../schema/trace.js\";\nimport type { FieldSpec } from \"../schema/field.js\";\nimport { createError } from \"../errors.js\";\nimport { createContext } from \"../evaluator/context.js\";\nimport { evaluateFlowSync, createFlowState, type FlowStatus } from \"../evaluator/flow.js\";\nimport { evaluateComputed } from \"../evaluator/computed.js\";\nimport { isOk } from \"../schema/common.js\";\nimport type { HostContext } from \"../schema/host-context.js\";\nimport { evaluateActionAvailability } from \"./action-availability.js\";\nimport { applySystemDelta } from \"./system-delta.js\";\nimport { validateValueAgainstTypeDefinition } from \"./type-definition-utils.js\";\n\n/**\n * Compute the result of dispatching an intent (synchronous).\n *\n * This is the canonical computation path. Each call is independent -\n * there is no suspended context.\n */\nexport function computeSync(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent,\n context: HostContext\n): ComputeResult {\n let currentSnapshot = snapshot;\n const initialComputedResult = evaluateComputed(schema, snapshot);\n if (isOk(initialComputedResult)) {\n currentSnapshot = {\n ...snapshot,\n computed: initialComputedResult.value,\n };\n }\n\n const action = schema.actions[intent.type];\n if (!action) {\n return createErrorResult(\n currentSnapshot,\n intent,\n \"UNKNOWN_ACTION\",\n `Unknown action: ${intent.type}`,\n context\n );\n }\n\n const inputError = validateIntentInput(schema, intent);\n if (inputError) {\n return createErrorResult(\n currentSnapshot,\n intent,\n \"INVALID_INPUT\",\n inputError,\n context\n );\n }\n\n const isReEntry = currentSnapshot.system.currentAction === intent.type;\n\n if (action.available && !isReEntry) {\n const availability = evaluateActionAvailability(schema, currentSnapshot, intent.type, context.now);\n if (availability.kind === \"error\") {\n return createErrorResult(\n currentSnapshot,\n intent,\n availability.code,\n availability.message,\n context\n );\n }\n\n if (!availability.available) {\n return createErrorResult(\n currentSnapshot,\n intent,\n \"ACTION_UNAVAILABLE\",\n `Action \"${intent.type}\" is not available`,\n context\n );\n }\n }\n\n const preparedSnapshot: Snapshot = {\n ...currentSnapshot,\n input: intent.input,\n system: {\n ...currentSnapshot.system,\n status: \"computing\",\n currentAction: intent.type,\n },\n };\n\n const ctx = createContext(preparedSnapshot, schema, intent.type, `actions.${intent.type}.flow`, intent.intentId, context.now);\n const flowState = createFlowState(preparedSnapshot);\n\n const flowResult = evaluateFlowSync(\n action.flow,\n ctx,\n flowState,\n `actions.${intent.type}.flow`\n );\n\n const status = mapFlowStatus(flowResult.state.status);\n const systemDelta = createSystemDeltaForFlow(currentSnapshot, intent, status, flowResult.state.error, flowResult.state.requirements);\n const patches = [...flowResult.state.patches];\n\n const trace: TraceGraph = {\n root: flowResult.trace,\n nodes: collectTraceNodes(flowResult.trace),\n intent: { type: intent.type, input: intent.input },\n baseVersion: currentSnapshot.meta.version,\n resultVersion: estimateResultVersion(currentSnapshot, patches, systemDelta),\n duration: context.durationMs ?? 0,\n terminatedBy: mapFlowStatusToTermination(flowResult.state.status),\n };\n\n return {\n patches,\n systemDelta,\n trace,\n status,\n };\n}\n\n/**\n * Compute the result of dispatching an intent (async wrapper).\n */\nexport async function compute(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent,\n context: HostContext\n): Promise<ComputeResult> {\n return computeSync(schema, snapshot, intent, context);\n}\n\n/**\n * Validate only the caller-provided input portion of an intent.\n * Returns an error message when the intent is malformed, or null when valid.\n */\nexport function validateIntentInput(\n schema: DomainSchema,\n intent: Intent,\n): string | null {\n if (!intent.intentId || intent.intentId === \"\") {\n return \"Intent must have a non-empty intentId\";\n }\n\n const action = schema.actions[intent.type];\n if (!action) {\n return null;\n }\n\n if (!action.input && !action.inputType) {\n return null;\n }\n\n return validateInput(schema, action.inputType, action.input, intent.input);\n}\n\n/**\n * Map flow status to compute status\n */\nfunction mapFlowStatus(status: FlowStatus): ComputeStatus {\n switch (status) {\n case \"running\":\n case \"complete\":\n return \"complete\";\n case \"pending\":\n return \"pending\";\n case \"halted\":\n return \"halted\";\n case \"error\":\n return \"error\";\n }\n}\n\n/**\n * Map flow status to trace termination\n */\nfunction mapFlowStatusToTermination(status: FlowStatus): TraceGraph[\"terminatedBy\"] {\n switch (status) {\n case \"running\":\n case \"complete\":\n return \"complete\";\n case \"pending\":\n return \"effect\";\n case \"halted\":\n return \"halt\";\n case \"error\":\n return \"error\";\n }\n}\n\n/**\n * Collect all trace nodes into a flat map\n */\nfunction collectTraceNodes(root: import(\"../schema/trace.js\").TraceNode): Record<string, import(\"../schema/trace.js\").TraceNode> {\n const nodes: Record<string, import(\"../schema/trace.js\").TraceNode> = {};\n\n function collect(node: import(\"../schema/trace.js\").TraceNode) {\n nodes[node.id] = node;\n for (const child of node.children) {\n collect(child);\n }\n }\n\n collect(root);\n return nodes;\n}\n\n/**\n * Create an error result\n */\nfunction createErrorResult(\n snapshot: Snapshot,\n intent: Intent,\n code: string,\n message: string,\n context: HostContext\n): ComputeResult {\n const error = createError(\n code as import(\"../errors.js\").CoreErrorCode,\n message,\n intent.type,\n \"\",\n context.now\n );\n\n const systemDelta: SystemDelta = {\n status: \"error\",\n currentAction: null,\n lastError: error,\n addRequirements: [],\n removeRequirementIds: [],\n };\n\n const trace: TraceGraph = {\n root: {\n id: `trace-error-${intent.intentId}`,\n kind: \"error\",\n sourcePath: \"\",\n inputs: {},\n output: error,\n children: [],\n timestamp: context.now,\n },\n nodes: {},\n intent: { type: intent.type, input: intent.input },\n baseVersion: snapshot.meta.version,\n resultVersion: estimateResultVersion(snapshot, [], systemDelta),\n duration: context.durationMs ?? 0,\n terminatedBy: \"error\",\n };\n\n return {\n patches: [],\n systemDelta,\n trace,\n status: \"error\",\n };\n}\n\nfunction createSystemDeltaForFlow(\n snapshot: Snapshot,\n intent: Intent,\n status: ComputeStatus,\n flowError: ErrorValue | null,\n requirements: readonly Requirement[]\n): SystemDelta {\n const isError = status === \"error\";\n const systemStatus = status === \"pending\"\n ? \"pending\"\n : status === \"error\"\n ? \"error\"\n : \"idle\";\n\n return {\n status: systemStatus,\n currentAction: status === \"pending\" ? intent.type : null,\n lastError: flowError,\n addRequirements: [...requirements],\n removeRequirementIds: snapshot.system.pendingRequirements.map((requirement) => requirement.id),\n };\n}\n\nfunction estimateResultVersion(snapshot: Snapshot, patches: readonly Patch[], delta: SystemDelta): number {\n let version = snapshot.meta.version;\n\n // Host interlock always executes core.apply() first, even for empty patch arrays.\n // apply() increments snapshot version by exactly 1.\n version += 1;\n\n const applied = applySystemDelta(snapshot, delta);\n if (applied !== snapshot) {\n version += 1;\n }\n\n return version;\n}\n\n/**\n * Validate input against action's input schema\n * Returns error message if invalid, null if valid\n */\nfunction validateInput(\n schema: DomainSchema,\n inputType: import(\"../schema/type-spec.js\").TypeDefinition | undefined,\n inputSpec: FieldSpec | undefined,\n input: unknown,\n): string | null {\n if (inputType) {\n const result = validateValueAgainstTypeDefinition(input, inputType, schema.types);\n return result.ok ? null : result.message ?? \"Invalid input\";\n }\n\n if (!inputSpec) {\n return null;\n }\n\n if (inputSpec.type === \"object\") {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return `Expected object input, got ${typeof input}`;\n }\n\n const inputObj = input as Record<string, unknown>;\n const fields = inputSpec.fields ?? {};\n\n for (const [fieldName, fieldSpec] of Object.entries(fields)) {\n if (fieldSpec.required && !(fieldName in inputObj)) {\n return `Missing required field: ${fieldName}`;\n }\n }\n\n for (const key of Object.keys(inputObj)) {\n if (!(key in fields)) {\n return `Unknown field: ${key}`;\n }\n }\n\n for (const [fieldName, fieldSpec] of Object.entries(fields)) {\n if (fieldName in inputObj) {\n const error = validateFieldValue(fieldSpec, inputObj[fieldName], fieldName);\n if (error) return error;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Validate a field value against its spec\n */\nfunction validateFieldValue(spec: FieldSpec, value: unknown, path: string): string | null {\n if (value === undefined || value === null) {\n if (spec.required) {\n return `Missing required field: ${path}`;\n }\n return null;\n }\n\n switch (spec.type) {\n case \"string\":\n if (typeof value !== \"string\") {\n return `Expected string for ${path}, got ${typeof value}`;\n }\n break;\n case \"number\":\n if (typeof value !== \"number\") {\n return `Expected number for ${path}, got ${typeof value}`;\n }\n break;\n case \"boolean\":\n if (typeof value !== \"boolean\") {\n return `Expected boolean for ${path}, got ${typeof value}`;\n }\n break;\n case \"array\":\n if (!Array.isArray(value)) {\n return `Expected array for ${path}, got ${typeof value}`;\n }\n break;\n case \"object\":\n if (typeof value !== \"object\" || Array.isArray(value)) {\n return `Expected object for ${path}, got ${typeof value}`;\n }\n break;\n }\n\n return null;\n}\n","import type { DomainSchema } from \"../schema/domain.js\";\nimport type { Snapshot } from \"../schema/snapshot.js\";\nimport type { Patch, PatchPath } from \"../schema/patch.js\";\nimport type { HostContext } from \"../schema/host-context.js\";\nimport type { FieldSpec } from \"../schema/field.js\";\nimport { evaluateComputed } from \"../evaluator/computed.js\";\nimport { isOk, isErr } from \"../schema/common.js\";\nimport type { SystemState, ErrorValue } from \"../schema/snapshot.js\";\nimport { createError } from \"../errors.js\";\nimport {\n getFieldSpecAtSegments,\n validateValueAgainstFieldSpec,\n} from \"./validation-utils.js\";\nimport {\n getStateTypeDefinitionAtSegments,\n validateValueAgainstTypeDefinition,\n} from \"./type-definition-utils.js\";\nimport {\n isSafePatchPath,\n mergeAtPatchPath,\n patchPathToDisplayString,\n setByPatchPath,\n unsetByPatchPath,\n} from \"../utils/patch-path.js\";\n\nconst PLATFORM_NAMESPACE_SPEC: FieldSpec = { type: \"object\", required: false };\n\n/**\n * Apply patches to snapshot.data and recompute computed values.\n *\n * Patch targets are rooted at snapshot.data only.\n * System transitions are handled by applySystemDelta().\n */\nexport function apply(\n schema: DomainSchema,\n snapshot: Snapshot,\n patches: readonly Patch[],\n context: HostContext\n): Snapshot {\n let newData = snapshot.data;\n let newSystem: SystemState = snapshot.system;\n const newInput = snapshot.input;\n const validationErrors: ErrorValue[] = [];\n const rootSpec: FieldSpec = { type: \"object\", required: true, fields: schema.state.fields };\n\n for (const patch of patches) {\n const displayPath = patchPathToDisplayString(patch.path);\n\n if (!isSafePatchPath(patch.path)) {\n validationErrors.push(createError(\n \"PATH_NOT_FOUND\",\n `Unsafe patch path: ${displayPath}`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n\n const bypassRoot = getPlatformBypassRoot(patch.path);\n if (bypassRoot) {\n if (patch.op !== \"unset\") {\n if (patch.path.length === 1) {\n const platformRootResult = validateValueAgainstFieldSpec(\n patch.value,\n PLATFORM_NAMESPACE_SPEC,\n {\n allowPartial: patch.op === \"merge\",\n allowUndefined: false,\n }\n );\n if (!platformRootResult.ok) {\n validationErrors.push(createError(\n \"TYPE_MISMATCH\",\n `Invalid patch value at ${displayPath}: ${platformRootResult.message ?? \"type mismatch\"}`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n }\n\n if (patch.op === \"merge\" && !isMergeTargetCompatible(newData, patch.path)) {\n validationErrors.push(createError(\n \"TYPE_MISMATCH\",\n `Invalid merge target at ${displayPath}: target path must be an object or absent`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n }\n\n newData = applyPatch(newData, patch);\n continue;\n }\n\n const typeDefinition = getStateTypeDefinitionAtSegments(schema.state, schema.types, patch.path);\n const fieldSpec = typeDefinition ? null : getFieldSpecAtSegments(rootSpec, patch.path);\n if (!typeDefinition && !fieldSpec) {\n validationErrors.push(createError(\n \"PATH_NOT_FOUND\",\n `Unknown patch path: ${displayPath}`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n\n if (patch.op === \"merge\" && !isMergeTargetCompatible(newData, patch.path)) {\n validationErrors.push(createError(\n \"TYPE_MISMATCH\",\n `Invalid merge target at ${displayPath}: target path must be an object or absent`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n\n if (patch.op !== \"unset\") {\n const result = typeDefinition\n ? validateValueAgainstTypeDefinition(patch.value, typeDefinition, schema.types, {\n allowPartial: patch.op === \"merge\",\n allowUndefined: false,\n })\n : validateValueAgainstFieldSpec(patch.value, fieldSpec as FieldSpec, {\n allowPartial: patch.op === \"merge\",\n allowUndefined: false,\n });\n if (!result.ok) {\n validationErrors.push(createError(\n \"TYPE_MISMATCH\",\n `Invalid patch value at ${displayPath}: ${result.message ?? \"type mismatch\"}`,\n snapshot.system.currentAction ?? \"\",\n displayPath,\n context.now,\n { patch }\n ));\n continue;\n }\n }\n\n newData = applyPatch(newData, patch);\n }\n\n if (validationErrors.length > 0) {\n const lastError = validationErrors[validationErrors.length - 1];\n newSystem = {\n ...newSystem,\n status: \"error\",\n lastError,\n };\n }\n\n const intermediateSnapshot: Snapshot = {\n ...snapshot,\n data: newData,\n system: newSystem,\n input: newInput,\n };\n\n const computedResult = evaluateComputed(schema, intermediateSnapshot);\n let computed = snapshot.computed;\n if (isOk(computedResult)) {\n computed = computedResult.value;\n } else if (isErr(computedResult)) {\n const error = computedResult.error;\n computed = {};\n newSystem = {\n ...newSystem,\n status: \"error\",\n lastError: error,\n };\n }\n\n return {\n data: newData,\n computed,\n system: newSystem,\n input: newInput,\n meta: {\n ...snapshot.meta,\n version: snapshot.meta.version + 1,\n timestamp: context.now,\n randomSeed: context.randomSeed,\n },\n };\n}\n\nfunction getPlatformBypassRoot(path: PatchPath): string | null {\n const first = path[0];\n if (first.kind !== \"prop\") {\n return null;\n }\n return first.name.startsWith(\"$\") ? first.name : null;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && !Array.isArray(value) && typeof value === \"object\";\n}\n\n/**\n * Merge target is valid when:\n * - path is absent, or\n * - existing target is an object.\n */\nfunction isMergeTargetCompatible(root: unknown, path: PatchPath): boolean {\n let current: unknown = root;\n\n for (const segment of path) {\n if (current === undefined) {\n return true;\n }\n\n if (segment.kind === \"prop\") {\n if (!isObjectRecord(current)) {\n return false;\n }\n current = current[segment.name];\n continue;\n }\n\n if (!Array.isArray(current)) {\n return false;\n }\n current = current[segment.index];\n }\n\n if (current === undefined) {\n return true;\n }\n return isObjectRecord(current);\n}\n\nfunction applyPatch(value: unknown, patch: Patch): unknown {\n switch (patch.op) {\n case \"set\":\n return setByPatchPath(value, patch.path, patch.value);\n case \"unset\":\n return unsetByPatchPath(value, patch.path);\n case \"merge\":\n return mergeAtPatchPath(value, patch.path, patch.value);\n }\n}\n","import { z } from \"zod\";\nimport { StateSpec } from \"./field.js\";\nimport { ComputedSpec } from \"./computed.js\";\nimport { ActionSpec } from \"./action.js\";\nimport { TypeSpec } from \"./type-spec.js\";\n\n/**\n * Schema metadata\n */\nexport const SchemaMeta = z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n authors: z.array(z.string()).optional(),\n});\nexport type SchemaMeta = z.infer<typeof SchemaMeta>;\n\n/**\n * DomainSchema - Complete schema definition\n *\n * Defines:\n * - What the domain looks like (StateSpec)\n * - What can be derived (ComputedSpec)\n * - How state transitions occur (Actions → FlowSpec)\n */\nexport const DomainSchema = z.object({\n /**\n * Unique identifier for this schema.\n * MUST be a valid URI or UUID.\n */\n id: z.string(),\n\n /**\n * Semantic version.\n * MUST follow Semantic Versioning 2.0.\n */\n version: z.string(),\n\n /**\n * Content hash for integrity verification.\n * MUST be computed using the Canonical Form algorithm.\n */\n hash: z.string(),\n\n /**\n * Named type declarations (compiler v0.3.3).\n * Pure metadata; Core does not interpret these.\n */\n types: z.record(z.string(), TypeSpec),\n\n /**\n * State structure definition\n */\n state: StateSpec,\n\n /**\n * Computed values (DAG)\n */\n computed: ComputedSpec,\n\n /**\n * Intent-to-Flow mappings\n */\n actions: z.record(z.string(), ActionSpec),\n\n /**\n * Schema metadata\n */\n meta: SchemaMeta.optional(),\n});\nexport type DomainSchema = z.infer<typeof DomainSchema>;\n","import { z } from \"zod\";\nimport { TypeDefinition } from \"./type-spec.js\";\n\n/**\n * Field type definitions\n */\nexport const PrimitiveFieldType = z.enum([\n \"string\",\n \"number\",\n \"boolean\",\n \"null\",\n \"object\",\n \"array\",\n]);\nexport type PrimitiveFieldType = z.infer<typeof PrimitiveFieldType>;\n\nexport const EnumFieldType = z.object({\n enum: z.array(z.unknown()).readonly(),\n});\nexport type EnumFieldType = z.infer<typeof EnumFieldType>;\n\nexport const FieldType = z.union([PrimitiveFieldType, EnumFieldType]);\nexport type FieldType = z.infer<typeof FieldType>;\n\n/**\n * Field specification (recursive for nested objects/arrays)\n */\nexport type FieldSpec = {\n type: FieldType;\n required: boolean;\n default?: unknown;\n description?: string;\n fields?: Record<string, FieldSpec>; // For object type\n items?: FieldSpec; // For array type\n};\n\nexport const FieldSpec: z.ZodType<FieldSpec> = z.lazy(() =>\n z.object({\n type: FieldType,\n required: z.boolean(),\n default: z.unknown().optional(),\n description: z.string().optional(),\n fields: z.record(z.string(), FieldSpec).optional(),\n items: FieldSpec.optional(),\n })\n);\n\n/**\n * State specification - defines the shape of domain state\n */\nexport const StateSpec = z.object({\n fields: z.record(z.string(), FieldSpec),\n fieldTypes: z.record(z.string(), TypeDefinition).optional(),\n});\nexport type StateSpec = z.infer<typeof StateSpec>;\n","import { z } from \"zod\";\n\nexport type TypeDefinition =\n | { kind: \"primitive\"; type: string }\n | { kind: \"array\"; element: TypeDefinition }\n | { kind: \"record\"; key: TypeDefinition; value: TypeDefinition }\n | { kind: \"object\"; fields: Record<string, { type: TypeDefinition; optional: boolean }> }\n | { kind: \"union\"; types: TypeDefinition[] }\n | { kind: \"literal\"; value: string | number | boolean | null }\n | { kind: \"ref\"; name: string };\n\nexport const TypeDefinition: z.ZodType<TypeDefinition> = z.lazy(() =>\n z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"primitive\"),\n type: z.string(),\n }),\n z.object({\n kind: z.literal(\"array\"),\n element: TypeDefinition,\n }),\n z.object({\n kind: z.literal(\"record\"),\n key: TypeDefinition,\n value: TypeDefinition,\n }),\n z.object({\n kind: z.literal(\"object\"),\n fields: z.record(\n z.string(),\n z.object({\n type: TypeDefinition,\n optional: z.boolean(),\n })\n ),\n }),\n z.object({\n kind: z.literal(\"union\"),\n types: z.array(TypeDefinition).min(1),\n }),\n z.object({\n kind: z.literal(\"literal\"),\n value: z.union([z.string(), z.number(), z.boolean(), z.null()]),\n }),\n z.object({\n kind: z.literal(\"ref\"),\n name: z.string(),\n }),\n ])\n);\n\nexport const TypeSpec = z.object({\n name: z.string(),\n definition: TypeDefinition,\n});\nexport type TypeSpec = z.infer<typeof TypeSpec>;\n","import { z } from \"zod\";\nimport { SemanticPath } from \"./common.js\";\nimport { ExprNodeSchema } from \"./expr.js\";\n\n/**\n * ComputedFieldSpec - Definition of a single computed field\n */\nexport const ComputedFieldSpec = z.object({\n /**\n * Paths this computed value depends on.\n * Must accurately reflect all paths referenced in expr.\n */\n deps: z.array(SemanticPath),\n\n /**\n * Expression to compute the value.\n * Must be pure and total (always produce a value, never throw).\n */\n expr: ExprNodeSchema,\n\n /**\n * Human-readable description\n */\n description: z.string().optional(),\n});\nexport type ComputedFieldSpec = z.infer<typeof ComputedFieldSpec>;\n\n/**\n * ComputedSpec - Collection of computed field definitions\n * Computed values form a Directed Acyclic Graph (DAG).\n */\nexport const ComputedSpec = z.object({\n /**\n * Computed field definitions keyed by bare name (e.g., \"activeCount\").\n */\n fields: z.record(SemanticPath, ComputedFieldSpec),\n});\nexport type ComputedSpec = z.infer<typeof ComputedSpec>;\n","import { z } from \"zod\";\nimport { SemanticPath } from \"./common.js\";\n\n/**\n * ExprNode - Pure expression language for ComputedSpec and FlowSpec\n * All expressions are deterministic and side-effect free\n */\n\n// Forward declaration for recursive types\nexport type ExprNode =\n // Literals\n | LitExpr\n | GetExpr\n // Comparison\n | EqExpr\n | NeqExpr\n | GtExpr\n | GteExpr\n | LtExpr\n | LteExpr\n // Logical\n | AndExpr\n | OrExpr\n | NotExpr\n // Conditional\n | IfExpr\n // Arithmetic\n | AddExpr\n | SubExpr\n | MulExpr\n | DivExpr\n | ModExpr\n | MinExpr\n | MaxExpr\n | AbsExpr\n | NegExpr\n | FloorExpr\n | CeilExpr\n | RoundExpr\n | SqrtExpr\n | PowExpr\n | SumArrayExpr\n | MinArrayExpr\n | MaxArrayExpr\n // String\n | ConcatExpr\n | SubstringExpr\n | TrimExpr\n | ToLowerCaseExpr\n | ToUpperCaseExpr\n | StrLenExpr\n | StartsWithExpr\n | EndsWithExpr\n | StrIncludesExpr\n | IndexOfExpr\n | ReplaceExpr\n | SplitExpr\n // Collection\n | LenExpr\n | AtExpr\n | FirstExpr\n | LastExpr\n | SliceExpr\n | IncludesExpr\n | FilterExpr\n | MapExpr\n | FindExpr\n | EveryExpr\n | SomeExpr\n | AppendExpr\n | ReverseExpr\n | UniqueExpr\n | FlatExpr\n // Object\n | ObjectExpr\n | FieldExpr\n | KeysExpr\n | ValuesExpr\n | EntriesExpr\n | MergeExpr\n | HasKeyExpr\n | PickExpr\n | OmitExpr\n | FromEntriesExpr\n // Type\n | TypeofExpr\n | IsNullExpr\n | CoalesceExpr\n // Conversion\n | ToStringExpr\n | ToNumberExpr\n | ToBooleanExpr;\n\n// ============ Literals ============\n\nexport const LitExpr = z.object({\n kind: z.literal(\"lit\"),\n value: z.unknown(),\n});\nexport type LitExpr = z.infer<typeof LitExpr>;\n\nexport const GetExpr = z.object({\n kind: z.literal(\"get\"),\n path: SemanticPath,\n});\nexport type GetExpr = z.infer<typeof GetExpr>;\n\n// ============ Comparison ============\n\nexport const EqExpr: z.ZodType<{ kind: \"eq\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"eq\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type EqExpr = z.infer<typeof EqExpr>;\n\nexport const NeqExpr: z.ZodType<{ kind: \"neq\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"neq\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type NeqExpr = z.infer<typeof NeqExpr>;\n\nexport const GtExpr: z.ZodType<{ kind: \"gt\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"gt\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type GtExpr = z.infer<typeof GtExpr>;\n\nexport const GteExpr: z.ZodType<{ kind: \"gte\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"gte\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type GteExpr = z.infer<typeof GteExpr>;\n\nexport const LtExpr: z.ZodType<{ kind: \"lt\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"lt\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type LtExpr = z.infer<typeof LtExpr>;\n\nexport const LteExpr: z.ZodType<{ kind: \"lte\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"lte\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type LteExpr = z.infer<typeof LteExpr>;\n\n// ============ Logical ============\n\nexport const AndExpr: z.ZodType<{ kind: \"and\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"and\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type AndExpr = z.infer<typeof AndExpr>;\n\nexport const OrExpr: z.ZodType<{ kind: \"or\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"or\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type OrExpr = z.infer<typeof OrExpr>;\n\nexport const NotExpr: z.ZodType<{ kind: \"not\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"not\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type NotExpr = z.infer<typeof NotExpr>;\n\n// ============ Conditional ============\n\nexport const IfExpr: z.ZodType<{ kind: \"if\"; cond: ExprNode; then: ExprNode; else: ExprNode }> = z.object({\n kind: z.literal(\"if\"),\n cond: z.lazy(() => ExprNodeSchema),\n then: z.lazy(() => ExprNodeSchema),\n else: z.lazy(() => ExprNodeSchema),\n});\nexport type IfExpr = z.infer<typeof IfExpr>;\n\n// ============ Arithmetic ============\n\nexport const AddExpr: z.ZodType<{ kind: \"add\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"add\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type AddExpr = z.infer<typeof AddExpr>;\n\nexport const SubExpr: z.ZodType<{ kind: \"sub\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"sub\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type SubExpr = z.infer<typeof SubExpr>;\n\nexport const MulExpr: z.ZodType<{ kind: \"mul\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"mul\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type MulExpr = z.infer<typeof MulExpr>;\n\nexport const DivExpr: z.ZodType<{ kind: \"div\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"div\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type DivExpr = z.infer<typeof DivExpr>;\n\nexport const ModExpr: z.ZodType<{ kind: \"mod\"; left: ExprNode; right: ExprNode }> = z.object({\n kind: z.literal(\"mod\"),\n left: z.lazy(() => ExprNodeSchema),\n right: z.lazy(() => ExprNodeSchema),\n});\nexport type ModExpr = z.infer<typeof ModExpr>;\n\nexport const MinExpr: z.ZodType<{ kind: \"min\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"min\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type MinExpr = z.infer<typeof MinExpr>;\n\nexport const MaxExpr: z.ZodType<{ kind: \"max\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"max\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type MaxExpr = z.infer<typeof MaxExpr>;\n\nexport const AbsExpr: z.ZodType<{ kind: \"abs\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"abs\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type AbsExpr = z.infer<typeof AbsExpr>;\n\nexport const NegExpr: z.ZodType<{ kind: \"neg\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"neg\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type NegExpr = z.infer<typeof NegExpr>;\n\nexport const FloorExpr: z.ZodType<{ kind: \"floor\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"floor\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type FloorExpr = z.infer<typeof FloorExpr>;\n\nexport const CeilExpr: z.ZodType<{ kind: \"ceil\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"ceil\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type CeilExpr = z.infer<typeof CeilExpr>;\n\nexport const RoundExpr: z.ZodType<{ kind: \"round\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"round\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type RoundExpr = z.infer<typeof RoundExpr>;\n\nexport const SqrtExpr: z.ZodType<{ kind: \"sqrt\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"sqrt\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type SqrtExpr = z.infer<typeof SqrtExpr>;\n\nexport const PowExpr: z.ZodType<{ kind: \"pow\"; base: ExprNode; exponent: ExprNode }> = z.object({\n kind: z.literal(\"pow\"),\n base: z.lazy(() => ExprNodeSchema),\n exponent: z.lazy(() => ExprNodeSchema),\n});\nexport type PowExpr = z.infer<typeof PowExpr>;\n\nexport const SumArrayExpr: z.ZodType<{ kind: \"sumArray\"; array: ExprNode }> = z.object({\n kind: z.literal(\"sumArray\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type SumArrayExpr = z.infer<typeof SumArrayExpr>;\n\nexport const MinArrayExpr: z.ZodType<{ kind: \"minArray\"; array: ExprNode }> = z.object({\n kind: z.literal(\"minArray\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type MinArrayExpr = z.infer<typeof MinArrayExpr>;\n\nexport const MaxArrayExpr: z.ZodType<{ kind: \"maxArray\"; array: ExprNode }> = z.object({\n kind: z.literal(\"maxArray\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type MaxArrayExpr = z.infer<typeof MaxArrayExpr>;\n\n// ============ String ============\n\nexport const ConcatExpr: z.ZodType<{ kind: \"concat\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"concat\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type ConcatExpr = z.infer<typeof ConcatExpr>;\n\nexport const SubstringExpr: z.ZodType<{ kind: \"substring\"; str: ExprNode; start: ExprNode; end?: ExprNode }> = z.object({\n kind: z.literal(\"substring\"),\n str: z.lazy(() => ExprNodeSchema),\n start: z.lazy(() => ExprNodeSchema),\n end: z.lazy(() => ExprNodeSchema).optional(),\n});\nexport type SubstringExpr = z.infer<typeof SubstringExpr>;\n\nexport const TrimExpr: z.ZodType<{ kind: \"trim\"; str: ExprNode }> = z.object({\n kind: z.literal(\"trim\"),\n str: z.lazy(() => ExprNodeSchema),\n});\nexport type TrimExpr = z.infer<typeof TrimExpr>;\n\nexport const ToLowerCaseExpr: z.ZodType<{ kind: \"toLowerCase\"; str: ExprNode }> = z.object({\n kind: z.literal(\"toLowerCase\"),\n str: z.lazy(() => ExprNodeSchema),\n});\nexport type ToLowerCaseExpr = z.infer<typeof ToLowerCaseExpr>;\n\nexport const ToUpperCaseExpr: z.ZodType<{ kind: \"toUpperCase\"; str: ExprNode }> = z.object({\n kind: z.literal(\"toUpperCase\"),\n str: z.lazy(() => ExprNodeSchema),\n});\nexport type ToUpperCaseExpr = z.infer<typeof ToUpperCaseExpr>;\n\nexport const StrLenExpr: z.ZodType<{ kind: \"strLen\"; str: ExprNode }> = z.object({\n kind: z.literal(\"strLen\"),\n str: z.lazy(() => ExprNodeSchema),\n});\nexport type StrLenExpr = z.infer<typeof StrLenExpr>;\n\nexport const StartsWithExpr: z.ZodType<{ kind: \"startsWith\"; str: ExprNode; prefix: ExprNode }> = z.object({\n kind: z.literal(\"startsWith\"),\n str: z.lazy(() => ExprNodeSchema),\n prefix: z.lazy(() => ExprNodeSchema),\n});\nexport type StartsWithExpr = z.infer<typeof StartsWithExpr>;\n\nexport const EndsWithExpr: z.ZodType<{ kind: \"endsWith\"; str: ExprNode; suffix: ExprNode }> = z.object({\n kind: z.literal(\"endsWith\"),\n str: z.lazy(() => ExprNodeSchema),\n suffix: z.lazy(() => ExprNodeSchema),\n});\nexport type EndsWithExpr = z.infer<typeof EndsWithExpr>;\n\nexport const StrIncludesExpr: z.ZodType<{ kind: \"strIncludes\"; str: ExprNode; search: ExprNode }> = z.object({\n kind: z.literal(\"strIncludes\"),\n str: z.lazy(() => ExprNodeSchema),\n search: z.lazy(() => ExprNodeSchema),\n});\nexport type StrIncludesExpr = z.infer<typeof StrIncludesExpr>;\n\nexport const IndexOfExpr: z.ZodType<{ kind: \"indexOf\"; str: ExprNode; search: ExprNode }> = z.object({\n kind: z.literal(\"indexOf\"),\n str: z.lazy(() => ExprNodeSchema),\n search: z.lazy(() => ExprNodeSchema),\n});\nexport type IndexOfExpr = z.infer<typeof IndexOfExpr>;\n\nexport const ReplaceExpr: z.ZodType<{ kind: \"replace\"; str: ExprNode; search: ExprNode; replacement: ExprNode }> = z.object({\n kind: z.literal(\"replace\"),\n str: z.lazy(() => ExprNodeSchema),\n search: z.lazy(() => ExprNodeSchema),\n replacement: z.lazy(() => ExprNodeSchema),\n});\nexport type ReplaceExpr = z.infer<typeof ReplaceExpr>;\n\nexport const SplitExpr: z.ZodType<{ kind: \"split\"; str: ExprNode; delimiter: ExprNode }> = z.object({\n kind: z.literal(\"split\"),\n str: z.lazy(() => ExprNodeSchema),\n delimiter: z.lazy(() => ExprNodeSchema),\n});\nexport type SplitExpr = z.infer<typeof SplitExpr>;\n\n// ============ Collection ============\n\nexport const LenExpr: z.ZodType<{ kind: \"len\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"len\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type LenExpr = z.infer<typeof LenExpr>;\n\nexport const AtExpr: z.ZodType<{ kind: \"at\"; array: ExprNode; index: ExprNode }> = z.object({\n kind: z.literal(\"at\"),\n array: z.lazy(() => ExprNodeSchema),\n index: z.lazy(() => ExprNodeSchema),\n});\nexport type AtExpr = z.infer<typeof AtExpr>;\n\nexport const FirstExpr: z.ZodType<{ kind: \"first\"; array: ExprNode }> = z.object({\n kind: z.literal(\"first\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type FirstExpr = z.infer<typeof FirstExpr>;\n\nexport const LastExpr: z.ZodType<{ kind: \"last\"; array: ExprNode }> = z.object({\n kind: z.literal(\"last\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type LastExpr = z.infer<typeof LastExpr>;\n\nexport const SliceExpr: z.ZodType<{ kind: \"slice\"; array: ExprNode; start: ExprNode; end?: ExprNode }> = z.object({\n kind: z.literal(\"slice\"),\n array: z.lazy(() => ExprNodeSchema),\n start: z.lazy(() => ExprNodeSchema),\n end: z.lazy(() => ExprNodeSchema).optional(),\n});\nexport type SliceExpr = z.infer<typeof SliceExpr>;\n\nexport const IncludesExpr: z.ZodType<{ kind: \"includes\"; array: ExprNode; item: ExprNode }> = z.object({\n kind: z.literal(\"includes\"),\n array: z.lazy(() => ExprNodeSchema),\n item: z.lazy(() => ExprNodeSchema),\n});\nexport type IncludesExpr = z.infer<typeof IncludesExpr>;\n\nexport const FilterExpr: z.ZodType<{ kind: \"filter\"; array: ExprNode; predicate: ExprNode }> = z.object({\n kind: z.literal(\"filter\"),\n array: z.lazy(() => ExprNodeSchema),\n predicate: z.lazy(() => ExprNodeSchema),\n});\nexport type FilterExpr = z.infer<typeof FilterExpr>;\n\nexport const MapExpr: z.ZodType<{ kind: \"map\"; array: ExprNode; mapper: ExprNode }> = z.object({\n kind: z.literal(\"map\"),\n array: z.lazy(() => ExprNodeSchema),\n mapper: z.lazy(() => ExprNodeSchema),\n});\nexport type MapExpr = z.infer<typeof MapExpr>;\n\nexport const FindExpr: z.ZodType<{ kind: \"find\"; array: ExprNode; predicate: ExprNode }> = z.object({\n kind: z.literal(\"find\"),\n array: z.lazy(() => ExprNodeSchema),\n predicate: z.lazy(() => ExprNodeSchema),\n});\nexport type FindExpr = z.infer<typeof FindExpr>;\n\nexport const EveryExpr: z.ZodType<{ kind: \"every\"; array: ExprNode; predicate: ExprNode }> = z.object({\n kind: z.literal(\"every\"),\n array: z.lazy(() => ExprNodeSchema),\n predicate: z.lazy(() => ExprNodeSchema),\n});\nexport type EveryExpr = z.infer<typeof EveryExpr>;\n\nexport const SomeExpr: z.ZodType<{ kind: \"some\"; array: ExprNode; predicate: ExprNode }> = z.object({\n kind: z.literal(\"some\"),\n array: z.lazy(() => ExprNodeSchema),\n predicate: z.lazy(() => ExprNodeSchema),\n});\nexport type SomeExpr = z.infer<typeof SomeExpr>;\n\nexport const AppendExpr: z.ZodType<{ kind: \"append\"; array: ExprNode; items: ExprNode[] }> = z.object({\n kind: z.literal(\"append\"),\n array: z.lazy(() => ExprNodeSchema),\n items: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type AppendExpr = z.infer<typeof AppendExpr>;\n\nexport const ReverseExpr: z.ZodType<{ kind: \"reverse\"; array: ExprNode }> = z.object({\n kind: z.literal(\"reverse\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type ReverseExpr = z.infer<typeof ReverseExpr>;\n\nexport const UniqueExpr: z.ZodType<{ kind: \"unique\"; array: ExprNode }> = z.object({\n kind: z.literal(\"unique\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type UniqueExpr = z.infer<typeof UniqueExpr>;\n\nexport const FlatExpr: z.ZodType<{ kind: \"flat\"; array: ExprNode }> = z.object({\n kind: z.literal(\"flat\"),\n array: z.lazy(() => ExprNodeSchema),\n});\nexport type FlatExpr = z.infer<typeof FlatExpr>;\n\n// ============ Object ============\n\nexport const ObjectExpr: z.ZodType<{ kind: \"object\"; fields: Record<string, ExprNode> }> = z.object({\n kind: z.literal(\"object\"),\n fields: z.record(z.string(), z.lazy(() => ExprNodeSchema)),\n});\nexport type ObjectExpr = z.infer<typeof ObjectExpr>;\n\nexport const FieldExpr: z.ZodType<{ kind: \"field\"; object: ExprNode; property: string }> = z.object({\n kind: z.literal(\"field\"),\n object: z.lazy(() => ExprNodeSchema),\n property: z.string(),\n});\nexport type FieldExpr = z.infer<typeof FieldExpr>;\n\nexport const KeysExpr: z.ZodType<{ kind: \"keys\"; obj: ExprNode }> = z.object({\n kind: z.literal(\"keys\"),\n obj: z.lazy(() => ExprNodeSchema),\n});\nexport type KeysExpr = z.infer<typeof KeysExpr>;\n\nexport const ValuesExpr: z.ZodType<{ kind: \"values\"; obj: ExprNode }> = z.object({\n kind: z.literal(\"values\"),\n obj: z.lazy(() => ExprNodeSchema),\n});\nexport type ValuesExpr = z.infer<typeof ValuesExpr>;\n\nexport const EntriesExpr: z.ZodType<{ kind: \"entries\"; obj: ExprNode }> = z.object({\n kind: z.literal(\"entries\"),\n obj: z.lazy(() => ExprNodeSchema),\n});\nexport type EntriesExpr = z.infer<typeof EntriesExpr>;\n\nexport const MergeExpr: z.ZodType<{ kind: \"merge\"; objects: ExprNode[] }> = z.object({\n kind: z.literal(\"merge\"),\n objects: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type MergeExpr = z.infer<typeof MergeExpr>;\n\nexport const HasKeyExpr: z.ZodType<{ kind: \"hasKey\"; obj: ExprNode; key: ExprNode }> = z.object({\n kind: z.literal(\"hasKey\"),\n obj: z.lazy(() => ExprNodeSchema),\n key: z.lazy(() => ExprNodeSchema),\n});\nexport type HasKeyExpr = z.infer<typeof HasKeyExpr>;\n\nexport const PickExpr: z.ZodType<{ kind: \"pick\"; obj: ExprNode; keys: ExprNode }> = z.object({\n kind: z.literal(\"pick\"),\n obj: z.lazy(() => ExprNodeSchema),\n keys: z.lazy(() => ExprNodeSchema),\n});\nexport type PickExpr = z.infer<typeof PickExpr>;\n\nexport const OmitExpr: z.ZodType<{ kind: \"omit\"; obj: ExprNode; keys: ExprNode }> = z.object({\n kind: z.literal(\"omit\"),\n obj: z.lazy(() => ExprNodeSchema),\n keys: z.lazy(() => ExprNodeSchema),\n});\nexport type OmitExpr = z.infer<typeof OmitExpr>;\n\nexport const FromEntriesExpr: z.ZodType<{ kind: \"fromEntries\"; entries: ExprNode }> = z.object({\n kind: z.literal(\"fromEntries\"),\n entries: z.lazy(() => ExprNodeSchema),\n});\nexport type FromEntriesExpr = z.infer<typeof FromEntriesExpr>;\n\n// ============ Type ============\n\nexport const TypeofExpr: z.ZodType<{ kind: \"typeof\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"typeof\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type TypeofExpr = z.infer<typeof TypeofExpr>;\n\nexport const IsNullExpr: z.ZodType<{ kind: \"isNull\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"isNull\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type IsNullExpr = z.infer<typeof IsNullExpr>;\n\nexport const CoalesceExpr: z.ZodType<{ kind: \"coalesce\"; args: ExprNode[] }> = z.object({\n kind: z.literal(\"coalesce\"),\n args: z.array(z.lazy(() => ExprNodeSchema)),\n});\nexport type CoalesceExpr = z.infer<typeof CoalesceExpr>;\n\n// ============ Conversion ============\n\nexport const ToStringExpr: z.ZodType<{ kind: \"toString\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"toString\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type ToStringExpr = z.infer<typeof ToStringExpr>;\n\nexport const ToNumberExpr: z.ZodType<{ kind: \"toNumber\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"toNumber\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type ToNumberExpr = z.infer<typeof ToNumberExpr>;\n\nexport const ToBooleanExpr: z.ZodType<{ kind: \"toBoolean\"; arg: ExprNode }> = z.object({\n kind: z.literal(\"toBoolean\"),\n arg: z.lazy(() => ExprNodeSchema),\n});\nexport type ToBooleanExpr = z.infer<typeof ToBooleanExpr>;\n\n// ============ Combined Schema ============\n\nexport const ExprNodeSchema: z.ZodType<ExprNode> = z.union([\n // Literals\n LitExpr,\n GetExpr,\n // Comparison\n EqExpr,\n NeqExpr,\n GtExpr,\n GteExpr,\n LtExpr,\n LteExpr,\n // Logical\n AndExpr,\n OrExpr,\n NotExpr,\n // Conditional\n IfExpr,\n // Arithmetic\n AddExpr,\n SubExpr,\n MulExpr,\n DivExpr,\n ModExpr,\n MinExpr,\n MaxExpr,\n AbsExpr,\n NegExpr,\n FloorExpr,\n CeilExpr,\n RoundExpr,\n SqrtExpr,\n PowExpr,\n SumArrayExpr,\n MinArrayExpr,\n MaxArrayExpr,\n // String\n ConcatExpr,\n SubstringExpr,\n TrimExpr,\n ToLowerCaseExpr,\n ToUpperCaseExpr,\n StrLenExpr,\n StartsWithExpr,\n EndsWithExpr,\n StrIncludesExpr,\n IndexOfExpr,\n ReplaceExpr,\n SplitExpr,\n // Collection\n LenExpr,\n AtExpr,\n FirstExpr,\n LastExpr,\n SliceExpr,\n IncludesExpr,\n FilterExpr,\n MapExpr,\n FindExpr,\n EveryExpr,\n SomeExpr,\n AppendExpr,\n ReverseExpr,\n UniqueExpr,\n FlatExpr,\n // Object\n ObjectExpr,\n FieldExpr,\n KeysExpr,\n ValuesExpr,\n EntriesExpr,\n MergeExpr,\n HasKeyExpr,\n PickExpr,\n OmitExpr,\n FromEntriesExpr,\n // Type\n TypeofExpr,\n IsNullExpr,\n CoalesceExpr,\n // Conversion\n ToStringExpr,\n ToNumberExpr,\n ToBooleanExpr,\n]) as z.ZodType<ExprNode>;\n\n/**\n * Expression kinds enum for pattern matching\n */\nexport const ExprKind = z.enum([\n \"lit\", \"get\",\n \"eq\", \"neq\", \"gt\", \"gte\", \"lt\", \"lte\",\n \"and\", \"or\", \"not\",\n \"if\",\n \"add\", \"sub\", \"mul\", \"div\", \"mod\", \"min\", \"max\", \"abs\", \"neg\",\n \"floor\", \"ceil\", \"round\", \"sqrt\", \"pow\",\n \"sumArray\", \"minArray\", \"maxArray\",\n \"concat\", \"substring\", \"trim\",\n \"toLowerCase\", \"toUpperCase\", \"strLen\",\n \"startsWith\", \"endsWith\", \"strIncludes\", \"indexOf\", \"replace\", \"split\",\n \"len\", \"at\", \"first\", \"last\", \"slice\", \"includes\",\n \"filter\", \"map\", \"find\", \"every\", \"some\", \"append\",\n \"reverse\", \"unique\", \"flat\",\n \"object\", \"field\", \"keys\", \"values\", \"entries\", \"merge\",\n \"hasKey\", \"pick\", \"omit\", \"fromEntries\",\n \"typeof\", \"isNull\", \"coalesce\",\n \"toString\", \"toNumber\", \"toBoolean\",\n]);\nexport type ExprKind = z.infer<typeof ExprKind>;\n","import { z } from \"zod\";\nimport { FieldSpec } from \"./field.js\";\nimport { ExprNodeSchema } from \"./expr.js\";\nimport { FlowNodeSchema } from \"./flow.js\";\nimport { TypeDefinition } from \"./type-spec.js\";\n\n/**\n * ActionSpec - Maps intents to flows\n * An action defines what happens when a particular intent is dispatched.\n */\nexport const ActionSpec = z.object({\n /**\n * The flow to execute when this action is invoked\n */\n flow: FlowNodeSchema,\n\n /**\n * Input schema for validation.\n * Compatibility/introspection seam. When `inputType` is present,\n * Core uses `inputType` as the normative validation source.\n */\n input: FieldSpec.optional(),\n\n /**\n * Lossless runtime input typing seam.\n * If defined, Core MUST validate input against this definition.\n */\n inputType: TypeDefinition.optional(),\n\n /**\n * Declared action parameter order.\n * This is the canonical parameter-order seam for consumers.\n */\n params: z.array(z.string()).readonly().optional(),\n\n /**\n * Availability condition.\n * If defined, Core MUST check it before executing the flow.\n * Expression MUST return boolean.\n */\n available: ExprNodeSchema.optional(),\n\n /**\n * Intent dispatchability condition.\n * If defined, callers MAY query it against a bound intent before execution.\n * Expression MUST return boolean.\n */\n dispatchable: ExprNodeSchema.optional(),\n\n /**\n * Human-readable description\n */\n description: z.string().optional(),\n});\nexport type ActionSpec = z.infer<typeof ActionSpec>;\n","import { z } from \"zod\";\nimport { ExprNodeSchema, type ExprNode } from \"./expr.js\";\nimport { PatchPath } from \"./patch.js\";\n\n/**\n * FlowNode - Declarative state transition programs\n * Flows do NOT execute; they describe.\n * Flows do NOT return values; they modify Snapshot.\n * Flows are NOT Turing-complete; they always terminate.\n */\n\nexport type FlowNode =\n | SeqFlow\n | IfFlow\n | PatchFlow\n | EffectFlow\n | CallFlow\n | HaltFlow\n | FailFlow;\n\n/**\n * Patch operations\n */\nexport const PatchOp = z.enum([\"set\", \"unset\", \"merge\"]);\nexport type PatchOp = z.infer<typeof PatchOp>;\n\n// ============ Flow Node Types ============\n\n/**\n * seq - Execute steps in order\n */\nexport const SeqFlow: z.ZodType<{ kind: \"seq\"; steps: FlowNode[] }> = z.object({\n kind: z.literal(\"seq\"),\n steps: z.array(z.lazy(() => FlowNodeSchema)),\n});\nexport type SeqFlow = z.infer<typeof SeqFlow>;\n\n/**\n * if - Conditional execution\n */\nexport const IfFlow: z.ZodType<{ kind: \"if\"; cond: ExprNode; then: FlowNode; else?: FlowNode }> = z.object({\n kind: z.literal(\"if\"),\n cond: ExprNodeSchema,\n then: z.lazy(() => FlowNodeSchema),\n else: z.lazy(() => FlowNodeSchema).optional(),\n});\nexport type IfFlow = z.infer<typeof IfFlow>;\n\n/**\n * patch - State mutation declaration\n */\nexport const PatchFlow = z.object({\n kind: z.literal(\"patch\"),\n op: PatchOp,\n path: PatchPath,\n value: ExprNodeSchema.optional(),\n});\nexport type PatchFlow = z.infer<typeof PatchFlow>;\n\n/**\n * effect - External operation requirement declaration\n * Effects are NOT executed by Core. They are declarations recorded in Snapshot.\n */\nexport const EffectFlow = z.object({\n kind: z.literal(\"effect\"),\n type: z.string(),\n params: z.record(z.string(), ExprNodeSchema),\n});\nexport type EffectFlow = z.infer<typeof EffectFlow>;\n\n/**\n * call - Invoke another flow by name\n * Does NOT pass arguments or return values.\n * The called Flow reads from the same Snapshot.\n */\nexport const CallFlow = z.object({\n kind: z.literal(\"call\"),\n flow: z.string(),\n});\nexport type CallFlow = z.infer<typeof CallFlow>;\n\n/**\n * halt - Stop flow execution normally (not an error)\n */\nexport const HaltFlow = z.object({\n kind: z.literal(\"halt\"),\n reason: z.string().optional(),\n});\nexport type HaltFlow = z.infer<typeof HaltFlow>;\n\n/**\n * fail - Stop flow execution with an error\n * The error is recorded in Snapshot.\n */\nexport const FailFlow = z.object({\n kind: z.literal(\"fail\"),\n code: z.string(),\n message: ExprNodeSchema.optional(),\n});\nexport type FailFlow = z.infer<typeof FailFlow>;\n\n// ============ Combined Schema ============\n\nexport const FlowNodeSchema: z.ZodType<FlowNode> = z.union([\n SeqFlow,\n IfFlow,\n PatchFlow,\n EffectFlow,\n CallFlow,\n HaltFlow,\n FailFlow,\n]) as z.ZodType<FlowNode>;\n\n/**\n * Flow node kinds enum\n */\nexport const FlowKind = z.enum([\"seq\", \"if\", \"patch\", \"effect\", \"call\", \"halt\", \"fail\"]);\nexport type FlowKind = z.infer<typeof FlowKind>;\n","import { z } from \"zod\";\n\n/**\n * PatchSegment - A single segment in a patch path.\n */\nexport const PatchSegment = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"prop\"),\n name: z.string().min(1),\n }),\n z.object({\n kind: z.literal(\"index\"),\n index: z.number().int().nonnegative(),\n }),\n]);\nexport type PatchSegment = z.infer<typeof PatchSegment>;\n\n/**\n * PatchPath - Path segments rooted at snapshot.data.\n */\nexport const PatchPath = z.array(PatchSegment).min(1);\nexport type PatchPath = z.infer<typeof PatchPath>;\n\n/**\n * Patch - A single state modification operation.\n * Only three operations: set, unset, merge.\n */\nexport const Patch = z.discriminatedUnion(\"op\", [\n z.object({\n op: z.literal(\"set\"),\n path: PatchPath,\n value: z.unknown(),\n }),\n z.object({\n op: z.literal(\"unset\"),\n path: PatchPath,\n }),\n z.object({\n op: z.literal(\"merge\"),\n path: PatchPath,\n value: z.record(z.string(), z.unknown()),\n }),\n]);\nexport type Patch = z.infer<typeof Patch>;\n\n/**\n * SetPatch - Set value at path\n */\nexport type SetPatch = Extract<Patch, { op: \"set\" }>;\n\n/**\n * UnsetPatch - Remove value at path\n */\nexport type UnsetPatch = Extract<Patch, { op: \"unset\" }>;\n\n/**\n * MergePatch - Shallow merge object at path\n */\nexport type MergePatch = Extract<Patch, { op: \"merge\" }>;\n\n/**\n * Intent - A request to perform an action\n */\nexport const Intent = z.object({\n /**\n * Action type identifier\n */\n type: z.string(),\n\n /**\n * Action input parameters\n */\n input: z.unknown().optional(),\n\n /**\n * Unique identifier for this processing attempt.\n * MUST be unique per processing attempt.\n * MUST be stable across re-invocations for same attempt.\n */\n intentId: z.string(),\n});\nexport type Intent = z.infer<typeof Intent>;\n\n/**\n * Helper to create a prop segment\n */\nexport function propSegment(name: string): PatchSegment {\n return { kind: \"prop\", name };\n}\n\n/**\n * Helper to create an index segment\n */\nexport function indexSegment(index: number): PatchSegment {\n return { kind: \"index\", index };\n}\n\n/**\n * Helper to create a set patch\n */\nexport function setPatch(path: PatchPath, value: unknown): SetPatch {\n return { op: \"set\", path, value };\n}\n\n/**\n * Helper to create an unset patch\n */\nexport function unsetPatch(path: PatchPath): UnsetPatch {\n return { op: \"unset\", path };\n}\n\n/**\n * Helper to create a merge patch\n */\nexport function mergePatch(path: PatchPath, value: Record<string, unknown>): MergePatch {\n return { op: \"merge\", path, value };\n}\n","import { z } from \"zod\";\nimport { SemanticPath } from \"./common.js\";\nimport { Patch } from \"./patch.js\";\nimport { ErrorValue, Requirement, SystemState } from \"./snapshot.js\";\nimport { TraceGraph, TraceNode } from \"./trace.js\";\n\n/**\n * ComputeStatus - Result of a compute() call\n */\nexport const ComputeStatus = z.enum([\n \"complete\", // Flow finished, no pending requirements\n \"pending\", // Flow encountered effect, waiting for Host\n \"halted\", // Flow explicitly halted\n \"error\", // Flow encountered error\n]);\nexport type ComputeStatus = z.infer<typeof ComputeStatus>;\n\n/**\n * SystemDelta - Declarative system transition emitted by compute().\n */\nexport const SystemDelta = z.object({\n status: SystemState.shape.status.optional(),\n currentAction: z.string().nullable().optional(),\n lastError: ErrorValue.nullable().optional(),\n addRequirements: z.array(Requirement),\n removeRequirementIds: z.array(z.string()),\n});\nexport type SystemDelta = z.infer<typeof SystemDelta>;\n\n/**\n * ComputeResult - Result of compute() call\n */\nexport const ComputeResult = z.object({\n /**\n * Domain patches rooted at snapshot.data\n */\n patches: z.array(Patch),\n\n /**\n * System transition to be applied separately\n */\n systemDelta: SystemDelta,\n\n /**\n * Computation trace\n */\n trace: TraceGraph,\n\n /**\n * Computation status\n */\n status: ComputeStatus,\n});\nexport type ComputeResult = z.infer<typeof ComputeResult>;\n\n/**\n * ValidationError - Single validation error\n */\nexport const ValidationError = z.object({\n /**\n * Error code (e.g., \"V-001\", \"V-002\")\n */\n code: z.string(),\n\n /**\n * Human-readable message\n */\n message: z.string(),\n\n /**\n * Path in the schema where error occurred\n */\n path: z.string().optional(),\n});\nexport type ValidationError = z.infer<typeof ValidationError>;\n\n/**\n * ValidationResult - Result of validate() call\n */\nexport const ValidationResult = z.object({\n /**\n * Whether the schema is valid\n */\n valid: z.boolean(),\n\n /**\n * List of validation errors (empty if valid)\n */\n errors: z.array(ValidationError),\n});\nexport type ValidationResult = z.infer<typeof ValidationResult>;\n\n/**\n * ExplainResult - Result of explain() call\n */\nexport const ExplainResult = z.object({\n /**\n * The value at the path\n */\n value: z.unknown(),\n\n /**\n * Trace showing how the value was computed\n */\n trace: TraceNode,\n\n /**\n * Dependencies that affect this value\n */\n deps: z.array(SemanticPath),\n});\nexport type ExplainResult = z.infer<typeof ExplainResult>;\n\n/**\n * Create a successful validation result\n */\nexport function validResult(): ValidationResult {\n return { valid: true, errors: [] };\n}\n\n/**\n * Create a failed validation result\n */\nexport function invalidResult(errors: ValidationError[]): ValidationResult {\n return { valid: false, errors };\n}\n","import { z } from \"zod\";\nimport { SemanticPath } from \"./common.js\";\n\n/**\n * ErrorValue - Errors are values in Snapshot, not exceptions.\n */\nexport const ErrorValue = z.object({\n /**\n * Error code\n */\n code: z.string(),\n\n /**\n * Human-readable message\n */\n message: z.string(),\n\n /**\n * Where the error occurred\n */\n source: z.object({\n actionId: z.string(),\n nodePath: z.string(),\n }),\n\n /**\n * When the error occurred\n */\n timestamp: z.number(),\n\n /**\n * Additional context\n */\n context: z.record(z.string(), z.unknown()).optional(),\n});\nexport type ErrorValue = z.infer<typeof ErrorValue>;\n\n/**\n * FlowPosition - Position in the flow where effect was encountered\n */\nexport const FlowPosition = z.object({\n /**\n * Path to the effect node in the flow\n */\n nodePath: z.string(),\n\n /**\n * Snapshot version at time of effect\n */\n snapshotVersion: z.number(),\n});\nexport type FlowPosition = z.infer<typeof FlowPosition>;\n\n/**\n * Requirement - A recorded effect declaration waiting for Host fulfillment\n */\nexport const Requirement = z.object({\n /**\n * Unique identifier for this requirement.\n * Should be deterministic: hash(schemaHash, intentId, actionId, flowNodePath)\n */\n id: z.string(),\n\n /**\n * Effect type that generated this requirement\n */\n type: z.string(),\n\n /**\n * Resolved parameters\n */\n params: z.record(z.string(), z.unknown()),\n\n /**\n * The action that was being computed\n */\n actionId: z.string(),\n\n /**\n * Position in the flow where effect was encountered\n */\n flowPosition: FlowPosition,\n\n /**\n * Timestamp when requirement was created\n */\n createdAt: z.number(),\n});\nexport type Requirement = z.infer<typeof Requirement>;\n\n/**\n * SystemState - Internal system state\n */\nexport const SystemState = z.object({\n /**\n * Current status\n */\n status: z.enum([\"idle\", \"computing\", \"pending\", \"error\"]),\n\n /**\n * Last error (null if none)\n */\n lastError: ErrorValue.nullable(),\n\n /**\n * Pending requirements waiting for Host\n */\n pendingRequirements: z.array(Requirement),\n\n /**\n * Current action being processed (if any)\n */\n currentAction: z.string().nullable(),\n});\nexport type SystemState = z.infer<typeof SystemState>;\n\n/**\n * SnapshotMeta - Snapshot metadata\n */\nexport const SnapshotMeta = z.object({\n /**\n * Monotonically increasing version.\n * Incremented by Core on each apply().\n */\n version: z.number(),\n\n /**\n * Timestamp of last modification.\n * Set by Core on each apply().\n */\n timestamp: z.number(),\n\n /**\n * Deterministic random seed from Host context\n */\n randomSeed: z.string(),\n\n /**\n * Hash of the schema this snapshot conforms to.\n */\n schemaHash: z.string(),\n});\nexport type SnapshotMeta = z.infer<typeof SnapshotMeta>;\n\n/**\n * Snapshot - Immutable, point-in-time representation of world state.\n * This is the ONLY medium of communication between Core and Host.\n */\nexport const Snapshot = z.object({\n /**\n * Domain data (matches StateSpec)\n */\n data: z.unknown(),\n\n /**\n * Computed values (matches ComputedSpec)\n */\n computed: z.record(SemanticPath, z.unknown()),\n\n /**\n * System state\n */\n system: SystemState,\n\n /**\n * Input for current action (if any)\n */\n input: z.unknown(),\n\n /**\n * Snapshot metadata\n */\n meta: SnapshotMeta,\n});\nexport type Snapshot = z.infer<typeof Snapshot>;\n\n/**\n * Create initial system state\n */\nexport function createInitialSystemState(): SystemState {\n return {\n status: \"idle\",\n lastError: null,\n pendingRequirements: [],\n currentAction: null,\n };\n}\n","import { DomainSchema } from \"../schema/domain.js\";\nimport type { ValidationResult, ValidationError } from \"../schema/result.js\";\nimport type { TypeSpec } from \"../schema/type-spec.js\";\nimport { validResult, invalidResult } from \"../schema/result.js\";\nimport { buildDependencyGraph, topologicalSort, detectCycles } from \"../evaluator/dag.js\";\nimport { isErr } from \"../schema/common.js\";\nimport { hashSchemaSync } from \"../utils/hash.js\";\nimport {\n isValidSchemaId,\n isValidSemver,\n collectGetPathsFromExpr,\n collectGetPathsFromFlow,\n pathExistsInStateSpec,\n pathExistsInComputedSpec,\n pathExistsInFieldSpec,\n validateValueAgainstFieldSpec,\n} from \"./validation-utils.js\";\nimport {\n getTypeDefinitionAtSegments,\n pathExistsInTypeDefinition,\n resolveTypeDefinition,\n validateValueAgainstTypeDefinition,\n} from \"./type-definition-utils.js\";\n\n/**\n * Validate a domain schema\n *\n * Validation rules:\n * - V-001: All paths in ComputedSpec.deps MUST exist\n * - V-002: ComputedSpec dependency graph MUST be acyclic\n * - V-003: All paths in ExprNode.get MUST exist\n * - V-004: All `call` references in FlowSpec MUST exist\n * - V-005: FlowSpec `call` graph MUST be acyclic\n * - V-006: ActionSpec.available expression MUST return boolean (runtime check)\n * - V-009: ActionSpec.dispatchable expression MUST return boolean (runtime check)\n * - V-010: Typing seams MUST align with compatibility carriers and resolve refs\n * - V-007: ActionSpec.input MUST be valid FieldSpec (Zod handles this)\n * - V-008: Schema hash MUST match canonical hash\n */\nexport function validate(schema: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n\n // First, validate with Zod schema\n const parseResult = DomainSchema.safeParse(schema);\n if (!parseResult.success) {\n const zodErrors = parseResult.error.issues.map((e) => ({\n code: \"SCHEMA_ERROR\",\n message: e.message,\n path: e.path.map(String).join(\".\"),\n }));\n return invalidResult(zodErrors);\n }\n\n const domainSchema = parseResult.data;\n\n if (!isValidSchemaId(domainSchema.id)) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"Schema id must be a valid URI or UUID\",\n path: \"id\",\n });\n }\n\n if (!isValidSemver(domainSchema.version)) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"Schema version must follow Semantic Versioning 2.0\",\n path: \"version\",\n });\n }\n\n const schemaHash = domainSchema.hash;\n if (!schemaHash) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"Schema hash is required\",\n path: \"hash\",\n });\n } else {\n const rawSchema = schema as Record<string, unknown>;\n const { hash: _hash, ...schemaWithoutHash } = rawSchema;\n const expectedHash = hashSchemaSync(schemaWithoutHash as Omit<DomainSchema, \"hash\">);\n if (schemaHash !== expectedHash) {\n errors.push({\n code: \"V-008\",\n message: `Schema hash mismatch: expected ${expectedHash}, got ${schemaHash}`,\n path: \"hash\",\n });\n }\n }\n\n if (Object.keys(domainSchema.state.fields).length === 0) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"StateSpec.fields must not be empty\",\n path: \"state.fields\",\n });\n }\n\n if (Object.keys(domainSchema.computed.fields).length === 0) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"ComputedSpec.fields must not be empty\",\n path: \"computed.fields\",\n });\n }\n\n if (Object.keys(domainSchema.actions).length === 0) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"actions must not be empty\",\n path: \"actions\",\n });\n }\n\n errors.push(...validateTypingSeams(domainSchema));\n\n errors.push(...validateStateDefaults(domainSchema, \"state.fields\"));\n\n errors.push(...validateComputedDeps(domainSchema));\n\n errors.push(...validateComputedExprPaths(domainSchema));\n\n errors.push(...validateComputedDepsCoverage(domainSchema));\n\n errors.push(...validateActionExprPaths(domainSchema));\n\n // V-002: Check computed dependency graph is acyclic\n const depGraph = buildDependencyGraph(domainSchema.computed);\n const sortResult = topologicalSort(depGraph);\n if (isErr(sortResult)) {\n errors.push(sortResult.error);\n }\n\n // Additional cycle detection for detailed error\n const cycles = detectCycles(depGraph);\n if (cycles) {\n for (const cycle of cycles) {\n errors.push({\n code: \"V-002\",\n message: `Cyclic dependency: ${cycle.join(\" -> \")}`,\n path: cycle[0],\n });\n }\n }\n\n // V-004: Check all call references exist\n const actionNames = new Set(Object.keys(domainSchema.actions));\n const callErrors = validateCallReferences(domainSchema, actionNames);\n errors.push(...callErrors);\n\n // V-005: Check call graph is acyclic\n const callCycleErrors = validateCallGraph(domainSchema);\n errors.push(...callCycleErrors);\n\n if (errors.length > 0) {\n return invalidResult(errors);\n }\n\n return validResult();\n}\n\n/**\n * Validate that all call references exist\n */\nfunction validateCallReferences(\n schema: import(\"../schema/domain.js\").DomainSchema,\n actionNames: Set<string>\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const [actionName, action] of Object.entries(schema.actions)) {\n const calls = collectCalls(action.flow);\n for (const callName of calls) {\n if (!actionNames.has(callName)) {\n errors.push({\n code: \"V-004\",\n message: `Unknown flow reference: \"${callName}\" in action \"${actionName}\"`,\n path: `actions.${actionName}`,\n });\n }\n }\n }\n\n return errors;\n}\n\n/**\n * Collect all call references from a flow node\n */\nfunction collectCalls(flow: import(\"../schema/flow.js\").FlowNode): string[] {\n const calls: string[] = [];\n\n switch (flow.kind) {\n case \"call\":\n calls.push(flow.flow);\n break;\n case \"seq\":\n for (const step of flow.steps) {\n calls.push(...collectCalls(step));\n }\n break;\n case \"if\":\n calls.push(...collectCalls(flow.then));\n if (flow.else) {\n calls.push(...collectCalls(flow.else));\n }\n break;\n }\n\n return calls;\n}\n\n/**\n * Validate call graph for cycles\n */\nfunction validateCallGraph(\n schema: import(\"../schema/domain.js\").DomainSchema\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Build call graph\n const edges = new Map<string, string[]>();\n for (const [actionName, action] of Object.entries(schema.actions)) {\n edges.set(actionName, collectCalls(action.flow));\n }\n\n // Detect cycles using DFS\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n\n function dfs(node: string, path: string[]): boolean {\n visited.add(node);\n recursionStack.add(node);\n\n const deps = edges.get(node) ?? [];\n for (const dep of deps) {\n if (!visited.has(dep)) {\n if (dfs(dep, [...path, dep])) {\n return true;\n }\n } else if (recursionStack.has(dep)) {\n errors.push({\n code: \"V-005\",\n message: `Cyclic call detected: ${[...path, dep].join(\" -> \")}`,\n path: `actions.${node}`,\n });\n return true;\n }\n }\n\n recursionStack.delete(node);\n return false;\n }\n\n for (const actionName of edges.keys()) {\n if (!visited.has(actionName)) {\n dfs(actionName, [actionName]);\n }\n }\n\n return errors;\n}\n\nfunction validateTypingSeams(\n schema: import(\"../schema/domain.js\").DomainSchema,\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n if (schema.state.fieldTypes) {\n for (const name of Object.keys(schema.state.fieldTypes)) {\n if (!(name in schema.state.fields)) {\n errors.push({\n code: \"V-010\",\n message: `state.fieldTypes.${name} has no matching state.fields entry`,\n path: `state.fieldTypes.${name}`,\n });\n }\n\n errors.push(\n ...validateTypeDefinitionRefs(\n schema.state.fieldTypes[name],\n schema.types,\n `state.fieldTypes.${name}`,\n ),\n );\n }\n }\n\n for (const [actionName, action] of Object.entries(schema.actions)) {\n if (!action.inputType) {\n if (action.params && action.params.length > 0) {\n errors.push(...validateActionParams(actionName, action, schema.types));\n }\n continue;\n }\n\n errors.push(\n ...validateTypeDefinitionRefs(\n action.inputType,\n schema.types,\n `actions.${actionName}.inputType`,\n ),\n );\n\n if (action.params && action.params.length > 0) {\n errors.push(...validateActionParams(actionName, action, schema.types));\n }\n }\n\n return errors;\n}\n\nfunction validateActionParams(\n actionName: string,\n action: import(\"../schema/action.js\").ActionSpec,\n types: Record<string, TypeSpec>,\n): ValidationError[] {\n const params = action.params ?? [];\n if (params.length === 0) {\n return [];\n }\n\n const duplicateErrors: ValidationError[] = [];\n const seenParams = new Set<string>();\n for (const [index, paramName] of params.entries()) {\n if (seenParams.has(paramName)) {\n duplicateErrors.push({\n code: \"V-010\",\n message: `Duplicate parameter name \"${paramName}\" is not allowed`,\n path: `actions.${actionName}.params.${index}`,\n });\n continue;\n }\n seenParams.add(paramName);\n }\n\n let inputFields: readonly string[] | null = null;\n\n if (action.inputType) {\n inputFields = getInputTypeFieldNames(action.inputType, types);\n } else if (action.input?.type === \"object\" && action.input.fields) {\n inputFields = Object.keys(action.input.fields);\n }\n\n if (!inputFields) {\n return [\n ...duplicateErrors,\n {\n code: \"V-010\",\n message: `actions.${actionName}.params requires an object-shaped input carrier`,\n path: `actions.${actionName}.params`,\n }];\n }\n\n const inputFieldSet = new Set(inputFields);\n return [\n ...duplicateErrors,\n ...params.flatMap((paramName, index) => (\n inputFieldSet.has(paramName)\n ? []\n : [{\n code: \"V-010\",\n message: `Parameter \"${paramName}\" has no matching input field`,\n path: `actions.${actionName}.params.${index}`,\n }]\n ))];\n}\n\nfunction getInputTypeFieldNames(\n definition: import(\"../schema/type-spec.js\").TypeDefinition,\n types: Record<string, TypeSpec>,\n seenRefs: readonly string[] = [],\n): readonly string[] | null {\n if (definition.kind === \"ref\") {\n if (seenRefs.includes(definition.name)) {\n return null;\n }\n const next = types[definition.name];\n return next\n ? getInputTypeFieldNames(next.definition, types, [...seenRefs, definition.name])\n : null;\n }\n\n if (definition.kind === \"union\") {\n const nonNullTypes = definition.types.filter((candidate) => !isNullLikeResolved(candidate, types, seenRefs));\n return nonNullTypes.length === 1\n ? getInputTypeFieldNames(nonNullTypes[0], types, seenRefs)\n : null;\n }\n\n return definition.kind === \"object\"\n ? Object.keys(definition.fields)\n : null;\n}\n\nfunction isNullLikeResolved(\n definition: import(\"../schema/type-spec.js\").TypeDefinition,\n types: Record<string, TypeSpec>,\n seenRefs: readonly string[] = [],\n): boolean {\n const resolved = resolveTypeDefinition(definition, types, seenRefs);\n if (!resolved) {\n return false;\n }\n\n return (\n (resolved.kind === \"primitive\" && resolved.type === \"null\")\n || (resolved.kind === \"literal\" && resolved.value === null)\n );\n}\n\nfunction validateTypeDefinitionRefs(\n definition: import(\"../schema/type-spec.js\").TypeDefinition,\n types: Record<string, TypeSpec>,\n path: string,\n seenRefs: readonly string[] = [],\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n if (definition.kind === \"ref\") {\n if (seenRefs.includes(definition.name)) {\n errors.push({\n code: \"V-010\",\n message: `Cyclic type reference \"${definition.name}\" in typing seam`,\n path,\n });\n return errors;\n }\n\n const next = types[definition.name];\n if (!next || !resolveTypeDefinition(definition, types)) {\n errors.push({\n code: \"V-010\",\n message: `Unknown type reference \"${definition.name}\" in typing seam`,\n path,\n });\n return errors;\n }\n\n errors.push(\n ...validateTypeDefinitionRefs(\n next.definition,\n types,\n path,\n [...seenRefs, definition.name],\n ),\n );\n return errors;\n }\n\n switch (definition.kind) {\n case \"array\":\n return validateTypeDefinitionRefs(definition.element, types, `${path}.element`, seenRefs);\n case \"record\": {\n const recordErrors = [\n ...validateTypeDefinitionRefs(definition.key, types, `${path}.key`, seenRefs),\n ...validateTypeDefinitionRefs(definition.value, types, `${path}.value`, seenRefs),\n ];\n const resolvedKey = resolveTypeDefinition(definition.key, types);\n if (resolvedKey && (resolvedKey.kind !== \"primitive\" || resolvedKey.type !== \"string\")) {\n recordErrors.push({\n code: \"V-010\",\n message: \"Record typing seams require string keys\",\n path: `${path}.key`,\n });\n }\n return recordErrors;\n }\n case \"object\":\n for (const [fieldName, field] of Object.entries(definition.fields)) {\n errors.push(\n ...validateTypeDefinitionRefs(field.type, types, `${path}.fields.${fieldName}.type`, seenRefs),\n );\n }\n return errors;\n case \"union\":\n for (const [index, candidate] of definition.types.entries()) {\n errors.push(\n ...validateTypeDefinitionRefs(candidate, types, `${path}.types.${index}`, seenRefs),\n );\n }\n return errors;\n default:\n return errors;\n }\n}\n\nfunction validateStateDefaults(\n schema: import(\"../schema/domain.js\").DomainSchema,\n basePath: string\n): ValidationError[] {\n const errors: ValidationError[] = [];\n const state = schema.state;\n\n const visit = (\n spec: import(\"../schema/field.js\").FieldSpec,\n path: string,\n typeDefinition?: import(\"../schema/type-spec.js\").TypeDefinition,\n ) => {\n if (!spec.required && spec.default === undefined) {\n errors.push({\n code: \"SCHEMA_ERROR\",\n message: \"Optional fields must define a default value\",\n path,\n });\n }\n\n if (spec.default !== undefined) {\n if (typeDefinition) {\n const typeCheck = validateValueAgainstTypeDefinition(spec.default, typeDefinition, schema.types);\n if (!typeCheck.ok) {\n errors.push({\n code: \"V-009\",\n message: `Default value type mismatch: ${typeCheck.message}`,\n path,\n });\n }\n } else if (spec.default === null && spec.required !== false) {\n errors.push({\n code: \"V-009\",\n message: `Default value 'null' is not compatible with required field type '${typeof spec.type === \"string\" ? spec.type : \"enum\"}'`,\n path,\n });\n } else if (spec.default !== null) {\n const typeCheck = validateValueAgainstFieldSpec(spec.default, spec);\n if (!typeCheck.ok) {\n errors.push({\n code: \"V-009\",\n message: `Default value type mismatch: ${typeCheck.message}`,\n path,\n });\n }\n }\n }\n\n if (spec.type === \"object\" && spec.fields) {\n for (const [name, field] of Object.entries(spec.fields)) {\n const nestedType = typeDefinition\n ? getTypeDefinitionAtSegments(typeDefinition, schema.types, [{ kind: \"prop\", name }])\n : null;\n visit(field, `${path}.${name}`, nestedType ?? undefined);\n }\n }\n\n if (spec.type === \"array\" && spec.items) {\n const itemType = typeDefinition\n ? getTypeDefinitionAtSegments(typeDefinition, schema.types, [{ kind: \"index\", index: 0 }])\n : null;\n visit(spec.items, `${path}[]`, itemType ?? undefined);\n }\n };\n\n for (const [name, field] of Object.entries(state.fields)) {\n visit(field, `${basePath}.${name}`, state.fieldTypes?.[name]);\n }\n\n return errors;\n}\n\nfunction validateComputedDeps(\n schema: import(\"../schema/domain.js\").DomainSchema\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const [path, spec] of Object.entries(schema.computed.fields)) {\n for (const dep of spec.deps) {\n const exists =\n pathExistsInComputedSpec(schema.computed, dep) ||\n pathExistsInStateSpec(schema.state, dep, schema.types);\n if (!exists) {\n errors.push({\n code: \"V-001\",\n message: `Unknown dependency path: ${dep}`,\n path: `computed.fields.${path}`,\n });\n }\n }\n }\n\n return errors;\n}\n\nfunction validateComputedExprPaths(\n schema: import(\"../schema/domain.js\").DomainSchema\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const [path, spec] of Object.entries(schema.computed.fields)) {\n const exprPaths = collectGetPathsFromExpr(spec.expr);\n const invalidPaths = exprPaths.filter((exprPath) => {\n if (exprPath.startsWith(\"$\")) return false;\n if (pathExistsInComputedSpec(schema.computed, exprPath)) {\n return false;\n }\n if (exprPath.startsWith(\"input.\")) {\n return true;\n }\n if (exprPath.startsWith(\"system.\")) {\n return true;\n }\n return !pathExistsInStateSpec(schema.state, exprPath, schema.types);\n });\n\n for (const exprPath of invalidPaths) {\n errors.push({\n code: \"V-003\",\n message: `Unknown path in computed expression: ${exprPath}`,\n path: `computed.fields.${path}`,\n });\n }\n }\n\n return errors;\n}\n\nfunction validateComputedDepsCoverage(\n schema: import(\"../schema/domain.js\").DomainSchema\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const [path, spec] of Object.entries(schema.computed.fields)) {\n const exprPaths = collectGetPathsFromExpr(spec.expr);\n const deps = new Set(spec.deps);\n const relevantPaths = new Set(\n exprPaths.filter((exprPath) => {\n if (exprPath.startsWith(\"$\")) {\n return false;\n }\n if (exprPath === \"input\" || exprPath.startsWith(\"input.\")) {\n return false;\n }\n if (exprPath === \"system\" || exprPath.startsWith(\"system.\")) {\n return false;\n }\n if (exprPath === \"meta\" || exprPath.startsWith(\"meta.\")) {\n return false;\n }\n if (pathExistsInComputedSpec(schema.computed, exprPath)) {\n return true;\n }\n return pathExistsInStateSpec(schema.state, exprPath, schema.types);\n })\n );\n\n for (const exprPath of relevantPaths) {\n if (!deps.has(exprPath)) {\n errors.push({\n code: \"V-001\",\n message: `Missing dependency for computed expression path: ${exprPath}`,\n path: `computed.fields.${path}`,\n });\n }\n }\n }\n\n return errors;\n}\n\nfunction validateActionExprPaths(\n schema: import(\"../schema/domain.js\").DomainSchema\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n for (const [actionName, action] of Object.entries(schema.actions)) {\n const exprPaths = [\n ...collectGetPathsFromFlow(action.flow),\n ...(action.available ? collectGetPathsFromExpr(action.available) : []),\n ...(action.dispatchable ? collectGetPathsFromExpr(action.dispatchable) : []),\n ];\n\n for (const exprPath of exprPaths) {\n if (exprPath.startsWith(\"$\")) {\n continue;\n }\n\n if (exprPath === \"input\" || exprPath.startsWith(\"input.\")) {\n if (action.inputType) {\n const subPath = exprPath === \"input\" ? \"\" : exprPath.slice(6);\n if (!pathExistsInTypeDefinition(action.inputType, schema.types, subPath)) {\n errors.push({\n code: \"V-003\",\n message: `Unknown input path: ${exprPath}`,\n path: `actions.${actionName}`,\n });\n }\n } else if (action.input) {\n const subPath = exprPath === \"input\" ? \"\" : exprPath.slice(6);\n if (!pathExistsInFieldSpec(action.input, subPath)) {\n errors.push({\n code: \"V-003\",\n message: `Unknown input path: ${exprPath}`,\n path: `actions.${actionName}`,\n });\n }\n }\n continue;\n }\n\n if (pathExistsInComputedSpec(schema.computed, exprPath)) {\n continue;\n }\n\n if (exprPath.startsWith(\"system.\")) {\n continue;\n }\n\n if (exprPath === \"meta\" || exprPath.startsWith(\"meta.\")) {\n continue;\n }\n\n if (!pathExistsInStateSpec(schema.state, exprPath, schema.types)) {\n errors.push({\n code: \"V-003\",\n message: `Unknown state path: ${exprPath}`,\n path: `actions.${actionName}`,\n });\n }\n }\n }\n\n return errors;\n}\n","import type { DomainSchema } from \"../schema/domain.js\";\nimport type { Snapshot } from \"../schema/snapshot.js\";\nimport type { SemanticPath } from \"../schema/common.js\";\nimport type { ExplainResult } from \"../schema/result.js\";\nimport { createTraceContext, createTraceNode } from \"../schema/trace.js\";\nimport { getByPath } from \"../utils/path.js\";\nimport { createContext } from \"../evaluator/context.js\";\nimport { evaluateExpr } from \"../evaluator/expr.js\";\nimport { isOk } from \"../schema/common.js\";\n\n/**\n * Explain why a value is what it is\n *\n * @param schema - The domain schema\n * @param snapshot - Current snapshot state\n * @param path - The path to explain\n * @returns ExplainResult with value, trace, and dependencies\n */\nexport function explain(\n schema: DomainSchema,\n snapshot: Snapshot,\n path: SemanticPath\n): ExplainResult {\n const trace = createTraceContext(snapshot.meta.timestamp);\n return explainWithTrace(schema, snapshot, path, trace);\n}\n\nfunction explainWithTrace(\n schema: DomainSchema,\n snapshot: Snapshot,\n path: SemanticPath,\n trace: ReturnType<typeof createTraceContext>\n): ExplainResult {\n // Check if it's a computed path (schema lookup, no prefix)\n if (schema.computed.fields[path] !== undefined) {\n return explainComputed(schema, snapshot, path, trace);\n }\n\n // Check if it's a system path\n if (path.startsWith(\"system.\")) {\n const value = getByPath(snapshot.system, path.slice(7));\n return {\n value,\n trace: createTraceNode(trace, \"expr\", path, { path }, value, []),\n deps: [],\n };\n }\n\n // Check if it's an input path\n if (path.startsWith(\"input.\") || path === \"input\") {\n const value = path === \"input\" ? snapshot.input : getByPath(snapshot.input, path.slice(6));\n return {\n value,\n trace: createTraceNode(trace, \"expr\", path, { path }, value, []),\n deps: [],\n };\n }\n\n // Default: it's a data path\n const value = getByPath(snapshot.data, path);\n return {\n value,\n trace: createTraceNode(trace, \"expr\", path, { path }, value, []),\n deps: [],\n };\n}\n\n/**\n * Explain a computed value\n */\nfunction explainComputed(\n schema: DomainSchema,\n snapshot: Snapshot,\n path: SemanticPath,\n trace: ReturnType<typeof createTraceContext>\n): ExplainResult {\n const spec = schema.computed.fields[path];\n\n if (!spec) {\n // Not a computed field, just return the stored value\n const value = snapshot.computed[path];\n return {\n value,\n trace: createTraceNode(trace, \"computed\", path, { path }, value, []),\n deps: [],\n };\n }\n\n // Evaluate the expression to get the trace\n const ctx = createContext(snapshot, schema, null, path, undefined, trace);\n const result = evaluateExpr(spec.expr, ctx);\n\n const value = isOk(result) ? result.value : null;\n\n // Build trace with dependency information\n const childTraces = spec.deps.map((dep) => {\n const depResult = explainWithTrace(schema, snapshot, dep, trace);\n return depResult.trace;\n });\n\n return {\n value,\n trace: createTraceNode(trace, \"computed\", path, { expr: spec.expr }, value, childTraces),\n deps: spec.deps,\n };\n}\n","import type { StateSpec } from \"./field.js\";\n\n/**\n * Extract top-level default values from a StateSpec.\n *\n * Iterates `stateSpec.fields` and collects fields with an explicit `default`.\n * Returns a flat record of field names to default values.\n *\n * @param stateSpec - The state specification from a DomainSchema\n * @returns Record of field names to their default values\n */\nexport function extractDefaults(\n stateSpec: StateSpec\n): Record<string, unknown> {\n const defaults: Record<string, unknown> = {};\n\n for (const [name, spec] of Object.entries(stateSpec.fields)) {\n if (spec.default !== undefined) {\n defaults[name] = spec.default;\n }\n }\n\n return defaults;\n}\n","import { z } from \"zod\";\n\n/**\n * HostContext - Explicit host-provided inputs for determinism\n */\nexport const HostContext = z.object({\n /**\n * Logical time provided by Host\n */\n now: z.number(),\n\n /**\n * Deterministic random seed provided by Host\n */\n randomSeed: z.string(),\n\n /**\n * Optional host environment metadata\n */\n env: z.record(z.string(), z.unknown()).optional(),\n\n /**\n * Optional measured compute duration (ms)\n */\n durationMs: z.number().optional(),\n});\nexport type HostContext = z.infer<typeof HostContext>;\n","import type { Snapshot } from \"./schema/snapshot.js\";\nimport type { Intent } from \"./schema/patch.js\";\nimport type { HostContext } from \"./schema/host-context.js\";\nimport { createInitialSystemState } from \"./schema/snapshot.js\";\n\n/**\n * Create a new snapshot with initial data\n *\n * @param data - Initial domain data\n * @param schemaHash - Hash of the schema this snapshot conforms to\n * @returns New snapshot\n */\nexport function createSnapshot<T>(\n data: T,\n schemaHash: string,\n context: HostContext\n): Snapshot {\n return {\n data,\n computed: {},\n system: createInitialSystemState(),\n input: undefined,\n meta: {\n version: 0,\n timestamp: context.now,\n randomSeed: context.randomSeed,\n schemaHash,\n },\n };\n}\n\n/**\n * Create an intent\n *\n * @param type - Action type\n * @param input - Action input (optional)\n * @param intentId - Unique identifier for this processing attempt (optional, auto-generated if not provided)\n * @returns Intent\n */\nexport function createIntent(type: string, intentId: string): Intent;\nexport function createIntent(type: string, input: unknown, intentId: string): Intent;\nexport function createIntent(\n type: string,\n inputOrIntentId: unknown,\n intentId?: string\n): Intent {\n if (intentId === undefined && typeof inputOrIntentId === \"string\") {\n return {\n type,\n input: undefined,\n intentId: inputOrIntentId,\n };\n }\n\n if (intentId === undefined) {\n return {\n type,\n input: inputOrIntentId,\n intentId: \"\",\n };\n }\n\n return {\n type,\n input: inputOrIntentId,\n intentId,\n };\n}\n","/**\n * @manifesto-ai/core\n *\n * Manifesto Core - A Pure Semantic Calculator for Domain State\n *\n * Core computes. Host executes. These concerns never mix.\n */\n\n// ============ Core API ============\n\nimport type { DomainSchema } from \"./schema/domain.js\";\nimport type { Snapshot } from \"./schema/snapshot.js\";\nimport type { Intent, Patch } from \"./schema/patch.js\";\nimport type { SemanticPath } from \"./schema/common.js\";\nimport type { ComputeResult, ValidationResult, ExplainResult, SystemDelta } from \"./schema/result.js\";\nimport type { HostContext } from \"./schema/host-context.js\";\n\nimport { compute, computeSync, validateIntentInput } from \"./core/compute.js\";\nimport { apply } from \"./core/apply.js\";\nimport { applySystemDelta } from \"./core/system-delta.js\";\nimport { validate } from \"./core/validate.js\";\nimport { explain } from \"./core/explain.js\";\nimport {\n getAvailableActions,\n isActionAvailable,\n isIntentDispatchable,\n} from \"./core/action-availability.js\";\n\n/**\n * ManifestoCore interface\n */\nexport interface ManifestoCore {\n /**\n * Compute the result of dispatching an intent.\n *\n * This is the ONLY entry point for computation.\n * Each call is independent - there is no suspended context.\n */\n compute(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent,\n context: HostContext\n ): Promise<ComputeResult>;\n\n /**\n * Compute the result of dispatching an intent (synchronous).\n */\n computeSync(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent,\n context: HostContext\n ): ComputeResult;\n\n /**\n * Apply patches to a snapshot.\n * Returns new snapshot with recomputed values.\n */\n apply(\n schema: DomainSchema,\n snapshot: Snapshot,\n patches: readonly Patch[],\n context: HostContext\n ): Snapshot;\n\n /**\n * Apply a system transition emitted by compute().\n */\n applySystemDelta(snapshot: Snapshot, delta: SystemDelta): Snapshot;\n\n /**\n * Validate a schema.\n */\n validate(schema: unknown): ValidationResult;\n\n /**\n * Explain why a value is what it is.\n */\n explain(\n schema: DomainSchema,\n snapshot: Snapshot,\n path: SemanticPath\n ): ExplainResult;\n\n /**\n * Check whether an action is currently available for a new invocation.\n */\n isActionAvailable(\n schema: DomainSchema,\n snapshot: Snapshot,\n actionName: string\n ): boolean;\n\n /**\n * Return all currently available action names.\n */\n getAvailableActions(\n schema: DomainSchema,\n snapshot: Snapshot\n ): readonly string[];\n\n /**\n * Check whether a specific bound intent is dispatchable against the current snapshot.\n */\n isIntentDispatchable(\n schema: DomainSchema,\n snapshot: Snapshot,\n intent: Intent\n ): boolean;\n}\n\n/**\n * Create a ManifestoCore instance\n */\nexport function createCore(): ManifestoCore {\n return {\n compute,\n computeSync,\n apply,\n applySystemDelta,\n validate,\n explain,\n isActionAvailable,\n getAvailableActions,\n isIntentDispatchable,\n };\n}\n\n// ============ Re-exports ============\n\n// Schema types\nexport * from \"./schema/index.js\";\n\n// Utilities\nexport * from \"./utils/index.js\";\n\n// Evaluators (for advanced usage)\nexport * from \"./evaluator/index.js\";\n\n// Errors\nexport * from \"./errors.js\";\n\n// Factories\nexport * from \"./factories.js\";\n\n// Core functions (for direct usage)\nexport {\n compute,\n computeSync,\n validateIntentInput,\n apply,\n applySystemDelta,\n validate,\n explain,\n isActionAvailable,\n getAvailableActions,\n isIntentDispatchable,\n};\n"],"mappings":"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","names":["z","CoreErrorCode","createError","code","message","actionId","nodePath","timestamp","context","isErrorValue","value","obj","z","sortKeys","obj","sorted","keys","key","value","toCanonical","toJcs","serializeJcsValue","serializeJcsArray","serializeJcsObject","values","item","compareUnicodeCodePoints","parts","a","b","aPoints","bPoints","length","i","aCode","bCode","fromCanonical","canonical","canonicalEqual","normalizeSchemaForHash","schema","mode","fields","filteredEntries","key","sha256","message","msgBuffer","hashBuffer","b","SHA256_K","SHA256_INIT","sha256RotateRight","value","shift","sha256Bytes","data","bitLen","withOne","padLen","totalLen","padded","bitLenHi","bitLenLo","h","view","offset","w","i","s0","s1","a","c","d","e","f","g","hh","ch","t1","maj","t2","out","outView","sha256Sync","hash","hex","byte","hashSchema","canonical","toCanonical","hashSchemaSync","hashSchemaEffective","hashSchemaEffectiveSync","generateRequirementId","schemaHash","intentId","actionId","flowNodePath","input","generateRequirementIdSync","generateTraceId","index","TraceNodeKind","z","TraceNode","TraceTermination","TraceGraph","createTraceContext","timestamp","index","generateTraceId","createTraceNode","trace","kind","sourcePath","inputs","output","children","createContext","snapshot","schema","currentAction","nodePath","intentId","timestampOrTrace","createTraceContext","withCollectionContext","ctx","item","index","array","withSnapshot","withNodePath","parsePath","path","segments","current","escaped","char","escapePathSegment","segment","joinPath","getByPath","obj","setByPath","value","setByPathSegments","head","tail","nested","unsetByPath","unsetByPathSegments","_","rest","mergeAtPath","existing","merged","hasPath","parentPath","joinPathPreserveEmptySegments","lastSegment","UNSAFE_PROP_SEGMENTS","patchPathToDisplayString","path","output","i","segment","semanticPathToPatchPath","segments","parsePath","patchPath","parsed","parseBracketIndexedSegment","isSafePatchPath","getByPatchPath","obj","current","setByPatchPath","value","setBySegments","unsetByPatchPath","unsetBySegments","mergeAtPatchPath","existing","merged","isRecord","head","tail","nextValue","_removed","rest","next","cursor","sawIndex","open","prefix","close","indexText","z","SemanticPath","Result","valueSchema","errorSchema","ok","value","err","error","isOk","result","isErr","evaluateExpr","expr","ctx","ok","evaluateGet","evaluateBinary","a","b","toNumber","evaluateAnd","evaluateOr","evaluateNot","evaluateIf","evaluateDiv","evaluateMod","evaluateMin","evaluateMax","evaluateAbs","evaluateNeg","evaluateFloor","evaluateCeil","evaluateRound","evaluateSqrt","evaluatePow","evaluateSumArray","evaluateMinArray","evaluateMaxArray","evaluateConcat","evaluateSubstring","evaluateTrim","evaluateToLowerCase","evaluateToUpperCase","evaluateStrLen","evaluateStartsWith","evaluateEndsWith","evaluateStrIncludes","evaluateIndexOf","evaluateReplace","evaluateSplit","evaluateLen","evaluateAt","evaluateFirst","evaluateLast","evaluateSlice","evaluateIncludes","evaluateFilter","evaluateMap","evaluateFind","evaluateEvery","evaluateSome","evaluateAppend","evaluateReverse","evaluateUnique","evaluateFlat","evaluateObject","evaluateField","evaluateKeys","evaluateValues","evaluateEntries","evaluateMerge","evaluateHasKey","evaluatePick","evaluateOmit","evaluateFromEntries","evaluateTypeof","evaluateIsNull","evaluateCoalesce","evaluateToString","evaluateToNumber","evaluateToBoolean","err","createError","value","toBoolean","toString","generateDeterministicUuid","intentId","counter","seed","hash","i","char","hex","hex2","hex3","hex4","hex5","path","subPath","getByPath","systemPath","metaPath","left","right","op","leftResult","rightResult","args","arg","result","condResult","divisor","values","v","parts","strResult","startResult","str","start","endResult","array","index","arrayResult","indexResult","base","key","idx","arr","item","itemResult","predicate","filtered","itemCtx","withCollectionContext","predicateResult","mapper","mapped","mapResult","items","baseArray","itemExpr","fields","compareUnicodeCodePoints","valueExpr","valueResult","objectExpr","property","obj","objects","merged","objExpr","exponent","baseResult","expResult","sum","min","n","max","prefix","prefixResult","suffix","suffixResult","search","searchResult","replacement","replacementResult","delimiter","delimiterResult","seen","unique","s","flattened","objResult","keyResult","k","keys","keysResult","keyList","excludeSet","entries","entry","isNumericSegment","segment","isNullType","definition","types","resolved","resolveTypeDefinition","stripNullableEnvelope","nonNullTypes","candidate","seenRefs","next","pathExistsInTypeDefinition","path","getTypeDefinitionAtPathSegments","parsePath","pathExistsInTypeDefinitionSegments","segments","current","traversable","getTypeDefinitionAtSegments","getStateTypeDefinitionAtSegments","state","root","rest","rootType","validateValueAgainstTypeDefinition","value","options","result","item","itemResult","validateObjectValue","keyType","entry","entryResult","fields","allowPartial","allowUndefined","fieldNames","key","name","field","SEMVER_REGEX","URI_SCHEME_REGEX","UUID_REGEX","isValidSchemaId","id","isValidSemver","version","collectGetPathsFromExpr","expr","paths","visit","node","collectGetPathsFromFlow","flow","visitFlow","pathExistsInStateSpec","state","path","types","segments","parsePath","root","rest","rootType","pathExistsInTypeDefinitionSegments","pathExistsInFieldSpec","pathExistsInComputedSpec","computed","spec","current","segment","fieldType","isNumericSegment","validateValueAgainstFieldSpec","value","spec","options","fieldType","entry","validateObjectValue","item","result","allowPartial","allowUndefined","fieldEntries","fieldNames","name","key","fieldSpec","getFieldSpecAtSegments","spec","segments","current","segment","fieldType","isNumericSegment","createFlowState","snapshot","applyPatchToState","state","patch","newData","setByPatchPath","unsetByPatchPath","mergeAtPatchPath","addRequirement","requirement","setError","error","evaluateFlowSync","flow","ctx","nodePath","createTraceNode","evaluateSeq","evaluateIf","evaluatePatch","evaluateEffect","evaluateCall","evaluateHalt","evaluateFail","createError","evaluateFlow","steps","currentState","children","i","stepPath","stepCtx","withNodePath","withSnapshot","result","condResult","evaluateExpr","condValue","isTruthy","branchPath","branchFlow","branchCtx","patchValue","valueResult","rootSpec","typeDefinition","getStateTypeDefinitionAtSegments","fieldSpec","getFieldSpecAtSegments","displayPath","patchPathToDisplayString","validation","validateValueAgainstTypeDefinition","validateValueAgainstFieldSpec","evaluateArrayOperation","params","key","expr","generateRequirementIdSync","currentCtx","sourceExpr","sourceResult","sourceArray","intoExpr","intoResult","targetPath","toPatchPath","transformExpr","resultArray","index","item","itemCtx","withCollectionContext","itemResult","predicate","value","semanticPathToPatchPath","segments","segment","kind","name","flowName","action","callPath","callCtx","reason","message","messageResult","buildDependencyGraph","computed","nodes","edges","path","spec","computedDeps","dep","topologicalSort","graph","inDegree","adjacency","node","deps","queue","degree","sorted","dependent","newDegree","remaining","n","err","ok","detectCycles","visited","recursionStack","cycles","dfs","cycleStart","getTransitiveDeps","evaluateComputed","schema","snapshot","trace","createTraceContext","graph","buildDependencyGraph","sortResult","topologicalSort","err","createError","computed","tempSnapshot","path","spec","ctx","createContext","result","evaluateExpr","isErr","ok","evaluateSingleComputed","prepareQuerySnapshot","schema","snapshot","computed","evaluateComputed","isErr","evaluateAvailabilityAgainstPreparedSnapshot","preparedSnapshot","actionName","timestamp","action","ctx","createContext","result","evaluateExpr","evaluateActionAvailability","prepared","isActionAvailable","evaluateIntentDispatchability","intent","availability","isIntentDispatchable","getAvailableActions","applySystemDelta","snapshot","delta","hasStatus","hasOwn","hasCurrentAction","hasLastError","removeRequirementIds","addRequirements","nextPending","applyRequirementDelta","nextSystem","hasSystemChanged","current","incomingIds","requirement","previous","next","isErrorValueEqual","areRequirementArraysEqual","a","b","i","isRequirementEqual","aContext","bContext","obj","key","computeSync","schema","snapshot","intent","context","currentSnapshot","initialComputedResult","evaluateComputed","isOk","action","createErrorResult","inputError","validateIntentInput","isReEntry","availability","evaluateActionAvailability","preparedSnapshot","ctx","createContext","flowState","createFlowState","flowResult","evaluateFlowSync","status","mapFlowStatus","systemDelta","createSystemDeltaForFlow","patches","trace","collectTraceNodes","estimateResultVersion","mapFlowStatusToTermination","compute","validateInput","root","nodes","collect","node","child","code","message","error","createError","flowError","requirements","isError","requirement","delta","version","applySystemDelta","inputType","inputSpec","input","result","validateValueAgainstTypeDefinition","inputObj","fields","fieldName","fieldSpec","key","validateFieldValue","spec","value","path","PLATFORM_NAMESPACE_SPEC","apply","schema","snapshot","patches","context","newData","newSystem","newInput","validationErrors","rootSpec","patch","displayPath","patchPathToDisplayString","isSafePatchPath","createError","getPlatformBypassRoot","platformRootResult","validateValueAgainstFieldSpec","isMergeTargetCompatible","applyPatch","typeDefinition","getStateTypeDefinitionAtSegments","fieldSpec","getFieldSpecAtSegments","result","validateValueAgainstTypeDefinition","lastError","intermediateSnapshot","computedResult","evaluateComputed","computed","isOk","isErr","error","path","first","isObjectRecord","value","root","current","segment","setByPatchPath","unsetByPatchPath","mergeAtPatchPath","z","z","TypeDefinition","TypeSpec","PrimitiveFieldType","EnumFieldType","FieldType","FieldSpec","StateSpec","TypeDefinition","z","z","LitExpr","z","GetExpr","SemanticPath","EqExpr","ExprNodeSchema","NeqExpr","GtExpr","GteExpr","LtExpr","LteExpr","AndExpr","OrExpr","NotExpr","IfExpr","AddExpr","SubExpr","MulExpr","DivExpr","ModExpr","MinExpr","MaxExpr","AbsExpr","NegExpr","FloorExpr","CeilExpr","RoundExpr","SqrtExpr","PowExpr","SumArrayExpr","MinArrayExpr","MaxArrayExpr","ConcatExpr","SubstringExpr","TrimExpr","ToLowerCaseExpr","ToUpperCaseExpr","StrLenExpr","StartsWithExpr","EndsWithExpr","StrIncludesExpr","IndexOfExpr","ReplaceExpr","SplitExpr","LenExpr","AtExpr","FirstExpr","LastExpr","SliceExpr","IncludesExpr","FilterExpr","MapExpr","FindExpr","EveryExpr","SomeExpr","AppendExpr","ReverseExpr","UniqueExpr","FlatExpr","ObjectExpr","FieldExpr","KeysExpr","ValuesExpr","EntriesExpr","MergeExpr","HasKeyExpr","PickExpr","OmitExpr","FromEntriesExpr","TypeofExpr","IsNullExpr","CoalesceExpr","ToStringExpr","ToNumberExpr","ToBooleanExpr","ExprKind","ComputedFieldSpec","z","SemanticPath","ExprNodeSchema","ComputedSpec","z","z","z","PatchSegment","PatchPath","Patch","Intent","propSegment","name","indexSegment","index","setPatch","path","value","unsetPatch","mergePatch","PatchOp","z","SeqFlow","FlowNodeSchema","IfFlow","ExprNodeSchema","PatchFlow","PatchPath","EffectFlow","CallFlow","HaltFlow","FailFlow","FlowKind","ActionSpec","z","FlowNodeSchema","FieldSpec","TypeDefinition","ExprNodeSchema","SchemaMeta","z","DomainSchema","TypeSpec","StateSpec","ComputedSpec","ActionSpec","z","z","ErrorValue","z","FlowPosition","Requirement","SystemState","SnapshotMeta","Snapshot","SemanticPath","createInitialSystemState","ComputeStatus","z","SystemDelta","SystemState","ErrorValue","Requirement","ComputeResult","Patch","TraceGraph","ValidationError","ValidationResult","ExplainResult","TraceNode","SemanticPath","validResult","invalidResult","errors","validate","schema","errors","parseResult","DomainSchema","zodErrors","e","invalidResult","domainSchema","isValidSchemaId","isValidSemver","schemaHash","rawSchema","_hash","schemaWithoutHash","expectedHash","hashSchemaSync","validateTypingSeams","validateStateDefaults","validateComputedDeps","validateComputedExprPaths","validateComputedDepsCoverage","validateActionExprPaths","depGraph","buildDependencyGraph","sortResult","topologicalSort","isErr","cycles","detectCycles","cycle","actionNames","callErrors","validateCallReferences","callCycleErrors","validateCallGraph","validResult","actionName","action","calls","collectCalls","callName","flow","step","edges","visited","recursionStack","dfs","node","path","deps","dep","name","validateTypeDefinitionRefs","validateActionParams","types","params","duplicateErrors","seenParams","index","paramName","inputFields","getInputTypeFieldNames","inputFieldSet","definition","seenRefs","next","nonNullTypes","candidate","isNullLikeResolved","resolved","resolveTypeDefinition","recordErrors","resolvedKey","fieldName","field","basePath","state","visit","spec","typeDefinition","typeCheck","validateValueAgainstTypeDefinition","validateValueAgainstFieldSpec","nestedType","getTypeDefinitionAtSegments","itemType","pathExistsInComputedSpec","pathExistsInStateSpec","invalidPaths","collectGetPathsFromExpr","exprPath","exprPaths","relevantPaths","collectGetPathsFromFlow","subPath","pathExistsInTypeDefinition","pathExistsInFieldSpec","explain","schema","snapshot","path","trace","createTraceContext","explainWithTrace","explainComputed","value","getByPath","createTraceNode","spec","ctx","createContext","result","evaluateExpr","isOk","childTraces","dep","extractDefaults","stateSpec","defaults","name","spec","z","HostContext","createSnapshot","data","schemaHash","context","createInitialSystemState","createIntent","type","inputOrIntentId","intentId","createCore","compute","computeSync","apply","applySystemDelta","validate","explain","isActionAvailable","getAvailableActions","isIntentDispatchable"]}
|