@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,4 +4,4 @@
4
4
  `)}function nn(t){if(t.version!==he)throw new Error(`unsupported snapshot version ${String(t.version)} (expected ${he})`);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=(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,u=o.constructor;if(a!==u)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 h=o;if(s.length!==h.length)return!1;for(let f=0;f<s.length;f++)if(!r(s[f],h[f]))return!1;return!0}if(s instanceof Map){let h=o;if(s.size!==h.size)return!1;for(let[f,d]of s)if(!h.has(f)||!r(d,h.get(f)))return!1;return!0}if(s instanceof Set){let h=o;if(s.size!==h.size)return!1;for(let f of s){let d=!1;for(let g of h)if(r(f,g)){d=!0;break}if(!d)return!1}return!0}if(ArrayBuffer.isView(s)){let h=s,f=o;if(h.length!==f.length)return!1;for(let d=0;d<h.length;d++)if(h[d]!==f[d])return!1;return!0}let c=Object.keys(s),l=Object.keys(o);if(c.length!==l.length)return!1;let p=new Set(l);for(let h of c)if(!p.has(h)||!r(s[h],o[h]))return!1;return!0};return r(t,e)}function gt(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(gt);let e=t,n=Object.keys(e).sort(),r={};for(let s of n)r[s]=gt(e[s]);return r}function ur(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function cr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function lr(t){return t==="TD"?"down":t==="BT"?"up":t==="RL"?"left":"right"}function on(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 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 dr(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(gt(i),null,e.indent??2);return e.logger?.(a),a}function fr(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}): ${je(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 un(t,e){let n=an(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}["${ur(i)}"]`)}for(let[i,a]of on(t)){let u=s.get(i),c=s.get(a);!u||!c||o.push(` ${u} --> ${c}`)}return o.join(`
6
6
  `)}function pr(t,e){let n=un(t,e);return hr(n)}function hr(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 c=0;c<i.length;c++)a+=String.fromCharCode(i[c]);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(),s=new Map;for(let i=0;i<r.length;i+=1)s.set(r[i],`n${i}`);let o=[`direction: ${lr(n)}`];for(let i of r){let a=s.get(i);o.push(`${a}: "${cr(i)}"`)}for(let[i,a]of on(t)){let u=s.get(i),c=s.get(a);!u||!c||o.push(`${u} -> ${c}`)}return o.join(`
7
- `)}function mr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Be(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+=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 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 ht(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===X)throw new Error(`Graph "${e}": ${n} name "${X}" is reserved for meta companion paths`);xr(t,e,n)}function _r(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 wr(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 cn(t){for(let e of t._mounts.values())cn(e);for(let e of t._nodes.values())try{e.down([[H]],{internal:!0})}catch{}}var ge=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===X)throw new Error(`Graph name "${X}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??pe,this._traceRing=new we(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=It(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(ht(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:j()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof I&&n._applyVersioning(e)}remove(e){ht(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,u]of i)a.includes(`${D}${X}${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,cn(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([[H]],{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=Be(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([[V,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);Tt(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[Y]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[P,n]],{actor:r?.actor,internal:s,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[J]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[u,c]of this._nodes)r.set(c,u);let a=[];for(let[u,c]of this._nodes)if(c instanceof I)for(let l of c._deps){let p=r.get(l.node);p!=null&&a.push([p,u])}return a.sort((u,c)=>u[0]<c[0]?-1:u[0]>c[0]?1:u[1]<c[1]?-1:u[1]>c[1]?1:0),a}let s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,u]of s)o.set(u,a);let i=[];for(let[a,u]of s)if(u instanceof I)for(let c of u._deps){let l=o.get(c.node);l!=null&&i.push([l,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(ht(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=_r(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]===X)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]!==X)throw new Error(`Graph "${this.name}": expected ${X} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${X} in "${r}"`);let a=i[o+1],u=s.meta[a];if(!u)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=u,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 u of this._mounts.values())u._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=wr(e,this.config);for(let u of[...this._nodes.keys()].sort()){let c=this._nodes.get(u);if(!r.has(c)){r.add(c);try{c.down(e,i)}catch(l){if(l instanceof K)throw l;s.push(l)}a.length!==0&&this._signalMetaSubtree(c,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(u){if(u instanceof K)throw u;o.push(u)}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=Ge(e?.detail,e?.fields),o=e?.format==="spec",i=o?Ge("minimal"):s,a=[];this._collectObserveTargets("",a);let u=new Map;for(let[_,w]of a)u.set(w,_);let c=[];{let _=a.map(([,N])=>N),w=new Set(u.values()),E=0;for(;_.length>0;){let N=_.shift();if(N instanceof I)for(let A of N._deps){let k=A.node;if(u.has(k))continue;let S=k.name??"",R=S;if(!R||w.has(R))if(S){let G=2;for(;w.has(`${S}#${G}`);)G++;R=`${S}#${G}`}else for(R=`__internal__/${E++}`;w.has(R);)R=`__internal__/${E++}`;u.set(k,R),w.add(R),c.push([R,k]),_.push(k)}}}let l=[...a,...c],p={};for(let[_,w]of l){if(n!=null&&!w.allowsObserve(n))continue;let E=dt(w,i),N=w instanceof I?w._deps.map(R=>u.get(R.node)??R.node.name??""):[],{name:A,...k}=E,S={...k,deps:N};if(!o){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[G,B]of Object.entries(r)){let q=G==="deps_includes"?"depsIncludes":G==="meta_has"?"metaHas":G;if(q==="depsIncludes"){if(!S.deps.includes(String(B))){R=!1;break}continue}if(q==="metaHas"){if(!Object.hasOwn(S.meta??{},String(B))){R=!1;break}continue}if(S[q]!==B){R=!1;break}}if(!R)continue}p[_]=S}let h=new Set(Object.keys(p)),f=[];for(let[_,w]of l)if(w instanceof I)for(let E of w._deps){let N=u.get(E.node);N!=null&&f.push([N,_])}f.sort((_,w)=>_[0]<w[0]?-1:_[0]>w[0]?1:_[1]<w[1]?-1:_[1]>w[1]?1:0);let d=f.map(([_,w])=>({from:_,to:w}));(n!=null||r!=null)&&(d=d.filter(_=>h.has(_.from)&&h.has(_.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(_=>{let w=`${_}${D}`;return[...h].some(E=>E===_||E.startsWith(w))}):g,y=this,x=e,b={name:this.name,nodes:p,edges:d,subgraphs:m,expand(_){let w={...x,format:void 0};return Array.isArray(_)?(w.fields=_,w.detail=void 0):(w.detail=_,w.fields=void 0),y.describe(w)}},v=e??{},T=v.format;return T==="json"?dr(b,v):T==="pretty"?fr(b,v):T==="mermaid"?un(b,v):T==="mermaid-url"?pr(b,v):T==="d2"?gr(b,v):T==="ascii"?qt(b,v):b}_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 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 s=this.describe({detail:"full"}),o=new Map(this._annotations),i=new Map;for(let[a,u]of Object.entries(s.nodes))u.lastMutation!=null&&i.set(a,u.lastMutation);return Yt(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=te(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,c=()=>{a||u||(a=!0,ve(()=>{a=!1,!u&&(s+=1,o.emit(s))}))},l=i.onEvent(m=>{let y=m.type;y!=="data"&&y!=="error"&&y!=="complete"&&y!=="teardown"||c()}),p=[],h=new WeakSet,f=m=>{if(h.has(m)||u)return;h.add(m);let y=m.topology.subscribe(x=>{for(let b of x){if(b[0]!==V)continue;let v=b[1];if(c(),v.kind==="added"&&v.nodeKind==="mount"){let T=m._mounts.get(v.name);T!=null&&f(T)}}});p.push(y);for(let x of m._mounts.keys()){let b=m._mounts.get(x);b!=null&&f(b)}};f(this);let d;try{d=ue([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,y)=>m===y})}catch(m){l();for(let y of p)y();throw i.dispose(),m}let g=ft(d);return{node:d,dispose(){u=!0,l();for(let m of p)m();p.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=te(s,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,c=i.onEvent(f=>{let d=f.type;d!=="data"&&d!=="error"&&d!=="complete"&&d!=="teardown"||a||u||(a=!0,ve(()=>{a=!1,!u&&(s+=1,o.emit(s))}))}),l={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},p;try{p=ue([o],()=>this._explainStatic(e,n,l),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(f,d)=>f.found===d.found&&f.reason===d.reason&&f.steps.length===d.steps.length&&Er(f.steps,d.steps)})}catch(f){throw c(),i.dispose(),f}let h=ft(p);return{node:p,dispose(){u=!0,c(),i.dispose(),h()}}}_pathsMatching(e){let n=Be(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}${X}${D}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=rn(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 l=e,p=this.resolve(l);if(a!=null&&!p.allowsObserve(a))throw new K({actor:a,action:"observe",nodeName:l});return i?this._buildStructuredObserver([[l,p]],o,"one"):{subscribe(h){return p.subscribe(h)},up(h){try{p.up?.(h)}catch(f){if(f instanceof K)return;throw f}}}}let u=[];this._collectObserveTargets("",u),u.sort((l,p)=>l[0]<p[0]?-1:l[0]>p[0]?1:0);let c=a==null?u:u.filter(([,l])=>l.allowsObserve(a));return i?this._buildStructuredObserver(c,o,"all"):{subscribe:l=>{let p=c.map(([h,f])=>f.subscribe(d=>{l(h,d)}));return()=>{for(let h of p)h()}},up:(l,p)=>{try{this.resolve(l).up?.(p)}catch(h){if(h instanceof K)return;throw h}}}}_buildStructuredObserver(e,n,r){let s=r==="one"?e[0]?.[0]:void 0,o=i=>{if(r==="one"&&s!=null){let l=this.resolve(s);return this._buildStructuredObserver([[s,l]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((l,p)=>l[0]<p[0]?-1:l[0]>p[0]?1:0);let u=i.actor,c=u==null?a:a.filter(([,l])=>l.allowsObserve(u));return this._buildStructuredObserver(c,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",u=this.config.inspectorEnabled,c=(o||i)&&u,l=n.maxEvents,p=l!=null&&l>0?new we(l):null,h=[],f=new Set,d={},g=new Set,m=0,y=0,x=0,b=0,v=0,T=0,_=!1,w=!1,E=0,N=new Map,A=new Map,k=new Map,S=O=>{p?p.push(O):h.push(O);for(let C of f)C(O)},R=()=>s?{timestamp_ns:j(),in_batch:ke(),batch_id:E}:{},G=(O,C)=>{if(!(!c||!(O instanceof I)))return O._setInspectorHook(z=>{if(z.kind==="dep_message")N.set(O,z.depIndex);else if(z.kind==="run"){let me=z.batchData.map((M,F)=>M!=null&&M.length>0?M.at(-1):z.prevData[F]);A.set(O,me);let U=z.batchData.map(M=>M!=null?[...M]:void 0);k.set(O,U),i&&S({type:"derived",path:C,dep_values:me,dep_batches:U,...R()})}})},B=O=>{let C=N.get(O),z=A.get(O);if(!o||z==null)return{};let U=(C!=null&&C>=0&&O instanceof I?O._deps[C]:void 0)?.node,M=U?.v,F=k.get(O);return{trigger_dep_index:C,trigger_dep_name:U?.name,...M!=null?{trigger_version:{id:M.id,version:M.version}}:{},dep_values:[...z],...F!=null?{dep_batches:F}:{}}},q=[],oe=[];for(let[O,C]of e){let z=G(C,O);z&&q.push(z),oe.push(C.subscribe(me=>{E++;for(let U of me){let M=U[0],F=R();if(M===V){d[O]=U[1];let qe=C instanceof I?C.lastMutation?.actor??ce:ce;S({type:"data",path:O,data:U[1],actor:qe,...F,...B(C)})}else if(a)M===Z?m++:M===Q?y++:M===Y?x++:M===ee?b++:M===re?v++:M===H?T++:M===J&&!g.has(O)?_=!0:M===P&&(w=!0,g.add(O));else if(M===Z)m++,S({type:"dirty",path:O,...F});else if(M===Q)y++,S({type:"resolved",path:O,...F,...B(C)});else if(M===Y)x++,S({type:"invalidate",path:O,...F});else if(M===ee)b++,S({type:"pause",path:O,lockId:U[1],...F});else if(M===re)v++,S({type:"resume",path:O,lockId:U[1],...F});else if(M===J)g.has(O)||(_=!0),S({type:"complete",path:O,...F});else if(M===P){w=!0,g.add(O);let qe=C instanceof I?C.lastMutation?.actor??ce:ce;S({type:"error",path:O,data:U[1],actor:qe,...F})}else M===H&&(T++,S({type:"teardown",path:O,...F}))}}))}let Ue=!1,We=()=>{if(!Ue){Ue=!0;for(let O of oe)O();for(let O of q)O();for(let O of Te)O({value:void 0,done:!0});Te.length=0}},Ke=[],Te=[];f.add(O=>{let C=Te.shift();C?C({value:O,done:!1}):Ke.push(O)});let bt={get values(){return d},get dirtyCount(){return m},get resolvedCount(){return y},get invalidateCount(){return x},get pauseCount(){return b},get resumeCount(){return v},get teardownCount(){return T},get events(){return p?p.toArray():[...h]},get anyCompletedCleanly(){return _},get anyErrored(){return w},get completedWithoutErrors(){return _&&!w},onEvent(O){return f.add(O),()=>f.delete(O)},dispose:We,expand(O){We();let C={...n};return typeof O=="string"?C.detail=O:Object.assign(C,O),r(rn(C))},[Symbol.asyncIterator](){return{next(){return Ke.length>0?Promise.resolve({value:Ke.shift(),done:!1}):Ue?Promise.resolve({value:void 0,done:!0}):new Promise(O=>Te.push(O))},return(){return We(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(bt,n),bt}_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)),u=vr(n.theme),c=r==="stage-log"?j():0,l=d=>d==null?"":n.stageLabels?.[d]??d,p=(d,g)=>d.length>g?`${d.slice(0,g-1)}\u2026`:d,h=d=>d.type==="data"||d.type==="error"?p(je(d.data),120):"",f=d=>{if(r==="stage-log"){let w=(j()-c)/1e9,E=l(d.path).padEnd(9);if(d.type==="data"){let N=h(d);return`[${w.toFixed(3)}s] ${E} \u2190${N?` ${N}`:""}`}if(d.type==="error"){let N=h(d);return`[${w.toFixed(3)}s] ${E} \u2717${N?` ${N}`:""}`}return d.type==="complete"?`[${w.toFixed(3)}s] ${E} \u25A0 complete`:`[${w.toFixed(3)}s] ${E} ${d.type}`}if(r==="json")try{return JSON.stringify(d)}catch{return JSON.stringify({type:d.type,path:d.path,data:"[unserializable]"})}let g=u[d.type]??"",m=d.path?`${u.path}${d.path}${u.reset} `:"",y=d.type==="data"||d.type==="error",x=d.type==="pause"||d.type==="resume",b=y?` ${je(d.data)}`:x?` ${je(d.lockId)}`:"",v=d.type==="data"||d.type==="resolved"||d.type==="derived"?d:void 0,T=v?.trigger_dep_name!=null?` <- ${v.trigger_dep_name}`:v?.trigger_dep_index!=null?` <- #${v.trigger_dep_index}`:"",_=d.in_batch?" [batch]":"";return`${m}${g}${d.type.toUpperCase()}${u.reset}${b}${T}${_}`};e.onEvent(d=>{a(d.type)&&s(f(d),d)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){tn(this._disposers,this.name),this.signal([[H]],{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"}),s={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:u,guard:c,...l}=r.nodes[a];s[a]=l}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 vt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??pe,{codec:s,codecVersion:o,payload:i}=xt(e,r);return s.decode(i,o)}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(o=>Be(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 u=this.tryResolve(o)?.v;if(u!=null&&u.id===i.v.id&&u.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){nn(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 f of[...e.subgraphs].sort((d,g)=>{let m=d.split(D).length,y=g.split(D).length;return m!==y?m-y:d<g?-1:d>g?1:0})){let d=f.split(D),g=o;for(let m of d)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=s?Object.entries(s).map(([f,d])=>({re:Be(f),factory:d})):[],a=f=>{for(let d of i)if(d.re.test(f))return d.factory},u=f=>{let d=f.split(D),g=d.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=o;for(let y of d){let x=m._mounts.get(y);if(!x)throw new Error(`unknown mount "${y}" in path "${f}"`);m=x}return[m,g]},c=Object.entries(e.nodes).filter(([f])=>!f.includes(`${D}${X}${D}`)).sort((f,d)=>f[0]<d[0]?-1:f[0]>d[0]?1:0),l=new Map(c),p=new Map,h=!0;for(;l.size>0&&h;){h=!1;for(let[f,d]of[...l.entries()]){let g=d?.deps??[];if(!g.every(T=>p.has(T)))continue;let[m,y]=u(f),x={...d?.meta??{}},b=a(f),v;if(d?.type==="state")v=te(d.value,{meta:x});else{if(b==null)continue;v=b(y,{path:f,type:d.type,value:d.value,meta:x,deps:g,resolvedDeps:g.map(T=>p.get(T))})}m.add(v,{name:y}),p.set(f,v),l.delete(f),h=!0}}if(l.size>0){let f=[...l.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 o.restore(e),o}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(c=>({tier:c,debounceMs:Math.max(0,c.debounceMs??0),compactEvery:Math.max(1,c.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=(c,l)=>{if(c.disposed)return;let p=ir(l.nodes);if(c.lastSnapshot!=null&&p!==""&&p===c.lastFingerprint)return;let h=c.seq+1,f=Ee(),m=c.lastSnapshot==null||h%c.compactEvery===0?{mode:"full",snapshot:l,seq:h,timestamp_ns:f,format_version:he}:{mode:"diff",diff:Tr(c.lastSnapshot,l),seq:h,timestamp_ns:f,format_version:he};if(c.tier.filter&&!c.tier.filter(this.name,m))return;let y;try{y=c.tier.save(this.name,m)}catch(x){n.onError?.(x,c.tier);return}if(y&&typeof y.then=="function"){let v=(c.savePending??Promise.resolve()).then(()=>y,()=>y).then(()=>{c.disposed||(c.seq=h,c.lastSnapshot=l,c.lastFingerprint=p)},T=>{n.onError?.(T,c.tier)});c.savePending=v.finally(()=>{c.savePending===v&&(c.savePending=void 0)})}else c.seq=h,c.lastSnapshot=l,c.lastFingerprint=p},o=(c,l)=>{try{s(c,l)}catch(p){n.onError?.(p,c.tier)}},i=(c,l)=>{if(!l.some(d=>{let g=this.config.messageTier(d[0]);return g>=3&&g<5}))return;if(n.filter){let d=this.tryResolve(c);if(d==null)return;let g=dt(d,Ge("standard"));if(!n.filter(c,g))return}let h,f=()=>(h==null&&(h=this.snapshot()),h);for(let d of r)d.disposed||(d.debounceMs===0?o(d,f()):(d.timer==null&&(d.timer=new Ie),d.timer.start(d.debounceMs,()=>{d.disposed||o(d,this.snapshot())})))},a;if(n.paths!=null){let l=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(p=>{let h=this.tryResolve(p);return h==null?()=>{}:h.subscribe(f=>i(p,f))});a=()=>{for(let p of l)p()}}else a=this.observe().subscribe((c,l)=>i(c,l));let u=()=>{a();for(let c of r)c.disposed=!0,c.timer?.cancel();this._storageDisposers.delete(u)};return this._storageDisposers.add(u),{dispose:u}}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===he&&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(u){r?.onError?.(u,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===he&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(u){r?.onError?.(u,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:j(),...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(x=>!r.has(x)).sort(),i=[...r].filter(x=>!s.has(x)).sort(),a=[],u=[];for(let x of r){if(!s.has(x))continue;let b=e.nodes[x],v=n.nodes[x],T=b.v,_=v.v;T!=null&&_!=null&&T.id===_.id&&T.version!==_.version&&u.push({path:x,id:T.id,from:T.version,to:_.version});let w=T!=null&&_!=null&&T.id===_.id&&T.version===_.version;for(let E of["type","status","sentinel"]){let N=b[E],A=v[E];N!==A&&a.push({path:x,field:E,from:N,to:A})}if(!w)for(let E of["value","meta"]){let N=b[E],A=v[E];ar(N,A)||a.push({path:x,field:E,from:N,to:A})}}let c=x=>`${x.from} ${x.to}`,l=new Set(e.edges.map(c)),p=new Set(n.edges.map(c)),h=n.edges.filter(x=>!l.has(c(x))),f=e.edges.filter(x=>!p.has(c(x))),d=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(x=>!d.has(x)).sort(),y=[...d].filter(x=>!g.has(x)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:u,edgesAdded:h,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:y}}};function Tr(t,e){let n=ge.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 sn(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,u=new Map,c=new Map,l=new Set;for(let[b,v]of Object.entries(t.nodes)){if(!b)continue;l.add(b);let T=v.deps??[];i.set(b,T);for(let _ of T)_&&(l.add(_),a.has(_)||a.set(_,new Set),a.get(_).add(b))}for(let b of t.edges){if(b==null||typeof b!="object")continue;let v=typeof b.from=="string"?b.from:"",T=typeof b.to=="string"?b.to:"";!v||!T||(l.add(v),l.add(T),c.has(v)||c.set(v,new Set),c.get(v).add(T),u.has(T)||u.set(T,new Set),u.get(T).add(v))}if(!l.has(e))return r.withDetail?s:[];let p=r.both===!0,h=b=>{if(p){let w=i.get(b)??[],E=u.get(b),N=a.get(b),A=c.get(b),k=[...w];return E&&k.push(...E),N&&k.push(...N),A&&k.push(...A),k}if(n==="upstream"){let w=i.get(b)??[],E=u.get(b);return E?[...w,...E]:w}let v=a.get(b),T=c.get(b),_=v?[...v]:[];return T&&_.push(...T),_},f=new Set([e]),d=new Map,g=[{path:e,depth:0}],m=0,y=!1;for(;m<g.length;){let b=g[m++];if(o!=null&&b.depth>=o){h(b.path).length>0&&(y=!0);continue}for(let v of h(b.path))!v||f.has(v)||(f.add(v),d.set(v,b.depth+1),g.push({path:v,depth:b.depth+1}))}let x=[...d.keys()].sort((b,v)=>b<v?-1:b>v?1:0);return r.withDetail?{paths:x,depths:d,truncated:y}:x}function Er(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}function mt(t,e,n,r=0){if(!Number.isFinite(t))return r;if(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0)return Math.max(r,t);let s=t*Math.exp(-n*e);return Math.max(r,s)}function ln(t){if(t!==void 0&&t<1)throw new RangeError("maxSize must be >= 1")}function ne(t){return new Map(t)}function $(t){return t.cache??new Map}function ze(t){return t.cache??[]}function Or(t,e){let n=Math.max(t.length,e.length),r=0,s=0,o=0;for(let i=0;i<n;i+=1){let a=t[i]??0,u=e[i]??0;r+=a*u,s+=a*a,o+=u*u}return s===0||o===0?0:r/Math.sqrt(s*o)}function Nr(t={}){let e=t.maxSize,n=t.policy??"fifo";ln(e);let r=te(new Map,{name:t.name,describeKind:"state"});function s(i){if(e!==void 0)for(;i.size>e;){let a;for(let u of i.values()){if(!a){a=u;continue}let c=n==="lru"?u.lastAccessNs:u.createdAtNs,l=n==="lru"?a.lastAccessNs:a.createdAtNs;c<l&&(a=u)}if(!a)break;i.delete(a.id)}}function o(i){r.emit(i)}return{entries:r,upsert(i,a){let u=j(),c=$(r),l=c.get(i),p=ne(c);p.set(i,{id:i,value:a,createdAtNs:l?.createdAtNs??u,lastAccessNs:u}),s(p),o(p)},remove(i){let a=ne($(r));a.delete(i)&&o(a)},clear(){$(r).size!==0&&o(new Map)},get(i){let a=$(r),u=a.get(i);if(u){if(n==="lru"){let c=j(),l=ne(a);l.set(i,{...u,lastAccessNs:c}),o(l)}return u.value}},has(i){return $(r).has(i)}}}function kr(t,e={}){let n=e.maxSize,r=e.policy??"lru",s=e.decayRate??0,o=e.minScore??0,i=e.score??(()=>1);ln(n);let a=new ge(t),u=te(new Map,{name:"items",describeKind:"state"}),c=ue([u],([g])=>{let m=g??new Map,y=j(),x=[...m.values()].map(b=>{let v=(y-b.lastAccessNs)/1e9;return{...b,score:mt(b.baseScore,v,s,o)}});return x.sort((b,v)=>v.score-b.score||v.lastAccessNs-b.lastAccessNs),x},{name:"ranked",describeKind:"derived"}),l=ue([u],([g])=>(g??new Map).size,{name:"size",describeKind:"derived",initial:0});c.subscribe(()=>{}),l.subscribe(()=>{}),a.add(u,{name:"items"}),a.add(c,{name:"ranked"}),a.add(l,{name:"size"});function p(g,m){let y=(m-g.lastAccessNs)/1e9;return mt(g.baseScore,y,s,o)}function h(g){if(n!==void 0)for(;g.size>n;){let m=j(),y,x=Number.POSITIVE_INFINITY;for(let b of g.values()){let v=p(b,m);if(v<x){y=b,x=v;continue}if(v===x&&y){let T=r==="lru"?b.lastAccessNs:b.createdAtNs,_=r==="lru"?y.lastAccessNs:y.createdAtNs;T<_&&(y=b)}}if(!y)break;g.delete(y.id)}}function f(g){u.emit(g)}return Object.assign(a,{upsert(g,m,y){let x=j(),b=$(u),v=b.get(g),T=y?.score??i(m),_=ne(b);_.set(g,{id:g,value:m,baseScore:T,createdAtNs:v?.createdAtNs??x,lastAccessNs:x}),h(_),f(_)},remove(g){let m=ne($(u));m.delete(g)&&f(m)},clear(){$(u).size!==0&&f(new Map)},getItem(g){let m=$(u),y=m.get(g);if(y){if(r==="lru"){let x=ne(m);x.set(g,{...y,lastAccessNs:j()}),f(x)}return y}}})}function Rr(t={}){let e=t.backend??"flat",n=t.dimension,r;if(e==="hnsw"&&(r=t.hnswFactory?.(),!r))throw new Error('vectorIndex backend "hnsw" requires an optional dependency adapter; install your HNSW package and provide `hnswFactory`.');let s=te(new Map,{describeKind:"state",name:"vector-index"});function o(a){if(n!==void 0&&a.length!==n)throw new RangeError(`vector dimension mismatch: expected ${n}, got ${a.length}`)}function i(a){s.emit(a)}return{backend:e,entries:s,upsert(a,u,c){o(u);let l=ne($(s));l.set(a,{id:a,vector:[...u],meta:c}),e==="hnsw"&&r.upsert(a,u,c),i(l)},remove(a){let u=ne($(s));u.delete(a)&&(e==="hnsw"&&r.remove(a),i(u))},clear(){$(s).size!==0&&(e==="hnsw"&&r.clear(),i(new Map))},search(a,u=5){return o(a),u<=0?[]:e==="hnsw"?r.search(a,u):[...$(s).values()].map(l=>({id:l.id,score:Or(a,l.vector),meta:l.meta})).sort((l,p)=>p.score-l.score).slice(0,u)}}}function Sr(t){let e=new ge(t),n=te(new Map,{name:"entities",describeKind:"state"}),r=te([],{name:"edges",describeKind:"state"}),s=ue([r],([u])=>{let c=u??[],l=new Map;for(let p of c){let h=l.get(p.from)??[];l.set(p.from,Object.freeze([...h,p]))}return l},{name:"adjacency",describeKind:"derived",initial:new Map});s.subscribe(()=>{}),e.add(n,{name:"entities"}),e.add(r,{name:"edges"}),e.add(s,{name:"adjacency"});function o(u){n.emit(u)}function i(u){r.emit(u)}return Object.assign(e,{upsertEntity(u,c){let l=ne($(n));l.set(u,c),o(l)},removeEntity(u){let c=ne($(n)),l=c.delete(u),p=ze(r),h=p.filter(f=>f.from!==u&&f.to!==u);!l&&h.length===p.length||(o(c),i(h))},link(u,c,l,p=1){let h=`${u}\0${c}\0${l}`,f=ze(r),d=new Set(f.map(m=>`${m.from}\0${m.to}\0${m.relation}`)),g=[...f];if(d.has(h))for(let m=0;m<g.length;m+=1){let y=g[m];if(y.from===u&&y.to===c&&y.relation===l){g[m]={...y,weight:p};break}}else g.push({from:u,to:c,relation:l,weight:p});i(g)},unlink(u,c,l){let p=ze(r),h=p.filter(f=>l===void 0?!(f.from===u&&f.to===c):!(f.from===u&&f.to===c&&f.relation===l));h.length!==p.length&&i(h)},related(u,c){return ze(r).filter(l=>(l.from===u||l.to===u)&&(c===void 0||l.relation===c))}})}0&&(module.exports={collection,decay,knowledgeGraph,lightCollection,vectorIndex});
7
+ `)}function mr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Be(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+=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 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 ht(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===X)throw new Error(`Graph "${e}": ${n} name "${X}" is reserved for meta companion paths`);xr(t,e,n)}function _r(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 wr(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 cn(t){for(let e of t._mounts.values())cn(e);for(let e of t._nodes.values())try{e.down([[H]],{internal:!0})}catch{}}var ge=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===X)throw new Error(`Graph name "${X}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??pe,this._traceRing=new we(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=It(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(ht(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:j()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof I&&n._applyVersioning(e)}remove(e){ht(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,u]of i)a.includes(`${D}${X}${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,cn(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([[H]],{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=Be(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([[V,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);Tt(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[Y]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[P,n]],{actor:r?.actor,internal:s,delivery:"write"})}complete(e,n){let r=n?.internal===!0;this.node(e).down([[J]],{actor:n?.actor,internal:r,delivery:"write"})}edges(e){let n=e?.recursive===!0,r=new Map;if(!n){for(let[u,c]of this._nodes)r.set(c,u);let a=[];for(let[u,c]of this._nodes)if(c instanceof I)for(let l of c._deps){let p=r.get(l.node);p!=null&&a.push([p,u])}return a.sort((u,c)=>u[0]<c[0]?-1:u[0]>c[0]?1:u[1]<c[1]?-1:u[1]>c[1]?1:0),a}let s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,u]of s)o.set(u,a);let i=[];for(let[a,u]of s)if(u instanceof I)for(let c of u._deps){let l=o.get(c.node);l!=null&&i.push([l,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(ht(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=_r(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]===X)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]!==X)throw new Error(`Graph "${this.name}": expected ${X} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${X} in "${r}"`);let a=i[o+1],u=s.meta[a];if(!u)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=u,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 u of this._mounts.values())u._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=wr(e,this.config);for(let u of[...this._nodes.keys()].sort()){let c=this._nodes.get(u);if(!r.has(c)){r.add(c);try{c.down(e,i)}catch(l){if(l instanceof K)throw l;s.push(l)}a.length!==0&&this._signalMetaSubtree(c,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(u){if(u instanceof K)throw u;o.push(u)}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=Ge(e?.detail,e?.fields),o=e?.format==="spec",i=o?Ge("minimal"):s,a=[];this._collectObserveTargets("",a);let u=new Map;for(let[_,w]of a)u.set(w,_);let c=[];{let _=a.map(([,N])=>N),w=new Set(u.values()),E=0;for(;_.length>0;){let N=_.shift();if(N instanceof I)for(let A of N._deps){let k=A.node;if(u.has(k))continue;let S=k.name??"",R=S;if(!R||w.has(R))if(S){let G=2;for(;w.has(`${S}#${G}`);)G++;R=`${S}#${G}`}else for(R=`__internal__/${E++}`;w.has(R);)R=`__internal__/${E++}`;u.set(k,R),w.add(R),c.push([R,k]),_.push(k)}}}let l=[...a,...c],p={};for(let[_,w]of l){if(n!=null&&!w.allowsObserve(n))continue;let E=dt(w,i),N=w instanceof I?w._deps.map(R=>u.get(R.node)??R.node.name??""):[],{name:A,...k}=E,S={...k,deps:N};if(!o){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[G,B]of Object.entries(r)){let q=G==="deps_includes"?"depsIncludes":G==="meta_has"?"metaHas":G;if(q==="depsIncludes"){if(!S.deps.includes(String(B))){R=!1;break}continue}if(q==="metaHas"){if(!Object.hasOwn(S.meta??{},String(B))){R=!1;break}continue}if(S[q]!==B){R=!1;break}}if(!R)continue}p[_]=S}let h=new Set(Object.keys(p)),f=[];for(let[_,w]of l)if(w instanceof I)for(let E of w._deps){let N=u.get(E.node);N!=null&&f.push([N,_])}f.sort((_,w)=>_[0]<w[0]?-1:_[0]>w[0]?1:_[1]<w[1]?-1:_[1]>w[1]?1:0);let d=f.map(([_,w])=>({from:_,to:w}));(n!=null||r!=null)&&(d=d.filter(_=>h.has(_.from)&&h.has(_.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(_=>{let w=`${_}${D}`;return[...h].some(E=>E===_||E.startsWith(w))}):g,y=this,x=e,b={name:this.name,nodes:p,edges:d,subgraphs:m,expand(_){let w={...x,format:void 0};return Array.isArray(_)?(w.fields=_,w.detail=void 0):(w.detail=_,w.fields=void 0),y.describe(w)}},v=e??{},T=v.format;return T==="json"?dr(b,v):T==="pretty"?fr(b,v):T==="mermaid"?un(b,v):T==="mermaid-url"?pr(b,v):T==="d2"?gr(b,v):T==="ascii"?qt(b,v):b}_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 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 s=this.describe({detail:"full"}),o=new Map(this._annotations),i=new Map;for(let[a,u]of Object.entries(s.nodes))u.lastMutation!=null&&i.set(a,u.lastMutation);return Yt(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=te(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,c=()=>{a||u||(a=!0,ve(()=>{a=!1,!u&&(s+=1,o.emit(s))}))},l=i.onEvent(m=>{let y=m.type;y!=="data"&&y!=="error"&&y!=="complete"&&y!=="teardown"||c()}),p=[],h=new WeakSet,f=m=>{if(h.has(m)||u)return;h.add(m);let y=m.topology.subscribe(x=>{for(let b of x){if(b[0]!==V)continue;let v=b[1];if(c(),v.kind==="added"&&v.nodeKind==="mount"){let T=m._mounts.get(v.name);T!=null&&f(T)}}});p.push(y);for(let x of m._mounts.keys()){let b=m._mounts.get(x);b!=null&&f(b)}};f(this);let d;try{d=ue([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,y)=>m===y})}catch(m){l();for(let y of p)y();throw i.dispose(),m}let g=ft(d);return{node:d,dispose(){u=!0,l();for(let m of p)m();p.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=te(s,{name:"explain_version"}),i=this.observe({timeline:!0,structured:!0}),a=!1,u=!1,c=i.onEvent(f=>{let d=f.type;d!=="data"&&d!=="error"&&d!=="complete"&&d!=="teardown"||a||u||(a=!0,ve(()=>{a=!1,!u&&(s+=1,o.emit(s))}))}),l={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},p;try{p=ue([o],()=>this._explainStatic(e,n,l),{name:r?.name??"explain",describeKind:"derived",meta:{domain:"audit",kind:"explain_path",from:e,to:n},equals:(f,d)=>f.found===d.found&&f.reason===d.reason&&f.steps.length===d.steps.length&&Er(f.steps,d.steps)})}catch(f){throw c(),i.dispose(),f}let h=ft(p);return{node:p,dispose(){u=!0,c(),i.dispose(),h()}}}_pathsMatching(e){let n=Be(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}${X}${D}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=rn(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 l=e,p=this.resolve(l);if(a!=null&&!p.allowsObserve(a))throw new K({actor:a,action:"observe",nodeName:l});return i?this._buildStructuredObserver([[l,p]],o,"one"):{subscribe(h){return p.subscribe(h)},up(h){try{p.up?.(h)}catch(f){if(f instanceof K)return;throw f}}}}let u=[];this._collectObserveTargets("",u),u.sort((l,p)=>l[0]<p[0]?-1:l[0]>p[0]?1:0);let c=a==null?u:u.filter(([,l])=>l.allowsObserve(a));return i?this._buildStructuredObserver(c,o,"all"):{subscribe:l=>{let p=c.map(([h,f])=>f.subscribe(d=>{l(h,d)}));return()=>{for(let h of p)h()}},up:(l,p)=>{try{this.resolve(l).up?.(p)}catch(h){if(h instanceof K)return;throw h}}}}_buildStructuredObserver(e,n,r){let s=r==="one"?e[0]?.[0]:void 0,o=i=>{if(r==="one"&&s!=null){let l=this.resolve(s);return this._buildStructuredObserver([[s,l]],i,"one")}let a=[];this._collectObserveTargets("",a),a.sort((l,p)=>l[0]<p[0]?-1:l[0]>p[0]?1:0);let u=i.actor,c=u==null?a:a.filter(([,l])=>l.allowsObserve(u));return this._buildStructuredObserver(c,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",u=this.config.inspectorEnabled,c=(o||i)&&u,l=n.maxEvents,p=l!=null&&l>0?new we(l):null,h=[],f=new Set,d={},g=new Set,m=0,y=0,x=0,b=0,v=0,T=0,_=!1,w=!1,E=0,N=new Map,A=new Map,k=new Map,S=O=>{p?p.push(O):h.push(O);for(let C of f)C(O)},R=()=>s?{timestamp_ns:j(),in_batch:ke(),batch_id:E}:{},G=(O,C)=>{if(!(!c||!(O instanceof I)))return O._setInspectorHook(z=>{if(z.kind==="dep_message")N.set(O,z.depIndex);else if(z.kind==="run"){let me=z.batchData.map((M,F)=>M!=null&&M.length>0?M.at(-1):z.prevData[F]);A.set(O,me);let U=z.batchData.map(M=>M!=null?[...M]:void 0);k.set(O,U),i&&S({type:"derived",path:C,dep_values:me,dep_batches:U,...R()})}})},B=O=>{let C=N.get(O),z=A.get(O);if(!o||z==null)return{};let U=(C!=null&&C>=0&&O instanceof I?O._deps[C]:void 0)?.node,M=U?.v,F=k.get(O);return{trigger_dep_index:C,trigger_dep_name:U?.name,...M!=null?{trigger_version:{id:M.id,version:M.version}}:{},dep_values:[...z],...F!=null?{dep_batches:F}:{}}},q=[],oe=[];for(let[O,C]of e){let z=G(C,O);z&&q.push(z),oe.push(C.subscribe(me=>{E++;for(let U of me){let M=U[0],F=R();if(M===V){d[O]=U[1];let qe=C instanceof I?C.lastMutation?.actor??ce:ce;S({type:"data",path:O,data:U[1],actor:qe,...F,...B(C)})}else if(a)M===Z?m++:M===Q?y++:M===Y?x++:M===ee?b++:M===re?v++:M===H?T++:M===J&&!g.has(O)?_=!0:M===P&&(w=!0,g.add(O));else if(M===Z)m++,S({type:"dirty",path:O,...F});else if(M===Q)y++,S({type:"resolved",path:O,...F,...B(C)});else if(M===Y)x++,S({type:"invalidate",path:O,...F});else if(M===ee)b++,S({type:"pause",path:O,lockId:U[1],...F});else if(M===re)v++,S({type:"resume",path:O,lockId:U[1],...F});else if(M===J)g.has(O)||(_=!0),S({type:"complete",path:O,...F});else if(M===P){w=!0,g.add(O);let qe=C instanceof I?C.lastMutation?.actor??ce:ce;S({type:"error",path:O,data:U[1],actor:qe,...F})}else M===H&&(T++,S({type:"teardown",path:O,...F}))}}))}let Ue=!1,We=()=>{if(!Ue){Ue=!0;for(let O of oe)O();for(let O of q)O();for(let O of Te)O({value:void 0,done:!0});Te.length=0}},Ke=[],Te=[];f.add(O=>{let C=Te.shift();C?C({value:O,done:!1}):Ke.push(O)});let bt={get values(){return d},get dirtyCount(){return m},get resolvedCount(){return y},get invalidateCount(){return x},get pauseCount(){return b},get resumeCount(){return v},get teardownCount(){return T},get events(){return p?p.toArray():[...h]},get anyCompletedCleanly(){return _},get anyErrored(){return w},get completedWithoutErrors(){return _&&!w},onEvent(O){return f.add(O),()=>f.delete(O)},dispose:We,expand(O){We();let C={...n};return typeof O=="string"?C.detail=O:Object.assign(C,O),r(rn(C))},[Symbol.asyncIterator](){return{next(){return Ke.length>0?Promise.resolve({value:Ke.shift(),done:!1}):Ue?Promise.resolve({value:void 0,done:!0}):new Promise(O=>Te.push(O))},return(){return We(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(bt,n),bt}_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)),u=vr(n.theme),c=r==="stage-log"?j():0,l=d=>d==null?"":n.stageLabels?.[d]??d,p=(d,g)=>d.length>g?`${d.slice(0,g-1)}\u2026`:d,h=d=>d.type==="data"||d.type==="error"?p(je(d.data),120):"",f=d=>{if(r==="stage-log"){let w=(j()-c)/1e9,E=l(d.path).padEnd(9);if(d.type==="data"){let N=h(d);return`[${w.toFixed(3)}s] ${E} \u2190${N?` ${N}`:""}`}if(d.type==="error"){let N=h(d);return`[${w.toFixed(3)}s] ${E} \u2717${N?` ${N}`:""}`}return d.type==="complete"?`[${w.toFixed(3)}s] ${E} \u25A0 complete`:`[${w.toFixed(3)}s] ${E} ${d.type}`}if(r==="json")try{return JSON.stringify(d)}catch{return JSON.stringify({type:d.type,path:d.path,data:"[unserializable]"})}let g=u[d.type]??"",m=d.path?`${u.path}${d.path}${u.reset} `:"",y=d.type==="data"||d.type==="error",x=d.type==="pause"||d.type==="resume",b=y?` ${je(d.data)}`:x?` ${je(d.lockId)}`:"",v=d.type==="data"||d.type==="resolved"||d.type==="derived"?d:void 0,T=v?.trigger_dep_name!=null?` <- ${v.trigger_dep_name}`:v?.trigger_dep_index!=null?` <- #${v.trigger_dep_index}`:"",_=d.in_batch?" [batch]":"";return`${m}${g}${d.type.toUpperCase()}${u.reset}${b}${T}${_}`};e.onEvent(d=>{a(d.type)&&s(f(d),d)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){tn(this._disposers,this.name),this.signal([[H]],{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"}),s={};for(let a of Object.keys(r.nodes).sort()){let{lastMutation:u,guard:c,...l}=r.nodes[a];s[a]=l}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 vt(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??pe,{codec:s,codecVersion:o,payload:i}=xt(e,r);return s.decode(i,o)}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(o=>Be(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 u=this.tryResolve(o)?.v;if(u!=null&&u.id===i.v.id&&u.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){nn(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 f of[...e.subgraphs].sort((d,g)=>{let m=d.split(D).length,y=g.split(D).length;return m!==y?m-y:d<g?-1:d>g?1:0})){let d=f.split(D),g=o;for(let m of d)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=s?Object.entries(s).map(([f,d])=>({re:Be(f),factory:d})):[],a=f=>{for(let d of i)if(d.re.test(f))return d.factory},u=f=>{let d=f.split(D),g=d.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=o;for(let y of d){let x=m._mounts.get(y);if(!x)throw new Error(`unknown mount "${y}" in path "${f}"`);m=x}return[m,g]},c=Object.entries(e.nodes).filter(([f])=>!f.includes(`${D}${X}${D}`)).sort((f,d)=>f[0]<d[0]?-1:f[0]>d[0]?1:0),l=new Map(c),p=new Map,h=!0;for(;l.size>0&&h;){h=!1;for(let[f,d]of[...l.entries()]){let g=d?.deps??[];if(!g.every(T=>p.has(T)))continue;let[m,y]=u(f),x={...d?.meta??{}},b=a(f),v;if(d?.type==="state")v=te(d.value,{meta:x});else{if(b==null)continue;v=b(y,{path:f,type:d.type,value:d.value,meta:x,deps:g,resolvedDeps:g.map(T=>p.get(T))})}m.add(v,{name:y}),p.set(f,v),l.delete(f),h=!0}}if(l.size>0){let f=[...l.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 o.restore(e),o}toJSON(){return this.snapshot()}attachStorage(e,n={}){let r=e.map(c=>({tier:c,debounceMs:Math.max(0,c.debounceMs??0),compactEvery:Math.max(1,c.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=(c,l)=>{if(c.disposed)return;let p=ir(l.nodes);if(c.lastSnapshot!=null&&p!==""&&p===c.lastFingerprint)return;let h=c.seq+1,f=Ee(),m=c.lastSnapshot==null||h%c.compactEvery===0?{mode:"full",snapshot:l,seq:h,timestamp_ns:f,format_version:he}:{mode:"diff",diff:Tr(c.lastSnapshot,l),seq:h,timestamp_ns:f,format_version:he};if(c.tier.filter&&!c.tier.filter(this.name,m))return;let y;try{y=c.tier.save(this.name,m)}catch(x){n.onError?.(x,c.tier);return}if(y&&typeof y.then=="function"){let v=(c.savePending??Promise.resolve()).then(()=>y,()=>y).then(()=>{c.disposed||(c.seq=h,c.lastSnapshot=l,c.lastFingerprint=p)},T=>{n.onError?.(T,c.tier)});c.savePending=v.finally(()=>{c.savePending===v&&(c.savePending=void 0)})}else c.seq=h,c.lastSnapshot=l,c.lastFingerprint=p},o=(c,l)=>{try{s(c,l)}catch(p){n.onError?.(p,c.tier)}},i=(c,l)=>{if(!l.some(d=>{let g=this.config.messageTier(d[0]);return g>=3&&g<5}))return;if(n.filter){let d=this.tryResolve(c);if(d==null)return;let g=dt(d,Ge("standard"));if(!n.filter(c,g))return}let h,f=()=>(h==null&&(h=this.snapshot()),h);for(let d of r)d.disposed||(d.debounceMs===0?o(d,f()):(d.timer==null&&(d.timer=new Ie),d.timer.start(d.debounceMs,()=>{d.disposed||o(d,this.snapshot())})))},a;if(n.paths!=null){let l=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(p=>{let h=this.tryResolve(p);return h==null?()=>{}:h.subscribe(f=>i(p,f))});a=()=>{for(let p of l)p()}}else a=this.observe().subscribe((c,l)=>i(c,l));let u=()=>{a();for(let c of r)c.disposed=!0,c.timer?.cancel();this._storageDisposers.delete(u)};return this._storageDisposers.add(u),{dispose:u}}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===he&&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(u){r?.onError?.(u,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===he&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(u){r?.onError?.(u,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:j(),...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(x=>!r.has(x)).sort(),i=[...r].filter(x=>!s.has(x)).sort(),a=[],u=[];for(let x of r){if(!s.has(x))continue;let b=e.nodes[x],v=n.nodes[x],T=b.v,_=v.v;T!=null&&_!=null&&T.id===_.id&&T.version!==_.version&&u.push({path:x,id:T.id,from:T.version,to:_.version});let w=T!=null&&_!=null&&T.id===_.id&&T.version===_.version;for(let E of["type","status","sentinel"]){let N=b[E],A=v[E];N!==A&&a.push({path:x,field:E,from:N,to:A})}if(!w)for(let E of["value","meta"]){let N=b[E],A=v[E];ar(N,A)||a.push({path:x,field:E,from:N,to:A})}}let c=x=>`${x.from} ${x.to}`,l=new Set(e.edges.map(c)),p=new Set(n.edges.map(c)),h=n.edges.filter(x=>!l.has(c(x))),f=e.edges.filter(x=>!p.has(c(x))),d=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(x=>!d.has(x)).sort(),y=[...d].filter(x=>!g.has(x)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:u,edgesAdded:h,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:y}}};function Tr(t,e){let n=ge.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 sn(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,u=new Map,c=new Map,l=new Set;for(let[b,v]of Object.entries(t.nodes)){if(!b)continue;l.add(b);let T=v.deps??[];i.set(b,T);for(let _ of T)_&&(l.add(_),a.has(_)||a.set(_,new Set),a.get(_).add(b))}for(let b of t.edges){if(b==null||typeof b!="object")continue;let v=typeof b.from=="string"?b.from:"",T=typeof b.to=="string"?b.to:"";!v||!T||(l.add(v),l.add(T),c.has(v)||c.set(v,new Set),c.get(v).add(T),u.has(T)||u.set(T,new Set),u.get(T).add(v))}if(!l.has(e))return r.withDetail?s:[];let p=r.both===!0,h=b=>{if(p){let w=i.get(b)??[],E=u.get(b),N=a.get(b),A=c.get(b),k=[...w];return E&&k.push(...E),N&&k.push(...N),A&&k.push(...A),k}if(n==="upstream"){let w=i.get(b)??[],E=u.get(b);return E?[...w,...E]:w}let v=a.get(b),T=c.get(b),_=v?[...v]:[];return T&&_.push(...T),_},f=new Set([e]),d=new Map,g=[{path:e,depth:0}],m=0,y=!1;for(;m<g.length;){let b=g[m++];if(o!=null&&b.depth>=o){h(b.path).length>0&&(y=!0);continue}for(let v of h(b.path))!v||f.has(v)||(f.add(v),d.set(v,b.depth+1),g.push({path:v,depth:b.depth+1}))}let x=[...d.keys()].sort((b,v)=>b<v?-1:b>v?1:0);return r.withDetail?{paths:x,depths:d,truncated:y}:x}function Er(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}function mt(t,e,n,r=0){if(!Number.isFinite(t))return r;if(!Number.isFinite(e)||e<=0||!Number.isFinite(n)||n<=0)return Math.max(r,t);let s=t*Math.exp(-n*e);return Math.max(r,s)}function ln(t){if(t!==void 0&&t<1)throw new RangeError("maxSize must be >= 1")}function ne(t){return new Map(t)}function $(t){return t.cache??new Map}function ze(t){return t.cache??[]}function Or(t,e){let n=Math.max(t.length,e.length),r=0,s=0,o=0;for(let i=0;i<n;i+=1){let a=t[i]??0,u=e[i]??0;r+=a*u,s+=a*a,o+=u*u}return s===0||o===0?0:r/Math.sqrt(s*o)}function Nr(t={}){let e=t.maxSize,n=t.policy??"fifo";ln(e);let r=te(new Map,{name:t.name,describeKind:"state"});function s(i){if(e!==void 0)for(;i.size>e;){let a;for(let u of i.values()){if(!a){a=u;continue}let c=n==="lru"?u.lastAccessNs:u.createdAtNs,l=n==="lru"?a.lastAccessNs:a.createdAtNs;c<l&&(a=u)}if(!a)break;i.delete(a.id)}}function o(i){r.emit(i)}return{entries:r,upsert(i,a){let u=j(),c=$(r),l=c.get(i),p=ne(c);p.set(i,{id:i,value:a,createdAtNs:l?.createdAtNs??u,lastAccessNs:u}),s(p),o(p)},remove(i){let a=ne($(r));a.delete(i)&&o(a)},clear(){$(r).size!==0&&o(new Map)},get(i){let a=$(r),u=a.get(i);if(u){if(n==="lru"){let c=j(),l=ne(a);l.set(i,{...u,lastAccessNs:c}),o(l)}return u.value}},has(i){return $(r).has(i)}}}function kr(t,e={}){let n=e.maxSize,r=e.policy??"lru",s=e.decayRate??0,o=e.minScore??0,i=e.score??(()=>1);ln(n);let a=new ge(t),u=te(new Map,{name:"items",describeKind:"state"}),c=ue([u],([g])=>{let m=g??new Map,y=j(),x=[...m.values()].map(b=>{let v=(y-b.lastAccessNs)/1e9;return{...b,score:mt(b.baseScore,v,s,o)}});return x.sort((b,v)=>v.score-b.score||v.lastAccessNs-b.lastAccessNs),x},{name:"ranked",describeKind:"derived"}),l=ue([u],([g])=>(g??new Map).size,{name:"size",describeKind:"derived",initial:0});c.subscribe(()=>{}),l.subscribe(()=>{}),a.add(u,{name:"items"}),a.add(c,{name:"ranked"}),a.add(l,{name:"size"});function p(g,m){let y=(m-g.lastAccessNs)/1e9;return mt(g.baseScore,y,s,o)}function h(g){if(n!==void 0)for(;g.size>n;){let m=j(),y,x=Number.POSITIVE_INFINITY;for(let b of g.values()){let v=p(b,m);if(v<x){y=b,x=v;continue}if(v===x&&y){let T=r==="lru"?b.lastAccessNs:b.createdAtNs,_=r==="lru"?y.lastAccessNs:y.createdAtNs;T<_&&(y=b)}}if(!y)break;g.delete(y.id)}}function f(g){u.emit(g)}return Object.assign(a,{upsert(g,m,y){let x=j(),b=$(u),v=b.get(g),T=y?.score??i(m),_=ne(b);_.set(g,{id:g,value:m,baseScore:T,createdAtNs:v?.createdAtNs??x,lastAccessNs:x}),h(_),f(_)},remove(g){let m=ne($(u));m.delete(g)&&f(m)},clear(){$(u).size!==0&&f(new Map)},getItem(g){let m=$(u),y=m.get(g);if(y){if(r==="lru"){let x=ne(m);x.set(g,{...y,lastAccessNs:j()}),f(x)}return y}}})}function Rr(t={}){let e=t.backend??"flat",n=t.dimension,r;if(e==="hnsw"&&(r=t.hnswFactory?.(),!r))throw new Error('vectorIndex backend "hnsw" requires an optional dependency adapter; install your HNSW package and provide `hnswFactory`.');let s=te(new Map,{describeKind:"state",name:"vector-index"});function o(a){if(n!==void 0&&a.length!==n)throw new RangeError(`vector dimension mismatch: expected ${n}, got ${a.length}`)}function i(a){s.emit(a)}return{backend:e,entries:s,upsert(a,u,c){o(u);let l=ne($(s));l.set(a,{id:a,vector:[...u],meta:c}),e==="hnsw"&&r.upsert(a,u,c),i(l)},remove(a){let u=ne($(s));u.delete(a)&&(e==="hnsw"&&r.remove(a),i(u))},clear(){$(s).size!==0&&(e==="hnsw"&&r.clear(),i(new Map))},search(a,u=5){return o(a),u<=0?[]:e==="hnsw"?r.search(a,u):[...$(s).values()].map(l=>({id:l.id,score:Or(a,l.vector),meta:l.meta})).sort((l,p)=>p.score-l.score).slice(0,u)}}}function Sr(t){let e=new ge(t),n=te(new Map,{name:"entities",describeKind:"state"}),r=te([],{name:"edges",describeKind:"state"}),s=ue([r],([u])=>{let c=u??[],l=new Map;for(let p of c){let h=l.get(p.from)??[];l.set(p.from,Object.freeze([...h,p]))}return l},{name:"adjacency",describeKind:"derived",initial:new Map});s.subscribe(()=>{}),e.add(n,{name:"entities"}),e.add(r,{name:"edges"}),e.add(s,{name:"adjacency"});function o(u){n.emit(u)}function i(u){r.emit(u)}return Object.assign(e,{upsertEntity(u,c){let l=ne($(n));l.set(u,c),o(l)},removeEntity(u){let c=ne($(n)),l=c.delete(u),p=ze(r),h=p.filter(f=>f.from!==u&&f.to!==u);!l&&h.length===p.length||(o(c),i(h))},link(u,c,l,p=1){let h=`${u}\0${c}\0${l}`,f=ze(r),d=new Set(f.map(m=>`${m.from}\0${m.to}\0${m.relation}`)),g=[...f];if(d.has(h))for(let m=0;m<g.length;m+=1){let y=g[m];if(y.from===u&&y.to===c&&y.relation===l){g[m]={...y,weight:p};break}}else g.push({from:u,to:c,relation:l,weight:p});i(g)},unlink(u,c,l){let p=ze(r),h=p.filter(f=>l===void 0?!(f.from===u&&f.to===c):!(f.from===u&&f.to===c&&f.relation===l));h.length!==p.length&&i(h)},related(u,c){return ze(r).filter(l=>(l.from===u||l.to===u)&&(c===void 0||l.relation===c))}})}0&&(module.exports={collection,decay,knowledgeGraph,lightCollection,vectorIndex});
@@ -1,5 +1,5 @@
1
1
  import '../../node-BVV7G1bq.cjs';
2
- import '../../graph-C4Uxwv0T.cjs';
3
- export { C as CollectionEntry, b as CollectionGraph, c as CollectionOptions, d as CollectionPolicy, H as HnswAdapter, e as KnowledgeEdge, K as KnowledgeGraphGraph, L as LightCollectionBundle, f as LightCollectionEntry, g as LightCollectionOptions, R as RankedCollectionEntry, h as VectorBackend, a as VectorIndexBundle, j as VectorIndexOptions, k as VectorRecord, V as VectorSearchResult, l as collection, m as decay, n as knowledgeGraph, o as lightCollection, v as vectorIndex } from '../../index-lKuLYmHO.cjs';
2
+ import '../../graph-CdJeX7O7.cjs';
3
+ export { C as CollectionEntry, b as CollectionGraph, c as CollectionOptions, d as CollectionPolicy, H as HnswAdapter, e as KnowledgeEdge, K as KnowledgeGraphGraph, L as LightCollectionBundle, f as LightCollectionEntry, g as LightCollectionOptions, R as RankedCollectionEntry, h as VectorBackend, a as VectorIndexBundle, j as VectorIndexOptions, k as VectorRecord, V as VectorSearchResult, l as collection, m as decay, n as knowledgeGraph, o as lightCollection, v as vectorIndex } from '../../index-BiGeETJs.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-CWeI0aHd.js';
3
- export { C as CollectionEntry, b as CollectionGraph, c as CollectionOptions, d as CollectionPolicy, H as HnswAdapter, e as KnowledgeEdge, K as KnowledgeGraphGraph, L as LightCollectionBundle, f as LightCollectionEntry, g as LightCollectionOptions, R as RankedCollectionEntry, h as VectorBackend, a as VectorIndexBundle, j as VectorIndexOptions, k as VectorRecord, V as VectorSearchResult, l as collection, m as decay, n as knowledgeGraph, o as lightCollection, v as vectorIndex } from '../../index-DnrZghBB.js';
2
+ import '../../graph-BOhEGJ6E.js';
3
+ export { C as CollectionEntry, b as CollectionGraph, c as CollectionOptions, d as CollectionPolicy, H as HnswAdapter, e as KnowledgeEdge, K as KnowledgeGraphGraph, L as LightCollectionBundle, f as LightCollectionEntry, g as LightCollectionOptions, R as RankedCollectionEntry, h as VectorBackend, a as VectorIndexBundle, j as VectorIndexOptions, k as VectorRecord, V as VectorSearchResult, l as collection, m as decay, n as knowledgeGraph, o as lightCollection, v as vectorIndex } from '../../index-BbcSZCAG.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-OKQUPJRY.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{c as collection,a as decay,e as knowledgeGraph,b as lightCollection,d as vectorIndex};
1
+ import{a,b,c,d,e}from"../../chunk-TOCCHQI6.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{c as collection,a as decay,e as knowledgeGraph,b as lightCollection,d as vectorIndex};
@@ -4,4 +4,4 @@
4
4
  `)}function fn(t){if(t.version!==le)throw new Error(`unsupported snapshot version ${String(t.version)} (expected ${le})`);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 mr(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,d=o.constructor;if(a!==d)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 h=o;if(s.length!==h.length)return!1;for(let f=0;f<s.length;f++)if(!r(s[f],h[f]))return!1;return!0}if(s instanceof Map){let h=o;if(s.size!==h.size)return!1;for(let[f,l]of s)if(!h.has(f)||!r(l,h.get(f)))return!1;return!0}if(s instanceof Set){let h=o;if(s.size!==h.size)return!1;for(let f of s){let l=!1;for(let g of h)if(r(f,g)){l=!0;break}if(!l)return!1}return!0}if(ArrayBuffer.isView(s)){let h=s,f=o;if(h.length!==f.length)return!1;for(let l=0;l<h.length;l++)if(h[l]!==f[l])return!1;return!0}let u=Object.keys(s),c=Object.keys(o);if(u.length!==c.length)return!1;let p=new Set(c);for(let h of u)if(!p.has(h)||!r(s[h],o[h]))return!1;return!0};return r(t,e)}function Et(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(Et);let e=t,n=Object.keys(e).sort(),r={};for(let s of n)r[s]=Et(e[s]);return r}function br(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function yr(t){return t.replaceAll("\\","\\\\").replaceAll('"','\\"')}function vr(t){return t==="TD"?"down":t==="BT"?"up":t==="RL"?"left":"right"}function hn(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 gn(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 _r(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(Et(i),null,e.indent??2);return e.logger?.(a),a}function xr(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}): ${Ze(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 mn(t,e){let n=gn(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}["${br(i)}"]`)}for(let[i,a]of hn(t)){let d=s.get(i),u=s.get(a);!d||!u||o.push(` ${d} --> ${u}`)}return o.join(`
6
6
  `)}function wr(t,e){let n=mn(t,e);return bn(n)}function bn(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 Tr(t,e){let n=gn(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: ${vr(n)}`];for(let i of r){let a=s.get(i);o.push(`${a}: "${yr(i)}"`)}for(let[i,a]of hn(t)){let d=s.get(i),u=s.get(a);!d||!u||o.push(`${d} -> ${u}`)}return o.join(`
7
- `)}function Or(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Xe(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+=Or(r)}return e+="$",new RegExp(e)}var Er={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"},Nr={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ze(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 Sr(t){return t==="none"?Nr:t==="ansi"||t==null?Er:{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 pn(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 kr(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 Ot(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(M))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${M}' (path separator)`);if(t===J)throw new Error(`Graph "${e}": ${n} name "${J}" is reserved for meta companion paths`);kr(t,e,n)}function Rr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(M);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function Dr(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 yn(t){for(let e of t._mounts.values())yn(e);for(let e of t._nodes.values())try{e.down([[F]],{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(M))throw new Error(`Graph name must not contain '${M}' (got "${e}")`);if(e===J)throw new Error(`Graph name "${J}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??ye,this._traceRing=new Re(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=_t(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(Ot(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:ge()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof L&&n._applyVersioning(e)}remove(e){Ot(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,d]of i)a.includes(`${M}${J}${M}`)||o.nodes.push(a);return o.nodes.sort(),o.mounts.push(e),o.mounts.push(...n._collectSubgraphs(`${e}${M}`)),this._mounts.delete(e),n._parent=void 0,yn(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([[F]],{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=Xe(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(M))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([[$,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);ue(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[K]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[I,n]],{actor:r?.actor,internal:s,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 L)for(let c of u._deps){let p=r.get(c.node);p!=null&&a.push([p,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 s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,d]of s)o.set(d,a);let i=[];for(let[a,d]of s)if(d instanceof L)for(let u of d._deps){let c=o.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(Ot(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=Rr(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]===J)return this._resolveMetaChainFromNode(o,s,n.join(M));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(M)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(s.join(M))}_resolveMetaChainFromNode(e,n,r){let s=e,o=0,i=[...n];for(;o<i.length;){if(i[o]!==J)throw new Error(`Graph "${this.name}": expected ${J} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${J} in "${r}"`);let a=i[o+1],d=s.meta[a];if(!d)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=d,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 d of this._mounts.values())d._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=Dr(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 q)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(d){if(d instanceof q)throw d;o.push(d)}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=Be(e?.detail,e?.fields),o=e?.format==="spec",i=o?Be("minimal"):s,a=[];this._collectObserveTargets("",a);let d=new Map;for(let[x,w]of a)d.set(w,x);let u=[];{let x=a.map(([,N])=>N),w=new Set(d.values()),O=0;for(;x.length>0;){let N=x.shift();if(N instanceof L)for(let D of N._deps){let S=D.node;if(d.has(S))continue;let R=S.name??"",k=R;if(!k||w.has(k))if(R){let G=2;for(;w.has(`${R}#${G}`);)G++;k=`${R}#${G}`}else for(k=`__internal__/${O++}`;w.has(k);)k=`__internal__/${O++}`;d.set(S,k),w.add(k),u.push([k,S]),x.push(S)}}}let c=[...a,...u],p={};for(let[x,w]of c){if(n!=null&&!w.allowsObserve(n))continue;let O=vt(w,i),N=w instanceof L?w._deps.map(k=>d.get(k.node)??k.node.name??""):[],{name:D,...S}=O,R={...S,deps:N};if(!o){let k=this._annotations.get(x);k!=null&&(R.annotation=k)}if(r!=null)if(typeof r=="function"){let k=r;if(!(k.length>=2?k(x,R):k(R)))continue}else{let k=!0;for(let[G,B]of Object.entries(r)){let X=G==="deps_includes"?"depsIncludes":G==="meta_has"?"metaHas":G;if(X==="depsIncludes"){if(!R.deps.includes(String(B))){k=!1;break}continue}if(X==="metaHas"){if(!Object.hasOwn(R.meta??{},String(B))){k=!1;break}continue}if(R[X]!==B){k=!1;break}}if(!k)continue}p[x]=R}let h=new Set(Object.keys(p)),f=[];for(let[x,w]of c)if(w instanceof L)for(let O of w._deps){let N=d.get(O.node);N!=null&&f.push([N,x])}f.sort((x,w)=>x[0]<w[0]?-1:x[0]>w[0]?1:x[1]<w[1]?-1:x[1]>w[1]?1:0);let l=f.map(([x,w])=>({from:x,to:w}));(n!=null||r!=null)&&(l=l.filter(x=>h.has(x.from)&&h.has(x.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(x=>{let w=`${x}${M}`;return[...h].some(O=>O===x||O.startsWith(w))}):g,y=this,_=e,b={name:this.name,nodes:p,edges:l,subgraphs:m,expand(x){let w={..._,format:void 0};return Array.isArray(x)?(w.fields=x,w.detail=void 0):(w.detail=x,w.fields=void 0),y.describe(w)}},v=e??{},T=v.format;return T==="json"?_r(b,v):T==="pretty"?xr(b,v):T==="mermaid"?mn(b,v):T==="mermaid-url"?wr(b,v):T==="d2"?Tr(b,v):T==="ascii"?dn(b,v):b}_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}${M}`))}return n}resourceProfile(e){return ln(this,e)}reachable(e,n,r={}){return r.withDetail===!0?Nt(this.describe(),e,n,{...r,withDetail:!0}):Nt(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,d]of Object.entries(s.nodes))d.lastMutation!=null&&i.set(a,d.lastMutation);return Kt(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=ee(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=()=>{a||d||(a=!0,Ee(()=>{a=!1,!d&&(s+=1,o.emit(s))}))},c=i.onEvent(m=>{let y=m.type;y!=="data"&&y!=="error"&&y!=="complete"&&y!=="teardown"||u()}),p=[],h=new WeakSet,f=m=>{if(h.has(m)||d)return;h.add(m);let y=m.topology.subscribe(_=>{for(let b of _){if(b[0]!==$)continue;let v=b[1];if(u(),v.kind==="added"&&v.nodeKind==="mount"){let T=m._mounts.get(v.name);T!=null&&f(T)}}});p.push(y);for(let _ of m._mounts.keys()){let b=m._mounts.get(_);b!=null&&f(b)}};f(this);let l;try{l=Y([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,y)=>m===y})}catch(m){c();for(let y of p)y();throw i.dispose(),m}let g=te(l);return{node:l,dispose(){d=!0,c();for(let m of p)m();p.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=ee(s,{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,Ee(()=>{a=!1,!d&&(s+=1,o.emit(s))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},p;try{p=Y([o],()=>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&&Ar(f.steps,l.steps)})}catch(f){throw u(),i.dispose(),f}let h=te(p);return{node:p,dispose(){d=!0,u(),i.dispose(),h()}}}_pathsMatching(e){let n=Xe(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}${M}${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}${M}${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}${M}${J}${M}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=pn(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,p=this.resolve(c);if(a!=null&&!p.allowsObserve(a))throw new q({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,p]],o,"one"):{subscribe(h){return p.subscribe(h)},up(h){try{p.up?.(h)}catch(f){if(f instanceof q)return;throw f}}}}let d=[];this._collectObserveTargets("",d),d.sort((c,p)=>c[0]<p[0]?-1:c[0]>p[0]?1:0);let u=a==null?d:d.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,o,"all"):{subscribe:c=>{let p=u.map(([h,f])=>f.subscribe(l=>{c(h,l)}));return()=>{for(let h of p)h()}},up:(c,p)=>{try{this.resolve(c).up?.(p)}catch(h){if(h instanceof q)return;throw h}}}}_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,p)=>c[0]<p[0]?-1:c[0]>p[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,o)}_createObserveResult(e,n,r){let s=n.timeline===!0,o=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",d=this.config.inspectorEnabled,u=(o||i)&&d,c=n.maxEvents,p=c!=null&&c>0?new Re(c):null,h=[],f=new Set,l={},g=new Set,m=0,y=0,_=0,b=0,v=0,T=0,x=!1,w=!1,O=0,N=new Map,D=new Map,S=new Map,R=E=>{p?p.push(E):h.push(E);for(let C of f)C(E)},k=()=>s?{timestamp_ns:ge(),in_batch:Oe(),batch_id:O}:{},G=(E,C)=>{if(!(!u||!(E instanceof L)))return E._setInspectorHook(j=>{if(j.kind==="dep_message")N.set(E,j.depIndex);else if(j.kind==="run"){let xe=j.batchData.map((A,H)=>A!=null&&A.length>0?A.at(-1):j.prevData[H]);D.set(E,xe);let U=j.batchData.map(A=>A!=null?[...A]:void 0);S.set(E,U),i&&R({type:"derived",path:C,dep_values:xe,dep_batches:U,...k()})}})},B=E=>{let C=N.get(E),j=D.get(E);if(!o||j==null)return{};let U=(C!=null&&C>=0&&E instanceof L?E._deps[C]:void 0)?.node,A=U?.v,H=S.get(E);return{trigger_dep_index:C,trigger_dep_name:U?.name,...A!=null?{trigger_version:{id:A.id,version:A.version}}:{},dep_values:[...j],...H!=null?{dep_batches:H}:{}}},X=[],oe=[];for(let[E,C]of e){let j=G(C,E);j&&X.push(j),oe.push(C.subscribe(xe=>{O++;for(let U of xe){let A=U[0],H=k();if(A===$){l[E]=U[1];let ot=C instanceof L?C.lastMutation?.actor??fe:fe;R({type:"data",path:E,data:U[1],actor:ot,...H,...B(C)})}else if(a)A===z?m++:A===Z?y++:A===K?_++:A===Q?b++:A===ne?v++:A===F?T++:A===V&&!g.has(E)?x=!0:A===I&&(w=!0,g.add(E));else if(A===z)m++,R({type:"dirty",path:E,...H});else if(A===Z)y++,R({type:"resolved",path:E,...H,...B(C)});else if(A===K)_++,R({type:"invalidate",path:E,...H});else if(A===Q)b++,R({type:"pause",path:E,lockId:U[1],...H});else if(A===ne)v++,R({type:"resume",path:E,lockId:U[1],...H});else if(A===V)g.has(E)||(x=!0),R({type:"complete",path:E,...H});else if(A===I){w=!0,g.add(E);let ot=C instanceof L?C.lastMutation?.actor??fe:fe;R({type:"error",path:E,data:U[1],actor:ot,...H})}else A===F&&(T++,R({type:"teardown",path:E,...H}))}}))}let nt=!1,rt=()=>{if(!nt){nt=!0;for(let E of oe)E();for(let E of X)E();for(let E of Ce)E({value:void 0,done:!0});Ce.length=0}},st=[],Ce=[];f.add(E=>{let C=Ce.shift();C?C({value:E,done:!1}):st.push(E)});let St={get values(){return l},get dirtyCount(){return m},get resolvedCount(){return y},get invalidateCount(){return _},get pauseCount(){return b},get resumeCount(){return v},get teardownCount(){return T},get events(){return p?p.toArray():[...h]},get anyCompletedCleanly(){return x},get anyErrored(){return w},get completedWithoutErrors(){return x&&!w},onEvent(E){return f.add(E),()=>f.delete(E)},dispose:rt,expand(E){rt();let C={...n};return typeof E=="string"?C.detail=E:Object.assign(C,E),r(pn(C))},[Symbol.asyncIterator](){return{next(){return st.length>0?Promise.resolve({value:st.shift(),done:!1}):nt?Promise.resolve({value:void 0,done:!0}):new Promise(E=>Ce.push(E))},return(){return rt(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(St,n),St}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let s=n.logger??(l=>console.log(l)),o=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=o==null&&i==null?()=>!0:l=>(o==null||o.has(l))&&(i==null||!i.has(l)),d=Sr(n.theme),u=r==="stage-log"?ge():0,c=l=>l==null?"":n.stageLabels?.[l]??l,p=(l,g)=>l.length>g?`${l.slice(0,g-1)}\u2026`:l,h=l=>l.type==="data"||l.type==="error"?p(Ze(l.data),120):"",f=l=>{if(r==="stage-log"){let w=(ge()-u)/1e9,O=c(l.path).padEnd(9);if(l.type==="data"){let N=h(l);return`[${w.toFixed(3)}s] ${O} \u2190${N?` ${N}`:""}`}if(l.type==="error"){let N=h(l);return`[${w.toFixed(3)}s] ${O} \u2717${N?` ${N}`:""}`}return l.type==="complete"?`[${w.toFixed(3)}s] ${O} \u25A0 complete`:`[${w.toFixed(3)}s] ${O} ${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} `:"",y=l.type==="data"||l.type==="error",_=l.type==="pause"||l.type==="resume",b=y?` ${Ze(l.data)}`:_?` ${Ze(l.lockId)}`:"",v=l.type==="data"||l.type==="resolved"||l.type==="derived"?l:void 0,T=v?.trigger_dep_name!=null?` <- ${v.trigger_dep_name}`:v?.trigger_dep_index!=null?` <- #${v.trigger_dep_index}`:"",x=l.in_batch?" [batch]":"";return`${m}${g}${l.type.toUpperCase()}${d.reset}${b}${T}${x}`};e.onEvent(l=>{a(l.type)&&s(f(l),l)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){cn(this._disposers,this.name),this.signal([[F]],{internal:!0}),cn(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:d,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 It(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??ye,{codec:s,codecVersion:o,payload:i}=Lt(e,r);return s.decode(i,o)}restore(e,n){if(fn(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=>Xe(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 d=this.tryResolve(o)?.v;if(d!=null&&d.id===i.v.id&&d.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){fn(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 f of[...e.subgraphs].sort((l,g)=>{let m=l.split(M).length,y=g.split(M).length;return m!==y?m-y:l<g?-1:l>g?1:0})){let l=f.split(M),g=o;for(let m of l)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=s?Object.entries(s).map(([f,l])=>({re:Xe(f),factory:l})):[],a=f=>{for(let l of i)if(l.re.test(f))return l.factory},d=f=>{let l=f.split(M),g=l.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=o;for(let y of l){let _=m._mounts.get(y);if(!_)throw new Error(`unknown mount "${y}" in path "${f}"`);m=_}return[m,g]},u=Object.entries(e.nodes).filter(([f])=>!f.includes(`${M}${J}${M}`)).sort((f,l)=>f[0]<l[0]?-1:f[0]>l[0]?1:0),c=new Map(u),p=new Map,h=!0;for(;c.size>0&&h;){h=!1;for(let[f,l]of[...c.entries()]){let g=l?.deps??[];if(!g.every(T=>p.has(T)))continue;let[m,y]=d(f),_={...l?.meta??{}},b=a(f),v;if(l?.type==="state")v=ee(l.value,{meta:_});else{if(b==null)continue;v=b(y,{path:f,type:l.type,value:l.value,meta:_,deps:g,resolvedDeps:g.map(T=>p.get(T))})}m.add(v,{name:y}),p.set(f,v),c.delete(f),h=!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 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 p=gr(c.nodes);if(u.lastSnapshot!=null&&p!==""&&p===u.lastFingerprint)return;let h=u.seq+1,f=Ie(),m=u.lastSnapshot==null||h%u.compactEvery===0?{mode:"full",snapshot:c,seq:h,timestamp_ns:f,format_version:le}:{mode:"diff",diff:vn(u.lastSnapshot,c),seq:h,timestamp_ns:f,format_version:le};if(u.tier.filter&&!u.tier.filter(this.name,m))return;let y;try{y=u.tier.save(this.name,m)}catch(_){n.onError?.(_,u.tier);return}if(y&&typeof y.then=="function"){let v=(u.savePending??Promise.resolve()).then(()=>y,()=>y).then(()=>{u.disposed||(u.seq=h,u.lastSnapshot=c,u.lastFingerprint=p)},T=>{n.onError?.(T,u.tier)});u.savePending=v.finally(()=>{u.savePending===v&&(u.savePending=void 0)})}else u.seq=h,u.lastSnapshot=c,u.lastFingerprint=p},o=(u,c)=>{try{s(u,c)}catch(p){n.onError?.(p,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=vt(l,Be("standard"));if(!n.filter(u,g))return}let h,f=()=>(h==null&&(h=this.snapshot()),h);for(let l of r)l.disposed||(l.debounceMs===0?o(l,f()):(l.timer==null&&(l.timer=new Ke),l.timer.start(l.debounceMs,()=>{l.disposed||o(l,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(p=>{let h=this.tryResolve(p);return h==null?()=>{}:h.subscribe(f=>i(p,f))});a=()=>{for(let p of c)p()}}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 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===le&&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(d){r?.onError?.(d,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===le&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(d){r?.onError?.(d,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:ge(),...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(_=>!r.has(_)).sort(),i=[...r].filter(_=>!s.has(_)).sort(),a=[],d=[];for(let _ of r){if(!s.has(_))continue;let b=e.nodes[_],v=n.nodes[_],T=b.v,x=v.v;T!=null&&x!=null&&T.id===x.id&&T.version!==x.version&&d.push({path:_,id:T.id,from:T.version,to:x.version});let w=T!=null&&x!=null&&T.id===x.id&&T.version===x.version;for(let O of["type","status","sentinel"]){let N=b[O],D=v[O];N!==D&&a.push({path:_,field:O,from:N,to:D})}if(!w)for(let O of["value","meta"]){let N=b[O],D=v[O];mr(N,D)||a.push({path:_,field:O,from:N,to:D})}}let u=_=>`${_.from} ${_.to}`,c=new Set(e.edges.map(u)),p=new Set(n.edges.map(u)),h=n.edges.filter(_=>!c.has(u(_))),f=e.edges.filter(_=>!p.has(u(_))),l=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(_=>!l.has(_)).sort(),y=[...l].filter(_=>!g.has(_)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:d,edgesAdded:h,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:y}}};function vn(t,e){let n=re.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 Nt(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,d=new Map,u=new Map,c=new Set;for(let[b,v]of Object.entries(t.nodes)){if(!b)continue;c.add(b);let T=v.deps??[];i.set(b,T);for(let x of T)x&&(c.add(x),a.has(x)||a.set(x,new Set),a.get(x).add(b))}for(let b of t.edges){if(b==null||typeof b!="object")continue;let v=typeof b.from=="string"?b.from:"",T=typeof b.to=="string"?b.to:"";!v||!T||(c.add(v),c.add(T),u.has(v)||u.set(v,new Set),u.get(v).add(T),d.has(T)||d.set(T,new Set),d.get(T).add(v))}if(!c.has(e))return r.withDetail?s:[];let p=r.both===!0,h=b=>{if(p){let w=i.get(b)??[],O=d.get(b),N=a.get(b),D=u.get(b),S=[...w];return O&&S.push(...O),N&&S.push(...N),D&&S.push(...D),S}if(n==="upstream"){let w=i.get(b)??[],O=d.get(b);return O?[...w,...O]:w}let v=a.get(b),T=u.get(b),x=v?[...v]:[];return T&&x.push(...T),x},f=new Set([e]),l=new Map,g=[{path:e,depth:0}],m=0,y=!1;for(;m<g.length;){let b=g[m++];if(o!=null&&b.depth>=o){h(b.path).length>0&&(y=!0);continue}for(let v of h(b.path))!v||f.has(v)||(f.add(v),l.set(v,b.depth+1),g.push({path:v,depth:b.depth+1}))}let _=[...l.keys()].sort((b,v)=>b<v?-1:b>v?1:0);return r.withDetail?{paths:_,depths:l,truncated:y}:_}function Ar(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}wt();function _n(t,e,n){return{[t]:!0,[`${t}_type`]:e,...n??{}}}var Cr=2147483647;function Qe(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<0)throw new Error(`${e} must be a non-negative integer`);return t}function ce(t,e){return _n("messaging",t,e)}var De=class extends re{_log;events;latest;hasLatest;constructor(e,n={}){super(e,n.graph),this._log=Ut([],{name:"events",maxSize:n.retainedLimit}),this.events=this._log.entries,this.add(this.events,{name:"events"}),this.latest=Y([this.events],([r])=>{let s=r;return s.length===0?null:s[s.length-1]},{name:"latest",describeKind:"derived",meta:ce("topic_latest")}),this.add(this.latest,{name:"latest"}),this.addDisposer(te(this.latest)),this.hasLatest=Y([this.events],([r])=>r.length>0,{name:"hasLatest",describeKind:"derived",meta:ce("topic_has_latest")}),this.add(this.hasLatest,{name:"hasLatest"}),this.addDisposer(te(this.hasLatest)),this.addDisposer(()=>{this.events.down([[V]])}),this.addDisposer(()=>this._log.disposeAllViews())}publish(e){this._log.append(e)}retained(){return this.events.cache}},Ae=class extends re{source;cursor;available;topic;constructor(e,n,r={}){super(e,r.graph);let s=Qe(r.cursor??0,"subscription cursor");this.topic=n;let o=n.events;this.source=Y([o],([i])=>i,{name:"source",describeKind:"derived",meta:ce("subscription_source"),initial:o.cache}),this.add(this.source,{name:"source"}),this.cursor=ee(s,{name:"cursor",describeKind:"state",meta:ce("subscription_cursor")}),this.add(this.cursor,{name:"cursor"}),this.available=Y([this.source,this.cursor],([i,a])=>{let d=i,u=Math.max(0,Math.trunc(a??0));return d.slice(u)},{name:"available",describeKind:"derived",meta:ce("subscription_available"),initial:[]}),this.add(this.available,{name:"available"}),this.addDisposer(te(this.source)),this.addDisposer(te(this.available))}ack(e){let n=this.available.cache,r=e===void 0?n.length:Qe(e,"subscription ack count"),s=Math.min(r,n.length);if(s<=0)return this.cursor.cache;let o=this.cursor.cache+s;return this.cursor.emit(o),o}pull(e,n={}){let r=this.available.cache,s=e===void 0?r.length:Qe(e,"subscription pull limit"),o=r.slice(0,s);return n.ack&&o.length>0&&this.ack(o.length),o}},et=class extends re{_sourceSub;_target;bridgedCount;constructor(e,n,r,s={}){super(e,s.graph),this._sourceSub=xn(`${e}-subscription`,n,{cursor:s.cursor}),this._target=r,this.mount("subscription",this._sourceSub),this.bridgedCount=ee(0,{name:"bridgedCount",describeKind:"state",meta:ce("topic_bridge_count")}),this.add(this.bridgedCount,{name:"bridgedCount"});let o=Math.max(1,Qe(s.maxPerPump??Cr,"topic bridge maxPerPump")),i=s.map??(d=>d),a=ve([this._sourceSub.available],()=>{let d=this._sourceSub.pull(o,{ack:!0});if(d.length===0)return;let u=0;for(let c of d){let p=i(c);p!==void 0&&(this._target.publish(p),u+=1)}if(u>0){let c=this.bridgedCount.cache;this.bridgedCount.emit(c+u)}},{name:"pump",describeKind:"effect",meta:ce("topic_bridge_pump")});this.add(a,{name:"pump"}),this.addDisposer(te(a))}},tt=class extends re{_topics=new Map;_version=0;_defaultTopicOptions;constructor(e,n={}){super(e,n.graph),this._defaultTopicOptions={...n.defaultTopicOptions??{}}}get version(){return this._version}get size(){return this._topics.size}has(e){return this._topics.has(e)}topicNames(){return this._topics.keys()}topic(e,n){let r=this._topics.get(e);if(r===void 0){let s={...this._defaultTopicOptions,...n??{}};r=new De(e,s),this._topics.set(e,r),this.mount(e,r),this._version+=1}return r}publish(e,n){this.topic(e).publish(n)}publishMany(e){ue(()=>{for(let[n,r]of e)this.topic(n).publish(r)})}subscribe(e,n,r){let s=this.topic(n);return new Ae(e,s,r)}removeTopic(e){if(!this._topics.has(e))return!1;try{this.remove(e)}finally{this._topics.delete(e),this._version+=1}return!0}};function Mr(t,e){return new De(t,e)}function Gr(t,e){return new tt(t,e)}function xn(t,e,n){return new Ae(t,e,n)}function Ir(t,e,n,r){return new et(t,e,n,r)}0&&(module.exports={MessagingHubGraph,SubscriptionGraph,TopicBridgeGraph,TopicGraph,messagingHub,subscription,topic,topicBridge});
7
+ `)}function Or(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Xe(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+=Or(r)}return e+="$",new RegExp(e)}var Er={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"},Nr={data:"",dirty:"",resolved:"",invalidate:"",pause:"",resume:"",complete:"",error:"",teardown:"",derived:"",path:"",reset:""};function Ze(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 Sr(t){return t==="none"?Nr:t==="ansi"||t==null?Er:{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 pn(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 kr(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 Ot(t,e,n){if(t==="")throw new Error(`Graph "${e}": ${n} name must be non-empty`);if(t.includes(M))throw new Error(`Graph "${e}": ${n} "${t}" must not contain '${M}' (path separator)`);if(t===J)throw new Error(`Graph "${e}": ${n} name "${J}" is reserved for meta companion paths`);kr(t,e,n)}function Rr(t,e){if(t==="")throw new Error(`Graph "${e}": resolve path must be non-empty`);let n=t.split(M);for(let r of n)if(r==="")throw new Error(`Graph "${e}": resolve path has empty segment`);return n}function Dr(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 yn(t){for(let e of t._mounts.values())yn(e);for(let e of t._nodes.values())try{e.down([[F]],{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(M))throw new Error(`Graph name must not contain '${M}' (got "${e}")`);if(e===J)throw new Error(`Graph name "${J}" is reserved for meta companion paths`);this.name=e,this.opts=Object.freeze({...n??{}}),this.config=n?.config??ye,this._traceRing=new Re(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=_t(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(Ot(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:ge()})),e}setVersioning(e){if(e!=null)for(let n of this._nodes.values())n instanceof L&&n._applyVersioning(e)}remove(e){Ot(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,d]of i)a.includes(`${M}${J}${M}`)||o.nodes.push(a);return o.nodes.sort(),o.mounts.push(e),o.mounts.push(...n._collectSubgraphs(`${e}${M}`)),this._mounts.delete(e),n._parent=void 0,yn(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([[F]],{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=Xe(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(M))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([[$,n]],{actor:r?.actor,internal:s,delivery:"write"})}setAll(e,n){let r=Symbol.iterator in e?e:Object.entries(e);ue(()=>{for(let[s,o]of r)this.set(s,o,n)})}invalidate(e,n){let r=n?.internal===!0;this.node(e).down([[K]],{actor:n?.actor,internal:r,delivery:"write"})}error(e,n,r){let s=r?.internal===!0;this.node(e).down([[I,n]],{actor:r?.actor,internal:s,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 L)for(let c of u._deps){let p=r.get(c.node);p!=null&&a.push([p,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 s=[];this._collectObserveTargets("",s);let o=new Map;for(let[a,d]of s)o.set(d,a);let i=[];for(let[a,d]of s)if(d instanceof L)for(let u of d._deps){let c=o.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(Ot(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=Rr(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]===J)return this._resolveMetaChainFromNode(o,s,n.join(M));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(M)}" is invalid`):new Error(`Graph "${this.name}": unknown mount or node "${r}"`);return i.resolve(s.join(M))}_resolveMetaChainFromNode(e,n,r){let s=e,o=0,i=[...n];for(;o<i.length;){if(i[o]!==J)throw new Error(`Graph "${this.name}": expected ${J} segment in meta path "${r}"`);if(o+1>=i.length)throw new Error(`Graph "${this.name}": meta path requires a key after ${J} in "${r}"`);let a=i[o+1],d=s.meta[a];if(!d)throw new Error(`Graph "${this.name}": unknown meta "${a}" in path "${r}"`);s=d,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 d of this._mounts.values())d._signalDeliver(e,n,r,s);let i=n.internal===!0?{internal:!0}:{actor:n.actor,delivery:"signal"},a=Dr(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 q)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(d){if(d instanceof q)throw d;o.push(d)}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=Be(e?.detail,e?.fields),o=e?.format==="spec",i=o?Be("minimal"):s,a=[];this._collectObserveTargets("",a);let d=new Map;for(let[x,w]of a)d.set(w,x);let u=[];{let x=a.map(([,N])=>N),w=new Set(d.values()),O=0;for(;x.length>0;){let N=x.shift();if(N instanceof L)for(let D of N._deps){let S=D.node;if(d.has(S))continue;let R=S.name??"",k=R;if(!k||w.has(k))if(R){let G=2;for(;w.has(`${R}#${G}`);)G++;k=`${R}#${G}`}else for(k=`__internal__/${O++}`;w.has(k);)k=`__internal__/${O++}`;d.set(S,k),w.add(k),u.push([k,S]),x.push(S)}}}let c=[...a,...u],p={};for(let[x,w]of c){if(n!=null&&!w.allowsObserve(n))continue;let O=vt(w,i),N=w instanceof L?w._deps.map(k=>d.get(k.node)??k.node.name??""):[],{name:D,...S}=O,R={...S,deps:N};if(!o){let k=this._annotations.get(x);k!=null&&(R.annotation=k)}if(r!=null)if(typeof r=="function"){let k=r;if(!(k.length>=2?k(x,R):k(R)))continue}else{let k=!0;for(let[G,B]of Object.entries(r)){let X=G==="deps_includes"?"depsIncludes":G==="meta_has"?"metaHas":G;if(X==="depsIncludes"){if(!R.deps.includes(String(B))){k=!1;break}continue}if(X==="metaHas"){if(!Object.hasOwn(R.meta??{},String(B))){k=!1;break}continue}if(R[X]!==B){k=!1;break}}if(!k)continue}p[x]=R}let h=new Set(Object.keys(p)),f=[];for(let[x,w]of c)if(w instanceof L)for(let O of w._deps){let N=d.get(O.node);N!=null&&f.push([N,x])}f.sort((x,w)=>x[0]<w[0]?-1:x[0]>w[0]?1:x[1]<w[1]?-1:x[1]>w[1]?1:0);let l=f.map(([x,w])=>({from:x,to:w}));(n!=null||r!=null)&&(l=l.filter(x=>h.has(x.from)&&h.has(x.to)));let g=this._collectSubgraphs(""),m=n!=null||r!=null?g.filter(x=>{let w=`${x}${M}`;return[...h].some(O=>O===x||O.startsWith(w))}):g,y=this,_=e,b={name:this.name,nodes:p,edges:l,subgraphs:m,expand(x){let w={..._,format:void 0};return Array.isArray(x)?(w.fields=x,w.detail=void 0):(w.detail=x,w.fields=void 0),y.describe(w)}},v=e??{},T=v.format;return T==="json"?_r(b,v):T==="pretty"?xr(b,v):T==="mermaid"?mn(b,v):T==="mermaid-url"?wr(b,v):T==="d2"?Tr(b,v):T==="ascii"?dn(b,v):b}_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}${M}`))}return n}resourceProfile(e){return ln(this,e)}reachable(e,n,r={}){return r.withDetail===!0?Nt(this.describe(),e,n,{...r,withDetail:!0}):Nt(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,d]of Object.entries(s.nodes))d.lastMutation!=null&&i.set(a,d.lastMutation);return Kt(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=ee(s,{name:`${r}_version`}),i=this.observe({timeline:!0,structured:!0}),a=!1,d=!1,u=()=>{a||d||(a=!0,Ee(()=>{a=!1,!d&&(s+=1,o.emit(s))}))},c=i.onEvent(m=>{let y=m.type;y!=="data"&&y!=="error"&&y!=="complete"&&y!=="teardown"||u()}),p=[],h=new WeakSet,f=m=>{if(h.has(m)||d)return;h.add(m);let y=m.topology.subscribe(_=>{for(let b of _){if(b[0]!==$)continue;let v=b[1];if(u(),v.kind==="added"&&v.nodeKind==="mount"){let T=m._mounts.get(v.name);T!=null&&f(T)}}});p.push(y);for(let _ of m._mounts.keys()){let b=m._mounts.get(_);b!=null&&f(b)}};f(this);let l;try{l=Y([o],()=>this.describe(n),{name:r,describeKind:"derived",meta:{domain:"audit",kind:"describe"},equals:(m,y)=>m===y})}catch(m){c();for(let y of p)y();throw i.dispose(),m}let g=te(l);return{node:l,dispose(){d=!0,c();for(let m of p)m();p.length=0,i.dispose(),g()}}}_explainReactive(e,n,r){let s=0,o=ee(s,{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,Ee(()=>{a=!1,!d&&(s+=1,o.emit(s))}))}),c={...r?.maxDepth!=null?{maxDepth:r.maxDepth}:{},...r?.findCycle===!0?{findCycle:!0}:{}},p;try{p=Y([o],()=>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&&Ar(f.steps,l.steps)})}catch(f){throw u(),i.dispose(),f}let h=te(p);return{node:p,dispose(){d=!0,u(),i.dispose(),h()}}}_pathsMatching(e){let n=Xe(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}${M}${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}${M}${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}${M}${J}${M}${s}`;r.push([i,o]),this._appendMetaObserveTargets(i,o,r)}}observe(e,n){let r=typeof e=="string",o=pn(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,p=this.resolve(c);if(a!=null&&!p.allowsObserve(a))throw new q({actor:a,action:"observe",nodeName:c});return i?this._buildStructuredObserver([[c,p]],o,"one"):{subscribe(h){return p.subscribe(h)},up(h){try{p.up?.(h)}catch(f){if(f instanceof q)return;throw f}}}}let d=[];this._collectObserveTargets("",d),d.sort((c,p)=>c[0]<p[0]?-1:c[0]>p[0]?1:0);let u=a==null?d:d.filter(([,c])=>c.allowsObserve(a));return i?this._buildStructuredObserver(u,o,"all"):{subscribe:c=>{let p=u.map(([h,f])=>f.subscribe(l=>{c(h,l)}));return()=>{for(let h of p)h()}},up:(c,p)=>{try{this.resolve(c).up?.(p)}catch(h){if(h instanceof q)return;throw h}}}}_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,p)=>c[0]<p[0]?-1:c[0]>p[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,o)}_createObserveResult(e,n,r){let s=n.timeline===!0,o=n.causal===!0,i=n.derived===!0,a=n.detail==="minimal",d=this.config.inspectorEnabled,u=(o||i)&&d,c=n.maxEvents,p=c!=null&&c>0?new Re(c):null,h=[],f=new Set,l={},g=new Set,m=0,y=0,_=0,b=0,v=0,T=0,x=!1,w=!1,O=0,N=new Map,D=new Map,S=new Map,R=E=>{p?p.push(E):h.push(E);for(let C of f)C(E)},k=()=>s?{timestamp_ns:ge(),in_batch:Oe(),batch_id:O}:{},G=(E,C)=>{if(!(!u||!(E instanceof L)))return E._setInspectorHook(j=>{if(j.kind==="dep_message")N.set(E,j.depIndex);else if(j.kind==="run"){let xe=j.batchData.map((A,H)=>A!=null&&A.length>0?A.at(-1):j.prevData[H]);D.set(E,xe);let U=j.batchData.map(A=>A!=null?[...A]:void 0);S.set(E,U),i&&R({type:"derived",path:C,dep_values:xe,dep_batches:U,...k()})}})},B=E=>{let C=N.get(E),j=D.get(E);if(!o||j==null)return{};let U=(C!=null&&C>=0&&E instanceof L?E._deps[C]:void 0)?.node,A=U?.v,H=S.get(E);return{trigger_dep_index:C,trigger_dep_name:U?.name,...A!=null?{trigger_version:{id:A.id,version:A.version}}:{},dep_values:[...j],...H!=null?{dep_batches:H}:{}}},X=[],oe=[];for(let[E,C]of e){let j=G(C,E);j&&X.push(j),oe.push(C.subscribe(xe=>{O++;for(let U of xe){let A=U[0],H=k();if(A===$){l[E]=U[1];let ot=C instanceof L?C.lastMutation?.actor??fe:fe;R({type:"data",path:E,data:U[1],actor:ot,...H,...B(C)})}else if(a)A===z?m++:A===Z?y++:A===K?_++:A===Q?b++:A===ne?v++:A===F?T++:A===V&&!g.has(E)?x=!0:A===I&&(w=!0,g.add(E));else if(A===z)m++,R({type:"dirty",path:E,...H});else if(A===Z)y++,R({type:"resolved",path:E,...H,...B(C)});else if(A===K)_++,R({type:"invalidate",path:E,...H});else if(A===Q)b++,R({type:"pause",path:E,lockId:U[1],...H});else if(A===ne)v++,R({type:"resume",path:E,lockId:U[1],...H});else if(A===V)g.has(E)||(x=!0),R({type:"complete",path:E,...H});else if(A===I){w=!0,g.add(E);let ot=C instanceof L?C.lastMutation?.actor??fe:fe;R({type:"error",path:E,data:U[1],actor:ot,...H})}else A===F&&(T++,R({type:"teardown",path:E,...H}))}}))}let nt=!1,rt=()=>{if(!nt){nt=!0;for(let E of oe)E();for(let E of X)E();for(let E of Ce)E({value:void 0,done:!0});Ce.length=0}},st=[],Ce=[];f.add(E=>{let C=Ce.shift();C?C({value:E,done:!1}):st.push(E)});let St={get values(){return l},get dirtyCount(){return m},get resolvedCount(){return y},get invalidateCount(){return _},get pauseCount(){return b},get resumeCount(){return v},get teardownCount(){return T},get events(){return p?p.toArray():[...h]},get anyCompletedCleanly(){return x},get anyErrored(){return w},get completedWithoutErrors(){return x&&!w},onEvent(E){return f.add(E),()=>f.delete(E)},dispose:rt,expand(E){rt();let C={...n};return typeof E=="string"?C.detail=E:Object.assign(C,E),r(pn(C))},[Symbol.asyncIterator](){return{next(){return st.length>0?Promise.resolve({value:st.shift(),done:!1}):nt?Promise.resolve({value:void 0,done:!0}):new Promise(E=>Ce.push(E))},return(){return rt(),Promise.resolve({value:void 0,done:!0})}}}};return n.format!=null&&this._attachFormatLogger(St,n),St}_attachFormatLogger(e,n){let r=n.format;if(r==null)return;let s=n.logger??(l=>console.log(l)),o=n.includeTypes?new Set(n.includeTypes):null,i=n.excludeTypes?new Set(n.excludeTypes):null,a=o==null&&i==null?()=>!0:l=>(o==null||o.has(l))&&(i==null||!i.has(l)),d=Sr(n.theme),u=r==="stage-log"?ge():0,c=l=>l==null?"":n.stageLabels?.[l]??l,p=(l,g)=>l.length>g?`${l.slice(0,g-1)}\u2026`:l,h=l=>l.type==="data"||l.type==="error"?p(Ze(l.data),120):"",f=l=>{if(r==="stage-log"){let w=(ge()-u)/1e9,O=c(l.path).padEnd(9);if(l.type==="data"){let N=h(l);return`[${w.toFixed(3)}s] ${O} \u2190${N?` ${N}`:""}`}if(l.type==="error"){let N=h(l);return`[${w.toFixed(3)}s] ${O} \u2717${N?` ${N}`:""}`}return l.type==="complete"?`[${w.toFixed(3)}s] ${O} \u25A0 complete`:`[${w.toFixed(3)}s] ${O} ${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} `:"",y=l.type==="data"||l.type==="error",_=l.type==="pause"||l.type==="resume",b=y?` ${Ze(l.data)}`:_?` ${Ze(l.lockId)}`:"",v=l.type==="data"||l.type==="resolved"||l.type==="derived"?l:void 0,T=v?.trigger_dep_name!=null?` <- ${v.trigger_dep_name}`:v?.trigger_dep_index!=null?` <- #${v.trigger_dep_index}`:"",x=l.in_batch?" [batch]":"";return`${m}${g}${l.type.toUpperCase()}${d.reset}${b}${T}${x}`};e.onEvent(l=>{a(l.type)&&s(f(l),l)})}addDisposer(e){return this._disposers.add(e),()=>{this._disposers.delete(e)}}destroy(){cn(this._disposers,this.name),this.signal([[F]],{internal:!0}),cn(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:d,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 It(a,a.encode(i))}throw new Error(`snapshot: unknown format "${String(e.format)}"`)}static decode(e,n){let r=n?.config??ye,{codec:s,codecVersion:o,payload:i}=Lt(e,r);return s.decode(i,o)}restore(e,n){if(fn(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=>Xe(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 d=this.tryResolve(o)?.v;if(d!=null&&d.id===i.v.id&&d.version===i.v.version)continue}try{this.set(o,i.value)}catch(a){n?.onError?.(o,a)}}}}}static fromSnapshot(e,n){fn(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 f of[...e.subgraphs].sort((l,g)=>{let m=l.split(M).length,y=g.split(M).length;return m!==y?m-y:l<g?-1:l>g?1:0})){let l=f.split(M),g=o;for(let m of l)g._mounts.has(m)||g.mount(m,new t(m)),g=g._mounts.get(m)}let i=s?Object.entries(s).map(([f,l])=>({re:Xe(f),factory:l})):[],a=f=>{for(let l of i)if(l.re.test(f))return l.factory},d=f=>{let l=f.split(M),g=l.pop();if(g==null||g.length===0)throw new Error(`invalid snapshot path "${f}"`);let m=o;for(let y of l){let _=m._mounts.get(y);if(!_)throw new Error(`unknown mount "${y}" in path "${f}"`);m=_}return[m,g]},u=Object.entries(e.nodes).filter(([f])=>!f.includes(`${M}${J}${M}`)).sort((f,l)=>f[0]<l[0]?-1:f[0]>l[0]?1:0),c=new Map(u),p=new Map,h=!0;for(;c.size>0&&h;){h=!1;for(let[f,l]of[...c.entries()]){let g=l?.deps??[];if(!g.every(T=>p.has(T)))continue;let[m,y]=d(f),_={...l?.meta??{}},b=a(f),v;if(l?.type==="state")v=ee(l.value,{meta:_});else{if(b==null)continue;v=b(y,{path:f,type:l.type,value:l.value,meta:_,deps:g,resolvedDeps:g.map(T=>p.get(T))})}m.add(v,{name:y}),p.set(f,v),c.delete(f),h=!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 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 p=gr(c.nodes);if(u.lastSnapshot!=null&&p!==""&&p===u.lastFingerprint)return;let h=u.seq+1,f=Ie(),m=u.lastSnapshot==null||h%u.compactEvery===0?{mode:"full",snapshot:c,seq:h,timestamp_ns:f,format_version:le}:{mode:"diff",diff:vn(u.lastSnapshot,c),seq:h,timestamp_ns:f,format_version:le};if(u.tier.filter&&!u.tier.filter(this.name,m))return;let y;try{y=u.tier.save(this.name,m)}catch(_){n.onError?.(_,u.tier);return}if(y&&typeof y.then=="function"){let v=(u.savePending??Promise.resolve()).then(()=>y,()=>y).then(()=>{u.disposed||(u.seq=h,u.lastSnapshot=c,u.lastFingerprint=p)},T=>{n.onError?.(T,u.tier)});u.savePending=v.finally(()=>{u.savePending===v&&(u.savePending=void 0)})}else u.seq=h,u.lastSnapshot=c,u.lastFingerprint=p},o=(u,c)=>{try{s(u,c)}catch(p){n.onError?.(p,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=vt(l,Be("standard"));if(!n.filter(u,g))return}let h,f=()=>(h==null&&(h=this.snapshot()),h);for(let l of r)l.disposed||(l.debounceMs===0?o(l,f()):(l.timer==null&&(l.timer=new Ke),l.timer.start(l.debounceMs,()=>{l.disposed||o(l,this.snapshot())})))},a;if(n.paths!=null){let c=(typeof n.paths=="string"?this._pathsMatching(n.paths):n.paths).map(p=>{let h=this.tryResolve(p);return h==null?()=>{}:h.subscribe(f=>i(p,f))});a=()=>{for(let p of c)p()}}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 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===le&&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(d){r?.onError?.(d,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===le&&i.nodes!=null?i:void 0;if(a!=null)try{return t.fromSnapshot(a,r)}catch(d){r?.onError?.(d,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:ge(),...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(_=>!r.has(_)).sort(),i=[...r].filter(_=>!s.has(_)).sort(),a=[],d=[];for(let _ of r){if(!s.has(_))continue;let b=e.nodes[_],v=n.nodes[_],T=b.v,x=v.v;T!=null&&x!=null&&T.id===x.id&&T.version!==x.version&&d.push({path:_,id:T.id,from:T.version,to:x.version});let w=T!=null&&x!=null&&T.id===x.id&&T.version===x.version;for(let O of["type","status","sentinel"]){let N=b[O],D=v[O];N!==D&&a.push({path:_,field:O,from:N,to:D})}if(!w)for(let O of["value","meta"]){let N=b[O],D=v[O];mr(N,D)||a.push({path:_,field:O,from:N,to:D})}}let u=_=>`${_.from} ${_.to}`,c=new Set(e.edges.map(u)),p=new Set(n.edges.map(u)),h=n.edges.filter(_=>!c.has(u(_))),f=e.edges.filter(_=>!p.has(u(_))),l=new Set(e.subgraphs),g=new Set(n.subgraphs),m=[...g].filter(_=>!l.has(_)).sort(),y=[...l].filter(_=>!g.has(_)).sort();return{nodesAdded:o,nodesRemoved:i,nodesChanged:a,versionChanges:d,edgesAdded:h,edgesRemoved:f,subgraphsAdded:m,subgraphsRemoved:y}}};function vn(t,e){let n=re.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 Nt(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,d=new Map,u=new Map,c=new Set;for(let[b,v]of Object.entries(t.nodes)){if(!b)continue;c.add(b);let T=v.deps??[];i.set(b,T);for(let x of T)x&&(c.add(x),a.has(x)||a.set(x,new Set),a.get(x).add(b))}for(let b of t.edges){if(b==null||typeof b!="object")continue;let v=typeof b.from=="string"?b.from:"",T=typeof b.to=="string"?b.to:"";!v||!T||(c.add(v),c.add(T),u.has(v)||u.set(v,new Set),u.get(v).add(T),d.has(T)||d.set(T,new Set),d.get(T).add(v))}if(!c.has(e))return r.withDetail?s:[];let p=r.both===!0,h=b=>{if(p){let w=i.get(b)??[],O=d.get(b),N=a.get(b),D=u.get(b),S=[...w];return O&&S.push(...O),N&&S.push(...N),D&&S.push(...D),S}if(n==="upstream"){let w=i.get(b)??[],O=d.get(b);return O?[...w,...O]:w}let v=a.get(b),T=u.get(b),x=v?[...v]:[];return T&&x.push(...T),x},f=new Set([e]),l=new Map,g=[{path:e,depth:0}],m=0,y=!1;for(;m<g.length;){let b=g[m++];if(o!=null&&b.depth>=o){h(b.path).length>0&&(y=!0);continue}for(let v of h(b.path))!v||f.has(v)||(f.add(v),l.set(v,b.depth+1),g.push({path:v,depth:b.depth+1}))}let _=[...l.keys()].sort((b,v)=>b<v?-1:b>v?1:0);return r.withDetail?{paths:_,depths:l,truncated:y}:_}function Ar(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}wt();function _n(t,e,n){return{[t]:!0,[`${t}_type`]:e,...n??{}}}var Cr=2147483647;function Qe(t,e){if(!Number.isFinite(t)||!Number.isInteger(t)||t<0)throw new Error(`${e} must be a non-negative integer`);return t}function ce(t,e){return _n("messaging",t,e)}var De=class extends re{_log;events;latest;hasLatest;constructor(e,n={}){super(e,n.graph),this._log=Ut([],{name:"events",maxSize:n.retainedLimit}),this.events=this._log.entries,this.add(this.events,{name:"events"}),this.latest=Y([this.events],([r])=>{let s=r;return s.length===0?null:s[s.length-1]},{name:"latest",describeKind:"derived",meta:ce("topic_latest")}),this.add(this.latest,{name:"latest"}),this.addDisposer(te(this.latest)),this.hasLatest=Y([this.events],([r])=>r.length>0,{name:"hasLatest",describeKind:"derived",meta:ce("topic_has_latest")}),this.add(this.hasLatest,{name:"hasLatest"}),this.addDisposer(te(this.hasLatest)),this.addDisposer(()=>{this.events.down([[V]])}),this.addDisposer(()=>this._log.disposeAllViews())}publish(e){this._log.append(e)}retained(){return this.events.cache}},Ae=class extends re{source;cursor;available;topic;constructor(e,n,r={}){super(e,r.graph);let s=Qe(r.cursor??0,"subscription cursor");this.topic=n;let o=n.events;this.source=Y([o],([i])=>i,{name:"source",describeKind:"derived",meta:ce("subscription_source"),initial:o.cache}),this.add(this.source,{name:"source"}),this.cursor=ee(s,{name:"cursor",describeKind:"state",meta:ce("subscription_cursor")}),this.add(this.cursor,{name:"cursor"}),this.available=Y([this.source,this.cursor],([i,a])=>{let d=i,u=Math.max(0,Math.trunc(a??0));return d.slice(u)},{name:"available",describeKind:"derived",meta:ce("subscription_available"),initial:[]}),this.add(this.available,{name:"available"}),this.addDisposer(te(this.source)),this.addDisposer(te(this.available))}ack(e){let n=this.available.cache,r=e===void 0?n.length:Qe(e,"subscription ack count"),s=Math.min(r,n.length);if(s<=0)return this.cursor.cache;let o=this.cursor.cache+s;return this.cursor.emit(o),o}pull(e,n={}){let r=this.available.cache,s=e===void 0?r.length:Qe(e,"subscription pull limit"),o=r.slice(0,s);return n.ack&&o.length>0&&this.ack(o.length),o}},et=class extends re{_sourceSub;_target;bridgedCount;constructor(e,n,r,s={}){super(e,s.graph),this._sourceSub=xn(`${e}-subscription`,n,{cursor:s.cursor}),this._target=r,this.mount("subscription",this._sourceSub),this.bridgedCount=ee(0,{name:"bridgedCount",describeKind:"state",meta:ce("topic_bridge_count")}),this.add(this.bridgedCount,{name:"bridgedCount"});let o=Math.max(1,Qe(s.maxPerPump??Cr,"topic bridge maxPerPump")),i=s.map??(d=>d),a=ve([this._sourceSub.available],()=>{let d=this._sourceSub.pull(o,{ack:!0});if(d.length===0)return;let u=0;for(let c of d){let p=i(c);p!==void 0&&(this._target.publish(p),u+=1)}if(u>0){let c=this.bridgedCount.cache;this.bridgedCount.emit(c+u)}},{name:"pump",describeKind:"effect",meta:ce("topic_bridge_pump")});this.add(a,{name:"pump"}),this.addDisposer(te(a))}},tt=class extends re{_topics=new Map;_version=0;_defaultTopicOptions;constructor(e,n={}){super(e,n.graph),this._defaultTopicOptions={...n.defaultTopicOptions??{}}}get version(){return this._version}get size(){return this._topics.size}has(e){return this._topics.has(e)}topicNames(){return this._topics.keys()}topic(e,n){let r=this._topics.get(e);if(r===void 0){let s={...this._defaultTopicOptions,...n??{}};r=new De(e,s),this._topics.set(e,r),this.mount(e,r),this._version+=1}return r}publish(e,n){this.topic(e).publish(n)}publishMany(e){ue(()=>{for(let[n,r]of e)this.topic(n).publish(r)})}subscribe(e,n,r){let s=this.topic(n);return new Ae(e,s,r)}removeTopic(e){if(!this._topics.has(e))return!1;try{this.remove(e)}finally{this._topics.delete(e),this._version+=1}return!0}};function Mr(t,e){return new De(t,e)}function Gr(t,e){return new tt(t,e)}function xn(t,e,n){return new Ae(t,e,n)}function Ir(t,e,n,r){return new et(t,e,n,r)}0&&(module.exports={MessagingHubGraph,SubscriptionGraph,TopicBridgeGraph,TopicGraph,messagingHub,subscription,topic,topicBridge});
@@ -1,5 +1,5 @@
1
1
  import '../../node-BVV7G1bq.cjs';
2
- import '../../graph-C4Uxwv0T.cjs';
3
- export { M as MessagingHubGraph, a as MessagingHubOptions, S as SubscriptionGraph, b as SubscriptionOptions, c as TopicBridgeGraph, d as TopicBridgeOptions, T as TopicGraph, e as TopicOptions, m as messagingHub, s as subscription, t as topic, f as topicBridge } from '../../index-B-z8WaSd.cjs';
2
+ import '../../graph-CdJeX7O7.cjs';
3
+ export { M as MessagingHubGraph, a as MessagingHubOptions, S as SubscriptionGraph, b as SubscriptionOptions, c as TopicBridgeGraph, d as TopicBridgeOptions, T as TopicGraph, e as TopicOptions, m as messagingHub, s as subscription, t as topic, f as topicBridge } from '../../index-BDLy6CQ9.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-CWeI0aHd.js';
3
- export { M as MessagingHubGraph, a as MessagingHubOptions, S as SubscriptionGraph, b as SubscriptionOptions, c as TopicBridgeGraph, d as TopicBridgeOptions, T as TopicGraph, e as TopicOptions, m as messagingHub, s as subscription, t as topic, f as topicBridge } from '../../index-CvS9IuTG.js';
2
+ import '../../graph-BOhEGJ6E.js';
3
+ export { M as MessagingHubGraph, a as MessagingHubOptions, S as SubscriptionGraph, b as SubscriptionOptions, c as TopicBridgeGraph, d as TopicBridgeOptions, T as TopicGraph, e as TopicOptions, m as messagingHub, s as subscription, t as topic, f as topicBridge } from '../../index-Dbmj0iYR.js';
4
4
  import '../../meta-BMwx3ExI.js';
5
5
  import '../../extra/storage-core.js';
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h}from"../../chunk-EBQ6FXKW.js";import"../../chunk-K54OKWNY.js";import"../../chunk-CZVYLXFK.js";import"../../chunk-7EQPXQ7H.js";import"../../chunk-XRSHMHEG.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{d as MessagingHubGraph,b as SubscriptionGraph,c as TopicBridgeGraph,a as TopicGraph,f as messagingHub,g as subscription,e as topic,h as topicBridge};
1
+ import{a,b,c,d,e,f,g,h}from"../../chunk-VXJX3ZZP.js";import"../../chunk-K54OKWNY.js";import"../../chunk-CZVYLXFK.js";import"../../chunk-MFNOZ5E6.js";import"../../chunk-XRSHMHEG.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{d as MessagingHubGraph,b as SubscriptionGraph,c as TopicBridgeGraph,a as TopicGraph,f as messagingHub,g as subscription,e as topic,h as topicBridge};