@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.
Files changed (177) hide show
  1. package/dist/chunk-2JNT5NDF.js +61 -0
  2. package/dist/{chunk-KN4Q5MQO.js → chunk-2RH4QNDQ.js} +1 -1
  3. package/dist/chunk-4JBKKUCJ.js +7 -0
  4. package/dist/{chunk-WLPVGXQ6.js → chunk-4YGJ7KZ6.js} +1 -1
  5. package/dist/{chunk-3Q2WXM6X.js → chunk-5PBXUVHI.js} +1 -1
  6. package/dist/{chunk-WYJTXYWX.js → chunk-7EMUF2RY.js} +1 -1
  7. package/dist/chunk-7JZ3YORY.js +80 -0
  8. package/dist/{chunk-I4U3TPK2.js → chunk-7QS77X6G.js} +1 -1
  9. package/dist/{chunk-ZM7C2FUM.js → chunk-BU4SUZSA.js} +1 -1
  10. package/dist/{chunk-GF5T7PGC.js → chunk-CNXUW2CU.js} +1 -1
  11. package/dist/{chunk-Z3UWIJ3A.js → chunk-EIFHFDFD.js} +1 -1
  12. package/dist/{chunk-3JRKP4BH.js → chunk-JAHAJU4G.js} +1 -1
  13. package/dist/{chunk-4ZPO2EL5.js → chunk-JYMNVEH6.js} +1 -1
  14. package/dist/{chunk-4KAUNEKV.js → chunk-KD3IYBTD.js} +1 -1
  15. package/dist/{chunk-X2VHDT26.js → chunk-LG73TUF4.js} +2 -2
  16. package/dist/{chunk-JXRZXP3N.js → chunk-LJGPOJHS.js} +1 -1
  17. package/dist/{chunk-YQJPYEAL.js → chunk-M2VFLRPJ.js} +1 -1
  18. package/dist/{chunk-7EQPXQ7H.js → chunk-MFNOZ5E6.js} +1 -1
  19. package/dist/{chunk-YZ6VYLFD.js → chunk-PWKLZ2XU.js} +1 -1
  20. package/dist/{chunk-OKQUPJRY.js → chunk-TOCCHQI6.js} +1 -1
  21. package/dist/{chunk-PZP4MEXK.js → chunk-UXEB35L4.js} +1 -1
  22. package/dist/{chunk-EBQ6FXKW.js → chunk-VXJX3ZZP.js} +1 -1
  23. package/dist/{chunk-7EJTWGKW.js → chunk-WE32AFFA.js} +1 -1
  24. package/dist/{chunk-JMGGCSIC.js → chunk-WF3V5X2L.js} +1 -1
  25. package/dist/{chunk-YZKGGMPT.js → chunk-X4OOM6QU.js} +1 -1
  26. package/dist/{chunk-5LJAQTSS.js → chunk-ZWETYYQG.js} +1 -1
  27. package/dist/compat/index.cjs +1 -1
  28. package/dist/compat/index.d.cts +5 -5
  29. package/dist/compat/index.d.ts +5 -5
  30. package/dist/compat/index.js +1 -1
  31. package/dist/compat/nestjs/index.cjs +1 -1
  32. package/dist/compat/nestjs/index.d.cts +3 -3
  33. package/dist/compat/nestjs/index.d.ts +3 -3
  34. package/dist/compat/nestjs/index.js +1 -1
  35. package/dist/compat/zustand/index.cjs +1 -1
  36. package/dist/compat/zustand/index.d.cts +2 -2
  37. package/dist/compat/zustand/index.d.ts +2 -2
  38. package/dist/compat/zustand/index.js +1 -1
  39. package/dist/extra/index.cjs +1 -1
  40. package/dist/extra/index.d.cts +2 -2
  41. package/dist/extra/index.d.ts +2 -2
  42. package/dist/extra/index.js +1 -1
  43. package/dist/graph/index.cjs +1 -1
  44. package/dist/graph/index.d.cts +3 -3
  45. package/dist/graph/index.d.ts +3 -3
  46. package/dist/graph/index.js +1 -1
  47. package/dist/{graph-CWeI0aHd.d.ts → graph-BOhEGJ6E.d.ts} +10 -0
  48. package/dist/{graph-C4Uxwv0T.d.cts → graph-CdJeX7O7.d.cts} +10 -0
  49. package/dist/{index-B-z8WaSd.d.cts → index-BDLy6CQ9.d.cts} +1 -1
  50. package/dist/{index-iBp74eGU.d.cts → index-BJDXj9Wf.d.cts} +2 -2
  51. package/dist/{index-BBINVimG.d.ts → index-BUZPTPSQ.d.ts} +2 -2
  52. package/dist/{index-DnrZghBB.d.ts → index-BbcSZCAG.d.ts} +1 -1
  53. package/dist/{index-lKuLYmHO.d.cts → index-BiGeETJs.d.cts} +1 -1
  54. package/dist/{index-Dm3_D5Ta.d.cts → index-BmZb8fNF.d.cts} +2 -2
  55. package/dist/{index-Docdiu9a.d.ts → index-Bnmttu35.d.ts} +1 -1
  56. package/dist/{index-CZChc85Q.d.cts → index-BuN2wGJs.d.cts} +297 -22
  57. package/dist/{index-Cy7eFeIX.d.cts → index-BwdPDWI4.d.cts} +1 -1
  58. package/dist/{index-DylQCKEL.d.cts → index-BzxU4yhV.d.cts} +11 -2
  59. package/dist/{index-D9Y_u6BG.d.cts → index-C-Gsh-0a.d.cts} +2 -2
  60. package/dist/{index-DD7RhHNJ.d.cts → index-C22aTC1X.d.cts} +4 -4
  61. package/dist/{index-yIdWFo2b.d.cts → index-C4QTaDli.d.cts} +2 -2
  62. package/dist/{index-CJymKyzT.d.ts → index-C7RqYbOZ.d.ts} +1 -1
  63. package/dist/{index-C5Ghnp5B.d.ts → index-C9qCLIN4.d.ts} +2 -2
  64. package/dist/{index-DVNLe3pS.d.cts → index-CCdg0JLX.d.cts} +1 -1
  65. package/dist/{index-B5iVOD7w.d.ts → index-CEoU-r-g.d.ts} +2 -2
  66. package/dist/{index-CfFYyLR8.d.ts → index-CHfBm51k.d.ts} +11 -2
  67. package/dist/{index-BXzl1NDD.d.ts → index-CNyiYQWF.d.ts} +4 -4
  68. package/dist/{index-C6NBfXj-.d.ts → index-CVevMZ0n.d.ts} +2 -2
  69. package/dist/{index-DGb1awva.d.ts → index-CZUzi6Dy.d.ts} +2 -2
  70. package/dist/{index-FrYrV-Vf.d.ts → index-Ckl03Q0s.d.ts} +1 -1
  71. package/dist/{index-Bvi5uJxX.d.ts → index-CmSjld-4.d.ts} +1 -1
  72. package/dist/{index-9iguV3bF.d.cts → index-CnjUhRbs.d.cts} +2 -2
  73. package/dist/{index-C98oJsEs.d.cts → index-D3HcdZ4d.d.cts} +1 -1
  74. package/dist/{index-IZ3l_vQ9.d.ts → index-DD1czHj3.d.ts} +1 -1
  75. package/dist/{index-gJQqJTKx.d.cts → index-DNhTQReY.d.cts} +1 -1
  76. package/dist/{index-UZO988ox.d.cts → index-DSawGt8n.d.cts} +2 -2
  77. package/dist/{index-CcpEvuPl.d.cts → index-DUkuH3jP.d.cts} +1 -1
  78. package/dist/{index-CRAkoq-y.d.cts → index-DY2QbdoP.d.cts} +1 -1
  79. package/dist/{index-CvS9IuTG.d.ts → index-Dbmj0iYR.d.ts} +1 -1
  80. package/dist/{index-Bd6oFZqO.d.ts → index-DhlAMlm9.d.ts} +297 -22
  81. package/dist/{index-BMe3pCom.d.cts → index-DlGaEBW5.d.cts} +2 -2
  82. package/dist/{index-CotRMjtJ.d.ts → index-Dp_pS7Bw.d.ts} +1 -1
  83. package/dist/{index-DxMS0cHM.d.ts → index-Dxk-pUQI.d.ts} +2 -2
  84. package/dist/{index-DBQUKh59.d.cts → index-EGjF6iSY.d.cts} +3 -3
  85. package/dist/{index-D9HrBx2J.d.ts → index-LGzAYqdR.d.ts} +1 -1
  86. package/dist/{index-DR3gf_DG.d.cts → index-LzCJ0kMT.d.cts} +2 -2
  87. package/dist/{index-RQg6lTrN.d.ts → index-MV2yGIAq.d.ts} +2 -2
  88. package/dist/{index-Bs3-LC83.d.cts → index-_BXz9K7b.d.cts} +1 -1
  89. package/dist/{index-SSGqF8mI.d.cts → index-aBqZUx3B.d.cts} +1 -1
  90. package/dist/{index-CFW32Dy1.d.ts → index-eYHRkoK-.d.ts} +1 -1
  91. package/dist/{index-CwhcFzTA.d.ts → index-gXTVbSax.d.ts} +2 -2
  92. package/dist/{index-D-kHVedZ.d.cts → index-j33Lfb1G.d.cts} +22 -1
  93. package/dist/{index-BEpRsvhg.d.ts → index-lpGUhTBn.d.ts} +3 -3
  94. package/dist/{index-CcS0t-l2.d.ts → index-zMQIQuDu.d.ts} +22 -1
  95. package/dist/index.cjs +53 -50
  96. package/dist/index.d.cts +26 -26
  97. package/dist/index.d.ts +26 -26
  98. package/dist/index.js +1 -1
  99. package/dist/patterns/ai/index.cjs +21 -18
  100. package/dist/patterns/ai/index.d.cts +6 -6
  101. package/dist/patterns/ai/index.d.ts +6 -6
  102. package/dist/patterns/ai/index.js +1 -1
  103. package/dist/patterns/audit/index.cjs +1 -1
  104. package/dist/patterns/audit/index.d.cts +3 -3
  105. package/dist/patterns/audit/index.d.ts +3 -3
  106. package/dist/patterns/audit/index.js +1 -1
  107. package/dist/patterns/cqrs/index.cjs +1 -1
  108. package/dist/patterns/cqrs/index.d.cts +2 -2
  109. package/dist/patterns/cqrs/index.d.ts +2 -2
  110. package/dist/patterns/cqrs/index.js +1 -1
  111. package/dist/patterns/demo-shell/index.cjs +1 -1
  112. package/dist/patterns/demo-shell/index.d.cts +3 -3
  113. package/dist/patterns/demo-shell/index.d.ts +3 -3
  114. package/dist/patterns/demo-shell/index.js +1 -1
  115. package/dist/patterns/domain-templates/index.cjs +5 -5
  116. package/dist/patterns/domain-templates/index.d.cts +2 -2
  117. package/dist/patterns/domain-templates/index.d.ts +2 -2
  118. package/dist/patterns/domain-templates/index.js +1 -1
  119. package/dist/patterns/graphspec/index.cjs +27 -25
  120. package/dist/patterns/graphspec/index.d.cts +2 -2
  121. package/dist/patterns/graphspec/index.d.ts +2 -2
  122. package/dist/patterns/graphspec/index.js +1 -1
  123. package/dist/patterns/guarded-execution/index.cjs +5 -5
  124. package/dist/patterns/guarded-execution/index.d.cts +4 -4
  125. package/dist/patterns/guarded-execution/index.d.ts +4 -4
  126. package/dist/patterns/guarded-execution/index.js +1 -1
  127. package/dist/patterns/harness/index.cjs +12 -11
  128. package/dist/patterns/harness/index.d.cts +5 -5
  129. package/dist/patterns/harness/index.d.ts +5 -5
  130. package/dist/patterns/harness/index.js +1 -1
  131. package/dist/patterns/job-queue/index.cjs +1 -1
  132. package/dist/patterns/job-queue/index.d.cts +2 -2
  133. package/dist/patterns/job-queue/index.d.ts +2 -2
  134. package/dist/patterns/job-queue/index.js +1 -1
  135. package/dist/patterns/lens/index.cjs +1 -1
  136. package/dist/patterns/lens/index.d.cts +3 -3
  137. package/dist/patterns/lens/index.d.ts +3 -3
  138. package/dist/patterns/lens/index.js +1 -1
  139. package/dist/patterns/memory/index.cjs +1 -1
  140. package/dist/patterns/memory/index.d.cts +2 -2
  141. package/dist/patterns/memory/index.d.ts +2 -2
  142. package/dist/patterns/memory/index.js +1 -1
  143. package/dist/patterns/messaging/index.cjs +1 -1
  144. package/dist/patterns/messaging/index.d.cts +2 -2
  145. package/dist/patterns/messaging/index.d.ts +2 -2
  146. package/dist/patterns/messaging/index.js +1 -1
  147. package/dist/patterns/orchestration/index.cjs +7 -7
  148. package/dist/patterns/orchestration/index.d.cts +2 -2
  149. package/dist/patterns/orchestration/index.d.ts +2 -2
  150. package/dist/patterns/orchestration/index.js +1 -1
  151. package/dist/patterns/reactive-layout/index.cjs +1 -1
  152. package/dist/patterns/reactive-layout/index.d.cts +3 -3
  153. package/dist/patterns/reactive-layout/index.d.ts +3 -3
  154. package/dist/patterns/reactive-layout/index.js +1 -1
  155. package/dist/patterns/reduction/index.cjs +1 -1
  156. package/dist/patterns/reduction/index.d.cts +2 -2
  157. package/dist/patterns/reduction/index.d.ts +2 -2
  158. package/dist/patterns/reduction/index.js +1 -1
  159. package/dist/patterns/refine-loop/index.cjs +3 -3
  160. package/dist/patterns/refine-loop/index.d.cts +3 -3
  161. package/dist/patterns/refine-loop/index.d.ts +3 -3
  162. package/dist/patterns/refine-loop/index.js +1 -1
  163. package/dist/patterns/resilient-pipeline/index.d.cts +3 -3
  164. package/dist/patterns/resilient-pipeline/index.d.ts +3 -3
  165. package/dist/patterns/resilient-pipeline/index.js +1 -1
  166. package/dist/patterns/surface/index.cjs +15 -13
  167. package/dist/patterns/surface/index.d.cts +3 -3
  168. package/dist/patterns/surface/index.d.ts +3 -3
  169. package/dist/patterns/surface/index.js +1 -1
  170. package/dist/{reactive-layout-BAr6-_o5.d.ts → reactive-layout-Bq0rA2Wb.d.ts} +1 -1
  171. package/dist/{reactive-layout-5oEn8lHM.d.cts → reactive-layout-Dhhe54Oj.d.cts} +1 -1
  172. package/dist/{topology-tree-CVREibAc.d.cts → topology-tree-CpSjvIXp.d.cts} +1 -1
  173. package/dist/{topology-tree-CkjojcB6.d.ts → topology-tree-DAbCV2Yw.d.ts} +1 -1
  174. package/package.json +1 -1
  175. package/dist/chunk-ASDKRNOJ.js +0 -60
  176. package/dist/chunk-PSQNYY72.js +0 -7
  177. package/dist/chunk-XEFAMCEA.js +0 -78
