@graphrefly/graphrefly 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-2JNT5NDF.js +61 -0
- package/dist/{chunk-KN4Q5MQO.js → chunk-2RH4QNDQ.js} +1 -1
- package/dist/chunk-4JBKKUCJ.js +7 -0
- package/dist/{chunk-WLPVGXQ6.js → chunk-4YGJ7KZ6.js} +1 -1
- package/dist/{chunk-3Q2WXM6X.js → chunk-5PBXUVHI.js} +1 -1
- package/dist/{chunk-WYJTXYWX.js → chunk-7EMUF2RY.js} +1 -1
- package/dist/chunk-7JZ3YORY.js +80 -0
- package/dist/{chunk-I4U3TPK2.js → chunk-7QS77X6G.js} +1 -1
- package/dist/{chunk-ZM7C2FUM.js → chunk-BU4SUZSA.js} +1 -1
- package/dist/{chunk-GF5T7PGC.js → chunk-CNXUW2CU.js} +1 -1
- package/dist/{chunk-Z3UWIJ3A.js → chunk-EIFHFDFD.js} +1 -1
- package/dist/{chunk-3JRKP4BH.js → chunk-JAHAJU4G.js} +1 -1
- package/dist/{chunk-4ZPO2EL5.js → chunk-JYMNVEH6.js} +1 -1
- package/dist/{chunk-4KAUNEKV.js → chunk-KD3IYBTD.js} +1 -1
- package/dist/{chunk-X2VHDT26.js → chunk-LG73TUF4.js} +2 -2
- package/dist/{chunk-JXRZXP3N.js → chunk-LJGPOJHS.js} +1 -1
- package/dist/{chunk-YQJPYEAL.js → chunk-M2VFLRPJ.js} +1 -1
- package/dist/{chunk-7EQPXQ7H.js → chunk-MFNOZ5E6.js} +1 -1
- package/dist/{chunk-YZ6VYLFD.js → chunk-PWKLZ2XU.js} +1 -1
- package/dist/{chunk-OKQUPJRY.js → chunk-TOCCHQI6.js} +1 -1
- package/dist/{chunk-PZP4MEXK.js → chunk-UXEB35L4.js} +1 -1
- package/dist/{chunk-EBQ6FXKW.js → chunk-VXJX3ZZP.js} +1 -1
- package/dist/{chunk-7EJTWGKW.js → chunk-WE32AFFA.js} +1 -1
- package/dist/{chunk-JMGGCSIC.js → chunk-WF3V5X2L.js} +1 -1
- package/dist/{chunk-YZKGGMPT.js → chunk-X4OOM6QU.js} +1 -1
- package/dist/{chunk-5LJAQTSS.js → chunk-ZWETYYQG.js} +1 -1
- package/dist/compat/index.cjs +1 -1
- package/dist/compat/index.d.cts +5 -5
- package/dist/compat/index.d.ts +5 -5
- package/dist/compat/index.js +1 -1
- package/dist/compat/nestjs/index.cjs +1 -1
- package/dist/compat/nestjs/index.d.cts +3 -3
- package/dist/compat/nestjs/index.d.ts +3 -3
- package/dist/compat/nestjs/index.js +1 -1
- package/dist/compat/zustand/index.cjs +1 -1
- package/dist/compat/zustand/index.d.cts +2 -2
- package/dist/compat/zustand/index.d.ts +2 -2
- package/dist/compat/zustand/index.js +1 -1
- package/dist/extra/index.cjs +1 -1
- package/dist/extra/index.d.cts +2 -2
- package/dist/extra/index.d.ts +2 -2
- package/dist/extra/index.js +1 -1
- package/dist/graph/index.cjs +1 -1
- package/dist/graph/index.d.cts +3 -3
- package/dist/graph/index.d.ts +3 -3
- package/dist/graph/index.js +1 -1
- package/dist/{graph-CWeI0aHd.d.ts → graph-BOhEGJ6E.d.ts} +10 -0
- package/dist/{graph-C4Uxwv0T.d.cts → graph-CdJeX7O7.d.cts} +10 -0
- package/dist/{index-B-z8WaSd.d.cts → index-BDLy6CQ9.d.cts} +1 -1
- package/dist/{index-iBp74eGU.d.cts → index-BJDXj9Wf.d.cts} +2 -2
- package/dist/{index-BBINVimG.d.ts → index-BUZPTPSQ.d.ts} +2 -2
- package/dist/{index-DnrZghBB.d.ts → index-BbcSZCAG.d.ts} +1 -1
- package/dist/{index-lKuLYmHO.d.cts → index-BiGeETJs.d.cts} +1 -1
- package/dist/{index-Dm3_D5Ta.d.cts → index-BmZb8fNF.d.cts} +2 -2
- package/dist/{index-Docdiu9a.d.ts → index-Bnmttu35.d.ts} +1 -1
- package/dist/{index-CZChc85Q.d.cts → index-BuN2wGJs.d.cts} +297 -22
- package/dist/{index-Cy7eFeIX.d.cts → index-BwdPDWI4.d.cts} +1 -1
- package/dist/{index-DylQCKEL.d.cts → index-BzxU4yhV.d.cts} +11 -2
- package/dist/{index-D9Y_u6BG.d.cts → index-C-Gsh-0a.d.cts} +2 -2
- package/dist/{index-DD7RhHNJ.d.cts → index-C22aTC1X.d.cts} +4 -4
- package/dist/{index-yIdWFo2b.d.cts → index-C4QTaDli.d.cts} +2 -2
- package/dist/{index-CJymKyzT.d.ts → index-C7RqYbOZ.d.ts} +1 -1
- package/dist/{index-C5Ghnp5B.d.ts → index-C9qCLIN4.d.ts} +2 -2
- package/dist/{index-DVNLe3pS.d.cts → index-CCdg0JLX.d.cts} +1 -1
- package/dist/{index-B5iVOD7w.d.ts → index-CEoU-r-g.d.ts} +2 -2
- package/dist/{index-CfFYyLR8.d.ts → index-CHfBm51k.d.ts} +11 -2
- package/dist/{index-BXzl1NDD.d.ts → index-CNyiYQWF.d.ts} +4 -4
- package/dist/{index-C6NBfXj-.d.ts → index-CVevMZ0n.d.ts} +2 -2
- package/dist/{index-DGb1awva.d.ts → index-CZUzi6Dy.d.ts} +2 -2
- package/dist/{index-FrYrV-Vf.d.ts → index-Ckl03Q0s.d.ts} +1 -1
- package/dist/{index-Bvi5uJxX.d.ts → index-CmSjld-4.d.ts} +1 -1
- package/dist/{index-9iguV3bF.d.cts → index-CnjUhRbs.d.cts} +2 -2
- package/dist/{index-C98oJsEs.d.cts → index-D3HcdZ4d.d.cts} +1 -1
- package/dist/{index-IZ3l_vQ9.d.ts → index-DD1czHj3.d.ts} +1 -1
- package/dist/{index-gJQqJTKx.d.cts → index-DNhTQReY.d.cts} +1 -1
- package/dist/{index-UZO988ox.d.cts → index-DSawGt8n.d.cts} +2 -2
- package/dist/{index-CcpEvuPl.d.cts → index-DUkuH3jP.d.cts} +1 -1
- package/dist/{index-CRAkoq-y.d.cts → index-DY2QbdoP.d.cts} +1 -1
- package/dist/{index-CvS9IuTG.d.ts → index-Dbmj0iYR.d.ts} +1 -1
- package/dist/{index-Bd6oFZqO.d.ts → index-DhlAMlm9.d.ts} +297 -22
- package/dist/{index-BMe3pCom.d.cts → index-DlGaEBW5.d.cts} +2 -2
- package/dist/{index-CotRMjtJ.d.ts → index-Dp_pS7Bw.d.ts} +1 -1
- package/dist/{index-DxMS0cHM.d.ts → index-Dxk-pUQI.d.ts} +2 -2
- package/dist/{index-DBQUKh59.d.cts → index-EGjF6iSY.d.cts} +3 -3
- package/dist/{index-D9HrBx2J.d.ts → index-LGzAYqdR.d.ts} +1 -1
- package/dist/{index-DR3gf_DG.d.cts → index-LzCJ0kMT.d.cts} +2 -2
- package/dist/{index-RQg6lTrN.d.ts → index-MV2yGIAq.d.ts} +2 -2
- package/dist/{index-Bs3-LC83.d.cts → index-_BXz9K7b.d.cts} +1 -1
- package/dist/{index-SSGqF8mI.d.cts → index-aBqZUx3B.d.cts} +1 -1
- package/dist/{index-CFW32Dy1.d.ts → index-eYHRkoK-.d.ts} +1 -1
- package/dist/{index-CwhcFzTA.d.ts → index-gXTVbSax.d.ts} +2 -2
- package/dist/{index-D-kHVedZ.d.cts → index-j33Lfb1G.d.cts} +22 -1
- package/dist/{index-BEpRsvhg.d.ts → index-lpGUhTBn.d.ts} +3 -3
- package/dist/{index-CcS0t-l2.d.ts → index-zMQIQuDu.d.ts} +22 -1
- package/dist/index.cjs +53 -50
- package/dist/index.d.cts +26 -26
- package/dist/index.d.ts +26 -26
- package/dist/index.js +1 -1
- package/dist/patterns/ai/index.cjs +21 -18
- package/dist/patterns/ai/index.d.cts +6 -6
- package/dist/patterns/ai/index.d.ts +6 -6
- package/dist/patterns/ai/index.js +1 -1
- package/dist/patterns/audit/index.cjs +1 -1
- package/dist/patterns/audit/index.d.cts +3 -3
- package/dist/patterns/audit/index.d.ts +3 -3
- package/dist/patterns/audit/index.js +1 -1
- package/dist/patterns/cqrs/index.cjs +1 -1
- package/dist/patterns/cqrs/index.d.cts +2 -2
- package/dist/patterns/cqrs/index.d.ts +2 -2
- package/dist/patterns/cqrs/index.js +1 -1
- package/dist/patterns/demo-shell/index.cjs +1 -1
- package/dist/patterns/demo-shell/index.d.cts +3 -3
- package/dist/patterns/demo-shell/index.d.ts +3 -3
- package/dist/patterns/demo-shell/index.js +1 -1
- package/dist/patterns/domain-templates/index.cjs +5 -5
- package/dist/patterns/domain-templates/index.d.cts +2 -2
- package/dist/patterns/domain-templates/index.d.ts +2 -2
- package/dist/patterns/domain-templates/index.js +1 -1
- package/dist/patterns/graphspec/index.cjs +27 -25
- package/dist/patterns/graphspec/index.d.cts +2 -2
- package/dist/patterns/graphspec/index.d.ts +2 -2
- package/dist/patterns/graphspec/index.js +1 -1
- package/dist/patterns/guarded-execution/index.cjs +5 -5
- package/dist/patterns/guarded-execution/index.d.cts +4 -4
- package/dist/patterns/guarded-execution/index.d.ts +4 -4
- package/dist/patterns/guarded-execution/index.js +1 -1
- package/dist/patterns/harness/index.cjs +12 -11
- package/dist/patterns/harness/index.d.cts +5 -5
- package/dist/patterns/harness/index.d.ts +5 -5
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/job-queue/index.cjs +1 -1
- package/dist/patterns/job-queue/index.d.cts +2 -2
- package/dist/patterns/job-queue/index.d.ts +2 -2
- package/dist/patterns/job-queue/index.js +1 -1
- package/dist/patterns/lens/index.cjs +1 -1
- package/dist/patterns/lens/index.d.cts +3 -3
- package/dist/patterns/lens/index.d.ts +3 -3
- package/dist/patterns/lens/index.js +1 -1
- package/dist/patterns/memory/index.cjs +1 -1
- package/dist/patterns/memory/index.d.cts +2 -2
- package/dist/patterns/memory/index.d.ts +2 -2
- package/dist/patterns/memory/index.js +1 -1
- package/dist/patterns/messaging/index.cjs +1 -1
- package/dist/patterns/messaging/index.d.cts +2 -2
- package/dist/patterns/messaging/index.d.ts +2 -2
- package/dist/patterns/messaging/index.js +1 -1
- package/dist/patterns/orchestration/index.cjs +7 -7
- package/dist/patterns/orchestration/index.d.cts +2 -2
- package/dist/patterns/orchestration/index.d.ts +2 -2
- package/dist/patterns/orchestration/index.js +1 -1
- package/dist/patterns/reactive-layout/index.cjs +1 -1
- package/dist/patterns/reactive-layout/index.d.cts +3 -3
- package/dist/patterns/reactive-layout/index.d.ts +3 -3
- package/dist/patterns/reactive-layout/index.js +1 -1
- package/dist/patterns/reduction/index.cjs +1 -1
- package/dist/patterns/reduction/index.d.cts +2 -2
- package/dist/patterns/reduction/index.d.ts +2 -2
- package/dist/patterns/reduction/index.js +1 -1
- package/dist/patterns/refine-loop/index.cjs +3 -3
- package/dist/patterns/refine-loop/index.d.cts +3 -3
- package/dist/patterns/refine-loop/index.d.ts +3 -3
- package/dist/patterns/refine-loop/index.js +1 -1
- package/dist/patterns/resilient-pipeline/index.d.cts +3 -3
- package/dist/patterns/resilient-pipeline/index.d.ts +3 -3
- package/dist/patterns/resilient-pipeline/index.js +1 -1
- package/dist/patterns/surface/index.cjs +15 -13
- package/dist/patterns/surface/index.d.cts +3 -3
- package/dist/patterns/surface/index.d.ts +3 -3
- package/dist/patterns/surface/index.js +1 -1
- package/dist/{reactive-layout-BAr6-_o5.d.ts → reactive-layout-Bq0rA2Wb.d.ts} +1 -1
- package/dist/{reactive-layout-5oEn8lHM.d.cts → reactive-layout-Dhhe54Oj.d.cts} +1 -1
- package/dist/{topology-tree-CVREibAc.d.cts → topology-tree-CpSjvIXp.d.cts} +1 -1
- package/dist/{topology-tree-CkjojcB6.d.ts → topology-tree-DAbCV2Yw.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-ASDKRNOJ.js +0 -60
- package/dist/chunk-PSQNYY72.js +0 -7
- package/dist/chunk-XEFAMCEA.js +0 -78
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
`)}function gn(t){if(t.version!==xe)throw new Error(`unsupported snapshot version ${String(t.version)} (expected ${xe})`);for(let e of["name","nodes","edges","subgraphs"])if(!(e in t))throw new Error(`snapshot missing required key "${e}"`);if(typeof t.name!="string")throw new TypeError("snapshot 'name' must be a string");if(typeof t.nodes!="object"||t.nodes===null||Array.isArray(t.nodes))throw new TypeError("snapshot 'nodes' must be an object");if(!Array.isArray(t.edges))throw new TypeError("snapshot 'edges' must be an array");if(!Array.isArray(t.subgraphs))throw new TypeError("snapshot 'subgraphs' must be an array")}function Nr(t,e){let n=new WeakMap,r=(s,o)=>{if(Object.is(s,o))return!0;if(s==null||o==null||typeof s!="object"||typeof o!="object")return!1;let i=n.get(s);if(i==null&&(i=new WeakSet,n.set(s,i)),i.has(o))return!0;i.add(o);let a=s.constructor,l=o.constructor;if(a!==l)return!1;if(s instanceof Date)return s.getTime()===o.getTime();if(s instanceof RegExp)return s.source===o.source&&s.flags===o.flags;if(Array.isArray(s)){let p=o;if(s.length!==p.length)return!1;for(let h=0;h<s.length;h++)if(!r(s[h],p[h]))return!1;return!0}if(s instanceof Map){let p=o;if(s.size!==p.size)return!1;for(let[h,d]of s)if(!p.has(h)||!r(d,p.get(h)))return!1;return!0}if(s instanceof Set){let p=o;if(s.size!==p.size)return!1;for(let h of s){let d=!1;for(let g of p)if(r(h,g)){d=!0;break}if(!d)return!1}return!0}if(ArrayBuffer.isView(s)){let p=s,h=o;if(p.length!==h.length)return!1;for(let d=0;d<p.length;d++)if(p[d]!==h[d])return!1;return!0}let u=Object.keys(s),c=Object.keys(o);if(u.length!==c.length)return!1;let f=new Set(c);for(let p of u)if(!f.has(p)||!r(s[p],o[p]))return!1;return!0};return r(t,e)}function Tt(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(Tt);let e=t,n=Object.keys(e).sort(),r={};for(let s of n)r[s]=Tt(e[s]);return r}function Er(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function Cr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function Rr(t){return t==="TD"?"down":t==="BT"?"up":t==="RL"?"left":"right"}function yn(t){let e=new Set,n=[];function r(s,o){let i=`${s}\0${o}`;e.has(i)||(e.add(i),n.push([s,o]))}for(let[s,o]of Object.entries(t.nodes)){let i=o.deps;if(i)for(let a of i)r(a,s)}for(let s of t.edges)r(s.from,s.to);return n}function vn(t){if(t===void 0)return"LR";if(t==="TD"||t==="LR"||t==="BT"||t==="RL")return t;throw new Error(`invalid diagram direction ${String(t)}; expected one of: TD, LR, BT, RL`)}function Mr(t,e){let n=e.includeEdges??!0,r=e.includeSubgraphs??!0,{expand:s,...o}=t,i={...o,edges:n?t.edges:[],subgraphs:r?t.subgraphs:[]},a=JSON.stringify(Tt(i),null,e.indent??2);return e.logger?.(a),a}function Ar(t,e){let n=e.includeEdges??!0,r=e.includeSubgraphs??!0,s=[];s.push(`Graph ${t.name}`),s.push("Nodes:");for(let i of Object.keys(t.nodes).sort()){let a=t.nodes[i];s.push(`- ${i} (${a.type}/${a.status}): ${Ue(a.value)}`)}if(n){s.push("Edges:");for(let i of t.edges)s.push(`- ${i.from} -> ${i.to}`)}if(r){s.push("Subgraphs:");for(let i of t.subgraphs)s.push(`- ${i}`)}let o=s.join(`
|
|
5
5
|
`);return e.logger?.(o),o}function xn(t,e){let n=vn(e.direction),r=Object.keys(t.nodes).sort(),s=new Map;for(let i=0;i<r.length;i+=1)s.set(r[i],`n${i}`);let o=[`flowchart ${n}`];for(let i of r){let a=s.get(i);o.push(` ${a}["${Er(i)}"]`)}for(let[i,a]of yn(t)){let l=s.get(i),u=s.get(a);!l||!u||o.push(` ${l} --> ${u}`)}return o.join(`
|
|
6
6
|
`)}function Dr(t,e){let n=xn(t,e);return Gr(n)}function Gr(t,e){let n=e?.theme??"default",r=e?.autoSync??!0,o=JSON.stringify({code:t,mermaid:{theme:n},autoSync:r}),i=new TextEncoder().encode(o),a="";for(let u=0;u<i.length;u++)a+=String.fromCharCode(i[u]);return`https://mermaid.live/edit#base64:${globalThis.btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}`}function Lr(t,e){let n=vn(e.direction),r=Object.keys(t.nodes).sort(),s=new Map;for(let i=0;i<r.length;i+=1)s.set(r[i],`n${i}`);let o=[`direction: ${Rr(n)}`];for(let i of r){let a=s.get(i);o.push(`${a}: "${Cr(i)}"`)}for(let[i,a]of yn(t)){let l=s.get(i),u=s.get(a);!l||!u||o.push(`${l} -> ${u}`)}return o.join(`
|
|
7
|
-
`)}function Ir(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ze(t){let e="^";for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="*"){e+=".*";continue}if(r==="?"){e+=".";continue}if(r==="["){let s=t.indexOf("]",n+1);if(s<=n+1){e+="\\[";continue}let o=t.slice(n+1,s);o.startsWith("!")&&(o=`^${o.slice(1)}`),o=o.replace(/\\/g,"\\\\"),e+=`[${o}]`,n=s;continue}e+=Ir(r)}return e+="$",new RegExp(e)}var Pr={data:"\x1B[32m",dirty:"\x1B[33m",resolved:"\x1B[36m",invalidate:"\x1B[93m",pause:"\x1B[90m",resume:"\x1B[96m",complete:"\x1B[34m",error:"\x1B[31m",teardown:"\x1B[91m",derived:"\x1B[35m",path:"\x1B[90m",reset:"\x1B[0m"},$r={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ue(t){if(typeof t=="string")return JSON.stringify(t);if(typeof t=="number"||typeof t=="boolean"||t==null)return String(t);try{return JSON.stringify(t)}catch{return"[unserializable]"}}function Br(t){return t==="none"?$r:t==="ansi"||t==null?Pr:{data:t.data??"",dirty:t.dirty??"",resolved:t.resolved??"",invalidate:t.invalidate??"",pause:t.pause??"",resume:t.resume??"",complete:t.complete??"",error:t.error??"",teardown:t.teardown??"",derived:t.derived??"",path:t.path??"",reset:t.reset??""}}function mn(t){if(t==null)return{};let e=t.detail;return e==="full"?{...t,structured:t.structured??!0,timeline:t.timeline??!0,causal:t.causal??!0,derived:t.derived??!0}:e==="minimal"?{...t,structured:t.structured??!0}:t.format==="stage-log"?{...t,structured:t.structured??!0,timeline:t.timeline??!0}:t}function Fr(t,e,n){for(let r=0;r<t.length;r++){let s=t.charCodeAt(r);if(s<32||s===127)throw new Error(`Graph "${e}": ${n} "${t}" must not contain control character (U+${s.toString(16).padStart(4,"0").toUpperCase()} at index ${r})`)}}function kt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(D))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${D}' (path separator)`);if(t===Q)throw new Error(`Graph "${e}": ${n} name "${Q}" is reserved for meta companion paths`);Fr(t,e,n)}function Hr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(D);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function jr(t,e){let n=!1;for(let s of t)if(!e.isMetaPassthrough(s[0])){n=!0;break}return n?t.filter(s=>e.isMetaPassthrough(s[0])):t}function wn(t){for(let e of t._mounts.values())wn(e);for(let e of t._nodes.values())try{e.down([[j]],{internal:!0})}catch{}}var oe=class t{name;opts;config;_nodes=new Map;_nodeToName=new WeakMap;_mounts=new Map;_parent=void 0;_storageDisposers=new Set;_disposers=new Set;_topology;_topologyEmitters=new Set;constructor(e,n){if(e==="")throw new Error("Graph name must be non-empty");if(e.includes(D))throw new Error(`Graph name must not contain '${D}' (got "${e}")`);if(e===Q)throw new Error(`Graph name "${Q}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??ae,this._traceRing=new Ce(n?.traceCapacity??1e3),n?.versioning!=null&&this.setVersioning(n.versioning)}ancestors(e=!0){let n=[],r=e?this:this._parent;for(;r!=null;)n.push(r),r=r._parent;return n}get topology(){return this._topology==null&&(this._topology=qt(e=>{let n=r=>{e.emit(r)};return this._topologyEmitters.add(n),()=>{this._topologyEmitters.delete(n)}},{name:`${this.name}_topology`})),this._topology}_emitTopology(e){if(!(this._topology==null||this._topologyEmitters.size===0))for(let n of this._topologyEmitters)n(e)}add(e,n){let r=e.name,s=n?.name??r;if(s==null||s==="")throw new Error(`Graph "${this.name}": graph.add requires a non-empty name \u2014 pass via opts.name or set it on the node (e.g. state(0, { name: "x" }))`);let o=s,i=n?.annotation;if(kt(o,this.name,"add"),this._mounts.has(o))throw new Error(`Graph "${this.name}": name "${o}" is already a mount point`);if(this._nodes.has(o))throw new Error(`Graph "${this.name}": node "${o}" already exists`);let a=this._nodeToName.get(e);if(a!==void 0)throw new Error(`Graph "${this.name}": node instance already registered as "${a}"`);return this._nodes.set(o,e),this._nodeToName.set(e,o),this._emitTopology({kind:"added",name:o,nodeKind:"node"}),i!=null&&(this._annotations.set(o,i),this.config.inspectorEnabled&&this._traceRing.push({path:o,annotation:i,timestamp_ns:F()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof I&&n._applyVersioning(e)}remove(e){kt(e,this.name,"remove");let n=this._mounts.get(e);if(n){let o={kind:"mount",nodes:[],mounts:[]},i=[];n._collectObserveTargets("",i);for(let[a,l]of i)a.includes(`${D}${Q}${D}`)||o.nodes.push(a);return o.nodes.sort(),o.mounts.push(e),o.mounts.push(...n._collectSubgraphs(`${e}${D}`)),this._mounts.delete(e),n._parent=void 0,wn(n),this._emitTopology({kind:"removed",name:e,nodeKind:"mount",audit:o}),o}let r=this._nodes.get(e);if(!r)throw new Error(`Graph "${this.name}": unknown node or mount "${e}"`);this._nodes.delete(e),this._nodeToName.delete(r),r.down([[j]],{internal:!0});let s={kind:"node",nodes:[e],mounts:[]};return this._emitTopology({kind:"removed",name:e,nodeKind:"node",audit:s}),s}removeAll(e){let n=typeof e=="function"?e:(()=>{let o=ze(e);return i=>o.test(i)})(),r={kind:"mount",nodes:[],mounts:[]},s=[...this._nodes.keys(),...this._mounts.keys()].filter(o=>n(o));for(let o of s){let i=this.remove(o);r.nodes.push(...i.nodes),r.mounts.push(...i.mounts)}return r.nodes.sort(),r.mounts.sort(),r}[Symbol.iterator](){let e=[...this._nodes.keys()].sort(),n=this._nodes,r=0;return{[Symbol.iterator](){return this},next(){if(r>=e.length)return{value:void 0,done:!0};let s=e[r++];return{value:[s,n.get(s)],done:!1}}}}node(e){if(e==="")throw new Error(`Graph "${this.name}": node name must be non-empty`);if(e.includes(D))return this.resolve(e);let n=this._nodes.get(e);if(!n)throw new Error(`Graph "${this.name}": unknown node "${e}"`);return n}get(e){return this.node(e).cache}set(e,n,r){let s=r?.internal===!0;this.node(e).down([[B,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);It(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[X]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[$,n]],{actor:r?.actor,internal:s,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[Z]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[l,u]of this._nodes)r.set(u,l);let a=[];for(let[l,u]of this._nodes)if(u instanceof I)for(let c of u._deps){let f=r.get(c.node);f!=null&&a.push([f,l])}return a.sort((l,u)=>l[0]<u[0]?-1:l[0]>u[0]?1:l[1]<u[1]?-1:l[1]>u[1]?1:0),a}let s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,l]of s)o.set(l,a);let i=[];for(let[a,l]of s)if(l instanceof I)for(let u of l._deps){let c=o.get(u.node);c!=null&&i.push([c,a])}return i.sort((a,l)=>a[0]<l[0]?-1:a[0]>l[0]?1:a[1]<l[1]?-1:a[1]>l[1]?1:0),i}mount(e,n){if(kt(e,this.name,"mount"),this._nodes.has(e))throw new Error(`Graph "${this.name}": cannot mount at "${e}" \u2014 node with that name exists`);if(this._mounts.has(e))throw new Error(`Graph "${this.name}": mount "${e}" already exists`);if(n===this)throw new Error(`Graph "${this.name}": cannot mount a graph into itself`);if(n._parent!=null)throw new Error(`Graph "${this.name}": this child graph is already mounted on "${n._parent.name}"`);for(let r=this;r!=null;r=r._parent)if(r===n)throw new Error(`Graph "${this.name}": mount("${e}", \u2026) would create a mount cycle`);return this._mounts.set(e,n),n._parent=this,this._emitTopology({kind:"added",name:e,nodeKind:"mount"}),n}resolve(e){let n=Hr(e,this.name);return this._resolveFromSegments(n)}tryResolve(e){try{return this.resolve(e)}catch{return}}_resolveFromSegments(e){let n=e;if(n[0]===this.name&&(n=n.slice(1),n.length===0))throw new Error(`Graph "${this.name}": resolve path ends at graph name only`);let r=n[0],s=n.slice(1);if(s.length===0){let a=this._nodes.get(r);if(a)return a;throw this._mounts.has(r)?new Error(`Graph "${this.name}": path ends at subgraph "${r}" \u2014 not a node (GRAPHREFLY-SPEC \xA73.5)`):new Error(`Graph "${this.name}": unknown name "${r}"`)}let o=this._nodes.get(r);if(o&&s.length>0&&s[0]===Q)return this._resolveMetaChainFromNode(o,s,n.join(D));let i=this._mounts.get(r);if(!i)throw this._nodes.has(r)?new Error(`Graph "${this.name}": "${r}" is a node; trailing path "${s.join(D)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(s.join(D))}_resolveMetaChainFromNode(e,n,r){let s=e,o=0,i=[...n];for(;o<i.length;){if(i[o]!==Q)throw new Error(`Graph "${this.name}": expected ${Q} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${Q} in "${r}"`);let a=i[o+1],l=s.meta[a];if(!l)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=l,o+=2}return s}signal(e,n){if(n?.internal!==!0){for(let s of e)if(this.config.messageTier(s[0])===3)throw new Error(`Graph "${this.name}": Graph.signal() rejects tier-3 messages (DATA / RESOLVED). Broadcast is for control-plane tiers (START / DIRTY / INVALIDATE / PAUSE / RESUME / COMPLETE / ERROR / TEARDOWN). For per-node value writes, use Graph.set or graph.node(name).down(...).`)}let r=[];if(this._signalDeliver(e,n??{},new Set,r),r.length>0)throw r[0]}_signalDeliver(e,n,r,s){for(let l of this._mounts.values())l._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=jr(e,this.config);for(let l of[...this._nodes.keys()].sort()){let u=this._nodes.get(l);if(!r.has(u)){r.add(u);try{u.down(e,i)}catch(c){if(c instanceof K)throw c;s.push(c)}a.length!==0&&this._signalMetaSubtree(u,a,r,i,s)}}}_signalMetaSubtree(e,n,r,s,o){for(let i of Object.keys(e.meta).sort()){let a=e.meta[i];if(!r.has(a)){r.add(a);try{a.down(n,s)}catch(l){if(l instanceof K)throw l;o.push(l)}this._signalMetaSubtree(a,n,r,s,o)}}}describe(e){if(e?.reactive===!0)return this._describeReactive(e);let n=e?.actor,r=e?.filter,s=$e(e?.detail,e?.fields),o=e?.format==="spec",i=o?$e("minimal"):s,a=[];this._collectObserveTargets("",a);let l=new Map;for(let[w,k]of a)l.set(k,w);let u=[];{let w=a.map(([,O])=>O),k=new Set(l.values()),T=0;for(;w.length>0;){let O=w.shift();if(O instanceof I)for(let C of O._deps){let S=C.node;if(l.has(S))continue;let E=S.name??"",R=E;if(!R||k.has(R))if(E){let L=2;for(;k.has(`${E}#${L}`);)L++;R=`${E}#${L}`}else for(R=`__internal__/${T++}`;k.has(R);)R=`__internal__/${T++}`;l.set(S,R),k.add(R),u.push([R,S]),w.push(S)}}}let c=[...a,...u],f={};for(let[w,k]of c){if(n!=null&&!k.allowsObserve(n))continue;let T=wt(k,i),O=k instanceof I?k._deps.map(R=>l.get(R.node)??R.node.name??""):[],{name:C,...S}=T,E={...S,deps:O};if(!o){let R=this._annotations.get(w);R!=null&&(E.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(w,E):R(E)))continue}else{let R=!0;for(let[L,V]of Object.entries(r)){let Y=L==="deps_includes"?"depsIncludes":L==="meta_has"?"metaHas":L;if(Y==="depsIncludes"){if(!E.deps.includes(String(V))){R=!1;break}continue}if(Y==="metaHas"){if(!Object.hasOwn(E.meta??{},String(V))){R=!1;break}continue}if(E[Y]!==V){R=!1;break}}if(!R)continue}f[w]=E}let p=new Set(Object.keys(f)),h=[];for(let[w,k]of c)if(k instanceof I)for(let T of k._deps){let O=l.get(T.node);O!=null&&h.push([O,w])}h.sort((w,k)=>w[0]<k[0]?-1:w[0]>k[0]?1:w[1]<k[1]?-1:w[1]>k[1]?1:0);let d=h.map(([w,k])=>({from:w,to:k}));(n!=null||r!=null)&&(d=d.filter(w=>p.has(w.from)&&p.has(w.to)));let g=this._collectSubgraphs(""),b=n!=null||r!=null?g.filter(w=>{let k=`${w}${D}`;return[...p].some(T=>T===w||T.startsWith(k))}):g,x=this,v=e,y={name:this.name,nodes:f,edges:d,subgraphs:b,expand(w){let k={...v,format:void 0};return Array.isArray(w)?(k.fields=w,k.detail=void 0):(k.detail=w,k.fields=void 0),x.describe(k)}},_=e??{},m=_.format;return m==="json"?Mr(y,_):m==="pretty"?Ar(y,_):m==="mermaid"?xn(y,_):m==="mermaid-url"?Dr(y,_):m==="d2"?Lr(y,_):m==="ascii"?an(y,_):y}_collectSubgraphs(e){let n=[];for(let r of[...this._mounts.keys()].sort()){let s=e===""?r:`${e}${r}`;n.push(s),n.push(...this._mounts.get(r)._collectSubgraphs(`${s}${D}`))}return n}resourceProfile(e){return hn(this,e)}reachable(e,n,r={}){return r.withDetail===!0?bn(this.describe(),e,n,{...r,withDetail:!0}):bn(this.describe(),e,n,r)}explain(e,n,r){return r?.reactive===!0?this._explainReactive(e,n,r):this._explainStatic(e,n,r)}_explainStatic(e,n,r){let s=this.describe({detail:"full"}),o=new Map(this._annotations),i=new Map;for(let[a,l]of Object.entries(s.nodes))l.lastMutation!=null&&i.set(a,l.lastMutation);return un(s,e,n,{...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{},annotations:o,lastMutations:i})}_describeReactive(e){let n={...e,reactive:!1},r=e.reactiveName??"describe",s=0,o=G(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,l=!1,u=()=>{a||l||(a=!0,Oe(()=>{a=!1,!l&&(s+=1,o.emit(s))}))},c=i.onEvent(b=>{let x=b.type;x!=="data"&&x!=="error"&&x!=="complete"&&x!=="teardown"||u()}),f=[],p=new WeakSet,h=b=>{if(p.has(b)||l)return;p.add(b);let x=b.topology.subscribe(v=>{for(let y of v){if(y[0]!==B)continue;let _=y[1];if(u(),_.kind==="added"&&_.nodeKind==="mount"){let m=b._mounts.get(_.name);m!=null&&h(m)}}});f.push(x);for(let v of b._mounts.keys()){let y=b._mounts.get(v);y!=null&&h(y)}};h(this);let d;try{d=q([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(b,x)=>b===x})}catch(b){c();for(let x of f)x();throw i.dispose(),b}let g=_t(d);return{node:d,dispose(){l=!0,c();for(let b of f)b();f.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=G(s,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,l=!1,u=i.onEvent(h=>{let d=h.type;d!=="data"&&d!=="error"&&d!=="complete"&&d!=="teardown"||a||l||(a=!0,Oe(()=>{a=!1,!l&&(s+=1,o.emit(s))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},f;try{f=q([o],()=>this._explainStatic(e,n,c),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(h,d)=>h.found===d.found&&h.reason===d.reason&&h.steps.length===d.steps.length&&Wr(h.steps,d.steps)})}catch(h){throw u(),i.dispose(),h}let p=_t(f);return{node:f,dispose(){l=!0,u(),i.dispose(),p()}}}_pathsMatching(e){let n=ze(e),r=[];return this._collectObserveTargets("",r),r.map(([s])=>s).filter(s=>n.test(s))}_collectObserveTargets(e,n){for(let r of[...this._mounts.keys()].sort()){let s=e===""?r:`${e}${D}${r}`;this._mounts.get(r)._collectObserveTargets(s,n)}for(let r of[...this._nodes.keys()].sort()){let s=this._nodes.get(r),o=e===""?r:`${e}${D}${r}`;n.push([o,s]),this._appendMetaObserveTargets(o,s,n)}}_appendMetaObserveTargets(e,n,r){for(let s of Object.keys(n.meta).sort()){let o=n.meta[s],i=`${e}${D}${Q}${D}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=mn(r?n:e),i=o.structured===!0||o.timeline===!0||o.causal===!0||o.derived===!0||o.detail==="minimal"||o.detail==="full"||o.format!=null,a=o.actor;if(r){let c=e,f=this.resolve(c);if(a!=null&&!f.allowsObserve(a))throw new K({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,f]],o,"one"):{subscribe(p){return f.subscribe(p)},up(p){try{f.up?.(p)}catch(h){if(h instanceof K)return;throw h}}}}let l=[];this._collectObserveTargets("",l),l.sort((c,f)=>c[0]<f[0]?-1:c[0]>f[0]?1:0);let u=a==null?l:l.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,o,"all"):{subscribe:c=>{let f=u.map(([p,h])=>h.subscribe(d=>{c(p,d)}));return()=>{for(let p of f)p()}},up:(c,f)=>{try{this.resolve(c).up?.(f)}catch(p){if(p instanceof K)return;throw p}}}}_buildStructuredObserver(e,n,r){let s=r==="one"?e[0]?.[0]:void 0,o=i=>{if(r==="one"&&s!=null){let c=this.resolve(s);return this._buildStructuredObserver([[s,c]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((c,f)=>c[0]<f[0]?-1:c[0]>f[0]?1:0);let l=i.actor,u=l==null?a:a.filter(([,c])=>c.allowsObserve(l));return this._buildStructuredObserver(u,i,"all")};return this._createObserveResult(e,n,o)}_createObserveResult(e,n,r){let s=n.timeline===!0,o=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",l=this.config.inspectorEnabled,u=(o||i)&&l,c=n.maxEvents,f=c!=null&&c>0?new Ce(c):null,p=[],h=new Set,d={},g=new Set,b=0,x=0,v=0,y=0,_=0,m=0,w=!1,k=!1,T=0,O=new Map,C=new Map,S=new Map,E=N=>{f?f.push(N):p.push(N);for(let A of h)A(N)},R=()=>s?{timestamp_ns:F(),in_batch:De(),batch_id:T}:{},L=(N,A)=>{if(!(!u||!(N instanceof I)))return N._setInspectorHook(W=>{if(W.kind==="dep_message")O.set(N,W.depIndex);else if(W.kind==="run"){let _e=W.batchData.map((M,H)=>M!=null&&M.length>0?M.at(-1):W.prevData[H]);C.set(N,_e);let z=W.batchData.map(M=>M!=null?[...M]:void 0);S.set(N,z),i&&E({type:"derived",path:A,dep_values:_e,dep_batches:z,...R()})}})},V=N=>{let A=O.get(N),W=C.get(N);if(!o||W==null)return{};let z=(A!=null&&A>=0&&N instanceof I?N._deps[A]:void 0)?.node,M=z?.v,H=S.get(N);return{trigger_dep_index:A,trigger_dep_name:z?.name,...M!=null?{trigger_version:{id:M.id,version:M.version}}:{},dep_values:[...W],...H!=null?{dep_batches:H}:{}}},Y=[],ce=[];for(let[N,A]of e){let W=L(A,N);W&&Y.push(W),ce.push(A.subscribe(_e=>{T++;for(let z of _e){let M=z[0],H=R();if(M===B){d[N]=z[1];let Ze=A instanceof I?A.lastMutation?.actor??ge:ge;E({type:"data",path:N,data:z[1],actor:Ze,...H,...V(A)})}else if(a)M===J?b++:M===te?x++:M===X?v++:M===ne?y++:M===ie?_++:M===j?m++:M===Z&&!g.has(N)?w=!0:M===$&&(k=!0,g.add(N));else if(M===J)b++,E({type:"dirty",path:N,...H});else if(M===te)x++,E({type:"resolved",path:N,...H,...V(A)});else if(M===X)v++,E({type:"invalidate",path:N,...H});else if(M===ne)y++,E({type:"pause",path:N,lockId:z[1],...H});else if(M===ie)_++,E({type:"resume",path:N,lockId:z[1],...H});else if(M===Z)g.has(N)||(w=!0),E({type:"complete",path:N,...H});else if(M===$){k=!0,g.add(N);let Ze=A instanceof I?A.lastMutation?.actor??ge:ge;E({type:"error",path:N,data:z[1],actor:Ze,...H})}else M===j&&(m++,E({type:"teardown",path:N,...H}))}}))}let Ye=!1,Je=()=>{if(!Ye){Ye=!0;for(let N of ce)N();for(let N of Y)N();for(let N of Re)N({value:void 0,done:!0});Re.length=0}},Xe=[],Re=[];h.add(N=>{let A=Re.shift();A?A({value:N,done:!1}):Xe.push(N)});let Ct={get values(){return d},get dirtyCount(){return b},get resolvedCount(){return x},get invalidateCount(){return v},get pauseCount(){return y},get resumeCount(){return _},get teardownCount(){return m},get events(){return f?f.toArray():[...p]},get anyCompletedCleanly(){return w},get anyErrored(){return k},get completedWithoutErrors(){return w&&!k},onEvent(N){return h.add(N),()=>h.delete(N)},dispose:Je,expand(N){Je();let A={...n};return typeof N=="string"?A.detail=N:Object.assign(A,N),r(mn(A))},[Symbol.asyncIterator](){return{next(){return Xe.length>0?Promise.resolve({value:Xe.shift(),done:!1}):Ye?Promise.resolve({value:void 0,done:!0}):new Promise(N=>Re.push(N))},return(){return Je(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(Ct,n),Ct}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let s=n.logger??(d=>console.log(d)),o=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=o==null&&i==null?()=>!0:d=>(o==null||o.has(d))&&(i==null||!i.has(d)),l=Br(n.theme),u=r==="stage-log"?F():0,c=d=>d==null?"":n.stageLabels?.[d]??d,f=(d,g)=>d.length>g?`${d.slice(0,g-1)}\u2026`:d,p=d=>d.type==="data"||d.type==="error"?f(Ue(d.data),120):"",h=d=>{if(r==="stage-log"){let k=(F()-u)/1e9,T=c(d.path).padEnd(9);if(d.type==="data"){let O=p(d);return`[${k.toFixed(3)}s] ${T} \u2190${O?` ${O}`:""}`}if(d.type==="error"){let O=p(d);return`[${k.toFixed(3)}s] ${T} \u2717${O?` ${O}`:""}`}return d.type==="complete"?`[${k.toFixed(3)}s] ${T} \u25A0 complete`:`[${k.toFixed(3)}s] ${T} ${d.type}`}if(r==="json")try{return JSON.stringify(d)}catch{return JSON.stringify({type:d.type,path:d.path,data:"[unserializable]"})}let g=l[d.type]??"",b=d.path?`${l.path}${d.path}${l.reset} `:"",x=d.type==="data"||d.type==="error",v=d.type==="pause"||d.type==="resume",y=x?` ${Ue(d.data)}`:v?` ${Ue(d.lockId)}`:"",_=d.type==="data"||d.type==="resolved"||d.type==="derived"?d:void 0,m=_?.trigger_dep_name!=null?` <- ${_.trigger_dep_name}`:_?.trigger_dep_index!=null?` <- #${_.trigger_dep_index}`:"",w=d.in_batch?" [batch]":"";return`${b}${g}${d.type.toUpperCase()}${l.reset}${y}${m}${w}`};e.onEvent(d=>{a(d.type)&&s(h(d),d)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){pn(this._disposers,this.name),this.signal([[j]],{internal:!0}),pn(this._storageDisposers,this.name);for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0}_destroyClearOnly(){for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0}snapshot(e){let{expand:n,...r}=this.describe({detail:"full"}),s={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:l,guard:u,...c}=r.nodes[a];s[a]=c}let o=[...r.subgraphs].sort(),i={...r,version:1,nodes:s,subgraphs:o};if(e?.format==null)return i;if(e.format==="json-string")return JSON.stringify(i);if(e.format==="bytes"){if(e.codec==null)throw new Error("snapshot({format: 'bytes'}) requires a `codec` name");let a=this.config.lookupCodec(e.codec);if(a==null)throw new Error(`snapshot: codec "${e.codec}" is not registered on this graph's config. Call config.registerCodec(...) before creating nodes.`);return At(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??ae,{codec:s,codecVersion:o,payload:i}=Dt(e,r);return s.decode(i,o)}restore(e,n){if(gn(e),e.name!==this.name)throw new Error(`Graph "${this.name}": restore snapshot name "${e.name}" does not match this graph`);let r=n?.only==null?null:(Array.isArray(n.only)?n.only:[n.only]).map(o=>ze(o)),s=n?.includeProducers===!0;for(let o of Object.keys(e.nodes).sort()){if(r!==null&&!r.some(a=>a.test(o)))continue;let i=e.nodes[o];if(i!==void 0){if(!("value"in i)||i.value===void 0){"value"in i&&i.value===void 0&&n?.onError?.(o,new Error(`restore: slice.value is undefined for "${o}" (undefined is the global SENTINEL; not valid DATA)`));continue}if(!(i.type==="derived"||i.type==="effect")&&!(i.type==="producer"&&!s)){if(i.v!=null){let l=this.tryResolve(o)?.v;if(l!=null&&l.id===i.v.id&&l.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){gn(e);let r=typeof n=="function"?n:n?.build,s=typeof n=="function"?void 0:n?.factories,o=new t(e.name);if(r)return r(o),o.restore(e),o;for(let h of[...e.subgraphs].sort((d,g)=>{let b=d.split(D).length,x=g.split(D).length;return b!==x?b-x:d<g?-1:d>g?1:0})){let d=h.split(D),g=o;for(let b of d)g._mounts.has(b)||g.mount(b,new t(b)),g=g._mounts.get(b)}let i=s?Object.entries(s).map(([h,d])=>({re:ze(h),factory:d})):[],a=h=>{for(let d of i)if(d.re.test(h))return d.factory},l=h=>{let d=h.split(D),g=d.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${h}"`);let b=o;for(let x of d){let v=b._mounts.get(x);if(!v)throw new Error(`unknown mount "${x}" in path "${h}"`);b=v}return[b,g]},u=Object.entries(e.nodes).filter(([h])=>!h.includes(`${D}${Q}${D}`)).sort((h,d)=>h[0]<d[0]?-1:h[0]>d[0]?1:0),c=new Map(u),f=new Map,p=!0;for(;c.size>0&&p;){p=!1;for(let[h,d]of[...c.entries()]){let g=d?.deps??[];if(!g.every(m=>f.has(m)))continue;let[b,x]=l(h),v={...d?.meta??{}},y=a(h),_;if(d?.type==="state")_=G(d.value,{meta:v});else{if(y==null)continue;_=y(x,{path:h,type:d.type,value:d.value,meta:v,deps:g,resolvedDeps:g.map(m=>f.get(m))})}b.add(_,{name:x}),f.set(h,_),c.delete(h),p=!0}}if(c.size>0){let h=[...c.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${h}. Pass matching factories via fromSnapshot(data, { factories: { pattern: factoryFn } }).`)}return o.restore(e),o}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(u=>({tier:u,debounceMs:Math.max(0,u.debounceMs??0),compactEvery:Math.max(1,u.compactEvery??10),timer:void 0,seq:0,lastSnapshot:void 0,lastFingerprint:"",disposed:!1,savePending:void 0}));n.autoRestore===!0&&this._cascadeRestore(e,n.onError);let s=(u,c)=>{if(u.disposed)return;let f=Sr(c.nodes);if(u.lastSnapshot!=null&&f!==""&&f===u.lastFingerprint)return;let p=u.seq+1,h=Me(),b=u.lastSnapshot==null||p%u.compactEvery===0?{mode:"full",snapshot:c,seq:p,timestamp_ns:h,format_version:xe}:{mode:"diff",diff:Vr(u.lastSnapshot,c),seq:p,timestamp_ns:h,format_version:xe};if(u.tier.filter&&!u.tier.filter(this.name,b))return;let x;try{x=u.tier.save(this.name,b)}catch(v){n.onError?.(v,u.tier);return}if(x&&typeof x.then=="function"){let _=(u.savePending??Promise.resolve()).then(()=>x,()=>x).then(()=>{u.disposed||(u.seq=p,u.lastSnapshot=c,u.lastFingerprint=f)},m=>{n.onError?.(m,u.tier)});u.savePending=_.finally(()=>{u.savePending===_&&(u.savePending=void 0)})}else u.seq=p,u.lastSnapshot=c,u.lastFingerprint=f},o=(u,c)=>{try{s(u,c)}catch(f){n.onError?.(f,u.tier)}},i=(u,c)=>{if(!c.some(d=>{let g=this.config.messageTier(d[0]);return g>=3&&g<5}))return;if(n.filter){let d=this.tryResolve(u);if(d==null)return;let g=wt(d,$e("standard"));if(!n.filter(u,g))return}let p,h=()=>(p==null&&(p=this.snapshot()),p);for(let d of r)d.disposed||(d.debounceMs===0?o(d,h()):(d.timer==null&&(d.timer=new Be),d.timer.start(d.debounceMs,()=>{d.disposed||o(d,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(f=>{let p=this.tryResolve(f);return p==null?()=>{}:p.subscribe(h=>i(f,h))});a=()=>{for(let f of c)f()}}else a=this.observe().subscribe((u,c)=>i(u,c));let l=()=>{a();for(let u of r)u.disposed=!0,u.timer?.cancel();this._storageDisposers.delete(l)};return this._storageDisposers.add(l),{dispose:l}}async _cascadeRestore(e,n){for(let r of e){let s;try{s=await r.load(this.name)}catch(i){n?.(i,r);continue}if(s==null||typeof s!="object"||Array.isArray(s))continue;let o=s;try{if(o.mode==="full"&&o.snapshot!=null)return this.restore(o.snapshot),!0;if(o.version===xe&&o.nodes!=null)return this.restore(o),!0}catch(i){n?.(i,r)}}return!1}static async fromStorage(e,n,r){for(let s of n){let o;try{o=await s.load(e)}catch(l){r?.onError?.(l,s);continue}if(o==null||typeof o!="object"||Array.isArray(o))continue;let i=o,a=i.mode==="full"&&i.snapshot!=null?i.snapshot:i.version===xe&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(l){r?.onError?.(l,s)}}throw new Error(`Graph.fromStorage: no tier held a restorable record for "${e}" across ${n.length} tier(s)`)}_annotations=new Map;_traceRing;trace(e,n,r){if(e!=null&&n!=null){if(this.tryResolve(e)==null)return;if(this._annotations.set(e,n),this.config.inspectorEnabled){let s={path:e,annotation:n,timestamp_ns:F(),...r?.actor!=null?{actor:r.actor}:{}};this._traceRing.push(s)}return}return e!=null?this.config.inspectorEnabled?this._annotations.get(e):void 0:this.config.inspectorEnabled?this._traceRing.toArray():[]}annotation(e){return this._annotations.get(e)}clearTrace(){this._annotations.clear(),this._traceRing.clear()}pruneTrace(e){let n=this._traceRing.toArray().filter(s=>!e(s)),r=this._traceRing.size-n.length;this._traceRing.clear();for(let s of n)this._traceRing.push(s);return r}static diff(e,n){let r=new Set(Object.keys(e.nodes)),s=new Set(Object.keys(n.nodes)),o=[...s].filter(v=>!r.has(v)).sort(),i=[...r].filter(v=>!s.has(v)).sort(),a=[],l=[];for(let v of r){if(!s.has(v))continue;let y=e.nodes[v],_=n.nodes[v],m=y.v,w=_.v;m!=null&&w!=null&&m.id===w.id&&m.version!==w.version&&l.push({path:v,id:m.id,from:m.version,to:w.version});let k=m!=null&&w!=null&&m.id===w.id&&m.version===w.version;for(let T of["type","status","sentinel"]){let O=y[T],C=_[T];O!==C&&a.push({path:v,field:T,from:O,to:C})}if(!k)for(let T of["value","meta"]){let O=y[T],C=_[T];Nr(O,C)||a.push({path:v,field:T,from:O,to:C})}}let u=v=>`${v.from} ${v.to}`,c=new Set(e.edges.map(u)),f=new Set(n.edges.map(u)),p=n.edges.filter(v=>!c.has(u(v))),h=e.edges.filter(v=>!f.has(u(v))),d=new Set(e.subgraphs),g=new Set(n.subgraphs),b=[...g].filter(v=>!d.has(v)).sort(),x=[...d].filter(v=>!g.has(v)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:l,edgesAdded:p,edgesRemoved:h,subgraphsAdded:b,subgraphsRemoved:x}}};function Vr(t,e){let n=oe.diff(t,e),r={};for(let s of n.nodesAdded){let o=e.nodes[s];o!=null&&(r[s]=o)}return{...n,nodesAddedFull:r}}function bn(t,e,n,r={}){let s={paths:[],depths:new Map,truncated:!1};if(!e)return r.withDetail?s:[];if(!r.both&&n!=="upstream"&&n!=="downstream")throw new Error('reachable: direction must be "upstream" or "downstream"');let o=r.maxDepth;if(o!=null&&(!Number.isInteger(o)||o<0))throw new Error("reachable: maxDepth must be an integer >= 0");if(o===0)return r.withDetail?s:[];let i=new Map,a=new Map,l=new Map,u=new Map,c=new Set;for(let[y,_]of Object.entries(t.nodes)){if(!y)continue;c.add(y);let m=_.deps??[];i.set(y,m);for(let w of m)w&&(c.add(w),a.has(w)||a.set(w,new Set),a.get(w).add(y))}for(let y of t.edges){if(y==null||typeof y!="object")continue;let _=typeof y.from=="string"?y.from:"",m=typeof y.to=="string"?y.to:"";!_||!m||(c.add(_),c.add(m),u.has(_)||u.set(_,new Set),u.get(_).add(m),l.has(m)||l.set(m,new Set),l.get(m).add(_))}if(!c.has(e))return r.withDetail?s:[];let f=r.both===!0,p=y=>{if(f){let k=i.get(y)??[],T=l.get(y),O=a.get(y),C=u.get(y),S=[...k];return T&&S.push(...T),O&&S.push(...O),C&&S.push(...C),S}if(n==="upstream"){let k=i.get(y)??[],T=l.get(y);return T?[...k,...T]:k}let _=a.get(y),m=u.get(y),w=_?[..._]:[];return m&&w.push(...m),w},h=new Set([e]),d=new Map,g=[{path:e,depth:0}],b=0,x=!1;for(;b<g.length;){let y=g[b++];if(o!=null&&y.depth>=o){p(y.path).length>0&&(x=!0);continue}for(let _ of p(y.path))!_||h.has(_)||(h.add(_),d.set(_,y.depth+1),g.push({path:_,depth:y.depth+1}))}let v=[...d.keys()].sort((y,_)=>y<_?-1:y>_?1:0);return r.withDetail?{paths:v,depths:d,truncated:x}:v}function Wr(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++){let r=t[n],s=e[n];if(r.path!==s.path||r.type!==s.type||r.status!==s.status||r.hop!==s.hop||r.dep_index!==s.dep_index||r.annotation!==s.annotation||r.value!==s.value||r.lastMutation!==s.lastMutation)return!1;let o=r.v,i=s.v;if(o!==i&&(o==null||i==null||o.id!==i.id||o.version!==i.version))return!1}return!0}Ge();Ne();se();function ee(t,e){t!=null&&ye(n=>t.down(n),[[B,e]],ae.tierOf)}pe();se();Ee();function zr(t){for(let e of t){let n=e.codePointAt(0);if(n>=19968&&n<=40959||n>=13312&&n<=19903||n>=12288&&n<=12351||n>=12352&&n<=12447||n>=12448&&n<=12543||n>=44032&&n<=55215||n>=65280&&n<=65519)return!0}return!1}var _n=new Set(["\uFF0C","\uFF0E","\uFF01","\uFF1A","\uFF1B","\uFF1F","\u3001","\u3002","\u30FB","\uFF09","\u3015","\u3009","\u300B","\u300D","\u300F","\u3011"]),Ur=new Set([".",",","!","?",":",";",")","]","}","%",'"',"\u201D","\u2019","\xBB","\u203A","\u2026"]);function Kr(t){return t.replace(/[\t\n\r\f ]+/g," ").replace(/^ | $/g,"")}function qr(t){let e=new Intl.Segmenter(void 0,{granularity:"word"}),n=[];for(let r of e.segment(t)){let s=r.segment,o=r.isWordLike??!1,i=[],a=[],l=[],u="",c=null;for(let f of s){let p;f===" "?p="space":f==="\u200B"?p="zero-width-break":f==="\xAD"?p="soft-hyphen":f===`
|
|
7
|
+
`)}function Ir(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ze(t){let e="^";for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="*"){e+=".*";continue}if(r==="?"){e+=".";continue}if(r==="["){let s=t.indexOf("]",n+1);if(s<=n+1){e+="\\[";continue}let o=t.slice(n+1,s);o.startsWith("!")&&(o=`^${o.slice(1)}`),o=o.replace(/\\/g,"\\\\"),e+=`[${o}]`,n=s;continue}e+=Ir(r)}return e+="$",new RegExp(e)}var Pr={data:"\x1B[32m",dirty:"\x1B[33m",resolved:"\x1B[36m",invalidate:"\x1B[93m",pause:"\x1B[90m",resume:"\x1B[96m",complete:"\x1B[34m",error:"\x1B[31m",teardown:"\x1B[91m",derived:"\x1B[35m",path:"\x1B[90m",reset:"\x1B[0m"},$r={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ue(t){if(typeof t=="string")return JSON.stringify(t);if(typeof t=="number"||typeof t=="boolean"||t==null)return String(t);try{return JSON.stringify(t)}catch{return"[unserializable]"}}function Br(t){return t==="none"?$r:t==="ansi"||t==null?Pr:{data:t.data??"",dirty:t.dirty??"",resolved:t.resolved??"",invalidate:t.invalidate??"",pause:t.pause??"",resume:t.resume??"",complete:t.complete??"",error:t.error??"",teardown:t.teardown??"",derived:t.derived??"",path:t.path??"",reset:t.reset??""}}function mn(t){if(t==null)return{};let e=t.detail;return e==="full"?{...t,structured:t.structured??!0,timeline:t.timeline??!0,causal:t.causal??!0,derived:t.derived??!0}:e==="minimal"?{...t,structured:t.structured??!0}:t.format==="stage-log"?{...t,structured:t.structured??!0,timeline:t.timeline??!0}:t}function Fr(t,e,n){for(let r=0;r<t.length;r++){let s=t.charCodeAt(r);if(s<32||s===127)throw new Error(`Graph "${e}": ${n} "${t}" must not contain control character (U+${s.toString(16).padStart(4,"0").toUpperCase()} at index ${r})`)}}function kt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(D))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${D}' (path separator)`);if(t===Q)throw new Error(`Graph "${e}": ${n} name "${Q}" is reserved for meta companion paths`);Fr(t,e,n)}function Hr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(D);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function jr(t,e){let n=!1;for(let s of t)if(!e.isMetaPassthrough(s[0])){n=!0;break}return n?t.filter(s=>e.isMetaPassthrough(s[0])):t}function wn(t){for(let e of t._mounts.values())wn(e);for(let e of t._nodes.values())try{e.down([[j]],{internal:!0})}catch{}}var oe=class t{name;opts;config;_nodes=new Map;_nodeToName=new WeakMap;_mounts=new Map;_parent=void 0;_storageDisposers=new Set;_disposers=new Set;_destroyed=!1;_topology;_topologyEmitters=new Set;constructor(e,n){if(e==="")throw new Error("Graph name must be non-empty");if(e.includes(D))throw new Error(`Graph name must not contain '${D}' (got "${e}")`);if(e===Q)throw new Error(`Graph name "${Q}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??ae,this._traceRing=new Ce(n?.traceCapacity??1e3),n?.versioning!=null&&this.setVersioning(n.versioning)}ancestors(e=!0){let n=[],r=e?this:this._parent;for(;r!=null;)n.push(r),r=r._parent;return n}get topology(){return this._topology==null&&(this._topology=qt(e=>{let n=r=>{e.emit(r)};return this._topologyEmitters.add(n),()=>{this._topologyEmitters.delete(n)}},{name:`${this.name}_topology`})),this._topology}_emitTopology(e){if(!(this._topology==null||this._topologyEmitters.size===0))for(let n of this._topologyEmitters)n(e)}add(e,n){let r=e.name,s=n?.name??r;if(s==null||s==="")throw new Error(`Graph "${this.name}": graph.add requires a non-empty name \u2014 pass via opts.name or set it on the node (e.g. state(0, { name: "x" }))`);let o=s,i=n?.annotation;if(kt(o,this.name,"add"),this._mounts.has(o))throw new Error(`Graph "${this.name}": name "${o}" is already a mount point`);if(this._nodes.has(o))throw new Error(`Graph "${this.name}": node "${o}" already exists`);let a=this._nodeToName.get(e);if(a!==void 0)throw new Error(`Graph "${this.name}": node instance already registered as "${a}"`);return this._nodes.set(o,e),this._nodeToName.set(e,o),this._emitTopology({kind:"added",name:o,nodeKind:"node"}),i!=null&&(this._annotations.set(o,i),this.config.inspectorEnabled&&this._traceRing.push({path:o,annotation:i,timestamp_ns:F()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof I&&n._applyVersioning(e)}remove(e){kt(e,this.name,"remove");let n=this._mounts.get(e);if(n){let o={kind:"mount",nodes:[],mounts:[]},i=[];n._collectObserveTargets("",i);for(let[a,l]of i)a.includes(`${D}${Q}${D}`)||o.nodes.push(a);return o.nodes.sort(),o.mounts.push(e),o.mounts.push(...n._collectSubgraphs(`${e}${D}`)),this._mounts.delete(e),n._parent=void 0,wn(n),this._emitTopology({kind:"removed",name:e,nodeKind:"mount",audit:o}),o}let r=this._nodes.get(e);if(!r)throw new Error(`Graph "${this.name}": unknown node or mount "${e}"`);this._nodes.delete(e),this._nodeToName.delete(r),r.down([[j]],{internal:!0});let s={kind:"node",nodes:[e],mounts:[]};return this._emitTopology({kind:"removed",name:e,nodeKind:"node",audit:s}),s}removeAll(e){let n=typeof e=="function"?e:(()=>{let o=ze(e);return i=>o.test(i)})(),r={kind:"mount",nodes:[],mounts:[]},s=[...this._nodes.keys(),...this._mounts.keys()].filter(o=>n(o));for(let o of s){let i=this.remove(o);r.nodes.push(...i.nodes),r.mounts.push(...i.mounts)}return r.nodes.sort(),r.mounts.sort(),r}[Symbol.iterator](){let e=[...this._nodes.keys()].sort(),n=this._nodes,r=0;return{[Symbol.iterator](){return this},next(){if(r>=e.length)return{value:void 0,done:!0};let s=e[r++];return{value:[s,n.get(s)],done:!1}}}}node(e){if(e==="")throw new Error(`Graph "${this.name}": node name must be non-empty`);if(e.includes(D))return this.resolve(e);let n=this._nodes.get(e);if(!n)throw new Error(`Graph "${this.name}": unknown node "${e}"`);return n}get(e){return this.node(e).cache}set(e,n,r){let s=r?.internal===!0;this.node(e).down([[B,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);It(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[X]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[$,n]],{actor:r?.actor,internal:s,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[Z]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[l,u]of this._nodes)r.set(u,l);let a=[];for(let[l,u]of this._nodes)if(u instanceof I)for(let c of u._deps){let f=r.get(c.node);f!=null&&a.push([f,l])}return a.sort((l,u)=>l[0]<u[0]?-1:l[0]>u[0]?1:l[1]<u[1]?-1:l[1]>u[1]?1:0),a}let s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,l]of s)o.set(l,a);let i=[];for(let[a,l]of s)if(l instanceof I)for(let u of l._deps){let c=o.get(u.node);c!=null&&i.push([c,a])}return i.sort((a,l)=>a[0]<l[0]?-1:a[0]>l[0]?1:a[1]<l[1]?-1:a[1]>l[1]?1:0),i}mount(e,n){if(kt(e,this.name,"mount"),this._nodes.has(e))throw new Error(`Graph "${this.name}": cannot mount at "${e}" \u2014 node with that name exists`);if(this._mounts.has(e))throw new Error(`Graph "${this.name}": mount "${e}" already exists`);if(n===this)throw new Error(`Graph "${this.name}": cannot mount a graph into itself`);if(n._parent!=null)throw new Error(`Graph "${this.name}": this child graph is already mounted on "${n._parent.name}"`);for(let r=this;r!=null;r=r._parent)if(r===n)throw new Error(`Graph "${this.name}": mount("${e}", \u2026) would create a mount cycle`);return this._mounts.set(e,n),n._parent=this,this._emitTopology({kind:"added",name:e,nodeKind:"mount"}),n}resolve(e){let n=Hr(e,this.name);return this._resolveFromSegments(n)}tryResolve(e){try{return this.resolve(e)}catch{return}}_resolveFromSegments(e){let n=e;if(n[0]===this.name&&(n=n.slice(1),n.length===0))throw new Error(`Graph "${this.name}": resolve path ends at graph name only`);let r=n[0],s=n.slice(1);if(s.length===0){let a=this._nodes.get(r);if(a)return a;throw this._mounts.has(r)?new Error(`Graph "${this.name}": path ends at subgraph "${r}" \u2014 not a node (GRAPHREFLY-SPEC \xA73.5)`):new Error(`Graph "${this.name}": unknown name "${r}"`)}let o=this._nodes.get(r);if(o&&s.length>0&&s[0]===Q)return this._resolveMetaChainFromNode(o,s,n.join(D));let i=this._mounts.get(r);if(!i)throw this._nodes.has(r)?new Error(`Graph "${this.name}": "${r}" is a node; trailing path "${s.join(D)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(s.join(D))}_resolveMetaChainFromNode(e,n,r){let s=e,o=0,i=[...n];for(;o<i.length;){if(i[o]!==Q)throw new Error(`Graph "${this.name}": expected ${Q} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${Q} in "${r}"`);let a=i[o+1],l=s.meta[a];if(!l)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=l,o+=2}return s}signal(e,n){if(n?.internal!==!0){for(let s of e)if(this.config.messageTier(s[0])===3)throw new Error(`Graph "${this.name}": Graph.signal() rejects tier-3 messages (DATA / RESOLVED). Broadcast is for control-plane tiers (START / DIRTY / INVALIDATE / PAUSE / RESUME / COMPLETE / ERROR / TEARDOWN). For per-node value writes, use Graph.set or graph.node(name).down(...).`)}let r=[];if(this._signalDeliver(e,n??{},new Set,r),r.length>0)throw r[0]}_signalDeliver(e,n,r,s){for(let l of this._mounts.values())l._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=jr(e,this.config);for(let l of[...this._nodes.keys()].sort()){let u=this._nodes.get(l);if(!r.has(u)){r.add(u);try{u.down(e,i)}catch(c){if(c instanceof K)throw c;s.push(c)}a.length!==0&&this._signalMetaSubtree(u,a,r,i,s)}}}_signalMetaSubtree(e,n,r,s,o){for(let i of Object.keys(e.meta).sort()){let a=e.meta[i];if(!r.has(a)){r.add(a);try{a.down(n,s)}catch(l){if(l instanceof K)throw l;o.push(l)}this._signalMetaSubtree(a,n,r,s,o)}}}describe(e){if(e?.reactive===!0)return this._describeReactive(e);let n=e?.actor,r=e?.filter,s=$e(e?.detail,e?.fields),o=e?.format==="spec",i=o?$e("minimal"):s,a=[];this._collectObserveTargets("",a);let l=new Map;for(let[w,k]of a)l.set(k,w);let u=[];{let w=a.map(([,O])=>O),k=new Set(l.values()),T=0;for(;w.length>0;){let O=w.shift();if(O instanceof I)for(let C of O._deps){let S=C.node;if(l.has(S))continue;let E=S.name??"",R=E;if(!R||k.has(R))if(E){let L=2;for(;k.has(`${E}#${L}`);)L++;R=`${E}#${L}`}else for(R=`__internal__/${T++}`;k.has(R);)R=`__internal__/${T++}`;l.set(S,R),k.add(R),u.push([R,S]),w.push(S)}}}let c=[...a,...u],f={};for(let[w,k]of c){if(n!=null&&!k.allowsObserve(n))continue;let T=wt(k,i),O=k instanceof I?k._deps.map(R=>l.get(R.node)??R.node.name??""):[],{name:C,...S}=T,E={...S,deps:O};if(!o){let R=this._annotations.get(w);R!=null&&(E.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(w,E):R(E)))continue}else{let R=!0;for(let[L,V]of Object.entries(r)){let Y=L==="deps_includes"?"depsIncludes":L==="meta_has"?"metaHas":L;if(Y==="depsIncludes"){if(!E.deps.includes(String(V))){R=!1;break}continue}if(Y==="metaHas"){if(!Object.hasOwn(E.meta??{},String(V))){R=!1;break}continue}if(E[Y]!==V){R=!1;break}}if(!R)continue}f[w]=E}let p=new Set(Object.keys(f)),h=[];for(let[w,k]of c)if(k instanceof I)for(let T of k._deps){let O=l.get(T.node);O!=null&&h.push([O,w])}h.sort((w,k)=>w[0]<k[0]?-1:w[0]>k[0]?1:w[1]<k[1]?-1:w[1]>k[1]?1:0);let d=h.map(([w,k])=>({from:w,to:k}));(n!=null||r!=null)&&(d=d.filter(w=>p.has(w.from)&&p.has(w.to)));let g=this._collectSubgraphs(""),b=n!=null||r!=null?g.filter(w=>{let k=`${w}${D}`;return[...p].some(T=>T===w||T.startsWith(k))}):g,x=this,v=e,y={name:this.name,nodes:f,edges:d,subgraphs:b,expand(w){let k={...v,format:void 0};return Array.isArray(w)?(k.fields=w,k.detail=void 0):(k.detail=w,k.fields=void 0),x.describe(k)}},_=e??{},m=_.format;return m==="json"?Mr(y,_):m==="pretty"?Ar(y,_):m==="mermaid"?xn(y,_):m==="mermaid-url"?Dr(y,_):m==="d2"?Lr(y,_):m==="ascii"?an(y,_):y}_collectSubgraphs(e){let n=[];for(let r of[...this._mounts.keys()].sort()){let s=e===""?r:`${e}${r}`;n.push(s),n.push(...this._mounts.get(r)._collectSubgraphs(`${s}${D}`))}return n}resourceProfile(e){return hn(this,e)}reachable(e,n,r={}){return r.withDetail===!0?bn(this.describe(),e,n,{...r,withDetail:!0}):bn(this.describe(),e,n,r)}explain(e,n,r){return r?.reactive===!0?this._explainReactive(e,n,r):this._explainStatic(e,n,r)}_explainStatic(e,n,r){let s=this.describe({detail:"full"}),o=new Map(this._annotations),i=new Map;for(let[a,l]of Object.entries(s.nodes))l.lastMutation!=null&&i.set(a,l.lastMutation);return un(s,e,n,{...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{},annotations:o,lastMutations:i})}_describeReactive(e){let n={...e,reactive:!1},r=e.reactiveName??"describe",s=0,o=G(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,l=!1,u=()=>{a||l||(a=!0,Oe(()=>{a=!1,!l&&(s+=1,o.emit(s))}))},c=i.onEvent(b=>{let x=b.type;x!=="data"&&x!=="error"&&x!=="complete"&&x!=="teardown"||u()}),f=[],p=new WeakSet,h=b=>{if(p.has(b)||l)return;p.add(b);let x=b.topology.subscribe(v=>{for(let y of v){if(y[0]!==B)continue;let _=y[1];if(u(),_.kind==="added"&&_.nodeKind==="mount"){let m=b._mounts.get(_.name);m!=null&&h(m)}}});f.push(x);for(let v of b._mounts.keys()){let y=b._mounts.get(v);y!=null&&h(y)}};h(this);let d;try{d=q([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(b,x)=>b===x})}catch(b){c();for(let x of f)x();throw i.dispose(),b}let g=_t(d);return{node:d,dispose(){l=!0,c();for(let b of f)b();f.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=G(s,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,l=!1,u=i.onEvent(h=>{let d=h.type;d!=="data"&&d!=="error"&&d!=="complete"&&d!=="teardown"||a||l||(a=!0,Oe(()=>{a=!1,!l&&(s+=1,o.emit(s))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},f;try{f=q([o],()=>this._explainStatic(e,n,c),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(h,d)=>h.found===d.found&&h.reason===d.reason&&h.steps.length===d.steps.length&&Wr(h.steps,d.steps)})}catch(h){throw u(),i.dispose(),h}let p=_t(f);return{node:f,dispose(){l=!0,u(),i.dispose(),p()}}}_pathsMatching(e){let n=ze(e),r=[];return this._collectObserveTargets("",r),r.map(([s])=>s).filter(s=>n.test(s))}_collectObserveTargets(e,n){for(let r of[...this._mounts.keys()].sort()){let s=e===""?r:`${e}${D}${r}`;this._mounts.get(r)._collectObserveTargets(s,n)}for(let r of[...this._nodes.keys()].sort()){let s=this._nodes.get(r),o=e===""?r:`${e}${D}${r}`;n.push([o,s]),this._appendMetaObserveTargets(o,s,n)}}_appendMetaObserveTargets(e,n,r){for(let s of Object.keys(n.meta).sort()){let o=n.meta[s],i=`${e}${D}${Q}${D}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=mn(r?n:e),i=o.structured===!0||o.timeline===!0||o.causal===!0||o.derived===!0||o.detail==="minimal"||o.detail==="full"||o.format!=null,a=o.actor;if(r){let c=e,f=this.resolve(c);if(a!=null&&!f.allowsObserve(a))throw new K({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,f]],o,"one"):{subscribe(p){return f.subscribe(p)},up(p){try{f.up?.(p)}catch(h){if(h instanceof K)return;throw h}}}}let l=[];this._collectObserveTargets("",l),l.sort((c,f)=>c[0]<f[0]?-1:c[0]>f[0]?1:0);let u=a==null?l:l.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,o,"all"):{subscribe:c=>{let f=u.map(([p,h])=>h.subscribe(d=>{c(p,d)}));return()=>{for(let p of f)p()}},up:(c,f)=>{try{this.resolve(c).up?.(f)}catch(p){if(p instanceof K)return;throw p}}}}_buildStructuredObserver(e,n,r){let s=r==="one"?e[0]?.[0]:void 0,o=i=>{if(r==="one"&&s!=null){let c=this.resolve(s);return this._buildStructuredObserver([[s,c]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((c,f)=>c[0]<f[0]?-1:c[0]>f[0]?1:0);let l=i.actor,u=l==null?a:a.filter(([,c])=>c.allowsObserve(l));return this._buildStructuredObserver(u,i,"all")};return this._createObserveResult(e,n,o)}_createObserveResult(e,n,r){let s=n.timeline===!0,o=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",l=this.config.inspectorEnabled,u=(o||i)&&l,c=n.maxEvents,f=c!=null&&c>0?new Ce(c):null,p=[],h=new Set,d={},g=new Set,b=0,x=0,v=0,y=0,_=0,m=0,w=!1,k=!1,T=0,O=new Map,C=new Map,S=new Map,E=N=>{f?f.push(N):p.push(N);for(let A of h)A(N)},R=()=>s?{timestamp_ns:F(),in_batch:De(),batch_id:T}:{},L=(N,A)=>{if(!(!u||!(N instanceof I)))return N._setInspectorHook(W=>{if(W.kind==="dep_message")O.set(N,W.depIndex);else if(W.kind==="run"){let _e=W.batchData.map((M,H)=>M!=null&&M.length>0?M.at(-1):W.prevData[H]);C.set(N,_e);let z=W.batchData.map(M=>M!=null?[...M]:void 0);S.set(N,z),i&&E({type:"derived",path:A,dep_values:_e,dep_batches:z,...R()})}})},V=N=>{let A=O.get(N),W=C.get(N);if(!o||W==null)return{};let z=(A!=null&&A>=0&&N instanceof I?N._deps[A]:void 0)?.node,M=z?.v,H=S.get(N);return{trigger_dep_index:A,trigger_dep_name:z?.name,...M!=null?{trigger_version:{id:M.id,version:M.version}}:{},dep_values:[...W],...H!=null?{dep_batches:H}:{}}},Y=[],ce=[];for(let[N,A]of e){let W=L(A,N);W&&Y.push(W),ce.push(A.subscribe(_e=>{T++;for(let z of _e){let M=z[0],H=R();if(M===B){d[N]=z[1];let Ze=A instanceof I?A.lastMutation?.actor??ge:ge;E({type:"data",path:N,data:z[1],actor:Ze,...H,...V(A)})}else if(a)M===J?b++:M===te?x++:M===X?v++:M===ne?y++:M===ie?_++:M===j?m++:M===Z&&!g.has(N)?w=!0:M===$&&(k=!0,g.add(N));else if(M===J)b++,E({type:"dirty",path:N,...H});else if(M===te)x++,E({type:"resolved",path:N,...H,...V(A)});else if(M===X)v++,E({type:"invalidate",path:N,...H});else if(M===ne)y++,E({type:"pause",path:N,lockId:z[1],...H});else if(M===ie)_++,E({type:"resume",path:N,lockId:z[1],...H});else if(M===Z)g.has(N)||(w=!0),E({type:"complete",path:N,...H});else if(M===$){k=!0,g.add(N);let Ze=A instanceof I?A.lastMutation?.actor??ge:ge;E({type:"error",path:N,data:z[1],actor:Ze,...H})}else M===j&&(m++,E({type:"teardown",path:N,...H}))}}))}let Ye=!1,Je=()=>{if(!Ye){Ye=!0;for(let N of ce)N();for(let N of Y)N();for(let N of Re)N({value:void 0,done:!0});Re.length=0}},Xe=[],Re=[];h.add(N=>{let A=Re.shift();A?A({value:N,done:!1}):Xe.push(N)});let Ct={get values(){return d},get dirtyCount(){return b},get resolvedCount(){return x},get invalidateCount(){return v},get pauseCount(){return y},get resumeCount(){return _},get teardownCount(){return m},get events(){return f?f.toArray():[...p]},get anyCompletedCleanly(){return w},get anyErrored(){return k},get completedWithoutErrors(){return w&&!k},onEvent(N){return h.add(N),()=>h.delete(N)},dispose:Je,expand(N){Je();let A={...n};return typeof N=="string"?A.detail=N:Object.assign(A,N),r(mn(A))},[Symbol.asyncIterator](){return{next(){return Xe.length>0?Promise.resolve({value:Xe.shift(),done:!1}):Ye?Promise.resolve({value:void 0,done:!0}):new Promise(N=>Re.push(N))},return(){return Je(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(Ct,n),Ct}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let s=n.logger??(d=>console.log(d)),o=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=o==null&&i==null?()=>!0:d=>(o==null||o.has(d))&&(i==null||!i.has(d)),l=Br(n.theme),u=r==="stage-log"?F():0,c=d=>d==null?"":n.stageLabels?.[d]??d,f=(d,g)=>d.length>g?`${d.slice(0,g-1)}\u2026`:d,p=d=>d.type==="data"||d.type==="error"?f(Ue(d.data),120):"",h=d=>{if(r==="stage-log"){let k=(F()-u)/1e9,T=c(d.path).padEnd(9);if(d.type==="data"){let O=p(d);return`[${k.toFixed(3)}s] ${T} \u2190${O?` ${O}`:""}`}if(d.type==="error"){let O=p(d);return`[${k.toFixed(3)}s] ${T} \u2717${O?` ${O}`:""}`}return d.type==="complete"?`[${k.toFixed(3)}s] ${T} \u25A0 complete`:`[${k.toFixed(3)}s] ${T} ${d.type}`}if(r==="json")try{return JSON.stringify(d)}catch{return JSON.stringify({type:d.type,path:d.path,data:"[unserializable]"})}let g=l[d.type]??"",b=d.path?`${l.path}${d.path}${l.reset} `:"",x=d.type==="data"||d.type==="error",v=d.type==="pause"||d.type==="resume",y=x?` ${Ue(d.data)}`:v?` ${Ue(d.lockId)}`:"",_=d.type==="data"||d.type==="resolved"||d.type==="derived"?d:void 0,m=_?.trigger_dep_name!=null?` <- ${_.trigger_dep_name}`:_?.trigger_dep_index!=null?` <- #${_.trigger_dep_index}`:"",w=d.in_batch?" [batch]":"";return`${b}${g}${d.type.toUpperCase()}${l.reset}${y}${m}${w}`};e.onEvent(d=>{a(d.type)&&s(h(d),d)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){pn(this._disposers,this.name),this.signal([[j]],{internal:!0}),pn(this._storageDisposers,this.name);for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}get destroyed(){return this._destroyed}_destroyClearOnly(){for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}snapshot(e){let{expand:n,...r}=this.describe({detail:"full"}),s={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:l,guard:u,...c}=r.nodes[a];s[a]=c}let o=[...r.subgraphs].sort(),i={...r,version:1,nodes:s,subgraphs:o};if(e?.format==null)return i;if(e.format==="json-string")return JSON.stringify(i);if(e.format==="bytes"){if(e.codec==null)throw new Error("snapshot({format: 'bytes'}) requires a `codec` name");let a=this.config.lookupCodec(e.codec);if(a==null)throw new Error(`snapshot: codec "${e.codec}" is not registered on this graph's config. Call config.registerCodec(...) before creating nodes.`);return At(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??ae,{codec:s,codecVersion:o,payload:i}=Dt(e,r);return s.decode(i,o)}restore(e,n){if(gn(e),e.name!==this.name)throw new Error(`Graph "${this.name}": restore snapshot name "${e.name}" does not match this graph`);let r=n?.only==null?null:(Array.isArray(n.only)?n.only:[n.only]).map(o=>ze(o)),s=n?.includeProducers===!0;for(let o of Object.keys(e.nodes).sort()){if(r!==null&&!r.some(a=>a.test(o)))continue;let i=e.nodes[o];if(i!==void 0){if(!("value"in i)||i.value===void 0){"value"in i&&i.value===void 0&&n?.onError?.(o,new Error(`restore: slice.value is undefined for "${o}" (undefined is the global SENTINEL; not valid DATA)`));continue}if(!(i.type==="derived"||i.type==="effect")&&!(i.type==="producer"&&!s)){if(i.v!=null){let l=this.tryResolve(o)?.v;if(l!=null&&l.id===i.v.id&&l.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){gn(e);let r=typeof n=="function"?n:n?.build,s=typeof n=="function"?void 0:n?.factories,o=new t(e.name);if(r)return r(o),o.restore(e),o;for(let h of[...e.subgraphs].sort((d,g)=>{let b=d.split(D).length,x=g.split(D).length;return b!==x?b-x:d<g?-1:d>g?1:0})){let d=h.split(D),g=o;for(let b of d)g._mounts.has(b)||g.mount(b,new t(b)),g=g._mounts.get(b)}let i=s?Object.entries(s).map(([h,d])=>({re:ze(h),factory:d})):[],a=h=>{for(let d of i)if(d.re.test(h))return d.factory},l=h=>{let d=h.split(D),g=d.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${h}"`);let b=o;for(let x of d){let v=b._mounts.get(x);if(!v)throw new Error(`unknown mount "${x}" in path "${h}"`);b=v}return[b,g]},u=Object.entries(e.nodes).filter(([h])=>!h.includes(`${D}${Q}${D}`)).sort((h,d)=>h[0]<d[0]?-1:h[0]>d[0]?1:0),c=new Map(u),f=new Map,p=!0;for(;c.size>0&&p;){p=!1;for(let[h,d]of[...c.entries()]){let g=d?.deps??[];if(!g.every(m=>f.has(m)))continue;let[b,x]=l(h),v={...d?.meta??{}},y=a(h),_;if(d?.type==="state")_=G(d.value,{meta:v});else{if(y==null)continue;_=y(x,{path:h,type:d.type,value:d.value,meta:v,deps:g,resolvedDeps:g.map(m=>f.get(m))})}b.add(_,{name:x}),f.set(h,_),c.delete(h),p=!0}}if(c.size>0){let h=[...c.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${h}. Pass matching factories via fromSnapshot(data, { factories: { pattern: factoryFn } }).`)}return o.restore(e),o}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(u=>({tier:u,debounceMs:Math.max(0,u.debounceMs??0),compactEvery:Math.max(1,u.compactEvery??10),timer:void 0,seq:0,lastSnapshot:void 0,lastFingerprint:"",disposed:!1,savePending:void 0}));n.autoRestore===!0&&this._cascadeRestore(e,n.onError);let s=(u,c)=>{if(u.disposed)return;let f=Sr(c.nodes);if(u.lastSnapshot!=null&&f!==""&&f===u.lastFingerprint)return;let p=u.seq+1,h=Me(),b=u.lastSnapshot==null||p%u.compactEvery===0?{mode:"full",snapshot:c,seq:p,timestamp_ns:h,format_version:xe}:{mode:"diff",diff:Vr(u.lastSnapshot,c),seq:p,timestamp_ns:h,format_version:xe};if(u.tier.filter&&!u.tier.filter(this.name,b))return;let x;try{x=u.tier.save(this.name,b)}catch(v){n.onError?.(v,u.tier);return}if(x&&typeof x.then=="function"){let _=(u.savePending??Promise.resolve()).then(()=>x,()=>x).then(()=>{u.disposed||(u.seq=p,u.lastSnapshot=c,u.lastFingerprint=f)},m=>{n.onError?.(m,u.tier)});u.savePending=_.finally(()=>{u.savePending===_&&(u.savePending=void 0)})}else u.seq=p,u.lastSnapshot=c,u.lastFingerprint=f},o=(u,c)=>{try{s(u,c)}catch(f){n.onError?.(f,u.tier)}},i=(u,c)=>{if(!c.some(d=>{let g=this.config.messageTier(d[0]);return g>=3&&g<5}))return;if(n.filter){let d=this.tryResolve(u);if(d==null)return;let g=wt(d,$e("standard"));if(!n.filter(u,g))return}let p,h=()=>(p==null&&(p=this.snapshot()),p);for(let d of r)d.disposed||(d.debounceMs===0?o(d,h()):(d.timer==null&&(d.timer=new Be),d.timer.start(d.debounceMs,()=>{d.disposed||o(d,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(f=>{let p=this.tryResolve(f);return p==null?()=>{}:p.subscribe(h=>i(f,h))});a=()=>{for(let f of c)f()}}else a=this.observe().subscribe((u,c)=>i(u,c));let l=()=>{a();for(let u of r)u.disposed=!0,u.timer?.cancel();this._storageDisposers.delete(l)};return this._storageDisposers.add(l),{dispose:l}}async _cascadeRestore(e,n){for(let r of e){let s;try{s=await r.load(this.name)}catch(i){n?.(i,r);continue}if(s==null||typeof s!="object"||Array.isArray(s))continue;let o=s;try{if(o.mode==="full"&&o.snapshot!=null)return this.restore(o.snapshot),!0;if(o.version===xe&&o.nodes!=null)return this.restore(o),!0}catch(i){n?.(i,r)}}return!1}static async fromStorage(e,n,r){for(let s of n){let o;try{o=await s.load(e)}catch(l){r?.onError?.(l,s);continue}if(o==null||typeof o!="object"||Array.isArray(o))continue;let i=o,a=i.mode==="full"&&i.snapshot!=null?i.snapshot:i.version===xe&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(l){r?.onError?.(l,s)}}throw new Error(`Graph.fromStorage: no tier held a restorable record for "${e}" across ${n.length} tier(s)`)}_annotations=new Map;_traceRing;trace(e,n,r){if(e!=null&&n!=null){if(this.tryResolve(e)==null)return;if(this._annotations.set(e,n),this.config.inspectorEnabled){let s={path:e,annotation:n,timestamp_ns:F(),...r?.actor!=null?{actor:r.actor}:{}};this._traceRing.push(s)}return}return e!=null?this.config.inspectorEnabled?this._annotations.get(e):void 0:this.config.inspectorEnabled?this._traceRing.toArray():[]}annotation(e){return this._annotations.get(e)}clearTrace(){this._annotations.clear(),this._traceRing.clear()}pruneTrace(e){let n=this._traceRing.toArray().filter(s=>!e(s)),r=this._traceRing.size-n.length;this._traceRing.clear();for(let s of n)this._traceRing.push(s);return r}static diff(e,n){let r=new Set(Object.keys(e.nodes)),s=new Set(Object.keys(n.nodes)),o=[...s].filter(v=>!r.has(v)).sort(),i=[...r].filter(v=>!s.has(v)).sort(),a=[],l=[];for(let v of r){if(!s.has(v))continue;let y=e.nodes[v],_=n.nodes[v],m=y.v,w=_.v;m!=null&&w!=null&&m.id===w.id&&m.version!==w.version&&l.push({path:v,id:m.id,from:m.version,to:w.version});let k=m!=null&&w!=null&&m.id===w.id&&m.version===w.version;for(let T of["type","status","sentinel"]){let O=y[T],C=_[T];O!==C&&a.push({path:v,field:T,from:O,to:C})}if(!k)for(let T of["value","meta"]){let O=y[T],C=_[T];Nr(O,C)||a.push({path:v,field:T,from:O,to:C})}}let u=v=>`${v.from} ${v.to}`,c=new Set(e.edges.map(u)),f=new Set(n.edges.map(u)),p=n.edges.filter(v=>!c.has(u(v))),h=e.edges.filter(v=>!f.has(u(v))),d=new Set(e.subgraphs),g=new Set(n.subgraphs),b=[...g].filter(v=>!d.has(v)).sort(),x=[...d].filter(v=>!g.has(v)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:l,edgesAdded:p,edgesRemoved:h,subgraphsAdded:b,subgraphsRemoved:x}}};function Vr(t,e){let n=oe.diff(t,e),r={};for(let s of n.nodesAdded){let o=e.nodes[s];o!=null&&(r[s]=o)}return{...n,nodesAddedFull:r}}function bn(t,e,n,r={}){let s={paths:[],depths:new Map,truncated:!1};if(!e)return r.withDetail?s:[];if(!r.both&&n!=="upstream"&&n!=="downstream")throw new Error('reachable: direction must be "upstream" or "downstream"');let o=r.maxDepth;if(o!=null&&(!Number.isInteger(o)||o<0))throw new Error("reachable: maxDepth must be an integer >= 0");if(o===0)return r.withDetail?s:[];let i=new Map,a=new Map,l=new Map,u=new Map,c=new Set;for(let[y,_]of Object.entries(t.nodes)){if(!y)continue;c.add(y);let m=_.deps??[];i.set(y,m);for(let w of m)w&&(c.add(w),a.has(w)||a.set(w,new Set),a.get(w).add(y))}for(let y of t.edges){if(y==null||typeof y!="object")continue;let _=typeof y.from=="string"?y.from:"",m=typeof y.to=="string"?y.to:"";!_||!m||(c.add(_),c.add(m),u.has(_)||u.set(_,new Set),u.get(_).add(m),l.has(m)||l.set(m,new Set),l.get(m).add(_))}if(!c.has(e))return r.withDetail?s:[];let f=r.both===!0,p=y=>{if(f){let k=i.get(y)??[],T=l.get(y),O=a.get(y),C=u.get(y),S=[...k];return T&&S.push(...T),O&&S.push(...O),C&&S.push(...C),S}if(n==="upstream"){let k=i.get(y)??[],T=l.get(y);return T?[...k,...T]:k}let _=a.get(y),m=u.get(y),w=_?[..._]:[];return m&&w.push(...m),w},h=new Set([e]),d=new Map,g=[{path:e,depth:0}],b=0,x=!1;for(;b<g.length;){let y=g[b++];if(o!=null&&y.depth>=o){p(y.path).length>0&&(x=!0);continue}for(let _ of p(y.path))!_||h.has(_)||(h.add(_),d.set(_,y.depth+1),g.push({path:_,depth:y.depth+1}))}let v=[...d.keys()].sort((y,_)=>y<_?-1:y>_?1:0);return r.withDetail?{paths:v,depths:d,truncated:x}:v}function Wr(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++){let r=t[n],s=e[n];if(r.path!==s.path||r.type!==s.type||r.status!==s.status||r.hop!==s.hop||r.dep_index!==s.dep_index||r.annotation!==s.annotation||r.value!==s.value||r.lastMutation!==s.lastMutation)return!1;let o=r.v,i=s.v;if(o!==i&&(o==null||i==null||o.id!==i.id||o.version!==i.version))return!1}return!0}Ge();Ne();se();function ee(t,e){t!=null&&ye(n=>t.down(n),[[B,e]],ae.tierOf)}pe();se();Ee();function zr(t){for(let e of t){let n=e.codePointAt(0);if(n>=19968&&n<=40959||n>=13312&&n<=19903||n>=12288&&n<=12351||n>=12352&&n<=12447||n>=12448&&n<=12543||n>=44032&&n<=55215||n>=65280&&n<=65519)return!0}return!1}var _n=new Set(["\uFF0C","\uFF0E","\uFF01","\uFF1A","\uFF1B","\uFF1F","\u3001","\u3002","\u30FB","\uFF09","\u3015","\u3009","\u300B","\u300D","\u300F","\u3011"]),Ur=new Set([".",",","!","?",":",";",")","]","}","%",'"',"\u201D","\u2019","\xBB","\u203A","\u2026"]);function Kr(t){return t.replace(/[\t\n\r\f ]+/g," ").replace(/^ | $/g,"")}function qr(t){let e=new Intl.Segmenter(void 0,{granularity:"word"}),n=[];for(let r of e.segment(t)){let s=r.segment,o=r.isWordLike??!1,i=[],a=[],l=[],u="",c=null;for(let f of s){let p;f===" "?p="space":f==="\u200B"?p="zero-width-break":f==="\xAD"?p="soft-hyphen":f===`
|
|
8
8
|
`?p="hard-break":p="text",c!==null&&p===c?u+=f:(c!==null&&(i.push(u),a.push(c==="text"&&o),l.push(c)),u=f,c=p)}c!==null&&(i.push(u),a.push(c==="text"&&o),l.push(c)),n.push({texts:i,isWordLike:a,kinds:l})}return n}function we(t,e,n,r,s){let o=Kr(t);if(o.length===0)return[];let i=qr(o),a=new Intl.Segmenter(void 0,{granularity:"grapheme"}),l=[],u=[],c=[];for(let x of i)for(let v=0;v<x.texts.length;v++)l.push(x.texts[v]),u.push(x.kinds[v]),c.push(x.isWordLike[v]);let f=[],p=[],h=[];for(let x=0;x<l.length;x++){let v=l[x],y=u[x],_=c[x];if(y==="text"&&!_&&f.length>0&&p[p.length-1]==="text"&&v.length===1&&(Ur.has(v)||_n.has(v))){f[f.length-1]+=v;continue}if(v==="-"&&f.length>0&&p[p.length-1]==="text"&&h[h.length-1]){f[f.length-1]+=v;continue}f.push(v),p.push(y),h.push(_)}let d=r.get(e);d||(d=new Map,r.set(e,d));function g(x){let v=d.get(x);if(v===void 0){s&&(s.misses+=1);let y=n.measureSegment(x,e).width;v=Number.isFinite(y)&&y>=0?y:0,d.set(x,v)}else s&&(s.hits+=1);return v}let b=[];for(let x=0;x<f.length;x++){let v=f[x],y=p[x];if(y!=="text"){b.push({text:v,width:y==="space"?g(" ")*v.length:0,kind:y,graphemeWidths:null});continue}if(zr(v)){let w="";for(let k of a.segment(v)){let T=k.segment;if(w.length>0&&_n.has(T)){w+=T;continue}if(w.length>0){let O=g(w);b.push({text:w,width:O,kind:"text",graphemeWidths:null})}w=T}if(w.length>0){let k=g(w);b.push({text:w,width:k,kind:"text",graphemeWidths:null})}continue}let _=g(v),m=null;if(h[x]&&v.length>1){let w=[];for(let k of a.segment(v))w.push(g(k.segment));w.length>1&&(m=w)}b.push({text:v,width:_,kind:"text",graphemeWidths:m})}return b}function Ke(t,e,n,r,s){if(t.length===0)return{lines:[],lineCount:0};let o=[],i=0,a=!1,l=0,u=0,c=0,f=0,p=-1,h=0,d=s.get(r);d||(d=new Map,s.set(r,d));let g=d.get("-");g===void 0&&(g=n.measureSegment("-",r).width,d.set("-",g));function b(m=c,w=f,k=i){let T="";for(let O=l;O<m;O++){let C=t[O];if(!(C.kind==="soft-hyphen"||C.kind==="hard-break"))if(O===l&&u>0&&C.graphemeWidths){let E=[...new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(C.text)].map(R=>R.segment);T+=E.slice(u).join("")}else T+=C.text}if(w>0&&m<t.length){let O=t[m],S=[...new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(O.text)].map(R=>R.segment),E=l===m?u:0;T+=S.slice(E,w).join("")}m>0&&t[m-1]?.kind==="soft-hyphen"&&!(l===m&&u>0)&&(T+="-"),o.push({text:T,width:k,startSegment:l,startGrapheme:u,endSegment:m,endGrapheme:w}),i=0,a=!1,p=-1,h=0}function x(m){return m==="space"||m==="zero-width-break"||m==="soft-hyphen"}function v(m,w,k){a=!0,l=m,u=w,c=m+1,f=0,i=k}function y(m,w,k){a=!0,l=m,u=w,c=m,f=w+1,i=k}for(let m=0;m<t.length;m++){let w=t[m];if(w.kind==="hard-break"){a?b():o.push({text:"",width:0,startSegment:m,startGrapheme:0,endSegment:m,endGrapheme:0}),l=m+1,u=0;continue}let k=w.width;if(!a){k>e&&w.graphemeWidths?_(m,0,w.graphemeWidths):v(m,0,k),x(w.kind)&&(p=m+1,h=w.kind==="space"?i-k:i);continue}let T=i+k;if(T>e+.005){if(x(w.kind)){i+=k,c=m+1,f=0,b(m+1,0,w.kind==="space"?i-k:i);continue}if(p>=0){b(p,0,h),m--;continue}if(k>e&&w.graphemeWidths){b(),_(m,0,w.graphemeWidths);continue}b(),m--;continue}i=T,c=m+1,f=0,x(w.kind)&&(p=m+1,h=w.kind==="space"?i-k:i)}return a&&b(),{lines:o,lineCount:o.length};function _(m,w,k){for(let T=w;T<k.length;T++){let O=k[T];if(!a){y(m,T,O);continue}i+O>e+.005?(b(),y(m,T,O)):(i+=O,c=m,f=T+1)}a&&c===m&&f===k.length&&(c=m+1,f=0)}}function Ot(t){return t==="space"||t==="zero-width-break"||t==="soft-hyphen"}var St=null;function Yr(){return St===null&&(St=new Intl.Segmenter(void 0,{granularity:"grapheme"})),St}function kn(t,e,n){if(e===0&&n<0)return t.text;let r=[...Yr().segment(t.text)].map(o=>o.segment),s=n<0?r.length:n;return r.slice(e,s).join("")}function le(t,e,n,r,s,o){let i="";for(let a=e;a<r;a++){let l=t[a];l.kind==="soft-hyphen"||l.kind==="hard-break"||(a===e&&n>0?i+=kn(l,n,-1):i+=l.text)}if(s>0&&r<t.length){let a=t[r];i+=kn(a,e===r?n:0,s)}return o&&(i+="-"),i}function Jr(t){if(!t?.adapter||!t.font)return 0;let e=t.cache;if(e){let n=e.get(t.font);n||(n=new Map,e.set(t.font,n));let r=n.get("-");return r===void 0&&(r=t.adapter.measureSegment("-",t.font).width,n.set("-",r)),r}return t.adapter.measureSegment("-",t.font).width}function Nt(t,e,n,r){let s=e.segmentIndex,o=e.graphemeIndex;if(s>=t.length)return null;if(o===0){for(;s<t.length;){let m=t[s];if(m.kind==="hard-break")return{text:"",width:0,start:{segmentIndex:e.segmentIndex,graphemeIndex:0},end:{segmentIndex:s+1,graphemeIndex:0}};if(m.kind==="space"||m.kind==="zero-width-break"||m.kind==="soft-hyphen"){s+=1;continue}break}if(s>=t.length)return null}let i=Jr(r),a=s,l=s===e.segmentIndex?o:0,u=0,c=a,f=0,p=!1,h=-1,d=0,g=0,b=!1,x=(m,w,k,T)=>{h=m,d=w,g=k,b=T==="soft-hyphen"},v=(m,w,k)=>{for(let T=w;T<k.length;T++){let O=k[T];if(!p){u=O,c=m,f=T+1,p=!0;continue}if(u+O>n+.005)return!0;u+=O,c=m,f=T+1}return c===m&&f===k.length&&(c=m+1,f=0),!1};if(l>0&&a<t.length){let m=t[a];if(m.graphemeWidths){if(v(a,l,m.graphemeWidths))return{text:le(t,a,l,c,f,!1),width:u,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}};s=c}}for(;s<t.length;){let m=t[s];if(m.kind==="hard-break"){if(p){let T=c>0&&t[c-1]?.kind==="soft-hyphen";return{text:le(t,a,l,c,f,T),width:u+(T?i:0),start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}}}return{text:"",width:0,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:s+1,graphemeIndex:0}}}let w=m.width;if(!p){if(w>n&&m.graphemeWidths){if(v(s,0,m.graphemeWidths))return{text:le(t,a,l,c,f,!1),width:u,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}};s=c;continue}u=w,c=s+1,f=0,p=!0,Ot(m.kind)&&x(s+1,0,m.kind==="space"?u-w:u,m.kind),s+=1;continue}let k=u+w;if(k>n+.005){if(Ot(m.kind)){c=s+1,f=0;let O=m.kind==="soft-hyphen",C=m.kind==="space"?u:u+(O?i:0);return{text:le(t,a,l,c,f,O),width:C,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}}}return h>=0?{text:le(t,a,l,h,d,b),width:g+(b?i:0),start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:h,graphemeIndex:d}}:w>n&&m.graphemeWidths?{text:le(t,a,l,c,f,!1),width:u,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}}:{text:le(t,a,l,c,f,!1),width:u,start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}}}u=k,c=s+1,f=0,Ot(m.kind)&&x(s+1,0,m.kind==="space"?u-w:u,m.kind),s+=1}if(!p)return null;let y=c>0&&t[c-1]?.kind==="soft-hyphen";return{text:le(t,a,l,c,f,y),width:u+(y?i:0),start:{segmentIndex:a,graphemeIndex:l},end:{segmentIndex:c,graphemeIndex:f}}}function Et(t,e,n=0){let r=[t];for(let s=0;s<e.length;s++){let o=e[s],i=[];for(let a=0;a<r.length;a++){let l=r[a];if(o.right<=l.left||o.left>=l.right){i.push(l);continue}o.left>l.left&&i.push({left:l.left,right:o.left}),o.right<l.right&&i.push({left:o.right,right:l.right})}r=i}return n>0?r.filter(s=>s.right-s.left>=n):r}function qe(t,e,n){let r=[],s=new Intl.Segmenter(void 0,{granularity:"grapheme"});for(let o=0;o<t.lines.length;o++){let i=t.lines[o],a=o*n,l=0;for(let u=i.startSegment;u<e.length;u++){let c=e[u];if(c.kind==="soft-hyphen"||c.kind==="hard-break"){if(u>=i.endSegment&&i.endGrapheme===0)break;continue}let f=[...s.segment(c.text)].map(d=>d.segment);if(f.length===0)continue;let p=u===i.startSegment?i.startGrapheme:0,h;if(u<i.endSegment)h=f.length;else if(u===i.endSegment&&i.endGrapheme>0)h=i.endGrapheme;else break;for(let d=p;d<h;d++){let g=c.graphemeWidths?c.graphemeWidths[d]:c.width/f.length;r.push({x:l,y:a,width:g,height:n,line:o}),l+=g}}}return r}function Xr(t){let{adapter:e,name:n="reactive-layout"}=t,r=new oe(n),s=new Map,o=G(t.text??"",{name:"text"}),i=G(t.font??"16px sans-serif",{name:"font"}),a=G(t.lineHeight??20,{name:"line-height"}),l=G(Math.max(0,t.maxWidth??800),{name:"max-width"});function u(d,g){if(d===null||g===null)return d===g;if(d.length!==g.length)return!1;for(let b=0;b<d.length;b++)if(d[b]!==g[b])return!1;return!0}let c=re([o,i],(d,g,b)=>{let x=d[0],v=x!=null&&x.length>0?x.at(-1):b.prevData[0],y=d[1],_=y!=null&&y.length>0?y.at(-1):b.prevData[1],m=F(),w={hits:0,misses:0},k=we(v,_,e,s,w),T=F()-m,O=w.hits+w.misses,C=O===0?1:w.hits/O,S=c.meta;S&&(ee(S["cache-hit-rate"],C),ee(S["segment-count"],k.length),ee(S["layout-time-ns"],T)),g.emit(k);let E=()=>{s.clear(),e.clearCache?.()};return{deactivate:E,invalidate:E}},{name:"segments",describeKind:"derived",meta:{"cache-hit-rate":0,"segment-count":0,"layout-time-ns":0},equals:(d,g)=>{let b=d,x=g;if(b==null||x==null)return b===x;if(b.length!==x.length)return!1;for(let v=0;v<b.length;v++){let y=b[v],_=x[v];if(y.text!==_.text||y.width!==_.width||y.kind!==_.kind||!u(y.graphemeWidths??null,_.graphemeWidths??null))return!1}return!0}}),f=q([c,l,i],([d,g,b])=>Ke(d,g,e,b,s),{name:"line-breaks",equals:(d,g)=>{let b=d,x=g;if(b==null||x==null)return b===x;if(b.lineCount!==x.lineCount)return!1;for(let v=0;v<b.lines.length;v++){let y=b.lines[v],_=x.lines[v];if(y.text!==_.text||y.width!==_.width||y.startSegment!==_.startSegment||y.startGrapheme!==_.startGrapheme||y.endSegment!==_.endSegment||y.endGrapheme!==_.endGrapheme)return!1}return!0}}),p=q([f,a],([d,g])=>d.lineCount*g,{name:"height"}),h=q([f,c,a],([d,g,b])=>qe(d,g,b),{name:"char-positions",equals:(d,g)=>{let b=d,x=g;if(b==null||x==null)return b===x;if(b.length!==x.length)return!1;for(let v=0;v<b.length;v++)if(b[v].x!==x[v].x||b[v].y!==x[v].y||b[v].width!==x[v].width)return!1;return!0}});return r.add(o,{name:"text"}),r.add(i,{name:"font"}),r.add(a,{name:"line-height"}),r.add(l,{name:"max-width"}),r.add(c,{name:"segments"}),r.add(f,{name:"line-breaks"}),r.add(p,{name:"height"}),r.add(h,{name:"char-positions"}),{graph:r,setText:d=>r.set("text",d),setFont:d=>r.set("font",d),setLineHeight:d=>r.set("line-height",d),setMaxWidth:d=>r.set("max-width",Math.max(0,d)),segments:c,lineBreaks:f,height:p,charPositions:h}}function Tn(t,e,n,r,s,o,i){switch(t.type){case"text":{let a=t.font??s,l=t.lineHeight??o,u=we(t.text,a,n.text,r),c=Ke(u,e,n.text,a,r),f=qe(c,u,l),p=c.lineCount*l,h=0;for(let d of c.lines)d.width>h&&(h=d.width);return{index:i,type:"text",width:Math.min(h,e),height:p,textSegments:u,textLineBreaks:c,textCharPositions:f}}case"image":{let a,l;if(t.naturalWidth!=null&&t.naturalHeight!=null)a=t.naturalWidth,l=t.naturalHeight;else if(n.image){let u=n.image.measureImage(t.src);a=u.width,l=u.height}else throw new Error(`Image block at index ${i} has no naturalWidth/naturalHeight and no ImageMeasurer adapter`);return a>e&&(l=l*e/a,a=e),{index:i,type:"image",width:a,height:l}}case"svg":{let a,l;if(t.viewBox)a=t.viewBox.width,l=t.viewBox.height;else if(n.svg){let u=n.svg.measureSvg(t.content);a=u.width,l=u.height}else throw new Error(`SVG block at index ${i} has no viewBox and no SvgMeasurer adapter`);return a>e&&(l=l*e/a,a=e),{index:i,type:"svg",width:a,height:l}}}}function On(t,e,n,r,s,o){return t.map((i,a)=>Tn(i,e,n,r,s,o,a))}function Sn(t,e){let n=[],r=0;for(let s=0;s<t.length;s++){let o=t[s];n.push({...o,x:0,y:r}),r+=o.height+(s<t.length-1?e:0)}return n}function Nn(t){if(t.length===0)return 0;let e=t[t.length-1];return e.y+e.height}function Zr(t){let{adapters:e,name:n="reactive-block-layout",defaultFont:r="16px sans-serif",defaultLineHeight:s=20}=t,o=new oe(n),i=new Map,a=G(t.blocks??[],{name:"blocks"}),l=G(Math.max(0,t.maxWidth??800),{name:"max-width"}),u=G(t.gap??0,{name:"gap"}),c=re([a,l],(h,d,g)=>{let b=h[0]!=null&&h[0].length>0?h[0].at(-1):g.prevData[0],x=h[1]!=null&&h[1].length>0?h[1].at(-1):g.prevData[1],v=F(),y=On(b,x,e,i,r,s),_=F()-v,m=c.meta;m&&(ee(m["block-count"],y.length),ee(m["layout-time-ns"],_)),d.emit(y);let w=()=>{i.clear(),e.text.clearCache?.()};return{deactivate:w,invalidate:w}},{name:"measured-blocks",describeKind:"derived",meta:{"block-count":0,"layout-time-ns":0},equals:(h,d)=>{let g=h,b=d;if(g==null||b==null)return g===b;if(g.length!==b.length)return!1;for(let x=0;x<g.length;x++){let v=g[x],y=b[x];if(v.type!==y.type||v.width!==y.width||v.height!==y.height||v.index!==y.index)return!1}return!0}}),f=q([c,u],([h,d])=>Sn(h,d),{name:"block-flow",equals:(h,d)=>{let g=h,b=d;if(g==null||b==null)return g===b;if(g.length!==b.length)return!1;for(let x=0;x<g.length;x++){let v=g[x],y=b[x];if(v.x!==y.x||v.y!==y.y||v.width!==y.width||v.height!==y.height)return!1}return!0}}),p=q([f],([h])=>Nn(h),{name:"total-height"});return o.add(a,{name:"blocks"}),o.add(l,{name:"max-width"}),o.add(u,{name:"gap"}),o.add(c,{name:"measured-blocks"}),o.add(f,{name:"block-flow"}),o.add(p,{name:"total-height"}),{graph:o,setBlocks:h=>o.set("blocks",h),setMaxWidth:h=>o.set("max-width",Math.max(0,h)),setGap:h=>o.set("gap",h),measuredBlocks:c,blockFlow:f,totalHeight:p}}pe();se();Ee();function En(t,e,n){let r=t.hPad??0,s=t.vPad??0,o=e-s,i=n+s;if(o>=t.cy+t.r||i<=t.cy-t.r)return null;let a=t.cy>=o&&t.cy<=i?0:t.cy<o?o-t.cy:t.cy-i;if(a>=t.r)return null;let l=Math.sqrt(t.r*t.r-a*a);return{left:t.cx-l-r,right:t.cx+l+r}}function Cn(t,e,n){let r=t.hPad??0,s=t.vPad??0;return n<=t.y-s||e>=t.y+t.h+s?null:{left:t.x-r,right:t.x+t.w+r}}function Qr(t,e,n){return t.kind==="circle"?En(t,e,n):Cn(t,e,n)}function Rn(t,e,n,r,s,o,i){let a=i?.paragraphSpacing??s,l=[],u={segmentIndex:0,graphemeIndex:0};if(t.length===0||n.count<=0||s<=0)return{lines:l,cursor:u};let c=e.paddingX??0,f=e.paddingY??0,p=Math.max(0,e.width-c*2),h=Math.max(0,e.height-f*2),d=n.gap*Math.max(0,n.count-1),g=Math.max(0,(p-d)/n.count);if(g<=0)return{lines:l,cursor:u};e:for(let b=0;b<n.count;b++){let x=c+b*(g+n.gap),v=x+g,y=f;for(;y+s<=f+h;){let _=y+s,m=[];for(let T=0;T<r.length;T++){let O=Qr(r[T],y,_);O!==null&&m.push(O)}let w=Et({left:x,right:v},m,o);if(w.length===0){y+=s;continue}let k=!1;for(let T=0;T<w.length;T++){let O=w[T],C=O.right-O.left,S=Nt(t,u,C);if(S===null)return{lines:l,cursor:u};if(S.text.length===0&&S.width===0){u=S.end,k=!0;break}l.push({x:O.left,y,width:S.width,slotWidth:C,text:S.text,columnIndex:b,flushToRight:O.right<v-.5}),u=S.end}if(k){y+=a;continue}if(y+=s,u.segmentIndex>=t.length)break e}if(u.segmentIndex>=t.length)break}return{lines:l,cursor:u}}function es(t){let{adapter:e,name:n="reactive-flow-layout",minSlotWidth:r=20}=t,s=new oe(n),o=new Map,i=G(t.text??"",{name:"text"}),a=G(t.font??"16px sans-serif",{name:"font"}),l=G(t.lineHeight??20,{name:"line-height"}),u=G(t.container??{width:800,height:600,paddingX:0,paddingY:0},{name:"container"}),c=G(t.columns??{count:1,gap:0},{name:"columns"}),f=G(t.obstacles??[],{name:"obstacles"}),p=G(t.paragraphSpacing??null,{name:"paragraph-spacing"}),h=re([i,a],(g,b,x)=>{let v=g[0],y=v!=null&&v.length>0?v.at(-1):x.prevData[0],_=g[1],m=_!=null&&_.length>0?_.at(-1):x.prevData[1],w=we(y,m,e,o);b.emit(w);let k=()=>{o.clear(),e.clearCache?.()};return{deactivate:k,invalidate:k}},{name:"segments",describeKind:"derived"}),d=q([h,u,c,f,l,p],([g,b,x,v,y,_])=>{let m=g,w=F(),k=_??y,{lines:T,cursor:O}=Rn(m,b,x,v,y,r,{paragraphSpacing:k}),C=F()-w,S=Math.max(0,m.length-O.segmentIndex),E=d.meta;return E&&(ee(E["line-count"],T.length),ee(E["layout-time-ns"],C),ee(E["overflow-segments"],S)),T},{name:"flow-lines",meta:{"line-count":0,"layout-time-ns":0,"overflow-segments":0},equals:(g,b)=>{let x=g,v=b;if(x.length!==v.length)return!1;for(let y=0;y<x.length;y++){let _=x[y],m=v[y];if(_.x!==m.x||_.y!==m.y||_.width!==m.width||_.slotWidth!==m.slotWidth||_.text!==m.text||_.columnIndex!==m.columnIndex||_.flushToRight!==m.flushToRight)return!1}return!0}});return s.add(i,{name:"text"}),s.add(a,{name:"font"}),s.add(l,{name:"line-height"}),s.add(u,{name:"container"}),s.add(c,{name:"columns"}),s.add(f,{name:"obstacles"}),s.add(p,{name:"paragraph-spacing"}),s.add(h,{name:"segments"}),s.add(d,{name:"flow-lines"}),{graph:s,setText:g=>s.set("text",g),setFont:g=>s.set("font",g),setLineHeight:g=>s.set("line-height",g),setContainer:g=>s.set("container",g),setColumns:g=>s.set("columns",g),setObstacles:g=>s.set("obstacles",g),setParagraphSpacing:g=>s.set("paragraph-spacing",g),segments:h,flowLines:d}}0&&(module.exports={CanvasMeasureAdapter,CliMeasureAdapter,ImageSizeAdapter,NodeCanvasMeasureAdapter,PrecomputedAdapter,SvgBoundsAdapter,analyzeAndMeasure,carveTextLineSlots,circleIntervalForBand,computeBlockFlow,computeCharPositions,computeFlowLines,computeLineBreaks,computeTotalHeight,layoutNextLine,measureBlock,measureBlocks,reactiveBlockLayout,reactiveFlowLayout,reactiveLayout,rectIntervalForBand});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { B as BlockAdapters, C as CanvasMeasureAdapter, a as CanvasMeasureAdapterOptions, b as CanvasModule, c as CircleObstacle, d as CliMeasureAdapter, e as CliMeasureAdapterOptions, f as ComputeFlowLinesOptions, g as ContentBlock, F as FlowColumns, h as FlowContainer, j as FlowLinesResult, I as ImageMeasurer, k as ImageSizeAdapter, M as MeasuredBlock, N as NodeCanvasMeasureAdapter, O as Obstacle, P as PositionedBlock, l as PositionedLine, m as PrecomputedAdapter, n as PrecomputedAdapterOptions, R as ReactiveBlockLayoutBundle, o as ReactiveBlockLayoutOptions, p as ReactiveFlowLayoutBundle, q as ReactiveFlowLayoutOptions, r as RectObstacle, S as SvgBoundsAdapter, s as SvgMeasurer, t as circleIntervalForBand, u as computeBlockFlow, v as computeFlowLines, w as computeTotalHeight, x as measureBlock, y as measureBlocks, z as reactiveBlockLayout, A as reactiveFlowLayout, D as rectIntervalForBand } from '../../index-
|
|
2
|
-
export { C as CharPosition, I as Interval, a as LayoutCursor, b as LayoutLine, c as LayoutNextLineContext, d as LayoutNextLineResult, L as LineBreaksResult, M as MeasurementAdapter, P as PreparedSegment, R as ReactiveLayoutBundle, e as ReactiveLayoutOptions, S as SegmentBreakKind, f as SegmentMeasureStats, g as analyzeAndMeasure, h as carveTextLineSlots, i as computeCharPositions, j as computeLineBreaks, l as layoutNextLine, r as reactiveLayout } from '../../reactive-layout-
|
|
1
|
+
export { B as BlockAdapters, C as CanvasMeasureAdapter, a as CanvasMeasureAdapterOptions, b as CanvasModule, c as CircleObstacle, d as CliMeasureAdapter, e as CliMeasureAdapterOptions, f as ComputeFlowLinesOptions, g as ContentBlock, F as FlowColumns, h as FlowContainer, j as FlowLinesResult, I as ImageMeasurer, k as ImageSizeAdapter, M as MeasuredBlock, N as NodeCanvasMeasureAdapter, O as Obstacle, P as PositionedBlock, l as PositionedLine, m as PrecomputedAdapter, n as PrecomputedAdapterOptions, R as ReactiveBlockLayoutBundle, o as ReactiveBlockLayoutOptions, p as ReactiveFlowLayoutBundle, q as ReactiveFlowLayoutOptions, r as RectObstacle, S as SvgBoundsAdapter, s as SvgMeasurer, t as circleIntervalForBand, u as computeBlockFlow, v as computeFlowLines, w as computeTotalHeight, x as measureBlock, y as measureBlocks, z as reactiveBlockLayout, A as reactiveFlowLayout, D as rectIntervalForBand } from '../../index-C-Gsh-0a.cjs';
|
|
2
|
+
export { C as CharPosition, I as Interval, a as LayoutCursor, b as LayoutLine, c as LayoutNextLineContext, d as LayoutNextLineResult, L as LineBreaksResult, M as MeasurementAdapter, P as PreparedSegment, R as ReactiveLayoutBundle, e as ReactiveLayoutOptions, S as SegmentBreakKind, f as SegmentMeasureStats, g as analyzeAndMeasure, h as carveTextLineSlots, i as computeCharPositions, j as computeLineBreaks, l as layoutNextLine, r as reactiveLayout } from '../../reactive-layout-Dhhe54Oj.cjs';
|
|
3
3
|
import '../../node-BVV7G1bq.cjs';
|
|
4
|
-
import '../../graph-
|
|
4
|
+
import '../../graph-CdJeX7O7.cjs';
|
|
5
5
|
import '../../meta-COtmHLwT.cjs';
|
|
6
6
|
import '../../extra/storage-core.cjs';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { B as BlockAdapters, C as CanvasMeasureAdapter, a as CanvasMeasureAdapterOptions, b as CanvasModule, c as CircleObstacle, d as CliMeasureAdapter, e as CliMeasureAdapterOptions, f as ComputeFlowLinesOptions, g as ContentBlock, F as FlowColumns, h as FlowContainer, j as FlowLinesResult, I as ImageMeasurer, k as ImageSizeAdapter, M as MeasuredBlock, N as NodeCanvasMeasureAdapter, O as Obstacle, P as PositionedBlock, l as PositionedLine, m as PrecomputedAdapter, n as PrecomputedAdapterOptions, R as ReactiveBlockLayoutBundle, o as ReactiveBlockLayoutOptions, p as ReactiveFlowLayoutBundle, q as ReactiveFlowLayoutOptions, r as RectObstacle, S as SvgBoundsAdapter, s as SvgMeasurer, t as circleIntervalForBand, u as computeBlockFlow, v as computeFlowLines, w as computeTotalHeight, x as measureBlock, y as measureBlocks, z as reactiveBlockLayout, A as reactiveFlowLayout, D as rectIntervalForBand } from '../../index-
|
|
2
|
-
export { C as CharPosition, I as Interval, a as LayoutCursor, b as LayoutLine, c as LayoutNextLineContext, d as LayoutNextLineResult, L as LineBreaksResult, M as MeasurementAdapter, P as PreparedSegment, R as ReactiveLayoutBundle, e as ReactiveLayoutOptions, S as SegmentBreakKind, f as SegmentMeasureStats, g as analyzeAndMeasure, h as carveTextLineSlots, i as computeCharPositions, j as computeLineBreaks, l as layoutNextLine, r as reactiveLayout } from '../../reactive-layout-
|
|
1
|
+
export { B as BlockAdapters, C as CanvasMeasureAdapter, a as CanvasMeasureAdapterOptions, b as CanvasModule, c as CircleObstacle, d as CliMeasureAdapter, e as CliMeasureAdapterOptions, f as ComputeFlowLinesOptions, g as ContentBlock, F as FlowColumns, h as FlowContainer, j as FlowLinesResult, I as ImageMeasurer, k as ImageSizeAdapter, M as MeasuredBlock, N as NodeCanvasMeasureAdapter, O as Obstacle, P as PositionedBlock, l as PositionedLine, m as PrecomputedAdapter, n as PrecomputedAdapterOptions, R as ReactiveBlockLayoutBundle, o as ReactiveBlockLayoutOptions, p as ReactiveFlowLayoutBundle, q as ReactiveFlowLayoutOptions, r as RectObstacle, S as SvgBoundsAdapter, s as SvgMeasurer, t as circleIntervalForBand, u as computeBlockFlow, v as computeFlowLines, w as computeTotalHeight, x as measureBlock, y as measureBlocks, z as reactiveBlockLayout, A as reactiveFlowLayout, D as rectIntervalForBand } from '../../index-C9qCLIN4.js';
|
|
2
|
+
export { C as CharPosition, I as Interval, a as LayoutCursor, b as LayoutLine, c as LayoutNextLineContext, d as LayoutNextLineResult, L as LineBreaksResult, M as MeasurementAdapter, P as PreparedSegment, R as ReactiveLayoutBundle, e as ReactiveLayoutOptions, S as SegmentBreakKind, f as SegmentMeasureStats, g as analyzeAndMeasure, h as carveTextLineSlots, i as computeCharPositions, j as computeLineBreaks, l as layoutNextLine, r as reactiveLayout } from '../../reactive-layout-Bq0rA2Wb.js';
|
|
3
3
|
import '../../node-BVV7G1bq.js';
|
|
4
|
-
import '../../graph-
|
|
4
|
+
import '../../graph-BOhEGJ6E.js';
|
|
5
5
|
import '../../meta-BMwx3ExI.js';
|
|
6
6
|
import '../../extra/storage-core.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as g,b as h,c as i,d as j,e as k,f as l,g as m,h as n,i as o,j as p,k as q,l as r,m as s,n as t,o as u}from"../../chunk-
|
|
1
|
+
import{a as g,b as h,c as i,d as j,e as k,f as l,g as m,h as n,i as o,j as p,k as q,l as r,m as s,n as t,o as u}from"../../chunk-M2VFLRPJ.js";import{a,b,c,d,e,f}from"../../chunk-X4OOM6QU.js";import"../../chunk-K54OKWNY.js";import"../../chunk-4JBKKUCJ.js";import"../../chunk-SGS4OJGS.js";import"../../chunk-ESMPEKEV.js";import"../../chunk-N2KKISCE.js";import"../../chunk-UMH3HSP7.js";import"../../chunk-7AJKUA36.js";import"../../chunk-CK2E7BTU.js";import"../../chunk-QYADASLV.js";export{i as CanvasMeasureAdapter,g as CliMeasureAdapter,l as ImageSizeAdapter,j as NodeCanvasMeasureAdapter,h as PrecomputedAdapter,k as SvgBoundsAdapter,a as analyzeAndMeasure,d as carveTextLineSlots,r as circleIntervalForBand,o as computeBlockFlow,e as computeCharPositions,t as computeFlowLines,b as computeLineBreaks,p as computeTotalHeight,c as layoutNextLine,m as measureBlock,n as measureBlocks,q as reactiveBlockLayout,u as reactiveFlowLayout,f as reactiveLayout,s as rectIntervalForBand};
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
`)}function on(t){if(t.version!==ye)throw new Error(`unsupported snapshot version ${String(t.version)} (expected ${ye})`);for(let e of["name","nodes","edges","subgraphs"])if(!(e in t))throw new Error(`snapshot missing required key "${e}"`);if(typeof t.name!="string")throw new TypeError("snapshot 'name' must be a string");if(typeof t.nodes!="object"||t.nodes===null||Array.isArray(t.nodes))throw new TypeError("snapshot 'nodes' must be an object");if(!Array.isArray(t.edges))throw new TypeError("snapshot 'edges' must be an array");if(!Array.isArray(t.subgraphs))throw new TypeError("snapshot 'subgraphs' must be an array")}function lr(t,e){let n=new WeakMap,r=(o,s)=>{if(Object.is(o,s))return!0;if(o==null||s==null||typeof o!="object"||typeof s!="object")return!1;let i=n.get(o);if(i==null&&(i=new WeakSet,n.set(o,i)),i.has(s))return!0;i.add(s);let a=o.constructor,d=s.constructor;if(a!==d)return!1;if(o instanceof Date)return o.getTime()===s.getTime();if(o instanceof RegExp)return o.source===s.source&&o.flags===s.flags;if(Array.isArray(o)){let p=s;if(o.length!==p.length)return!1;for(let f=0;f<o.length;f++)if(!r(o[f],p[f]))return!1;return!0}if(o instanceof Map){let p=s;if(o.size!==p.size)return!1;for(let[f,l]of o)if(!p.has(f)||!r(l,p.get(f)))return!1;return!0}if(o instanceof Set){let p=s;if(o.size!==p.size)return!1;for(let f of o){let l=!1;for(let g of p)if(r(f,g)){l=!0;break}if(!l)return!1}return!0}if(ArrayBuffer.isView(o)){let p=o,f=s;if(p.length!==f.length)return!1;for(let l=0;l<p.length;l++)if(p[l]!==f[l])return!1;return!0}let u=Object.keys(o),c=Object.keys(s);if(u.length!==c.length)return!1;let h=new Set(c);for(let p of u)if(!h.has(p)||!r(o[p],s[p]))return!1;return!0};return r(t,e)}function bt(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(bt);let e=t,n=Object.keys(e).sort(),r={};for(let o of n)r[o]=bt(e[o]);return r}function cr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function fr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function pr(t){return t==="TD"?"down":t==="BT"?"up":t==="RL"?"left":"right"}function un(t){let e=new Set,n=[];function r(o,s){let i=`${o}\0${s}`;e.has(i)||(e.add(i),n.push([o,s]))}for(let[o,s]of Object.entries(t.nodes)){let i=s.deps;if(i)for(let a of i)r(a,o)}for(let o of t.edges)r(o.from,o.to);return n}function dn(t){if(t===void 0)return"LR";if(t==="TD"||t==="LR"||t==="BT"||t==="RL")return t;throw new Error(`invalid diagram direction ${String(t)}; expected one of: TD, LR, BT, RL`)}function hr(t,e){let n=e.includeEdges??!0,r=e.includeSubgraphs??!0,{expand:o,...s}=t,i={...s,edges:n?t.edges:[],subgraphs:r?t.subgraphs:[]},a=JSON.stringify(bt(i),null,e.indent??2);return e.logger?.(a),a}function gr(t,e){let n=e.includeEdges??!0,r=e.includeSubgraphs??!0,o=[];o.push(`Graph ${t.name}`),o.push("Nodes:");for(let i of Object.keys(t.nodes).sort()){let a=t.nodes[i];o.push(`- ${i} (${a.type}/${a.status}): ${Ue(a.value)}`)}if(n){o.push("Edges:");for(let i of t.edges)o.push(`- ${i.from} -> ${i.to}`)}if(r){o.push("Subgraphs:");for(let i of t.subgraphs)o.push(`- ${i}`)}let s=o.join(`
|
|
5
5
|
`);return e.logger?.(s),s}function ln(t,e){let n=dn(e.direction),r=Object.keys(t.nodes).sort(),o=new Map;for(let i=0;i<r.length;i+=1)o.set(r[i],`n${i}`);let s=[`flowchart ${n}`];for(let i of r){let a=o.get(i);s.push(` ${a}["${cr(i)}"]`)}for(let[i,a]of un(t)){let d=o.get(i),u=o.get(a);!d||!u||s.push(` ${d} --> ${u}`)}return s.join(`
|
|
6
6
|
`)}function mr(t,e){let n=ln(t,e);return br(n)}function br(t,e){let n=e?.theme??"default",r=e?.autoSync??!0,s=JSON.stringify({code:t,mermaid:{theme:n},autoSync:r}),i=new TextEncoder().encode(s),a="";for(let u=0;u<i.length;u++)a+=String.fromCharCode(i[u]);return`https://mermaid.live/edit#base64:${globalThis.btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}`}function yr(t,e){let n=dn(e.direction),r=Object.keys(t.nodes).sort(),o=new Map;for(let i=0;i<r.length;i+=1)o.set(r[i],`n${i}`);let s=[`direction: ${pr(n)}`];for(let i of r){let a=o.get(i);s.push(`${a}: "${fr(i)}"`)}for(let[i,a]of un(t)){let d=o.get(i),u=o.get(a);!d||!u||s.push(`${d} -> ${u}`)}return s.join(`
|
|
7
|
-
`)}function vr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ke(t){let e="^";for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="*"){e+=".*";continue}if(r==="?"){e+=".";continue}if(r==="["){let o=t.indexOf("]",n+1);if(o<=n+1){e+="\\[";continue}let s=t.slice(n+1,o);s.startsWith("!")&&(s=`^${s.slice(1)}`),s=s.replace(/\\/g,"\\\\"),e+=`[${s}]`,n=o;continue}e+=vr(r)}return e+="$",new RegExp(e)}var wr={data:"\x1B[32m",dirty:"\x1B[33m",resolved:"\x1B[36m",invalidate:"\x1B[93m",pause:"\x1B[90m",resume:"\x1B[96m",complete:"\x1B[34m",error:"\x1B[31m",teardown:"\x1B[91m",derived:"\x1B[35m",path:"\x1B[90m",reset:"\x1B[0m"},_r={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ue(t){if(typeof t=="string")return JSON.stringify(t);if(typeof t=="number"||typeof t=="boolean"||t==null)return String(t);try{return JSON.stringify(t)}catch{return"[unserializable]"}}function xr(t){return t==="none"?_r:t==="ansi"||t==null?wr:{data:t.data??"",dirty:t.dirty??"",resolved:t.resolved??"",invalidate:t.invalidate??"",pause:t.pause??"",resume:t.resume??"",complete:t.complete??"",error:t.error??"",teardown:t.teardown??"",derived:t.derived??"",path:t.path??"",reset:t.reset??""}}function sn(t){if(t==null)return{};let e=t.detail;return e==="full"?{...t,structured:t.structured??!0,timeline:t.timeline??!0,causal:t.causal??!0,derived:t.derived??!0}:e==="minimal"?{...t,structured:t.structured??!0}:t.format==="stage-log"?{...t,structured:t.structured??!0,timeline:t.timeline??!0}:t}function Tr(t,e,n){for(let r=0;r<t.length;r++){let o=t.charCodeAt(r);if(o<32||o===127)throw new Error(`Graph "${e}": ${n} "${t}" must not contain control character (U+${o.toString(16).padStart(4,"0").toUpperCase()} at index ${r})`)}}function mt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(I))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${I}' (path separator)`);if(t===ee)throw new Error(`Graph "${e}": ${n} name "${ee}" is reserved for meta companion paths`);Tr(t,e,n)}function Nr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(I);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function Or(t,e){let n=!1;for(let o of t)if(!e.isMetaPassthrough(o[0])){n=!0;break}return n?t.filter(o=>e.isMetaPassthrough(o[0])):t}function cn(t){for(let e of t._mounts.values())cn(e);for(let e of t._nodes.values())try{e.down([[j]],{internal:!0})}catch{}}var ve=class t{name;opts;config;_nodes=new Map;_nodeToName=new WeakMap;_mounts=new Map;_parent=void 0;_storageDisposers=new Set;_disposers=new Set;_topology;_topologyEmitters=new Set;constructor(e,n){if(e==="")throw new Error("Graph name must be non-empty");if(e.includes(I))throw new Error(`Graph name must not contain '${I}' (got "${e}")`);if(e===ee)throw new Error(`Graph name "${ee}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??me,this._traceRing=new ke(n?.traceCapacity??1e3),n?.versioning!=null&&this.setVersioning(n.versioning)}ancestors(e=!0){let n=[],r=e?this:this._parent;for(;r!=null;)n.push(r),r=r._parent;return n}get topology(){return this._topology==null&&(this._topology=Oe(e=>{let n=r=>{e.emit(r)};return this._topologyEmitters.add(n),()=>{this._topologyEmitters.delete(n)}},{name:`${this.name}_topology`})),this._topology}_emitTopology(e){if(!(this._topology==null||this._topologyEmitters.size===0))for(let n of this._topologyEmitters)n(e)}add(e,n){let r=e.name,o=n?.name??r;if(o==null||o==="")throw new Error(`Graph "${this.name}": graph.add requires a non-empty name \u2014 pass via opts.name or set it on the node (e.g. state(0, { name: "x" }))`);let s=o,i=n?.annotation;if(mt(s,this.name,"add"),this._mounts.has(s))throw new Error(`Graph "${this.name}": name "${s}" is already a mount point`);if(this._nodes.has(s))throw new Error(`Graph "${this.name}": node "${s}" already exists`);let a=this._nodeToName.get(e);if(a!==void 0)throw new Error(`Graph "${this.name}": node instance already registered as "${a}"`);return this._nodes.set(s,e),this._nodeToName.set(e,s),this._emitTopology({kind:"added",name:s,nodeKind:"node"}),i!=null&&(this._annotations.set(s,i),this.config.inspectorEnabled&&this._traceRing.push({path:s,annotation:i,timestamp_ns:Q()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof P&&n._applyVersioning(e)}remove(e){mt(e,this.name,"remove");let n=this._mounts.get(e);if(n){let s={kind:"mount",nodes:[],mounts:[]},i=[];n._collectObserveTargets("",i);for(let[a,d]of i)a.includes(`${I}${ee}${I}`)||s.nodes.push(a);return s.nodes.sort(),s.mounts.push(e),s.mounts.push(...n._collectSubgraphs(`${e}${I}`)),this._mounts.delete(e),n._parent=void 0,cn(n),this._emitTopology({kind:"removed",name:e,nodeKind:"mount",audit:s}),s}let r=this._nodes.get(e);if(!r)throw new Error(`Graph "${this.name}": unknown node or mount "${e}"`);this._nodes.delete(e),this._nodeToName.delete(r),r.down([[j]],{internal:!0});let o={kind:"node",nodes:[e],mounts:[]};return this._emitTopology({kind:"removed",name:e,nodeKind:"node",audit:o}),o}removeAll(e){let n=typeof e=="function"?e:(()=>{let s=Ke(e);return i=>s.test(i)})(),r={kind:"mount",nodes:[],mounts:[]},o=[...this._nodes.keys(),...this._mounts.keys()].filter(s=>n(s));for(let s of o){let i=this.remove(s);r.nodes.push(...i.nodes),r.mounts.push(...i.mounts)}return r.nodes.sort(),r.mounts.sort(),r}[Symbol.iterator](){let e=[...this._nodes.keys()].sort(),n=this._nodes,r=0;return{[Symbol.iterator](){return this},next(){if(r>=e.length)return{value:void 0,done:!0};let o=e[r++];return{value:[o,n.get(o)],done:!1}}}}node(e){if(e==="")throw new Error(`Graph "${this.name}": node name must be non-empty`);if(e.includes(I))return this.resolve(e);let n=this._nodes.get(e);if(!n)throw new Error(`Graph "${this.name}": unknown node "${e}"`);return n}get(e){return this.node(e).cache}set(e,n,r){let o=r?.internal===!0;this.node(e).down([[C,n]],{actor:r?.actor,internal:o,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);fe(()=>{for(let[o,s]of r)this.set(o,s,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[X]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let o=r?.internal===!0;this.node(e).down([[M,n]],{actor:r?.actor,internal:o,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[V]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[d,u]of this._nodes)r.set(u,d);let a=[];for(let[d,u]of this._nodes)if(u instanceof P)for(let c of u._deps){let h=r.get(c.node);h!=null&&a.push([h,d])}return a.sort((d,u)=>d[0]<u[0]?-1:d[0]>u[0]?1:d[1]<u[1]?-1:d[1]>u[1]?1:0),a}let o=[];this._collectObserveTargets("",o);let s=new Map;for(let[a,d]of o)s.set(d,a);let i=[];for(let[a,d]of o)if(d instanceof P)for(let u of d._deps){let c=s.get(u.node);c!=null&&i.push([c,a])}return i.sort((a,d)=>a[0]<d[0]?-1:a[0]>d[0]?1:a[1]<d[1]?-1:a[1]>d[1]?1:0),i}mount(e,n){if(mt(e,this.name,"mount"),this._nodes.has(e))throw new Error(`Graph "${this.name}": cannot mount at "${e}" \u2014 node with that name exists`);if(this._mounts.has(e))throw new Error(`Graph "${this.name}": mount "${e}" already exists`);if(n===this)throw new Error(`Graph "${this.name}": cannot mount a graph into itself`);if(n._parent!=null)throw new Error(`Graph "${this.name}": this child graph is already mounted on "${n._parent.name}"`);for(let r=this;r!=null;r=r._parent)if(r===n)throw new Error(`Graph "${this.name}": mount("${e}", \u2026) would create a mount cycle`);return this._mounts.set(e,n),n._parent=this,this._emitTopology({kind:"added",name:e,nodeKind:"mount"}),n}resolve(e){let n=Nr(e,this.name);return this._resolveFromSegments(n)}tryResolve(e){try{return this.resolve(e)}catch{return}}_resolveFromSegments(e){let n=e;if(n[0]===this.name&&(n=n.slice(1),n.length===0))throw new Error(`Graph "${this.name}": resolve path ends at graph name only`);let r=n[0],o=n.slice(1);if(o.length===0){let a=this._nodes.get(r);if(a)return a;throw this._mounts.has(r)?new Error(`Graph "${this.name}": path ends at subgraph "${r}" \u2014 not a node (GRAPHREFLY-SPEC \xA73.5)`):new Error(`Graph "${this.name}": unknown name "${r}"`)}let s=this._nodes.get(r);if(s&&o.length>0&&o[0]===ee)return this._resolveMetaChainFromNode(s,o,n.join(I));let i=this._mounts.get(r);if(!i)throw this._nodes.has(r)?new Error(`Graph "${this.name}": "${r}" is a node; trailing path "${o.join(I)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(o.join(I))}_resolveMetaChainFromNode(e,n,r){let o=e,s=0,i=[...n];for(;s<i.length;){if(i[s]!==ee)throw new Error(`Graph "${this.name}": expected ${ee} segment in meta path "${r}"`);if(s+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${ee} in "${r}"`);let a=i[s+1],d=o.meta[a];if(!d)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);o=d,s+=2}return o}signal(e,n){if(n?.internal!==!0){for(let o of e)if(this.config.messageTier(o[0])===3)throw new Error(`Graph "${this.name}": Graph.signal() rejects tier-3 messages (DATA / RESOLVED). Broadcast is for control-plane tiers (START / DIRTY / INVALIDATE / PAUSE / RESUME / COMPLETE / ERROR / TEARDOWN). For per-node value writes, use Graph.set or graph.node(name).down(...).`)}let r=[];if(this._signalDeliver(e,n??{},new Set,r),r.length>0)throw r[0]}_signalDeliver(e,n,r,o){for(let d of this._mounts.values())d._signalDeliver(e,n,r,o);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=Or(e,this.config);for(let d of[...this._nodes.keys()].sort()){let u=this._nodes.get(d);if(!r.has(u)){r.add(u);try{u.down(e,i)}catch(c){if(c instanceof Y)throw c;o.push(c)}a.length!==0&&this._signalMetaSubtree(u,a,r,i,o)}}}_signalMetaSubtree(e,n,r,o,s){for(let i of Object.keys(e.meta).sort()){let a=e.meta[i];if(!r.has(a)){r.add(a);try{a.down(n,o)}catch(d){if(d instanceof Y)throw d;s.push(d)}this._signalMetaSubtree(a,n,r,o,s)}}}describe(e){if(e?.reactive===!0)return this._describeReactive(e);let n=e?.actor,r=e?.filter,o=Pe(e?.detail,e?.fields),s=e?.format==="spec",i=s?Pe("minimal"):o,a=[];this._collectObserveTargets("",a);let d=new Map;for(let[_,x]of a)d.set(x,_);let u=[];{let _=a.map(([,E])=>E),x=new Set(d.values()),N=0;for(;_.length>0;){let E=_.shift();if(E instanceof P)for(let D of E._deps){let k=D.node;if(d.has(k))continue;let S=k.name??"",R=S;if(!R||x.has(R))if(S){let L=2;for(;x.has(`${S}#${L}`);)L++;R=`${S}#${L}`}else for(R=`__internal__/${N++}`;x.has(R);)R=`__internal__/${N++}`;d.set(k,R),x.add(R),u.push([R,k]),_.push(k)}}}let c=[...a,...u],h={};for(let[_,x]of c){if(n!=null&&!x.allowsObserve(n))continue;let N=ht(x,i),E=x instanceof P?x._deps.map(R=>d.get(R.node)??R.node.name??""):[],{name:D,...k}=N,S={...k,deps:E};if(!s){let R=this._annotations.get(_);R!=null&&(S.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(_,S):R(S)))continue}else{let R=!0;for(let[L,z]of Object.entries(r)){let J=L==="deps_includes"?"depsIncludes":L==="meta_has"?"metaHas":L;if(J==="depsIncludes"){if(!S.deps.includes(String(z))){R=!1;break}continue}if(J==="metaHas"){if(!Object.hasOwn(S.meta??{},String(z))){R=!1;break}continue}if(S[J]!==z){R=!1;break}}if(!R)continue}h[_]=S}let p=new Set(Object.keys(h)),f=[];for(let[_,x]of c)if(x instanceof P)for(let N of x._deps){let E=d.get(N.node);E!=null&&f.push([E,_])}f.sort((_,x)=>_[0]<x[0]?-1:_[0]>x[0]?1:_[1]<x[1]?-1:_[1]>x[1]?1:0);let l=f.map(([_,x])=>({from:_,to:x}));(n!=null||r!=null)&&(l=l.filter(_=>p.has(_.from)&&p.has(_.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(_=>{let x=`${_}${I}`;return[...p].some(N=>N===_||N.startsWith(x))}):g,b=this,v=e,y={name:this.name,nodes:h,edges:l,subgraphs:m,expand(_){let x={...v,format:void 0};return Array.isArray(_)?(x.fields=_,x.detail=void 0):(x.detail=_,x.fields=void 0),b.describe(x)}},w=e??{},T=w.format;return T==="json"?hr(y,w):T==="pretty"?gr(y,w):T==="mermaid"?ln(y,w):T==="mermaid-url"?mr(y,w):T==="d2"?yr(y,w):T==="ascii"?Jt(y,w):y}_collectSubgraphs(e){let n=[];for(let r of[...this._mounts.keys()].sort()){let o=e===""?r:`${e}${r}`;n.push(o),n.push(...this._mounts.get(r)._collectSubgraphs(`${o}${I}`))}return n}resourceProfile(e){return nn(this,e)}reachable(e,n,r={}){return r.withDetail===!0?an(this.describe(),e,n,{...r,withDetail:!0}):an(this.describe(),e,n,r)}explain(e,n,r){return r?.reactive===!0?this._explainReactive(e,n,r):this._explainStatic(e,n,r)}_explainStatic(e,n,r){let o=this.describe({detail:"full"}),s=new Map(this._annotations),i=new Map;for(let[a,d]of Object.entries(o.nodes))d.lastMutation!=null&&i.set(a,d.lastMutation);return Xt(o,e,n,{...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{},annotations:s,lastMutations:i})}_describeReactive(e){let n={...e,reactive:!1},r=e.reactiveName??"describe",o=0,s=re(o,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=()=>{a||d||(a=!0,Te(()=>{a=!1,!d&&(o+=1,s.emit(o))}))},c=i.onEvent(m=>{let b=m.type;b!=="data"&&b!=="error"&&b!=="complete"&&b!=="teardown"||u()}),h=[],p=new WeakSet,f=m=>{if(p.has(m)||d)return;p.add(m);let b=m.topology.subscribe(v=>{for(let y of v){if(y[0]!==C)continue;let w=y[1];if(u(),w.kind==="added"&&w.nodeKind==="mount"){let T=m._mounts.get(w.name);T!=null&&f(T)}}});h.push(b);for(let v of m._mounts.keys()){let y=m._mounts.get(v);y!=null&&f(y)}};f(this);let l;try{l=de([s],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,b)=>m===b})}catch(m){c();for(let b of h)b();throw i.dispose(),m}let g=oe(l);return{node:l,dispose(){d=!0,c();for(let m of h)m();h.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let o=0,s=re(o,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=i.onEvent(f=>{let l=f.type;l!=="data"&&l!=="error"&&l!=="complete"&&l!=="teardown"||a||d||(a=!0,Te(()=>{a=!1,!d&&(o+=1,s.emit(o))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},h;try{h=de([s],()=>this._explainStatic(e,n,c),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(f,l)=>f.found===l.found&&f.reason===l.reason&&f.steps.length===l.steps.length&&kr(f.steps,l.steps)})}catch(f){throw u(),i.dispose(),f}let p=oe(h);return{node:h,dispose(){d=!0,u(),i.dispose(),p()}}}_pathsMatching(e){let n=Ke(e),r=[];return this._collectObserveTargets("",r),r.map(([o])=>o).filter(o=>n.test(o))}_collectObserveTargets(e,n){for(let r of[...this._mounts.keys()].sort()){let o=e===""?r:`${e}${I}${r}`;this._mounts.get(r)._collectObserveTargets(o,n)}for(let r of[...this._nodes.keys()].sort()){let o=this._nodes.get(r),s=e===""?r:`${e}${I}${r}`;n.push([s,o]),this._appendMetaObserveTargets(s,o,n)}}_appendMetaObserveTargets(e,n,r){for(let o of Object.keys(n.meta).sort()){let s=n.meta[o],i=`${e}${I}${ee}${I}${o}`;r.push([i,s]),this._appendMetaObserveTargets(i,s,r)}}observe(e,n){let r=typeof e=="string",s=sn(r?n:e),i=s.structured===!0||s.timeline===!0||s.causal===!0||s.derived===!0||s.detail==="minimal"||s.detail==="full"||s.format!=null,a=s.actor;if(r){let c=e,h=this.resolve(c);if(a!=null&&!h.allowsObserve(a))throw new Y({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,h]],s,"one"):{subscribe(p){return h.subscribe(p)},up(p){try{h.up?.(p)}catch(f){if(f instanceof Y)return;throw f}}}}let d=[];this._collectObserveTargets("",d),d.sort((c,h)=>c[0]<h[0]?-1:c[0]>h[0]?1:0);let u=a==null?d:d.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,s,"all"):{subscribe:c=>{let h=u.map(([p,f])=>f.subscribe(l=>{c(p,l)}));return()=>{for(let p of h)p()}},up:(c,h)=>{try{this.resolve(c).up?.(h)}catch(p){if(p instanceof Y)return;throw p}}}}_buildStructuredObserver(e,n,r){let o=r==="one"?e[0]?.[0]:void 0,s=i=>{if(r==="one"&&o!=null){let c=this.resolve(o);return this._buildStructuredObserver([[o,c]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((c,h)=>c[0]<h[0]?-1:c[0]>h[0]?1:0);let d=i.actor,u=d==null?a:a.filter(([,c])=>c.allowsObserve(d));return this._buildStructuredObserver(u,i,"all")};return this._createObserveResult(e,n,s)}_createObserveResult(e,n,r){let o=n.timeline===!0,s=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",d=this.config.inspectorEnabled,u=(s||i)&&d,c=n.maxEvents,h=c!=null&&c>0?new ke(c):null,p=[],f=new Set,l={},g=new Set,m=0,b=0,v=0,y=0,w=0,T=0,_=!1,x=!1,N=0,E=new Map,D=new Map,k=new Map,S=O=>{h?h.push(O):p.push(O);for(let G of f)G(O)},R=()=>o?{timestamp_ns:Q(),in_batch:Se(),batch_id:N}:{},L=(O,G)=>{if(!(!u||!(O instanceof P)))return O._setInspectorHook(U=>{if(U.kind==="dep_message")E.set(O,U.depIndex);else if(U.kind==="run"){let we=U.batchData.map((A,H)=>A!=null&&A.length>0?A.at(-1):U.prevData[H]);D.set(O,we);let W=U.batchData.map(A=>A!=null?[...A]:void 0);k.set(O,W),i&&S({type:"derived",path:G,dep_values:we,dep_batches:W,...R()})}})},z=O=>{let G=E.get(O),U=D.get(O);if(!s||U==null)return{};let W=(G!=null&&G>=0&&O instanceof P?O._deps[G]:void 0)?.node,A=W?.v,H=k.get(O);return{trigger_dep_index:G,trigger_dep_name:W?.name,...A!=null?{trigger_version:{id:A.id,version:A.version}}:{},dep_values:[...U],...H!=null?{dep_batches:H}:{}}},J=[],ie=[];for(let[O,G]of e){let U=L(G,O);U&&J.push(U),ie.push(G.subscribe(we=>{N++;for(let W of we){let A=W[0],H=R();if(A===C){l[O]=W[1];let Xe=G instanceof P?G.lastMutation?.actor??ge:ge;S({type:"data",path:O,data:W[1],actor:Xe,...H,...z(G)})}else if(a)A===F?m++:A===B?b++:A===X?v++:A===K?y++:A===Z?w++:A===j?T++:A===V&&!g.has(O)?_=!0:A===M&&(x=!0,g.add(O));else if(A===F)m++,S({type:"dirty",path:O,...H});else if(A===B)b++,S({type:"resolved",path:O,...H,...z(G)});else if(A===X)v++,S({type:"invalidate",path:O,...H});else if(A===K)y++,S({type:"pause",path:O,lockId:W[1],...H});else if(A===Z)w++,S({type:"resume",path:O,lockId:W[1],...H});else if(A===V)g.has(O)||(_=!0),S({type:"complete",path:O,...H});else if(A===M){x=!0,g.add(O);let Xe=G instanceof P?G.lastMutation?.actor??ge:ge;S({type:"error",path:O,data:W[1],actor:Xe,...H})}else A===j&&(T++,S({type:"teardown",path:O,...H}))}}))}let qe=!1,Ye=()=>{if(!qe){qe=!0;for(let O of ie)O();for(let O of J)O();for(let O of Re)O({value:void 0,done:!0});Re.length=0}},Je=[],Re=[];f.add(O=>{let G=Re.shift();G?G({value:O,done:!1}):Je.push(O)});let yt={get values(){return l},get dirtyCount(){return m},get resolvedCount(){return b},get invalidateCount(){return v},get pauseCount(){return y},get resumeCount(){return w},get teardownCount(){return T},get events(){return h?h.toArray():[...p]},get anyCompletedCleanly(){return _},get anyErrored(){return x},get completedWithoutErrors(){return _&&!x},onEvent(O){return f.add(O),()=>f.delete(O)},dispose:Ye,expand(O){Ye();let G={...n};return typeof O=="string"?G.detail=O:Object.assign(G,O),r(sn(G))},[Symbol.asyncIterator](){return{next(){return Je.length>0?Promise.resolve({value:Je.shift(),done:!1}):qe?Promise.resolve({value:void 0,done:!0}):new Promise(O=>Re.push(O))},return(){return Ye(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(yt,n),yt}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let o=n.logger??(l=>console.log(l)),s=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=s==null&&i==null?()=>!0:l=>(s==null||s.has(l))&&(i==null||!i.has(l)),d=xr(n.theme),u=r==="stage-log"?Q():0,c=l=>l==null?"":n.stageLabels?.[l]??l,h=(l,g)=>l.length>g?`${l.slice(0,g-1)}\u2026`:l,p=l=>l.type==="data"||l.type==="error"?h(Ue(l.data),120):"",f=l=>{if(r==="stage-log"){let x=(Q()-u)/1e9,N=c(l.path).padEnd(9);if(l.type==="data"){let E=p(l);return`[${x.toFixed(3)}s] ${N} \u2190${E?` ${E}`:""}`}if(l.type==="error"){let E=p(l);return`[${x.toFixed(3)}s] ${N} \u2717${E?` ${E}`:""}`}return l.type==="complete"?`[${x.toFixed(3)}s] ${N} \u25A0 complete`:`[${x.toFixed(3)}s] ${N} ${l.type}`}if(r==="json")try{return JSON.stringify(l)}catch{return JSON.stringify({type:l.type,path:l.path,data:"[unserializable]"})}let g=d[l.type]??"",m=l.path?`${d.path}${l.path}${d.reset} `:"",b=l.type==="data"||l.type==="error",v=l.type==="pause"||l.type==="resume",y=b?` ${Ue(l.data)}`:v?` ${Ue(l.lockId)}`:"",w=l.type==="data"||l.type==="resolved"||l.type==="derived"?l:void 0,T=w?.trigger_dep_name!=null?` <- ${w.trigger_dep_name}`:w?.trigger_dep_index!=null?` <- #${w.trigger_dep_index}`:"",_=l.in_batch?" [batch]":"";return`${m}${g}${l.type.toUpperCase()}${d.reset}${y}${T}${_}`};e.onEvent(l=>{a(l.type)&&o(f(l),l)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){rn(this._disposers,this.name),this.signal([[j]],{internal:!0}),rn(this._storageDisposers,this.name);for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0}_destroyClearOnly(){for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0}snapshot(e){let{expand:n,...r}=this.describe({detail:"full"}),o={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:d,guard:u,...c}=r.nodes[a];o[a]=c}let s=[...r.subgraphs].sort(),i={...r,version:1,nodes:o,subgraphs:s};if(e?.format==null)return i;if(e.format==="json-string")return JSON.stringify(i);if(e.format==="bytes"){if(e.codec==null)throw new Error("snapshot({format: 'bytes'}) requires a `codec` name");let a=this.config.lookupCodec(e.codec);if(a==null)throw new Error(`snapshot: codec "${e.codec}" is not registered on this graph's config. Call config.registerCodec(...) before creating nodes.`);return Nt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??me,{codec:o,codecVersion:s,payload:i}=Ot(e,r);return o.decode(i,s)}restore(e,n){if(on(e),e.name!==this.name)throw new Error(`Graph "${this.name}": restore snapshot name "${e.name}" does not match this graph`);let r=n?.only==null?null:(Array.isArray(n.only)?n.only:[n.only]).map(s=>Ke(s)),o=n?.includeProducers===!0;for(let s of Object.keys(e.nodes).sort()){if(r!==null&&!r.some(a=>a.test(s)))continue;let i=e.nodes[s];if(i!==void 0){if(!("value"in i)||i.value===void 0){"value"in i&&i.value===void 0&&n?.onError?.(s,new Error(`restore: slice.value is undefined for "${s}" (undefined is the global SENTINEL; not valid DATA)`));continue}if(!(i.type==="derived"||i.type==="effect")&&!(i.type==="producer"&&!o)){if(i.v!=null){let d=this.tryResolve(s)?.v;if(d!=null&&d.id===i.v.id&&d.version===i.v.version)continue}try{this.set(s,i.value)}catch(a){n?.onError?.(s,a)}}}}}static fromSnapshot(e,n){on(e);let r=typeof n=="function"?n:n?.build,o=typeof n=="function"?void 0:n?.factories,s=new t(e.name);if(r)return r(s),s.restore(e),s;for(let f of[...e.subgraphs].sort((l,g)=>{let m=l.split(I).length,b=g.split(I).length;return m!==b?m-b:l<g?-1:l>g?1:0})){let l=f.split(I),g=s;for(let m of l)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=o?Object.entries(o).map(([f,l])=>({re:Ke(f),factory:l})):[],a=f=>{for(let l of i)if(l.re.test(f))return l.factory},d=f=>{let l=f.split(I),g=l.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=s;for(let b of l){let v=m._mounts.get(b);if(!v)throw new Error(`unknown mount "${b}" in path "${f}"`);m=v}return[m,g]},u=Object.entries(e.nodes).filter(([f])=>!f.includes(`${I}${ee}${I}`)).sort((f,l)=>f[0]<l[0]?-1:f[0]>l[0]?1:0),c=new Map(u),h=new Map,p=!0;for(;c.size>0&&p;){p=!1;for(let[f,l]of[...c.entries()]){let g=l?.deps??[];if(!g.every(T=>h.has(T)))continue;let[m,b]=d(f),v={...l?.meta??{}},y=a(f),w;if(l?.type==="state")w=re(l.value,{meta:v});else{if(y==null)continue;w=y(b,{path:f,type:l.type,value:l.value,meta:v,deps:g,resolvedDeps:g.map(T=>h.get(T))})}m.add(w,{name:b}),h.set(f,w),c.delete(f),p=!0}}if(c.size>0){let f=[...c.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${f}. Pass matching factories via fromSnapshot(data, { factories: { pattern: factoryFn } }).`)}return s.restore(e),s}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(u=>({tier:u,debounceMs:Math.max(0,u.debounceMs??0),compactEvery:Math.max(1,u.compactEvery??10),timer:void 0,seq:0,lastSnapshot:void 0,lastFingerprint:"",disposed:!1,savePending:void 0}));n.autoRestore===!0&&this._cascadeRestore(e,n.onError);let o=(u,c)=>{if(u.disposed)return;let h=dr(c.nodes);if(u.lastSnapshot!=null&&h!==""&&h===u.lastFingerprint)return;let p=u.seq+1,f=Me(),m=u.lastSnapshot==null||p%u.compactEvery===0?{mode:"full",snapshot:c,seq:p,timestamp_ns:f,format_version:ye}:{mode:"diff",diff:Er(u.lastSnapshot,c),seq:p,timestamp_ns:f,format_version:ye};if(u.tier.filter&&!u.tier.filter(this.name,m))return;let b;try{b=u.tier.save(this.name,m)}catch(v){n.onError?.(v,u.tier);return}if(b&&typeof b.then=="function"){let w=(u.savePending??Promise.resolve()).then(()=>b,()=>b).then(()=>{u.disposed||(u.seq=p,u.lastSnapshot=c,u.lastFingerprint=h)},T=>{n.onError?.(T,u.tier)});u.savePending=w.finally(()=>{u.savePending===w&&(u.savePending=void 0)})}else u.seq=p,u.lastSnapshot=c,u.lastFingerprint=h},s=(u,c)=>{try{o(u,c)}catch(h){n.onError?.(h,u.tier)}},i=(u,c)=>{if(!c.some(l=>{let g=this.config.messageTier(l[0]);return g>=3&&g<5}))return;if(n.filter){let l=this.tryResolve(u);if(l==null)return;let g=ht(l,Pe("standard"));if(!n.filter(u,g))return}let p,f=()=>(p==null&&(p=this.snapshot()),p);for(let l of r)l.disposed||(l.debounceMs===0?s(l,f()):(l.timer==null&&(l.timer=new $e),l.timer.start(l.debounceMs,()=>{l.disposed||s(l,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(h=>{let p=this.tryResolve(h);return p==null?()=>{}:p.subscribe(f=>i(h,f))});a=()=>{for(let h of c)h()}}else a=this.observe().subscribe((u,c)=>i(u,c));let d=()=>{a();for(let u of r)u.disposed=!0,u.timer?.cancel();this._storageDisposers.delete(d)};return this._storageDisposers.add(d),{dispose:d}}async _cascadeRestore(e,n){for(let r of e){let o;try{o=await r.load(this.name)}catch(i){n?.(i,r);continue}if(o==null||typeof o!="object"||Array.isArray(o))continue;let s=o;try{if(s.mode==="full"&&s.snapshot!=null)return this.restore(s.snapshot),!0;if(s.version===ye&&s.nodes!=null)return this.restore(s),!0}catch(i){n?.(i,r)}}return!1}static async fromStorage(e,n,r){for(let o of n){let s;try{s=await o.load(e)}catch(d){r?.onError?.(d,o);continue}if(s==null||typeof s!="object"||Array.isArray(s))continue;let i=s,a=i.mode==="full"&&i.snapshot!=null?i.snapshot:i.version===ye&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(d){r?.onError?.(d,o)}}throw new Error(`Graph.fromStorage: no tier held a restorable record for "${e}" across ${n.length} tier(s)`)}_annotations=new Map;_traceRing;trace(e,n,r){if(e!=null&&n!=null){if(this.tryResolve(e)==null)return;if(this._annotations.set(e,n),this.config.inspectorEnabled){let o={path:e,annotation:n,timestamp_ns:Q(),...r?.actor!=null?{actor:r.actor}:{}};this._traceRing.push(o)}return}return e!=null?this.config.inspectorEnabled?this._annotations.get(e):void 0:this.config.inspectorEnabled?this._traceRing.toArray():[]}annotation(e){return this._annotations.get(e)}clearTrace(){this._annotations.clear(),this._traceRing.clear()}pruneTrace(e){let n=this._traceRing.toArray().filter(o=>!e(o)),r=this._traceRing.size-n.length;this._traceRing.clear();for(let o of n)this._traceRing.push(o);return r}static diff(e,n){let r=new Set(Object.keys(e.nodes)),o=new Set(Object.keys(n.nodes)),s=[...o].filter(v=>!r.has(v)).sort(),i=[...r].filter(v=>!o.has(v)).sort(),a=[],d=[];for(let v of r){if(!o.has(v))continue;let y=e.nodes[v],w=n.nodes[v],T=y.v,_=w.v;T!=null&&_!=null&&T.id===_.id&&T.version!==_.version&&d.push({path:v,id:T.id,from:T.version,to:_.version});let x=T!=null&&_!=null&&T.id===_.id&&T.version===_.version;for(let N of["type","status","sentinel"]){let E=y[N],D=w[N];E!==D&&a.push({path:v,field:N,from:E,to:D})}if(!x)for(let N of["value","meta"]){let E=y[N],D=w[N];lr(E,D)||a.push({path:v,field:N,from:E,to:D})}}let u=v=>`${v.from} ${v.to}`,c=new Set(e.edges.map(u)),h=new Set(n.edges.map(u)),p=n.edges.filter(v=>!c.has(u(v))),f=e.edges.filter(v=>!h.has(u(v))),l=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(v=>!l.has(v)).sort(),b=[...l].filter(v=>!g.has(v)).sort();return{nodesAdded:s,nodesRemoved:i,nodesChanged:a,versionChanges:d,edgesAdded:p,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:b}}};function Er(t,e){let n=ve.diff(t,e),r={};for(let o of n.nodesAdded){let s=e.nodes[o];s!=null&&(r[o]=s)}return{...n,nodesAddedFull:r}}function an(t,e,n,r={}){let o={paths:[],depths:new Map,truncated:!1};if(!e)return r.withDetail?o:[];if(!r.both&&n!=="upstream"&&n!=="downstream")throw new Error('reachable: direction must be "upstream" or "downstream"');let s=r.maxDepth;if(s!=null&&(!Number.isInteger(s)||s<0))throw new Error("reachable: maxDepth must be an integer >= 0");if(s===0)return r.withDetail?o:[];let i=new Map,a=new Map,d=new Map,u=new Map,c=new Set;for(let[y,w]of Object.entries(t.nodes)){if(!y)continue;c.add(y);let T=w.deps??[];i.set(y,T);for(let _ of T)_&&(c.add(_),a.has(_)||a.set(_,new Set),a.get(_).add(y))}for(let y of t.edges){if(y==null||typeof y!="object")continue;let w=typeof y.from=="string"?y.from:"",T=typeof y.to=="string"?y.to:"";!w||!T||(c.add(w),c.add(T),u.has(w)||u.set(w,new Set),u.get(w).add(T),d.has(T)||d.set(T,new Set),d.get(T).add(w))}if(!c.has(e))return r.withDetail?o:[];let h=r.both===!0,p=y=>{if(h){let x=i.get(y)??[],N=d.get(y),E=a.get(y),D=u.get(y),k=[...x];return N&&k.push(...N),E&&k.push(...E),D&&k.push(...D),k}if(n==="upstream"){let x=i.get(y)??[],N=d.get(y);return N?[...x,...N]:x}let w=a.get(y),T=u.get(y),_=w?[...w]:[];return T&&_.push(...T),_},f=new Set([e]),l=new Map,g=[{path:e,depth:0}],m=0,b=!1;for(;m<g.length;){let y=g[m++];if(s!=null&&y.depth>=s){p(y.path).length>0&&(b=!0);continue}for(let w of p(y.path))!w||f.has(w)||(f.add(w),l.set(w,y.depth+1),g.push({path:w,depth:y.depth+1}))}let v=[...l.keys()].sort((y,w)=>y<w?-1:y>w?1:0);return r.withDetail?{paths:v,depths:l,truncated:b}:v}function kr(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++){let r=t[n],o=e[n];if(r.path!==o.path||r.type!==o.type||r.status!==o.status||r.hop!==o.hop||r.dep_index!==o.dep_index||r.annotation!==o.annotation||r.value!==o.value||r.lastMutation!==o.lastMutation)return!1;let s=r.v,i=o.v;if(s!==i&&(s==null||i==null||s.id!==i.id||s.version!==i.version))return!1}return!0}te();ft();function fn(t,e){let n=t.cache??0;return n>=e?!1:(t.down([[F],[C,n+1]]),!0)}function pn(t,e,n){return{[t]:!0,[`${t}_type`]:e,...n??{}}}function We(t,e){return pn("reduction",t,e)}function Rr(t,e,n,r){if(e.length===0)throw new RangeError("funnel requires at least one source");if(n.length===0)throw new RangeError("funnel requires at least one stage");let o=new ve(t,r),s=e.length===1?e[0]:Pt(...e);o.add(s,{name:"merged"});let i="merged";for(let a=0;a<n.length;a++){let d=n[a],u=new ve(d.name);d.build(u);try{u.resolve("input")}catch{throw new Error(`funnel stage "${d.name}" must define an "input" node`)}try{u.resolve("output")}catch{throw new Error(`funnel stage "${d.name}" must define an "output" node`)}o.mount(d.name,u);let c=o.resolve(i),h=`${d.name}::input`,p=o.resolve(h),f=`__bridge_${i}\u2192${d.name}_input`,l=It([c],([g])=>{p.emit(g)},{name:f});o.add(l,{name:f}),o.addDisposer(oe(l)),i=`${d.name}::output`}return o}function Sr(t,e,n,r){let o=r?.maxIterations??10,s=`__feedback_${e}`,i=re(0,{meta:We("feedback_counter",{maxIterations:o,feedbackFrom:e,feedbackTo:n})});t.add(i,{name:s});let a=t.resolve(e),d=t.resolve(n),u=`__feedback_effect_${e}`,c=ne([],(h,p)=>{let f=a.subscribe(l=>{for(let g of l){let m=g[0];if(m===C){let b=g[1];if(b==null)return;fe(()=>{fn(i,o)&&d.emit(b)})}else if(m===V||m===M){let b=m===M&&g.length>1?[M,g[1]]:[m];i.down([b])}}});return()=>f()},{name:u,describeKind:"effect",meta:{...We("feedback_effect",{feedbackFrom:e,feedbackTo:n}),_internal:!0}});return t.add(c,{name:u}),t.addDisposer(oe(c)),t}function Dr(t,e,n){if(e.length===0)throw new RangeError("budgetGate requires at least one constraint");let r=e.map(f=>f.node),o=[t,...r],s=[],i=!1,a=!1,d=Symbol("budget-gate"),u=new Array(e.length);function c(){return e.every((f,l)=>f.check(u[l]))}function h(f){for(;s.length>0&&c();){let l=s[0];s=s.slice(1),f.emit(l)}s.length===0&&a&&(a=!1,f.down([[B]]))}return ne([],(f,l)=>{for(let m=0;m<e.length;m++)u[m]=e[m].node.cache;let g=[];for(let m=0;m<o.length;m++){let b=o[m];g.push(b.subscribe(v=>{for(let y of v)p(y,m,l)}))}return()=>{for(let m of g)m()}},{...n,describeKind:"derived",meta:We("budget_gate",n?.meta)});function p(f,l,g){let m=f[0];if(l===0){if(m===C)return c()&&s.length===0?g.emit(f[1]):(s.push(f[1]),i||(i=!0,g.up([[K,d]]))),!0;if(m===F)return g.down([[F]]),!0;if(m===B)return s.length===0?g.down([[B]]):a=!0,!0;if(m===V||m===M){for(let b of s)g.emit(b);return s=[],a=!1,i&&(i=!1,g.up([[Z,d]])),g.down([f]),!0}return!1}return m===C&&(u[l-1]=f[1]),m===C||m===B?(c()&&s.length>0?(h(g),s.length===0&&i&&(i=!1,g.up([[Z,d]]))):!c()&&!i&&s.length>0&&(i=!0,g.up([[K,d]])),!0):m===F?!0:m===M?(g.down([f]),!0):m===V}}function Ar(t,e,n){if(t.length===0)throw new RangeError("scorer requires at least one source");if(t.length!==e.length)throw new RangeError("scorer requires the same number of sources and weights");let r=[...t,...e],o=t.length,s=n?.scoreFns;return de(r,i=>{let a=i.slice(0,o),d=i.slice(o),u=[],c=0;for(let h=0;h<o;h++){let p=a[h]??0,f=d[h]??0,g=(s?.[h]?s[h](p):p)*f;u.push(g),c+=g}return{value:a,score:c,breakdown:u}},{...n?{equals:n.equals,resubscribable:n.resubscribable,resetOnTeardown:n.resetOnTeardown}:{},describeKind:"derived",meta:We("scorer",n?.meta)})}function Mr(t){let e=$t({name:t?.name??"effectiveness-entries"}),n=de([e.entries],([i])=>new Map(i),{name:`${t?.name??"effectiveness"}-snapshot`,equals:(i,a)=>{let d=i,u=a;if(d.size!==u.size)return!1;for(let[c,h]of d){let p=u.get(c);if(!p||h.attempts!==p.attempts||h.successes!==p.successes)return!1}return!0}});function r(i,a){let d=e.get(i),u=(d?.attempts??0)+1,c=(d?.successes??0)+(a?1:0);e.set(i,{key:i,attempts:u,successes:c,successRate:c/u})}function o(i){return e.get(i)}let s=oe(n);return{node:n,record:r,lookup:o,dispose:()=>s()}}0&&(module.exports={budgetGate,effectivenessTracker,feedback,funnel,scorer});
|
|
7
|
+
`)}function vr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ke(t){let e="^";for(let n=0;n<t.length;n+=1){let r=t[n];if(r==="*"){e+=".*";continue}if(r==="?"){e+=".";continue}if(r==="["){let o=t.indexOf("]",n+1);if(o<=n+1){e+="\\[";continue}let s=t.slice(n+1,o);s.startsWith("!")&&(s=`^${s.slice(1)}`),s=s.replace(/\\/g,"\\\\"),e+=`[${s}]`,n=o;continue}e+=vr(r)}return e+="$",new RegExp(e)}var wr={data:"\x1B[32m",dirty:"\x1B[33m",resolved:"\x1B[36m",invalidate:"\x1B[93m",pause:"\x1B[90m",resume:"\x1B[96m",complete:"\x1B[34m",error:"\x1B[31m",teardown:"\x1B[91m",derived:"\x1B[35m",path:"\x1B[90m",reset:"\x1B[0m"},_r={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ue(t){if(typeof t=="string")return JSON.stringify(t);if(typeof t=="number"||typeof t=="boolean"||t==null)return String(t);try{return JSON.stringify(t)}catch{return"[unserializable]"}}function xr(t){return t==="none"?_r:t==="ansi"||t==null?wr:{data:t.data??"",dirty:t.dirty??"",resolved:t.resolved??"",invalidate:t.invalidate??"",pause:t.pause??"",resume:t.resume??"",complete:t.complete??"",error:t.error??"",teardown:t.teardown??"",derived:t.derived??"",path:t.path??"",reset:t.reset??""}}function sn(t){if(t==null)return{};let e=t.detail;return e==="full"?{...t,structured:t.structured??!0,timeline:t.timeline??!0,causal:t.causal??!0,derived:t.derived??!0}:e==="minimal"?{...t,structured:t.structured??!0}:t.format==="stage-log"?{...t,structured:t.structured??!0,timeline:t.timeline??!0}:t}function Tr(t,e,n){for(let r=0;r<t.length;r++){let o=t.charCodeAt(r);if(o<32||o===127)throw new Error(`Graph "${e}": ${n} "${t}" must not contain control character (U+${o.toString(16).padStart(4,"0").toUpperCase()} at index ${r})`)}}function mt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(I))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${I}' (path separator)`);if(t===ee)throw new Error(`Graph "${e}": ${n} name "${ee}" is reserved for meta companion paths`);Tr(t,e,n)}function Nr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(I);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function Or(t,e){let n=!1;for(let o of t)if(!e.isMetaPassthrough(o[0])){n=!0;break}return n?t.filter(o=>e.isMetaPassthrough(o[0])):t}function cn(t){for(let e of t._mounts.values())cn(e);for(let e of t._nodes.values())try{e.down([[j]],{internal:!0})}catch{}}var ve=class t{name;opts;config;_nodes=new Map;_nodeToName=new WeakMap;_mounts=new Map;_parent=void 0;_storageDisposers=new Set;_disposers=new Set;_destroyed=!1;_topology;_topologyEmitters=new Set;constructor(e,n){if(e==="")throw new Error("Graph name must be non-empty");if(e.includes(I))throw new Error(`Graph name must not contain '${I}' (got "${e}")`);if(e===ee)throw new Error(`Graph name "${ee}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??me,this._traceRing=new ke(n?.traceCapacity??1e3),n?.versioning!=null&&this.setVersioning(n.versioning)}ancestors(e=!0){let n=[],r=e?this:this._parent;for(;r!=null;)n.push(r),r=r._parent;return n}get topology(){return this._topology==null&&(this._topology=Oe(e=>{let n=r=>{e.emit(r)};return this._topologyEmitters.add(n),()=>{this._topologyEmitters.delete(n)}},{name:`${this.name}_topology`})),this._topology}_emitTopology(e){if(!(this._topology==null||this._topologyEmitters.size===0))for(let n of this._topologyEmitters)n(e)}add(e,n){let r=e.name,o=n?.name??r;if(o==null||o==="")throw new Error(`Graph "${this.name}": graph.add requires a non-empty name \u2014 pass via opts.name or set it on the node (e.g. state(0, { name: "x" }))`);let s=o,i=n?.annotation;if(mt(s,this.name,"add"),this._mounts.has(s))throw new Error(`Graph "${this.name}": name "${s}" is already a mount point`);if(this._nodes.has(s))throw new Error(`Graph "${this.name}": node "${s}" already exists`);let a=this._nodeToName.get(e);if(a!==void 0)throw new Error(`Graph "${this.name}": node instance already registered as "${a}"`);return this._nodes.set(s,e),this._nodeToName.set(e,s),this._emitTopology({kind:"added",name:s,nodeKind:"node"}),i!=null&&(this._annotations.set(s,i),this.config.inspectorEnabled&&this._traceRing.push({path:s,annotation:i,timestamp_ns:Q()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof P&&n._applyVersioning(e)}remove(e){mt(e,this.name,"remove");let n=this._mounts.get(e);if(n){let s={kind:"mount",nodes:[],mounts:[]},i=[];n._collectObserveTargets("",i);for(let[a,d]of i)a.includes(`${I}${ee}${I}`)||s.nodes.push(a);return s.nodes.sort(),s.mounts.push(e),s.mounts.push(...n._collectSubgraphs(`${e}${I}`)),this._mounts.delete(e),n._parent=void 0,cn(n),this._emitTopology({kind:"removed",name:e,nodeKind:"mount",audit:s}),s}let r=this._nodes.get(e);if(!r)throw new Error(`Graph "${this.name}": unknown node or mount "${e}"`);this._nodes.delete(e),this._nodeToName.delete(r),r.down([[j]],{internal:!0});let o={kind:"node",nodes:[e],mounts:[]};return this._emitTopology({kind:"removed",name:e,nodeKind:"node",audit:o}),o}removeAll(e){let n=typeof e=="function"?e:(()=>{let s=Ke(e);return i=>s.test(i)})(),r={kind:"mount",nodes:[],mounts:[]},o=[...this._nodes.keys(),...this._mounts.keys()].filter(s=>n(s));for(let s of o){let i=this.remove(s);r.nodes.push(...i.nodes),r.mounts.push(...i.mounts)}return r.nodes.sort(),r.mounts.sort(),r}[Symbol.iterator](){let e=[...this._nodes.keys()].sort(),n=this._nodes,r=0;return{[Symbol.iterator](){return this},next(){if(r>=e.length)return{value:void 0,done:!0};let o=e[r++];return{value:[o,n.get(o)],done:!1}}}}node(e){if(e==="")throw new Error(`Graph "${this.name}": node name must be non-empty`);if(e.includes(I))return this.resolve(e);let n=this._nodes.get(e);if(!n)throw new Error(`Graph "${this.name}": unknown node "${e}"`);return n}get(e){return this.node(e).cache}set(e,n,r){let o=r?.internal===!0;this.node(e).down([[C,n]],{actor:r?.actor,internal:o,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);fe(()=>{for(let[o,s]of r)this.set(o,s,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[X]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let o=r?.internal===!0;this.node(e).down([[M,n]],{actor:r?.actor,internal:o,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[V]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[d,u]of this._nodes)r.set(u,d);let a=[];for(let[d,u]of this._nodes)if(u instanceof P)for(let c of u._deps){let h=r.get(c.node);h!=null&&a.push([h,d])}return a.sort((d,u)=>d[0]<u[0]?-1:d[0]>u[0]?1:d[1]<u[1]?-1:d[1]>u[1]?1:0),a}let o=[];this._collectObserveTargets("",o);let s=new Map;for(let[a,d]of o)s.set(d,a);let i=[];for(let[a,d]of o)if(d instanceof P)for(let u of d._deps){let c=s.get(u.node);c!=null&&i.push([c,a])}return i.sort((a,d)=>a[0]<d[0]?-1:a[0]>d[0]?1:a[1]<d[1]?-1:a[1]>d[1]?1:0),i}mount(e,n){if(mt(e,this.name,"mount"),this._nodes.has(e))throw new Error(`Graph "${this.name}": cannot mount at "${e}" \u2014 node with that name exists`);if(this._mounts.has(e))throw new Error(`Graph "${this.name}": mount "${e}" already exists`);if(n===this)throw new Error(`Graph "${this.name}": cannot mount a graph into itself`);if(n._parent!=null)throw new Error(`Graph "${this.name}": this child graph is already mounted on "${n._parent.name}"`);for(let r=this;r!=null;r=r._parent)if(r===n)throw new Error(`Graph "${this.name}": mount("${e}", \u2026) would create a mount cycle`);return this._mounts.set(e,n),n._parent=this,this._emitTopology({kind:"added",name:e,nodeKind:"mount"}),n}resolve(e){let n=Nr(e,this.name);return this._resolveFromSegments(n)}tryResolve(e){try{return this.resolve(e)}catch{return}}_resolveFromSegments(e){let n=e;if(n[0]===this.name&&(n=n.slice(1),n.length===0))throw new Error(`Graph "${this.name}": resolve path ends at graph name only`);let r=n[0],o=n.slice(1);if(o.length===0){let a=this._nodes.get(r);if(a)return a;throw this._mounts.has(r)?new Error(`Graph "${this.name}": path ends at subgraph "${r}" \u2014 not a node (GRAPHREFLY-SPEC \xA73.5)`):new Error(`Graph "${this.name}": unknown name "${r}"`)}let s=this._nodes.get(r);if(s&&o.length>0&&o[0]===ee)return this._resolveMetaChainFromNode(s,o,n.join(I));let i=this._mounts.get(r);if(!i)throw this._nodes.has(r)?new Error(`Graph "${this.name}": "${r}" is a node; trailing path "${o.join(I)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(o.join(I))}_resolveMetaChainFromNode(e,n,r){let o=e,s=0,i=[...n];for(;s<i.length;){if(i[s]!==ee)throw new Error(`Graph "${this.name}": expected ${ee} segment in meta path "${r}"`);if(s+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${ee} in "${r}"`);let a=i[s+1],d=o.meta[a];if(!d)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);o=d,s+=2}return o}signal(e,n){if(n?.internal!==!0){for(let o of e)if(this.config.messageTier(o[0])===3)throw new Error(`Graph "${this.name}": Graph.signal() rejects tier-3 messages (DATA / RESOLVED). Broadcast is for control-plane tiers (START / DIRTY / INVALIDATE / PAUSE / RESUME / COMPLETE / ERROR / TEARDOWN). For per-node value writes, use Graph.set or graph.node(name).down(...).`)}let r=[];if(this._signalDeliver(e,n??{},new Set,r),r.length>0)throw r[0]}_signalDeliver(e,n,r,o){for(let d of this._mounts.values())d._signalDeliver(e,n,r,o);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=Or(e,this.config);for(let d of[...this._nodes.keys()].sort()){let u=this._nodes.get(d);if(!r.has(u)){r.add(u);try{u.down(e,i)}catch(c){if(c instanceof Y)throw c;o.push(c)}a.length!==0&&this._signalMetaSubtree(u,a,r,i,o)}}}_signalMetaSubtree(e,n,r,o,s){for(let i of Object.keys(e.meta).sort()){let a=e.meta[i];if(!r.has(a)){r.add(a);try{a.down(n,o)}catch(d){if(d instanceof Y)throw d;s.push(d)}this._signalMetaSubtree(a,n,r,o,s)}}}describe(e){if(e?.reactive===!0)return this._describeReactive(e);let n=e?.actor,r=e?.filter,o=Pe(e?.detail,e?.fields),s=e?.format==="spec",i=s?Pe("minimal"):o,a=[];this._collectObserveTargets("",a);let d=new Map;for(let[_,x]of a)d.set(x,_);let u=[];{let _=a.map(([,E])=>E),x=new Set(d.values()),N=0;for(;_.length>0;){let E=_.shift();if(E instanceof P)for(let D of E._deps){let k=D.node;if(d.has(k))continue;let S=k.name??"",R=S;if(!R||x.has(R))if(S){let L=2;for(;x.has(`${S}#${L}`);)L++;R=`${S}#${L}`}else for(R=`__internal__/${N++}`;x.has(R);)R=`__internal__/${N++}`;d.set(k,R),x.add(R),u.push([R,k]),_.push(k)}}}let c=[...a,...u],h={};for(let[_,x]of c){if(n!=null&&!x.allowsObserve(n))continue;let N=ht(x,i),E=x instanceof P?x._deps.map(R=>d.get(R.node)??R.node.name??""):[],{name:D,...k}=N,S={...k,deps:E};if(!s){let R=this._annotations.get(_);R!=null&&(S.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(_,S):R(S)))continue}else{let R=!0;for(let[L,z]of Object.entries(r)){let J=L==="deps_includes"?"depsIncludes":L==="meta_has"?"metaHas":L;if(J==="depsIncludes"){if(!S.deps.includes(String(z))){R=!1;break}continue}if(J==="metaHas"){if(!Object.hasOwn(S.meta??{},String(z))){R=!1;break}continue}if(S[J]!==z){R=!1;break}}if(!R)continue}h[_]=S}let p=new Set(Object.keys(h)),f=[];for(let[_,x]of c)if(x instanceof P)for(let N of x._deps){let E=d.get(N.node);E!=null&&f.push([E,_])}f.sort((_,x)=>_[0]<x[0]?-1:_[0]>x[0]?1:_[1]<x[1]?-1:_[1]>x[1]?1:0);let l=f.map(([_,x])=>({from:_,to:x}));(n!=null||r!=null)&&(l=l.filter(_=>p.has(_.from)&&p.has(_.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(_=>{let x=`${_}${I}`;return[...p].some(N=>N===_||N.startsWith(x))}):g,b=this,v=e,y={name:this.name,nodes:h,edges:l,subgraphs:m,expand(_){let x={...v,format:void 0};return Array.isArray(_)?(x.fields=_,x.detail=void 0):(x.detail=_,x.fields=void 0),b.describe(x)}},w=e??{},T=w.format;return T==="json"?hr(y,w):T==="pretty"?gr(y,w):T==="mermaid"?ln(y,w):T==="mermaid-url"?mr(y,w):T==="d2"?yr(y,w):T==="ascii"?Jt(y,w):y}_collectSubgraphs(e){let n=[];for(let r of[...this._mounts.keys()].sort()){let o=e===""?r:`${e}${r}`;n.push(o),n.push(...this._mounts.get(r)._collectSubgraphs(`${o}${I}`))}return n}resourceProfile(e){return nn(this,e)}reachable(e,n,r={}){return r.withDetail===!0?an(this.describe(),e,n,{...r,withDetail:!0}):an(this.describe(),e,n,r)}explain(e,n,r){return r?.reactive===!0?this._explainReactive(e,n,r):this._explainStatic(e,n,r)}_explainStatic(e,n,r){let o=this.describe({detail:"full"}),s=new Map(this._annotations),i=new Map;for(let[a,d]of Object.entries(o.nodes))d.lastMutation!=null&&i.set(a,d.lastMutation);return Xt(o,e,n,{...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{},annotations:s,lastMutations:i})}_describeReactive(e){let n={...e,reactive:!1},r=e.reactiveName??"describe",o=0,s=re(o,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=()=>{a||d||(a=!0,Te(()=>{a=!1,!d&&(o+=1,s.emit(o))}))},c=i.onEvent(m=>{let b=m.type;b!=="data"&&b!=="error"&&b!=="complete"&&b!=="teardown"||u()}),h=[],p=new WeakSet,f=m=>{if(p.has(m)||d)return;p.add(m);let b=m.topology.subscribe(v=>{for(let y of v){if(y[0]!==C)continue;let w=y[1];if(u(),w.kind==="added"&&w.nodeKind==="mount"){let T=m._mounts.get(w.name);T!=null&&f(T)}}});h.push(b);for(let v of m._mounts.keys()){let y=m._mounts.get(v);y!=null&&f(y)}};f(this);let l;try{l=de([s],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,b)=>m===b})}catch(m){c();for(let b of h)b();throw i.dispose(),m}let g=oe(l);return{node:l,dispose(){d=!0,c();for(let m of h)m();h.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let o=0,s=re(o,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=i.onEvent(f=>{let l=f.type;l!=="data"&&l!=="error"&&l!=="complete"&&l!=="teardown"||a||d||(a=!0,Te(()=>{a=!1,!d&&(o+=1,s.emit(o))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},h;try{h=de([s],()=>this._explainStatic(e,n,c),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(f,l)=>f.found===l.found&&f.reason===l.reason&&f.steps.length===l.steps.length&&kr(f.steps,l.steps)})}catch(f){throw u(),i.dispose(),f}let p=oe(h);return{node:h,dispose(){d=!0,u(),i.dispose(),p()}}}_pathsMatching(e){let n=Ke(e),r=[];return this._collectObserveTargets("",r),r.map(([o])=>o).filter(o=>n.test(o))}_collectObserveTargets(e,n){for(let r of[...this._mounts.keys()].sort()){let o=e===""?r:`${e}${I}${r}`;this._mounts.get(r)._collectObserveTargets(o,n)}for(let r of[...this._nodes.keys()].sort()){let o=this._nodes.get(r),s=e===""?r:`${e}${I}${r}`;n.push([s,o]),this._appendMetaObserveTargets(s,o,n)}}_appendMetaObserveTargets(e,n,r){for(let o of Object.keys(n.meta).sort()){let s=n.meta[o],i=`${e}${I}${ee}${I}${o}`;r.push([i,s]),this._appendMetaObserveTargets(i,s,r)}}observe(e,n){let r=typeof e=="string",s=sn(r?n:e),i=s.structured===!0||s.timeline===!0||s.causal===!0||s.derived===!0||s.detail==="minimal"||s.detail==="full"||s.format!=null,a=s.actor;if(r){let c=e,h=this.resolve(c);if(a!=null&&!h.allowsObserve(a))throw new Y({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,h]],s,"one"):{subscribe(p){return h.subscribe(p)},up(p){try{h.up?.(p)}catch(f){if(f instanceof Y)return;throw f}}}}let d=[];this._collectObserveTargets("",d),d.sort((c,h)=>c[0]<h[0]?-1:c[0]>h[0]?1:0);let u=a==null?d:d.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,s,"all"):{subscribe:c=>{let h=u.map(([p,f])=>f.subscribe(l=>{c(p,l)}));return()=>{for(let p of h)p()}},up:(c,h)=>{try{this.resolve(c).up?.(h)}catch(p){if(p instanceof Y)return;throw p}}}}_buildStructuredObserver(e,n,r){let o=r==="one"?e[0]?.[0]:void 0,s=i=>{if(r==="one"&&o!=null){let c=this.resolve(o);return this._buildStructuredObserver([[o,c]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((c,h)=>c[0]<h[0]?-1:c[0]>h[0]?1:0);let d=i.actor,u=d==null?a:a.filter(([,c])=>c.allowsObserve(d));return this._buildStructuredObserver(u,i,"all")};return this._createObserveResult(e,n,s)}_createObserveResult(e,n,r){let o=n.timeline===!0,s=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",d=this.config.inspectorEnabled,u=(s||i)&&d,c=n.maxEvents,h=c!=null&&c>0?new ke(c):null,p=[],f=new Set,l={},g=new Set,m=0,b=0,v=0,y=0,w=0,T=0,_=!1,x=!1,N=0,E=new Map,D=new Map,k=new Map,S=O=>{h?h.push(O):p.push(O);for(let G of f)G(O)},R=()=>o?{timestamp_ns:Q(),in_batch:Se(),batch_id:N}:{},L=(O,G)=>{if(!(!u||!(O instanceof P)))return O._setInspectorHook(U=>{if(U.kind==="dep_message")E.set(O,U.depIndex);else if(U.kind==="run"){let we=U.batchData.map((A,H)=>A!=null&&A.length>0?A.at(-1):U.prevData[H]);D.set(O,we);let W=U.batchData.map(A=>A!=null?[...A]:void 0);k.set(O,W),i&&S({type:"derived",path:G,dep_values:we,dep_batches:W,...R()})}})},z=O=>{let G=E.get(O),U=D.get(O);if(!s||U==null)return{};let W=(G!=null&&G>=0&&O instanceof P?O._deps[G]:void 0)?.node,A=W?.v,H=k.get(O);return{trigger_dep_index:G,trigger_dep_name:W?.name,...A!=null?{trigger_version:{id:A.id,version:A.version}}:{},dep_values:[...U],...H!=null?{dep_batches:H}:{}}},J=[],ie=[];for(let[O,G]of e){let U=L(G,O);U&&J.push(U),ie.push(G.subscribe(we=>{N++;for(let W of we){let A=W[0],H=R();if(A===C){l[O]=W[1];let Xe=G instanceof P?G.lastMutation?.actor??ge:ge;S({type:"data",path:O,data:W[1],actor:Xe,...H,...z(G)})}else if(a)A===F?m++:A===B?b++:A===X?v++:A===K?y++:A===Z?w++:A===j?T++:A===V&&!g.has(O)?_=!0:A===M&&(x=!0,g.add(O));else if(A===F)m++,S({type:"dirty",path:O,...H});else if(A===B)b++,S({type:"resolved",path:O,...H,...z(G)});else if(A===X)v++,S({type:"invalidate",path:O,...H});else if(A===K)y++,S({type:"pause",path:O,lockId:W[1],...H});else if(A===Z)w++,S({type:"resume",path:O,lockId:W[1],...H});else if(A===V)g.has(O)||(_=!0),S({type:"complete",path:O,...H});else if(A===M){x=!0,g.add(O);let Xe=G instanceof P?G.lastMutation?.actor??ge:ge;S({type:"error",path:O,data:W[1],actor:Xe,...H})}else A===j&&(T++,S({type:"teardown",path:O,...H}))}}))}let qe=!1,Ye=()=>{if(!qe){qe=!0;for(let O of ie)O();for(let O of J)O();for(let O of Re)O({value:void 0,done:!0});Re.length=0}},Je=[],Re=[];f.add(O=>{let G=Re.shift();G?G({value:O,done:!1}):Je.push(O)});let yt={get values(){return l},get dirtyCount(){return m},get resolvedCount(){return b},get invalidateCount(){return v},get pauseCount(){return y},get resumeCount(){return w},get teardownCount(){return T},get events(){return h?h.toArray():[...p]},get anyCompletedCleanly(){return _},get anyErrored(){return x},get completedWithoutErrors(){return _&&!x},onEvent(O){return f.add(O),()=>f.delete(O)},dispose:Ye,expand(O){Ye();let G={...n};return typeof O=="string"?G.detail=O:Object.assign(G,O),r(sn(G))},[Symbol.asyncIterator](){return{next(){return Je.length>0?Promise.resolve({value:Je.shift(),done:!1}):qe?Promise.resolve({value:void 0,done:!0}):new Promise(O=>Re.push(O))},return(){return Ye(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(yt,n),yt}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let o=n.logger??(l=>console.log(l)),s=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=s==null&&i==null?()=>!0:l=>(s==null||s.has(l))&&(i==null||!i.has(l)),d=xr(n.theme),u=r==="stage-log"?Q():0,c=l=>l==null?"":n.stageLabels?.[l]??l,h=(l,g)=>l.length>g?`${l.slice(0,g-1)}\u2026`:l,p=l=>l.type==="data"||l.type==="error"?h(Ue(l.data),120):"",f=l=>{if(r==="stage-log"){let x=(Q()-u)/1e9,N=c(l.path).padEnd(9);if(l.type==="data"){let E=p(l);return`[${x.toFixed(3)}s] ${N} \u2190${E?` ${E}`:""}`}if(l.type==="error"){let E=p(l);return`[${x.toFixed(3)}s] ${N} \u2717${E?` ${E}`:""}`}return l.type==="complete"?`[${x.toFixed(3)}s] ${N} \u25A0 complete`:`[${x.toFixed(3)}s] ${N} ${l.type}`}if(r==="json")try{return JSON.stringify(l)}catch{return JSON.stringify({type:l.type,path:l.path,data:"[unserializable]"})}let g=d[l.type]??"",m=l.path?`${d.path}${l.path}${d.reset} `:"",b=l.type==="data"||l.type==="error",v=l.type==="pause"||l.type==="resume",y=b?` ${Ue(l.data)}`:v?` ${Ue(l.lockId)}`:"",w=l.type==="data"||l.type==="resolved"||l.type==="derived"?l:void 0,T=w?.trigger_dep_name!=null?` <- ${w.trigger_dep_name}`:w?.trigger_dep_index!=null?` <- #${w.trigger_dep_index}`:"",_=l.in_batch?" [batch]":"";return`${m}${g}${l.type.toUpperCase()}${d.reset}${y}${T}${_}`};e.onEvent(l=>{a(l.type)&&o(f(l),l)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){rn(this._disposers,this.name),this.signal([[j]],{internal:!0}),rn(this._storageDisposers,this.name);for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}get destroyed(){return this._destroyed}_destroyClearOnly(){for(let e of[...this._mounts.values()])e._parent=void 0,e._destroyClearOnly();this._mounts.clear(),this._nodes.clear(),this._parent=void 0,this._destroyed=!0}snapshot(e){let{expand:n,...r}=this.describe({detail:"full"}),o={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:d,guard:u,...c}=r.nodes[a];o[a]=c}let s=[...r.subgraphs].sort(),i={...r,version:1,nodes:o,subgraphs:s};if(e?.format==null)return i;if(e.format==="json-string")return JSON.stringify(i);if(e.format==="bytes"){if(e.codec==null)throw new Error("snapshot({format: 'bytes'}) requires a `codec` name");let a=this.config.lookupCodec(e.codec);if(a==null)throw new Error(`snapshot: codec "${e.codec}" is not registered on this graph's config. Call config.registerCodec(...) before creating nodes.`);return Nt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??me,{codec:o,codecVersion:s,payload:i}=Ot(e,r);return o.decode(i,s)}restore(e,n){if(on(e),e.name!==this.name)throw new Error(`Graph "${this.name}": restore snapshot name "${e.name}" does not match this graph`);let r=n?.only==null?null:(Array.isArray(n.only)?n.only:[n.only]).map(s=>Ke(s)),o=n?.includeProducers===!0;for(let s of Object.keys(e.nodes).sort()){if(r!==null&&!r.some(a=>a.test(s)))continue;let i=e.nodes[s];if(i!==void 0){if(!("value"in i)||i.value===void 0){"value"in i&&i.value===void 0&&n?.onError?.(s,new Error(`restore: slice.value is undefined for "${s}" (undefined is the global SENTINEL; not valid DATA)`));continue}if(!(i.type==="derived"||i.type==="effect")&&!(i.type==="producer"&&!o)){if(i.v!=null){let d=this.tryResolve(s)?.v;if(d!=null&&d.id===i.v.id&&d.version===i.v.version)continue}try{this.set(s,i.value)}catch(a){n?.onError?.(s,a)}}}}}static fromSnapshot(e,n){on(e);let r=typeof n=="function"?n:n?.build,o=typeof n=="function"?void 0:n?.factories,s=new t(e.name);if(r)return r(s),s.restore(e),s;for(let f of[...e.subgraphs].sort((l,g)=>{let m=l.split(I).length,b=g.split(I).length;return m!==b?m-b:l<g?-1:l>g?1:0})){let l=f.split(I),g=s;for(let m of l)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=o?Object.entries(o).map(([f,l])=>({re:Ke(f),factory:l})):[],a=f=>{for(let l of i)if(l.re.test(f))return l.factory},d=f=>{let l=f.split(I),g=l.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=s;for(let b of l){let v=m._mounts.get(b);if(!v)throw new Error(`unknown mount "${b}" in path "${f}"`);m=v}return[m,g]},u=Object.entries(e.nodes).filter(([f])=>!f.includes(`${I}${ee}${I}`)).sort((f,l)=>f[0]<l[0]?-1:f[0]>l[0]?1:0),c=new Map(u),h=new Map,p=!0;for(;c.size>0&&p;){p=!1;for(let[f,l]of[...c.entries()]){let g=l?.deps??[];if(!g.every(T=>h.has(T)))continue;let[m,b]=d(f),v={...l?.meta??{}},y=a(f),w;if(l?.type==="state")w=re(l.value,{meta:v});else{if(y==null)continue;w=y(b,{path:f,type:l.type,value:l.value,meta:v,deps:g,resolvedDeps:g.map(T=>h.get(T))})}m.add(w,{name:b}),h.set(f,w),c.delete(f),p=!0}}if(c.size>0){let f=[...c.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${f}. Pass matching factories via fromSnapshot(data, { factories: { pattern: factoryFn } }).`)}return s.restore(e),s}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(u=>({tier:u,debounceMs:Math.max(0,u.debounceMs??0),compactEvery:Math.max(1,u.compactEvery??10),timer:void 0,seq:0,lastSnapshot:void 0,lastFingerprint:"",disposed:!1,savePending:void 0}));n.autoRestore===!0&&this._cascadeRestore(e,n.onError);let o=(u,c)=>{if(u.disposed)return;let h=dr(c.nodes);if(u.lastSnapshot!=null&&h!==""&&h===u.lastFingerprint)return;let p=u.seq+1,f=Me(),m=u.lastSnapshot==null||p%u.compactEvery===0?{mode:"full",snapshot:c,seq:p,timestamp_ns:f,format_version:ye}:{mode:"diff",diff:Er(u.lastSnapshot,c),seq:p,timestamp_ns:f,format_version:ye};if(u.tier.filter&&!u.tier.filter(this.name,m))return;let b;try{b=u.tier.save(this.name,m)}catch(v){n.onError?.(v,u.tier);return}if(b&&typeof b.then=="function"){let w=(u.savePending??Promise.resolve()).then(()=>b,()=>b).then(()=>{u.disposed||(u.seq=p,u.lastSnapshot=c,u.lastFingerprint=h)},T=>{n.onError?.(T,u.tier)});u.savePending=w.finally(()=>{u.savePending===w&&(u.savePending=void 0)})}else u.seq=p,u.lastSnapshot=c,u.lastFingerprint=h},s=(u,c)=>{try{o(u,c)}catch(h){n.onError?.(h,u.tier)}},i=(u,c)=>{if(!c.some(l=>{let g=this.config.messageTier(l[0]);return g>=3&&g<5}))return;if(n.filter){let l=this.tryResolve(u);if(l==null)return;let g=ht(l,Pe("standard"));if(!n.filter(u,g))return}let p,f=()=>(p==null&&(p=this.snapshot()),p);for(let l of r)l.disposed||(l.debounceMs===0?s(l,f()):(l.timer==null&&(l.timer=new $e),l.timer.start(l.debounceMs,()=>{l.disposed||s(l,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(h=>{let p=this.tryResolve(h);return p==null?()=>{}:p.subscribe(f=>i(h,f))});a=()=>{for(let h of c)h()}}else a=this.observe().subscribe((u,c)=>i(u,c));let d=()=>{a();for(let u of r)u.disposed=!0,u.timer?.cancel();this._storageDisposers.delete(d)};return this._storageDisposers.add(d),{dispose:d}}async _cascadeRestore(e,n){for(let r of e){let o;try{o=await r.load(this.name)}catch(i){n?.(i,r);continue}if(o==null||typeof o!="object"||Array.isArray(o))continue;let s=o;try{if(s.mode==="full"&&s.snapshot!=null)return this.restore(s.snapshot),!0;if(s.version===ye&&s.nodes!=null)return this.restore(s),!0}catch(i){n?.(i,r)}}return!1}static async fromStorage(e,n,r){for(let o of n){let s;try{s=await o.load(e)}catch(d){r?.onError?.(d,o);continue}if(s==null||typeof s!="object"||Array.isArray(s))continue;let i=s,a=i.mode==="full"&&i.snapshot!=null?i.snapshot:i.version===ye&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(d){r?.onError?.(d,o)}}throw new Error(`Graph.fromStorage: no tier held a restorable record for "${e}" across ${n.length} tier(s)`)}_annotations=new Map;_traceRing;trace(e,n,r){if(e!=null&&n!=null){if(this.tryResolve(e)==null)return;if(this._annotations.set(e,n),this.config.inspectorEnabled){let o={path:e,annotation:n,timestamp_ns:Q(),...r?.actor!=null?{actor:r.actor}:{}};this._traceRing.push(o)}return}return e!=null?this.config.inspectorEnabled?this._annotations.get(e):void 0:this.config.inspectorEnabled?this._traceRing.toArray():[]}annotation(e){return this._annotations.get(e)}clearTrace(){this._annotations.clear(),this._traceRing.clear()}pruneTrace(e){let n=this._traceRing.toArray().filter(o=>!e(o)),r=this._traceRing.size-n.length;this._traceRing.clear();for(let o of n)this._traceRing.push(o);return r}static diff(e,n){let r=new Set(Object.keys(e.nodes)),o=new Set(Object.keys(n.nodes)),s=[...o].filter(v=>!r.has(v)).sort(),i=[...r].filter(v=>!o.has(v)).sort(),a=[],d=[];for(let v of r){if(!o.has(v))continue;let y=e.nodes[v],w=n.nodes[v],T=y.v,_=w.v;T!=null&&_!=null&&T.id===_.id&&T.version!==_.version&&d.push({path:v,id:T.id,from:T.version,to:_.version});let x=T!=null&&_!=null&&T.id===_.id&&T.version===_.version;for(let N of["type","status","sentinel"]){let E=y[N],D=w[N];E!==D&&a.push({path:v,field:N,from:E,to:D})}if(!x)for(let N of["value","meta"]){let E=y[N],D=w[N];lr(E,D)||a.push({path:v,field:N,from:E,to:D})}}let u=v=>`${v.from} ${v.to}`,c=new Set(e.edges.map(u)),h=new Set(n.edges.map(u)),p=n.edges.filter(v=>!c.has(u(v))),f=e.edges.filter(v=>!h.has(u(v))),l=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(v=>!l.has(v)).sort(),b=[...l].filter(v=>!g.has(v)).sort();return{nodesAdded:s,nodesRemoved:i,nodesChanged:a,versionChanges:d,edgesAdded:p,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:b}}};function Er(t,e){let n=ve.diff(t,e),r={};for(let o of n.nodesAdded){let s=e.nodes[o];s!=null&&(r[o]=s)}return{...n,nodesAddedFull:r}}function an(t,e,n,r={}){let o={paths:[],depths:new Map,truncated:!1};if(!e)return r.withDetail?o:[];if(!r.both&&n!=="upstream"&&n!=="downstream")throw new Error('reachable: direction must be "upstream" or "downstream"');let s=r.maxDepth;if(s!=null&&(!Number.isInteger(s)||s<0))throw new Error("reachable: maxDepth must be an integer >= 0");if(s===0)return r.withDetail?o:[];let i=new Map,a=new Map,d=new Map,u=new Map,c=new Set;for(let[y,w]of Object.entries(t.nodes)){if(!y)continue;c.add(y);let T=w.deps??[];i.set(y,T);for(let _ of T)_&&(c.add(_),a.has(_)||a.set(_,new Set),a.get(_).add(y))}for(let y of t.edges){if(y==null||typeof y!="object")continue;let w=typeof y.from=="string"?y.from:"",T=typeof y.to=="string"?y.to:"";!w||!T||(c.add(w),c.add(T),u.has(w)||u.set(w,new Set),u.get(w).add(T),d.has(T)||d.set(T,new Set),d.get(T).add(w))}if(!c.has(e))return r.withDetail?o:[];let h=r.both===!0,p=y=>{if(h){let x=i.get(y)??[],N=d.get(y),E=a.get(y),D=u.get(y),k=[...x];return N&&k.push(...N),E&&k.push(...E),D&&k.push(...D),k}if(n==="upstream"){let x=i.get(y)??[],N=d.get(y);return N?[...x,...N]:x}let w=a.get(y),T=u.get(y),_=w?[...w]:[];return T&&_.push(...T),_},f=new Set([e]),l=new Map,g=[{path:e,depth:0}],m=0,b=!1;for(;m<g.length;){let y=g[m++];if(s!=null&&y.depth>=s){p(y.path).length>0&&(b=!0);continue}for(let w of p(y.path))!w||f.has(w)||(f.add(w),l.set(w,y.depth+1),g.push({path:w,depth:y.depth+1}))}let v=[...l.keys()].sort((y,w)=>y<w?-1:y>w?1:0);return r.withDetail?{paths:v,depths:l,truncated:b}:v}function kr(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++){let r=t[n],o=e[n];if(r.path!==o.path||r.type!==o.type||r.status!==o.status||r.hop!==o.hop||r.dep_index!==o.dep_index||r.annotation!==o.annotation||r.value!==o.value||r.lastMutation!==o.lastMutation)return!1;let s=r.v,i=o.v;if(s!==i&&(s==null||i==null||s.id!==i.id||s.version!==i.version))return!1}return!0}te();ft();function fn(t,e){let n=t.cache??0;return n>=e?!1:(t.down([[F],[C,n+1]]),!0)}function pn(t,e,n){return{[t]:!0,[`${t}_type`]:e,...n??{}}}function We(t,e){return pn("reduction",t,e)}function Rr(t,e,n,r){if(e.length===0)throw new RangeError("funnel requires at least one source");if(n.length===0)throw new RangeError("funnel requires at least one stage");let o=new ve(t,r),s=e.length===1?e[0]:Pt(...e);o.add(s,{name:"merged"});let i="merged";for(let a=0;a<n.length;a++){let d=n[a],u=new ve(d.name);d.build(u);try{u.resolve("input")}catch{throw new Error(`funnel stage "${d.name}" must define an "input" node`)}try{u.resolve("output")}catch{throw new Error(`funnel stage "${d.name}" must define an "output" node`)}o.mount(d.name,u);let c=o.resolve(i),h=`${d.name}::input`,p=o.resolve(h),f=`__bridge_${i}\u2192${d.name}_input`,l=It([c],([g])=>{p.emit(g)},{name:f});o.add(l,{name:f}),o.addDisposer(oe(l)),i=`${d.name}::output`}return o}function Sr(t,e,n,r){let o=r?.maxIterations??10,s=`__feedback_${e}`,i=re(0,{meta:We("feedback_counter",{maxIterations:o,feedbackFrom:e,feedbackTo:n})});t.add(i,{name:s});let a=t.resolve(e),d=t.resolve(n),u=`__feedback_effect_${e}`,c=ne([],(h,p)=>{let f=a.subscribe(l=>{for(let g of l){let m=g[0];if(m===C){let b=g[1];if(b==null)return;fe(()=>{fn(i,o)&&d.emit(b)})}else if(m===V||m===M){let b=m===M&&g.length>1?[M,g[1]]:[m];i.down([b])}}});return()=>f()},{name:u,describeKind:"effect",meta:{...We("feedback_effect",{feedbackFrom:e,feedbackTo:n}),_internal:!0}});return t.add(c,{name:u}),t.addDisposer(oe(c)),t}function Dr(t,e,n){if(e.length===0)throw new RangeError("budgetGate requires at least one constraint");let r=e.map(f=>f.node),o=[t,...r],s=[],i=!1,a=!1,d=Symbol("budget-gate"),u=new Array(e.length);function c(){return e.every((f,l)=>f.check(u[l]))}function h(f){for(;s.length>0&&c();){let l=s[0];s=s.slice(1),f.emit(l)}s.length===0&&a&&(a=!1,f.down([[B]]))}return ne([],(f,l)=>{for(let m=0;m<e.length;m++)u[m]=e[m].node.cache;let g=[];for(let m=0;m<o.length;m++){let b=o[m];g.push(b.subscribe(v=>{for(let y of v)p(y,m,l)}))}return()=>{for(let m of g)m()}},{...n,describeKind:"derived",meta:We("budget_gate",n?.meta)});function p(f,l,g){let m=f[0];if(l===0){if(m===C)return c()&&s.length===0?g.emit(f[1]):(s.push(f[1]),i||(i=!0,g.up([[K,d]]))),!0;if(m===F)return g.down([[F]]),!0;if(m===B)return s.length===0?g.down([[B]]):a=!0,!0;if(m===V||m===M){for(let b of s)g.emit(b);return s=[],a=!1,i&&(i=!1,g.up([[Z,d]])),g.down([f]),!0}return!1}return m===C&&(u[l-1]=f[1]),m===C||m===B?(c()&&s.length>0?(h(g),s.length===0&&i&&(i=!1,g.up([[Z,d]]))):!c()&&!i&&s.length>0&&(i=!0,g.up([[K,d]])),!0):m===F?!0:m===M?(g.down([f]),!0):m===V}}function Ar(t,e,n){if(t.length===0)throw new RangeError("scorer requires at least one source");if(t.length!==e.length)throw new RangeError("scorer requires the same number of sources and weights");let r=[...t,...e],o=t.length,s=n?.scoreFns;return de(r,i=>{let a=i.slice(0,o),d=i.slice(o),u=[],c=0;for(let h=0;h<o;h++){let p=a[h]??0,f=d[h]??0,g=(s?.[h]?s[h](p):p)*f;u.push(g),c+=g}return{value:a,score:c,breakdown:u}},{...n?{equals:n.equals,resubscribable:n.resubscribable,resetOnTeardown:n.resetOnTeardown}:{},describeKind:"derived",meta:We("scorer",n?.meta)})}function Mr(t){let e=$t({name:t?.name??"effectiveness-entries"}),n=de([e.entries],([i])=>new Map(i),{name:`${t?.name??"effectiveness"}-snapshot`,equals:(i,a)=>{let d=i,u=a;if(d.size!==u.size)return!1;for(let[c,h]of d){let p=u.get(c);if(!p||h.attempts!==p.attempts||h.successes!==p.successes)return!1}return!0}});function r(i,a){let d=e.get(i),u=(d?.attempts??0)+1,c=(d?.successes??0)+(a?1:0);e.set(i,{key:i,attempts:u,successes:c,successRate:c/u})}function o(i){return e.get(i)}let s=oe(n);return{node:n,record:r,lookup:o,dispose:()=>s()}}0&&(module.exports={budgetGate,effectivenessTracker,feedback,funnel,scorer});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../../node-BVV7G1bq.cjs';
|
|
2
|
-
import '../../graph-
|
|
3
|
-
export { B as BudgetConstraint, a as BudgetGateOptions, E as EffectivenessEntry, b as EffectivenessSnapshot, c as EffectivenessTrackerBundle, d as EffectivenessTrackerOptions, F as FeedbackOptions, e as FunnelOptions, f as FunnelStage, S as ScoredItem, g as ScorerOptions, h as StepRef, j as budgetGate, k as effectivenessTracker, l as feedback, m as funnel, s as scorer } from '../../index-
|
|
2
|
+
import '../../graph-CdJeX7O7.cjs';
|
|
3
|
+
export { B as BudgetConstraint, a as BudgetGateOptions, E as EffectivenessEntry, b as EffectivenessSnapshot, c as EffectivenessTrackerBundle, d as EffectivenessTrackerOptions, F as FeedbackOptions, e as FunnelOptions, f as FunnelStage, S as ScoredItem, g as ScorerOptions, h as StepRef, j as budgetGate, k as effectivenessTracker, l as feedback, m as funnel, s as scorer } from '../../index-BwdPDWI4.cjs';
|
|
4
4
|
import '../../meta-COtmHLwT.cjs';
|
|
5
5
|
import '../../extra/storage-core.cjs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../../node-BVV7G1bq.js';
|
|
2
|
-
import '../../graph-
|
|
3
|
-
export { B as BudgetConstraint, a as BudgetGateOptions, E as EffectivenessEntry, b as EffectivenessSnapshot, c as EffectivenessTrackerBundle, d as EffectivenessTrackerOptions, F as FeedbackOptions, e as FunnelOptions, f as FunnelStage, S as ScoredItem, g as ScorerOptions, h as StepRef, j as budgetGate, k as effectivenessTracker, l as feedback, m as funnel, s as scorer } from '../../index-
|
|
2
|
+
import '../../graph-BOhEGJ6E.js';
|
|
3
|
+
export { B as BudgetConstraint, a as BudgetGateOptions, E as EffectivenessEntry, b as EffectivenessSnapshot, c as EffectivenessTrackerBundle, d as EffectivenessTrackerOptions, F as FeedbackOptions, e as FunnelOptions, f as FunnelStage, S as ScoredItem, g as ScorerOptions, h as StepRef, j as budgetGate, k as effectivenessTracker, l as feedback, m as funnel, s as scorer } from '../../index-Dp_pS7Bw.js';
|
|
4
4
|
import '../../meta-BMwx3ExI.js';
|
|
5
5
|
import '../../extra/storage-core.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"../../chunk-
|
|
1
|
+
import{a,b,c,d,e}from"../../chunk-WF3V5X2L.js";import"../../chunk-K54OKWNY.js";import"../../chunk-LWGLBCMU.js";import"../../chunk-4JBKKUCJ.js";import"../../chunk-SGS4OJGS.js";import"../../chunk-ESMPEKEV.js";import"../../chunk-N2KKISCE.js";import"../../chunk-WQ7I7JVU.js";import"../../chunk-4VVTGLXJ.js";import"../../chunk-UMH3HSP7.js";import"../../chunk-7AJKUA36.js";import"../../chunk-CK2E7BTU.js";import"../../chunk-QYADASLV.js";export{c as budgetGate,e as effectivenessTracker,b as feedback,a as funnel,d as scorer};
|