agentic-mermaid 0.4.1 → 0.5.3

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 (253) hide show
  1. package/AGENT_NATIVE.md +94 -627
  2. package/CHANGELOG.md +651 -0
  3. package/Instructions_for_agents.md +44 -23
  4. package/LICENSES/Khroma-MIT.txt +21 -0
  5. package/LICENSES/Mermaid-MIT.txt +21 -0
  6. package/LICENSES/es-toolkit-MIT.txt +21 -0
  7. package/LICENSES/pele-MIT.txt +40 -0
  8. package/LICENSES/zenuml-core-MIT.txt +21 -0
  9. package/README.md +93 -50
  10. package/SECURITY.md +28 -12
  11. package/THIRD_PARTY_NOTICES.md +60 -0
  12. package/assets/hero.png +0 -0
  13. package/dist/agent-core.d.ts +478 -210
  14. package/dist/agent-core.js +1 -396
  15. package/dist/agent.d.ts +17 -8
  16. package/dist/agent.js +1 -408
  17. package/dist/agentic-mermaid-mcp.js +1 -11
  18. package/dist/am.js +1 -34562
  19. package/dist/browser-lazy/chunks/agentic-producer-core-CC6OOLDW.js +1 -0
  20. package/dist/browser-lazy/chunks/architecture-QUFVKYJR.js +13 -0
  21. package/dist/browser-lazy/chunks/block-6J3Q63BO.js +11 -0
  22. package/dist/browser-lazy/chunks/builtin-backends-7SOZZHPF.js +12 -0
  23. package/dist/browser-lazy/chunks/c4-SQVBZAKJ.js +10 -0
  24. package/dist/browser-lazy/chunks/chunk-2GPK4VFF.js +5 -0
  25. package/dist/browser-lazy/chunks/chunk-2I4UPL7Q.js +3 -0
  26. package/dist/browser-lazy/chunks/chunk-2SH76OTH.js +1 -0
  27. package/dist/browser-lazy/chunks/chunk-2UIA2IME.js +3 -0
  28. package/dist/browser-lazy/chunks/chunk-4LHYF3BS.js +1 -0
  29. package/dist/browser-lazy/chunks/chunk-5B2Z7575.js +1 -0
  30. package/dist/browser-lazy/chunks/chunk-5FQ534HP.js +1 -0
  31. package/dist/browser-lazy/chunks/chunk-5UVGUSD6.js +1 -0
  32. package/dist/browser-lazy/chunks/chunk-5X6MJX3H.js +1 -0
  33. package/dist/browser-lazy/chunks/chunk-AMJLVPUB.js +4 -0
  34. package/dist/browser-lazy/chunks/chunk-BU5LHXNJ.js +3 -0
  35. package/dist/browser-lazy/chunks/chunk-BY2CPG6B.js +1 -0
  36. package/dist/browser-lazy/chunks/chunk-CN7WTBWB.js +1 -0
  37. package/dist/browser-lazy/chunks/chunk-CQE4HQEW.js +1 -0
  38. package/dist/browser-lazy/chunks/chunk-CSFUKSU6.js +1 -0
  39. package/dist/browser-lazy/chunks/chunk-DF6765YX.js +17 -0
  40. package/dist/browser-lazy/chunks/chunk-E2WMJZNM.js +1 -0
  41. package/dist/browser-lazy/chunks/chunk-FAIMVOX5.js +6 -0
  42. package/dist/browser-lazy/chunks/chunk-GVOEAY52.js +1 -0
  43. package/dist/browser-lazy/chunks/chunk-HLWUNUCM.js +1 -0
  44. package/dist/browser-lazy/chunks/chunk-ICC7HBJX.js +1 -0
  45. package/dist/browser-lazy/chunks/chunk-J35HAQQF.js +20 -0
  46. package/dist/browser-lazy/chunks/chunk-J7FFAFQF.js +1 -0
  47. package/dist/browser-lazy/chunks/chunk-LH7HUDKW.js +1 -0
  48. package/dist/browser-lazy/chunks/chunk-N5ELX7LR.js +2 -0
  49. package/dist/browser-lazy/chunks/chunk-NMQQMRIR.js +1 -0
  50. package/dist/browser-lazy/chunks/chunk-NO7ZIVRU.js +1 -0
  51. package/dist/browser-lazy/chunks/chunk-OZ443IVJ.js +16 -0
  52. package/dist/browser-lazy/chunks/chunk-PQGPS2YV.js +7 -0
  53. package/dist/browser-lazy/chunks/chunk-QA6GJQ4X.js +1 -0
  54. package/dist/browser-lazy/chunks/chunk-RIVTHZAQ.js +1 -0
  55. package/dist/browser-lazy/chunks/chunk-SZELX2EJ.js +1 -0
  56. package/dist/browser-lazy/chunks/chunk-TYZOZXUJ.js +22 -0
  57. package/dist/browser-lazy/chunks/chunk-UL6NDWLL.js +1 -0
  58. package/dist/browser-lazy/chunks/chunk-VQYYGAXP.js +1 -0
  59. package/dist/browser-lazy/chunks/chunk-VWVZGQE2.js +1 -0
  60. package/dist/browser-lazy/chunks/chunk-X2UYKWKM.js +4 -0
  61. package/dist/browser-lazy/chunks/chunk-YCEICNM6.js +1 -0
  62. package/dist/browser-lazy/chunks/chunk-Z3FDIVLN.js +20 -0
  63. package/dist/browser-lazy/chunks/class-5QA4SCTS.js +13 -0
  64. package/dist/browser-lazy/chunks/decode-63UIZGD2.js +1 -0
  65. package/dist/browser-lazy/chunks/elk.bundled-L4CADV5W.js +24 -0
  66. package/dist/browser-lazy/chunks/er-7ZSKGN7Y.js +11 -0
  67. package/dist/browser-lazy/chunks/eventmodeling-2BPLHWRN.js +19 -0
  68. package/dist/browser-lazy/chunks/flowchart-NEIMZTB5.js +4 -0
  69. package/dist/browser-lazy/chunks/forest-implementation-AEP24AIP.js +1 -0
  70. package/dist/browser-lazy/chunks/gantt-RDPIFYAF.js +11 -0
  71. package/dist/browser-lazy/chunks/gitgraph-N4Y5RYB7.js +9 -0
  72. package/dist/browser-lazy/chunks/ishikawa-LD3YBDJN.js +6 -0
  73. package/dist/browser-lazy/chunks/journey-6YQR5DJX.js +16 -0
  74. package/dist/browser-lazy/chunks/kanban-PLMJ7NBW.js +20 -0
  75. package/dist/browser-lazy/chunks/mermaid-yaml-runtime-QVYX4EWK.js +136 -0
  76. package/dist/browser-lazy/chunks/mindmap-K2UBFO3Y.js +12 -0
  77. package/dist/browser-lazy/chunks/packet-CUW4QY6Y.js +7 -0
  78. package/dist/browser-lazy/chunks/pie-7F7UUCG3.js +15 -0
  79. package/dist/browser-lazy/chunks/quadrant-TOONO2WC.js +10 -0
  80. package/dist/browser-lazy/chunks/radar-J6JVWVAX.js +16 -0
  81. package/dist/browser-lazy/chunks/render-core-BZOM3K7D.js +3 -0
  82. package/dist/browser-lazy/chunks/requirement-CMAKDJPO.js +19 -0
  83. package/dist/browser-lazy/chunks/sankey-AWXQEP3F.js +13 -0
  84. package/dist/browser-lazy/chunks/sequence-Q2RJRB4L.js +5 -0
  85. package/dist/browser-lazy/chunks/state-WRBFQEDX.js +4 -0
  86. package/dist/browser-lazy/chunks/timeline-D2KILFXM.js +6 -0
  87. package/dist/browser-lazy/chunks/treemap-N3VYX5D4.js +6 -0
  88. package/dist/browser-lazy/chunks/xychart-G73OGK66.js +16 -0
  89. package/dist/browser-lazy/chunks/zenuml-H4BXNYXR.js +16 -0
  90. package/dist/browser-lazy/index.d.ts +544 -275
  91. package/dist/browser-lazy/index.js +1 -1
  92. package/dist/browser.global.js +802 -565
  93. package/dist/chunk-3LGLPG33.js +2 -0
  94. package/dist/chunk-7CRDX2QR.js +2 -0
  95. package/dist/chunk-7PPW2BMO.js +2 -0
  96. package/dist/chunk-DQDKA5ND.js +2 -0
  97. package/dist/chunk-EHCMJUMD.js +52 -0
  98. package/dist/chunk-GVCHLSHH.js +4 -0
  99. package/dist/chunk-H3NCS2XZ.js +19 -0
  100. package/dist/chunk-JZOJ4YGS.js +201 -0
  101. package/dist/chunk-MKE7GNYU.js +146 -0
  102. package/dist/chunk-NKNFOREZ.js +2 -0
  103. package/dist/chunk-O7H2UX5K.js +2 -0
  104. package/dist/chunk-OMY6NRQD.js +58 -0
  105. package/dist/chunk-UA234O4M.js +4 -0
  106. package/dist/chunk-VUFVLGTH.js +2 -0
  107. package/dist/chunk-XU5LPD2D.js +2 -0
  108. package/dist/cli-YGGTJZH7.js +226 -0
  109. package/dist/elk-constructor.js +2 -0
  110. package/dist/elk-constructor.node.js +11 -0
  111. package/dist/index-EeXqJXr5.d.ts +1223 -0
  112. package/dist/index.d.ts +4 -1
  113. package/dist/index.js +1 -334
  114. package/dist/jsonl-RPJY6YWO.js +2 -0
  115. package/dist/mcp-cli-63DYXTVD.js +2 -0
  116. package/dist/{index-BGA_-6LV.d.ts → paint-certification-6rwQjIv_.d.ts} +5283 -6173
  117. package/dist/server-5NEOHOFS.js +524 -0
  118. package/dist/svg-styles-BdnoM7AT.d.ts +724 -0
  119. package/dist/svg-styles.d.ts +1 -0
  120. package/dist/svg-styles.js +2 -0
  121. package/dist/svg.d.ts +13 -0
  122. package/dist/svg.js +2 -0
  123. package/dist/types-BcS52Mjt.d.ts +1360 -0
  124. package/dist/zenuml/chunks/appearance-UOQ5KA6O.js +1 -0
  125. package/dist/zenuml/chunks/builtin-backends-KDKE7YHO.js +12 -0
  126. package/dist/zenuml/chunks/chunk-42DXZ5C6.js +4 -0
  127. package/dist/zenuml/chunks/chunk-7TVYPTDW.js +1 -0
  128. package/dist/zenuml/chunks/chunk-EVPSMEKN.js +1 -0
  129. package/dist/zenuml/chunks/chunk-OXQWRSBM.js +20 -0
  130. package/dist/zenuml/chunks/chunk-QWX77U7G.js +2 -0
  131. package/dist/zenuml/chunks/chunk-RLJEI7YN.js +29 -0
  132. package/dist/zenuml/chunks/chunk-RZ6XK5CD.js +29 -0
  133. package/dist/zenuml/chunks/decode-BWERFDGK.js +1 -0
  134. package/dist/zenuml/chunks/mermaid-yaml-runtime-KZVU74WU.js +136 -0
  135. package/dist/zenuml/chunks/render-core-V5RQ737O.js +3 -0
  136. package/dist/zenuml/chunks/zenuml-EA2ZFRUX.js +20 -0
  137. package/dist/zenuml-frame.global.js +3626 -0
  138. package/dist/zenuml.d.ts +83 -0
  139. package/dist/zenuml.js +1 -0
  140. package/docs/MCP-DIRECTORY-LISTINGS.md +5 -1
  141. package/docs/README.md +59 -103
  142. package/docs/agent-api-cookbook.md +26 -16
  143. package/docs/agent-mutation-policy.md +86 -15
  144. package/docs/agent-workflow-examples.md +1 -1
  145. package/docs/api-advanced.md +385 -0
  146. package/docs/api.md +320 -366
  147. package/docs/ascii.md +40 -4
  148. package/docs/browser.md +46 -7
  149. package/docs/choosing-a-diagram.md +148 -0
  150. package/docs/code-mode-impact.md +1 -0
  151. package/docs/comparison.md +244 -28
  152. package/docs/computational-aesthetics-prototype-plan.md +10 -10
  153. package/docs/config.md +60 -2
  154. package/docs/custom-fonts.md +78 -21
  155. package/docs/diagram-families.md +160 -10
  156. package/docs/eventmodeling-and-zenuml.md +165 -0
  157. package/docs/features.md +21 -19
  158. package/docs/fork-differences.md +105 -32
  159. package/docs/getting-started.md +56 -51
  160. package/docs/layout-certification.md +126 -0
  161. package/docs/mcp-code-mode-rationale.md +20 -12
  162. package/docs/mcp-http-transport.md +14 -8
  163. package/docs/quality.md +145 -15
  164. package/docs/react.md +76 -31
  165. package/docs/style-authoring.md +23 -11
  166. package/docs/svg-semantic-contract.md +104 -4
  167. package/docs/testing-strategy.md +684 -126
  168. package/docs/theming.md +27 -8
  169. package/examples/styles/readme-hero.md +25 -0
  170. package/examples/styles/readme-hero.mmd +13 -0
  171. package/examples/styles/readme-hero.style.json +7 -0
  172. package/package.json +114 -57
  173. package/server.json +2 -2
  174. package/skills/agentic-mermaid-diagram-workflow/SKILL.md +26 -8
  175. package/skills/agentic-mermaid-diagram-workflow/references/cli.md +13 -3
  176. package/skills/agentic-mermaid-diagram-workflow/references/code-mode.md +2 -1
  177. package/skills/agentic-mermaid-diagram-workflow/references/flowchart.md +9 -6
  178. package/skills/agentic-mermaid-diagram-workflow/references/hosted-mcp.md +1 -0
  179. package/skills/agentic-mermaid-diagram-workflow/references/sequence.md +4 -3
  180. package/skills/agentic-mermaid-diagram-workflow/references/timeline.md +7 -6
  181. package/skills/agentic-mermaid-diagram-workflow/references/upstream/agentflow.md +574 -0
  182. package/skills/agentic-mermaid-diagram-workflow/references/upstream/architecture.md +10 -2
  183. package/skills/agentic-mermaid-diagram-workflow/references/upstream/c4.md +18 -0
  184. package/skills/agentic-mermaid-diagram-workflow/references/upstream/classDiagram.md +123 -0
  185. package/skills/agentic-mermaid-diagram-workflow/references/upstream/cynefin.md +6 -1
  186. package/skills/agentic-mermaid-diagram-workflow/references/upstream/entityRelationshipDiagram.md +129 -9
  187. package/skills/agentic-mermaid-diagram-workflow/references/upstream/eventmodeling.md +22 -0
  188. package/skills/agentic-mermaid-diagram-workflow/references/upstream/flowchart.md +188 -60
  189. package/skills/agentic-mermaid-diagram-workflow/references/upstream/gitgraph.md +13 -7
  190. package/skills/agentic-mermaid-diagram-workflow/references/upstream/mindmap.md +110 -1
  191. package/skills/agentic-mermaid-diagram-workflow/references/upstream/packet.md +38 -0
  192. package/skills/agentic-mermaid-diagram-workflow/references/upstream/requirementDiagram.md +115 -0
  193. package/skills/agentic-mermaid-diagram-workflow/references/upstream/sequenceDiagram.md +101 -0
  194. package/skills/agentic-mermaid-diagram-workflow/references/upstream/stateDiagram.md +87 -0
  195. package/skills/agentic-mermaid-diagram-workflow/references/upstream/swimlanes.md +105 -2
  196. package/skills/agentic-mermaid-diagram-workflow/references/upstream/timeline.md +12 -6
  197. package/skills/agentic-mermaid-diagram-workflow/references/upstream/usecase.md +953 -0
  198. package/skills/agentic-mermaid-diagram-workflow/references/upstream/venn.md +77 -0
  199. package/skills/agentic-mermaid-diagram-workflow/references/upstream/xyChart.md +1 -1
  200. package/dist/browser-lazy/chunks/architecture-KTHE2HX3.js +0 -31
  201. package/dist/browser-lazy/chunks/chunk-2XCPFAD5.js +0 -46
  202. package/dist/browser-lazy/chunks/chunk-3H4F7RBT.js +0 -1
  203. package/dist/browser-lazy/chunks/chunk-4EVLW2NJ.js +0 -1
  204. package/dist/browser-lazy/chunks/chunk-5Q4S74UO.js +0 -1
  205. package/dist/browser-lazy/chunks/chunk-6OAPWSDO.js +0 -1
  206. package/dist/browser-lazy/chunks/chunk-A7L4WWVW.js +0 -143
  207. package/dist/browser-lazy/chunks/chunk-C7FJO2I3.js +0 -4
  208. package/dist/browser-lazy/chunks/chunk-D3XXDKIO.js +0 -1
  209. package/dist/browser-lazy/chunks/chunk-DXA5WL7H.js +0 -4
  210. package/dist/browser-lazy/chunks/chunk-EPFMQPXX.js +0 -1
  211. package/dist/browser-lazy/chunks/chunk-FFOHLPDA.js +0 -2
  212. package/dist/browser-lazy/chunks/chunk-FLD63DXE.js +0 -2
  213. package/dist/browser-lazy/chunks/chunk-G6OLSHRG.js +0 -7
  214. package/dist/browser-lazy/chunks/chunk-GRXCKTHX.js +0 -0
  215. package/dist/browser-lazy/chunks/chunk-I6VE56S7.js +0 -1
  216. package/dist/browser-lazy/chunks/chunk-KJVNXJ5Y.js +0 -1
  217. package/dist/browser-lazy/chunks/chunk-L227EPFP.js +0 -11
  218. package/dist/browser-lazy/chunks/chunk-LNIHDJSF.js +0 -1
  219. package/dist/browser-lazy/chunks/chunk-M6BT2HIP.js +0 -1
  220. package/dist/browser-lazy/chunks/chunk-NZRUMODH.js +0 -1
  221. package/dist/browser-lazy/chunks/chunk-OFRMKQA6.js +0 -1
  222. package/dist/browser-lazy/chunks/chunk-P7HMSKHJ.js +0 -1
  223. package/dist/browser-lazy/chunks/chunk-PXKL3O6H.js +0 -1
  224. package/dist/browser-lazy/chunks/chunk-PZEWZT35.js +0 -1
  225. package/dist/browser-lazy/chunks/chunk-STQRDZ67.js +0 -1
  226. package/dist/browser-lazy/chunks/chunk-SUFMSWTX.js +0 -1
  227. package/dist/browser-lazy/chunks/chunk-T7IJ6V4B.js +0 -3
  228. package/dist/browser-lazy/chunks/chunk-UAEZO5VL.js +0 -1
  229. package/dist/browser-lazy/chunks/chunk-WEUWIFG3.js +0 -1
  230. package/dist/browser-lazy/chunks/chunk-X64T74C5.js +0 -24
  231. package/dist/browser-lazy/chunks/class-F7R6TJ73.js +0 -9
  232. package/dist/browser-lazy/chunks/er-BDK7CM5L.js +0 -9
  233. package/dist/browser-lazy/chunks/flowchart-KFU6XV7S.js +0 -4
  234. package/dist/browser-lazy/chunks/gantt-I64VVDSP.js +0 -28
  235. package/dist/browser-lazy/chunks/gitgraph-EDUVJ5IJ.js +0 -8
  236. package/dist/browser-lazy/chunks/journey-TLO2RNM3.js +0 -40
  237. package/dist/browser-lazy/chunks/mindmap-OJCNDYPM.js +0 -9
  238. package/dist/browser-lazy/chunks/pie-HVG6XO7K.js +0 -19
  239. package/dist/browser-lazy/chunks/quadrant-U6S2L4MJ.js +0 -24
  240. package/dist/browser-lazy/chunks/radar-ZDLOBTVG.js +0 -32
  241. package/dist/browser-lazy/chunks/render-core-Y2DFNMQG.js +0 -12
  242. package/dist/browser-lazy/chunks/sequence-Z4WFS3VB.js +0 -12
  243. package/dist/browser-lazy/chunks/state-2HV2YGN3.js +0 -4
  244. package/dist/browser-lazy/chunks/timeline-XM4UFPOC.js +0 -20
  245. package/dist/browser-lazy/chunks/xychart-7JDHWTQY.js +0 -36
  246. package/dist/chunk-GGXCNCNA.js +0 -4118
  247. package/dist/chunk-IVD4NXNE.js +0 -615
  248. package/dist/chunk-JDMRPUAG.js +0 -37
  249. package/dist/chunk-JWAAW3FH.js +0 -149
  250. package/dist/chunk-LCGBT32P.js +0 -62036
  251. package/dist/chunk-RWMZRUIC.js +0 -4715
  252. package/dist/mcp-cli-4MLKC3ZH.js +0 -17
  253. package/docs/mutation-testing.md +0 -285