@@ -4,5 +4,5 @@
4
4
  `)}function nn(t){if(t.version!==ve)throw new Error(`unsupported snapshot version ${String(t.version)} (expected ${ve})`);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 ar(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,u=s.constructor;if(a!==u)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 h=s;if(o.length!==h.length)return!1;for(let p=0;p<o.length;p++)if(!r(o[p],h[p]))return!1;return!0}if(o instanceof Map){let h=s;if(o.size!==h.size)return!1;for(let[p,c]of o)if(!h.has(p)||!r(c,h.get(p)))return!1;return!0}if(o instanceof Set){let h=s;if(o.size!==h.size)return!1;for(let p of o){let c=!1;for(let m of h)if(r(p,m)){c=!0;break}if(!c)return!1}return!0}if(ArrayBuffer.isView(o)){let h=o,p=s;if(h.length!==p.length)return!1;for(let c=0;c<h.length;c++)if(h[c]!==p[c])return!1;return!0}let l=Object.keys(o),d=Object.keys(s);if(l.length!==d.length)return!1;let f=new Set(d);for(let h of l)if(!f.has(h)||!r(o[h],s[h]))return!1;return!0};return r(t,e)}function mt(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(mt);let e=t,n=Object.keys(e).sort(),r={};for(let o of n)r[o]=mt(e[o]);return r}function ur(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function lr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function dr(t){return t==="TD"?"down":t==="BT"?"up":t==="RL"?"left":"right"}function on(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 an(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 cr(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(mt(i),null,e.indent??2);return e.logger?.(a),a}function fr(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}): ${Je(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 un(t,e){let n=an(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}["${ur(i)}"]`)}for(let[i,a]of on(t)){let u=o.get(i),l=o.get(a);!u||!l||s.push(` ${u} --> ${l}`)}return s.join(`
6
6
  `)}function hr(t,e){let n=un(t,e);return pr(n)}function pr(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 l=0;l<i.length;l++)a+=String.fromCharCode(i[l]);return`https://mermaid.live/edit#base64:${globalThis.btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}`}function gr(t,e){let n=an(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: ${dr(n)}`];for(let i of r){let a=o.get(i);s.push(`${a}: "${lr(i)}"`)}for(let[i,a]of on(t)){let u=o.get(i),l=o.get(a);!u||!l||s.push(`${u} -> ${l}`)}return s.join(`
7
- `)}function mr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ye(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+=mr(r)}return e+="$",new RegExp(e)}var br={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"},yr={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Je(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 vr(t){return t==="none"?yr:t==="ansi"||t==null?br:{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 rn(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 xr(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 gt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(P))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${P}' (path separator)`);if(t===se)throw new Error(`Graph "${e}": ${n} name "${se}" is reserved for meta companion paths`);xr(t,e,n)}function wr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(P);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function _r(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 ln(t){for(let e of t._mounts.values())ln(e);for(let e of t._nodes.values())try{e.down([[X]],{internal:!0})}catch{}}var Re=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(P))throw new Error(`Graph name must not contain '${P}' (got "${e}")`);if(e===se)throw new Error(`Graph name "${se}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??be,this._traceRing=new Ne(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=Lt(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(gt(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:ge()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof B&&n._applyVersioning(e)}remove(e){gt(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,u]of i)a.includes(`${P}${se}${P}`)||s.nodes.push(a);return s.nodes.sort(),s.mounts.push(e),s.mounts.push(...n._collectSubgraphs(`${e}${P}`)),this._mounts.delete(e),n._parent=void 0,ln(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([[X]],{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=Ye(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(P))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([[J,n]],{actor:r?.actor,internal:o,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);Ae(()=>{for(let[o,s]of r)this.set(o,s,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[ne]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let o=r?.internal===!0;this.node(e).down([[V,n]],{actor:r?.actor,internal:o,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[re]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[u,l]of this._nodes)r.set(l,u);let a=[];for(let[u,l]of this._nodes)if(l instanceof B)for(let d of l._deps){let f=r.get(d.node);f!=null&&a.push([f,u])}return a.sort((u,l)=>u[0]<l[0]?-1:u[0]>l[0]?1:u[1]<l[1]?-1:u[1]>l[1]?1:0),a}let o=[];this._collectObserveTargets("",o);let s=new Map;for(let[a,u]of o)s.set(u,a);let i=[];for(let[a,u]of o)if(u instanceof B)for(let l of u._deps){let d=s.get(l.node);d!=null&&i.push([d,a])}return i.sort((a,u)=>a[0]<u[0]?-1:a[0]>u[0]?1:a[1]<u[1]?-1:a[1]>u[1]?1:0),i}mount(e,n){if(gt(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=wr(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]===se)return this._resolveMetaChainFromNode(s,o,n.join(P));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(P)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(o.join(P))}_resolveMetaChainFromNode(e,n,r){let o=e,s=0,i=[...n];for(;s<i.length;){if(i[s]!==se)throw new Error(`Graph "${this.name}": expected ${se} segment in meta path "${r}"`);if(s+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${se} in "${r}"`);let a=i[s+1],u=o.meta[a];if(!u)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);o=u,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 u of this._mounts.values())u._signalDeliver(e,n,r,o);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=_r(e,this.config);for(let u of[...this._nodes.keys()].sort()){let l=this._nodes.get(u);if(!r.has(l)){r.add(l);try{l.down(e,i)}catch(d){if(d instanceof ee)throw d;o.push(d)}a.length!==0&&this._signalMetaSubtree(l,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(u){if(u instanceof ee)throw u;s.push(u)}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=ye(e?.detail,e?.fields),s=e?.format==="spec",i=s?ye("minimal"):o,a=[];this._collectObserveTargets("",a);let u=new Map;for(let[b,_]of a)u.set(_,b);let l=[];{let b=a.map(([,E])=>E),_=new Set(u.values()),k=0;for(;b.length>0;){let E=b.shift();if(E instanceof B)for(let A of E._deps){let N=A.node;if(u.has(N))continue;let D=N.name??"",R=D;if(!R||_.has(R))if(D){let $=2;for(;_.has(`${D}#${$}`);)$++;R=`${D}#${$}`}else for(R=`__internal__/${k++}`;_.has(R);)R=`__internal__/${k++}`;u.set(N,R),_.add(R),l.push([R,N]),b.push(N)}}}let d=[...a,...l],f={};for(let[b,_]of d){if(n!=null&&!_.allowsObserve(n))continue;let k=Ee(_,i),E=_ instanceof B?_._deps.map(R=>u.get(R.node)??R.node.name??""):[],{name:A,...N}=k,D={...N,deps:E};if(!s){let R=this._annotations.get(b);R!=null&&(D.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(b,D):R(D)))continue}else{let R=!0;for(let[$,U]of Object.entries(r)){let Z=$==="deps_includes"?"depsIncludes":$==="meta_has"?"metaHas":$;if(Z==="depsIncludes"){if(!D.deps.includes(String(U))){R=!1;break}continue}if(Z==="metaHas"){if(!Object.hasOwn(D.meta??{},String(U))){R=!1;break}continue}if(D[Z]!==U){R=!1;break}}if(!R)continue}f[b]=D}let h=new Set(Object.keys(f)),p=[];for(let[b,_]of d)if(_ instanceof B)for(let k of _._deps){let E=u.get(k.node);E!=null&&p.push([E,b])}p.sort((b,_)=>b[0]<_[0]?-1:b[0]>_[0]?1:b[1]<_[1]?-1:b[1]>_[1]?1:0);let c=p.map(([b,_])=>({from:b,to:_}));(n!=null||r!=null)&&(c=c.filter(b=>h.has(b.from)&&h.has(b.to)));let m=this._collectSubgraphs(""),w=n!=null||r!=null?m.filter(b=>{let _=`${b}${P}`;return[...h].some(k=>k===b||k.startsWith(_))}):m,v=this,y=e,x={name:this.name,nodes:f,edges:c,subgraphs:w,expand(b){let _={...y,format:void 0};return Array.isArray(b)?(_.fields=b,_.detail=void 0):(_.detail=b,_.fields=void 0),v.describe(_)}},T=e??{},g=T.format;return g==="json"?cr(x,T):g==="pretty"?fr(x,T):g==="mermaid"?un(x,T):g==="mermaid-url"?hr(x,T):g==="d2"?gr(x,T):g==="ascii"?qt(x,T):x}_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}${P}`))}return n}resourceProfile(e){return en(this,e)}reachable(e,n,r={}){return r.withDetail===!0?sn(this.describe(),e,n,{...r,withDetail:!0}):sn(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,u]of Object.entries(o.nodes))u.lastMutation!=null&&i.set(a,u.lastMutation);return Yt(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=Y(o,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,l=()=>{a||u||(a=!0,Te(()=>{a=!1,!u&&(o+=1,s.emit(o))}))},d=i.onEvent(w=>{let v=w.type;v!=="data"&&v!=="error"&&v!=="complete"&&v!=="teardown"||l()}),f=[],h=new WeakSet,p=w=>{if(h.has(w)||u)return;h.add(w);let v=w.topology.subscribe(y=>{for(let x of y){if(x[0]!==J)continue;let T=x[1];if(l(),T.kind==="added"&&T.nodeKind==="mount"){let g=w._mounts.get(T.name);g!=null&&p(g)}}});f.push(v);for(let y of w._mounts.keys()){let x=w._mounts.get(y);x!=null&&p(x)}};p(this);let c;try{c=j([s],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(w,v)=>w===v})}catch(w){d();for(let v of f)v();throw i.dispose(),w}let m=ht(c);return{node:c,dispose(){u=!0,d();for(let w of f)w();f.length=0,i.dispose(),m()}}}_explainReactive(e,n,r){let o=0,s=Y(o,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,l=i.onEvent(p=>{let c=p.type;c!=="data"&&c!=="error"&&c!=="complete"&&c!=="teardown"||a||u||(a=!0,Te(()=>{a=!1,!u&&(o+=1,s.emit(o))}))}),d={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},f;try{f=j([s],()=>this._explainStatic(e,n,d),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(p,c)=>p.found===c.found&&p.reason===c.reason&&p.steps.length===c.steps.length&&kr(p.steps,c.steps)})}catch(p){throw l(),i.dispose(),p}let h=ht(f);return{node:f,dispose(){u=!0,l(),i.dispose(),h()}}}_pathsMatching(e){let n=Ye(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}${P}${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}${P}${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}${P}${se}${P}${o}`;r.push([i,s]),this._appendMetaObserveTargets(i,s,r)}}observe(e,n){let r=typeof e=="string",s=rn(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 d=e,f=this.resolve(d);if(a!=null&&!f.allowsObserve(a))throw new ee({actor:a,action:"observe",nodeName:d});return i?this._buildStructuredObserver([[d,f]],s,"one"):{subscribe(h){return f.subscribe(h)},up(h){try{f.up?.(h)}catch(p){if(p instanceof ee)return;throw p}}}}let u=[];this._collectObserveTargets("",u),u.sort((d,f)=>d[0]<f[0]?-1:d[0]>f[0]?1:0);let l=a==null?u:u.filter(([,d])=>d.allowsObserve(a));return i?this._buildStructuredObserver(l,s,"all"):{subscribe:d=>{let f=l.map(([h,p])=>p.subscribe(c=>{d(h,c)}));return()=>{for(let h of f)h()}},up:(d,f)=>{try{this.resolve(d).up?.(f)}catch(h){if(h instanceof ee)return;throw h}}}}_buildStructuredObserver(e,n,r){let o=r==="one"?e[0]?.[0]:void 0,s=i=>{if(r==="one"&&o!=null){let d=this.resolve(o);return this._buildStructuredObserver([[o,d]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((d,f)=>d[0]<f[0]?-1:d[0]>f[0]?1:0);let u=i.actor,l=u==null?a:a.filter(([,d])=>d.allowsObserve(u));return this._buildStructuredObserver(l,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",u=this.config.inspectorEnabled,l=(s||i)&&u,d=n.maxEvents,f=d!=null&&d>0?new Ne(d):null,h=[],p=new Set,c={},m=new Set,w=0,v=0,y=0,x=0,T=0,g=0,b=!1,_=!1,k=0,E=new Map,A=new Map,N=new Map,D=S=>{f?f.push(S):h.push(S);for(let G of p)G(S)},R=()=>o?{timestamp_ns:ge(),in_batch:Ce(),batch_id:k}:{},$=(S,G)=>{if(!(!l||!(S instanceof B)))return S._setInspectorHook(W=>{if(W.kind==="dep_message")E.set(S,W.depIndex);else if(W.kind==="run"){let te=W.batchData.map((L,K)=>L!=null&&L.length>0?L.at(-1):W.prevData[K]);A.set(S,te);let z=W.batchData.map(L=>L!=null?[...L]:void 0);N.set(S,z),i&&D({type:"derived",path:G,dep_values:te,dep_batches:z,...R()})}})},U=S=>{let G=E.get(S),W=A.get(S);if(!s||W==null)return{};let z=(G!=null&&G>=0&&S instanceof B?S._deps[G]:void 0)?.node,L=z?.v,K=N.get(S);return{trigger_dep_index:G,trigger_dep_name:z?.name,...L!=null?{trigger_version:{id:L.id,version:L.version}}:{},dep_values:[...W],...K!=null?{dep_batches:K}:{}}},Z=[],O=[];for(let[S,G]of e){let W=$(G,S);W&&Z.push(W),O.push(G.subscribe(te=>{k++;for(let z of te){let L=z[0],K=R();if(L===J){c[S]=z[1];let xe=G instanceof B?G.lastMutation?.actor??pe:pe;D({type:"data",path:S,data:z[1],actor:xe,...K,...U(G)})}else if(a)L===oe?w++:L===ie?v++:L===ne?y++:L===ae?x++:L===ue?T++:L===X?g++:L===re&&!m.has(S)?b=!0:L===V&&(_=!0,m.add(S));else if(L===oe)w++,D({type:"dirty",path:S,...K});else if(L===ie)v++,D({type:"resolved",path:S,...K,...U(G)});else if(L===ne)y++,D({type:"invalidate",path:S,...K});else if(L===ae)x++,D({type:"pause",path:S,lockId:z[1],...K});else if(L===ue)T++,D({type:"resume",path:S,lockId:z[1],...K});else if(L===re)m.has(S)||(b=!0),D({type:"complete",path:S,...K});else if(L===V){_=!0,m.add(S);let xe=G instanceof B?G.lastMutation?.actor??pe:pe;D({type:"error",path:S,data:z[1],actor:xe,...K})}else L===X&&(g++,D({type:"teardown",path:S,...K}))}}))}let M=!1,C=()=>{if(!M){M=!0;for(let S of O)S();for(let S of Z)S();for(let S of I)S({value:void 0,done:!0});I.length=0}},q=[],I=[];p.add(S=>{let G=I.shift();G?G({value:S,done:!1}):q.push(S)});let F={get values(){return c},get dirtyCount(){return w},get resolvedCount(){return v},get invalidateCount(){return y},get pauseCount(){return x},get resumeCount(){return T},get teardownCount(){return g},get events(){return f?f.toArray():[...h]},get anyCompletedCleanly(){return b},get anyErrored(){return _},get completedWithoutErrors(){return b&&!_},onEvent(S){return p.add(S),()=>p.delete(S)},dispose:C,expand(S){C();let G={...n};return typeof S=="string"?G.detail=S:Object.assign(G,S),r(rn(G))},[Symbol.asyncIterator](){return{next(){return q.length>0?Promise.resolve({value:q.shift(),done:!1}):M?Promise.resolve({value:void 0,done:!0}):new Promise(S=>I.push(S))},return(){return C(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(F,n),F}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let o=n.logger??(c=>console.log(c)),s=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=s==null&&i==null?()=>!0:c=>(s==null||s.has(c))&&(i==null||!i.has(c)),u=vr(n.theme),l=r==="stage-log"?ge():0,d=c=>c==null?"":n.stageLabels?.[c]??c,f=(c,m)=>c.length>m?`${c.slice(0,m-1)}\u2026`:c,h=c=>c.type==="data"||c.type==="error"?f(Je(c.data),120):"",p=c=>{if(r==="stage-log"){let _=(ge()-l)/1e9,k=d(c.path).padEnd(9);if(c.type==="data"){let E=h(c);return`[${_.toFixed(3)}s] ${k} \u2190${E?` ${E}`:""}`}if(c.type==="error"){let E=h(c);return`[${_.toFixed(3)}s] ${k} \u2717${E?` ${E}`:""}`}return c.type==="complete"?`[${_.toFixed(3)}s] ${k} \u25A0 complete`:`[${_.toFixed(3)}s] ${k} ${c.type}`}if(r==="json")try{return JSON.stringify(c)}catch{return JSON.stringify({type:c.type,path:c.path,data:"[unserializable]"})}let m=u[c.type]??"",w=c.path?`${u.path}${c.path}${u.reset} `:"",v=c.type==="data"||c.type==="error",y=c.type==="pause"||c.type==="resume",x=v?` ${Je(c.data)}`:y?` ${Je(c.lockId)}`:"",T=c.type==="data"||c.type==="resolved"||c.type==="derived"?c:void 0,g=T?.trigger_dep_name!=null?` <- ${T.trigger_dep_name}`:T?.trigger_dep_index!=null?` <- #${T.trigger_dep_index}`:"",b=c.in_batch?" [batch]":"";return`${w}${m}${c.type.toUpperCase()}${u.reset}${x}${g}${b}`};e.onEvent(c=>{a(c.type)&&o(p(c),c)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){tn(this._disposers,this.name),this.signal([[X]],{internal:!0}),tn(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:u,guard:l,...d}=r.nodes[a];o[a]=d}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 wt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??be,{codec:o,codecVersion:s,payload:i}=_t(e,r);return o.decode(i,s)}restore(e,n){if(nn(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=>Ye(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 u=this.tryResolve(s)?.v;if(u!=null&&u.id===i.v.id&&u.version===i.v.version)continue}try{this.set(s,i.value)}catch(a){n?.onError?.(s,a)}}}}}static fromSnapshot(e,n){nn(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 p of[...e.subgraphs].sort((c,m)=>{let w=c.split(P).length,v=m.split(P).length;return w!==v?w-v:c<m?-1:c>m?1:0})){let c=p.split(P),m=s;for(let w of c)m._mounts.has(w)||m.mount(w,new t(w)),m=m._mounts.get(w)}let i=o?Object.entries(o).map(([p,c])=>({re:Ye(p),factory:c})):[],a=p=>{for(let c of i)if(c.re.test(p))return c.factory},u=p=>{let c=p.split(P),m=c.pop();if(m==null||m.length===0)throw new Error(`invalid snapshot path "${p}"`);let w=s;for(let v of c){let y=w._mounts.get(v);if(!y)throw new Error(`unknown mount "${v}" in path "${p}"`);w=y}return[w,m]},l=Object.entries(e.nodes).filter(([p])=>!p.includes(`${P}${se}${P}`)).sort((p,c)=>p[0]<c[0]?-1:p[0]>c[0]?1:0),d=new Map(l),f=new Map,h=!0;for(;d.size>0&&h;){h=!1;for(let[p,c]of[...d.entries()]){let m=c?.deps??[];if(!m.every(g=>f.has(g)))continue;let[w,v]=u(p),y={...c?.meta??{}},x=a(p),T;if(c?.type==="state")T=Y(c.value,{meta:y});else{if(x==null)continue;T=x(v,{path:p,type:c.type,value:c.value,meta:y,deps:m,resolvedDeps:m.map(g=>f.get(g))})}w.add(T,{name:v}),f.set(p,T),d.delete(p),h=!0}}if(d.size>0){let p=[...d.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${p}. 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(l=>({tier:l,debounceMs:Math.max(0,l.debounceMs??0),compactEvery:Math.max(1,l.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=(l,d)=>{if(l.disposed)return;let f=ir(d.nodes);if(l.lastSnapshot!=null&&f!==""&&f===l.lastFingerprint)return;let h=l.seq+1,p=Pe(),w=l.lastSnapshot==null||h%l.compactEvery===0?{mode:"full",snapshot:d,seq:h,timestamp_ns:p,format_version:ve}:{mode:"diff",diff:Tr(l.lastSnapshot,d),seq:h,timestamp_ns:p,format_version:ve};if(l.tier.filter&&!l.tier.filter(this.name,w))return;let v;try{v=l.tier.save(this.name,w)}catch(y){n.onError?.(y,l.tier);return}if(v&&typeof v.then=="function"){let T=(l.savePending??Promise.resolve()).then(()=>v,()=>v).then(()=>{l.disposed||(l.seq=h,l.lastSnapshot=d,l.lastFingerprint=f)},g=>{n.onError?.(g,l.tier)});l.savePending=T.finally(()=>{l.savePending===T&&(l.savePending=void 0)})}else l.seq=h,l.lastSnapshot=d,l.lastFingerprint=f},s=(l,d)=>{try{o(l,d)}catch(f){n.onError?.(f,l.tier)}},i=(l,d)=>{if(!d.some(c=>{let m=this.config.messageTier(c[0]);return m>=3&&m<5}))return;if(n.filter){let c=this.tryResolve(l);if(c==null)return;let m=Ee(c,ye("standard"));if(!n.filter(l,m))return}let h,p=()=>(h==null&&(h=this.snapshot()),h);for(let c of r)c.disposed||(c.debounceMs===0?s(c,p()):(c.timer==null&&(c.timer=new Ve),c.timer.start(c.debounceMs,()=>{c.disposed||s(c,this.snapshot())})))},a;if(n.paths!=null){let d=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(f=>{let h=this.tryResolve(f);return h==null?()=>{}:h.subscribe(p=>i(f,p))});a=()=>{for(let f of d)f()}}else a=this.observe().subscribe((l,d)=>i(l,d));let u=()=>{a();for(let l of r)l.disposed=!0,l.timer?.cancel();this._storageDisposers.delete(u)};return this._storageDisposers.add(u),{dispose:u}}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===ve&&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(u){r?.onError?.(u,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===ve&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(u){r?.onError?.(u,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:ge(),...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(y=>!r.has(y)).sort(),i=[...r].filter(y=>!o.has(y)).sort(),a=[],u=[];for(let y of r){if(!o.has(y))continue;let x=e.nodes[y],T=n.nodes[y],g=x.v,b=T.v;g!=null&&b!=null&&g.id===b.id&&g.version!==b.version&&u.push({path:y,id:g.id,from:g.version,to:b.version});let _=g!=null&&b!=null&&g.id===b.id&&g.version===b.version;for(let k of["type","status","sentinel"]){let E=x[k],A=T[k];E!==A&&a.push({path:y,field:k,from:E,to:A})}if(!_)for(let k of["value","meta"]){let E=x[k],A=T[k];ar(E,A)||a.push({path:y,field:k,from:E,to:A})}}let l=y=>`${y.from} ${y.to}`,d=new Set(e.edges.map(l)),f=new Set(n.edges.map(l)),h=n.edges.filter(y=>!d.has(l(y))),p=e.edges.filter(y=>!f.has(l(y))),c=new Set(e.subgraphs),m=new Set(n.subgraphs),w=[...m].filter(y=>!c.has(y)).sort(),v=[...c].filter(y=>!m.has(y)).sort();return{nodesAdded:s,nodesRemoved:i,nodesChanged:a,versionChanges:u,edgesAdded:h,edgesRemoved:p,subgraphsAdded:w,subgraphsRemoved:v}}};function Tr(t,e){let n=Re.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 sn(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,u=new Map,l=new Map,d=new Set;for(let[x,T]of Object.entries(t.nodes)){if(!x)continue;d.add(x);let g=T.deps??[];i.set(x,g);for(let b of g)b&&(d.add(b),a.has(b)||a.set(b,new Set),a.get(b).add(x))}for(let x of t.edges){if(x==null||typeof x!="object")continue;let T=typeof x.from=="string"?x.from:"",g=typeof x.to=="string"?x.to:"";!T||!g||(d.add(T),d.add(g),l.has(T)||l.set(T,new Set),l.get(T).add(g),u.has(g)||u.set(g,new Set),u.get(g).add(T))}if(!d.has(e))return r.withDetail?o:[];let f=r.both===!0,h=x=>{if(f){let _=i.get(x)??[],k=u.get(x),E=a.get(x),A=l.get(x),N=[..._];return k&&N.push(...k),E&&N.push(...E),A&&N.push(...A),N}if(n==="upstream"){let _=i.get(x)??[],k=u.get(x);return k?[..._,...k]:_}let T=a.get(x),g=l.get(x),b=T?[...T]:[];return g&&b.push(...g),b},p=new Set([e]),c=new Map,m=[{path:e,depth:0}],w=0,v=!1;for(;w<m.length;){let x=m[w++];if(s!=null&&x.depth>=s){h(x.path).length>0&&(v=!0);continue}for(let T of h(x.path))!T||p.has(T)||(p.add(T),c.set(T,x.depth+1),m.push({path:T,depth:x.depth+1}))}let y=[...c.keys()].sort((x,T)=>x<T?-1:x>T?1:0);return r.withDetail?{paths:y,depths:c,truncated:v}:y}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}function Sr(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 dn=new Set(["\uFF0C","\uFF0E","\uFF01","\uFF1A","\uFF1B","\uFF1F","\u3001","\u3002","\u30FB","\uFF09","\u3015","\u3009","\u300B","\u300D","\u300F","\u3011"]),Or=new Set([".",",","!","?",":",";",")","]","}","%",'"',"\u201D","\u2019","\xBB","\u203A","\u2026"]);function Er(t){return t.replace(/[\t\n\r\f ]+/g," ").replace(/^ | $/g,"")}function Nr(t){let e=new Intl.Segmenter(void 0,{granularity:"word"}),n=[];for(let r of e.segment(t)){let o=r.segment,s=r.isWordLike??!1,i=[],a=[],u=[],l="",d=null;for(let f of o){let h;f===" "?h="space":f==="\u200B"?h="zero-width-break":f==="\xAD"?h="soft-hyphen":f===`
7
+ `)}function mr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ye(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+=mr(r)}return e+="$",new RegExp(e)}var br={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"},yr={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Je(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 vr(t){return t==="none"?yr:t==="ansi"||t==null?br:{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 rn(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 xr(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 gt(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(P))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${P}' (path separator)`);if(t===se)throw new Error(`Graph "${e}": ${n} name "${se}" is reserved for meta companion paths`);xr(t,e,n)}function wr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(P);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function _r(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 ln(t){for(let e of t._mounts.values())ln(e);for(let e of t._nodes.values())try{e.down([[X]],{internal:!0})}catch{}}var Re=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(P))throw new Error(`Graph name must not contain '${P}' (got "${e}")`);if(e===se)throw new Error(`Graph name "${se}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??be,this._traceRing=new Ne(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=Lt(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(gt(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:ge()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof B&&n._applyVersioning(e)}remove(e){gt(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,u]of i)a.includes(`${P}${se}${P}`)||s.nodes.push(a);return s.nodes.sort(),s.mounts.push(e),s.mounts.push(...n._collectSubgraphs(`${e}${P}`)),this._mounts.delete(e),n._parent=void 0,ln(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([[X]],{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=Ye(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(P))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([[J,n]],{actor:r?.actor,internal:o,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);Ae(()=>{for(let[o,s]of r)this.set(o,s,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[ne]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let o=r?.internal===!0;this.node(e).down([[V,n]],{actor:r?.actor,internal:o,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[re]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[u,l]of this._nodes)r.set(l,u);let a=[];for(let[u,l]of this._nodes)if(l instanceof B)for(let d of l._deps){let f=r.get(d.node);f!=null&&a.push([f,u])}return a.sort((u,l)=>u[0]<l[0]?-1:u[0]>l[0]?1:u[1]<l[1]?-1:u[1]>l[1]?1:0),a}let o=[];this._collectObserveTargets("",o);let s=new Map;for(let[a,u]of o)s.set(u,a);let i=[];for(let[a,u]of o)if(u instanceof B)for(let l of u._deps){let d=s.get(l.node);d!=null&&i.push([d,a])}return i.sort((a,u)=>a[0]<u[0]?-1:a[0]>u[0]?1:a[1]<u[1]?-1:a[1]>u[1]?1:0),i}mount(e,n){if(gt(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=wr(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]===se)return this._resolveMetaChainFromNode(s,o,n.join(P));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(P)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(o.join(P))}_resolveMetaChainFromNode(e,n,r){let o=e,s=0,i=[...n];for(;s<i.length;){if(i[s]!==se)throw new Error(`Graph "${this.name}": expected ${se} segment in meta path "${r}"`);if(s+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${se} in "${r}"`);let a=i[s+1],u=o.meta[a];if(!u)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);o=u,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 u of this._mounts.values())u._signalDeliver(e,n,r,o);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=_r(e,this.config);for(let u of[...this._nodes.keys()].sort()){let l=this._nodes.get(u);if(!r.has(l)){r.add(l);try{l.down(e,i)}catch(d){if(d instanceof ee)throw d;o.push(d)}a.length!==0&&this._signalMetaSubtree(l,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(u){if(u instanceof ee)throw u;s.push(u)}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=ye(e?.detail,e?.fields),s=e?.format==="spec",i=s?ye("minimal"):o,a=[];this._collectObserveTargets("",a);let u=new Map;for(let[b,_]of a)u.set(_,b);let l=[];{let b=a.map(([,E])=>E),_=new Set(u.values()),k=0;for(;b.length>0;){let E=b.shift();if(E instanceof B)for(let A of E._deps){let N=A.node;if(u.has(N))continue;let D=N.name??"",R=D;if(!R||_.has(R))if(D){let $=2;for(;_.has(`${D}#${$}`);)$++;R=`${D}#${$}`}else for(R=`__internal__/${k++}`;_.has(R);)R=`__internal__/${k++}`;u.set(N,R),_.add(R),l.push([R,N]),b.push(N)}}}let d=[...a,...l],f={};for(let[b,_]of d){if(n!=null&&!_.allowsObserve(n))continue;let k=Ee(_,i),E=_ instanceof B?_._deps.map(R=>u.get(R.node)??R.node.name??""):[],{name:A,...N}=k,D={...N,deps:E};if(!s){let R=this._annotations.get(b);R!=null&&(D.annotation=R)}if(r!=null)if(typeof r=="function"){let R=r;if(!(R.length>=2?R(b,D):R(D)))continue}else{let R=!0;for(let[$,U]of Object.entries(r)){let Z=$==="deps_includes"?"depsIncludes":$==="meta_has"?"metaHas":$;if(Z==="depsIncludes"){if(!D.deps.includes(String(U))){R=!1;break}continue}if(Z==="metaHas"){if(!Object.hasOwn(D.meta??{},String(U))){R=!1;break}continue}if(D[Z]!==U){R=!1;break}}if(!R)continue}f[b]=D}let h=new Set(Object.keys(f)),p=[];for(let[b,_]of d)if(_ instanceof B)for(let k of _._deps){let E=u.get(k.node);E!=null&&p.push([E,b])}p.sort((b,_)=>b[0]<_[0]?-1:b[0]>_[0]?1:b[1]<_[1]?-1:b[1]>_[1]?1:0);let c=p.map(([b,_])=>({from:b,to:_}));(n!=null||r!=null)&&(c=c.filter(b=>h.has(b.from)&&h.has(b.to)));let m=this._collectSubgraphs(""),w=n!=null||r!=null?m.filter(b=>{let _=`${b}${P}`;return[...h].some(k=>k===b||k.startsWith(_))}):m,v=this,y=e,x={name:this.name,nodes:f,edges:c,subgraphs:w,expand(b){let _={...y,format:void 0};return Array.isArray(b)?(_.fields=b,_.detail=void 0):(_.detail=b,_.fields=void 0),v.describe(_)}},T=e??{},g=T.format;return g==="json"?cr(x,T):g==="pretty"?fr(x,T):g==="mermaid"?un(x,T):g==="mermaid-url"?hr(x,T):g==="d2"?gr(x,T):g==="ascii"?qt(x,T):x}_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}${P}`))}return n}resourceProfile(e){return en(this,e)}reachable(e,n,r={}){return r.withDetail===!0?sn(this.describe(),e,n,{...r,withDetail:!0}):sn(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,u]of Object.entries(o.nodes))u.lastMutation!=null&&i.set(a,u.lastMutation);return Yt(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=Y(o,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,l=()=>{a||u||(a=!0,Te(()=>{a=!1,!u&&(o+=1,s.emit(o))}))},d=i.onEvent(w=>{let v=w.type;v!=="data"&&v!=="error"&&v!=="complete"&&v!=="teardown"||l()}),f=[],h=new WeakSet,p=w=>{if(h.has(w)||u)return;h.add(w);let v=w.topology.subscribe(y=>{for(let x of y){if(x[0]!==J)continue;let T=x[1];if(l(),T.kind==="added"&&T.nodeKind==="mount"){let g=w._mounts.get(T.name);g!=null&&p(g)}}});f.push(v);for(let y of w._mounts.keys()){let x=w._mounts.get(y);x!=null&&p(x)}};p(this);let c;try{c=j([s],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(w,v)=>w===v})}catch(w){d();for(let v of f)v();throw i.dispose(),w}let m=ht(c);return{node:c,dispose(){u=!0,d();for(let w of f)w();f.length=0,i.dispose(),m()}}}_explainReactive(e,n,r){let o=0,s=Y(o,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,l=i.onEvent(p=>{let c=p.type;c!=="data"&&c!=="error"&&c!=="complete"&&c!=="teardown"||a||u||(a=!0,Te(()=>{a=!1,!u&&(o+=1,s.emit(o))}))}),d={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},f;try{f=j([s],()=>this._explainStatic(e,n,d),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(p,c)=>p.found===c.found&&p.reason===c.reason&&p.steps.length===c.steps.length&&kr(p.steps,c.steps)})}catch(p){throw l(),i.dispose(),p}let h=ht(f);return{node:f,dispose(){u=!0,l(),i.dispose(),h()}}}_pathsMatching(e){let n=Ye(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}${P}${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}${P}${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}${P}${se}${P}${o}`;r.push([i,s]),this._appendMetaObserveTargets(i,s,r)}}observe(e,n){let r=typeof e=="string",s=rn(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 d=e,f=this.resolve(d);if(a!=null&&!f.allowsObserve(a))throw new ee({actor:a,action:"observe",nodeName:d});return i?this._buildStructuredObserver([[d,f]],s,"one"):{subscribe(h){return f.subscribe(h)},up(h){try{f.up?.(h)}catch(p){if(p instanceof ee)return;throw p}}}}let u=[];this._collectObserveTargets("",u),u.sort((d,f)=>d[0]<f[0]?-1:d[0]>f[0]?1:0);let l=a==null?u:u.filter(([,d])=>d.allowsObserve(a));return i?this._buildStructuredObserver(l,s,"all"):{subscribe:d=>{let f=l.map(([h,p])=>p.subscribe(c=>{d(h,c)}));return()=>{for(let h of f)h()}},up:(d,f)=>{try{this.resolve(d).up?.(f)}catch(h){if(h instanceof ee)return;throw h}}}}_buildStructuredObserver(e,n,r){let o=r==="one"?e[0]?.[0]:void 0,s=i=>{if(r==="one"&&o!=null){let d=this.resolve(o);return this._buildStructuredObserver([[o,d]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((d,f)=>d[0]<f[0]?-1:d[0]>f[0]?1:0);let u=i.actor,l=u==null?a:a.filter(([,d])=>d.allowsObserve(u));return this._buildStructuredObserver(l,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",u=this.config.inspectorEnabled,l=(s||i)&&u,d=n.maxEvents,f=d!=null&&d>0?new Ne(d):null,h=[],p=new Set,c={},m=new Set,w=0,v=0,y=0,x=0,T=0,g=0,b=!1,_=!1,k=0,E=new Map,A=new Map,N=new Map,D=S=>{f?f.push(S):h.push(S);for(let G of p)G(S)},R=()=>o?{timestamp_ns:ge(),in_batch:Ce(),batch_id:k}:{},$=(S,G)=>{if(!(!l||!(S instanceof B)))return S._setInspectorHook(W=>{if(W.kind==="dep_message")E.set(S,W.depIndex);else if(W.kind==="run"){let te=W.batchData.map((L,K)=>L!=null&&L.length>0?L.at(-1):W.prevData[K]);A.set(S,te);let z=W.batchData.map(L=>L!=null?[...L]:void 0);N.set(S,z),i&&D({type:"derived",path:G,dep_values:te,dep_batches:z,...R()})}})},U=S=>{let G=E.get(S),W=A.get(S);if(!s||W==null)return{};let z=(G!=null&&G>=0&&S instanceof B?S._deps[G]:void 0)?.node,L=z?.v,K=N.get(S);return{trigger_dep_index:G,trigger_dep_name:z?.name,...L!=null?{trigger_version:{id:L.id,version:L.version}}:{},dep_values:[...W],...K!=null?{dep_batches:K}:{}}},Z=[],O=[];for(let[S,G]of e){let W=$(G,S);W&&Z.push(W),O.push(G.subscribe(te=>{k++;for(let z of te){let L=z[0],K=R();if(L===J){c[S]=z[1];let xe=G instanceof B?G.lastMutation?.actor??pe:pe;D({type:"data",path:S,data:z[1],actor:xe,...K,...U(G)})}else if(a)L===oe?w++:L===ie?v++:L===ne?y++:L===ae?x++:L===ue?T++:L===X?g++:L===re&&!m.has(S)?b=!0:L===V&&(_=!0,m.add(S));else if(L===oe)w++,D({type:"dirty",path:S,...K});else if(L===ie)v++,D({type:"resolved",path:S,...K,...U(G)});else if(L===ne)y++,D({type:"invalidate",path:S,...K});else if(L===ae)x++,D({type:"pause",path:S,lockId:z[1],...K});else if(L===ue)T++,D({type:"resume",path:S,lockId:z[1],...K});else if(L===re)m.has(S)||(b=!0),D({type:"complete",path:S,...K});else if(L===V){_=!0,m.add(S);let xe=G instanceof B?G.lastMutation?.actor??pe:pe;D({type:"error",path:S,data:z[1],actor:xe,...K})}else L===X&&(g++,D({type:"teardown",path:S,...K}))}}))}let M=!1,C=()=>{if(!M){M=!0;for(let S of O)S();for(let S of Z)S();for(let S of I)S({value:void 0,done:!0});I.length=0}},q=[],I=[];p.add(S=>{let G=I.shift();G?G({value:S,done:!1}):q.push(S)});let F={get values(){return c},get dirtyCount(){return w},get resolvedCount(){return v},get invalidateCount(){return y},get pauseCount(){return x},get resumeCount(){return T},get teardownCount(){return g},get events(){return f?f.toArray():[...h]},get anyCompletedCleanly(){return b},get anyErrored(){return _},get completedWithoutErrors(){return b&&!_},onEvent(S){return p.add(S),()=>p.delete(S)},dispose:C,expand(S){C();let G={...n};return typeof S=="string"?G.detail=S:Object.assign(G,S),r(rn(G))},[Symbol.asyncIterator](){return{next(){return q.length>0?Promise.resolve({value:q.shift(),done:!1}):M?Promise.resolve({value:void 0,done:!0}):new Promise(S=>I.push(S))},return(){return C(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(F,n),F}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let o=n.logger??(c=>console.log(c)),s=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=s==null&&i==null?()=>!0:c=>(s==null||s.has(c))&&(i==null||!i.has(c)),u=vr(n.theme),l=r==="stage-log"?ge():0,d=c=>c==null?"":n.stageLabels?.[c]??c,f=(c,m)=>c.length>m?`${c.slice(0,m-1)}\u2026`:c,h=c=>c.type==="data"||c.type==="error"?f(Je(c.data),120):"",p=c=>{if(r==="stage-log"){let _=(ge()-l)/1e9,k=d(c.path).padEnd(9);if(c.type==="data"){let E=h(c);return`[${_.toFixed(3)}s] ${k} \u2190${E?` ${E}`:""}`}if(c.type==="error"){let E=h(c);return`[${_.toFixed(3)}s] ${k} \u2717${E?` ${E}`:""}`}return c.type==="complete"?`[${_.toFixed(3)}s] ${k} \u25A0 complete`:`[${_.toFixed(3)}s] ${k} ${c.type}`}if(r==="json")try{return JSON.stringify(c)}catch{return JSON.stringify({type:c.type,path:c.path,data:"[unserializable]"})}let m=u[c.type]??"",w=c.path?`${u.path}${c.path}${u.reset} `:"",v=c.type==="data"||c.type==="error",y=c.type==="pause"||c.type==="resume",x=v?` ${Je(c.data)}`:y?` ${Je(c.lockId)}`:"",T=c.type==="data"||c.type==="resolved"||c.type==="derived"?c:void 0,g=T?.trigger_dep_name!=null?` <- ${T.trigger_dep_name}`:T?.trigger_dep_index!=null?` <- #${T.trigger_dep_index}`:"",b=c.in_batch?" [batch]":"";return`${w}${m}${c.type.toUpperCase()}${u.reset}${x}${g}${b}`};e.onEvent(c=>{a(c.type)&&o(p(c),c)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){tn(this._disposers,this.name),this.signal([[X]],{internal:!0}),tn(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:u,guard:l,...d}=r.nodes[a];o[a]=d}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 wt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??be,{codec:o,codecVersion:s,payload:i}=_t(e,r);return o.decode(i,s)}restore(e,n){if(nn(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=>Ye(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 u=this.tryResolve(s)?.v;if(u!=null&&u.id===i.v.id&&u.version===i.v.version)continue}try{this.set(s,i.value)}catch(a){n?.onError?.(s,a)}}}}}static fromSnapshot(e,n){nn(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 p of[...e.subgraphs].sort((c,m)=>{let w=c.split(P).length,v=m.split(P).length;return w!==v?w-v:c<m?-1:c>m?1:0})){let c=p.split(P),m=s;for(let w of c)m._mounts.has(w)||m.mount(w,new t(w)),m=m._mounts.get(w)}let i=o?Object.entries(o).map(([p,c])=>({re:Ye(p),factory:c})):[],a=p=>{for(let c of i)if(c.re.test(p))return c.factory},u=p=>{let c=p.split(P),m=c.pop();if(m==null||m.length===0)throw new Error(`invalid snapshot path "${p}"`);let w=s;for(let v of c){let y=w._mounts.get(v);if(!y)throw new Error(`unknown mount "${v}" in path "${p}"`);w=y}return[w,m]},l=Object.entries(e.nodes).filter(([p])=>!p.includes(`${P}${se}${P}`)).sort((p,c)=>p[0]<c[0]?-1:p[0]>c[0]?1:0),d=new Map(l),f=new Map,h=!0;for(;d.size>0&&h;){h=!1;for(let[p,c]of[...d.entries()]){let m=c?.deps??[];if(!m.every(g=>f.has(g)))continue;let[w,v]=u(p),y={...c?.meta??{}},x=a(p),T;if(c?.type==="state")T=Y(c.value,{meta:y});else{if(x==null)continue;T=x(v,{path:p,type:c.type,value:c.value,meta:y,deps:m,resolvedDeps:m.map(g=>f.get(g))})}w.add(T,{name:v}),f.set(p,T),d.delete(p),h=!0}}if(d.size>0){let p=[...d.keys()].sort().join(", ");throw new Error(`Graph.fromSnapshot could not reconstruct nodes without build callback: ${p}. 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(l=>({tier:l,debounceMs:Math.max(0,l.debounceMs??0),compactEvery:Math.max(1,l.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=(l,d)=>{if(l.disposed)return;let f=ir(d.nodes);if(l.lastSnapshot!=null&&f!==""&&f===l.lastFingerprint)return;let h=l.seq+1,p=Pe(),w=l.lastSnapshot==null||h%l.compactEvery===0?{mode:"full",snapshot:d,seq:h,timestamp_ns:p,format_version:ve}:{mode:"diff",diff:Tr(l.lastSnapshot,d),seq:h,timestamp_ns:p,format_version:ve};if(l.tier.filter&&!l.tier.filter(this.name,w))return;let v;try{v=l.tier.save(this.name,w)}catch(y){n.onError?.(y,l.tier);return}if(v&&typeof v.then=="function"){let T=(l.savePending??Promise.resolve()).then(()=>v,()=>v).then(()=>{l.disposed||(l.seq=h,l.lastSnapshot=d,l.lastFingerprint=f)},g=>{n.onError?.(g,l.tier)});l.savePending=T.finally(()=>{l.savePending===T&&(l.savePending=void 0)})}else l.seq=h,l.lastSnapshot=d,l.lastFingerprint=f},s=(l,d)=>{try{o(l,d)}catch(f){n.onError?.(f,l.tier)}},i=(l,d)=>{if(!d.some(c=>{let m=this.config.messageTier(c[0]);return m>=3&&m<5}))return;if(n.filter){let c=this.tryResolve(l);if(c==null)return;let m=Ee(c,ye("standard"));if(!n.filter(l,m))return}let h,p=()=>(h==null&&(h=this.snapshot()),h);for(let c of r)c.disposed||(c.debounceMs===0?s(c,p()):(c.timer==null&&(c.timer=new Ve),c.timer.start(c.debounceMs,()=>{c.disposed||s(c,this.snapshot())})))},a;if(n.paths!=null){let d=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(f=>{let h=this.tryResolve(f);return h==null?()=>{}:h.subscribe(p=>i(f,p))});a=()=>{for(let f of d)f()}}else a=this.observe().subscribe((l,d)=>i(l,d));let u=()=>{a();for(let l of r)l.disposed=!0,l.timer?.cancel();this._storageDisposers.delete(u)};return this._storageDisposers.add(u),{dispose:u}}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===ve&&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(u){r?.onError?.(u,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===ve&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(u){r?.onError?.(u,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:ge(),...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(y=>!r.has(y)).sort(),i=[...r].filter(y=>!o.has(y)).sort(),a=[],u=[];for(let y of r){if(!o.has(y))continue;let x=e.nodes[y],T=n.nodes[y],g=x.v,b=T.v;g!=null&&b!=null&&g.id===b.id&&g.version!==b.version&&u.push({path:y,id:g.id,from:g.version,to:b.version});let _=g!=null&&b!=null&&g.id===b.id&&g.version===b.version;for(let k of["type","status","sentinel"]){let E=x[k],A=T[k];E!==A&&a.push({path:y,field:k,from:E,to:A})}if(!_)for(let k of["value","meta"]){let E=x[k],A=T[k];ar(E,A)||a.push({path:y,field:k,from:E,to:A})}}let l=y=>`${y.from} ${y.to}`,d=new Set(e.edges.map(l)),f=new Set(n.edges.map(l)),h=n.edges.filter(y=>!d.has(l(y))),p=e.edges.filter(y=>!f.has(l(y))),c=new Set(e.subgraphs),m=new Set(n.subgraphs),w=[...m].filter(y=>!c.has(y)).sort(),v=[...c].filter(y=>!m.has(y)).sort();return{nodesAdded:s,nodesRemoved:i,nodesChanged:a,versionChanges:u,edgesAdded:h,edgesRemoved:p,subgraphsAdded:w,subgraphsRemoved:v}}};function Tr(t,e){let n=Re.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 sn(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,u=new Map,l=new Map,d=new Set;for(let[x,T]of Object.entries(t.nodes)){if(!x)continue;d.add(x);let g=T.deps??[];i.set(x,g);for(let b of g)b&&(d.add(b),a.has(b)||a.set(b,new Set),a.get(b).add(x))}for(let x of t.edges){if(x==null||typeof x!="object")continue;let T=typeof x.from=="string"?x.from:"",g=typeof x.to=="string"?x.to:"";!T||!g||(d.add(T),d.add(g),l.has(T)||l.set(T,new Set),l.get(T).add(g),u.has(g)||u.set(g,new Set),u.get(g).add(T))}if(!d.has(e))return r.withDetail?o:[];let f=r.both===!0,h=x=>{if(f){let _=i.get(x)??[],k=u.get(x),E=a.get(x),A=l.get(x),N=[..._];return k&&N.push(...k),E&&N.push(...E),A&&N.push(...A),N}if(n==="upstream"){let _=i.get(x)??[],k=u.get(x);return k?[..._,...k]:_}let T=a.get(x),g=l.get(x),b=T?[...T]:[];return g&&b.push(...g),b},p=new Set([e]),c=new Map,m=[{path:e,depth:0}],w=0,v=!1;for(;w<m.length;){let x=m[w++];if(s!=null&&x.depth>=s){h(x.path).length>0&&(v=!0);continue}for(let T of h(x.path))!T||p.has(T)||(p.add(T),c.set(T,x.depth+1),m.push({path:T,depth:x.depth+1}))}let y=[...c.keys()].sort((x,T)=>x<T?-1:x>T?1:0);return r.withDetail?{paths:y,depths:c,truncated:v}:y}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}function Sr(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 dn=new Set(["\uFF0C","\uFF0E","\uFF01","\uFF1A","\uFF1B","\uFF1F","\u3001","\u3002","\u30FB","\uFF09","\u3015","\u3009","\u300B","\u300D","\u300F","\u3011"]),Or=new Set([".",",","!","?",":",";",")","]","}","%",'"',"\u201D","\u2019","\xBB","\u203A","\u2026"]);function Er(t){return t.replace(/[\t\n\r\f ]+/g," ").replace(/^ | $/g,"")}function Nr(t){let e=new Intl.Segmenter(void 0,{granularity:"word"}),n=[];for(let r of e.segment(t)){let o=r.segment,s=r.isWordLike??!1,i=[],a=[],u=[],l="",d=null;for(let f of o){let h;f===" "?h="space":f==="\u200B"?h="zero-width-break":f==="\xAD"?h="soft-hyphen":f===`
8
8
  `?h="hard-break":h="text",d!==null&&h===d?l+=f:(d!==null&&(i.push(l),a.push(d==="text"&&s),u.push(d)),l=f,d=h)}d!==null&&(i.push(l),a.push(d==="text"&&s),u.push(d)),n.push({texts:i,isWordLike:a,kinds:u})}return n}function bt(t,e,n,r,o){let s=Er(t);if(s.length===0)return[];let i=Nr(s),a=new Intl.Segmenter(void 0,{granularity:"grapheme"}),u=[],l=[],d=[];for(let v of i)for(let y=0;y<v.texts.length;y++)u.push(v.texts[y]),l.push(v.kinds[y]),d.push(v.isWordLike[y]);let f=[],h=[],p=[];for(let v=0;v<u.length;v++){let y=u[v],x=l[v],T=d[v];if(x==="text"&&!T&&f.length>0&&h[h.length-1]==="text"&&y.length===1&&(Or.has(y)||dn.has(y))){f[f.length-1]+=y;continue}if(y==="-"&&f.length>0&&h[h.length-1]==="text"&&p[p.length-1]){f[f.length-1]+=y;continue}f.push(y),h.push(x),p.push(T)}let c=r.get(e);c||(c=new Map,r.set(e,c));function m(v){let y=c.get(v);if(y===void 0){o&&(o.misses+=1);let x=n.measureSegment(v,e).width;y=Number.isFinite(x)&&x>=0?x:0,c.set(v,y)}else o&&(o.hits+=1);return y}let w=[];for(let v=0;v<f.length;v++){let y=f[v],x=h[v];if(x!=="text"){w.push({text:y,width:x==="space"?m(" ")*y.length:0,kind:x,graphemeWidths:null});continue}if(Sr(y)){let b="";for(let _ of a.segment(y)){let k=_.segment;if(b.length>0&&dn.has(k)){b+=k;continue}if(b.length>0){let E=m(b);w.push({text:b,width:E,kind:"text",graphemeWidths:null})}b=k}if(b.length>0){let _=m(b);w.push({text:b,width:_,kind:"text",graphemeWidths:null})}continue}let T=m(y),g=null;if(p[v]&&y.length>1){let b=[];for(let _ of a.segment(y))b.push(m(_.segment));b.length>1&&(g=b)}w.push({text:y,width:T,kind:"text",graphemeWidths:g})}return w}function yt(t,e,n,r,o){if(t.length===0)return{lines:[],lineCount:0};let s=[],i=0,a=!1,u=0,l=0,d=0,f=0,h=-1,p=0,c=o.get(r);c||(c=new Map,o.set(r,c));let m=c.get("-");m===void 0&&(m=n.measureSegment("-",r).width,c.set("-",m));function w(g=d,b=f,_=i){let k="";for(let E=u;E<g;E++){let A=t[E];if(!(A.kind==="soft-hyphen"||A.kind==="hard-break"))if(E===u&&l>0&&A.graphemeWidths){let D=[...new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(A.text)].map(R=>R.segment);k+=D.slice(l).join("")}else k+=A.text}if(b>0&&g<t.length){let E=t[g],N=[...new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(E.text)].map(R=>R.segment),D=u===g?l:0;k+=N.slice(D,b).join("")}g>0&&t[g-1]?.kind==="soft-hyphen"&&!(u===g&&l>0)&&(k+="-"),s.push({text:k,width:_,startSegment:u,startGrapheme:l,endSegment:g,endGrapheme:b}),i=0,a=!1,h=-1,p=0}function v(g){return g==="space"||g==="zero-width-break"||g==="soft-hyphen"}function y(g,b,_){a=!0,u=g,l=b,d=g+1,f=0,i=_}function x(g,b,_){a=!0,u=g,l=b,d=g,f=b+1,i=_}for(let g=0;g<t.length;g++){let b=t[g];if(b.kind==="hard-break"){a?w():s.push({text:"",width:0,startSegment:g,startGrapheme:0,endSegment:g,endGrapheme:0}),u=g+1,l=0;continue}let _=b.width;if(!a){_>e&&b.graphemeWidths?T(g,0,b.graphemeWidths):y(g,0,_),v(b.kind)&&(h=g+1,p=b.kind==="space"?i-_:i);continue}let k=i+_;if(k>e+.005){if(v(b.kind)){i+=_,d=g+1,f=0,w(g+1,0,b.kind==="space"?i-_:i);continue}if(h>=0){w(h,0,p),g--;continue}if(_>e&&b.graphemeWidths){w(),T(g,0,b.graphemeWidths);continue}w(),g--;continue}i=k,d=g+1,f=0,v(b.kind)&&(h=g+1,p=b.kind==="space"?i-_:i)}return a&&w(),{lines:s,lineCount:s.length};function T(g,b,_){for(let k=b;k<_.length;k++){let E=_[k];if(!a){x(g,k,E);continue}i+E>e+.005?(w(),x(g,k,E)):(i+=E,d=g,f=k+1)}a&&d===g&&f===_.length&&(d=g+1,f=0)}}function De(t){return Math.max(0,Math.min(1,t))}function Rr(t){let e=De(t?.mainRatio??.65),n=De(t?.sideSplit??.5),r=Math.max(0,t?.viewportWidth??1280),o=t?.nodeRegistry??new Map,s=t?.adapter??null,i=t?.layoutFont??"14px monospace",a=t?.onHighlight,u=new Re("demo-shell"),l=Y(e,{name:"pane/main-ratio"}),d=Y(n,{name:"pane/side-split"}),f=Y(null,{name:"pane/fullscreen"}),h=Y(r,{name:"viewport/width"});u.add(l,{name:"pane/main-ratio"}),u.add(d,{name:"pane/side-split"}),u.add(f,{name:"pane/fullscreen"}),u.add(h,{name:"viewport/width"});let p=j([l,h,f],([O,M,C])=>{let q=O,I=M,F=C;return F==="main"?I:F==="graph"||F==="code"?0:Math.round(I*q)},{name:"pane/main-width"}),c=j([p,h,f],([O,M,C])=>{let q=C,I=M;return q==="main"?0:q==="graph"||q==="code"?I:I-O},{name:"pane/side-width"}),m=j([d,f],([O,M])=>{let C=M;return C==="graph"?1:C==="code"||C==="main"?0:De(O)},{name:"pane/graph-height-ratio"}),w=j([m,f],([O,M])=>{let C=M;return C==="code"?1:C==="graph"||C==="main"?0:1-O},{name:"pane/code-height-ratio"});u.add(p,{name:"pane/main-width"}),u.add(c,{name:"pane/side-width"}),u.add(m,{name:"pane/graph-height-ratio"}),u.add(w,{name:"pane/code-height-ratio"});let v=Y(null,{name:"demo/graph-ref"}),y=Y(0,{name:"demo/graph-tick"});u.add(v,{name:"demo/graph-ref"}),u.add(y,{name:"demo/graph-tick"});let x=j([v,y],([O,M])=>{let C=O;return C?C.describe({format:"mermaid"}):""},{name:"graph/mermaid"}),T=j([v,y],([O,M])=>{let C=O;if(!C)return null;let{expand:q,...I}=C.describe({detail:"standard"});return I},{name:"graph/describe"});u.add(x,{name:"graph/mermaid"}),u.add(T,{name:"graph/describe"});let g=Y(null,{name:"hover/target"});u.add(g,{name:"hover/target"});let b=j([g],([O])=>{let M=O;if(!M)return null;let C=o.get(M.id);return C?C.codeLine:null},{name:"highlight/code-scroll"}),_=j([g],([O])=>{let M=O;if(!M)return null;let C=o.get(M.id);return C?C.visualSelector:null},{name:"highlight/visual"}),k=j([g],([O])=>{let M=O;return M?M.id:null},{name:"highlight/graph"});if(u.add(b,{name:"highlight/code-scroll"}),u.add(_,{name:"highlight/visual"}),u.add(k,{name:"highlight/graph"}),a?.codeScroll){let O=a.codeScroll,M=He([b],([C])=>{O(C)});u.add(M,{name:"highlight/apply-code-scroll"})}if(a?.visual){let O=a.visual,M=He([_],([C])=>{O(C)});u.add(M,{name:"highlight/apply-visual"})}if(a?.graph){let O=a.graph,M=He([k],([C])=>{O(C)});u.add(M,{name:"highlight/apply-graph"})}let E=Y(null,{name:"inspect/selected-node"});u.add(E,{name:"inspect/selected-node"});let A=ye("standard"),N=j([E,v,y],([O,M,C])=>{let q=M,I=O;if(!q||!I)return null;try{let F=q.resolve(I),S=Ee(F,A);return{path:I,...S,value:F.cache}}catch{return null}},{name:"inspect/node-detail"}),D=j([v,y],([O,M])=>{let C=O;return C?C.trace():[]},{name:"inspect/trace-log"});u.add(N,{name:"inspect/node-detail"}),u.add(D,{name:"inspect/trace-log"});let R=Y(!1,{name:"meta/debug"});u.add(R,{name:"meta/debug"});let $=j([R,y],([O,M])=>O?u.describe({format:"mermaid"}):"",{name:"meta/shell-mermaid"});u.add($,{name:"meta/shell-mermaid"});let U=Y("",{name:"layout/code-text"});if(u.add(U,{name:"layout/code-text"}),s){let O=new Map,M=j([T],([I])=>{let F=I;if(!F)return new Map;let S=new Map;for(let[G]of Object.entries(F.nodes)){let W=bt(G,i,s,O),te=yt(W,1/0,s,i,O),z=te.lines.reduce((K,xe)=>Math.max(K,xe.width),0),L=te.lineCount*20;S.set(G,{width:z,height:L})}return S},{name:"layout/graph-labels",equals:(I,F)=>{if(I===F)return!0;let S=I,G=F;if(S.size!==G.size)return!1;for(let[W,te]of S){let z=G.get(W);if(!z||z.width!==te.width||z.height!==te.height)return!1}return!0}}),C=j([U,c],([I,F])=>{let S=I;if(!S)return{lineCount:0,lines:[]};let G=bt(S,i,s,O),W=F-40;return yt(G,Math.max(100,W),s,i,O)},{name:"layout/code-lines"}),q=j([M],([I])=>{let F=I;if(F.size===0)return 200;let S=0;for(let{width:G}of F.values())G>S&&(S=G);return Math.max(200,Math.round(S+80))},{name:"layout/side-width-hint"});u.add(M,{name:"layout/graph-labels"}),u.add(C,{name:"layout/code-lines"}),u.add(q,{name:"layout/side-width-hint"})}let Z=0;return{graph:u,setMainRatio(O){u.set("pane/main-ratio",De(O))},setSideSplit(O){u.set("pane/side-split",De(O))},setFullscreen(O){u.set("pane/fullscreen",O)},setViewportWidth(O){u.set("viewport/width",Math.max(0,O))},setHoverTarget(O){u.set("hover/target",O)},setDemoGraph(O){u.set("demo/graph-ref",O)},bumpGraphTick(){u.set("demo/graph-tick",++Z)},selectNode(O){u.set("inspect/selected-node",O)},setMetaDebug(O){u.set("meta/debug",O)},setCodeText(O){u.set("layout/code-text",O)},batch(O){Ae(O)},destroy(){u.destroy()}}}0&&(module.exports={demoShell});
@@ -1,6 +1,6 @@
1
- import '../../graph-C4Uxwv0T.cjs';
2
- import '../../reactive-layout-5oEn8lHM.cjs';
3
- export { D as DemoShellHandle, a as DemoShellOptions, F as FullscreenPane, G as GraphLabelSize, H as HighlightCallbacks, b as HoverPaneType, c as HoverTarget, N as NodeRegistry, d as demoShell } from '../../index-9iguV3bF.cjs';
1
+ import '../../graph-CdJeX7O7.cjs';
2
+ import '../../reactive-layout-Dhhe54Oj.cjs';
3
+ export { D as DemoShellHandle, a as DemoShellOptions, F as FullscreenPane, G as GraphLabelSize, H as HighlightCallbacks, b as HoverPaneType, c as HoverTarget, N as NodeRegistry, d as demoShell } from '../../index-CnjUhRbs.cjs';
4
4
  import '../../node-BVV7G1bq.cjs';
5
5
  import '../../meta-COtmHLwT.cjs';
6
6
  import '../../extra/storage-core.cjs';
@@ -1,6 +1,6 @@
1
- import '../../graph-CWeI0aHd.js';
2
- import '../../reactive-layout-BAr6-_o5.js';
3
- export { D as DemoShellHandle, a as DemoShellOptions, F as FullscreenPane, G as GraphLabelSize, H as HighlightCallbacks, b as HoverPaneType, c as HoverTarget, N as NodeRegistry, d as demoShell } from '../../index-B5iVOD7w.js';
1
+ import '../../graph-BOhEGJ6E.js';
2
+ import '../../reactive-layout-Bq0rA2Wb.js';
3
+ export { D as DemoShellHandle, a as DemoShellOptions, F as FullscreenPane, G as GraphLabelSize, H as HighlightCallbacks, b as HoverPaneType, c as HoverTarget, N as NodeRegistry, d as demoShell } from '../../index-CEoU-r-g.js';
4
4
  import '../../node-BVV7G1bq.js';
5
5
  import '../../meta-BMwx3ExI.js';
6
6
  import '../../extra/storage-core.js';
@@ -1 +1 @@
1
- import{a}from"../../chunk-7EJTWGKW.js";import"../../chunk-YZKGGMPT.js";import"../../chunk-K54OKWNY.js";import"../../chunk-PSQNYY72.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{a as demoShell};
1
+ import{a}from"../../chunk-WE32AFFA.js";import"../../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{a as demoShell};