@@ -0,0 +1,524 @@
1
+ import{a as Gt,b as ve}from"./chunk-DQDKA5ND.js";import{b as Ft}from"./chunk-GVCHLSHH.js";import{A as we,B as vt,C as Ot,D as Dt,E as Te,F as It,G as Pt,H as Qe,O as Nt,P as Lt,Q as Bt,R as Vt,S as $t,a as St,b as _t,h as Xe,k as Ee,l as Ae,m as Rt,o as Mt,p as Ye,q as xt,r as Et,t as Ce,u as At,v as Ct,w as wt,x as Ze,y as Tt}from"./chunk-7CRDX2QR.js";import{Ba as ft,Ca as yt,i as j,jb as bt,oa as We,pb as ht,ra as xe,rb as kt,s as Dn}from"./chunk-JZOJ4YGS.js";import{eh as st,gc as it,rh as dt,sh as ct,th as lt,uh as ut,vh as mt,xh as gt,yh as pt}from"./chunk-EHCMJUMD.js";import"./chunk-UA234O4M.js";import{Zc as ze,gc as Je,hc as oe,lc as On,pc as He,xb as vn}from"./chunk-OMY6NRQD.js";import{b as jt,c as qt}from"./chunk-XU5LPD2D.js";import{D as tt,E as rt,I as ot,J as at,c as In,d as Pn,e as Nn,f as Ln,g as Bn,h as Vn,i as $n,j as Fn,k as jn,l as qn,m as Un,n as Gn,o as Kn,p as Jn,q as Hn,r as zn,s as Wn,t as Xn,u as Yn,v as Zn,w as Qn,x as et,y as nt}from"./chunk-O7H2UX5K.js";import"./chunk-3LGLPG33.js";import{a as Ut}from"./chunk-7PPW2BMO.js";import"./chunk-VUFVLGTH.js";import{randomUUID as _s}from"crypto";import{createServer as Rs}from"http";import{URL as Ue}from"url";function Oe(e){const n=[];const t=[];let r=0;const i=a=>{let d=a+1;while(d<e.length){if(e[d]==="\\"){d+=2;continue}if(e[d]==='"')return d+1;d++}return d};while(r<e.length){const a=e[r];if(a==='"'){const d=i(r);let g;try{g=JSON.parse(e.slice(r,d))}catch{r=d;continue}const p=t.length===1&&t[0]==="{"||t.length===2&&t[0]==="["&&t[1]==="{";let y=d;while(/\s/.test(e[y]??""))y++;if(p&&g==="id"&&e[y]===":"){y++;while(/\s/.test(e[y]??""))y++;const f=e.slice(y).match(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/)?.[0];if(f&&ai(f)&&!di(f)){let k=`__agentic_mermaid_exact_id_${n.length}__`;while(e.includes(k))k+="_";n.push({sentinel:k,raw:f,start:y,end:y+f.length})}}r=d;continue}if(a==="{"||a==="[")t.push(a);else if(a==="}"||a==="]")t.pop();r++}let o=e;for(const a of n.slice().reverse()){o=o.slice(0,a.start)+JSON.stringify(a.sentinel)+o.slice(a.end)}return{body:o,ids:n.map(({sentinel:a,raw:d})=>({sentinel:a,raw:d}))}}function ai(e){const n=Number(e);return Number.isFinite(n)&&Number.isInteger(n)}function di(e){if(!/^-?(?:0|[1-9]\d*)$/.test(e))return false;if(e==="-0")return false;try{const n=BigInt(e);return n<=BigInt(Number.MAX_SAFE_INTEGER)&&n>=BigInt(Number.MIN_SAFE_INTEGER)}catch{return false}}function Kt(e){if(!e)return false;const n=String.raw`[!#$%&'*+.^_\x60|~0-9A-Za-z-]+`;const t=String.raw`"(?:[^"\\]|\\.)*"`;return new RegExp(String.raw`^\s*application/json\s*(?:;\s*${n}\s*=\s*(?:${n}|${t}))*\s*$`,"i").test(e)}function De(e,n=[]){let t=JSON.stringify(e);for(const{sentinel:r,raw:i}of n){t=t.replace(`"id":${JSON.stringify(r)}`,`"id":${i}`)}return t}function ue(e,n){return{jsonrpc:"2.0",id:e,result:n}}function T(e,n,t,r){return{jsonrpc:"2.0",id:e,error:r===void 0?{code:n,message:t}:{code:n,message:t,data:r}}}function K(e,n,t){return ue(e,{content:[{type:"text",text:JSON.stringify(n)}],isError:t})}var ci=["2024-11-05","2025-03-26","2025-06-18","2025-11-25"];var li=["2026-07-28"];var me="io.modelcontextprotocol/protocolVersion";var Jt="io.modelcontextprotocol/clientInfo";var en="io.modelcontextprotocol/clientCapabilities";var Ht="io.modelcontextprotocol/logLevel";var zt="io.modelcontextprotocol/serverInfo";var Ie=-32020;var ge=-32022;var ui="2025-11-25";function ae(e){return typeof e==="string"&&li.includes(e)}function pe(e){return typeof e==="string"&&ci.includes(e)}function Wt(e){return typeof e==="string"&&e>=ui}function Xt(e){const n=e.params;if(!n||typeof n!=="object"||Array.isArray(n))return void 0;const t=n._meta;if(!t||typeof t!=="object"||Array.isArray(t))return void 0;return t}function Yt(e){const n=nn(e);const t=n.present?n.value:void 0;return typeof t==="string"?t:void 0}function nn(e){const n=Xt(e);if(!n||!Object.prototype.hasOwnProperty.call(n,me))return{present:false};return{present:true,value:n[me]}}function tn(e,n){if(typeof e!=="object"||e===null||Array.isArray(e)){return[`${n} is required and must be an object with name and version`]}const t=[];const r=e;if(typeof r.name!=="string")t.push(`${n}.name is required and must be a string`);if(typeof r.version!=="string")t.push(`${n}.version is required and must be a string`);for(const i of["title","description","websiteUrl"]){if(r[i]!==void 0&&typeof r[i]!=="string"){t.push(`${n}.${i} must be a string when present`)}}if(r.icons!==void 0){if(!Array.isArray(r.icons)){t.push(`${n}.icons must be an array when present`)}else{for(const[i,o]of r.icons.entries()){if(!o||typeof o!=="object"||Array.isArray(o)){t.push(`${n}.icons[${i}] must be an object`);continue}const a=o;if(typeof a.src!=="string")t.push(`${n}.icons[${i}].src is required and must be a string`);if(a.mimeType!==void 0&&typeof a.mimeType!=="string")t.push(`${n}.icons[${i}].mimeType must be a string when present`);if(a.sizes!==void 0&&(!Array.isArray(a.sizes)||a.sizes.some(d=>typeof d!=="string"))){t.push(`${n}.icons[${i}].sizes must be an array of strings when present`)}if(a.theme!==void 0&&a.theme!=="light"&&a.theme!=="dark"){t.push(`${n}.icons[${i}].theme must be light or dark when present`)}}}}return t}function rn(e,n){if(!e||typeof e!=="object"||Array.isArray(e)){return[`${n} is required and must be an object (an empty object declares no optional capabilities)`]}const t=[];const r=e;const i=g=>{const p=r[g];if(p===void 0)return void 0;if(typeof p!=="object"||p===null||Array.isArray(p)){t.push(`${n}.${g} must be an object when present`);return void 0}return p};const o=i("roots");if(o?.listChanged!==void 0&&typeof o.listChanged!=="boolean"){t.push(`${n}.roots.listChanged must be a boolean when present`)}const a=i("sampling");for(const g of["context","tools"]){const p=a?.[g];if(p!==void 0&&(typeof p!=="object"||p===null||Array.isArray(p))){t.push(`${n}.sampling.${g} must be an object when present`)}}const d=i("elicitation");for(const g of["form","url"]){const p=d?.[g];if(p!==void 0&&(typeof p!=="object"||p===null||Array.isArray(p))){t.push(`${n}.elicitation.${g} must be an object when present`)}}for(const g of["experimental","extensions"]){const p=i(g);if(!p)continue;for(const[y,f]of Object.entries(p)){if(g==="extensions"&&!/^[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?\/.+/.test(y)){t.push(`${n}.extensions.${y} must use a namespaced key with a prefix`)}if(typeof f!=="object"||f===null||Array.isArray(f)){t.push(`${n}.${g}.${y} must be an object`)}}}return t}function Zt(e){const n=Xt(e);if(!n)return[`params._meta is required and must carry ${me} and ${en}`];const t=[];const r=n[Jt];if(r!==void 0){t.push(...tn(r,`params._meta.${Jt}`))}const i=n[Ht];if(i!==void 0&&(typeof i!=="string"||!["debug","info","notice","warning","error","critical","alert","emergency"].includes(i))){t.push(`params._meta.${Ht} must be a valid logging level when present`)}const o=n[en];t.push(...rn(o,`params._meta.${en}`));return t}var mi=Symbol("AdmittedMcpMessage");function gi(e,n){const t=e.id;return n&&t!==void 0?t:null}function Q(e,n,t,r,i){return{ok:false,kind:e,response:n?null:t,...r?{protocol:r}:{},...i?{requestedEra:i}:{}}}function Qt(e,n,t,r){const i={request:e,id:n,protocol:r,[mi]:true};return t?{ok:true,message:{...i,notification:true}}:{ok:true,message:{...i,notification:false}}}function sn(e,n){const t=e;const r=Boolean(t&&Object.prototype.hasOwnProperty.call(t,"id"));const i=t?.id;const o=i===void 0||typeof i==="string"||typeof i==="number"&&Number.isSafeInteger(i);const a=Boolean(t&&!Array.isArray(t)&&t.jsonrpc==="2.0"&&typeof t.method==="string"&&o);if(!a){return{ok:false,kind:"invalid-request",response:T(null,-32600,"invalid JSON-RPC request")}}const d=e;const g=gi(t,o);const p=!r;const y=nn(d);const f=Yt(d);const k=y.present?"modern":"legacy";const b=n.protocolEra==="legacy"?n.supportedVersions.filter(pe):n.protocolEra==="modern"?n.supportedVersions.filter(ae):[...n.supportedVersions];const w=n.negotiatedVersion??n.headerVersion??void 0;const x=ae(f)?{era:"modern",version:f,supportedVersions:b}:{era:"legacy",version:f??w,supportedVersions:b};if(y.present&&typeof y.value!=="string"){return Q("invalid-modern-metadata",p,T(g,-32602,`Invalid params: params._meta.${me} is required and must be a string`),void 0,"modern")}if(n.headerVersion!=null&&!b.includes(n.headerVersion)){return Q("unsupported-version",p,T(g,ge,`Unsupported protocol version: ${n.headerVersion}`,{supported:[...b],requested:n.headerVersion}),x,k)}if(n.negotiatedVersion!=null&&!b.includes(n.negotiatedVersion)){return Q("unsupported-version",p,T(g,ge,`Unsupported protocol version: ${n.negotiatedVersion}`,{supported:[...b],requested:n.negotiatedVersion}),x,k)}if(f!==void 0&&n.headerVersion!=null&&f!==n.headerVersion){return Q("header-mismatch",p,T(g,Ie,`Header mismatch: MCP-Protocol-Version header value '${n.headerVersion}' does not match body value '${f}'`),x,k)}if(n.protocolEra!==void 0&&k!==n.protocolEra){const L=f??w??"unversioned";return Q("unsupported-version",p,T(g,ge,`Unsupported protocol version: ${L}`,{supported:[...b],requested:L}),x,k)}if(k==="modern"&&pe(f)&&(!n.requireModernVersionHeader||n.headerVersion!=null)){const L=b.filter(ae);return Q("unsupported-version",p,T(g,ge,`Unsupported protocol version: ${f}`,{supported:L,requested:f}),x,k)}if(f!==void 0&&!b.includes(f)){return Q("unsupported-version",p,T(g,ge,`Unsupported protocol version: ${f}`,{supported:[...b],requested:f}),x,k)}const P=n.protocolEra??(ae(n.headerVersion)||ae(n.negotiatedVersion)?"modern":k);if(P==="modern"){if(!ae(f)){const q=`params._meta.${me} is required and must match the MCP-Protocol-Version header (${n.headerVersion})`;return Q("invalid-modern-metadata",p,T(g,-32602,`Invalid params: ${q}`),x,k)}const L={era:"modern",version:f,supportedVersions:b};const B=Zt(d);if(B.length>0){return Q("invalid-modern-metadata",p,T(g,-32602,`Invalid params: ${B.join("; ")}`),L,k)}if(n.requireModernVersionHeader&&n.headerVersion==null){return Q("header-mismatch",p,T(g,Ie,`Header mismatch: MCP-Protocol-Version header is required for protocol version ${f}`),L,k)}const E=n.modernTransportProblem?.(d)??null;if(E!==null){return Q("header-mismatch",p,T(g,Ie,`Header mismatch: ${E}`),L,k)}return Qt(d,g,p,L)}const O={era:"legacy",version:f??w,supportedVersions:b};return Qt(d,g,p,O)}var Pe=Object.freeze(["base64","file","url"]);function tr(e){return typeof e==="string"&&Pe.includes(e)}function rr(e){return{...e,inputSchema:{...e.inputSchema,additionalProperties:false}}}var er="agentic-mermaid-mcp";var ir=vn;var sr={tools:{}};var de={readOnlyHint:true,destructiveHint:false,idempotentHint:true,openWorldHint:false};var pi={readOnlyHint:true,destructiveHint:false,idempotentHint:false,openWorldHint:false};var fi={readOnlyHint:false,destructiveHint:false,idempotentHint:false,openWorldHint:false};var or="execute timeoutMs must be a positive integer";function ar(e){return typeof e==="number"&&Number.isSafeInteger(e)&&e>0}function yi(e){return{options:{...mt(),description:e}}}function dr(e){const n=e.options;const t=n===void 0?{}:n;if(!oe(t))throw new Error("invalid render options: render options must be a plain JSON object");const r={...t};const i=ut(r);if(i.length>0)throw new Error(`invalid render options: ${i.join("; ")}`);return r}function nr(e){if(e.length===0)return"arguments";return e.reduce((n,t)=>typeof t==="number"?`${n}[${t}]`:`${n}.${t}`,"arguments")}function bi(e,n){if(!oe(n))return["arguments must be a plain JSON object"];const t=On(n);if(t.length>0){return He(t.map(i=>`${nr(i.path)} ${i.message}`),"arguments")}const r=st(n,e.inputSchema,e.inputSchema,[],{patternMismatch:i=>i["x-agentic-mermaid-runtime-validator"]==="portablePngBackground"?"must be a portable basic color keyword or 3, 4, 6, or 8 digit hex color":void 0,validateRuntime:(i,o,a)=>{const d=o["x-agentic-mermaid-runtime-validator"];if(d==="portablePngBackground"){return ht(i)===void 0?[{path:a,message:"must be a portable basic color keyword or 3, 4, 6, or 8 digit hex color",generic:false}]:[]}return d==="architectureVisual"?[]:lt(i,o,a)}}).map(i=>`${nr(i.path)} ${i.message}`);return He(r,"arguments")}function cr(e,n={}){const t=e.supportedVersions??(typeof e.protocolVersion==="string"?[e.protocolVersion]:[]);if(!n.supportedVersions)return t;return t.filter(r=>n.supportedVersions.includes(r))}function hi(e,n){return{supportedVersions:[...n],capabilities:sr,instructions:e.instructions}}function ki(e){if(!oe(e))return["params is required and must be an object"];const n=[];if(typeof e.protocolVersion!=="string"){n.push("params.protocolVersion is required and must be a string")}n.push(...rn(e.capabilities,"params.capabilities"));n.push(...tn(e.clientInfo,"params.clientInfo"));return n}async function on(e,n,t){const{request:r,id:i,notification:o,protocol:a}=e;const{era:d,version:g,supportedVersions:p}=a;let y;switch(r.method){case"initialize":{if(d==="modern"){y=Se(i,r.method);break}const f=ki(r.params);if(f.length>0){y=T(i,-32602,`Invalid params: ${f.join("; ")}`);break}const k=r.params?.protocolVersion;const b=p.filter(pe);const w=b.at(-1)??(typeof t.protocolVersion==="function"?t.protocolVersion(r.params):t.protocolVersion);const x=pe(k)&&b.includes(k)?k:w;y=ue(i,{protocolVersion:x,serverInfo:{name:t.serverName??er,version:ir},capabilities:sr,instructions:t.instructions});break}case"notifications/initialized":y=d==="modern"?Se(i,r.method):null;break;case"ping":y=d==="modern"?Se(i,r.method):ue(i,{});break;case"server/discover":y=d==="modern"?ue(i,hi(t,p)):Se(i,r.method);break;case"tools/list":y=ue(i,{tools:t.tools});break;case"tools/call":{if(!oe(r.params)){y=T(i,-32602,"Invalid params: tools/call requires an object");break}const f=r.params.name;if(typeof f!=="string"){y=T(i,-32602,"Invalid params: tools/call requires `name` (string)");break}const k=t.tools.find(x=>x.name===f);if(!k){y=T(i,-32602,`Unknown tool: ${f}`);break}const b=r.params.arguments??{};const w=bi(k,b);if(w.length>0){const x=`Invalid arguments for ${f}: ${w.join("; ")}`;y=Wt(g)?K(i,{ok:false,error:{code:"INVALID_ARGUMENTS",message:x}},true):T(i,-32602,x);break}y=await t.handleToolCall(i,{...r.params,arguments:b},n);break}default:y=Se(i,r.method)}return o?null:Ri(y,r.method,d,t.serverName??er)}var Si=3e5;var _i=new Set(["server/discover","tools/list"]);function Ri(e,n,t,r){if(t!=="modern"||!e||!oe(e.result))return e;const i=oe(e.result._meta)?e.result._meta:{};const o={resultType:"complete",...e.result,_meta:{...i,[zt]:{name:r,version:ir}}};if(_i.has(n)){o.ttlMs=Si;o.cacheScope="public"}return{...e,result:o}}function Se(e,n){return T(e,-32601,`Method not found: ${n}`)}function lr(e){const n=e.hosted?`SVG/ASCII/layout enforce
2
+ security:'strict', embedFontImport:false.
3
+
4
+ `:"";const t=e.hosted?"Optional CPU-time budget (default 5000ms, max 30000ms).":"Optional hard timeout (default 5000ms).";const r=e.hosted?"an isolated sandbox":"a sandboxed node:vm context";return{name:"execute",title:"Execute Mermaid SDK code",description:`Run JavaScript in ${r}; return a value.
5
+ No promises, async/await, dynamic import, or type annotations.
6
+ ${n}SDK:
7
+ ${e.sdkDeclaration}`,inputSchema:{type:"object",additionalProperties:false,properties:{code:{type:"string",description:"JavaScript to execute; mermaid.* SDK is global."},timeoutMs:{type:"integer",minimum:1,description:t}},required:["code"]},annotations:pi}}function ur(e){const n=e==="hosted";const t=bt(n?"portable":"native");const r=t.properties;return{name:"render_png",title:"Render Mermaid as PNG",description:n?`Rasterize a Mermaid source string to PNG. Returns { ok, png_base64 }.
8
+ Hosted rendering uses resvg-wasm with bundled fonts; bytes may differ from the
9
+ local napi renderer, so hosted PNG is a convenience surface, not part of the
10
+ byte-determinism contract. For file/URL artifacts use the local stdio server.`:`Rasterize a Mermaid source string to PNG. By default returns base64-encoded PNG bytes.
11
+ Set output to "file" or "url" to write a managed artifact instead; artifact responses include
12
+ {path?, url?, mimeType, bytes, sha256}. File/URL artifacts are generated under the MCP server's
13
+ artifact directory with safe names, size limits, and TTL cleanup.
14
+ Uses bundled resvg + Inter (DejaVu Sans fallback) for same-machine cross-runtime determinism where verified.
15
+ Agentic Mermaid outputs SVG, PNG, ASCII, Unicode, and JSON layout. For non-PNG output, use execute() with mermaid.renderMermaidSVG, mermaid.renderMermaidASCII (useAscii true for ASCII, false for Unicode), or verifyMermaid(...).layout \u2014 those are streaming text/data and don't need a dedicated tool.`,inputSchema:{type:"object",additionalProperties:false,properties:{source:{type:"string",description:"Mermaid source."},...r,...yi("Shared advanced RenderOptions object."),...n?{}:{output:{type:"string",enum:[...Pe],description:"PNG return mode (default base64)."}}},required:["source"]},annotations:n?de:fi}}function mr(){return{name:"describe",title:"Describe Mermaid diagram",description:`Describe a Mermaid diagram. format=text returns { ok, text } with
16
+ one or two summary sentences; format=json returns { ok, tree } with the AX tree;
17
+ format=facts returns { ok, facts } with deterministic semantic fact lines for
18
+ machine checking (for example edge A -> B : label, member Duck +quack()).`,inputSchema:{type:"object",additionalProperties:false,properties:{source:{type:"string",description:"Mermaid source."},format:{type:"string",enum:[...Te],description:"text (default), json AX tree, or facts semantic read-back."}},required:["source"]},annotations:de}}function gr(e){return{type:"array",minItems:1,items:{type:"object"},description:e}}var pr=[{name:"mutate",title:"Edit Mermaid diagram",description:`Apply a list of structured edit ops to an existing Mermaid \`source\` and
19
+ return the edited diagram. This is the declarative counterpart to \`execute\`:
20
+ plain JSON in, plain JSON out, no sandbox. Prefer it for straightforward edits;
21
+ reserve \`execute\` for logic the ops don't express.
22
+ Returns { ok, family, source, verify:{ ok, warnings } } on success, or
23
+ { ok:false, family, opIndex, error } \u2014 where \`error\` names the offending field
24
+ and lists the valid ones \u2014 when an op is malformed or cannot apply. Ops apply in
25
+ order and are all-or-nothing: the first failing op stops the batch (its position
26
+ is \`opIndex\`) and the input is left untouched.
27
+ Each op is { "kind": <op>, \u2026fields }. Call \`describe_sdk\` for the detected
28
+ family before authoring unfamiliar ops; it returns compact signatures or exact
29
+ field types, enum values, defaults, and constraints.
30
+ Set mode to source-preserving for supported edits to opaque Class or Flowchart
31
+ source. Exact edited bytes and portability warnings are retained; unsupported
32
+ operations still fail atomically. This mode does not promise portable export.`,inputSchema:{type:"object",additionalProperties:false,properties:{source:{type:"string",description:"Mermaid source to edit."},ops:gr("Non-empty ordered list of edit ops; each is { kind, ...fields }."),mode:{type:"string",enum:["structured","source-preserving"],default:"structured",description:"Source-preserving mode edits owned source ranges without regenerating unsupported syntax."}},required:["source","ops"]},annotations:de},{name:"build",title:"Build Mermaid diagram",description:`Author a new Mermaid diagram from blank by folding a list of structured ops
33
+ over an empty diagram of \`family\`. The declarative counterpart to hand-writing
34
+ source. Returns the same envelope as \`mutate\`:
35
+ { ok, family, source, verify } or { ok:false, family, opIndex, error }.
36
+ Call \`describe_sdk\` for the family before authoring unfamiliar ops.`,inputSchema:{type:"object",additionalProperties:false,properties:{family:{type:"string",description:`Diagram family to author (one of: ${Object.keys(it).join(", ")}).`},ops:gr("Non-empty ordered list of ops; each is { kind, ...fields }.")},required:["family","ops"]},annotations:de}];function an(e,n,t,r=Infinity,i="input exceeds the size cap"){if(t==="family"&&n.mode!==void 0)return T(e,-32602,"build does not accept an edit mode");const o=n.ops;if(!Array.isArray(o))return T(e,-32602,`${t==="source"?"mutate":"build"} requires \`ops\` (array)`);if(o.length===0)return T(e,-32602,`${t==="source"?"mutate":"build"} requires at least one op`);if(t==="source"){if(typeof n.source!=="string")return T(e,-32602,"mutate requires `source` (string)");if(Je(n.source,r)>r){return K(e,{ok:false,family:null,error:{code:"SOURCE_TOO_LARGE",message:i}},true)}}else if(typeof n.family!=="string"){return T(e,-32602,"build requires `family` (string)")}if(Je(JSON.stringify(o),r)>r){return K(e,{ok:false,family:null,error:{code:"OPS_TOO_LARGE",message:i}},true)}const a=t==="source"?Ze({source:n.source,ops:o,mode:n.mode}):Ze({family:n.family,ops:o});return K(e,a,!a.ok)}import te from"vm";import{parse as yr}from"acorn";function br(e,n,t,r,i,o){const a=new WeakMap;const d=new WeakSet;const g=new WeakSet;const p=new WeakMap;const y=new WeakMap;const f=new WeakMap;let k=1;const b=s=>s==="constructor"||s==="__proto__"||s==="prototype";const w=s=>Object.isExtensible(s)?null:Reflect.getPrototypeOf(s);const x=s=>n?n(s):new Error(s);const P=()=>{if(t?.())throw x("Code Mode SDK calls are not allowed while returning results");const s=i?.();if(s)throw x(s)};const O=()=>{throw x("Code Mode SDK results are read-only; use mermaid.mutate(...) for structured edits")};const L=new Set(["copyWithin","fill","pop","push","reverse","shift","sort","splice","unshift"]);const B=new Set(["forEach","map","filter","find","findIndex","findLast","findLastIndex","some","every","flatMap"]);const E=s=>s&&(typeof s==="object"||typeof s==="function")&&f.has(s)?f.get(s):s;const q=s=>s instanceof Map||Object.prototype.toString.call(s)==="[object Map]";const z=s=>s instanceof Set||Object.prototype.toString.call(s)==="[object Set]";const v=new WeakMap;const $=s=>{if(typeof s!=="object"||s===null)return void 0;const c=v.get(s);if(c)return c;let h;if(s instanceof pt){h={name:s.name,code:s.code,output:s.output,family:s.family,decision:s.decision}}else if(s instanceof gt){h={name:s.name,code:s.code,expectedFamilyId:s.expectedFamilyId,detectedFamilyId:s.detectedFamilyId}}else{const _=Gt(s);if(!_)return void 0;h={name:_.code==="ASCII_TARGET_WIDTH_IMPOSSIBLE"?"AsciiWidthError":"MermaidFamilyDetectionError",..._}}if(!h)return void 0;const m=JSON.stringify(h);return m===void 0?void 0:JSON.parse(m)};const W=s=>{if(Object.isExtensible(s))return s;if(Array.isArray(s))return s.slice();const c=Reflect.getPrototypeOf(s);return c===Object.prototype||c===null?Object.assign(Object.create(c),s):s};const I=(s,c=false)=>{try{return s()}catch(h){const m=$(h)??(c?{name:"RenderError",...ve(h)}:void 0);const _=x(m?.message??h.message);if(m){v.set(_,m);for(const[M,S]of Object.entries(m)){Object.defineProperty(_,M,{value:u(S),enumerable:true,writable:false,configurable:false})}}throw _}};const V=s=>I(()=>{if(!s||typeof s!=="object"&&typeof s!=="function")return s;const c=JSON.stringify(s);return c===void 0?void 0:JSON.parse(c)});const N=(s,c=h=>u(h))=>{let h;const m=u(()=>{const S=s.next();return S.done?{value:void 0,done:true}:{value:c(S.value),done:false}});const _=u(()=>h);const M={next:m,[Symbol.iterator]:_};h=new Proxy(M,{get(S,l){return l==="next"?m:l===Symbol.iterator?_:void 0},has(S,l){return l==="next"||l===Symbol.iterator},...ie()});y.set(M,h);return ke(h,M)};function Ge(s,c){if(b(c))return void 0;const h=Reflect.getOwnPropertyDescriptor(s,c);if(!h)return void 0;if("value"in h)return{...h,value:u(h.value)};return{...h,get:h.get?u(h.get):void 0,set:h.set?u(O):void 0}}const ie=s=>({set:O,deleteProperty:O,defineProperty:O,setPrototypeOf:O,preventExtensions:O,getOwnPropertyDescriptor:(c,h)=>Ge(s??c,h),getPrototypeOf:c=>w(s??c)});const Re=s=>Boolean(s&&typeof s==="object"&&"body"in s&&"canonicalSource"in s);const X=s=>{s=E(s);if(!Re(s))return void 0;const c=s;let h=a.get(c);if(!h){h=k++;a.set(c,h)}return h};const he=s=>{s=E(s);if(Re(s))d.add(s)};const ne=(s,c)=>{s=E(s);if(s&&(typeof s==="object"||typeof s==="function")&&!d.has(s)){throw x(`Code Mode ${c} input must come from mermaid.parseRegisteredMermaid(...) or mermaid.mutate(...)`)}};const ke=(s,c)=>{f.set(s,c);if(Re(c))a.set(s,X(c));return s};const u=s=>{if(!s||typeof s!=="object"&&typeof s!=="function")return s;const c=E(s);if(c!==s)return u(c);const h=s;const m=y.get(h);if(m)return m;if(q(s)){let S;S=new Proxy(s,{get(l,R){if(b(R))return void 0;if(R==="size")return l.size;if(R==="get")return u(A=>u(l.get(E(A))));if(R==="set"||R==="delete"||R==="clear"||R==="getOrInsert"||R==="getOrInsertComputed")return u(O);if(R==="has")return u(A=>l.has(E(A)));if(R===Symbol.iterator||R==="entries")return u(()=>N(l.entries(),A=>{const[D,C]=A;return[u(D),u(C)]}));if(R==="values")return u(()=>N(l.values()));if(R==="keys")return u(()=>N(l.keys()));if(R==="forEach")return u((A,D)=>{for(const[C,G]of l.entries())A.call(D,u(G),u(C),S)});const F=I(()=>Reflect.get(l,R,l));return typeof F==="function"?void 0:u(F)},...ie()});y.set(h,S);return ke(S,s)}if(z(s)){let S;S=new Proxy(s,{get(l,R){if(b(R))return void 0;if(R==="size")return l.size;if(R==="add"||R==="delete"||R==="clear")return u(O);if(R==="has")return u(A=>l.has(E(A)));if(R===Symbol.iterator||R==="values"||R==="keys")return u(()=>N(l.values()));if(R==="entries")return u(()=>N(l.values(),A=>{const D=u(A);return[D,D]}));if(R==="forEach")return u((A,D)=>{for(const C of l.values())A.call(D,u(C),u(C),S)});const F=I(()=>Reflect.get(l,R,l));return typeof F==="function"?void 0:u(F)},...ie()});y.set(h,S);return ke(S,s)}if(typeof s==="function"){const S=s;const l=(...F)=>u(I(()=>Reflect.apply(S,void 0,F)));const R=new Proxy(l,{apply(F,A,D){return u(I(()=>Reflect.apply(S,A,D)))},get(F,A,D){if(b(A))return void 0;if(!Reflect.getOwnPropertyDescriptor(S,A))return void 0;return u(I(()=>Reflect.get(S,A,D)))},...ie(S)});y.set(h,R);return ke(R,s)}const _=W(s);let M;M=new Proxy(_,{get(S,l,R){if(b(l))return void 0;if(Array.isArray(S)){if(typeof l==="string"&&L.has(l))return u(O);if(l===Symbol.iterator||l==="values")return u(()=>N(Array.prototype.values.call(S)));if(l==="entries")return u(()=>N(Array.prototype.entries.call(S),A=>{const[D,C]=A;return[D,u(C)]}));if(l==="keys")return u(()=>N(Array.prototype.keys.call(S)));if(typeof l==="string"&&B.has(l)){return u((A,D)=>{const C=(G,Z)=>A.call(D,u(G),Z,M);if(l==="forEach"){Array.prototype.forEach.call(S,C);return void 0}if(l==="map")return Array.prototype.map.call(S,C);if(l==="filter")return Array.prototype.filter.call(S,C);if(l==="find")return Array.prototype.find.call(S,C);if(l==="findIndex")return Array.prototype.findIndex.call(S,C);if(l==="findLast")return Array.prototype.findLast.call(S,C);if(l==="findLastIndex")return Array.prototype.findLastIndex.call(S,C);if(l==="some")return Array.prototype.some.call(S,C);if(l==="every")return Array.prototype.every.call(S,C);if(l==="flatMap")return Array.prototype.flatMap.call(S,C)})}if(l==="toSorted"){return u(A=>{const D=Array.prototype.map.call(S,C=>u(C));return A?D.slice().sort((C,G)=>A(C,G)):D.slice().sort()})}if(l==="toReversed")return u(()=>Array.prototype.map.call(S,A=>u(A)).reverse());if(l==="toSpliced")return u(function(A,D,...C){const G=Array.prototype.map.call(S,se=>u(se));const Z=G.slice();if(arguments.length===1)Z.splice(A);else Z.splice(A,D??0,...C.map(se=>u(E(se))));return Z});if(l==="with")return u((A,D)=>{const C=Array.prototype.map.call(S,se=>u(se));const G=A<0?C.length+A:A;if(G<0||G>=C.length)throw x("Invalid array index");const Z=C.slice();Z[G]=u(E(D));return Z});if(l==="reduce"||l==="reduceRight"){return u(function(A,D){const C=arguments.length>=2;let G=!C;const Z=(Tn,ii,si)=>{const oi=G?u(Tn):Tn;G=false;return A(oi,u(ii),si,M)};const se=l==="reduce"?Array.prototype.reduce:Array.prototype.reduceRight;return Reflect.apply(se,S,C?[Z,D]:[Z])})}}if(!Reflect.getOwnPropertyDescriptor(S,l))return void 0;const F=I(()=>Reflect.get(S,l,R));return typeof F==="function"?void 0:u(F)},...ie(),has(S,l){return b(l)?false:Reflect.has(S,l)}});y.set(h,M);if(_!==h)y.set(_,M);return ke(M,s)};const le=s=>Mi(E(s));const ti=s=>{const c=s?.body?.kind;return c!=null&&dn.has(c)?c:"opaque"};const U=s=>{e?.push(s);o?.(s)};const An={parseRegisteredMermaid:xe,createMermaid:xt,buildMermaid:Et,asFlowchart:$n,asState:Fn,asSequence:jn,asTimeline:qn,asClass:Un,asEr:Gn,asJourney:Kn,asArchitecture:Jn,asXyChart:Hn,asPie:zn,asQuadrant:Wn,asGantt:Qn,asMindmap:et,asGitGraph:nt,asRadar:Xn,asSankey:Zn,asC4:Yn,asPacket:In,asKanban:Pn,asRequirement:Nn,asTreemap:Ln,asZenUML:rt,asEventModeling:tt,asIshikawa:Bn,asBlock:Vn,mutate:Rt,mutatePreservingSource:Ye,verifyMermaid:Ce,analyzeMermaid:St,analyzeMermaidSource:_t,describeMermaidFacts:we,describeMermaidFactsSource:vt,checkMermaid:Ot,checkMermaidSource:Dt,serializeMermaid:We,renderMermaidSVG:Nt,renderMermaidSVGWithReceipt:Lt,renderMermaidASCII:Bt,renderMermaidASCIIWithReceipt:Vt,layoutMermaidWithReceipt:$t,describeOps:Ee,opSignatures:Ae};const Me=new Set(Reflect.ownKeys(An));const Ke=new Map;const Cn=(s,c)=>{if(b(c)||!Me.has(c))return void 0;if(Ke.has(c))return Ke.get(c);let h;if(c==="parseRegisteredMermaid")h=u(m=>{P();if(typeof m!=="string")throw x(`Code Mode ${c} source must be a string`);const _=I(()=>s.parseRegisteredMermaid(m));if(_.ok)he(_.value);const M=_.ok?X(_.value):void 0;U({verb:"parse",diagram:M,source:_.ok?_.value.body.kind==="opaque"?_.value.body.source:_.value.canonicalSource:void 0});return u(_)});else if(c==="createMermaid")h=u((m,_)=>{P();const M=I(()=>s.createMermaid(m,V(_)));he(M);U({verb:"create",family:dn.has(m)?m:void 0,diagram:X(M),ok:true});return u(M)});else if(c==="buildMermaid")h=u((m,_,M)=>{P();const S=V(_);const l=I(()=>wt(m,S,V(M)));if(l.ok)he(l.value);U({verb:"create",family:dn.has(m)?m:void 0,diagram:l.ok?X(l.value):void 0,ops:Array.isArray(_)?_.length:void 0,ok:l.ok});return u(l)});else if(typeof c==="string"&&c.startsWith("as")&&c in s){h=u(m=>{P();ne(m,String(c));const _=X(m);const M=I(()=>s[c](E(m)));if(M)he(M);U({verb:"narrow",family:Ei(c),input:_,ok:M!==null});return u(M)})}else if(c==="mutate"||c==="mutatePreservingSource")h=u((m,_)=>{P();ne(m,c);const M=V(_);const S={verb:"mutate",body:ti(E(m)),input:X(m),opKind:typeof M==="object"&&M&&"kind"in M?String(M.kind):void 0};U(S);const l=I(()=>c==="mutatePreservingSource"?Ye(E(m),M):Mt(E(m),M));if(l.ok){const R="diagram"in l.value?l.value.diagram:l.value;he(R);if("diagram"in l.value){g.add(l.value);p.set(R,l.value.source)}S.output=X(R);S.fingerprint=le(R)}if(!l.ok&&Array.isArray(M)){return u({...l,error:{...l.error,message:l.error.message.replace("applyOps({ source, family, ops }) to edit source","the declarative mutate tool to edit source")}})}return u(l)});else if(c==="verifyMermaid")h=u((m,_)=>{P();ne(m,"verifyMermaid");const M=I(()=>s.verifyMermaid(E(m),_));const S=X(m);U({verb:"verify",diagram:S,ok:M.ok,inspected:false,fingerprint:le(m)});return u(new Proxy(M,{get(l,R,F){if(t?.())throw x("Code Mode SDK calls are not allowed while returning results");if(R==="ok"||R==="warnings"||R==="layout"){U({verb:"verify_inspect",diagram:S,property:R})}if(b(R))return void 0;return u(I(()=>Reflect.get(l,R,F)))},...ie()}))});else if(c==="analyzeMermaid")h=u(m=>{P();ne(m,"analyzeMermaid");const _=I(()=>s.analyzeMermaid(E(m)));U({verb:"analyze",diagram:X(m),ok:true,fingerprint:le(m)});return u(_)});else if(c==="analyzeMermaidSource")h=u(m=>{P();if(typeof m!=="string")throw x("Code Mode analyzeMermaidSource source must be a string");const _=I(()=>s.analyzeMermaidSource(m));U({verb:"analyze",source:m,ok:_.ok});return u(_)});else if(c==="describeMermaidFacts")h=u(m=>{P();ne(m,"describeMermaidFacts");const _=I(()=>s.describeMermaidFacts(E(m)));U({verb:"facts",diagram:X(m),ok:true,fingerprint:le(m)});return u(_)});else if(c==="describeMermaidFactsSource")h=u(m=>{P();if(typeof m!=="string")throw x("Code Mode describeMermaidFactsSource source must be a string");const _=I(()=>s.describeMermaidFactsSource(m));U({verb:"facts",source:m,ok:_.ok});return u(_)});else if(c==="checkMermaid")h=u((m,_)=>{P();ne(m,"checkMermaid");const M=I(()=>s.checkMermaid(E(m),V(_)));U({verb:"check",diagram:X(m),ok:M.ok,fingerprint:le(m)});return u(M)});else if(c==="checkMermaidSource")h=u((m,_)=>{P();if(typeof m!=="string")throw x("Code Mode checkMermaidSource source must be a string");const M=I(()=>s.checkMermaidSource(m,V(_)));U({verb:"check",source:m,ok:M.ok?M.value.ok:false});return u(M)});else if(c==="serializeMermaid")h=u(m=>{P();ne(m,"serializeMermaid");const _=I(()=>s.serializeMermaid(E(m)));U({verb:"serialize",diagram:X(m),source:_,fingerprint:le(m)});return _});else if(c==="renderMermaidSVG"||c==="renderMermaidSVGWithReceipt"||c==="renderMermaidASCII"||c==="renderMermaidASCIIWithReceipt"||c==="layoutMermaidWithReceipt")h=u((m,_)=>{P();if(m&&typeof m==="object")ne(m,String(c));const M=c==="renderMermaidASCII"||c==="renderMermaidASCIIWithReceipt";const S=_?.onConfigDiagnostic;const l=M?_?.onProjectionDiagnostic:void 0;if(S!==void 0&&typeof S!=="function"){throw x(`Code Mode ${String(c)} onConfigDiagnostic must be a function`)}if(l!==void 0&&typeof l!=="function"){throw x(`Code Mode ${String(c)} onProjectionDiagnostic must be a function`)}let R=V(_);if(r)R={...R??{},...r.render};const F=[];const A=[];if(S||l)R??={};if(S){R.onConfigDiagnostic=C=>F.push(C)}if(l){R.onProjectionDiagnostic=C=>A.push(C)}const D=I(()=>s[c](E(m),R),true);for(const C of F)S(u(V(C)));for(const C of A)l(u(V(C)));return V(D)});else if(c==="describeOps"||c==="opSignatures")h=u(m=>{P();if(typeof m!=="string")throw x(`Code Mode ${String(c)} family must be a string`);if(!Xe(m)){const _=Dn().filter(Xe);throw x(`Code Mode ${String(c)} family must be one of: ${_.join(", ")}`)}return u(I(()=>s[c](m)))});Ke.set(c,h);return h};const ri=s=>{try{const c=E(s);let h=c&&typeof c==="object"&&!Array.isArray(c)&&c.ok===true&&"value"in c?E(c.value):c;if(h&&typeof h==="object"&&g.has(h))h=h.diagram;if(Re(h)&&d.has(h)){const m=h;const{accepted:_,verification:M}=Tt(m);const S=Ct(M);if(!_){return{ok:false,family:m.kind,error:{code:"VERIFY_FAILED",message:"returned diagram failed verify; source was not emitted",details:S.warnings}}}const l=p.get(m);return{ok:true,family:m.kind,source:l??We(m),verify:S,...l!==void 0?{mode:"source-preserving"}:{}}}}catch{}return s};const wn=new Proxy(An,{get(s,c){return Cn(s,c)},...ie(),getOwnPropertyDescriptor(s,c){if(!Me.has(c)||b(c))return void 0;const h=Reflect.getOwnPropertyDescriptor(s,c);return h&&"value"in h?{...h,value:Cn(s,c)}:void 0},has(s,c){return Me.has(c)&&!b(c)},ownKeys(){return Array.from(Me)}});hr.set(wn,ri);return wn}var hr=new WeakMap;function kr(e,n){const t=e&&typeof e==="object"?hr.get(e):void 0;return t?t(n):n}var Sr="return plain data instead \u2014 e.g. serializeMermaid(d) for a diagram, or read the fields you need (verifyMermaid(d).ok, .warnings); the declarative mutate/build tools return a ready { ok, family, source, verify } envelope";function Mi(e){if(!e||typeof e!=="object")return void 0;if(!("body"in e)||!("canonicalSource"in e))return void 0;try{return JSON.stringify(e,vi)}catch{return void 0}}var dn=new Set(j.map(e=>e.id));var xi=new Map(j.map(e=>[e.narrower,e.id]));function Ei(e){const n=xi.get(String(e));if(!n)throw new Error(`Unknown Code Mode narrower: ${String(e)}`);return n}function Ai(e){try{const n='function __agent_code__(){"use strict";\n';const t=yr(`${n}${e}
37
+ }`,{ecmaVersion:"latest",sourceType:"script"});const r=t.body[0];if(r?.type!=="FunctionDeclaration")return e;const i=r.body.body.findLast(o=>o.type!=="EmptyStatement");if(i?.type==="ExpressionStatement"){const o=n.length;if(i.start<o)return e;return`${e.slice(0,i.start-o)}return (
38
+ ${e.slice(i.expression.start-o,i.expression.end-o)}
39
+ );${e.slice(i.end-o)}`}}catch{}return e}function _r(e){const n=e.trim();const t=n.replace(/;\s*$/,"");const r=`(function (mermaid, console) { "use strict"; return (
40
+ ${t}
41
+ ) })(mermaid, console)`;const i=`(function (mermaid, console) { "use strict";
42
+ ${Ai(e)}
43
+ })(mermaid, console)`;try{new Function(`"use strict"; return (
44
+ ${t}
45
+ )`);return[r]}catch{return[i]}}function Rr(e){const n=Ti(e);if(!n)return"Code Mode syntax must be a strict JavaScript expression or function body";let t=false;let r=false;cn(n,(i,o,a)=>{if(i.type==="ImportExpression"||i.type==="AwaitExpression")t=true;if("async"in i&&i.async===true)t=true;if(i.type!=="Identifier"||!("name"in i)||typeof i.name!=="string")return;const d=a==="key"&&o?.computed!==true||o?.type==="MemberExpression"&&a==="property"&&o.computed===false;if(d&&!(i.name==="fromAsync"&&o?.type==="MemberExpression"&&o.object?.type==="Identifier"&&o.object.name==="Array"))return;if(Ci.has(i.name))t=true;if(wi.has(i.name))r=true});if(t){return"Code Mode is synchronous; async/await, Promise jobs, finalizers, queueMicrotask, Array.fromAsync, and dynamic import are not supported"}if(r){return"Code Mode does not expose blocking or realm-creating globals"}return void 0}var Ci=new Set(["async","await","Promise","AsyncDisposableStack","FinalizationRegistry","WeakRef","fromAsync","queueMicrotask"]);var wi=new Set(["Atomics","SharedArrayBuffer","ShadowRealm","WebAssembly"]);function Ti(e){const n=e.trim().replace(/;\s*$/,"");const t=[`function __agent_code__(){"use strict"; return (
46
+ ${n}
47
+ )}`,`function __agent_code__(){"use strict";
48
+ ${e}
49
+ }`,`async function __agent_code__(){"use strict";
50
+ ${e}
51
+ }`];for(const r of t){try{return yr(r,{ecmaVersion:"latest",sourceType:"script"})}catch{}}return void 0}function cn(e,n,t,r){const i=e;n(i,t,r);for(const[o,a]of Object.entries(i)){if(o==="start"||o==="end"||o==="type")continue;if(Array.isArray(a)){for(const d of a)if(fr(d))cn(d,n,i,o)}else if(fr(a)){cn(a,n,i,o)}}}function fr(e){return Boolean(e&&typeof e==="object"&&"type"in e&&typeof e.type==="string")}function vi(e,n){if(n instanceof Map)return Object.fromEntries(n);if(n instanceof Set)return Array.from(n);return n}var Ne=5e3;var Oi=Object.freeze({maxResultBytes:2*1024*1024,maxLogEntries:1e3,maxLogBytes:256*1024});var Mr="\u2026[logs truncated: hosted execute caps console output]";function xr(e){if(e===void 0)return Oi;for(const n of["maxResultBytes","maxLogEntries","maxLogBytes"]){if(!Number.isSafeInteger(e[n])||e[n]<=0){throw new TypeError(`Code Mode ${n} must be a positive safe integer`)}}return Object.freeze({...e})}function Er(e){let n=0;for(const t of e){const r=t.codePointAt(0);n+=r<=127?1:r<=2047?2:r<=65535?3:4}return n}var Le=1e3;var Di={};async function Ar(e,n={}){return Ii(e,n)}function Ii(e,n={}){const t=n.timeoutMs??Ne;const r=xr(n.outputLimits);const i=performance.now();const o=()=>Math.floor(t-(performance.now()-i));const a=[];const d=v=>n.trace?{ok:false,error:v,logs:[],trace:a}:{ok:false,error:v,logs:[]};const g=Ut()??Rr(e);if(g)return d(g);const p={...Di,eval:void 0,Function:void 0};const y=te.createContext(p,{name:"agentic-mermaid-codemode",microtaskMode:"afterEvaluate",codeGeneration:{strings:false,wasm:false}});te.runInContext(`
52
+ (() => {
53
+ const logs = []
54
+ let logBytes = 0
55
+ let logsTruncated = false
56
+ const maxLogEntries = ${r.maxLogEntries}
57
+ const maxLogBytes = ${r.maxLogBytes}
58
+ const truncationMarker = ${JSON.stringify(Mr)}
59
+ const safeString = String
60
+ const safeStringify = JSON.stringify.bind(JSON)
61
+ const objectToString = Object.prototype.toString
62
+ const safeToStringTag = (v) => objectToString.call(v)
63
+ const safeFromEntries = Object.fromEntries.bind(Object)
64
+ const safeArrayFrom = Array.from.bind(Array)
65
+ const utf8Bytes = (value) => {
66
+ let bytes = 0
67
+ for (const char of value) {
68
+ const code = char.codePointAt(0)
69
+ bytes += code <= 0x7f ? 1 : code <= 0x7ff ? 2 : code <= 0xffff ? 3 : 4
70
+ }
71
+ return bytes
72
+ }
73
+ const truncateUtf8 = (value, maximum) => {
74
+ let bytes = 0
75
+ let output = ''
76
+ for (const char of value) {
77
+ const code = char.codePointAt(0)
78
+ const width = code <= 0x7f ? 1 : code <= 0x7ff ? 2 : code <= 0xffff ? 3 : 4
79
+ if (bytes + width > maximum) break
80
+ output += char
81
+ bytes += width
82
+ }
83
+ return output
84
+ }
85
+ const str = (v) => {
86
+ if (typeof v === 'string') return v
87
+ try {
88
+ const json = safeStringify(v)
89
+ return typeof json === 'string' ? json : safeString(v)
90
+ } catch {
91
+ try { return safeString(v) } catch { return '[unprintable]' }
92
+ }
93
+ }
94
+ const appendLog = (args) => {
95
+ if (logsTruncated) return
96
+ if (logs.length >= maxLogEntries || logBytes >= maxLogBytes) {
97
+ logsTruncated = true
98
+ logs.push(truncationMarker)
99
+ return
100
+ }
101
+ let line = args.map(str).join(' ')
102
+ const remaining = maxLogBytes - logBytes
103
+ if (utf8Bytes(line) > remaining) {
104
+ line = truncateUtf8(line, remaining)
105
+ logsTruncated = true
106
+ }
107
+ logBytes += utf8Bytes(line)
108
+ logs.push(line)
109
+ if (logsTruncated) logs.push(truncationMarker)
110
+ }
111
+ Object.defineProperty(globalThis, '__pi_read_logs', {
112
+ value: () => safeStringify(logs),
113
+ writable: false,
114
+ configurable: false,
115
+ })
116
+ Object.defineProperty(globalThis, '__pi_result', { value: undefined, writable: true, configurable: false })
117
+ Object.defineProperty(globalThis, '__pi_error', { value: undefined, writable: true, configurable: false })
118
+ Object.defineProperty(globalThis, '__pi_format_error', {
119
+ value: (err) => {
120
+ try {
121
+ if (typeof err === 'string') return err
122
+ if (err && (typeof err === 'object' || typeof err === 'function')) {
123
+ const message = err.message
124
+ if (typeof message === 'string') return message
125
+ }
126
+ return safeString(err)
127
+ } catch { return 'sandbox error' }
128
+ },
129
+ writable: false,
130
+ configurable: false,
131
+ })
132
+ Object.defineProperty(globalThis, '__pi_stringify_result', {
133
+ value: (value) => safeStringify(value, (_k, v) => {
134
+ const tag = safeToStringTag(v)
135
+ if (tag === '[object Map]') return safeFromEntries(v)
136
+ if (tag === '[object Set]') return safeArrayFrom(v)
137
+ return v
138
+ }),
139
+ writable: false,
140
+ configurable: false,
141
+ })
142
+ Object.defineProperty(globalThis, 'console', {
143
+ value: Object.freeze({
144
+ log: (...a) => appendLog(a),
145
+ error: (...a) => appendLog(a),
146
+ warn: (...a) => appendLog(a),
147
+ }),
148
+ writable: false,
149
+ configurable: false,
150
+ })
151
+ try {
152
+ Object.defineProperty(Error, 'prepareStackTrace', { value: undefined, writable: false, configurable: false })
153
+ Object.freeze(Error)
154
+ Object.freeze(Error.prototype)
155
+ } catch {}
156
+ try { Object.defineProperty(Array, 'fromAsync', { value: undefined, writable: false, configurable: false }) } catch {}
157
+ try { Object.freeze(Promise.prototype); Object.freeze(Promise) } catch {}
158
+ for (const name of [
159
+ 'constructor', '__proto__', 'eval', 'Function', 'Promise',
160
+ 'Atomics', 'SharedArrayBuffer', 'ShadowRealm', 'WebAssembly',
161
+ 'queueMicrotask', 'setTimeout', 'setInterval', 'setImmediate',
162
+ 'fetch', 'process', 'require', 'Bun', 'Worker', 'MessageChannel', 'MessagePort',
163
+ 'AsyncDisposableStack', 'DisposableStack', 'SuppressedError', 'FinalizationRegistry', 'WeakRef',
164
+ ]) {
165
+ try { Object.defineProperty(globalThis, name, { value: undefined, writable: false, configurable: false }) } catch {}
166
+ }
167
+ try { Object.setPrototypeOf(globalThis, null) } catch {}
168
+ })()
169
+ `,y);const f=te.runInContext(`(message) => new Error(String(message))`,y);let k=false;let b=false;p.mermaid=br(n.trace?a:void 0,f,()=>k,void 0,()=>{b=true;if(typeof Bun==="undefined")return void 0;const v=o();return v<Le?`Code Mode SDK calls under Bun require at least ${Le}ms of remaining timeout budget (timeoutMs >= ${Le})`:void 0},n.onTraceCall);const w=()=>{try{const v=te.runInContext(`__pi_read_logs()`,y,{timeout:50});if(typeof v!=="string")return[];const $=JSON.parse(v);return Array.isArray($)?$.filter(W=>typeof W==="string"):[]}catch{return[]}};const x=v=>{try{p.__pi_error=v;const $=te.runInContext(`__pi_format_error(__pi_error)`,y,{timeout:50});return typeof $==="string"?$:"sandbox error"}catch($){return $ instanceof Error?$.message:"sandbox error"}finally{try{p.__pi_error=void 0}catch{}}};const P=_r(e);let O;let L=null;for(const v of P){let $;try{$=new te.Script(v,{filename:"codemode.ts"})}catch(W){L=W;break}try{const W=o();if(W<=0)throw new Error(`Code Mode execution timed out after ${t}ms`);O=$.runInContext(y,{timeout:W});L=null;break}catch(W){L=W;break}}const B=v=>n.trace?{...v,trace:a}:v;if(L){k=true;return B({ok:false,error:x(L),logs:w()})}if(O===void 0){k=true;return B({ok:true,value:null,logs:w()})}k=true;let E=O;const q=b&&O!==null&&(typeof O==="object"||typeof O==="function");if(q){const v=o();if(v<=0||typeof Bun!=="undefined"&&v<Le){return B({ok:false,error:`Code Mode execution timed out after ${t}ms while committing the result`,logs:w()})}const $=`__pi_marshal_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;const W=()=>kr(p.mermaid,O);const I=new Proxy(W,{apply:V=>Reflect.apply(V,void 0,[]),get(V,N,Ge){if(N==="constructor"||N==="__proto__"||N==="prototype")return void 0;return Object.prototype.hasOwnProperty.call(V,N)?Reflect.get(V,N,Ge):void 0},getPrototypeOf:()=>null,has:(V,N)=>Object.prototype.hasOwnProperty.call(V,N)&&N!=="constructor"&&N!=="__proto__"&&N!=="prototype",set:()=>false,defineProperty:()=>false,deleteProperty:()=>false,setPrototypeOf:()=>false});try{if(!Reflect.defineProperty(p,$,{value:I,enumerable:false,writable:false,configurable:true}))throw new Error("could not install the result commit guard");E=te.runInContext(`globalThis[${JSON.stringify($)}]()`,y,{timeout:v})}catch(V){const N=x(V);return B({ok:false,error:/timed out/i.test(N)?`Code Mode execution timed out after ${t}ms while committing the result`:`could not commit Code Mode result: ${N}`,logs:w()})}finally{try{Reflect.deleteProperty(p,$)}catch{}}}let z;try{const v=o();if(v<=0){return B({ok:false,error:`Code Mode execution timed out after ${t}ms while serializing the result`,logs:w()})}p.__pi_result=E;z=te.runInContext("__pi_stringify_result(__pi_result)",y,{timeout:v})}catch(v){return B({ok:false,error:`non-serializable: ${x(v)} \u2014 ${Sr}`,logs:w()})}finally{try{p.__pi_result=void 0}catch{}}if(z===void 0)return B({ok:true,value:null,logs:w()});if(typeof z!=="string")return B({ok:false,error:"non-serializable: result did not stringify to JSON text",logs:w()});if(Er(z)>r.maxResultBytes){return B({ok:false,error:`sandbox result exceeded ${r.maxResultBytes} bytes; reduce console output or returned data`,logs:w()})}try{return B({ok:true,value:JSON.parse(z),logs:w()})}catch(v){return B({ok:false,error:`non-serializable: ${v instanceof Error?v.message:"invalid JSON"}`,logs:w()})}}var Cr="type ExternalFamilyId = `family:${string}`;\ninterface SourceLocation {\n readonly line: number;\n readonly col: number;\n}\ninterface SourceMap {\n readonly nodes: ReadonlyMap<string, SourceLocation>;\n readonly edges: ReadonlyMap<string, SourceLocation>;\n readonly groups: ReadonlyMap<string, SourceLocation>;\n readonly labels: ReadonlyMap<string, SourceLocation>;\n readonly spans?: SourceMapSpans;\n}\ninterface SourceMapSpans {\n readonly preserved: PreservedSourceSpans;\n readonly nodes: ReadonlyMap<string, SourceSpan>;\n readonly edges: ReadonlyMap<string, SourceSpan>;\n readonly groups: ReadonlyMap<string, SourceSpan>;\n readonly labels: ReadonlyMap<string, SourceSpan>;\n readonly metadata?: ReadonlyMap<string, ReadonlyMap<string, {\n readonly key: SourceSpan;\n readonly value: SourceSpan;\n }>>;\n}\ninterface PreservedSourceSpans {\n readonly source: SourceSpan;\n readonly wrapper?: SourceSpan;\n readonly frontmatter?: SourceSpan;\n readonly initDirectives?: readonly SourceSpan[];\n readonly accessibilityDirectives?: readonly SourceSpan[];\n readonly header: SourceSpan;\n readonly body: SourceSpan;\n}\ninterface SourceSpan {\n readonly start: SourceSpanPoint;\n readonly end: SourceSpanPoint;\n}\ninterface SourceSpanPoint {\n readonly offset: number;\n readonly line: number;\n readonly col: number;\n}\ninterface SourcePreservationReceipt {\n readonly version: 1;\n readonly classification: 'unsupported' | 'inventory-only' | 'unknown';\n readonly source: string;\n readonly header: string;\n readonly upstreamFamilyId?: string;\n readonly mermaidVersion: string;\n readonly spans?: PreservedSourceSpans;\n}\ninterface ParseError {\n readonly code: string;\n readonly message: string;\n readonly line?: number;\n readonly col?: number;\n readonly preservation?: SourcePreservationReceipt;\n readonly help?: string;\n}\ntype RenderedRegionKind = 'node' | 'edge' | 'label' | 'canvas' | 'group' | 'cluster' | 'lane' | 'band' | 'compartment' | 'plot' | 'ring';\ninterface RenderedRegion {\n id: string;\n kind: RenderedRegionKind;\n elementId?: string;\n parentId?: string;\n bounds: {\n x: number;\n y: number;\n w: number;\n h: number;\n };\n cellSpans?: Array<{\n row: number;\n start: number;\n end: number;\n }>;\n occludedCellSpans?: Array<{\n row: number;\n start: number;\n end: number;\n }>;\n sourceLine?: number;\n}\ntype DiagramActionKind = 'href' | 'call' | 'callback';\ntype DiagramActionSecurity = 'safe' | 'unsafe' | 'source-only' | 'unsupported';\ninterface DiagramActionRecord {\n id?: string;\n regionId?: string;\n family: DiagramKind;\n target: string;\n action: DiagramActionKind;\n raw: string;\n line?: number;\n href?: string;\n tooltip?: string;\n security: DiagramActionSecurity;\n executable: false;\n message?: string;\n}\ninterface LayoutRect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\ninterface ExtensionIdentity<Kind extends string = string> {\n readonly id: `${Kind}:${string}`;\n readonly kind: Kind;\n readonly version: string;\n readonly compatibility: ExtensionCompatibility;\n readonly provenance: ExtensionProvenance;\n}\ninterface ExtensionCompatibility {\n readonly [contract: string]: string | undefined;\n readonly core?: string;\n readonly scene?: string;\n}\ninterface ExtensionProvenance {\n readonly owner: string;\n readonly source: string;\n readonly reference?: string;\n}\ntype CheckMermaidSpec = readonly string[] | CheckMermaidObjectSpec;\ninterface CheckMermaidObjectSpec {\n include?: readonly string[];\n expected?: readonly string[];\n require?: readonly string[];\n required?: readonly string[];\n exclude?: readonly string[];\n absent?: readonly string[];\n forbid?: readonly string[];\n forbidden?: readonly string[];\n unexpected?: readonly string[];\n exact?: boolean;\n}\ninterface CheckMermaidResult {\n ok: boolean;\n missing: string[];\n unexpected: string[];\n facts: string[];\n}\ninterface CreateMermaidOptions {\n c4Variant?: C4Variant;\n direction?: Direction;\n}\ntype C4Variant = 'C4Context' | 'C4Container' | 'C4Component' | 'C4Dynamic' | 'C4Deployment';\ntype Direction = 'TD' | 'TB' | 'LR' | 'BT' | 'RL';";var wr="type ExternalFamilyId=`family:${string}`;interface SourceLocation{readonly line:number;readonly col:number;}interface SourceMap{readonly nodes:ReadonlyMap<string,SourceLocation>;readonly edges:ReadonlyMap<string,SourceLocation>;readonly groups:ReadonlyMap<string,SourceLocation>;readonly labels:ReadonlyMap<string,SourceLocation>;readonly spans?:SourceMapSpans;}interface SourceMapSpans{readonly preserved:PreservedSourceSpans;readonly nodes:ReadonlyMap<string,SourceSpan>;readonly edges:ReadonlyMap<string,SourceSpan>;readonly groups:ReadonlyMap<string,SourceSpan>;readonly labels:ReadonlyMap<string,SourceSpan>;readonly metadata?:ReadonlyMap<string,ReadonlyMap<string,{readonly key:SourceSpan;readonly value:SourceSpan;}>>;}interface PreservedSourceSpans{readonly source:SourceSpan;readonly wrapper?:SourceSpan;readonly frontmatter?:SourceSpan;readonly initDirectives?:readonly SourceSpan[];readonly accessibilityDirectives?:readonly SourceSpan[];readonly header:SourceSpan;readonly body:SourceSpan;}interface SourceSpan{readonly start:SourceSpanPoint;readonly end:SourceSpanPoint;}interface SourceSpanPoint{readonly offset:number;readonly line:number;readonly col:number;}interface SourcePreservationReceipt{readonly version:1;readonly classification:'unsupported'|'inventory-only'|'unknown';readonly source:string;readonly header:string;readonly upstreamFamilyId?:string;readonly mermaidVersion:string;readonly spans?:PreservedSourceSpans;}interface ParseError{readonly code:string;readonly message:string;readonly line?:number;readonly col?:number;readonly preservation?:SourcePreservationReceipt;readonly help?:string;}type RenderedRegionKind='node'|'edge'|'label'|'canvas'|'group'|'cluster'|'lane'|'band'|'compartment'|'plot'|'ring';interface RenderedRegion{id:string;kind:RenderedRegionKind;elementId?:string;parentId?:string;bounds:{x:number;y:number;w:number;h:number;};cellSpans?:Array<{row:number;start:number;end:number;}>;occludedCellSpans?:Array<{row:number;start:number;end:number;}>;sourceLine?:number;}type DiagramActionKind='href'|'call'|'callback';type DiagramActionSecurity='safe'|'unsafe'|'source-only'|'unsupported';interface DiagramActionRecord{id?:string;regionId?:string;family:DiagramKind;target:string;action:DiagramActionKind;raw:string;line?:number;href?:string;tooltip?:string;security:DiagramActionSecurity;executable:false;message?:string;}interface LayoutRect{x:number;y:number;w:number;h:number;}interface ExtensionIdentity<Kind extends string=string>{readonly id:`${Kind}:${string}`;readonly kind:Kind;readonly version:string;readonly compatibility:ExtensionCompatibility;readonly provenance:ExtensionProvenance;}interface ExtensionCompatibility{readonly[contract:string]:string|undefined;readonly core?:string;readonly scene?:string;}interface ExtensionProvenance{readonly owner:string;readonly source:string;readonly reference?:string;}type CheckMermaidSpec=readonly string[]|CheckMermaidObjectSpec;interface CheckMermaidObjectSpec{include?:readonly string[];exclude?:readonly string[];exact?:boolean;}interface CheckMermaidResult{ok:boolean;missing:string[];unexpected:string[];facts:string[];}interface CreateMermaidOptions{c4Variant?:C4Variant;direction?:Direction;}type C4Variant='C4Context'|'C4Container'|'C4Component'|'C4Dynamic'|'C4Deployment';type Direction='TD'|'TB'|'LR'|'BT'|'RL';";var Tr="interface DisplayRun extends Readonly<StyledSegment> {\n readonly sourceStart: number;\n readonly sourceEnd: number;\n readonly clusters?: readonly {\n text: string;\n sourceStart: number;\n sourceEnd: number;\n }[];\n}\ninterface StyledSegment {\n text: string;\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n}\ninterface PreparedDisplayText {\n readonly source: string;\n readonly display: LabelDisplay;\n readonly transform?: TextTransform;\n readonly lines: readonly (readonly DisplayRun[])[];\n readonly lineStarts: readonly number[];\n}\ntype LabelDisplay = 'formatted' | 'literal';\ntype TextTransform = 'uppercase' | 'lowercase' | 'capitalize';\ninterface LabelContent {\n readonly value: string;\n readonly prepared: PreparedDisplayText;\n readonly authored?: string;\n}\ninterface PixelTextBlock {\n readonly unit: 'px';\n readonly prepared: PreparedDisplayText;\n readonly text: string;\n readonly lines: string[];\n readonly lineBlocks: readonly PixelTextLine[];\n readonly breaks: readonly TextBreak[];\n readonly width: number;\n readonly height: number;\n readonly lineHeight: number;\n readonly fontSize: number;\n readonly fontWeight: number;\n readonly letterSpacing: number;\n readonly monospace: boolean;\n readonly safeFont: boolean;\n readonly fontFamily?: string;\n}\ninterface PixelTextLine {\n readonly runs: readonly DisplayRun[];\n readonly text: string;\n readonly width: number;\n readonly baseline: number;\n readonly originX: number;\n readonly fragments?: readonly PixelTextFragment[];\n}\ninterface PixelTextFragment {\n readonly runIndex: number;\n readonly text: string;\n readonly x: number;\n readonly width: number;\n}\ninterface TextBreak {\n readonly kind: 'authored' | 'wrap' | 'hyphen';\n readonly sourceOffset: number;\n readonly replacedText?: string;\n}";var vr="type DiagramBody = {\n kind: 'flowchart';\n graph: FlowchartGraph;\n} | StateBody | SequenceBody | TimelineBody | ClassBody | ErBody | JourneyBody | ArchitectureBody | XyChartBody | PieBody | QuadrantBody | GanttBody | MindmapBody | GitGraphBody | RadarBody | SankeyBody | C4Body | PacketBody | KanbanBody | RequirementBody | TreemapBody | IshikawaBody | BlockBody | EventModelingBody | ZenUMLBody | {\n kind: 'opaque';\n family: DiagramKind;\n source: string;\n diagnostic?: {\n code: 'GITGRAPH_DUPLICATE_COMMIT_ID';\n id: string;\n };\n};\ninterface FlowchartGraph {\n direction: Direction;\n nodes: Map<string, MermaidNode>;\n edges: MermaidEdge[];\n subgraphs: MermaidSubgraph[];\n classDefs: Map<string, Record<string, string>>;\n classAssignments: Map<string, string>;\n nodeStyles: Map<string, Record<string, string>>;\n linkStyles: Map<number | 'default', Record<string, string>>;\n stateNotes?: StateNoteSpec[];\n floatingStateNotes?: Array<FloatingStateNote & {\n nodeId: string;\n }>;\n}\ninterface MermaidNode {\n id: string;\n label: string;\n labelContent?: LabelContent;\n labelBlock?: PixelTextBlock;\n shape: NodeShape;\n floatingNoteId?: string;\n semanticShape?: string;\n authoredShape?: string;\n markdownLabel?: true;\n icon?: string;\n image?: string;\n iconForm?: 'square' | 'circle' | 'rounded';\n href?: string;\n}\ntype NodeShape = 'rectangle' | 'service' | 'rounded' | 'diamond' | 'stadium' | 'circle' | 'ellipse' | 'subroutine' | 'doublecircle' | 'hexagon' | 'cylinder' | 'asymmetric' | 'trapezoid' | 'trapezoid-alt' | 'lean-r' | 'lean-l' | 'state-start' | 'state-end' | 'state-fork' | 'state-join' | 'state-choice' | 'state-history' | 'state-note';\ninterface MermaidEdge {\n source: string;\n target: string;\n id?: string;\n label?: string;\n labelContent?: LabelContent;\n style: EdgeStyle;\n hasArrowStart: boolean;\n hasArrowEnd: boolean;\n startMarker?: EdgeMarker;\n endMarker?: EdgeMarker;\n curve?: string;\n animate?: boolean;\n animation?: 'fast' | 'slow';\n length?: number;\n}\ntype EdgeStyle = 'solid' | 'dotted' | 'thick' | 'invisible';\ntype EdgeMarker = 'arrow' | 'circle' | 'cross';\ninterface MermaidSubgraph {\n id: string;\n label: string;\n labelContent?: LabelContent;\n stateComposite?: true;\n nodeIds: string[];\n children: MermaidSubgraph[];\n direction?: Direction;\n concurrencyRegion?: true;\n titleOffset?: number;\n headerMinHeight?: number;\n}\ninterface StateNoteSpec {\n id: string;\n target: string;\n side: 'left' | 'right';\n text: string;\n textContent?: LabelContent;\n}\ninterface FloatingStateNote {\n id: string;\n text: string;\n textContent?: LabelContent;\n scope?: StateScope;\n}\ninterface StateScope {\n parent: string;\n region?: number;\n}\ninterface StateBody {\n unresolvedClasses?: Array<{\n id: string;\n className: string;\n }>;\n unresolvedStyles?: Array<{\n id: string;\n style: Record<string, string>;\n styleDeclarations?: StyleDeclaration[];\n }>;\n kind: 'state';\n states: StateNode[];\n transitions: StateTransition[];\n notes?: StateNote[];\n floatingNotes?: StateFloatingNote[];\n direction?: Direction;\n classDefs?: Record<string, Record<string, string>>;\n classDefDeclarations?: Record<string, StyleDeclaration[]>;\n defaultTransitionStyle?: Record<string, string>;\n}\ntype StyleDeclaration = [\n property: string,\n value: string\n];\ninterface StateNode {\n id: string;\n label?: string;\n labelContent?: LabelContent;\n declaredBare?: true;\n declarationBeforeTransition?: number;\n stereotype?: 'fork' | 'join' | 'choice' | 'history' | 'deep-history';\n states?: StateNode[];\n transitions?: StateTransition[];\n regions?: StateRegion[];\n className?: string;\n style?: Record<string, string>;\n styleDeclarations?: StyleDeclaration[];\n direction?: Direction;\n}\ninterface StateTransition {\n from: string;\n to: string;\n fromClass?: string;\n toClass?: string;\n label?: string;\n labelContent?: LabelContent;\n style?: Record<string, string>;\n}\ninterface StateRegion {\n states: StateNode[];\n transitions: StateTransition[];\n direction?: Direction;\n}\ninterface StateNote {\n target: string;\n side: 'left' | 'right';\n text: string;\n textContent?: LabelContent;\n}\ntype StateFloatingNote = FloatingStateNote;\ninterface SequenceBody {\n kind: 'sequence';\n participants: SequenceParticipant[];\n messages: SequenceMessage[];\n statements: SequenceStatement[];\n}\ninterface SequenceParticipant {\n wrap?: boolean;\n id: string;\n label: string;\n labelContent?: LabelContent;\n kind: SequenceParticipantKind;\n declaration?: 'participant' | 'actor';\n links?: Record<string, string>;\n}\ntype SequenceParticipantKind = 'participant' | 'actor' | 'boundary' | 'control' | 'entity' | 'database' | 'collections' | 'queue';\ninterface SequenceMessage {\n wrap?: boolean;\n from: string;\n to: string;\n text: string;\n textContent?: LabelContent;\n style: SequenceMessageStyle;\n arrow?: SequenceMessageArrow;\n centralStart?: boolean;\n centralEnd?: boolean;\n activate?: boolean;\n deactivate?: boolean;\n}\ntype SequenceMessageStyle = 'sync' | 'reply' | 'async' | 'async-dashed' | 'lost' | 'lost-dashed';\ntype SequenceMessageArrow = '<<->>' | '<<-->>' | '->>' | '-->>' | '->' | '-->' | '-x' | '--x' | '-)' | '--)' | '-|\\\\' | '--|\\\\' | '-|/' | '--|/' | '-\\\\\\\\' | '--\\\\\\\\' | '-//' | '--//' | '/|-' | '/|--' | '\\\\|-' | '\\\\|--' | '//-' | '//--' | '\\\\\\\\-' | '\\\\\\\\--' | '-|' | '--|' | '-/' | '--/' | '-\\\\' | '--\\\\' | '|-' | '|--' | '/-' | '/--' | '\\\\-' | '\\\\--';\ntype SequenceStatement = {\n kind: 'participant';\n ref: number;\n} | {\n kind: 'message';\n ref: number;\n} | {\n kind: 'actor-links';\n actorId: string;\n links: Record<string, string>;\n} | {\n kind: 'fragment';\n fragment: SequenceFragment;\n} | {\n kind: 'opaque-block';\n lines: string[];\n};\ninterface SequenceFragment {\n wrap?: boolean;\n fragmentKind: SequenceFragmentKind;\n label?: string;\n labelContent?: LabelContent;\n branches: SequenceFragmentBranch[];\n rawLines?: string[];\n}\ntype SequenceFragmentKind = 'alt' | 'opt' | 'loop' | 'par' | 'par_over';\ninterface SequenceFragmentBranch {\n wrap?: boolean;\n label?: string;\n labelContent?: LabelContent;\n messages: SequenceMessage[];\n}\ninterface TimelineBody {\n kind: 'timeline';\n direction?: 'LR' | 'TD';\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n sections: TimelineSection[];\n}\ninterface TimelineSection {\n id: string;\n label?: string;\n periods: TimelinePeriod[];\n}\ninterface TimelinePeriod {\n id: string;\n label: string;\n events: TimelineEvent[];\n}\ninterface TimelineEvent {\n id: string;\n text: string;\n}\ninterface ClassBody {\n kind: 'class';\n title?: string;\n classes: ClassNode[];\n relations: ClassRelation[];\n notes: ClassNote[];\n namespaces?: ClassNamespaceDecl[];\n classDefs?: Record<string, Record<string, string>>;\n classDefDeclarations?: Record<string, StyleDeclaration[]>;\n}\ninterface ClassNode {\n isInterface?: boolean;\n id: string;\n generic?: string;\n label?: string;\n labelContent?: LabelContent;\n members: string[];\n namespace?: string;\n className?: string;\n style?: Record<string, string>;\n styleDeclarations?: StyleDeclaration[];\n href?: string;\n tooltip?: string;\n}\ninterface ClassRelation {\n from: string;\n to: string;\n kind: ClassRelationKind;\n lineStyle?: 'solid' | 'dashed';\n label?: string;\n labelContent?: LabelContent;\n fromCardinality?: string;\n fromCardinalityContent?: LabelContent;\n toCardinality?: string;\n toCardinalityContent?: LabelContent;\n markerAt?: 'from' | 'to' | 'both' | 'none';\n fromKind?: ClassRelationKind;\n toKind?: ClassRelationKind;\n}\ntype ClassRelationKind = 'inheritance' | 'composition' | 'aggregation' | 'association' | 'dependency' | 'realization' | 'link-solid' | 'link-dashed' | 'lollipop';\ninterface ClassNote {\n text: string;\n textContent?: LabelContent;\n for?: string;\n}\ninterface ClassNamespaceDecl {\n name: string;\n label?: string;\n labelContent?: LabelContent;\n}\ninterface ErBody {\n kind: 'er';\n entities: ErEntity[];\n relations: ErRelation[];\n groups?: ErGroup[];\n direction?: Direction;\n classDefs?: Record<string, Record<string, string>>;\n statements?: ErStatement[];\n}\ninterface ErEntity {\n id: string;\n label?: string;\n labelContent?: LabelContent;\n attributes: ErAttribute[];\n className?: string;\n style?: Record<string, string>;\n groupId?: string;\n}\ninterface ErAttribute {\n text: string;\n}\ninterface ErRelation {\n from: string;\n to: string;\n leftCard: ErCardinality;\n rightCard: Exclude<ErCardinality, 'parent'>;\n dashed: boolean;\n label?: string;\n labelContent?: LabelContent;\n}\ntype ErCardinality = 'parent' | 'one-only' | 'zero-or-one' | 'zero-or-many' | 'one-or-many';\ninterface ErGroup {\n id: string;\n label: string;\n labelContent?: LabelContent;\n parentId?: string;\n direction?: Direction;\n}\ntype ErStatement = {\n kind: 'entity';\n id: string;\n} | {\n kind: 'relation';\n ref: number;\n} | {\n kind: 'direction';\n groupId?: string;\n} | {\n kind: 'group-open';\n id: string;\n} | {\n kind: 'group-close';\n id: string;\n} | {\n kind: 'opaque';\n lines: string[];\n};\ninterface JourneyBody {\n kind: 'journey';\n title?: string;\n titleContent?: LabelContent;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n sections: JourneySection[];\n}\ninterface JourneySection {\n id: string;\n label?: string;\n labelContent?: LabelContent;\n tasks: JourneyTask[];\n}\ninterface JourneyTask {\n id: string;\n text: string;\n textContent?: LabelContent;\n score: number;\n actors: string[];\n actorContents?: Array<LabelContent | undefined>;\n}\ninterface ArchitectureBody {\n kind: 'architecture';\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n groups: ArchitectureGroup[];\n services: ArchitectureService[];\n junctions: ArchitectureJunction[];\n edges: ArchitectureEdge[];\n alignments?: ArchitectureAlignment[];\n}\ninterface ArchitectureGroup {\n id: string;\n label: string;\n icon?: string;\n parentId?: string;\n}\ninterface ArchitectureService {\n id: string;\n label: string;\n icon?: string;\n iconText?: string;\n parentId?: string;\n}\ninterface ArchitectureJunction {\n id: string;\n parentId?: string;\n}\ninterface ArchitectureEdge {\n source: ArchitectureEndpoint;\n target: ArchitectureEndpoint;\n label?: string;\n hasArrowStart: boolean;\n hasArrowEnd: boolean;\n}\ninterface ArchitectureEndpoint {\n id: string;\n side: ArchitectureSide;\n boundary?: ArchitectureEndpointBoundary;\n}\ntype ArchitectureSide = 'L' | 'R' | 'T' | 'B';\ntype ArchitectureEndpointBoundary = 'item' | 'group';\ninterface ArchitectureAlignment {\n axis: 'row' | 'column';\n members: string[];\n}\ninterface XyChartBody {\n kind: 'xychart';\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n title?: string;\n horizontal?: boolean;\n xAxis?: XyChartAxis;\n yAxis?: XyChartAxis;\n series: XyChartSeries[];\n}\ninterface XyChartAxis {\n name?: string;\n categories?: string[];\n range?: {\n min: number;\n max: number;\n };\n}\ninterface XyChartSeries {\n id: string;\n kind: 'bar' | 'line';\n name?: string;\n values: number[];\n pointLabels?: Array<string | undefined>;\n}\ninterface PieBody {\n kind: 'pie';\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n title?: string;\n showData: boolean;\n slices: PieSlice[];\n}\ninterface PieSlice {\n id: string;\n label: string;\n value: number;\n}\ninterface QuadrantBody {\n kind: 'quadrant';\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n title?: string;\n xAxis?: QuadrantAxis;\n yAxis?: QuadrantAxis;\n quadrants: [\n string?,\n string?,\n string?,\n string?\n ];\n points: QuadrantPoint[];\n classDefs?: Record<string, QuadrantPointStyle>;\n}\ninterface QuadrantAxis {\n near: string;\n far?: string;\n}\ninterface QuadrantPoint {\n label: string;\n x: number;\n y: number;\n className?: string;\n style?: QuadrantPointStyle;\n}\ninterface QuadrantPointStyle {\n radius?: number;\n color?: string;\n strokeColor?: string;\n strokeWidth?: string;\n extra?: string[];\n}\ninterface GanttBody {\n kind: 'gantt';\n title?: string;\n axisFormat?: string;\n sections: GanttBodySection[];\n statements?: GanttStatement[];\n}\ninterface GanttBodySection {\n id: string;\n label?: string;\n tasks: GanttBodyTask[];\n}\ninterface GanttBodyTask {\n id: string;\n taskId?: string;\n label: string;\n tags: GanttBodyTaskTag[];\n start?: string;\n end: string;\n}\ntype GanttBodyTaskTag = 'active' | 'done' | 'crit' | 'milestone' | 'vert';\ntype GanttStatement = {\n kind: 'title';\n} | {\n kind: 'section';\n ref: number;\n} | {\n kind: 'task';\n section: number;\n ref: number;\n} | {\n kind: 'opaque-block';\n lines: string[];\n};\ninterface MindmapBody {\n kind: 'mindmap';\n root: MindmapNode;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface MindmapNode {\n id: string;\n label: string;\n shape: MindmapShape;\n markdown?: true;\n icon?: string;\n className?: string;\n children: MindmapNode[];\n}\ntype MindmapShape = 'default' | 'rect' | 'rounded' | 'circle' | 'cloud' | 'bang' | 'hexagon';\ninterface GitGraphBody extends GitGraphDiagram {\n kind: 'gitgraph';\n}\ninterface GitGraphDiagram {\n direction: GitGraphDirection;\n mainBranchName: string;\n title?: string;\n commits: GitGraphCommit[];\n branches: GitGraphBranch[];\n statements: GitGraphStatement[];\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ntype GitGraphDirection = 'LR' | 'TB' | 'BT';\ninterface GitGraphCommit {\n id: string;\n sourceId?: string;\n message?: string;\n type: GitGraphCommitType;\n customType?: Exclude<GitGraphCommitType, 'MERGE' | 'CHERRY_PICK'>;\n tags: string[];\n branch: string;\n parents: string[];\n sequence: number;\n source: 'commit' | 'merge' | 'cherry-pick';\n mergeBranch?: string;\n cherrySource?: string;\n cherryParent?: string;\n syntheticCherryTag?: string;\n customId: boolean;\n}\ntype GitGraphCommitType = 'NORMAL' | 'REVERSE' | 'HIGHLIGHT' | 'MERGE' | 'CHERRY_PICK';\ninterface GitGraphBranch {\n name: string;\n order: number;\n sequence: number;\n head?: string;\n}\ntype GitGraphStatement = {\n kind: 'commit';\n ref: string;\n} | {\n kind: 'branch';\n name: string;\n order?: number;\n} | {\n kind: 'checkout';\n branch: string;\n keyword: 'checkout' | 'switch';\n} | {\n kind: 'merge';\n ref: string;\n branch: string;\n} | {\n kind: 'cherry-pick';\n ref: string;\n source: string;\n parent?: string;\n};\ninterface RadarBody {\n kind: 'radar';\n title?: string;\n axes: RadarBodyAxis[];\n curves: RadarBodyCurve[];\n min: number;\n max?: number;\n ticks: number;\n graticule: 'circle' | 'polygon';\n showLegend: boolean;\n}\ninterface RadarBodyAxis {\n id: string;\n label: string;\n}\ninterface RadarBodyCurve {\n id: string;\n label: string;\n values: number[];\n}\ninterface SankeyBody {\n kind: 'sankey';\n links: SankeyBodyLink[];\n}\ninterface SankeyBodyLink {\n source: string;\n target: string;\n value: number;\n}\ninterface C4Body {\n kind: 'c4';\n variant: C4Variant;\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n elements: C4Element[];\n boundaries: C4Boundary[];\n relationships: C4Relationship[];\n directives: C4Directive[];\n statements: C4Statement[];\n diagnostics: C4SyntaxDiagnostic[];\n layout: C4LayoutHints;\n legend?: {\n visible: boolean;\n entries: {\n id: string;\n label: string;\n kind: 'element' | 'relationship';\n style: C4Style;\n }[];\n };\n}\ninterface C4Element extends C4Declaration {\n kind: C4ElementKind;\n external: boolean;\n shape: C4Shape;\n technology?: string;\n description?: string;\n}\ninterface C4Declaration {\n id: string;\n macro: string;\n label: string;\n parentId?: string;\n tags: string[];\n link?: string;\n effectiveLink?: string;\n sprite?: string;\n style: C4Style;\n args: C4Argument[];\n statementId: string;\n}\ninterface C4Style {\n bgColor?: string;\n fontColor?: string;\n borderColor?: string;\n textColor?: string;\n lineColor?: string;\n lineStyle?: string;\n shape?: string;\n shadowing?: string;\n offsetX?: string;\n offsetY?: string;\n [property: string]: string | undefined;\n}\ninterface C4Argument extends C4ArgumentInput {\n raw: string;\n}\ninterface C4ArgumentInput {\n name?: string;\n value: string;\n}\ntype C4ElementKind = 'person' | 'system' | 'container' | 'component';\ntype C4Shape = 'person' | 'rectangle' | 'database' | 'queue';\ninterface C4Boundary extends C4Declaration {\n kind: C4BoundaryKind;\n type?: string;\n description?: string;\n alignment?: 'left' | 'right';\n}\ntype C4BoundaryKind = 'boundary' | 'enterprise' | 'system' | 'container' | 'deployment';\ninterface C4Relationship {\n id: string;\n macro: string;\n from: string;\n to: string;\n source: string;\n target: string;\n label: string;\n technology?: string;\n description?: string;\n tags: string[];\n link?: string;\n effectiveLink?: string;\n sprite?: string;\n style: C4Style;\n args: C4Argument[];\n statementId: string;\n index?: string;\n order: number;\n bidirectional: boolean;\n reversed: boolean;\n direction?: C4Direction;\n}\ntype C4Direction = 'LR' | 'RL' | 'TB' | 'BT';\ninterface C4Directive {\n id: string;\n name: string;\n args: C4Argument[];\n category: 'element-style' | 'relationship-style' | 'element-tag' | 'relationship-tag' | 'layout' | 'legend' | 'link' | 'unknown';\n statementId: string;\n}\ninterface C4Statement {\n id: string;\n kind: 'header' | 'title' | 'accessibility' | 'element' | 'boundary-open' | 'boundary-close' | 'relationship' | 'directive' | 'trivia' | 'unknown';\n raw: string;\n span: C4SourceSpan;\n entityId?: string;\n signature?: string;\n}\ninterface C4SourceSpan {\n start: number;\n end: number;\n line: number;\n column: number;\n}\ninterface C4SyntaxDiagnostic extends C4Diagnostic {\n syntax: string;\n}\ninterface C4Diagnostic {\n code: string;\n message: string;\n severity: 'warning' | 'error';\n statementId?: string;\n}\ninterface C4LayoutHints {\n direction?: C4Direction;\n shapesPerRow?: number;\n boundariesPerRow?: number;\n hints: C4LayoutHint[];\n}\ninterface C4LayoutHint {\n from: string;\n to: string;\n direction: C4Direction;\n statementId: string;\n}\ninterface PacketBody {\n kind: 'packet';\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n fields: PacketField[];\n}\ninterface PacketField {\n id: string;\n start: number;\n end: number;\n label: string;\n}\ninterface KanbanBody {\n kind: 'kanban';\n columns: KanbanColumn[];\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface KanbanColumn extends KanbanItem {\n tasks: KanbanItem[];\n}\ninterface KanbanItem {\n id: string;\n sourceId: string;\n implicitId?: boolean;\n label: string;\n metadata: Record<string, unknown>;\n icon?: string;\n className?: string;\n}\ninterface RequirementBody {\n kind: 'requirement';\n direction: 'TB' | 'BT' | 'LR' | 'RL';\n requirements: Requirement[];\n elements: RequirementElement[];\n relations: RequirementRelation[];\n classDefs: RequirementClass[];\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface Requirement {\n name: string;\n type: string;\n requirementId: string;\n text: string;\n risk: string;\n verifyMethod: string;\n cssStyles: string[];\n classes: string[];\n directStyles?: string[];\n}\ninterface RequirementElement {\n name: string;\n type: string;\n docRef: string;\n cssStyles: string[];\n classes: string[];\n directStyles?: string[];\n}\ninterface RequirementRelation extends Relation {\n id: string;\n}\ninterface Relation {\n type: string;\n src: string;\n dst: string;\n}\ninterface RequirementClass {\n id: string;\n styles: string[];\n textStyles: string[];\n}\ninterface TreemapBody {\n kind: 'treemap';\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n nodes: TreemapNode[];\n classDefs: Record<string, Record<string, string>>;\n}\ninterface TreemapNode {\n id: string;\n label: string;\n parentId?: string;\n value?: number;\n className?: string;\n}\ninterface IshikawaBody {\n kind: 'ishikawa';\n nodes: IshikawaNode[];\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface IshikawaNode {\n id: string;\n label: string;\n parentId?: string;\n}\ninterface BlockBody {\n kind: 'block';\n root: Block;\n edges: Block[];\n classDefs: BlockClassDef[];\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface Block {\n id: string;\n type?: string;\n label?: string;\n children?: Block[];\n columns?: number;\n widthInColumns?: number;\n width?: number;\n directions?: string[];\n classes?: string[];\n styles?: string[];\n colorIndex?: number;\n start?: string;\n end?: string;\n arrowTypeStart?: string;\n arrowTypeEnd?: string;\n thickness?: string;\n pattern?: string;\n css?: string;\n styleClass?: string;\n stylesStr?: string;\n}\ninterface BlockClassDef {\n id: string;\n styles: string[];\n textStyles: string[];\n}\ninterface EventModelingBody {\n kind: 'eventmodeling';\n frames: EventFrame[];\n entities: string[];\n data: Record<string, EventData>;\n notes: Array<{\n frame: string;\n data: EventData;\n }>;\n specifications: EventSpecification[];\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n}\ninterface EventFrame {\n id: string;\n reset: boolean;\n type: EventFrameType;\n entity: string;\n sources: string[];\n dataReference?: string;\n data?: EventData;\n}\ntype EventFrameType = 'ui' | 'processor' | 'command' | 'readmodel' | 'event';\ninterface EventData {\n type?: string;\n text: string;\n}\ninterface EventSpecification {\n frame: string;\n given: Array<{\n type: EventFrameType;\n entity: string;\n }>;\n when: Array<{\n type: EventFrameType;\n entity: string;\n }>;\n then: Array<{\n type: EventFrameType;\n entity: string;\n }>;\n}\ninterface ZenUMLBody {\n kind: 'zenuml';\n title?: string;\n accessibilityTitle?: string;\n accessibilityDescription?: string;\n starter?: string;\n unsupportedSource?: string;\n participants: ZenUMLParticipant[];\n statements: ZenUMLStatement[];\n}\ninterface ZenUMLParticipant {\n id: string;\n label: string;\n annotations: string[];\n stereotype?: string;\n comments?: string[];\n}\ntype ZenUMLStatement = {\n kind: 'call';\n id: string;\n from?: string;\n to?: string;\n label: string;\n assignment?: ZenUMLAssignment;\n children: ZenUMLStatement[];\n} | {\n kind: 'message';\n id: string;\n from: string;\n to: string;\n label: string;\n reply: boolean;\n} | {\n kind: 'create';\n id: string;\n constructor: string;\n arguments?: string;\n assignment?: ZenUMLAssignment;\n children: ZenUMLStatement[];\n} | {\n kind: 'return';\n id: string;\n label: string;\n} | {\n kind: 'fragment';\n id: string;\n type: ZenUMLFragmentType;\n condition?: string;\n branches: ZenUMLBranch[];\n} | {\n kind: 'comment';\n id: string;\n text: string;\n} | {\n kind: 'opaque';\n id: string;\n source: string;\n};\ninterface ZenUMLAssignment {\n name: string;\n type?: string;\n}\ntype ZenUMLFragmentType = 'if' | 'opt' | 'while' | 'for' | 'forEach' | 'foreach' | 'loop' | 'par' | 'try' | 'critical';\ninterface ZenUMLBranch {\n kind: 'body' | 'else-if' | 'else' | 'catch' | 'finally';\n condition?: string;\n statements: ZenUMLStatement[];\n}\ntype AnyMutationOp = FlowchartMutationOp | StateMutationOp | SequenceMutationOp | TimelineMutationOp | ClassMutationOp | ErMutationOp | JourneyMutationOp | ArchitectureMutationOp | XyChartMutationOp | PieMutationOp | QuadrantMutationOp | GanttMutationOp | MindmapMutationOp | GitGraphMutationOp | RadarMutationOp | SankeyMutationOp | C4MutationOp | PacketMutationOp | KanbanMutationOp | RequirementMutationOp | TreemapMutationOp | IshikawaMutationOp | BlockMutationOp | EventModelingMutationOp | ZenUMLMutationOp;\ntype FlowchartMutationOp = {\n kind: 'add_node';\n id: string;\n label: string;\n shape?: NodeShape | (string & {});\n parent?: string;\n} | {\n kind: 'remove_node';\n id: string;\n} | {\n kind: 'rename_node';\n from: string;\n to: string;\n} | {\n kind: 'set_label';\n target: string | string;\n label: string;\n} | {\n kind: 'add_edge';\n from: string;\n to: string;\n label?: string;\n style?: EdgeStyle;\n} | {\n kind: 'remove_edge';\n id: string;\n} | {\n kind: 'set_shape';\n id: string;\n shape: NodeShape | (string & {});\n} | {\n kind: 'set_direction';\n direction: Direction;\n subgraph?: string;\n} | {\n kind: 'add_subgraph';\n id: string;\n label?: string;\n parent?: string;\n members?: string[];\n} | {\n kind: 'remove_subgraph';\n id: string;\n removeMembers?: boolean;\n} | {\n kind: 'move_node';\n id: string;\n subgraph: string | null;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_node_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_node_style';\n id: string;\n style: string | null;\n};\ntype StateMutationOp = {\n kind: 'add_state';\n id: string;\n label?: string | null;\n parent?: string | null;\n region?: number;\n} | {\n kind: 'remove_state';\n id: string;\n recursive?: boolean;\n} | {\n kind: 'rename_state';\n from: string;\n to: string;\n} | {\n kind: 'set_state_label';\n id: string;\n label: string | null;\n} | {\n kind: 'add_transition';\n from: string;\n to: string;\n label?: string | null;\n parent?: string | null;\n region?: number;\n} | {\n kind: 'remove_transition';\n index?: number;\n from?: string;\n to?: string;\n parent?: string | null;\n region?: number;\n} | {\n kind: 'set_transition_label';\n index?: number;\n from?: string;\n to?: string;\n label: string | null;\n parent?: string | null;\n region?: number;\n} | {\n kind: 'make_composite';\n id: string;\n members: string[];\n label?: string | null;\n} | {\n kind: 'set_direction';\n direction: Direction;\n state?: string | null;\n} | {\n kind: 'move_state';\n id: string;\n parent: string | null;\n region?: number;\n} | {\n kind: 'dissolve_composite';\n id: string;\n} | {\n kind: 'add_note';\n target: string;\n side?: 'left' | 'right';\n text: string;\n} | {\n kind: 'remove_note';\n index: number;\n} | {\n kind: 'set_note_text';\n index: number;\n text: string;\n} | {\n kind: 'add_floating_note';\n id: string;\n text: string;\n parent?: string | null;\n region?: number;\n} | {\n kind: 'remove_floating_note';\n id: string;\n} | {\n kind: 'set_floating_note_text';\n id: string;\n text: string;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_state_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_state_style';\n id: string;\n style: string | null;\n} | {\n kind: 'set_transition_style';\n index?: number;\n default?: boolean;\n style: string | null;\n parent?: string | null;\n region?: number;\n};\ntype SequenceMutationOp = {\n kind: 'add_participant';\n id: string;\n label?: string;\n participantKind?: 'participant' | 'actor';\n} | {\n kind: 'remove_participant';\n id: string;\n} | {\n kind: 'add_message';\n from: string;\n to: string;\n text: string;\n wrap?: boolean;\n style?: SequenceMessageStyle;\n index?: number;\n} | {\n kind: 'remove_message';\n index: number;\n} | {\n kind: 'set_message_text';\n index: number;\n text: string;\n} | {\n kind: 'set_message_wrap';\n index: number;\n wrap: boolean | null;\n} | {\n kind: 'move_message';\n from: number;\n to: number;\n} | {\n kind: 'set_participant_label';\n id: string;\n label: string;\n} | {\n kind: 'add_fragment';\n fragmentKind: SequenceFragmentKind;\n label?: string;\n index?: number;\n} | {\n kind: 'remove_fragment';\n index: number;\n} | {\n kind: 'set_fragment_label';\n index: number;\n label: string | null;\n} | {\n kind: 'add_fragment_branch';\n fragmentIndex: number;\n label?: string;\n} | {\n kind: 'set_fragment_branch_label';\n fragmentIndex: number;\n branchIndex: number;\n label: string | null;\n} | {\n kind: 'add_fragment_message';\n fragmentIndex: number;\n branchIndex?: number;\n from: string;\n to: string;\n text: string;\n wrap?: boolean;\n style?: SequenceMessageStyle;\n index?: number;\n} | {\n kind: 'remove_fragment_message';\n fragmentIndex: number;\n branchIndex?: number;\n index: number;\n} | {\n kind: 'set_fragment_message_text';\n fragmentIndex: number;\n branchIndex?: number;\n index: number;\n text: string;\n} | {\n kind: 'set_fragment_message_wrap';\n fragmentIndex: number;\n branchIndex?: number;\n index: number;\n wrap: boolean | null;\n};\ntype TimelineMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_section';\n label: string;\n index?: number;\n} | {\n kind: 'remove_section';\n index: number;\n} | {\n kind: 'set_section_label';\n index: number;\n label: string;\n} | {\n kind: 'add_period';\n sectionIndex: number;\n label: string;\n events?: string[];\n index?: number;\n} | {\n kind: 'remove_period';\n sectionIndex: number;\n periodIndex: number;\n} | {\n kind: 'set_period_label';\n sectionIndex: number;\n periodIndex: number;\n label: string;\n} | {\n kind: 'add_event';\n sectionIndex: number;\n periodIndex: number;\n text: string;\n index?: number;\n} | {\n kind: 'remove_event';\n sectionIndex: number;\n periodIndex: number;\n eventIndex: number;\n} | {\n kind: 'set_event_text';\n sectionIndex: number;\n periodIndex: number;\n eventIndex: number;\n text: string;\n} | {\n kind: 'move_period';\n fromSection: number;\n fromIndex: number;\n toSection: number;\n toIndex: number;\n} | {\n kind: 'move_event';\n fromSection: number;\n fromPeriod: number;\n fromIndex: number;\n toSection: number;\n toPeriod: number;\n toIndex: number;\n} | {\n kind: 'move_section';\n from: number;\n to: number;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype ClassMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_class';\n id: string;\n label?: string;\n generic?: string;\n members?: string[];\n namespace?: string;\n} | {\n kind: 'remove_class';\n id: string;\n} | {\n kind: 'rename_class';\n from: string;\n to: string;\n} | {\n kind: 'set_class_generic';\n class: string;\n generic: string | null;\n} | {\n kind: 'add_member';\n class: string;\n text: string;\n} | {\n kind: 'remove_member';\n class: string;\n index: number;\n} | {\n kind: 'add_interface';\n class: string;\n label: string;\n side?: 'from' | 'to';\n relationLabel?: string;\n lineStyle?: 'solid' | 'dashed';\n} | {\n kind: 'add_relation';\n from: string;\n to: string;\n relKind: ClassRelationKind;\n label?: string;\n markerAt?: ClassRelation['markerAt'];\n fromKind?: ClassRelationKind;\n toKind?: ClassRelationKind;\n lineStyle?: ClassRelation['lineStyle'];\n} | {\n kind: 'remove_relation';\n index: number;\n} | {\n kind: 'add_note';\n text: string;\n for?: string;\n} | {\n kind: 'remove_note';\n index: number;\n} | {\n kind: 'set_class_namespace';\n class: string;\n namespace: string | null;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_css_class';\n class: string;\n className: string | null;\n} | {\n kind: 'set_class_style';\n class: string;\n style: string | null;\n};\ntype ErMutationOp = {\n kind: 'add_entity';\n id: string;\n label?: string;\n attributes?: string[];\n} | {\n kind: 'remove_entity';\n id: string;\n} | {\n kind: 'rename_entity';\n from: string;\n to: string;\n} | {\n kind: 'set_entity_label';\n entity: string;\n label: string | null;\n} | {\n kind: 'add_attribute';\n entity: string;\n text: string;\n} | {\n kind: 'remove_attribute';\n entity: string;\n index: number;\n} | {\n kind: 'add_relation';\n from: string;\n to: string;\n leftCard: ErCardinality;\n rightCard: Exclude<ErCardinality, 'parent'>;\n dashed?: boolean;\n label?: string;\n} | {\n kind: 'remove_relation';\n index: number;\n} | {\n kind: 'set_direction';\n direction: Direction;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_entity_class';\n entity: string;\n className: string | null;\n} | {\n kind: 'set_entity_style';\n entity: string;\n style: string | null;\n};\ntype JourneyMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_section';\n label: string;\n index?: number;\n} | {\n kind: 'remove_section';\n index: number;\n} | {\n kind: 'set_section_label';\n index: number;\n label: string;\n} | {\n kind: 'add_task';\n sectionIndex: number;\n text: string;\n score: number;\n actors?: string[];\n index?: number;\n} | {\n kind: 'remove_task';\n sectionIndex: number;\n taskIndex: number;\n} | {\n kind: 'set_task_text';\n sectionIndex: number;\n taskIndex: number;\n text: string;\n} | {\n kind: 'set_task_score';\n sectionIndex: number;\n taskIndex: number;\n score: number;\n} | {\n kind: 'set_task_actors';\n sectionIndex: number;\n taskIndex: number;\n actors: string[];\n} | {\n kind: 'rename_actor';\n from: string;\n to: string;\n} | {\n kind: 'move_task';\n fromSection: number;\n fromIndex: number;\n toSection: number;\n toIndex: number;\n} | {\n kind: 'move_section';\n from: number;\n to: number;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype ArchitectureMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n} | {\n kind: 'add_service';\n id: string;\n label?: string;\n icon?: string | null;\n iconText?: string | null;\n group?: string | null;\n} | {\n kind: 'remove_service';\n id: string;\n} | {\n kind: 'rename_service';\n from: string;\n to: string;\n} | {\n kind: 'set_service_label';\n id: string;\n label: string;\n} | {\n kind: 'set_service_icon';\n id: string;\n icon: string | null;\n} | {\n kind: 'set_service_icon_text';\n id: string;\n text: string | null;\n} | {\n kind: 'move_service';\n id: string;\n group: string | null;\n} | {\n kind: 'add_junction';\n id: string;\n group?: string | null;\n} | {\n kind: 'remove_junction';\n id: string;\n} | {\n kind: 'rename_junction';\n from: string;\n to: string;\n} | {\n kind: 'move_junction';\n id: string;\n group: string | null;\n} | {\n kind: 'add_group';\n id: string;\n label?: string;\n icon?: string | null;\n parent?: string | null;\n} | {\n kind: 'set_group_label';\n id: string;\n label: string;\n} | {\n kind: 'remove_group';\n id: string;\n} | {\n kind: 'add_edge';\n from: string;\n to: string;\n fromSide: ArchitectureSide;\n toSide: ArchitectureSide;\n fromBoundary?: ArchitectureEndpointBoundary;\n toBoundary?: ArchitectureEndpointBoundary;\n label?: string | null;\n hasArrowStart?: boolean;\n hasArrowEnd?: boolean;\n} | {\n kind: 'update_edge';\n index: number;\n from?: string;\n to?: string;\n fromSide?: ArchitectureSide;\n toSide?: ArchitectureSide;\n fromBoundary?: ArchitectureEndpointBoundary;\n toBoundary?: ArchitectureEndpointBoundary;\n label?: string | null;\n hasArrowStart?: boolean;\n hasArrowEnd?: boolean;\n} | {\n kind: 'remove_edge';\n index?: number;\n id?: string;\n};\ntype XyChartMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'set_x_axis';\n axis: XyChartAxisSpec | null;\n} | {\n kind: 'set_y_axis';\n axis: XyChartAxisSpec | null;\n} | {\n kind: 'add_series';\n kind2: 'bar' | 'line';\n name?: string | null;\n values: number[];\n} | {\n kind: 'remove_series';\n index: number;\n} | {\n kind: 'set_series_values';\n index: number;\n values: number[];\n} | {\n kind: 'set_series_name';\n index: number;\n name: string | null;\n} | {\n kind: 'reorder_series';\n from: number;\n to: number;\n} | {\n kind: 'set_orientation';\n horizontal: boolean;\n} | {\n kind: 'set_data_point';\n seriesIndex: number;\n index: number;\n value: number;\n};\ntype XyChartAxisSpec = {\n name?: string | null;\n categories?: string[];\n range?: {\n min: number;\n max: number;\n };\n};\ntype PieMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'set_show_data';\n showData: boolean;\n} | {\n kind: 'add_slice';\n label: string;\n value: number;\n} | {\n kind: 'remove_slice';\n label: string;\n} | {\n kind: 'rename_slice';\n from: string;\n to: string;\n} | {\n kind: 'set_slice_value';\n label: string;\n value: number;\n} | {\n kind: 'reorder_slice';\n from: number;\n to: number;\n};\ntype QuadrantMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'set_axis_labels';\n axis: 'x' | 'y';\n near: string | null;\n far?: string | null;\n} | {\n kind: 'set_quadrant_label';\n quadrant: number;\n label: string | null;\n} | {\n kind: 'add_point';\n label: string;\n x: number;\n y: number;\n} | {\n kind: 'remove_point';\n label: string;\n} | {\n kind: 'move_point';\n label: string;\n x: number;\n y: number;\n} | {\n kind: 'rename_point';\n from: string;\n to: string;\n};\ntype GanttMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_section';\n label: string;\n} | {\n kind: 'rename_section';\n index: number;\n label: string;\n} | {\n kind: 'remove_section';\n index: number;\n} | {\n kind: 'add_task';\n sectionIndex: number;\n label: string;\n taskId?: string;\n tags?: GanttBodyTaskTag[];\n start?: string;\n end: string;\n index?: number;\n} | {\n kind: 'remove_task';\n sectionIndex: number;\n taskIndex: number;\n} | {\n kind: 'rename_task';\n sectionIndex: number;\n taskIndex: number;\n label: string;\n} | {\n kind: 'set_task_status';\n sectionIndex: number;\n taskIndex: number;\n status: 'active' | 'done' | 'crit' | null;\n} | {\n kind: 'set_task_dates';\n sectionIndex: number;\n taskIndex: number;\n start?: string | null;\n end?: string;\n} | {\n kind: 'set_task_flags';\n sectionIndex: number;\n taskIndex: number;\n milestone?: boolean;\n vert?: boolean;\n} | {\n kind: 'set_task_id';\n sectionIndex: number;\n taskIndex: number;\n taskId: string | null;\n} | {\n kind: 'move_task';\n fromSection: number;\n fromIndex: number;\n toSection: number;\n toIndex: number;\n} | {\n kind: 'move_section';\n from: number;\n to: number;\n};\ntype MindmapMutationOp = {\n kind: 'add_node';\n id: string;\n label: string;\n parent: string;\n shape?: MindmapShape;\n index?: number;\n} | {\n kind: 'remove_node';\n id: string;\n recursive?: boolean;\n} | {\n kind: 'rename_node';\n from: string;\n to: string;\n} | {\n kind: 'set_label';\n id: string;\n label: string;\n} | {\n kind: 'move_node';\n id: string;\n parent: string;\n index?: number;\n} | {\n kind: 'set_shape';\n id: string;\n shape: MindmapShape;\n} | {\n kind: 'set_icon';\n id: string;\n icon: string | null;\n} | {\n kind: 'set_node_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype GitGraphMutationOp = {\n kind: 'append_commit';\n id?: string;\n message?: string;\n type?: Extract<GitGraphCommitType, 'NORMAL' | 'REVERSE' | 'HIGHLIGHT'>;\n tags?: string[];\n} | {\n kind: 'create_branch';\n name: string;\n order?: number;\n} | {\n kind: 'checkout_branch';\n name: string;\n} | {\n kind: 'merge_branch';\n name: string;\n id?: string;\n type?: Extract<GitGraphCommitType, 'NORMAL' | 'REVERSE' | 'HIGHLIGHT'>;\n tags?: string[];\n} | {\n kind: 'cherry_pick';\n id: string;\n parent?: string;\n tags?: string[];\n} | {\n kind: 'set_commit_message';\n id: string;\n message: string | null;\n} | {\n kind: 'set_commit_type';\n id: string;\n type: Extract<GitGraphCommitType, 'NORMAL' | 'REVERSE' | 'HIGHLIGHT'>;\n} | {\n kind: 'set_commit_tags';\n id: string;\n tags: string[];\n} | {\n kind: 'rename_branch';\n from: string;\n to: string;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype RadarMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_axis';\n id: string;\n label?: string | null;\n index?: number;\n fill?: number;\n} | {\n kind: 'remove_axis';\n id: string;\n} | {\n kind: 'rename_axis';\n from: string;\n to: string;\n} | {\n kind: 'set_axis_label';\n id: string;\n label: string | null;\n} | {\n kind: 'reorder_axis';\n from: number;\n to: number;\n} | {\n kind: 'add_curve';\n id: string;\n label?: string | null;\n values: number[];\n index?: number;\n} | {\n kind: 'remove_curve';\n id: string;\n} | {\n kind: 'set_curve_values';\n id: string;\n values: number[];\n} | {\n kind: 'set_curve_value';\n curve: string;\n axis: string;\n value: number;\n} | {\n kind: 'set_curve_label';\n id: string;\n label: string | null;\n} | {\n kind: 'rename_curve';\n from: string;\n to: string;\n} | {\n kind: 'reorder_curve';\n from: number;\n to: number;\n} | {\n kind: 'set_config';\n max?: number | null;\n min?: number | null;\n ticks?: number | null;\n graticule?: 'circle' | 'polygon' | null;\n showLegend?: boolean | null;\n};\ntype SankeyMutationOp = {\n kind: 'add_link';\n source: string;\n target: string;\n value: number;\n index?: number;\n} | {\n kind: 'remove_link';\n source: string;\n target: string;\n occurrence?: number;\n} | {\n kind: 'set_link_value';\n source: string;\n target: string;\n value: number;\n occurrence?: number;\n} | {\n kind: 'rename_node';\n from: string;\n to: string;\n};\ntype C4MutationOp = {\n kind: 'add_element';\n element: C4ElementInput;\n} | {\n kind: 'update_element';\n id: string;\n changes: Partial<Omit<C4ElementInput, 'id' | 'parentId'>>;\n} | {\n kind: 'rename_element';\n from: string;\n to: string;\n} | {\n kind: 'reparent_element';\n id: string;\n parentId: string | null;\n} | {\n kind: 'remove_element';\n id: string;\n cascade?: boolean;\n} | {\n kind: 'add_boundary';\n boundary: C4BoundaryInput;\n} | {\n kind: 'update_boundary';\n id: string;\n changes: Partial<Omit<C4BoundaryInput, 'id' | 'parentId'>>;\n} | {\n kind: 'rename_boundary';\n from: string;\n to: string;\n} | {\n kind: 'reparent_boundary';\n id: string;\n parentId: string | null;\n} | {\n kind: 'remove_boundary';\n id: string;\n cascade?: boolean;\n} | {\n kind: 'add_relationship';\n relationship: C4RelationshipInput;\n} | {\n kind: 'update_relationship';\n id: string;\n changes: Partial<Omit<C4RelationshipInput, 'id'>>;\n} | {\n kind: 'remove_relationship';\n id: string;\n} | {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'set_variant';\n variant: C4Variant;\n} | {\n kind: 'add_directive';\n name: string;\n args: C4ArgumentInput[];\n} | {\n kind: 'update_directive';\n id: string;\n args: C4ArgumentInput[];\n} | {\n kind: 'remove_directive';\n id: string;\n};\ninterface C4ElementInput {\n id: string;\n label: string;\n macro?: string;\n kind?: C4ElementKind;\n external?: boolean;\n shape?: C4Shape;\n technology?: string;\n description?: string;\n parentId?: string;\n tags?: string[];\n link?: string;\n sprite?: string;\n}\ninterface C4BoundaryInput {\n id: string;\n label: string;\n macro?: string;\n kind?: C4BoundaryKind;\n type?: string;\n description?: string;\n parentId?: string;\n tags?: string[];\n link?: string;\n sprite?: string;\n}\ninterface C4RelationshipInput {\n id?: string;\n from: string;\n to: string;\n label: string;\n macro?: string;\n technology?: string;\n description?: string;\n tags?: string[];\n link?: string;\n sprite?: string;\n index?: string;\n}\ntype PacketMutationOp = {\n kind: 'set_title';\n title?: string;\n} | {\n kind: 'set_accessibility_title';\n title?: string;\n} | {\n kind: 'set_accessibility_description';\n description?: string;\n} | {\n kind: 'add_field';\n label: string;\n bits: number;\n index?: number;\n} | {\n kind: 'remove_field';\n index: number;\n} | {\n kind: 'set_field_label';\n index: number;\n label: string;\n} | {\n kind: 'set_field_bits';\n index: number;\n bits: number;\n} | {\n kind: 'move_field';\n from: number;\n to: number;\n};\ntype KanbanMutationOp = {\n kind: 'add_column';\n id: string;\n label: string;\n index?: number;\n} | {\n kind: 'remove_column';\n id: string;\n removeTasks?: boolean;\n} | {\n kind: 'set_column_label';\n id: string;\n label: string;\n} | {\n kind: 'move_column';\n id: string;\n index: number;\n} | {\n kind: 'add_task';\n column: string;\n id: string;\n label: string;\n metadata?: Record<string, unknown>;\n index?: number;\n} | {\n kind: 'remove_task';\n id: string;\n} | {\n kind: 'set_task_label';\n id: string;\n label: string;\n} | {\n kind: 'set_task_metadata';\n id: string;\n metadata: Record<string, unknown> | null;\n} | {\n kind: 'move_task';\n id: string;\n column: string;\n index?: number;\n} | {\n kind: 'set_icon';\n id: string;\n icon?: string;\n} | {\n kind: 'set_class';\n id: string;\n className?: string;\n} | {\n kind: 'set_accessibility_title';\n title?: string;\n} | {\n kind: 'set_accessibility_description';\n description?: string;\n};\ntype RequirementMutationOp = {\n kind: 'set_direction';\n direction: RequirementBody['direction'];\n} | {\n kind: 'add_requirement';\n requirement: RequirementInput;\n} | {\n kind: 'update_requirement';\n id: string;\n changes: Partial<Omit<RequirementInput, 'name'>>;\n} | {\n kind: 'add_element';\n element: RequirementElementInput;\n} | {\n kind: 'update_element';\n id: string;\n changes: Partial<Omit<RequirementElementInput, 'name'>>;\n} | {\n kind: 'rename_node';\n from: string;\n to: string;\n} | {\n kind: 'remove_node';\n id: string;\n cascade?: boolean;\n} | {\n kind: 'add_relation';\n relation: Omit<RequirementRelation, 'id'> & {\n id?: string;\n };\n} | {\n kind: 'remove_relation';\n id: string;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_node_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_node_style';\n id: string;\n style: string | null;\n};\ntype RequirementInput = Pick<Requirement, 'name'> & Partial<Omit<Requirement, 'name' | 'cssStyles'>>;\ntype RequirementElementInput = Pick<RequirementElement, 'name'> & Partial<Omit<RequirementElement, 'name' | 'cssStyles'>>;\ntype TreemapMutationOp = {\n kind: 'set_title';\n title: string | null;\n} | {\n kind: 'add_node';\n label: string;\n value?: number;\n parentId?: string;\n className?: string;\n} | {\n kind: 'remove_node';\n id: string;\n} | {\n kind: 'set_label';\n id: string;\n label: string;\n} | {\n kind: 'set_value';\n id: string;\n value: number;\n} | {\n kind: 'move_node';\n id: string;\n parentId?: string;\n index?: number;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_node_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype IshikawaMutationOp = {\n kind: 'set_effect';\n label: string;\n} | {\n kind: 'add_cause';\n label: string;\n parentId?: string;\n} | {\n kind: 'remove_cause';\n id: string;\n} | {\n kind: 'set_label';\n id: string;\n label: string;\n} | {\n kind: 'move_cause';\n id: string;\n parentId: string;\n index?: number;\n} | {\n kind: 'set_accessibility_title';\n title: string | null;\n} | {\n kind: 'set_accessibility_description';\n description: string | null;\n};\ntype BlockMutationOp = {\n kind: 'set_columns';\n columns: number;\n parentId?: string;\n} | {\n kind: 'add_block';\n block: BlockInput;\n parentId?: string;\n index?: number;\n} | {\n kind: 'update_block';\n id: string;\n changes: Partial<Omit<BlockInput, 'id'>>;\n} | {\n kind: 'rename_block';\n from: string;\n to: string;\n} | {\n kind: 'remove_block';\n id: string;\n cascade?: boolean;\n} | {\n kind: 'move_block';\n id: string;\n parentId?: string;\n index?: number;\n} | {\n kind: 'add_edge';\n from: string;\n to: string;\n label?: string;\n style?: 'solid' | 'dotted' | 'thick';\n arrowStart?: string;\n arrowEnd?: string;\n} | {\n kind: 'remove_edge';\n id: string;\n} | {\n kind: 'define_class';\n name: string;\n style: string;\n} | {\n kind: 'set_node_class';\n id: string;\n className: string | null;\n} | {\n kind: 'set_node_style';\n id: string;\n style: string | null;\n};\ninterface BlockInput {\n id: string;\n label?: string;\n type?: string;\n widthInColumns?: number;\n columns?: number;\n directions?: string[];\n classes?: string[];\n styles?: string[];\n width?: number;\n children?: BlockInput[];\n}\ntype EventModelingMutationOp = {\n kind: 'insert_frame';\n frame: EventFrame;\n index?: number;\n} | {\n kind: 'remove_frame';\n id: string;\n} | {\n kind: 'move_frame';\n id: string;\n index: number;\n} | {\n kind: 'set_frame';\n id: string;\n frame: EventFrame;\n} | {\n kind: 'set_data';\n id: string;\n data: EventData;\n} | {\n kind: 'set_entities';\n entities: string[];\n} | {\n kind: 'set_notes';\n notes: EventModelingBody['notes'];\n} | {\n kind: 'set_specifications';\n specifications: EventSpecification[];\n} | {\n kind: 'set_title';\n title?: string;\n} | {\n kind: 'set_accessibility_title';\n title?: string;\n} | {\n kind: 'set_accessibility_description';\n description?: string;\n};\ntype ZenUMLMutationOp = {\n kind: 'upsert_participant';\n participant: ZenUMLParticipant;\n index?: number;\n} | {\n kind: 'remove_participant';\n id: string;\n} | {\n kind: 'rename_participant';\n id: string;\n newId: string;\n} | {\n kind: 'insert_statement';\n statement: ZenUMLStatement;\n parentId?: string;\n branchIndex?: number;\n index?: number;\n} | {\n kind: 'remove_statement';\n id: string;\n} | {\n kind: 'set_statement';\n id: string;\n statement: ZenUMLStatement;\n} | {\n kind: 'set_title';\n title?: string;\n} | {\n kind: 'set_accessibility_title';\n title?: string;\n} | {\n kind: 'set_accessibility_description';\n description?: string;\n};\ntype Statement = Block | Block[];\ntype SeqParticipantKind = SequenceParticipantKind\ntype SeqParticipant = SequenceParticipant\ntype SeqMessage = SequenceMessage\ntype SeqFragmentKind = SequenceFragmentKind\ntype SeqFragmentBranch = SequenceFragmentBranch\ntype SeqFragment = SequenceFragment\ntype GanttTaskTag = GanttBodyTaskTag\ntype GanttTask = GanttBodyTask\ntype GanttSection = GanttBodySection\n";function Be(e){return e.narrower.slice(2)}function Or(e){return e.id==="flowchart"?`{ kind: 'flowchart'; graph: FlowchartGraph }`:`${Be(e)}Body`}var Pi=`type DiagramKind = ${j.map(e=>`'${e.id}'`).join(" | ")}`;var Ni=j.map(e=>` | ${Or(e)}`).join("\n");var Li=j.map(e=>`type ${Be(e)}ValidDiagram = ValidDiagram & { body: ${Or(e)} }`).join("\n");var Bi=j.map(e=>` ${e.narrower}(d: ParsedDiagram): ${Be(e)}ValidDiagram | null`).join("\n");var Vi=j.map(e=>{const n=Be(e);return` mutate(d: ${n}ValidDiagram, op: ${n}MutationOp): Result<${n}ValidDiagram, { code: string; message: string }>`}).join("\n");var $i=`// 3. mutate works on ${j.map(e=>e.id).join(", ")}. Narrow via
170
+ // ${j.map(e=>e.narrower).join("/")}.
171
+ // ${jt}`;function Fi(){const e=new Map;for(const n of at){const t=n.transports.codeMode;if(t.availability!=="direct"&&t.availability!=="projected")continue;const r=`${n.id}: ${t.selector??t.availability}`;const i=e.get(t.method);if(i){if(i.optionsType!==t.optionsType||i.returnType!==t.returnType){throw new Error(`Code Mode render contract for ${t.method} has incompatible signatures`)}i.outputs.push(r)}else{e.set(t.method,{optionsType:t.optionsType,returnType:t.returnType,outputs:[r]})}}return[...e].map(([n,t])=>` // ${t.outputs.join("; ")}
172
+ ${n}(input: ParsedDiagram | string, opts?: ${t.optionsType}): ${t.returnType}`).join("\n")}var Dr=dt();var Ir=`interface ConfigDiagnostic { code: 'INEFFECTIVE_CONFIG'; field: string; message: string }
173
+ interface TerminalProjectionDiagnostic { code: string; feature: string; message: string; cell?: { column: number; row: number } }
174
+
175
+ interface SvgRenderOptions extends SharedRenderOptions {
176
+ onConfigDiagnostic?: (diagnostic: ConfigDiagnostic) => void
177
+ }
178
+
179
+ interface AsciiRenderOptions extends SharedRenderOptions {
180
+ ${ft()}
181
+ onConfigDiagnostic?: (diagnostic: ConfigDiagnostic) => void
182
+ onProjectionDiagnostic?: (diagnostic: TerminalProjectionDiagnostic) => void
183
+ }
184
+
185
+ interface LayoutRenderOptions extends SharedRenderOptions {
186
+ debug?: boolean
187
+ regions?: boolean
188
+ actions?: boolean
189
+ onConfigDiagnostic?: (diagnostic: ConfigDiagnostic) => void
190
+ }`;var Pr=`interface RenderArtifactDiagnostic { code: string; message?: string; reference?: string; feature?: string; input?: string; canonicalId?: string; removal?: { release: string; date: string } }
191
+ interface CapabilityResolution { readonly id: \`\${string}:\${string}\`; readonly range: string; readonly level: 'required' | 'preferred' | 'optional'; readonly status: 'selected' | 'unsupported' | 'incompatible'; readonly version?: string }
192
+ type CapabilityDecision = Readonly<{ version: 1; accepted: boolean; resolutions: readonly CapabilityResolution[] }>
193
+ interface RenderExecutionDecision {
194
+ readonly family: { readonly id: string; readonly version: string }
195
+ readonly backend: { readonly mode: 'scene'; readonly requestedId: string; readonly selectedId: string; readonly version: string; readonly hostPolicy: boolean } | { readonly mode: 'family-svg' }
196
+ readonly digest: string
197
+ }
198
+ type GraphLayoutDecision = Readonly<{ requested: 'elk' | 'agentic'; fallback: 'none' | 'elk'; selected: 'elk' | 'agentic'; reason?: string; attempts: readonly Readonly<{ backend: 'elk' | 'agentic'; outcome: 'selected' | 'unsupported' | 'candidate-rejected'; reason?: string }>[]; implementation: string; role?: 'primary' | 'companion' }>
199
+ interface RenderRequestReceipt { version: ${ot}; output: 'svg' | 'png' | 'ascii' | 'unicode' | 'html' | 'layout'; sharedRequestDigest: string; requestDigest: string; appearanceDigest: string; capabilityDecision: CapabilityDecision; diagnostics?: readonly RenderArtifactDiagnostic[]; graphicalProjectionDigest?: string; executionDecision?: RenderExecutionDecision; layoutDecisions?: readonly GraphLayoutDecision[] }`;function ln(e){let n="";for(const t of e.split("\n")){const r=t.trim();if(!r)continue;if(r.startsWith("interface ")&&r.endsWith("}")){n+=`${r}
200
+ `}else if(r.endsWith("{")){n+=`${r} `}else if(r==="}"){n+=`}
201
+ `}else{n+=`${r.replaceAll("?: ","?:")};`}}return n.trimEnd()}function un(e){return e.replace(/('(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"|`(?:\\.|[^`\\])*`)|\s+/g,(n,t,r)=>{if(t)return t;if(n.includes("\n"))return"\n";return/[\w$]/.test(e[r-1]??"")&&/[\w$]/.test(e[r+n.length]??"")?" ":""})}var ji=ln(Dr);var qi=ln(Ir);var Ui=ln(Pr);var Gi=`${Tr}
202
+
203
+ ${ze()}
204
+
205
+ ${ct()}
206
+
207
+ ${Dr}
208
+
209
+ ${Ir}
210
+
211
+ ${Pr}
212
+
213
+ interface TerminalConnectorProjection {
214
+ id: string
215
+ role: string
216
+ realization: 'native' | 'emulated' | 'projected' | 'lossy' | 'unsupported'
217
+ topology: 'line' | 'polyline' | 'path'
218
+ direction: 'forward' | 'reverse' | 'bidirectional' | 'undirected' | 'self'
219
+ relationship: string
220
+ markers: { start?: { id: string; shape: string }; mid: readonly { id: string; shape: string }[]; end?: { id: string; shape: string } }
221
+ labels: readonly { id?: string; text: string; textContent?: LabelContent }[]
222
+ lineStyle: 'solid' | 'dotted' | 'dashed' | 'thick' | 'invisible'
223
+ strokeLosses: readonly string[]
224
+ diagnostics: readonly string[]
225
+ }
226
+ interface ResolvedTerminalStyle {
227
+ version: 1
228
+ colorMode: 'none' | 'ansi16' | 'ansi256' | 'truecolor' | 'html'
229
+ theme: Readonly<{ fg: string; border: string; line: string; arrow: string; accent?: string; bg?: string; corner?: string; junction?: string }>
230
+ diagnostics: readonly TerminalProjectionDiagnostic[]
231
+ connectorProjection: { evidence: 'scene' | 'unavailable' | 'not-evaluated'; count: number; topologies: Readonly<Record<'line' | 'polyline' | 'path', number>>; realizations: Readonly<Record<string, number>>; relationships: readonly string[]; directions: readonly string[]; markerPositions: Readonly<{ start: number; mid: number; end: number }>; labelCount: number; connectors: readonly TerminalConnectorProjection[]; digest: string }
232
+ digest: string
233
+ }
234
+ ${yt()}
235
+ interface RenderedSvg { svg: string; receipt: RenderRequestReceipt }
236
+ interface RenderedAscii { text: string; receipt: RenderRequestReceipt; terminalStyle: ResolvedTerminalStyle; outputPolicy: ResolvedTerminalOutputPolicy }
237
+ interface RenderedLayoutArtifact { layout: VerifyResult['layout']; receipt: RenderRequestReceipt }`;var Ki=ze({compact:true}).replaceAll(" | ","|").replaceAll(", ",",");var Nr=un(`${Ki}
238
+ type ArchitectureVisualOverrides = Readonly<Record<string, unknown>>
239
+
240
+ ${ji}
241
+
242
+ ${qi}
243
+
244
+ ${Ui}
245
+
246
+ interface RenderedSvg { svg: string; receipt: RenderRequestReceipt }
247
+ interface RenderedAscii { text: string; receipt: RenderRequestReceipt; terminalStyle: Record<string, unknown>; outputPolicy: Record<string, unknown> }
248
+ interface RenderedLayoutArtifact { layout: VerifyResult['layout']; receipt: RenderRequestReceipt }`.replace(/; +/g,";").replace(/: +/g,":"));var mn=`interface RenderedLayout { version: 1; kind: DiagramKind | ExternalFamilyId; nodes: unknown[]; edges: unknown[]; groups: unknown[]; labels?: Array<{ id: string; text: string; bounds?: LayoutRect; container?: LayoutRect; visibility?: 'visible' | 'hidden' | 'semantic' }>; regions?: RenderedRegion[]; actions?: DiagramActionRecord[]; bounds: { w: number; h: number } }`;var Ji=Fi();var Po=`// Mermaid agent SDK available as the global \`mermaid\`. All calls are
249
+ // synchronous and pure. Compose multi-step edits in one execute() call.
250
+ // Code Mode is synchronous: async/await, Promise jobs, and dynamic import are not supported.
251
+
252
+ type Result<T, E> = { ok: true; value: T } | { ok: false; error: E }
253
+ type MermaidConfigScalar = string | number | boolean | null
254
+ type MermaidConfigValue = MermaidConfigScalar | MermaidConfigValue[] | { [key: string]: MermaidConfigValue | undefined }
255
+ type MermaidRuntimeConfig = {
256
+ [key: string]: MermaidConfigValue | undefined
257
+ theme?: string
258
+ fontFamily?: string
259
+ themeVariables?: { [key: string]: MermaidConfigValue | undefined; fontFamily?: string }
260
+ timeline?: { [key: string]: MermaidConfigValue | undefined; disableMulticolor?: boolean; sectionFills?: string[]; sectionColours?: string[] }
261
+ journey?: { [key: string]: MermaidConfigValue | undefined; diagramMarginX?: number; diagramMarginY?: number; leftMargin?: number; maxLabelWidth?: number; taskMargin?: number; actorColours?: string[]; sectionFills?: string[]; sectionColours?: string[]; useMaxWidth?: boolean }
262
+ flowchart?: { [key: string]: MermaidConfigValue | undefined; nodeSpacing?: number; rankSpacing?: number; wrappingWidth?: number }
263
+ // State geometry consumes the faithful ELK/measured-text equivalents;
264
+ // legacy Dagre calibration keys remain typed and emit INEFFECTIVE_CONFIG.
265
+ state?: { [key: string]: MermaidConfigValue | undefined; titleTopMargin?: number; arrowMarkerAbsolute?: boolean; dividerMargin?: number; sizeUnit?: number; padding?: number; textHeight?: number; titleShift?: number; noteMargin?: number; nodeSpacing?: number; rankSpacing?: number; forkWidth?: number; forkHeight?: number; miniPadding?: number; fontSizeFactor?: number; fontSize?: number; labelHeight?: number; edgeLengthFactor?: string; compositTitleSize?: number; radius?: number; defaultRenderer?: 'dagre-d3' | 'dagre-wrapper' | 'elk'; layout?: string; look?: string; minNodeWidth?: number; theme?: string; wrappingWidth?: number }
266
+ class?: { [key: string]: MermaidConfigValue | undefined; nodeSpacing?: number; rankSpacing?: number }
267
+ er?: { [key: string]: MermaidConfigValue | undefined; layoutDirection?: string; nodeSpacing?: number; rankSpacing?: number }
268
+ architecture?: { [key: string]: MermaidConfigValue | undefined; padding?: number; iconSize?: number; fontSize?: number; nodeSeparation?: number; idealEdgeLengthMultiplier?: number }
269
+ xyChart?: { [key: string]: MermaidConfigValue | undefined }
270
+ pie?: { [key: string]: MermaidConfigValue | undefined; textPosition?: number; donutHole?: number; legendPosition?: 'top' | 'bottom' | 'left' | 'right' | 'center' }
271
+ quadrantChart?: { [key: string]: MermaidConfigValue | undefined; chartWidth?: number; chartHeight?: number; pointRadius?: number; useMaxWidth?: boolean }
272
+ gantt?: { [key: string]: MermaidConfigValue | undefined; displayMode?: string }
273
+ mindmap?: { [key: string]: MermaidConfigValue | undefined; padding?: number; maxNodeWidth?: number }
274
+ gitGraph?: { [key: string]: MermaidConfigValue | undefined; showBranches?: boolean; showCommitLabel?: boolean; mainBranchName?: string; mainBranchOrder?: number; parallelCommits?: boolean; rotateCommitLabel?: boolean }
275
+ radar?: { [key: string]: MermaidConfigValue | undefined; width?: number; height?: number; marginTop?: number; marginRight?: number; marginBottom?: number; marginLeft?: number; axisScaleFactor?: number; axisLabelFactor?: number; curveTension?: number; useMaxWidth?: boolean; tickLabels?: boolean }
276
+ c4?: { [key: string]: MermaidConfigValue | undefined; maxWidth?: number; compact?: boolean; typeLegend?: boolean; diagramMarginX?: number; diagramMarginY?: number; c4ShapeMargin?: number; c4ShapePadding?: number; width?: number; height?: number; c4ShapeInRow?: number; c4BoundaryInRow?: number; useMaxWidth?: boolean }
277
+ sankey?: { [key: string]: MermaidConfigValue | undefined; width?: number; height?: number; linkColor?: string; nodeAlignment?: 'justify' | 'center' | 'left' | 'right'; showValues?: boolean; prefix?: string; suffix?: string; labelStyle?: 'legacy' | 'outlined'; nodeWidth?: number; nodePadding?: number; nodeColors?: Record<string, string>; useMaxWidth?: boolean }
278
+ // Wired sequence keys (unlisted documented keys are accepted and named by
279
+ // verify's INEFFECTIVE_CONFIG lint \u2014 see src/sequence/config.ts).
280
+ sequence?: { [key: string]: MermaidConfigValue | undefined; actorMargin?: number; width?: number; height?: number; diagramMarginX?: number; diagramMarginY?: number; messageMargin?: number; noteMargin?: number; activationWidth?: number; showSequenceNumbers?: boolean }
281
+ useMaxWidth?: boolean
282
+ useWidth?: number
283
+ /** Recognized for upstream accounting but public renderers reject raw CSS; use StyleSpec. */
284
+ themeCSS?: string
285
+ }
286
+
287
+ ${Gi}
288
+
289
+ ${Pi}
290
+ ${Cr}
291
+
292
+ interface ValidDiagram {
293
+ readonly kind: DiagramKind
294
+ readonly source: SourceMap
295
+ readonly meta: {
296
+ frontmatter?: Record<string, unknown>
297
+ initDirectives: { raw: string; parsed: Record<string, unknown> }[]
298
+ comments: { text: string; line: number }[]
299
+ wrapperSource?: string // exact bytes before the family header; parsed diagrams always set it, even as ''
300
+ droppedComments?: { text: string; line: number }[] // line indexes the artifact the loss happened in, not canonicalSource
301
+ accessibility: { title?: string; descr?: string }
302
+ }
303
+ readonly body:
304
+ ${Ni}
305
+ | { kind: 'opaque'; family: DiagramKind; source: string }
306
+ readonly canonicalSource: string // normalized renderer input; opaque fidelity uses body.source
307
+ }
308
+
309
+ interface ExtensionDiagramBody {
310
+ readonly kind: 'extension'
311
+ readonly family: ExternalFamilyId
312
+ readonly source: string
313
+ readonly data?: unknown
314
+ }
315
+
316
+ interface ExtensionValidDiagram {
317
+ readonly kind: ExternalFamilyId
318
+ readonly descriptorIdentity: ExtensionIdentity<'family'>
319
+ readonly meta: ValidDiagram['meta']
320
+ readonly body: ExtensionDiagramBody
321
+ readonly source: SourceMap
322
+ readonly canonicalSource: string
323
+ }
324
+
325
+ interface PreservedValidDiagram {
326
+ readonly kind: ExternalFamilyId
327
+ readonly meta: ValidDiagram['meta']
328
+ readonly body: {
329
+ readonly kind: 'preserved'
330
+ readonly representation: 'opaque' | 'unknown'
331
+ readonly source: string
332
+ readonly preservation: SourcePreservationReceipt
333
+ readonly spans: PreservedSourceSpans
334
+ readonly diagnostic: {
335
+ readonly code: 'UNSUPPORTED_FAMILY' | 'UNKNOWN_HEADER' | 'FAMILY_DESCRIPTOR_MISMATCH'
336
+ readonly message: string
337
+ readonly help: string
338
+ }
339
+ }
340
+ readonly source: SourceMap
341
+ readonly canonicalSource: string
342
+ }
343
+
344
+ type ParsedDiagram = ValidDiagram | ExtensionValidDiagram | PreservedValidDiagram
345
+
346
+ ${vr}
347
+
348
+ ${Li}
349
+
350
+ // Tier 1 (structural, reliable): EMPTY_DIAGRAM, EDGE_MISANCHORED, OFF_CANVAS,
351
+ // GROUP_BREACH, UNKNOWN_SHAPE, LABEL_OVERFLOW (rendered-line char count:
352
+ // <br> splits lines, XML entities decode to one char),
353
+ // UNRESOLVABLE_SCHEDULE (gantt: parses but schedule cannot resolve; render would fail),
354
+ // RENDER_FAILED (the strict render parser, layout, or theme colors rejected the source
355
+ // or its configuration; origin: 'source' | 'config'),
356
+ // INTERNAL_ERROR (an Agentic Mermaid defect, not the source; defaultRender:
357
+ // 'succeeds-unchecked' | 'fails' says whether an ordinary render still produces output;
358
+ // do not rewrite the diagram to work around it).
359
+ // Tier 2 (geometric): CONTENT_OCCLUDED is an error; LAYOUT_LIMIT_EXCEEDED,
360
+ // NODE_OVERLAP, ROUTE_SELF_CROSS and the following tripwires are advisory.
361
+ // route-contract tripwires ROUTE_HITCH, ROUTE_UNEXPLAINED_BEND,
362
+ // ROUTE_LABEL_ON_SHARED_TRUNK, ROUTE_SELF_LOOP_OCCUPANCY, ROUTE_CONTAINER_MISANCHOR,
363
+ // ROUTE_SHAPE_MISANCHOR, ROUTE_STALE_AFTER_NODE_MOVE.
364
+ // Tier 3 (lint, advisory): DUPLICATE_EDGE, UNREACHABLE_NODE,
365
+ // DECISION_BRANCH_UNLABELED, FLOW_IMBALANCE, COMMENT_DROPPED, UNSUPPORTED_SYNTAX,
366
+ // CONTENT_DROPPED_ON_ROUNDTRIP, INEFFECTIVE_CONFIG, LOW_CONTRAST, LABELS_HIDDEN,
367
+ // SCALE_RANGE_EXCLUDES_ZERO, BAR_RANGE_EXCLUDES_ZERO, VALUES_OUTSIDE_RANGE, BRAND_CONSTRAINT_WARNING. BRAND_CONSTRAINT_ERROR is inspect-only policy
368
+ // selected explicitly by a Style constraint with action "error".
369
+ ${mn}
370
+
371
+ type WarningCode =
372
+ | 'EMPTY_DIAGRAM' | 'EDGE_MISANCHORED' | 'OFF_CANVAS' | 'GROUP_BREACH'
373
+ | 'UNKNOWN_SHAPE' | 'LABEL_OVERFLOW' | 'UNRESOLVABLE_SCHEDULE' | 'RENDER_FAILED' | 'INTERNAL_ERROR'
374
+ | 'NODE_OVERLAP' | 'CONTENT_OCCLUDED' | 'LAYOUT_LIMIT_EXCEEDED' | 'ROUTE_SELF_CROSS' | 'ROUTE_HITCH'
375
+ | 'ROUTE_UNEXPLAINED_BEND' | 'ROUTE_LABEL_ON_SHARED_TRUNK' | 'ROUTE_SELF_LOOP_OCCUPANCY' | 'ROUTE_CONTAINER_MISANCHOR'
376
+ | 'ROUTE_SHAPE_MISANCHOR' | 'ROUTE_STALE_AFTER_NODE_MOVE'
377
+ | 'DUPLICATE_EDGE' | 'UNREACHABLE_NODE' | 'DECISION_BRANCH_UNLABELED' | 'FLOW_IMBALANCE' | 'COMMENT_DROPPED' | 'UNSUPPORTED_SYNTAX'
378
+ | 'CONTENT_DROPPED_ON_ROUNDTRIP' | 'EVENT_SOURCE_TYPE' | 'INEFFECTIVE_CONFIG' | 'LOW_CONTRAST' | 'LABELS_HIDDEN' | 'BAR_RANGE_EXCLUDES_ZERO'
379
+ | 'SCALE_RANGE_EXCLUDES_ZERO' | 'VALUES_OUTSIDE_RANGE'
380
+ | 'BRAND_CONSTRAINT_WARNING' | 'BRAND_CONSTRAINT_ERROR'
381
+
382
+ interface VerifyResult {
383
+ checks?: { renderability: 'passed' | 'failed' | 'not-checked'; sourceLoss: 'detected' | 'not-detected'; taskCorrectness: 'not-checked' }
384
+ ok: boolean
385
+ warnings: { code: WarningCode; [field: string]: unknown }[]
386
+ layout: RenderedLayout
387
+ }
388
+
389
+ interface DiagramAnalysis {
390
+ kind: DiagramKind | ExternalFamilyId
391
+ feedbackEdges: Array<{ edgeIndex: number; from: string; to: string; label?: string; routeClass: string }>
392
+ actions: Array<{ id?: string; regionId?: string; family: DiagramKind; target: string; action: 'href' | 'call' | 'callback'; raw: string; line?: number; href?: string; tooltip?: string; security: 'safe' | 'unsafe' | 'source-only' | 'unsupported'; executable: false; message?: string }>
393
+ gantt?: { criticalPathTaskIds: string[]; slackByTaskId: Record<string, number>; projectStart: number; projectEnd: number; entryTaskIds: string[]; sinkTaskIds: string[] }
394
+ }
395
+
396
+
397
+ declare const mermaid: {
398
+ parseRegisteredMermaid(source: string): Result<ParsedDiagram, ParseError[]>
399
+ // Blank-slate authoring: createMermaid returns an empty structured diagram
400
+ // for any DiagramKind (already narrowed \u2014 pass it straight to mutate).
401
+ // buildMermaid folds a typed op list over that empty diagram; on failure the
402
+ // error carries opIndex of the op that failed. direction applies to
403
+ // flowchart/state only.
404
+ createMermaid(kind: DiagramKind, opts?: CreateMermaidOptions): ValidDiagram
405
+ buildMermaid(kind: DiagramKind, ops: AnyMutationOp[], opts?: CreateMermaidOptions): Result<ValidDiagram, { code: string; message: string; opIndex: number }>
406
+ ${Bi}
407
+ ${Vi}
408
+ verifyMermaid(input: ParsedDiagram | string, opts?: { suppress?: WarningCode[]; labelCharCap?: number; renderOptions?: SharedRenderOptions }): VerifyResult
409
+ analyzeMermaid(d: ValidDiagram): DiagramAnalysis
410
+ analyzeMermaidSource(source: string): Result<DiagramAnalysis, { code: string; message: string }[]>
411
+ describeMermaidFacts(d: ValidDiagram): string[]
412
+ describeMermaidFactsSource(source: string): Result<string[], { code: string; message: string }[]>
413
+ checkMermaid(d: ValidDiagram, spec: CheckMermaidSpec): CheckMermaidResult
414
+ checkMermaidSource(source: string, spec: CheckMermaidSpec): Result<CheckMermaidResult, { code: string; message: string }[]>
415
+ serializeMermaid(d: ParsedDiagram): string
416
+ // Compatibility conveniences return only bytes/text; use the receipt-aware
417
+ // methods below for transport parity and projection/security evidence.
418
+ renderMermaidSVG(input: ParsedDiagram | string, opts?: SvgRenderOptions): string
419
+ renderMermaidASCII(input: ParsedDiagram | string, opts?: AsciiRenderOptions): string
420
+ ${Ji}
421
+ // Op discovery \u2014 look up exact op shapes at runtime instead of guessing.
422
+ // describeOps returns every op's field names, required-ness, inlined enum
423
+ // values, and constraint/default notes (e.g. score "finite number 1..5", shape
424
+ // "default: rectangle"); opSignatures returns compact one-liners like
425
+ // "add_point(label, x, y)". Read these before authoring an unfamiliar op.
426
+ describeOps(family: DiagramKind): Record<string, { name: string; required: boolean; type: string; note?: string }[]>
427
+ opSignatures(family: DiagramKind): string[]
428
+ // Opaque Class: add_member/remove_member; Flowchart: set_label/rename_node.
429
+ // Save value.source exactly; verify value.diagram. Ambiguous ownership and
430
+ // unsupported dependencies refuse; portability diagnostics remain present.
431
+ mutatePreservingSource(d: ParsedDiagram, op: AnyMutationOp): Result<{ source: string; diagram: ParsedDiagram }, { code: string; message: string }>
432
+ }
433
+
434
+ // Conventions:
435
+ // 1. ${qt}
436
+ // 2. For existing structured diagrams, use mutate() + verify + serializeMermaid();
437
+ // do not regenerate/concatenate source when a typed op exists.
438
+ ${$i}
439
+ // State owns a dedicated body (BUILD-19); asFlowchart returns null on it.
440
+ // Gantt bodies are segment-preserving: directives/click/comment lines ride
441
+ // along verbatim as opaque-block segments and are edited as source only.
442
+ // Opaque-fallback
443
+ // bodies (unmodeled syntax) are source-level only; if explicitly edited as
444
+ // text, re-parse and verify before returning.
445
+ // 4. verify.ok means no unsuppressed error was detected (including content occlusion), not a visual-quality score; inspect warnings/layout and render artifacts.
446
+ // For semantic task correctness, read back deterministic facts or check them:
447
+ // checkMermaid(d, ['edge Processing -> [*] : done', 'member Duck +quack()']).
448
+ // 5. Layout is deterministic and never seeded. The render option seed only
449
+ // re-rolls stochastic ink of styled looks (render option style: a name,
450
+ // an inline style record, or a stack merged left-to-right; a colors-only
451
+ // style is a theme); geometry is identical for identical input. Gantt
452
+ // never reads the wall clock; pass render option ganttToday to draw a
453
+ // deterministic today marker.
454
+ `;var Ve=j.map(e=>e.id);var Hi=new Set(Ve);var zi=Ve.map(e=>`'${e}'`).join(" | ");var Wi=j.map(e=>`${e.narrower}:Narrow`).join("\n");var Lr=un(`type DiagramKind = ${zi.replaceAll(" | ","|")}
455
+ type MutationOp = { kind: string; [field: string]: unknown }
456
+ type Result<T, E = { code: string; message: string }> = { ok: true; value: T } | { ok: false; error: E }
457
+ ${wr}
458
+ interface ValidDiagram { readonly kind: DiagramKind; readonly source: SourceMap }
459
+ interface ExtensionValidDiagram {
460
+ readonly kind: ExternalFamilyId
461
+ readonly descriptorIdentity: ExtensionIdentity<'family'>
462
+ readonly source: SourceMap
463
+ }
464
+ interface PreservedValidDiagram {
465
+ readonly kind: ExternalFamilyId
466
+ readonly source: SourceMap
467
+ readonly body: {
468
+ readonly kind: 'preserved'
469
+ readonly representation: 'opaque' | 'unknown'
470
+ readonly source: string
471
+ readonly preservation: SourcePreservationReceipt
472
+ readonly spans: PreservedSourceSpans
473
+ readonly diagnostic: {
474
+ readonly code: 'UNSUPPORTED_FAMILY' | 'UNKNOWN_HEADER' | 'FAMILY_DESCRIPTOR_MISMATCH'
475
+ readonly message: string
476
+ readonly help: string
477
+ }
478
+ }
479
+ }
480
+ type ParsedDiagram = ValidDiagram | ExtensionValidDiagram | PreservedValidDiagram
481
+ type Narrow = (d: ParsedDiagram) => ValidDiagram | null
482
+ ${mn}
483
+ interface VerifyResult{ok:boolean;warnings:unknown[];layout:RenderedLayout;checks?:{renderability:'passed'|'failed'|'not-checked';sourceLoss:'detected'|'not-detected';taskCorrectness:'not-checked'}}
484
+ type MermaidConfigScalar=string|number|boolean|null
485
+ type MermaidConfigValue=MermaidConfigScalar|MermaidConfigValue[]|{[key:string]:MermaidConfigValue|undefined}
486
+ type MermaidRuntimeConfig = { [key: string]: MermaidConfigValue | undefined }
487
+
488
+ ${Nr}
489
+
490
+ declare const mermaid: {
491
+ parseRegisteredMermaid(source: string): Result<ParsedDiagram, ParseError[]>
492
+ createMermaid(kind: DiagramKind, opts?: CreateMermaidOptions): ValidDiagram
493
+ buildMermaid(kind: DiagramKind, ops: MutationOp[], opts?: CreateMermaidOptions): Result<ValidDiagram, { code: string; message: string; opIndex: number }>
494
+ ${Wi}
495
+ mutate(diagram: ValidDiagram, op: MutationOp): Result<ValidDiagram>
496
+ // Opaque Class:add_member/remove_member;Flowchart:set_label/rename_node. Save source;warnings remain.
497
+ mutatePreservingSource(d: ParsedDiagram, op: MutationOp): Result<{source:string;diagram:ParsedDiagram}>
498
+ verifyMermaid(input: ParsedDiagram | string, opts?: { suppress?: string[]; labelCharCap?: number; renderOptions?: SharedRenderOptions }): VerifyResult
499
+ analyzeMermaid(diagram: ValidDiagram): Record<string, unknown>
500
+ analyzeMermaidSource(source: string): Result<Record<string, unknown>>
501
+ describeMermaidFacts(diagram: ValidDiagram): string[]
502
+ describeMermaidFactsSource(source: string): Result<string[]>
503
+ checkMermaid(diagram: ValidDiagram, spec: CheckMermaidSpec): CheckMermaidResult
504
+ checkMermaidSource(source: string, spec: CheckMermaidSpec): Result<CheckMermaidResult>
505
+ serializeMermaid(diagram: ParsedDiagram): string
506
+ renderMermaidSVG(input: ParsedDiagram | string, opts?: SvgRenderOptions): string
507
+ renderMermaidSVGWithReceipt(input: ParsedDiagram | string, opts?: SvgRenderOptions): RenderedSvg
508
+ renderMermaidASCII(input: ParsedDiagram | string, opts?: AsciiRenderOptions): string
509
+ renderMermaidASCIIWithReceipt(input: ParsedDiagram | string, opts?: AsciiRenderOptions): RenderedAscii
510
+ layoutMermaidWithReceipt(input: ParsedDiagram | string, opts?: LayoutRenderOptions): RenderedLayoutArtifact
511
+ describeOps(family: DiagramKind): Record<string, { name: string; required: boolean; type: string; note?: string }[]>
512
+ opSignatures(family: DiagramKind): string[]
513
+ }`.replace(/^[ \t]+/gm,"").replace(/; +/g,";").replace(/: +/g,":"));function Br(){return{name:"describe_sdk",title:"Describe Mermaid SDK operations",description:`Return version-matched mutation operations for one diagram family.
514
+ Use detail=signatures for the compact op menu or detail=fields (default) for exact
515
+ field types, required flags, enum values, defaults, and constraints. Call this
516
+ before build, mutate, or execute when the family schema is not already known.`,inputSchema:{type:"object",properties:{family:{type:"string",enum:[...Ve],description:"Diagram family whose mutation operations are needed."},detail:{type:"string",enum:["signatures","fields"],description:"signatures for a compact menu; fields for the complete schema (default)."}},required:["family"]},annotations:de}}function Vr(e){const n=e.family;if(typeof n!=="string"||!Hi.has(n)){throw new Error(`describe_sdk family must be one of: ${Ve.join(", ")}`)}const t=e.detail??"fields";if(t!=="signatures"&&t!=="fields"){throw new Error("describe_sdk detail must be one of: signatures, fields")}if(t==="signatures"){return{ok:true,family:n,detail:t,signatures:Ae(n)}}return{ok:true,family:n,detail:t,ops:Ee(n)}}var Xi="EXTERNAL_FAMILY_DESCRIBE_UNAVAILABLE";function Yi(e){return Object.freeze({code:Xi,capability:"describe",family:e,message:`Registered external family "${e}" has no semantic describe contract in FamilyDescriptor v2.`})}function Zi(e){return e.body.kind==="extension"}function Qi(e){return e.body.kind==="preserved"}function es(e){const n=e.format??"text";if(It(n))return n;throw new Error(`describe format must be one of: ${Te.join(", ")}`)}function $r(e,n){const t=es(n);const r=xe(e);if(!r.ok){return{ok:false,errors:r.error,...t==="text"?{text:Pt(e)}:{}}}const i=r.value;if(Qi(i)){return{ok:false,family:i.body.preservation.upstreamFamilyId??i.kind,error:{...i.body.diagnostic,preservation:i.body.preservation}}}if(Zi(i)){return{ok:false,family:i.kind,error:Yi(i.kind)}}const o=Ce(i);if(!o.ok){return{ok:false,family:i.kind,warnings:o.warnings}}if(t==="text")return{ok:true,text:Qe(i),warnings:o.warnings};if(t==="facts")return{ok:true,facts:we(i),warnings:o.warnings};return{ok:true,tree:JSON.parse(Qe(i,{format:"json"})),warnings:o.warnings}}import{createHash as ns,randomUUID as fe}from"crypto";import{closeSync as Fr,existsSync as ye,fstatSync as ts,fsyncSync as rs,lstatSync as H,mkdirSync as gn,openSync as is,readFileSync as be,readdirSync as Sn,renameSync as fn,rmdirSync as ss,unlinkSync as J,writeFileSync as yn,writeSync as os}from"fs";import{hostname as Gr,tmpdir as Kr}from"os";import{basename as as,join as ee,resolve as Fe,sep as jr}from"path";var ds=20*1024*1024;var cs=200*1024*1024;var ls=1e3;var us=60*60*1e3;var _e=".agentic-mermaid-artifacts-v1.json";var bn=".agentic-mermaid-artifacts-v1.lock";var hn=1024*1024;var ms=4096;var _n=/^[0-9a-z]+-[0-9a-f-]{36}\.[a-z0-9_-]+$/;var gs=/^store-[1-9][0-9]*-[0-9a-f-]{36}$/;var ps=/^agentic-mermaid-mcp-artifacts-[1-9][0-9]*-[0-9a-f-]{36}$/;var fs=3e4;var ys=ee(Kr(),"agentic-mermaid-mcp-artifacts");function $e(e,n){if(!Number.isSafeInteger(e)||e<=0)throw new Error(`artifact ${n} must be a positive safe integer`);return e}var kn=class{dir;maxBytes;maxTotalBytes;maxArtifacts;ttlMs;baseUrl;now;records=new Map;manifestPath;lockPath;lockToken=fe();lockFd=-1;closed=false;constructor(n={}){if(n.dir!==void 0&&n.namespaceRoot!==void 0){throw new Error("artifact dir and namespaceRoot are mutually exclusive")}this.baseUrl=Ur(n.baseUrl);this.maxBytes=$e(n.maxBytes??ds,"maxBytes");this.maxTotalBytes=$e(n.maxTotalBytes??cs,"maxTotalBytes");this.maxArtifacts=$e(n.maxArtifacts??ls,"maxArtifacts");this.ttlMs=$e(n.ttlMs??us,"ttlMs");if(this.maxBytes>this.maxTotalBytes)throw new Error("artifact maxBytes must not exceed maxTotalBytes");this.now=n.now??(()=>Date.now());if(n.dir!==void 0){this.dir=Fe(n.dir);gn(this.dir,{recursive:true,mode:448})}else{const t=Fe(n.namespaceRoot??ys);gn(t,{recursive:true,mode:448});const r=H(t);if(!r.isDirectory()||r.isSymbolicLink()){throw new Error("artifact namespace root must be a real directory")}if(n.namespaceRoot===void 0){qr(Fe(Kr()),this.now(),ps)}qr(t,this.now());this.dir=ee(t,`store-${process.pid}-${fe()}`);gn(this.dir,{mode:448})}this.manifestPath=ee(this.dir,_e);this.lockPath=ee(this.dir,bn);this.acquireOwnership();try{this.loadManifest();this.reconcileManagedFiles();this.cleanupExpired()}catch(t){this.close();throw t}}setBaseUrl(n){this.baseUrl=Ur(n)}hasBaseUrl(){return typeof this.baseUrl==="string"&&this.baseUrl.length>0}write(n,t){this.assertOpen();if(n.byteLength>this.maxBytes)throw new Error(`artifact exceeds maxBytes (${n.byteLength} > ${this.maxBytes})`);if(n.byteLength>this.maxTotalBytes)throw new Error(`artifact exceeds maxTotalBytes (${n.byteLength} > ${this.maxTotalBytes})`);this.cleanupExpired();if(this.records.size>=this.maxArtifacts)throw new Error(`artifact store exceeds maxArtifacts (${this.records.size+1} > ${this.maxArtifacts})`);const r=[...this.records.values()].reduce((k,b)=>k+b.bytes,0);if(r+n.byteLength>this.maxTotalBytes){throw new Error(`artifact store exceeds maxTotalBytes (${r+n.byteLength} > ${this.maxTotalBytes})`)}const i=Buffer.from(n);const o=pn(i);const a=Ss(t.extension);const d=this.now();const g=`${d.toString(36)}-${fe()}${a}`;const p=re(this.dir,g);const y=re(this.dir,`.${g}.${fe()}.tmp`);const f={name:g,path:p,mimeType:t.mimeType,bytes:i.length,sha256:o,createdAt:d,expiresAt:d+this.ttlMs};try{yn(y,i,{mode:384});fn(y,p);this.records.set(g,f);this.persistManifest()}catch(k){this.records.delete(g);try{J(y)}catch{}try{J(p)}catch{}throw k}return this.publicRecord(f)}read(n){this.assertOpen();let t;try{t=re(this.dir,n)}catch{return null}const r=this.records.get(n);if(!r||r.path!==t)return null;const i=this.now();if(r.expiresAt<=i){this.deleteRecord(n,t,true);return null}if(!ye(t)){this.records.delete(n);this.persistManifest();return null}const o=H(t);if(!o.isFile()||o.isSymbolicLink()||o.size!==r.bytes){this.deleteRecord(n,t,true);return null}const a=be(t);if(pn(a)!==r.sha256){this.deleteRecord(n,t,true);return null}return{path:t,bytes:a,mimeType:r.mimeType,expiresAt:r.expiresAt,cacheMaxAgeSeconds:Math.max(0,Math.floor((r.expiresAt-i)/1e3))}}cleanupExpired(){this.assertOpen();const n=this.now();let t=false;for(const[r,i]of this.records){if(i.expiresAt<=n){this.deleteRecord(r,i.path,false);t=true}}if(t)this.persistManifest()}close(){if(this.closed)return;this.closed=true;const n=this.lockFd;this.lockFd=-1;try{if(n<0||!ye(this.lockPath))return;const t=ts(n);const r=H(this.lockPath);if(!r.isFile()||r.isSymbolicLink()||t.dev!==r.dev||t.ino!==r.ino)return;const i=JSON.parse(be(this.lockPath,"utf8"));if(i.token===this.lockToken)J(this.lockPath)}catch{}finally{if(n>=0)try{Fr(n)}catch{}}}assertOpen(){if(this.closed||this.lockFd<0)throw new Error("artifact store is closed")}acquireOwnership(){let n=-1;try{n=is(this.lockPath,"wx",384);const t=JSON.stringify({schemaVersion:1,pid:process.pid,host:Gr(),token:this.lockToken});os(n,t);rs(n);this.lockFd=n}catch(t){if(n>=0){try{Fr(n)}catch{}try{J(this.lockPath)}catch{}}const r=t.code;if(r==="EEXIST"){throw new Error(`artifact directory is already owned; remove ${bn} only after confirming no server is using it`)}throw t}}reconcileManagedFiles(){for(const n of Sn(this.dir)){if(!_n.test(n)||this.records.has(n))continue;const t=re(this.dir,n);try{const r=H(t);if(r.isFile()||r.isSymbolicLink())J(t)}catch{}}}publicRecord(n){const t={name:n.name,path:n.path,mimeType:n.mimeType,bytes:n.bytes,sha256:n.sha256};if(this.baseUrl)t.url=`${this.baseUrl}/${encodeURIComponent(n.name)}`;return t}loadManifest(){if(!ye(this.manifestPath))return;const n=H(this.manifestPath);if(!n.isFile()||n.isSymbolicLink()||n.size>hn){throw new Error("artifact manifest must be a bounded regular file")}let t;try{t=JSON.parse(be(this.manifestPath,"utf8"))}catch{throw new Error("artifact manifest is not valid JSON")}if(t?.schemaVersion!==1||!Array.isArray(t.records)||t.records.length>this.maxArtifacts){throw new Error("artifact manifest has an unsupported or oversized shape")}let r=0;for(const i of t.records){if(!Jr(i)){throw new Error("artifact manifest contains an invalid record")}const o=re(this.dir,i.name);if(!ye(o))continue;const a=H(o);if(!a.isFile()||a.isSymbolicLink()||a.size!==i.bytes){throw new Error(`artifact manifest record ${i.name} does not match a regular file`)}const d=be(o);if(pn(d)!==i.sha256)throw new Error(`artifact manifest record ${i.name} failed integrity verification`);r+=i.bytes;if(r>this.maxTotalBytes)throw new Error("artifact manifest exceeds maxTotalBytes");this.records.set(i.name,{...i,path:o})}if(this.records.size!==t.records.length)this.persistManifest()}persistManifest(){const n=[...this.records.values()].sort((i,o)=>i.createdAt-o.createdAt||(i.name<o.name?-1:i.name>o.name?1:0)).map(({name:i,mimeType:o,bytes:a,sha256:d,createdAt:g,expiresAt:p})=>({name:i,mimeType:o,bytes:a,sha256:d,createdAt:g,expiresAt:p}));const t=JSON.stringify({schemaVersion:1,records:n});if(Buffer.byteLength(t)>hn)throw new Error("artifact manifest exceeds its byte budget");const r=ee(this.dir,`.${_e}.${process.pid}.${fe()}.tmp`);try{yn(r,t,{mode:384});fn(r,this.manifestPath)}finally{try{J(r)}catch{}}}deleteRecord(n,t,r){this.records.delete(n);try{J(t)}catch{}if(r)this.persistManifest()}};function qr(e,n,t=gs){let r;try{r=Sn(e)}catch{return}for(const i of r){if(!t.test(i))continue;const o=re(e,i);try{const a=H(o);if(!a.isDirectory()||a.isSymbolicLink())continue;if(n-a.mtimeMs<fs)continue;const d=ee(o,bn);if(ye(d)){const g=H(d);if(!g.isFile()||g.isSymbolicLink()||g.size>ms)continue;const p=JSON.parse(be(d,"utf8"));if(p.host!==Gr()||!Number.isSafeInteger(p.pid)||p.pid<=0)continue;if(bs(p.pid))continue;const y=H(d);if(y.dev!==g.dev||y.ino!==g.ino)continue;J(d)}hs(o,n)}catch{}}}function bs(e){try{process.kill(e,0);return true}catch(n){return n.code!=="ESRCH"}}function hs(e,n){const t=ee(e,_e);let r=[];if(ye(t)){const a=H(t);if(!a.isFile()||a.isSymbolicLink()||a.size>hn)return;const d=JSON.parse(be(t,"utf8"));if(d?.schemaVersion!==1||!Array.isArray(d.records)||d.records.some(g=>!Jr(g)))return;r=d.records}const i=[];for(const a of r){const d=re(e,a.name);if(a.expiresAt<=n){try{J(d)}catch{}continue}try{const g=H(d);if(g.isFile()&&!g.isSymbolicLink()&&g.size===a.bytes)i.push(a);else if(g.isFile()||g.isSymbolicLink())J(d)}catch{}}const o=new Set(i.map(a=>a.name));for(const a of Sn(e)){if(!_n.test(a)||o.has(a))continue;const d=re(e,a);try{const g=H(d);if(g.isFile()||g.isSymbolicLink())J(d)}catch{}}if(i.length>0){if(i.length!==r.length)ks(e,i);return}try{const a=H(t);if(a.isFile()&&!a.isSymbolicLink())J(t)}catch{}try{ss(e)}catch{}}function ks(e,n){const t=ee(e,_e);const r=ee(e,`.${_e}.${process.pid}.${fe()}.tmp`);try{yn(r,JSON.stringify({schemaVersion:1,records:n}),{mode:384});fn(r,t)}finally{try{J(r)}catch{}}}function Jr(e){if(!e||typeof e!=="object")return false;const n=e;return typeof n.name==="string"&&_n.test(n.name)&&typeof n.mimeType==="string"&&n.mimeType.length>0&&Number.isSafeInteger(n.bytes)&&n.bytes>=0&&typeof n.sha256==="string"&&/^[a-f0-9]{64}$/.test(n.sha256)&&Number.isSafeInteger(n.createdAt)&&Number.isSafeInteger(n.expiresAt)&&n.expiresAt>n.createdAt}function je(e={}){return new kn(e)}function pn(e){return ns("sha256").update(e).digest("hex")}function Ur(e){if(!e)return void 0;return e.replace(/\/+$/,"")}function Ss(e){const n=e.startsWith(".")?e:`.${e}`;const t=n.toLowerCase().replace(/[^.a-z0-9_-]/g,"");return t&&t!=="."?t:".bin"}function re(e,n){const t=as(n);if(!t||t!==n||t.includes(".."))throw new Error("invalid artifact name");const r=Fe(e,t);const i=e.endsWith(jr)?e:`${e}${jr}`;if(!r.startsWith(i))throw new Error("artifact path escaped root");return r}var Ms="2024-11-05";var xn=["2024-11-05","2025-06-18","2025-11-25","2026-07-28"];var xs=["2024-11-05"];var Xr={supportedVersions:xs};var Yr=1024*1024;var Es=3e4;var As=32;var ce=class extends Error{constructor(t,r){super(r);this.status=t}status};var Cs=[lr({sdkDeclaration:Lr}),rr(Br()),ur("local"),mr(),...pr];var Rn;var Hr=false;var ws=j.map(e=>e.narrower).join("/");var Ts=`agentic-mermaid editing server. Prefer mutate/build for ordinary edits. execute runs synchronous JavaScript against the typed mermaid.* SDK in a sandbox; async/await and Promise jobs are not supported. describe_sdk progressively discloses one family's version-matched mutation schema; call it before authoring unfamiliar ops. render_png and describe are narrow helpers. render_png can return base64, managed file paths, or managed URLs when the transport config provides an artifact store. Prefer declarative mutate/build for structured edits; they accept ordered JSON ops and verify before emitting source. Reserve execute for custom logic; narrow via ${ws}. Every built-in renderable family ships a typed path when the body narrows; only opaque fallback bodies are source-level only. Layout is deterministic; there is no layout seed (the optional style seed only re-rolls ink of styled looks, never geometry).`;var qe={protocolVersion:Ms,supportedVersions:xn,tools:Cs,instructions:Ts,handleToolCall:vs};function Zr(e,n={}){return sn(e,{supportedVersions:cr(qe,n),negotiatedVersion:n.protocolVersion,protocolEra:n.protocolEra})}async function Qr(e,n={},t={}){const r=Zr(e,t);return r.ok?on(r.message,n,qe):r.response}async function vs(e,n,t){const r=n;const i=r?.name;const o=r?.arguments??{};if(i==="describe_sdk"){try{const a=Vr(o);return K(e,a,false)}catch(a){return T(e,-32602,a instanceof Error?a.message:String(a))}}if(i==="execute"){const a=o.code;const d=o.timeoutMs;if(d!==void 0&&!ar(d)){return T(e,-32602,or)}const g=Math.min(d??Ne,t.maxSandboxTimeoutMs??Es);if(typeof a!=="string")return T(e,-32602,"execute requires `code` (string)");const p=await Ar(a,{timeoutMs:g});return K(e,p,!p.ok)}if(i==="mutate")return an(e,o,"source");if(i==="build")return an(e,o,"family");if(i==="render_png")return Os(e,o,t);if(i==="describe"){const a=o.source;if(typeof a!=="string")return T(e,-32602,"describe requires `source` (string)");try{const d=$r(a,o);return K(e,d,!d.ok)}catch(d){const g=d instanceof Error?d.message:String(d);const p={ok:false,error:{code:"DESCRIBE_FAILED",message:g}};return K(e,p,true)}}return T(e,-32602,`Unknown tool: ${i??"<none>"}`)}function Os(e,n,t){const r=n.source;const i=n.output??"base64";if(typeof r!=="string")return T(e,-32602,"render_png requires `source` (string)");if(!tr(i))return T(e,-32602,`render_png output must be one of: ${Pe.join(", ")}`);try{const o=[];const a=kt(n);const d=Ft(r,{...dr(n),...a,onWarning:k=>o.push(k)});const g=[...At(r),...o].filter((k,b,w)=>w.findIndex(x=>JSON.stringify(x)===JSON.stringify(k))===b);if(i==="base64"){const k=Buffer.from(d.png).toString("base64");const b={ok:true,png_base64:k,receipt:d.receipt,runtime:d.runtime,warnings:g};return K(e,b,false)}const p=t.artifactStore??Is();if(i==="url"&&!p.hasBaseUrl())return T(e,-32602,"render_png output=url requires an HTTP/SSE artifact base URL");const y=p.write(d.png,{extension:".png",mimeType:"image/png"});const f={ok:true,artifact:Ds(y,i),receipt:d.receipt,runtime:d.runtime,warnings:g};return K(e,f,false)}catch(o){const a={ok:false,error:ve(o)};return K(e,a,true)}}function Ds(e,n){const t={mimeType:e.mimeType,bytes:e.bytes,sha256:e.sha256};if(n==="url")return{...t,url:e.url};return{...t,path:e.path}}function Is(){Rn??=je();if(!Hr){Hr=true;process.once("exit",()=>Rn?.close())}return Rn}function Ps(e){if(!e||typeof e!=="object"||Array.isArray(e))return void 0;const n=e;if(n.jsonrpc!=="2.0"||n.method!=="notifications/cancelled"||Object.prototype.hasOwnProperty.call(n,"id"))return void 0;const t=n.params;if(!t||typeof t!=="object"||Array.isArray(t))return void 0;const r=t.requestId;return typeof r==="string"||typeof r==="number"&&Number.isSafeInteger(r)?r:void 0}function Ns(e){if(!e||typeof e!=="object"||Array.isArray(e))return void 0;const n=e;if(n.jsonrpc!=="2.0"||typeof n.method!=="string"||!Object.prototype.hasOwnProperty.call(n,"id"))return void 0;const t=n.id;return typeof t==="string"||typeof t==="number"&&Number.isSafeInteger(t)?t:void 0}function Mn(e){return`${typeof e}:${String(e)}`}function Ls(e,n,t=on){let r=null;let i=null;let o=Promise.resolve();const a=new Set;const d=new Map;const g=(k,b)=>{if(k===void 0)return;const w=Mn(k);const x=d.get(w)??new Set;x.add(b);d.set(w,x)};const p=(k,b)=>{if(k===void 0)return;const w=Mn(k);const x=d.get(w);x?.delete(b);if(x?.size===0)d.delete(w)};const y=(k,b,w)=>{if(k&&!w?.aborted)n(De(k,b)+"\n")};const f=k=>{let b;let w;try{b=Oe(k);w=JSON.parse(b.body)}catch(E){n(JSON.stringify(T(null,-32700,`parse error: ${E instanceof Error?E.message:String(E)}`))+"\n");return}const x=Ps(w);if(x!==void 0){for(const E of d.get(Mn(x))??[])E.abort();return}const P=Ns(w);const O=new AbortController;g(P,O);const L=o.then(async()=>{const E=i==="legacy"?{protocolEra:"legacy",protocolVersion:r,supportedVersions:r?[r]:void 0}:i==="modern"?{protocolEra:"modern",supportedVersions:xn}:{};const q=Zr(w,E);if(q.ok&&i===null&&w.method==="initialize"){const z=O.signal.aborted?null:await t(q.message,{...e,signal:O.signal},qe);if(!O.signal.aborted&&z?.result&&typeof z.result==="object"){const v=z.result.protocolVersion;if(typeof v==="string"&&xn.includes(v)){r=v;i="legacy"}}y(z,b.ids,O.signal);return{handled:true,admission:q}}if(q.ok&&i===null&&q.message.protocol.era==="modern"){i="modern"}return{handled:false,admission:q}});o=L.then(()=>void 0,()=>void 0);let B;B=L.then(async E=>{if(E.handled)return;const q=E.admission.ok?O.signal.aborted?null:await t(E.admission.message,{...e,signal:O.signal},qe):E.admission.response;y(q,b.ids,O.signal)}).catch(E=>{y(T(P??null,-32603,`internal error: ${E instanceof Error?E.message:String(E)}`),b.ids,O.signal)}).finally(()=>{p(P,O);a.delete(B)});a.add(B)};return{accept:f,async drain(){await o;while(a.size>0)await Promise.allSettled([...a])}}}async function fa(e={}){const n=je({dir:e.artifactDir,maxBytes:e.maxArtifactBytes,maxTotalBytes:e.maxArtifactTotalBytes,maxArtifacts:e.maxArtifacts,ttlMs:e.artifactTtlMs});const t=Ls({artifactStore:n,maxSandboxTimeoutMs:e.maxSandboxTimeoutMs},i=>process.stdout.write(i));process.stdin.setEncoding("utf8");let r="";process.stdin.on("data",i=>{r+=i;let o;while((o=r.indexOf("\n"))>=0){const a=r.slice(0,o).trim();r=r.slice(o+1);if(!a)continue;t.accept(a)}});try{await new Promise(i=>{process.stdin.on("end",()=>i());process.stdin.on("close",()=>i())});await t.drain()}finally{n.close()}}async function Bs(e={}){const n=e.host??"127.0.0.1";const t=e.port??3e3;if(!Vs(n)&&!e.authToken)throw new Error("HTTP MCP remote bind requires --auth-token");const r=new Map;let i="";const o=e.maxRpcBodyBytes??Yr;const a=e.maxSseSessions??As;const d=$s(e.publicUrl,"publicUrl");if(!Number.isInteger(a)||a<=0)throw new Error("maxSseSessions must be a positive integer");const g=je({dir:e.artifactDir,maxBytes:e.maxArtifactBytes,maxTotalBytes:e.maxArtifactTotalBytes,maxArtifacts:e.maxArtifacts,ttlMs:e.artifactTtlMs});const p={artifactStore:g,maxSandboxTimeoutMs:e.maxSandboxTimeoutMs};const y=Rs(async(f,k)=>{try{const b=new Ue(f.url??"/",i||zr(n,t||0));if(f.method==="GET"&&b.pathname==="/health")return Y(k,200,{ok:true});if(f.method==="GET"&&b.pathname==="/sse"){if(!En(f,k,i,d,e.authToken))return;return Fs(f,k,r,d??i,a)}if(f.method==="POST"&&b.pathname==="/message"){if(!Wr(f,k,i,d,e.authToken))return;return await js(f,k,r,p,o)}if(f.method==="POST"&&b.pathname==="/rpc"){if(!Wr(f,k,i,d,e.authToken))return;return await qs(f,k,p,o)}if(f.method==="GET"&&b.pathname.startsWith("/artifacts/")){if(!En(f,k,i,d,e.authToken))return;return Us(k,g,decodeURIComponent(b.pathname.slice("/artifacts/".length)))}return Y(k,404,{ok:false,error:"not found"})}catch(b){if(b instanceof ce)return Y(k,b.status,{ok:false,error:b.message});return Y(k,500,{ok:false,error:b instanceof Error?b.message:String(b)})}});try{await new Promise((k,b)=>{y.once("error",b);y.listen(t,n,()=>{y.off("error",b);k()})});const f=y.address();if(!f||typeof f==="string")throw new Error("HTTP MCP server did not expose a TCP address");i=zr(n,f.port);g.setBaseUrl(e.publicUrl??`${i}/artifacts`)}catch(f){g.close();try{y.close()}catch{}throw f}return{server:y,url:i,artifactStore:g,close:()=>new Promise((f,k)=>{for(const b of r.values())b.end();r.clear();y.close(b=>{g.close();if(b)k(b);else f()})})}}async function ya(e={}){const n=await Bs(e);process.stderr.write(`agentic-mermaid-mcp HTTP/SSE listening at ${n.url} (SSE: ${n.url}/sse, plain JSON-RPC: ${n.url}/rpc)
517
+ `);return new Promise(t=>{const r=()=>{n.close().finally(t)};process.once("SIGINT",r);process.once("SIGTERM",r)})}function Vs(e){const n=e.toLowerCase();if(n==="127.0.0.1"||n==="localhost")return true;const t=ei(e);return t==="::1"||t==="::ffff:7f00:1"}function ei(e){const n=e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e;if(!n.includes(":"))return void 0;try{const t=new Ue(`http://[${n}]/`).hostname;return t.slice(1,-1).toLowerCase()}catch{return void 0}}function zr(e,n){const t=ei(e);const r=t?`[${t==="::"?"::1":t}]`:e==="0.0.0.0"?"127.0.0.1":e;return`http://${r}:${n}`}function $s(e,n){if(!e)return void 0;let t;try{t=new Ue(e)}catch{throw new Error(`${n} must be an absolute http(s) URL`)}if(t.protocol!=="http:"&&t.protocol!=="https:"){throw new Error(`${n} must be an absolute http(s) URL`)}return t.origin}function En(e,n,t,r,i){const o=e.headers.origin;if(o&&o!==t&&o!==r){Y(n,403,{ok:false,error:"origin not allowed"});return false}if(i&&e.headers.authorization!==`Bearer ${i}`){Y(n,401,{ok:false,error:"missing or invalid bearer token"});return false}return true}function Wr(e,n,t,r,i){if(!En(e,n,t,r,i))return false;if(!Kt(String(e.headers["content-type"]??""))){Y(n,415,{ok:false,error:"HTTP MCP JSON-RPC requires content-type application/json"});return false}return true}function Fs(e,n,t,r,i){if(t.size>=i){Y(n,503,{ok:false,error:`SSE session limit reached (${i})`});return}const o=_s();t.set(o,n);n.writeHead(200,{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"});n.write(`event: endpoint
518
+ data: ${r}/message?sessionId=${encodeURIComponent(o)}
519
+
520
+ `);const a=setInterval(()=>n.write(": keepalive\n\n"),25e3);e.on("close",()=>{clearInterval(a);t.delete(o)})}async function js(e,n,t,r,i){const o=new Ue(e.url??"/","http://localhost");const a=o.searchParams.get("sessionId")??"";const d=t.get(a);if(!d)return Y(n,404,{ok:false,error:"unknown sessionId"});const g=await ni(e,i);const p=Oe(g);let y;try{y=JSON.parse(p.body)}catch{throw new ce(400,"invalid JSON-RPC body")}const f=await Qr(y,r,Xr);if(f){d.write(`event: message
521
+ data: ${De(f,p.ids)}
522
+
523
+ `);return Y(n,202,{ok:true})}n.writeHead(202);n.end()}async function qs(e,n,t,r){const i=await ni(e,r);const o=Oe(i);let a;try{a=JSON.parse(o.body)}catch{throw new ce(400,"invalid JSON-RPC body")}const d=await Qr(a,t,Xr);if(d===null){n.writeHead(202);n.end();return}Y(n,200,d,o.ids)}function Us(e,n,t){const r=n.read(t);if(!r)return Y(e,404,{ok:false,error:"artifact not found"});e.writeHead(200,{"Content-Type":r.mimeType,"Content-Length":r.bytes.length,"Cache-Control":`private, max-age=${r.cacheMaxAgeSeconds}, immutable`});e.end(r.bytes)}function Y(e,n,t,r=[]){const i=De(t,r);e.writeHead(n,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(i)});e.end(i)}async function ni(e,n=Yr){const t=Number(e.headers["content-length"]??0);if(Number.isFinite(t)&&t>n)throw new ce(413,`request body exceeds ${n} bytes`);const r=[];let i=0;for await(const o of e){const a=Buffer.isBuffer(o)?o:Buffer.from(String(o));i+=a.byteLength;if(i>n)throw new ce(413,`request body exceeds ${n} bytes`);r.push(a)}return Buffer.concat(r).toString("utf8")}export{xs as HTTP_SSE_PROTOCOL_VERSIONS,Cs as LOCAL_TOOLS,As as MAX_SSE_SESSIONS,xn as STDIO_PROTOCOL_VERSIONS,Ls as createStdioMessageProcessor,Qr as handleRequest,ni as readRequestBody,ya as runHttp,fa as runStdio,Bs as startHttpServer};
524
+ //# sourceMappingURL=server-5NEOHOFS.js.map