collabmd 0.1.49 → 0.1.52

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 (750) hide show
  1. package/README.md +11 -660
  2. package/bin/collabmd.js +36 -20
  3. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BEz2BKN1.js +1 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  6. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  12. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  21. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  27. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  30. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  33. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  36. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  45. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  48. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  54. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  59. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  63. package/dist/client/assets/Middleware-DUgFSleI.js +1 -0
  64. package/dist/client/assets/_basePickBy-QJXUw_pr.js +1 -0
  65. package/dist/client/assets/_baseUniq-DR4vVjyC.js +1 -0
  66. package/dist/client/assets/abnfDiagram-O67JEVCF-Dwt6a0Ds.js +1 -0
  67. package/dist/client/assets/abnfDiagram-VCTEODGH-DxNxad6-.js +1 -0
  68. package/dist/client/assets/ar-SA-5WIASEJP-Di7OimCN.js +10 -0
  69. package/dist/client/assets/architecture-7GRP2DOG-BBwRXFv3.js +1 -0
  70. package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +1 -0
  71. package/dist/client/assets/architectureDiagram-5GKGNRK7-C1uvg5id.js +36 -0
  72. package/dist/client/assets/architectureDiagram-NJMV4G6O-D5CGiX3G.js +36 -0
  73. package/dist/client/assets/az-AZ-V5EUQD6C-C19OGTT_.js +1 -0
  74. package/dist/client/assets/{babel-CY5KOv-I.js → babel-Bi_28hhi.js} +1 -1
  75. package/dist/client/assets/band-D-Cum8PO.js +1 -0
  76. package/dist/client/assets/bg-BG-EXASCMTR-BIt0xWyb.js +5 -0
  77. package/dist/client/assets/blockDiagram-BEXU5L5S-BgTM0var.js +140 -0
  78. package/dist/client/assets/blockDiagram-I7D4REHJ-B2YonsoG.js +129 -0
  79. package/dist/client/assets/bn-BD-U4SYNFCO-CdNaPy4Q.js +3 -0
  80. package/dist/client/assets/bn-IN-HKDJIITE-CdNaPy4Q.js +3 -0
  81. package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-BBqQnUEb.js → browser-BKLM0ThC-IxjwuOIz-C0mP17s1.js} +1 -1
  82. package/dist/client/assets/{browser-utils-DbXSMI-6.js → browser-utils-vlHL9goC.js} +1 -1
  83. package/dist/client/assets/{c4Diagram-7LVT6UL2-yD2poxqw.js → c4Diagram-7LVT6UL2-r4IwomZm.js} +2 -2
  84. package/dist/client/assets/c4Diagram-YGBWAQC7-_xZPrNkB.js +38 -0
  85. package/dist/client/assets/ca-ES-2KGUU5XB-C9t-c0cH.js +8 -0
  86. package/dist/client/assets/channel-CgcHBnmr.js +1 -0
  87. package/dist/client/assets/chunk-2E4U76K2-CIQUuV9n.js +1 -0
  88. package/dist/client/assets/chunk-2Q5K7J3B-BMFG3ur0.js +1 -0
  89. package/dist/client/assets/{chunk-2ZTRR5NV-C2qZJila.js → chunk-2ZTRR5NV-CnDP55cn.js} +1 -1
  90. package/dist/client/assets/chunk-2ZTRR5NV-DcPRfelM.js +2 -0
  91. package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +1 -0
  92. package/dist/client/assets/{chunk-3Z5EZCMW-DMniOlPd.js → chunk-3Z5EZCMW-BAnA6eQ7.js} +1 -1
  93. package/dist/client/assets/chunk-3Z5EZCMW-Yx4Q5AcN.js +1 -0
  94. package/dist/client/assets/chunk-4HAMMTFA-q0ldNVvr.js +62 -0
  95. package/dist/client/assets/chunk-4SOEAONT-C3fufoVl.js +40 -0
  96. package/dist/client/assets/chunk-5DYCD2WN-BKWCKnK-.js +1 -0
  97. package/dist/client/assets/{chunk-5V3GS4D5-i-ZDOEnP.js → chunk-5V3GS4D5-B5uC2oxu.js} +1 -1
  98. package/dist/client/assets/chunk-5V3GS4D5-BR7kgIgJ.js +1 -0
  99. package/dist/client/assets/chunk-5VM5RSS4-hE9rU_bl.js +15 -0
  100. package/dist/client/assets/chunk-6AEJRKK7-DTVZj5bY.js +1 -0
  101. package/dist/client/assets/{chunk-6AZGARVD-BB6FqMl-.js → chunk-6AZGARVD--pTGpDnx.js} +1 -1
  102. package/dist/client/assets/chunk-6AZGARVD-CnZDr4Cj.js +1 -0
  103. package/dist/client/assets/{chunk-6EIED4P4-DdUJkP0f.js → chunk-6EIED4P4-Bp8dpTvX.js} +1 -1
  104. package/dist/client/assets/chunk-6EIED4P4-DBVWq7Tz.js +1 -0
  105. package/dist/client/assets/{chunk-6K3QC6MW-CqVsVn-y.js → chunk-6K3QC6MW-DGVRzL6v.js} +1 -1
  106. package/dist/client/assets/chunk-6K3QC6MW-JnuvEGV4.js +1 -0
  107. package/dist/client/assets/{chunk-6TQVIW2G-DKlLbNIP.js → chunk-6TQVIW2G-BSj0l_pu.js} +1 -1
  108. package/dist/client/assets/chunk-6TQVIW2G-DgBX-Pv0.js +1 -0
  109. package/dist/client/assets/chunk-742MDFTN-D1nh6vNv.js +1 -0
  110. package/dist/client/assets/{chunk-747NJXEK-BFkZPlab.js → chunk-747NJXEK-BjqqAsS9.js} +1 -1
  111. package/dist/client/assets/chunk-747NJXEK-Cur1aosP.js +2 -0
  112. package/dist/client/assets/chunk-75Z2AOVW-DitkSoSG.js +2 -0
  113. package/dist/client/assets/chunk-7INBJB4K-CDmiHbaX.js +62 -0
  114. package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +213 -0
  115. package/dist/client/assets/chunk-7PRAP22T-9uTvtc_-.js +1 -0
  116. package/dist/client/assets/{chunk-CLGD4ZFX-BMeArk03.js → chunk-CLGD4ZFX-BfYJtJm1.js} +1 -1
  117. package/dist/client/assets/chunk-DU6HZSFF-CWlP1Dk_.js +125 -0
  118. package/dist/client/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  119. package/dist/client/assets/chunk-DYU5D34O-DN0WQZBm.js +1 -0
  120. package/dist/client/assets/{chunk-F27PBJKO-D4xNct1r.js → chunk-F27PBJKO-DPcsPcEs.js} +1 -1
  121. package/dist/client/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-Dmmo5Kak.js} +9 -9
  122. package/dist/client/assets/chunk-FOHPRMQF-DzxwRta7.js +161 -0
  123. package/dist/client/assets/chunk-GMAD6QVW-Bgk8qnty.js +8 -0
  124. package/dist/client/assets/chunk-GNY47TPC-CTrH5O5R.js +1 -0
  125. package/dist/client/assets/{chunk-SVP7TREG-DB485R5x.js → chunk-GTNCS2PH-ChgkzEIi.js} +1 -1
  126. package/dist/client/assets/chunk-GVQU2GXP-CQ8cl-Uu.js +1 -0
  127. package/dist/client/assets/chunk-GWA4HPMP-CGmv2yIq.js +1 -0
  128. package/dist/client/assets/{chunk-I5DQTOEV-Hm2LfiYI.js → chunk-I5DQTOEV-B98XA8VK.js} +1 -1
  129. package/dist/client/assets/chunk-I5DQTOEV-aBZooNp1.js +1 -0
  130. package/dist/client/assets/{chunk-ICYGCRZG-749o-pGJ.js → chunk-ICYGCRZG-D97UeqJs.js} +1 -1
  131. package/dist/client/assets/chunk-ICYGCRZG-odvlDZyA.js +1 -0
  132. package/dist/client/assets/{chunk-IH6LHLGP-CC6I9F3i.js → chunk-IH6LHLGP-BNevEHZK.js} +1 -1
  133. package/dist/client/assets/chunk-IH6LHLGP-CvXe34hB.js +1 -0
  134. package/dist/client/assets/{chunk-IMKFNOWR-D8jEuU3Q.js → chunk-IMKFNOWR-CBqxfpcP.js} +2 -2
  135. package/dist/client/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  136. package/dist/client/assets/chunk-JWPE2WC7-GDilnS5Y.js +1 -0
  137. package/dist/client/assets/{chunk-KI3K4JFJ-Rma-0k_M.js → chunk-KI3K4JFJ-D5XCPRZv.js} +1 -1
  138. package/dist/client/assets/chunk-KI3K4JFJ-FTtDwx3-.js +1 -0
  139. package/dist/client/assets/chunk-L3NEJ4N5-BflzkdTI.js +1 -0
  140. package/dist/client/assets/{chunk-LNGE3PJU-DWpGwHrW.js → chunk-LNGE3PJU-5-SxdO55.js} +1 -1
  141. package/dist/client/assets/chunk-LNGE3PJU-5nWSl6jJ.js +34 -0
  142. package/dist/client/assets/chunk-MBY4JIJT-DTJ4UcAm.js +8 -0
  143. package/dist/client/assets/chunk-NETBCI7D-CmUwDWUZ.js +1 -0
  144. package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +126 -0
  145. package/dist/client/assets/chunk-OSK3NFVY-DqeKV_pg.js +10 -0
  146. package/dist/client/assets/{chunk-OUJLGHUK-D0j2JRSg.js → chunk-OUJLGHUK-75UXlPjl.js} +1 -1
  147. package/dist/client/assets/chunk-OUJLGHUK-DA95-S9B.js +2 -0
  148. package/dist/client/assets/{chunk-P2QGCYS3-Oag_FdCq.js → chunk-P2QGCYS3-BA--DhpW.js} +1 -1
  149. package/dist/client/assets/chunk-POPQ4Y6H-V_NEc45n.js +1 -0
  150. package/dist/client/assets/chunk-PWAF6VOD-D_kLse-N.js +1 -0
  151. package/dist/client/assets/{chunk-FLYJHZSQ-Be7lKF17.js → chunk-RUX4WMZV-BGnd3s_C.js} +4 -4
  152. package/dist/client/assets/{chunk-SHT3W25Y-BiQGljao.js → chunk-SHT3W25Y-YM3S-A_M.js} +5 -5
  153. package/dist/client/assets/chunk-SVP7TREG-DdNhDOmW.js +88 -0
  154. package/dist/client/assets/{chunk-TICWLB2K-8rAVvoS3.js → chunk-TICWLB2K-BGGgCr4x.js} +3 -3
  155. package/dist/client/assets/chunk-TLUHSLCS-DCZhIDYA.js +1 -0
  156. package/dist/client/assets/chunk-UA2S7LBM-DicYDjDM.js +1 -0
  157. package/dist/client/assets/{chunk-UY3FDG6J-CnmaAkG5.js → chunk-UY3FDG6J-DqSM_0FB.js} +1 -1
  158. package/dist/client/assets/chunk-UY3FDG6J-QT-rkt0y.js +1 -0
  159. package/dist/client/assets/chunk-WEXAMYUT-DDlVNp8J.js +1 -0
  160. package/dist/client/assets/chunk-X3CZISLH-BixgQztF.js +1 -0
  161. package/dist/client/assets/chunk-X3CZISLH-DwWpRaN8.js +1 -0
  162. package/dist/client/assets/{chunk-XHIXRSVI-BFQ6B8BE.js → chunk-XHIXRSVI-BSN7JlfK.js} +1 -1
  163. package/dist/client/assets/chunk-XHIXRSVI-DN_fEwws.js +1 -0
  164. package/dist/client/assets/chunk-XXDRQBXY-C7hQHDmQ.js +1 -0
  165. package/dist/client/assets/{chunk-XXDRQBXY-BvKO0v-W.js → chunk-XXDRQBXY-CdRN9Akd.js} +1 -1
  166. package/dist/client/assets/chunk-Y2CYZVJY-BbRBGnmc.js +1 -0
  167. package/dist/client/assets/chunk-Z7XXMR3K-P4Vaq8hD.js +10 -0
  168. package/dist/client/assets/chunk-ZIGJFQKS-b8OUHKK5.js +2 -0
  169. package/dist/client/assets/classDiagram-ZZMXUADV-QLbh_Nkf.js +1 -0
  170. package/dist/client/assets/classDiagram-v2-NBCMYWYE-3TQORq33.js +217 -0
  171. package/dist/client/assets/classDiagram-v2-VYDZK3BY-QLbh_Nkf.js +1 -0
  172. package/dist/client/assets/clone-C1hp9FUh.js +1 -0
  173. package/dist/client/assets/comment-markdown-renderer-Bxi_JRSR.js +1 -0
  174. package/dist/client/assets/comment-thread-store-CHvy8GF8.js +1 -0
  175. package/dist/client/assets/comment-threads-nJhK1yfc.js +4 -0
  176. package/dist/client/assets/cose-bilkent-JH36ORCC-Czr0rwGr.js +1 -0
  177. package/dist/client/assets/cose-bilkent-JH36ORCC-DLmEf9HS.js +1 -0
  178. package/dist/client/assets/cs-CZ-VUCGPRML-BfCoYAgj.js +7 -0
  179. package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +1 -0
  180. package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +1 -0
  181. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DTnLZaO7.js +62 -0
  182. package/dist/client/assets/cynefinDiagram-VND7K2PF-DwfMZ3vk.js +62 -0
  183. package/dist/client/assets/cytoscape-cose-bilkent-NdTYBUiT.js +1 -0
  184. package/dist/client/assets/cytoscape-fcose-DE9_QRG_.js +1 -0
  185. package/dist/client/assets/cytoscape.esm-EK2DW5Qr.js +321 -0
  186. package/dist/client/assets/da-DK-NNDP2IVP-DBw9ZNTR.js +2 -0
  187. package/dist/client/assets/dagre-6A5THRUB-DewyAGK6.js +4 -0
  188. package/dist/client/assets/dagre-D7FiCLLP.js +1 -0
  189. package/dist/client/assets/{dagre-GXQ25YYZ-Cr67wLpQ.js → dagre-GXQ25YYZ-Vtyx08Qh.js} +2 -2
  190. package/dist/client/assets/de-CH-I7RAVIZN-DYW18Vsr.js +11 -0
  191. package/dist/client/assets/de-DE-WBQ3DQLR-DYW18Vsr.js +11 -0
  192. package/dist/client/assets/deferred-collab-D4cxEdad.css +1 -0
  193. package/dist/client/assets/deferred-git-BHKtkFYi.css +1 -0
  194. package/dist/client/assets/deferred-preview-BAXYgf4T.css +1 -0
  195. package/dist/client/assets/diagram-22UHCM2B-DbZirFfl.js +200 -0
  196. package/dist/client/assets/diagram-3UASUU5V-DmhdYv6_.js +24 -0
  197. package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +3 -0
  198. package/dist/client/assets/diagram-CDSNMT55-D_qyS11R.js +30 -0
  199. package/dist/client/assets/diagram-MLGK6HIB-DIBG6Ivu.js +24 -0
  200. package/dist/client/assets/diagram-MPIPVDR6-D9XsALDV.js +41 -0
  201. package/dist/client/assets/{diagram-S7CK7UJ4-DywERe__.js → diagram-S7CK7UJ4-CGTzfo2f.js} +3 -3
  202. package/dist/client/assets/diagram-UQ7AKVKN-CWZS8QtB.js +41 -0
  203. package/dist/client/assets/{diagram-VSXAHHWV-0H1a61Bn.js → diagram-VSXAHHWV-DaO1nOZF.js} +3 -3
  204. package/dist/client/assets/diagram-VX7I27RA-B54P6Cyf.js +24 -0
  205. package/dist/client/assets/diagram-Z3DM3KII-Cl2EXiXp.js +24 -0
  206. package/dist/client/assets/direct-engine-DdrQKpgq-4QysbH_V.js +5 -0
  207. package/dist/client/assets/dist-B7fBbwrO.js +1 -0
  208. package/dist/client/assets/{dist-DGEbEfw4.js → dist-BVCNc-Es.js} +1 -1
  209. package/dist/client/assets/dist-BYBF4LtZ.js +1 -0
  210. package/dist/client/assets/{dist-TW8iFRyW.js → dist-B_1hMrc6.js} +1 -1
  211. package/dist/client/assets/{dist-DVy5woUy.js → dist-BfpAc922.js} +1 -1
  212. package/dist/client/assets/dist-BnVaoRgZ.js +1 -0
  213. package/dist/client/assets/dist-Bog8M5U3.js +13 -0
  214. package/dist/client/assets/{dist-jVU5Be5P.js → dist-CAG5sIOj.js} +1 -1
  215. package/dist/client/assets/{dist-LQ4kDCKz.js → dist-CKf7LlAo.js} +1 -1
  216. package/dist/client/assets/{dist-BeajGMhO.js → dist-CUsXdnU4.js} +1 -1
  217. package/dist/client/assets/{dist-Tw-Fxpeb.js → dist-CXOUa90Q.js} +1 -1
  218. package/dist/client/assets/dist-CYMCikZo.js +1 -0
  219. package/dist/client/assets/dist-CYfPeupF.js +1 -0
  220. package/dist/client/assets/dist-Ch6Sr9KF.js +28 -0
  221. package/dist/client/assets/dist-Ck-B8onw.js +2 -0
  222. package/dist/client/assets/dist-CrkYYcOU.js +1 -0
  223. package/dist/client/assets/{dist-D5wCC32z.js → dist-CsQTfQFi.js} +1 -1
  224. package/dist/client/assets/dist-Cu5Ze2cs.js +6 -0
  225. package/dist/client/assets/{dist-C5NgpdG5.js → dist-CvVoyTRF.js} +1 -1
  226. package/dist/client/assets/{dist-GvvCNBe4.js → dist-D4kDR0g8.js} +1 -1
  227. package/dist/client/assets/dist-D8LnhZzy.js +1 -0
  228. package/dist/client/assets/{dist-D3fehAZ2.js → dist-DGa-2MNX.js} +2 -2
  229. package/dist/client/assets/dist-DI6c02Da.js +39 -0
  230. package/dist/client/assets/{dist-BPHLJ09L.js → dist-DNONgI1P.js} +2 -2
  231. package/dist/client/assets/{dist-C0G3AaXG.js → dist-DVBYH83t.js} +1 -1
  232. package/dist/client/assets/dist-DX6qtdxv.js +1 -0
  233. package/dist/client/assets/{dist-DzNmC81X.js → dist-Da-jLrCf.js} +1 -1
  234. package/dist/client/assets/dist-DofvCYzJ.js +1 -0
  235. package/dist/client/assets/{dist-CdmKGRGr.js → dist-Dx37MHWs.js} +1 -1
  236. package/dist/client/assets/dist-GTGhtpyW.js +9 -0
  237. package/dist/client/assets/{dist-BK9QvQrc.js → dist-W0FoeIxk.js} +9 -9
  238. package/dist/client/assets/{dist-mj2Ht75J.js → dist-Y6zYRI-A.js} +1 -1
  239. package/dist/client/assets/{dist-netZOQtD.js → dist-jVKfryIL.js} +1 -1
  240. package/dist/client/assets/{dist-DuH3ZrHo.js → dist-zHDLm1oE.js} +1 -1
  241. package/dist/client/assets/document-formatter-gO8qM2qY.js +1 -0
  242. package/dist/client/assets/drawioEditor-DCkWweiy.js +9 -0
  243. package/dist/client/assets/duration-BiuFXtXd.js +1 -0
  244. package/dist/client/assets/ebnfDiagram-PWID7BFC-PfC84FyI.js +1 -0
  245. package/dist/client/assets/ebnfDiagram-ZINNZB2B-DYvm_QtE.js +1 -0
  246. package/dist/client/assets/editor-session-DxRyr4EM.js +14 -0
  247. package/dist/client/assets/el-GR-TYQHVGXW-Dx82YYAS.js +7 -0
  248. package/dist/client/assets/elk-276RUBZZ-B8LB3Pac.js +27 -0
  249. package/dist/client/assets/embedded-editor-base-elU0Avik.css +1 -0
  250. package/dist/client/assets/{embedpdf-DA4bA119-BPqZxwjc.js → embedpdf-DA4bA119-DsoNiPlQ.js} +4 -5
  251. package/dist/client/assets/{embedpdf-BmE13ZZ0.js → embedpdf-DyOonRvx.js} +1 -1
  252. package/dist/client/assets/{en-SJ2YIMFF-CJBL3nkq.js → en-GNC3RJIS-CEy_oGTd.js} +1 -1
  253. package/dist/client/assets/erDiagram-OPXOYQCR-o8GRv8A_.js +99 -0
  254. package/dist/client/assets/{erDiagram-RLTQ6QDP-CbrDdd5P.js → erDiagram-RLTQ6QDP-C9cJl5NB.js} +2 -2
  255. package/dist/client/assets/es-ES-JEUOREKJ-Rx0NUQDl.js +12 -0
  256. package/dist/client/assets/esm-BzZ1JFVo.js +65 -0
  257. package/dist/client/assets/{estree-CuT_pB8K.js → estree-DCT3Jm65.js} +4 -4
  258. package/dist/client/assets/eu-ES-SO5DEEAN-CDYm-BcK.js +8 -0
  259. package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +1 -0
  260. package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +1 -0
  261. package/dist/client/assets/excalidraw-element-link-CGZ5934B.js +7 -0
  262. package/dist/client/assets/{excalidrawEditor-BbSbI80a.css → excalidrawEditor-BCTFp_CV.css} +1 -1
  263. package/dist/client/assets/excalidrawEditor-BVfSxjSO.js +9 -0
  264. package/dist/client/assets/export-page-BCo_e15t.js +46 -0
  265. package/dist/client/assets/exportDocument-Ba-n1X4U.css +1 -0
  266. package/dist/client/assets/exportDocument-DP6oE_or.js +2 -0
  267. package/dist/client/assets/fa-IR-I4JNTJHK-CFtHZqoT.js +9 -0
  268. package/dist/client/assets/fi-FI-REAEF6HQ-BIpjJqIb.js +6 -0
  269. package/dist/client/assets/file-search-3hYF4cYa.js +1 -0
  270. package/dist/client/assets/flowDiagram-HODETNUW-Bq4470NR.js +1 -0
  271. package/dist/client/assets/flowDiagram-KWPJA3E3-DQG9qGiU.js +1 -0
  272. package/dist/client/assets/forth-D6RzAl64.js +1 -0
  273. package/dist/client/assets/fr-FR-SUCL7J6B-DGAKE8jH.js +12 -0
  274. package/dist/client/assets/ganttDiagram-EL5Y4UJY-x40PW0Ah.js +292 -0
  275. package/dist/client/assets/ganttDiagram-FUAMR5RP-BQpsI7gQ.js +292 -0
  276. package/dist/client/assets/gitGraph-4MIJSDKK-B-rpDYbz.js +1 -0
  277. package/dist/client/assets/gitGraph-4MIJSDKK-ZaBIE4Lb.js +1 -0
  278. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-ahsNaZsp.js +106 -0
  279. package/dist/client/assets/gitGraphDiagram-X574FWY7-wbs_2m9f.js +106 -0
  280. package/dist/client/assets/gl-ES-KHCSOGVH-DWKh0CMu.js +6 -0
  281. package/dist/client/assets/graphlib-C9Tl7QrK.js +1 -0
  282. package/dist/client/assets/he-IL-JYXVXV2Q-zqbcM-4g.js +9 -0
  283. package/dist/client/assets/hi-IN-BU52H3BO-CY8v6eG9.js +3 -0
  284. package/dist/client/assets/highlight-theme-CzNkO-IJ.js +1 -0
  285. package/dist/client/assets/{html-Cdnr2qzU.js → html-CBXMuS97.js} +2 -2
  286. package/dist/client/assets/html-DTuc_pxj.js +1 -0
  287. package/dist/client/assets/hu-HU-OWADXDQ3-CEl6Udfh.js +3 -0
  288. package/dist/client/assets/id-ID-2WY7E4VX-CCAeQpPr.js +8 -0
  289. package/dist/client/assets/image-EJJKRVD3-BQfi5nWJ.js +1 -0
  290. package/dist/client/assets/{image-blob-reduce.esm-Dj7YBvMv.js → image-blob-reduce.esm-BFq-Mx5V.js} +2 -2
  291. package/dist/client/assets/index-BxAuGDoN.css +1 -0
  292. package/dist/client/assets/index-uw9O0z1c.js +1112 -0
  293. package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +1 -0
  294. package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +1 -0
  295. package/dist/client/assets/infoDiagram-27XIBGKW-MrZyptIy.js +2 -0
  296. package/dist/client/assets/infoDiagram-VRGFBTTK-KkUjDRAQ.js +2 -0
  297. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BMPC6hfp.js → ishikawaDiagram-5VMMS53U-Bnt9yM0O.js} +2 -2
  298. package/dist/client/assets/ishikawaDiagram-OU5B5YK6-Di9BcpOY.js +70 -0
  299. package/dist/client/assets/it-IT-INVHSAJF-DytAgndh.js +12 -0
  300. package/dist/client/assets/ja-JP-JBNTKYP4-BflWlGhw.js +12 -0
  301. package/dist/client/assets/javascript-B9I2pbsP.js +1 -0
  302. package/dist/client/assets/javascript-DctB8BJo.js +1 -0
  303. package/dist/client/assets/{journeyDiagram-3NMN7TZE-B1sApUmM.js → journeyDiagram-3NMN7TZE-Bl0abK1r.js} +1 -1
  304. package/dist/client/assets/journeyDiagram-ZHPQQLJL-J-sGrs9e.js +139 -0
  305. package/dist/client/assets/jsx-runtime-DKj5X9O4.js +1 -0
  306. package/dist/client/assets/kaa-TC3VIB7V-B-xtZfy0.js +1 -0
  307. package/dist/client/assets/kab-KAB-UOUDSQKM-BmO0O4Y4.js +4 -0
  308. package/dist/client/assets/kanban-definition-PNTS6WVX-5ZDV_yIa.js +89 -0
  309. package/dist/client/assets/{kanban-definition-UXKFOSKX-C9yP4td1.js → kanban-definition-UXKFOSKX-DMgUfNt0.js} +10 -10
  310. package/dist/client/assets/{katex-CXMH3UgJ.js → katex-9NBMfU68.js} +2 -2
  311. package/dist/client/assets/katex-ZlcWpGUi.js +257 -0
  312. package/dist/client/assets/kk-KZ-P5H2X7YS-CSQFB8IN.js +1 -0
  313. package/dist/client/assets/{km-KH-PCWDKPHP-DSmy5shj.js → km-KH-IHMV2US7-BxrjuEzr.js} +4 -4
  314. package/dist/client/assets/ko-KR-ZTMANIDF-BnNRXd5J.js +5 -0
  315. package/dist/client/assets/ku-TR-GPJTRB5G-BZM7f2aT.js +6 -0
  316. package/dist/client/assets/line-DEbP8Ok6.js +1 -0
  317. package/dist/client/assets/linear-DExL6ILt.js +1 -0
  318. package/dist/client/assets/lobby-presence-Cz5jGOPg.js +1 -0
  319. package/dist/client/assets/lt-LT-V3XDOK3P-MVQBOHmF.js +3 -0
  320. package/dist/client/assets/{lua-CL1SqxuB.js → lua-zbJo2mq3.js} +1 -1
  321. package/dist/client/assets/lv-LV-DVQ3FADO-CrenwAhS.js +4 -0
  322. package/dist/client/assets/{markdown-CByV-4CU.js → markdown-Bo71X2X2.js} +8 -8
  323. package/dist/client/assets/markdown-it-DpvIRaVq.js +13 -0
  324. package/dist/client/assets/markdown-math-CyyBVuDO.js +517 -0
  325. package/dist/client/assets/merge-CALoRt3l.js +1 -0
  326. package/dist/client/assets/mermaid-parser.core-Bpogunsh.js +3 -0
  327. package/dist/client/assets/mermaid-parser.core-DBy--Jc0.js +3 -0
  328. package/dist/client/assets/mermaid.core-BeOUPE3Q.js +10 -0
  329. package/dist/client/assets/mindmap-definition-NLK3R4M7-ByVb-0vj.js +96 -0
  330. package/dist/client/assets/{mindmap-definition-YA3MSWOX-BUQHcYbK.js → mindmap-definition-YA3MSWOX-DBZN5_GH.js} +29 -29
  331. package/dist/client/assets/mr-IN-VZ6HH5FE-B-PHPglH.js +9 -0
  332. package/dist/client/assets/my-MM-XYKWHRK6-Be5sYp5q.js +1 -0
  333. package/dist/client/assets/nb-NO-UNO2GGZJ-BvSKGdja.js +8 -0
  334. package/dist/client/assets/{nginx-BMaDbqW3.js → nginx-8H7HVH4w.js} +1 -1
  335. package/dist/client/assets/nl-NL-76EFHT4P-C2yNx1Cj.js +13 -0
  336. package/dist/client/assets/nn-NO-CFKD7ABE-4NsqlDRP.js +4 -0
  337. package/dist/client/assets/oc-FR-YBJTCJ3J-B4OTQsWW.js +4 -0
  338. package/dist/client/assets/pa-IN-SNOXSMRV-CKj_sOG7.js +4 -0
  339. package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +1 -0
  340. package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +1 -0
  341. package/dist/client/assets/pegDiagram-GJSIUBJH-aost1sSO.js +1 -0
  342. package/dist/client/assets/pegDiagram-XKGWAZYB-DRo8CZu3.js +1 -0
  343. package/dist/client/assets/percentages-LWOC67ZH-VhvllE7L.js +1 -0
  344. package/dist/client/assets/{pica-xkWDouSg.js → pica-BPrp-GK1.js} +1 -1
  345. package/dist/client/assets/pie-DzWLGKAD.js +1 -0
  346. package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +1 -0
  347. package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +1 -0
  348. package/dist/client/assets/pieDiagram-5QR66LMP-BICdpEuz.js +39 -0
  349. package/dist/client/assets/pieDiagram-E7YTZNPT-CZThaHsc.js +39 -0
  350. package/dist/client/assets/pl-PL-BSY6YFZ3-CFuzA6L0.js +12 -0
  351. package/dist/client/assets/preload-helper-BAlEavIC.js +1 -0
  352. package/dist/client/assets/preview-render-compiler-ktU0SXxY.js +43 -0
  353. package/dist/client/assets/preview-render-profile-D652PAjA.js +1 -0
  354. package/dist/client/assets/preview-render-worker-BI2bFVqM.js +575 -0
  355. package/dist/client/assets/prod-DU-0VfI7.js +145 -0
  356. package/dist/client/assets/prod-cXUNdmYV.js +1 -0
  357. package/dist/client/assets/pt-BR-CZDV62R3-CkPMtyNx.js +10 -0
  358. package/dist/client/assets/pt-PT-JO57XJJW-CBSnfGtF.js +12 -0
  359. package/dist/client/assets/{pug-Wky5Dnfy.js → pug-CqqUmdG7.js} +1 -1
  360. package/dist/client/assets/purify.es-go7v6Te-.js +3 -0
  361. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DwexhEhd.js → quadrantDiagram-AXDQQJYC-C5iowkl_.js} +3 -3
  362. package/dist/client/assets/quadrantDiagram-O4NWA36T-Bgx5bF97.js +7 -0
  363. package/dist/client/assets/quick-switcher-De4PjZFC.css +1 -0
  364. package/dist/client/assets/quick-switcher-controller-DSlOwOsU.js +1 -0
  365. package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +1 -0
  366. package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +1 -0
  367. package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +1 -0
  368. package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +1 -0
  369. package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.js +1 -0
  370. package/dist/client/assets/railroad-abnf-HS5TGJTU-CLkdDRsJ.js +1 -0
  371. package/dist/client/assets/railroad-ebnf-LZEXJU2U-B162zvcG.js +1 -0
  372. package/dist/client/assets/railroad-ebnf-LZEXJU2U-DA0sEq7w.js +1 -0
  373. package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +1 -0
  374. package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +1 -0
  375. package/dist/client/assets/railroadDiagram-O6MQD6OU-BTt_rKjT.js +1 -0
  376. package/dist/client/assets/railroadDiagram-XR7U4H2S-DbVoNgSz.js +1 -0
  377. package/dist/client/assets/{requirementDiagram-BXWQKSXE-C4cKwiIw.js → requirementDiagram-BXWQKSXE-BkvazG7r.js} +1 -1
  378. package/dist/client/assets/requirementDiagram-PLB6GJNP-BT0j9C40.js +84 -0
  379. package/dist/client/assets/ro-RO-UZ5ICYYN-BOuntc_r.js +12 -0
  380. package/dist/client/assets/room-DX7lIfnu.js +1 -0
  381. package/dist/client/assets/ru-RU-AN7JPREC-D-ow3SNR.js +10 -0
  382. package/dist/client/assets/runtime-config-BFVdhnJu.js +1 -0
  383. package/dist/client/assets/runtime-paths-Cn0snt_9.js +1 -0
  384. package/dist/client/assets/sankeyDiagram-IPEJSGJF-X1BCUIrf.js +40 -0
  385. package/dist/client/assets/sankeyDiagram-P5KCCOFB-C_IemB9h.js +40 -0
  386. package/dist/client/assets/sankeyLinkHorizontal-usjP1-Cg.js +1 -0
  387. package/dist/client/assets/sequenceDiagram-PO4LG4MO-B-2QfXhV.js +169 -0
  388. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BX6jqJFD.js → sequenceDiagram-WJ2MYXX4-CxFBgLGd.js} +3 -3
  389. package/dist/client/assets/si-LK-7CBLD6QQ-c91EepX0.js +1 -0
  390. package/dist/client/assets/{sieve-BAxa3IjF.js → sieve-tLWDfEkZ.js} +1 -1
  391. package/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -1
  392. package/dist/client/assets/sizeCapture-INFHLROL-DrzwYt5z.js +1 -0
  393. package/dist/client/assets/sk-SK-SWR6DKBI-D5vFMIL6.js +7 -0
  394. package/dist/client/assets/sl-SI-QY5KCFGA-RZhwMpQL.js +8 -0
  395. package/dist/client/assets/solr-B78wSQJQ.js +1 -0
  396. package/dist/client/assets/src-XiVvaevx.js +1 -0
  397. package/dist/client/assets/stateDiagram-D77RDMKH-BaSQ6Owj.js +1 -0
  398. package/dist/client/assets/stateDiagram-v2-GCMORJYK-CsVcfwVp.js +291 -0
  399. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +1 -0
  400. package/dist/client/assets/sv-SE-O3OFCY3J-DnS86_7q.js +12 -0
  401. package/dist/client/assets/swimlanes-2SLR337P-CnYTVqRX.js +1 -0
  402. package/dist/client/assets/swimlanes-42K2YHIH-CALFEmiS.js +1 -0
  403. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Bh4tmz27.js +8 -0
  404. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-xhehUG9e.js +8 -0
  405. package/dist/client/assets/ta-IN-V6NHHU6Z-D5jy7_AE.js +6 -0
  406. package/dist/client/assets/th-TH-WLSZUSBX-DHehoYR2.js +1 -0
  407. package/dist/client/assets/{timeline-definition-24CTP7MA-BA-lVH6P.js → timeline-definition-24CTP7MA-zse-5Dbm.js} +5 -5
  408. package/dist/client/assets/timeline-definition-EJHVYXUP-BhqPlKkN.js +120 -0
  409. package/dist/client/assets/tr-TR-GUFYG22B-ClVaf8h1.js +4 -0
  410. package/dist/client/assets/treeView-Q6P3EWNA-BvHOzbu9.js +1 -0
  411. package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +1 -0
  412. package/dist/client/assets/treemap-CxZTjHiH.js +1 -0
  413. package/dist/client/assets/treemap-WGGIJYW6-oety7paS.js +1 -0
  414. package/dist/client/assets/treemap-WGGIJYW6-sMRCjCtX.js +1 -0
  415. package/dist/client/assets/uk-UA-K6SV5NFQ-BLTTtyNB.js +6 -0
  416. package/dist/client/assets/usecaseDiagram-POWQR4AR-DR2LHQYs.js +328 -0
  417. package/dist/client/assets/uz-UZ-TVKTZO2G-Bm02Eg3D.js +1 -0
  418. package/dist/client/assets/v4-DDdyfk2q.js +1 -0
  419. package/dist/client/assets/vault-api-client-BQxLVPeF.js +7 -0
  420. package/dist/client/assets/vault-paths-BT-6nztu.js +1 -0
  421. package/dist/client/assets/vault-utils-Bct69Xw2.js +1 -0
  422. package/dist/client/assets/venn.esm-C5rDfA9t.js +7 -0
  423. package/dist/client/assets/vennDiagram-4TSXK5OY-DgHr6cJD.js +28 -0
  424. package/dist/client/assets/vennDiagram-UO4OBE2U-BRwLn2Q1.js +28 -0
  425. package/dist/client/assets/{verilog-7LoJAqYT.js → verilog-CjI9Y6RI.js} +1 -1
  426. package/dist/client/assets/vi-VN-7FKFXJNO-CL3WPhmG.js +7 -0
  427. package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +1 -0
  428. package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +1 -0
  429. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-C2oY-YbF.js → wardleyDiagram-VM6X3IG4-9A60XZis.js} +3 -3
  430. package/dist/client/assets/wardleyDiagram-VNRHLVJA-B_tMcVFG.js +78 -0
  431. package/dist/client/assets/wiki-link-resolver-Dch88erO.js +1 -0
  432. package/dist/client/assets/{worker-engine-m0rlHn8R-S8mpn_O0.js → worker-engine-m0rlHn8R-5h66k403.js} +1 -1
  433. package/dist/client/assets/workspace-change-CVA9dVmy.js +1 -0
  434. package/dist/client/assets/workspace-sync-client-C2pdaQUN.js +1 -0
  435. package/dist/client/assets/xychartDiagram-PMCCYNJV-fRpZ1MA5.js +7 -0
  436. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D00iy-wB.js +7 -0
  437. package/dist/client/assets/{yaml-9ltHPDNO.js → yaml-BcZaqAz8.js} +1 -1
  438. package/dist/client/assets/yjs-B41tM6Sz.js +4 -0
  439. package/dist/client/assets/yjs-provider-reset-guard-DpntzUDR.js +1 -0
  440. package/dist/client/assets/zh-CN-AOKVLNNK-DGidDH2b.js +11 -0
  441. package/dist/client/assets/zh-HK-CDKPF5DC-CRcNR3rk.js +1 -0
  442. package/dist/client/assets/zh-TW-ZVGYESGW-C7Qji1y6.js +13 -0
  443. package/dist/client/drawio-editor.html +9 -9
  444. package/dist/client/excalidraw-editor.html +43 -38
  445. package/dist/client/export-document.html +6 -7
  446. package/dist/client/index.html +49 -38
  447. package/package.json +23 -26
  448. package/src/client/app/drawio-editor.html +2 -1
  449. package/src/client/app/excalidraw-editor.html +2 -1
  450. package/src/client/app/export-document-entry.js +1 -0
  451. package/src/client/app/export-document.html +2 -1
  452. package/src/client/app/index.html +47 -16
  453. package/src/client/app/main-entry.js +1 -19
  454. package/src/client/application/app-shell/comments-feature.js +6 -0
  455. package/src/client/application/app-shell/ui-feature-shell.js +156 -59
  456. package/src/client/application/app-shell/ui-feature-tab-activity.js +8 -3
  457. package/src/client/application/app-shell-elements.js +7 -0
  458. package/src/client/application/diagram-preview-hydrator.js +7 -0
  459. package/src/client/application/highlight-theme.js +16 -0
  460. package/src/client/application/mermaid-preview-hydrator.js +89 -3
  461. package/src/client/application/preview-diagram-utils.js +1 -0
  462. package/src/client/application/preview-render-compiler.js +45 -20
  463. package/src/client/application/preview-render-executor.js +4 -27
  464. package/src/client/application/preview-render-profile.js +8 -12
  465. package/src/client/application/preview-renderer.js +27 -7
  466. package/src/client/application/workspace-coordinator.js +20 -21
  467. package/src/client/bootstrap/collabmd-app-shell.js +87 -42
  468. package/src/client/bootstrap/lazy-collab-clients.js +90 -0
  469. package/src/client/browser-utils.js +1 -1
  470. package/src/client/domain/excalidraw-scene-reconcile.js +5 -2
  471. package/src/client/domain/excalidraw-scene.js +0 -11
  472. package/src/client/domain/file-search.js +1 -0
  473. package/src/client/domain/hash-routes.js +5 -0
  474. package/src/client/domain/highlight-runtime.js +74 -0
  475. package/src/client/domain/lobby-chat.js +2 -0
  476. package/src/client/domain/markdown-math.js +14 -0
  477. package/src/client/domain/runtime-paths.js +56 -7
  478. package/src/client/domain/vault-utils.js +11 -0
  479. package/src/client/excalidraw-editor.js +20 -4
  480. package/src/client/export/export-host.js +3 -7
  481. package/src/client/export/export-pipeline.js +208 -21
  482. package/src/client/infrastructure/auth-client.js +1 -2
  483. package/src/client/infrastructure/browser-preferences-port.js +24 -0
  484. package/src/client/infrastructure/editor-session.js +20 -0
  485. package/src/client/infrastructure/editor-view-adapter.js +51 -15
  486. package/src/client/infrastructure/excalidraw-room-client.js +11 -46
  487. package/src/client/infrastructure/git-api-client.js +5 -0
  488. package/src/client/infrastructure/hosted-api-client.js +60 -0
  489. package/src/client/infrastructure/lobby-presence.js +2 -2
  490. package/src/client/infrastructure/runtime-config.js +3 -1
  491. package/src/client/infrastructure/tab-activity-lock.js +8 -4
  492. package/src/client/infrastructure/webmcp-tool-registry.js +27 -6
  493. package/src/client/presentation/bases-preview-controller.js +2 -1
  494. package/src/client/presentation/comment-markdown-renderer.js +4 -14
  495. package/src/client/presentation/comment-overview-controller.js +1 -2
  496. package/src/client/presentation/comment-ui/comment-ui-shared.js +5 -2
  497. package/src/client/presentation/comment-ui-controller.js +21 -30
  498. package/src/client/presentation/create-menu-presenter.js +16 -18
  499. package/src/client/presentation/drawio-embed-controller.js +55 -7
  500. package/src/client/presentation/excalidraw-embed-controller.js +11 -3
  501. package/src/client/presentation/file-explorer-controller.js +4 -0
  502. package/src/client/presentation/file-explorer-view.js +304 -176
  503. package/src/client/presentation/file-history-view-controller.js +6 -0
  504. package/src/client/presentation/git-diff-view-controller.js +3 -2
  505. package/src/client/presentation/git-panel-controller.js +7 -6
  506. package/src/client/presentation/hosted-workspace-gate-controller.js +180 -0
  507. package/src/client/presentation/image-lightbox-controller.js +7 -6
  508. package/src/client/presentation/layout-controller.js +10 -1
  509. package/src/client/presentation/outline-controller.js +0 -86
  510. package/src/client/presentation/quick-switcher-controller.js +50 -13
  511. package/src/client/presentation/scroll-sync-controller.js +69 -21
  512. package/src/client/presentation/team-settings-controller.js +228 -0
  513. package/src/client/styles/components/navigation.css +2 -2
  514. package/src/client/styles/deferred-collab.css +6 -0
  515. package/src/client/styles/deferred-git.css +7 -0
  516. package/src/client/styles/deferred-preview.css +7 -0
  517. package/src/client/styles/features/diagram-preview.css +1 -15
  518. package/src/client/styles/features/outline.css +4 -2
  519. package/src/client/styles/features/preview-markdown.css +29 -15
  520. package/src/client/styles/features/team-settings.css +162 -0
  521. package/src/client/styles/foundation/themes.css +56 -271
  522. package/src/client/styles/foundation/tokens.css +2 -2
  523. package/src/client/styles/layout/editor-page.css +0 -14
  524. package/src/client/styles/layout/overlays.css +16 -0
  525. package/src/client/styles/layout/responsive.css +5 -5
  526. package/src/client/styles/layout/shell.css +26 -1
  527. package/src/client/styles/layout/sidebar.css +95 -3
  528. package/src/client/styles/style.css +3 -19
  529. package/src/client/styles/surfaces/landing-page.css +260 -0
  530. package/src/domain/agent-tool-definitions.js +182 -74
  531. package/src/domain/collabmd-content-capabilities.js +62 -7
  532. package/src/domain/collaboration-protocol.js +2 -0
  533. package/src/domain/excalidraw-agent-scene.js +108 -6
  534. package/src/domain/excalidraw-agent-verification.js +95 -1
  535. package/src/domain/excalidraw-room-codec.js +12 -1
  536. package/src/domain/literal-text-search.js +13 -0
  537. package/src/domain/markdown-outline.js +35 -0
  538. package/src/server/application/agent-connection-service.js +6 -2
  539. package/src/server/application/agent-content-service.js +250 -114
  540. package/src/server/auth/create-auth-service.js +40 -12
  541. package/src/server/auth/session-cookie.js +49 -38
  542. package/src/server/config/env.js +97 -6
  543. package/src/server/create-app-server.js +23 -153
  544. package/src/server/domain/backlink-index.js +1 -11
  545. package/src/server/domain/bases/base-query-results.js +7 -3
  546. package/src/server/domain/bases/base-query-service.js +2 -7
  547. package/src/server/domain/collaboration/collaboration-room.js +54 -16
  548. package/src/server/domain/docx-exporter.js +256 -2
  549. package/src/server/domain/hosted-workspace-contract.js +7 -0
  550. package/src/server/domain/hosted-workspace.js +39 -63
  551. package/src/server/domain/ripgrep-search-service.js +97 -34
  552. package/src/server/infrastructure/git/diff-service.js +15 -11
  553. package/src/server/infrastructure/git/git-service.js +4 -0
  554. package/src/server/infrastructure/git/image-mime.js +4 -3
  555. package/src/server/infrastructure/git/local-exclude.js +13 -1
  556. package/src/server/infrastructure/git/status-service.js +10 -6
  557. package/src/server/infrastructure/http/create-agent-api-handler.js +1 -1
  558. package/src/server/infrastructure/http/create-git-api-query-handler.js +25 -0
  559. package/src/server/infrastructure/http/create-hosted-api-handler.js +5 -0
  560. package/src/server/infrastructure/http/create-request-handler.js +95 -26
  561. package/src/server/infrastructure/http/create-static-handler.js +3 -0
  562. package/src/server/infrastructure/http/create-vault-api-query-handler.js +28 -55
  563. package/src/server/infrastructure/http/http-response.js +2 -0
  564. package/src/server/infrastructure/mcp/create-agent-mcp-handler.js +2 -1
  565. package/src/server/infrastructure/persistence/hosted-metadata-store.js +42 -5
  566. package/src/server/infrastructure/persistence/path-utils.js +23 -3
  567. package/src/server/infrastructure/persistence/pull-backup-store.js +52 -42
  568. package/src/server/infrastructure/persistence/sidecar-store.js +19 -9
  569. package/src/server/infrastructure/persistence/vault-file-store.js +57 -171
  570. package/src/server/infrastructure/plantuml/plantuml-renderer.js +33 -0
  571. package/src/server/infrastructure/structurizr/structurizr-workspace-service.js +24 -10
  572. package/src/server/infrastructure/websocket/attach-collaboration-gateway.js +55 -25
  573. package/src/server/infrastructure/websocket/client-socket-session.js +32 -4
  574. package/src/server/infrastructure/workspace/file-system-sync-service.js +4 -2
  575. package/src/server/shared/agent-tool-rate-limiter.js +7 -0
  576. package/src/server/startup/git-remote-bootstrap.js +56 -49
  577. package/src/server/vault-registry.js +251 -0
  578. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-C-nmgL5g.js +0 -1
  579. package/dist/client/assets/abnfDiagram-VCTEODGH-CdVZqicp.js +0 -1
  580. package/dist/client/assets/ar-SA-PQUY64WN-xjXgbW6d.js +0 -10
  581. package/dist/client/assets/architecture-7GRP2DOG-BMOPAkUC.js +0 -1
  582. package/dist/client/assets/architectureDiagram-5GKGNRK7-wUo0bXif.js +0 -36
  583. package/dist/client/assets/az-AZ-OXJXL76K-4JkO4Pca.js +0 -1
  584. package/dist/client/assets/base-CaIEJUF9.css +0 -1
  585. package/dist/client/assets/bg-BG-W2GKIJDF-DnkH_o81.js +0 -5
  586. package/dist/client/assets/blockDiagram-I7D4REHJ-BRSK3m49.js +0 -129
  587. package/dist/client/assets/bn-BD-TGL7M4PJ-CG4JkmtP.js +0 -3
  588. package/dist/client/assets/bn-IN-BKETKYEH-CG4JkmtP.js +0 -3
  589. package/dist/client/assets/ca-ES-LD5SCRVV-U6_TVMX9.js +0 -8
  590. package/dist/client/assets/channel-Fa4GS_-F.js +0 -1
  591. package/dist/client/assets/chunk-2E4U76K2-BPnTT-J3.js +0 -2
  592. package/dist/client/assets/chunk-4HAMMTFA-DStbIfJ1.js +0 -62
  593. package/dist/client/assets/chunk-75Z2AOVW-C5pGd3W9.js +0 -2
  594. package/dist/client/assets/chunk-7XWMRXBY-CfMzEq80.js +0 -1
  595. package/dist/client/assets/chunk-DU6HZSFF-Zkp69c6c.js +0 -127
  596. package/dist/client/assets/chunk-GMAD6QVW-NZ6WpDb8.js +0 -72
  597. package/dist/client/assets/chunk-GVQU2GXP-D8SDprfX.js +0 -1
  598. package/dist/client/assets/chunk-L3NEJ4N5-aijKP-eh.js +0 -1
  599. package/dist/client/assets/chunk-OSK3NFVY-CCbLQAMa.js +0 -10
  600. package/dist/client/assets/chunk-POPQ4Y6H-CYnpIgXT.js +0 -1
  601. package/dist/client/assets/chunk-PWAF6VOD-JSNrcBmP.js +0 -1
  602. package/dist/client/assets/chunk-RM4UPSZO-DOWllDY8.js +0 -41
  603. package/dist/client/assets/chunk-TLUHSLCS-DTY5v0aj.js +0 -2
  604. package/dist/client/assets/classDiagram-ZZMXUADV-BsQWoR3Q.js +0 -1
  605. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BsQWoR3Q.js +0 -1
  606. package/dist/client/assets/comment-thread-store-CX98zR6q.js +0 -1
  607. package/dist/client/assets/comment-threads-BnRwo5B9.js +0 -4
  608. package/dist/client/assets/cose-bilkent-JH36ORCC-Cm_QF_yb.js +0 -1
  609. package/dist/client/assets/cs-CZ-OFPU5DBV-BmFAIhqX.js +0 -7
  610. package/dist/client/assets/cynefin-OW5HDTMX-7tP7QfM3.js +0 -1
  611. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-rTz9RhFH.js +0 -62
  612. package/dist/client/assets/cytoscape.esm-B-NFISlW.js +0 -321
  613. package/dist/client/assets/da-DK-FRDJFYWF-H387Jw8B.js +0 -2
  614. package/dist/client/assets/dagre-PrKaheQc.js +0 -1
  615. package/dist/client/assets/de-CH-ZG7H3QK3-C_groygo.js +0 -11
  616. package/dist/client/assets/de-DE-SIJYH4IH-C_groygo.js +0 -11
  617. package/dist/client/assets/diagram-UQ7AKVKN-CNYlXtu4.js +0 -41
  618. package/dist/client/assets/diagram-VX7I27RA-CsJbsx5F.js +0 -24
  619. package/dist/client/assets/diagram-Z3DM3KII-D0mLxEgI.js +0 -24
  620. package/dist/client/assets/direct-engine-DdrQKpgq-CtKfQzCt.js +0 -5
  621. package/dist/client/assets/dist--hk9I5HQ.js +0 -1
  622. package/dist/client/assets/dist-B1XEa-Zs.js +0 -1
  623. package/dist/client/assets/dist-BJ1bJs33.js +0 -1
  624. package/dist/client/assets/dist-Bd1JucQF.js +0 -1
  625. package/dist/client/assets/dist-ByrG2qBA.js +0 -1
  626. package/dist/client/assets/dist-CKS_-are.js +0 -1
  627. package/dist/client/assets/dist-D37Hyu3h.js +0 -9
  628. package/dist/client/assets/dist-Dl_tpDSr.js +0 -1
  629. package/dist/client/assets/dist-Dm4w5UId.js +0 -1
  630. package/dist/client/assets/dist-DpYDHR9p.js +0 -6
  631. package/dist/client/assets/dist-JaU3aRlD.js +0 -19
  632. package/dist/client/assets/dist-RKBTaQMb.js +0 -13
  633. package/dist/client/assets/dist-eBx8q6Sy.js +0 -1
  634. package/dist/client/assets/document-formatter-rDDjRfZ2.js +0 -2
  635. package/dist/client/assets/drawioEditor-JubEEha7.js +0 -9
  636. package/dist/client/assets/ebnfDiagram-PWID7BFC-HeTxHpCU.js +0 -1
  637. package/dist/client/assets/editor-session-Bk6oIvSr.js +0 -54
  638. package/dist/client/assets/el-GR-IEE2CGI2-BkT6YT54.js +0 -7
  639. package/dist/client/assets/embedded-editor-base-BlCgz6mw.css +0 -1
  640. package/dist/client/assets/es-Bfdp096f.js +0 -22
  641. package/dist/client/assets/es-ES-TVVPWKV5-CpPKJXTM.js +0 -12
  642. package/dist/client/assets/eu-ES-CGBMFQDT-Bu3N2493.js +0 -8
  643. package/dist/client/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +0 -1
  644. package/dist/client/assets/excalidraw-element-link-YLIaTnVF.js +0 -7
  645. package/dist/client/assets/excalidrawEditor-dBMbRX_S.js +0 -9
  646. package/dist/client/assets/export-page-CRRQ2NEl.js +0 -57
  647. package/dist/client/assets/exportDocument-BlQRd9_m.js +0 -2
  648. package/dist/client/assets/exportDocument-CNSbjZwu.css +0 -1
  649. package/dist/client/assets/fa-IR-IE6XAPR4-BEvLCORD.js +0 -9
  650. package/dist/client/assets/fi-FI-P7TKNHRM-DI0q8iSX.js +0 -6
  651. package/dist/client/assets/file-icon-svg-Y_kpF957.js +0 -1
  652. package/dist/client/assets/file-search-DDLyyLDU.js +0 -1
  653. package/dist/client/assets/flowDiagram-HODETNUW-D5Gy0wmg.js +0 -1
  654. package/dist/client/assets/forth-Cezjo90N.js +0 -1
  655. package/dist/client/assets/fr-FR-QI2XZNT7-y8kXd8LA.js +0 -12
  656. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BHgOYiZz.js +0 -292
  657. package/dist/client/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +0 -1
  658. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Dl__X3Sk.js +0 -106
  659. package/dist/client/assets/gl-ES-TLYCNOZZ-Br-Fhff-.js +0 -6
  660. package/dist/client/assets/graphlib-DS17s2tU.js +0 -1
  661. package/dist/client/assets/he-IL-ZX43XLGP-qKQq6V9X.js +0 -9
  662. package/dist/client/assets/hi-IN-UTYRMTUF-DOUcwrDO.js +0 -3
  663. package/dist/client/assets/hu-HU-AJOSEBW6-FqTyvHlD.js +0 -3
  664. package/dist/client/assets/id-ID-ETLTVG6C-CQqh3CLS.js +0 -8
  665. package/dist/client/assets/image-ZVKINSPA-DgzW5zAy.js +0 -1
  666. package/dist/client/assets/index-D3RER1SZ.js +0 -1023
  667. package/dist/client/assets/index-DREVKl_K.css +0 -1
  668. package/dist/client/assets/info-A6RAGUB7-BlU-8_xu.js +0 -1
  669. package/dist/client/assets/infoDiagram-27XIBGKW-DBpoANC9.js +0 -2
  670. package/dist/client/assets/it-IT-B4B6TP6L-V-yK3SZz.js +0 -12
  671. package/dist/client/assets/ja-JP-IYKVURR5-BQKBXRpX.js +0 -12
  672. package/dist/client/assets/javascript-BWjar7HY.js +0 -1
  673. package/dist/client/assets/javascript-D-FtdkNC.js +0 -1
  674. package/dist/client/assets/jsx-runtime-BpzPEenQ.js +0 -1
  675. package/dist/client/assets/kaa-SE2BUIKX-CZ5kfwPg.js +0 -1
  676. package/dist/client/assets/kab-KAB-Y3GLKXLR-Do7GWfuN.js +0 -4
  677. package/dist/client/assets/kk-KZ-ABWUFVOH-BpqVciQz.js +0 -1
  678. package/dist/client/assets/ko-KR-7JQDXKGM-N42lep78.js +0 -5
  679. package/dist/client/assets/ku-TR-NAH2Q5B7-K8LLl9fk.js +0 -6
  680. package/dist/client/assets/line-BFl3ujec.js +0 -1
  681. package/dist/client/assets/linear-n-3HSMUF.js +0 -1
  682. package/dist/client/assets/lt-LT-VQFYRSNQ-BmOd0ALn.js +0 -3
  683. package/dist/client/assets/lv-LV-T62VSYUM-B22WdPhp.js +0 -4
  684. package/dist/client/assets/mermaid-parser.core-Bl0efOMt.js +0 -4
  685. package/dist/client/assets/mermaid.core-BrY09czX.js +0 -11
  686. package/dist/client/assets/mermaid.core-DfcNfOTv.js +0 -1
  687. package/dist/client/assets/modulepreload-polyfill-P2Xu9kJm.js +0 -1
  688. package/dist/client/assets/mr-IN-V4FHLCJE-XX069tpm.js +0 -9
  689. package/dist/client/assets/my-MM-E3SQ6E54-cst_-5SB.js +0 -1
  690. package/dist/client/assets/nb-NO-MLNOFN5H-Bu2URWko.js +0 -8
  691. package/dist/client/assets/nl-NL-D5L3ZV4M-BqrV0btt.js +0 -13
  692. package/dist/client/assets/nn-NO-NNHDGPKB-DK-xZaWM.js +0 -4
  693. package/dist/client/assets/oc-FR-DWCRF55G-BZ5Po5R6.js +0 -4
  694. package/dist/client/assets/pa-IN-3JSAY44M-BZQSjKrS.js +0 -4
  695. package/dist/client/assets/packet-AYTQ26CC-BSJEH9Lb.js +0 -1
  696. package/dist/client/assets/pegDiagram-XKGWAZYB-Bi2Iml7Z.js +0 -1
  697. package/dist/client/assets/percentages-ETZPVQEE-DFxFqXgH.js +0 -1
  698. package/dist/client/assets/pie-WAS4IAKB-qxv01Y8W.js +0 -1
  699. package/dist/client/assets/pieDiagram-E7YTZNPT-_gYXnMoi.js +0 -39
  700. package/dist/client/assets/pl-PL-ACURYKP3-qcEOSfCk.js +0 -12
  701. package/dist/client/assets/preload-helper-HclGiUj8.js +0 -1
  702. package/dist/client/assets/preview-render-compiler-CfxJYldJ.js +0 -41
  703. package/dist/client/assets/preview-render-compiler-Cu8_i9iS.js +0 -1
  704. package/dist/client/assets/preview-render-worker-c4Yi93qW.js +0 -66
  705. package/dist/client/assets/prod-BiJL30sl.js +0 -1
  706. package/dist/client/assets/prod-qAk7rHa4.js +0 -177
  707. package/dist/client/assets/pt-BR-LOX7MLGD-DLueHSyZ.js +0 -10
  708. package/dist/client/assets/pt-PT-CZ2U2RFQ-BJ-GAEm6.js +0 -12
  709. package/dist/client/assets/quick-switcher-controller-BoIK_wuG.js +0 -1
  710. package/dist/client/assets/radar-RG4KPBEZ-B6h6pWOs.js +0 -1
  711. package/dist/client/assets/railroad-74A4TZTK-CGtTWdGc.js +0 -1
  712. package/dist/client/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +0 -1
  713. package/dist/client/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +0 -1
  714. package/dist/client/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +0 -1
  715. package/dist/client/assets/railroadDiagram-O6MQD6OU-BVA5UbMu.js +0 -1
  716. package/dist/client/assets/ro-RO-2HECL2X6-CJUvKAf0.js +0 -12
  717. package/dist/client/assets/ru-RU-HAYNXO46-BWSlvTrt.js +0 -10
  718. package/dist/client/assets/runtime-config-DcmnGcXU.js +0 -1
  719. package/dist/client/assets/sankeyDiagram-P5KCCOFB-B5HHkRT2.js +0 -40
  720. package/dist/client/assets/si-LK-W5KNS4H6-DGGCsn7k.js +0 -1
  721. package/dist/client/assets/sk-SK-7K2CFGDV-CY4uTYgQ.js +0 -7
  722. package/dist/client/assets/sl-SI-OXV2QZWW-2-weqaBY.js +0 -6
  723. package/dist/client/assets/solr-BBopId9w.js +0 -1
  724. package/dist/client/assets/src-oBChb5qS.js +0 -1
  725. package/dist/client/assets/stateDiagram-D77RDMKH-CmqxyRGx.js +0 -1
  726. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-zoLLQVyh.js +0 -1
  727. package/dist/client/assets/sv-SE-JTOBZRGL-9-IUtVkO.js +0 -12
  728. package/dist/client/assets/swimlanes-42K2YHIH-Bmgb9Zld.js +0 -1
  729. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DS-KQN37.js +0 -8
  730. package/dist/client/assets/ta-IN-KFAVKXGT-gHO6Q_DH.js +0 -6
  731. package/dist/client/assets/th-TH-VDMSCPDL-BvJuw6PJ.js +0 -1
  732. package/dist/client/assets/tr-TR-CEZ6GX45-CG6UU3Su.js +0 -4
  733. package/dist/client/assets/treeView-Q6P3EWNA-BTTYcvrF.js +0 -1
  734. package/dist/client/assets/treemap-WGGIJYW6-Cg7tyfH8.js +0 -1
  735. package/dist/client/assets/uk-UA-Q3H3OXQC-CSuIg_DY.js +0 -6
  736. package/dist/client/assets/uz-UZ-NGCSWWPX-mom7rxSP.js +0 -1
  737. package/dist/client/assets/vault-api-client-iZLhMJKe.js +0 -6
  738. package/dist/client/assets/vennDiagram-4TSXK5OY-DNdUC_Xj.js +0 -34
  739. package/dist/client/assets/vi-VN-P3NDEVPS-BB0Fu9ck.js +0 -7
  740. package/dist/client/assets/wardley-WFR3VGLG-C6N1rULY.js +0 -1
  741. package/dist/client/assets/wiki-link-resolver-DFIwErjc.js +0 -1
  742. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CoIR8CBX.js +0 -7
  743. package/dist/client/assets/yjs-provider-reset-guard-9ul1qF6k.js +0 -4
  744. package/dist/client/assets/zh-CN-SS3O57GA-Bj8wsiMe.js +0 -11
  745. package/dist/client/assets/zh-HK-LWJT3VCF-DOTquTCh.js +0 -1
  746. package/dist/client/assets/zh-TW-VJXC72RT-B48PRo-l.js +0 -13
  747. package/integrations/pi/index.ts +0 -94
  748. package/src/server/domain/collaboration/protocol.js +0 -6
  749. /package/dist/client/assets/{vault-api-client-C3mlS_4N.css → auth-gate-C3mlS_4N.css} +0 -0
  750. /package/dist/client/assets/{base-BYODPHdS.js → github.min-DBihDoic.js} +0 -0
@@ -10,18 +10,25 @@ import { listRenderableDiagrams, resolveRenderableDiagram } from '../../domain/d
10
10
  import { createEditableContentRevision } from '../../domain/editable-content-revision.js';
11
11
  import { normalizeEditableText } from '../../domain/editable-text.js';
12
12
  import { applyExactTextChanges, resolveExactTextChanges } from '../../domain/exact-text-edits.js';
13
- import { applyAgentExcalidrawEdits, createAgentExcalidrawScene } from '../../domain/excalidraw-agent-scene.js';
13
+ import {
14
+ applyAgentExcalidrawEditsWithSummary,
15
+ createAgentExcalidrawScene,
16
+ } from '../../domain/excalidraw-agent-scene.js';
14
17
  import { inspectAgentExcalidrawScene, renderAgentExcalidrawSvg } from '../../domain/excalidraw-agent-verification.js';
15
- import { getVaultFileKind } from '../../domain/file-kind.js';
18
+ import { getVaultFileKind, isBaseFilePath } from '../../domain/file-kind.js';
19
+ import { collectMarkdownOutline } from '../../domain/markdown-outline.js';
20
+ import { isWholeWordMatch } from '../../domain/literal-text-search.js';
16
21
  import { createWikiTargetIndex } from '../../domain/wiki-link-resolver.js';
17
22
  import {
18
23
  classifyPublicVideoEmbed,
19
24
  isPublicVideoEmbedCandidate,
20
25
  } from '../../domain/video-embed.js';
26
+ import { isPlainObject, parseBaseSource } from '../domain/bases/base-definition.js';
21
27
  import {
22
28
  collectMarkdownImageSources,
23
29
  collectMarkdownReferences,
24
30
  } from '../domain/markdown-reference-extractor.js';
31
+ import { searchExcalidrawSceneText } from '../domain/ripgrep-search-service.js';
25
32
  import { compareWorkspacePaths, normalizeWorkspacePath } from '../domain/workspace-state.js';
26
33
 
27
34
  const MAX_DOCUMENT_CHARACTERS = 200_000;
@@ -32,6 +39,35 @@ const MAX_REPLACEMENTS = 20;
32
39
  const MAX_REPLACEMENT_CHARACTERS = 50_000;
33
40
  const EMBEDDABLE_KINDS = new Set(['base', 'drawio', 'excalidraw', 'image', 'mermaid', 'plantuml']);
34
41
 
42
+ function assertValidAgentBaseContent(path, content) {
43
+ if (!isBaseFilePath(path)) return;
44
+ try {
45
+ const raw = parseBaseSource(content);
46
+ if (raw != null && !isPlainObject(raw)) {
47
+ throw new Error('Base source must be a YAML object');
48
+ }
49
+ } catch (error) {
50
+ throw createAgentContentError('AGENT_INVALID_BASE', error.message || 'Base source is invalid', 400);
51
+ }
52
+ }
53
+
54
+ function toAgentBaseQueryResult(path, { columns, rows, view }, limit) {
55
+ return {
56
+ columns: columns.map(({ id, label }) => ({ id, label })),
57
+ path,
58
+ rows: rows.slice(0, limit).map((row) => ({
59
+ cells: Object.fromEntries(columns.map(({ id }) => [id, String(row.cells[id]?.text ?? '')])),
60
+ path: row.path,
61
+ })),
62
+ totalRows: rows.length,
63
+ truncated: rows.length > limit,
64
+ view: {
65
+ name: view.name,
66
+ type: view.type,
67
+ },
68
+ };
69
+ }
70
+
35
71
  function createAgentContentError(code, message, statusCode = 400) {
36
72
  const error = new Error(message);
37
73
  error.code = code;
@@ -101,7 +137,7 @@ function createInlineExcalidrawVerification(scene, options, { deferRender = fals
101
137
  return verification;
102
138
  }
103
139
 
104
- function searchLiveText(content, query, maxSnippets = 5) {
140
+ function searchLiveText(content, query, maxSnippets = 5, wholeWord = false) {
105
141
  const normalizedQuery = query.toLocaleLowerCase();
106
142
  const snippets = [];
107
143
  let matchCount = 0;
@@ -109,17 +145,19 @@ function searchLiveText(content, query, maxSnippets = 5) {
109
145
  const normalizedLine = lineText.toLocaleLowerCase();
110
146
  let start = normalizedLine.indexOf(normalizedQuery);
111
147
  while (start >= 0) {
112
- matchCount += 1;
113
- if (snippets.length < maxSnippets) {
114
- const snippetStart = Math.max(0, start - 90);
115
- const snippetEnd = Math.min(lineText.length, start + query.length + 90);
116
- snippets.push({
117
- column: start + 1,
118
- line: lineIndex + 1,
119
- matchEnd: start - snippetStart + query.length + (snippetStart > 0 ? 3 : 0),
120
- matchStart: start - snippetStart + (snippetStart > 0 ? 3 : 0),
121
- text: `${snippetStart > 0 ? '...' : ''}${lineText.slice(snippetStart, snippetEnd)}${snippetEnd < lineText.length ? '...' : ''}`,
122
- });
148
+ if (!wholeWord || isWholeWordMatch(normalizedLine, start, start + normalizedQuery.length)) {
149
+ matchCount += 1;
150
+ if (snippets.length < maxSnippets) {
151
+ const snippetStart = Math.max(0, start - 90);
152
+ const snippetEnd = Math.min(lineText.length, start + query.length + 90);
153
+ snippets.push({
154
+ column: start + 1,
155
+ line: lineIndex + 1,
156
+ matchEnd: start - snippetStart + query.length + (snippetStart > 0 ? 3 : 0),
157
+ matchStart: start - snippetStart + (snippetStart > 0 ? 3 : 0),
158
+ text: `${snippetStart > 0 ? '...' : ''}${lineText.slice(snippetStart, snippetEnd)}${snippetEnd < lineText.length ? '...' : ''}`,
159
+ });
160
+ }
123
161
  }
124
162
  start = normalizedLine.indexOf(normalizedQuery, start + Math.max(query.length, 1));
125
163
  }
@@ -130,6 +168,7 @@ function searchLiveText(content, query, maxSnippets = 5) {
130
168
  export class AgentContentService {
131
169
  constructor({
132
170
  backlinkIndex = null,
171
+ baseQueryService = null,
133
172
  plantUmlRenderer = null,
134
173
  roomRegistry,
135
174
  searchService,
@@ -137,6 +176,7 @@ export class AgentContentService {
137
176
  workspaceMutationCoordinator,
138
177
  }) {
139
178
  this.backlinkIndex = backlinkIndex;
179
+ this.baseQueryService = baseQueryService;
140
180
  this.plantUmlRenderer = plantUmlRenderer;
141
181
  this.roomRegistry = roomRegistry;
142
182
  this.searchService = searchService;
@@ -214,31 +254,13 @@ export class AgentContentService {
214
254
  };
215
255
  }
216
256
 
217
- async renderExcalidraw(actor, {
218
- format = 'png',
219
- padding = 32,
220
- path,
221
- scale = 1,
222
- } = {}) {
223
- const current = await this.readExcalidrawScene(actor, path);
224
- const result = {
225
- elementCount: current.scene.elements.filter((element) => !element.isDeleted).length,
226
- format,
227
- path: current.path,
228
- revision: current.revision,
229
- scene: current.scene,
230
- };
231
- if (actor.origin !== 'webmcp') {
232
- Object.assign(result, renderAgentExcalidrawSvg(current.scene, { padding, scale }));
233
- }
234
- return result;
235
- }
236
257
 
237
258
  async verifyExcalidraw(actor, {
238
259
  format = 'png',
239
260
  inspectOcclusion = true,
240
261
  padding = 32,
241
262
  path,
263
+ render = true,
242
264
  scale = 1,
243
265
  } = {}) {
244
266
  const current = await this.readExcalidrawScene(actor, path);
@@ -250,52 +272,45 @@ export class AgentContentService {
250
272
  elementCount: inspection.elementCount,
251
273
  format,
252
274
  inspection,
275
+ layout: inspection.layout,
253
276
  path: current.path,
254
277
  revision: current.revision,
255
- scene: current.scene,
278
+ valid: inspection.valid,
256
279
  };
280
+ if (!render) return result;
281
+
282
+ result.scene = current.scene;
257
283
  if (actor.origin !== 'webmcp') {
258
284
  Object.assign(result, renderAgentExcalidrawSvg(current.scene, { padding, scale }));
259
285
  }
260
286
  return result;
261
287
  }
262
288
 
263
- listDocuments(actor, { cursor = '', kinds = [], limit = 100, prefix = '' } = {}) {
289
+ listWorkspaceEntries(actor, {
290
+ cursor = '',
291
+ kinds = [],
292
+ limit = 100,
293
+ prefix = '',
294
+ pathQuery = '',
295
+ } = {}) {
264
296
  requireScope(actor, 'vault:read');
265
297
  const normalizedPrefix = normalizeWorkspacePath(prefix);
298
+ const normalizedPathQuery = String(pathQuery).trim().toLocaleLowerCase();
266
299
  const kindFilter = new Set(Array.isArray(kinds) ? kinds : []);
267
300
  const state = this.workspaceMutationCoordinator?.workspaceState;
268
- const documents = Array.from(state?.entries?.values?.() ?? [])
269
- .filter((entry) => entry.nodeType !== 'directory' && isAgentReadablePath(entry.path))
270
- .filter((entry) => !normalizedPrefix || entry.path === normalizedPrefix || entry.path.startsWith(`${normalizedPrefix}/`))
271
- .filter((entry) => kindFilter.size === 0 || kindFilter.has(getVaultFileKind(entry.path)))
272
- .sort((left, right) => compareWorkspacePaths(left.path, right.path));
273
- const start = cursor ? Math.max(0, documents.findIndex((entry) => entry.path === cursor) + 1) : 0;
274
- const pageSize = clampInteger(limit, 100, 1, 200);
275
- const page = documents.slice(start, start + pageSize).map((entry) => {
276
- const metadata = state?.metadata?.get?.(entry.path);
277
- return {
278
- kind: getVaultFileKind(entry.path),
279
- mtimeMs: Number(metadata?.mtimeMs ?? entry.mtimeMs ?? 0),
280
- path: entry.path,
281
- size: Number(metadata?.size ?? 0),
282
- };
283
- });
284
- const truncated = start + page.length < documents.length;
285
- return {
286
- documents: page,
287
- nextCursor: truncated ? page.at(-1)?.path ?? null : null,
288
- truncated,
289
- };
290
- }
291
- listWorkspaceEntries(actor, { cursor = '', limit = 100, prefix = '' } = {}) {
292
- requireScope(actor, 'vault:read');
293
- const normalizedPrefix = normalizeWorkspacePath(prefix);
294
- const state = this.workspaceMutationCoordinator?.workspaceState;
295
301
  const entries = Array.from(state?.entries?.values?.() ?? [])
296
302
  .filter((entry) => !normalizedPrefix || entry.path === normalizedPrefix || entry.path.startsWith(`${normalizedPrefix}/`))
303
+ .filter((entry) => kindFilter.size === 0 || kindFilter.has(getVaultFileKind(entry.path)))
304
+ .filter((entry) => !normalizedPathQuery || entry.path.toLocaleLowerCase().includes(normalizedPathQuery))
297
305
  .sort((left, right) => compareWorkspacePaths(left.path, right.path));
298
- const start = cursor ? Math.max(0, entries.findIndex((entry) => entry.path === cursor) + 1) : 0;
306
+ let start = 0;
307
+ if (cursor) {
308
+ const cursorIndex = entries.findIndex((entry) => entry.path === cursor);
309
+ if (cursorIndex < 0) {
310
+ throw createAgentContentError('AGENT_CURSOR_INVALID', 'Pagination cursor is no longer valid', 400);
311
+ }
312
+ start = cursorIndex + 1;
313
+ }
299
314
  const pageSize = clampInteger(limit, 100, 1, 200);
300
315
  const page = entries.slice(start, start + pageSize).map((entry) => {
301
316
  const isDirectory = entry.nodeType === 'directory';
@@ -322,73 +337,137 @@ export class AgentContentService {
322
337
  }
323
338
 
324
339
 
325
- async searchVault(actor, { limit = 50, query = '', signal = null } = {}) {
340
+ async searchVault(actor, {
341
+ kinds = [],
342
+ limit = 10,
343
+ maxSnippetsPerFile = 2,
344
+ prefix = '',
345
+ query = '',
346
+ wholeWord = false,
347
+ signal = null,
348
+ } = {}) {
326
349
  requireScope(actor, 'vault:read');
327
350
  const normalizedQuery = String(query ?? '').trim().slice(0, 500);
328
- const result = await this.searchService.search({ limit, query: normalizedQuery, signal });
329
- if (normalizedQuery.length < 2) return result;
330
-
351
+ const normalizedPrefix = normalizeWorkspacePath(prefix);
352
+ const kindFilter = new Set(Array.isArray(kinds) ? kinds : []);
353
+ const snippetLimit = clampInteger(maxSnippetsPerFile, 2, 1, 10);
354
+ const pageSize = clampInteger(limit, 10, 1, 50);
355
+ const livePaths = new Set();
356
+ let liveIncomplete = false;
331
357
  const liveFiles = [];
332
- for (const [path, room] of this.roomRegistry?.getRooms?.() ?? []) {
333
- if (!isAgentReadablePath(path) || !room.isHydrated?.()) continue;
334
- const content = room.readEditableContent?.();
335
- if (content === null || content === undefined) continue;
336
- if (content.length > MAX_AGENT_READ_SOURCE_CHARACTERS) continue;
337
- const live = searchLiveText(content, normalizedQuery);
358
+ for (const [path, room] of normalizedQuery.length >= 2 ? this.roomRegistry?.getRooms?.() ?? [] : []) {
359
+ const kind = getVaultFileKind(path);
360
+ if (
361
+ !isAgentReadablePath(path)
362
+ || (normalizedPrefix && path !== normalizedPrefix && !path.startsWith(`${normalizedPrefix}/`))
363
+ || (kindFilter.size > 0 && !kindFilter.has(kind))
364
+ ) continue;
365
+ livePaths.add(path);
366
+ const content = room.isHydrated?.()
367
+ ? room.readEditableContent?.() ?? room.getPersistedContent?.()
368
+ : null;
369
+ if (content == null || content.length > MAX_AGENT_READ_SOURCE_CHARACTERS) {
370
+ liveIncomplete = true;
371
+ continue;
372
+ }
373
+ signal?.throwIfAborted();
374
+ let live;
375
+ if (kind === 'excalidraw') {
376
+ let scene;
377
+ try {
378
+ scene = JSON.parse(content);
379
+ } catch {
380
+ liveIncomplete = true;
381
+ continue;
382
+ }
383
+ live = searchExcalidrawSceneText(scene, {
384
+ query: normalizedQuery, maxSnippetsPerFile: snippetLimit, wholeWord,
385
+ });
386
+ } else {
387
+ live = searchLiveText(content, normalizedQuery, snippetLimit, wholeWord);
388
+ }
338
389
  if (live.matchCount > 0) {
339
- liveFiles.push({ file: path, kind: getVaultFileKind(path), ...live });
390
+ liveFiles.push({ file: path, kind, ...live });
340
391
  }
341
392
  }
342
- if (liveFiles.length === 0) return result;
343
-
344
- const livePaths = new Set(liveFiles.map(({ file }) => file));
345
- const files = [...result.files.filter(({ file }) => !livePaths.has(file)), ...liveFiles]
346
- .sort((left, right) => compareWorkspacePaths(left.file, right.file))
347
- .slice(0, clampInteger(limit, 50, 1, 50));
393
+ const result = await this.searchService.search({
394
+ excludedPaths: [...livePaths],
395
+ kinds: [...kindFilter],
396
+ limit: pageSize,
397
+ maxSnippetsPerFile: snippetLimit,
398
+ prefix: normalizedPrefix,
399
+ query: normalizedQuery,
400
+ wholeWord,
401
+ signal,
402
+ });
403
+ const candidates = [...result.files.filter(({ file }) => !livePaths.has(file)), ...liveFiles]
404
+ .sort((left, right) => compareWorkspacePaths(left.file, right.file));
405
+ const files = candidates.slice(0, pageSize);
348
406
  return {
349
407
  ...result,
350
408
  files,
351
409
  matchCount: files.reduce((sum, file) => sum + file.matchCount, 0),
352
- truncated: result.truncated || files.length < result.files.length + liveFiles.length,
410
+ truncated: result.truncated || liveIncomplete || candidates.length > files.length
411
+ || files.some((file) => file.truncated),
353
412
  };
354
413
  }
355
414
 
356
- async readDocument(actor, { lineCount = MAX_READ_LINES, path, startLine = 1 } = {}) {
415
+ async readDocument(actor, { lineCount = 80, mode = 'content', path, startLine = 1 } = {}) {
357
416
  requireScope(actor, 'vault:read');
358
417
  const normalizedPath = normalizeWorkspacePath(path);
418
+ const kind = getVaultFileKind(normalizedPath);
359
419
  if (!isAgentReadablePath(normalizedPath)) {
360
420
  throw createAgentContentError('AGENT_UNSUPPORTED_DOCUMENT', 'Document type is not readable by agents', 400);
361
421
  }
422
+ if (!['content', 'outline'].includes(mode) || (mode === 'outline' && kind !== 'markdown')) {
423
+ throw createAgentContentError('AGENT_INPUT_INVALID', 'Outline mode requires a Markdown document', 400);
424
+ }
362
425
  const content = await this.readCurrentContent(normalizedPath);
363
426
  if (content.length > MAX_AGENT_READ_SOURCE_CHARACTERS) {
364
427
  throw createAgentContentError('AGENT_DOCUMENT_TOO_LARGE', 'Document is too large for agent reading', 413);
365
428
  }
366
429
  const lines = content.split('\n');
367
430
  const start = clampInteger(startLine, 1, 1, Math.max(lines.length, 1));
368
- const count = clampInteger(lineCount, MAX_READ_LINES, 1, MAX_READ_LINES);
369
- let selected = lines.slice(start - 1, start - 1 + count).join('\n');
370
- let characterTruncated = false;
371
- let endLine = Math.min(start + count - 1, lines.length);
372
- if (selected.length > MAX_READ_CHARACTERS) {
373
- selected = selected.slice(0, MAX_READ_CHARACTERS);
374
- characterTruncated = true;
375
- let returnedLineCount = 1;
376
- for (let index = 0; index < selected.length; index += 1) {
377
- if (selected.charCodeAt(index) === 10) returnedLineCount += 1;
378
- }
379
- if (selected.endsWith('\n')) returnedLineCount -= 1;
380
- endLine = Math.min(start + Math.max(returnedLineCount, 1) - 1, lines.length);
381
- }
382
- return {
383
- content: selected,
384
- endLine,
385
- kind: getVaultFileKind(normalizedPath),
431
+ const count = clampInteger(lineCount, 80, 1, MAX_READ_LINES);
432
+ const result = {
433
+ content: '',
434
+ endLine: lines.length,
435
+ kind,
436
+ nextStartLine: null,
386
437
  path: normalizedPath,
387
438
  revision: await createEditableContentRevision(content),
388
439
  startLine: start,
389
440
  totalLines: lines.length,
390
- truncated: characterTruncated || endLine < lines.length,
441
+ truncated: false,
391
442
  };
443
+ if (mode === 'outline') {
444
+ const headings = collectMarkdownOutline(content).filter(({ line }) => line >= start);
445
+ result.headings = headings.slice(0, count);
446
+ if (headings.length > count) {
447
+ result.endLine = result.headings.at(-1).line;
448
+ result.nextStartLine = headings[count].line;
449
+ result.truncated = true;
450
+ }
451
+ return result;
452
+ }
453
+ const selected = [];
454
+ let characters = 0;
455
+ for (const line of lines.slice(start - 1, start - 1 + count)) {
456
+ const size = line.length + (selected.length ? 1 : 0);
457
+ if (characters + size > MAX_READ_CHARACTERS) {
458
+ if (selected.length === 0) {
459
+ throw createAgentContentError('AGENT_DOCUMENT_LINE_TOO_LARGE', 'This line exceeds the 100000-character read limit; read a different line or use Markdown outline mode', 413);
460
+ }
461
+ break;
462
+ }
463
+ selected.push(line);
464
+ characters += size;
465
+ }
466
+ result.content = selected.join('\n');
467
+ result.endLine = start + selected.length - 1;
468
+ result.truncated = result.endLine < lines.length;
469
+ result.nextStartLine = result.truncated ? result.endLine + 1 : null;
470
+ return result;
392
471
  }
393
472
  async inspectDocumentReferences(actor, { path } = {}) {
394
473
  requireScope(actor, 'vault:read');
@@ -400,13 +479,22 @@ export class AgentContentService {
400
479
  if (content.length > MAX_AGENT_READ_SOURCE_CHARACTERS) {
401
480
  throw createAgentContentError('AGENT_DOCUMENT_TOO_LARGE', 'Document is too large for agent inspection', 413);
402
481
  }
482
+ return {
483
+ ...this.inspectMarkdownContent(normalizedPath, content),
484
+ backlinks: await this.backlinkIndex?.getBacklinks?.(normalizedPath) ?? [],
485
+ path: normalizedPath,
486
+ revision: await createEditableContentRevision(content),
487
+ };
488
+ }
489
+
490
+ inspectMarkdownContent(normalizedPath, content) {
403
491
  const entries = Array.from(this.workspaceMutationCoordinator?.workspaceState?.entries?.values?.() ?? []);
404
492
  const filePaths = entries
405
493
  .filter((entry) => entry.nodeType !== 'directory')
406
494
  .map((entry) => entry.path);
407
495
  const references = collectMarkdownReferences(content, {
408
496
  sourceFilePath: normalizedPath,
409
- wikiTargetIndex: createWikiTargetIndex(filePaths),
497
+ wikiTargetIndex: createWikiTargetIndex([...filePaths, normalizedPath]),
410
498
  });
411
499
  const toPublicReference = (reference) => ({
412
500
  exists: Boolean(reference.resolvedPath),
@@ -430,10 +518,7 @@ export class AgentContentService {
430
518
  };
431
519
  });
432
520
  return {
433
- backlinks: await this.backlinkIndex?.getBacklinks?.(normalizedPath) ?? [],
434
521
  embeds: references.filter(({ isEmbed }) => isEmbed).map(toPublicReference),
435
- path: normalizedPath,
436
- revision: await createEditableContentRevision(content),
437
522
  videos,
438
523
  wikiLinks: references.filter(({ isEmbed }) => !isEmbed).map(toPublicReference),
439
524
  };
@@ -441,6 +526,10 @@ export class AgentContentService {
441
526
 
442
527
  async validateDocument(actor, { path } = {}) {
443
528
  const inspected = await this.inspectDocumentReferences(actor, { path });
529
+ return { ...this.validateMarkdownReferences(inspected), path: inspected.path, revision: inspected.revision };
530
+ }
531
+
532
+ validateMarkdownReferences(inspected) {
444
533
  const issues = [];
445
534
  inspected.wikiLinks.filter(({ exists }) => !exists).forEach((reference) => {
446
535
  issues.push({
@@ -468,12 +557,36 @@ export class AgentContentService {
468
557
  });
469
558
  return {
470
559
  issues,
471
- path: inspected.path,
472
- revision: inspected.revision,
473
560
  valid: issues.length === 0,
474
561
  };
475
562
  }
476
563
 
564
+ async queryBase(actor, { limit = 50, path, search = '', view = '' } = {}) {
565
+ requireScope(actor, 'vault:read');
566
+ const normalizedPath = normalizeWorkspacePath(path);
567
+ if (!isBaseFilePath(normalizedPath)) {
568
+ throw createAgentContentError('AGENT_UNSUPPORTED_DOCUMENT', 'Base queries require a .base path', 400);
569
+ }
570
+ const content = await this.readCurrentContent(normalizedPath);
571
+ if (!this.baseQueryService?.query) {
572
+ throw createAgentContentError('AGENT_BASE_QUERY_UNAVAILABLE', 'Bases query service is unavailable', 503);
573
+ }
574
+ const pageSize = clampInteger(limit, 50, 1, 200);
575
+ try {
576
+ const result = await this.baseQueryService.query({
577
+ basePath: normalizedPath,
578
+ search,
579
+ source: content,
580
+ sourcePath: normalizedPath,
581
+ view,
582
+ });
583
+ return toAgentBaseQueryResult(normalizedPath, result, pageSize);
584
+ } catch (error) {
585
+ if (error?.code?.startsWith('AGENT_')) throw error;
586
+ throw createAgentContentError('AGENT_BASE_QUERY_FAILED', error.message || 'Failed to query base', 400);
587
+ }
588
+ }
589
+
477
590
  async renderDiagram(actor, { format = 'png', path, startLine } = {}) {
478
591
  requireScope(actor, 'vault:read');
479
592
  const normalizedPath = normalizeWorkspacePath(path);
@@ -523,12 +636,13 @@ export class AgentContentService {
523
636
  }
524
637
 
525
638
 
526
- async applyTextEdits(actor, { path, replacements, revision } = {}) {
639
+ async applyTextEdits(actor, { path, replacements, revision, validate = false } = {}) {
527
640
  requireScope(actor, 'vault:edit');
528
641
  const normalizedPath = normalizeWorkspacePath(path);
529
642
  if (!isAgentEditablePath(normalizedPath)) {
530
643
  throw createAgentContentError('AGENT_UNSUPPORTED_DOCUMENT', 'Document type is not editable by agents', 400);
531
644
  }
645
+ this.requireMarkdownValidation(normalizedPath, validate);
532
646
  return this.runForPath(normalizedPath, async () => {
533
647
  const content = await this.readCurrentContent(normalizedPath);
534
648
  if (content.length > MAX_DOCUMENT_CHARACTERS) {
@@ -552,15 +666,20 @@ export class AgentContentService {
552
666
  error.code = error.code?.startsWith('EXACT_EDIT_') ? 'AGENT_REPLACEMENT_MISMATCH' : error.code;
553
667
  throw error;
554
668
  }
669
+ const nextContent = applyExactTextChanges(content, changes);
670
+ assertValidAgentBaseContent(normalizedPath, nextContent);
555
671
  const room = this.roomRegistry?.get?.(normalizedPath);
556
- let nextContent;
672
+ const validation = validate
673
+ ? this.validateMarkdownReferences(this.inspectMarkdownContent(normalizedPath, nextContent))
674
+ : null;
557
675
  if (room) {
676
+ if (room.readEditableContent() !== content) {
677
+ throw createAgentContentError('AGENT_REVISION_CONFLICT', 'Document changed; read it again before editing', 409);
678
+ }
558
679
  room.applyExactTextChanges(changes, {
559
680
  origin: createCollaborationOrigin(actor),
560
681
  });
561
- nextContent = room.readEditableContent();
562
682
  } else {
563
- nextContent = applyExactTextChanges(content, changes);
564
683
  const result = await this.workspaceMutationCoordinator.writeEditableContent({
565
684
  content: nextContent,
566
685
  origin: getMutationOrigin(actor),
@@ -574,6 +693,7 @@ export class AgentContentService {
574
693
  path: normalizedPath,
575
694
  replacementCount: changes.length,
576
695
  revision: await createEditableContentRevision(nextContent),
696
+ ...(validation ? { validation } : {}),
577
697
  };
578
698
  });
579
699
  }
@@ -644,6 +764,7 @@ export class AgentContentService {
644
764
  async editExcalidraw(actor, {
645
765
  create = [],
646
766
  delete: remove = [],
767
+ normalizeTextPlacement,
647
768
  path,
648
769
  reorder = [],
649
770
  replace = [],
@@ -666,11 +787,12 @@ export class AgentContentService {
666
787
  if (revision !== await createEditableContentRevision(content)) {
667
788
  throw createAgentContentError('AGENT_REVISION_CONFLICT', 'Document changed; read it again before editing', 409);
668
789
  }
669
- let scene;
790
+ let edit;
670
791
  try {
671
- scene = applyAgentExcalidrawEdits(JSON.parse(content), {
792
+ edit = applyAgentExcalidrawEditsWithSummary(JSON.parse(content), {
672
793
  create,
673
794
  delete: remove,
795
+ normalizeTextPlacement,
674
796
  reorder,
675
797
  replace,
676
798
  update,
@@ -685,6 +807,7 @@ export class AgentContentService {
685
807
  }
686
808
  throw error;
687
809
  }
810
+ const { reflowed, scene } = edit;
688
811
  const room = this.roomRegistry?.get?.(normalizedPath);
689
812
  let nextContent;
690
813
  if (room) {
@@ -714,6 +837,7 @@ export class AgentContentService {
714
837
  elementCount: storedScene.elements.filter((element) => !element.isDeleted).length,
715
838
  path: normalizedPath,
716
839
  reordered: reorder.length,
840
+ reflowed,
717
841
  replaced: replace.length,
718
842
  revision: await createEditableContentRevision(nextContent),
719
843
  translated: translate?.ids?.length ?? 0,
@@ -728,17 +852,22 @@ export class AgentContentService {
728
852
  });
729
853
  }
730
854
 
731
- async createDocument(actor, { content = '', path } = {}) {
855
+ async createDocument(actor, { content = '', path, validate = false } = {}) {
732
856
  requireScope(actor, 'vault:edit');
733
857
  const normalizedPath = normalizeWorkspacePath(path);
734
858
  if (!isAgentCreatablePath(normalizedPath)) {
735
859
  throw createAgentContentError('AGENT_UNSUPPORTED_DOCUMENT', 'Document type cannot be created by agents', 400);
736
860
  }
861
+ this.requireMarkdownValidation(normalizedPath, validate);
737
862
  const normalizedContent = normalizeEditableText(content);
738
863
  if (normalizedContent.length > MAX_DOCUMENT_CHARACTERS) {
739
864
  throw createAgentContentError('AGENT_DOCUMENT_TOO_LARGE', 'Document is too large for agent creation', 413);
740
865
  }
866
+ assertValidAgentBaseContent(normalizedPath, normalizedContent);
741
867
  return this.runForPath(normalizedPath, async () => {
868
+ const validation = validate
869
+ ? this.validateMarkdownReferences(this.inspectMarkdownContent(normalizedPath, normalizedContent))
870
+ : null;
742
871
  const result = await this.workspaceMutationCoordinator.createFile({
743
872
  content: normalizedContent,
744
873
  origin: getMutationOrigin(actor),
@@ -759,10 +888,17 @@ export class AgentContentService {
759
888
  kind: getVaultFileKind(normalizedPath),
760
889
  path: normalizedPath,
761
890
  revision: await createEditableContentRevision(normalizedContent),
891
+ ...(validation ? { validation } : {}),
762
892
  };
763
893
  });
764
894
  }
765
895
 
896
+ requireMarkdownValidation(path, validate) {
897
+ if (validate && getVaultFileKind(path) !== 'markdown') {
898
+ throw createAgentContentError('AGENT_INPUT_INVALID', 'Reference validation requires a Markdown document', 400);
899
+ }
900
+ }
901
+
766
902
  getSyntax(actor, { kind = '' } = {}) {
767
903
  requireScope(actor, 'vault:read');
768
904
  if (!kind) return { capabilities: listCollabMdContentCapabilities() };
@@ -3,9 +3,6 @@ import {
3
3
  AUTH_STRATEGY_NONE,
4
4
  AUTH_STRATEGY_OIDC,
5
5
  AUTH_STRATEGY_PASSWORD,
6
- SUPPORTED_AUTH_STRATEGIES,
7
- createRandomAuthPassword,
8
- createRandomSessionSecret,
9
6
  } from './auth-constants.js';
10
7
  import {
11
8
  buildClientConfig,
@@ -18,14 +15,27 @@ import {
18
15
  createPasswordStrategy,
19
16
  } from './auth-strategies.js';
20
17
 
21
- export {
22
- AUTH_STRATEGY_NONE,
23
- AUTH_STRATEGY_OIDC,
24
- AUTH_STRATEGY_PASSWORD,
25
- SUPPORTED_AUTH_STRATEGIES,
26
- createRandomAuthPassword,
27
- createRandomSessionSecret,
28
- };
18
+ function resolveRequestProtocol(req) {
19
+ const forwarded = String(req.headers['x-forwarded-proto'] ?? '').split(',')[0].trim().toLowerCase();
20
+ if (forwarded === 'https' || forwarded === 'http') {
21
+ return `${forwarded}:`;
22
+ }
23
+
24
+ try {
25
+ const cfVisitor = JSON.parse(req.headers['cf-visitor'] ?? '');
26
+ if (String(cfVisitor?.scheme).toLowerCase() === 'https') {
27
+ return 'https:';
28
+ }
29
+ } catch {
30
+ // Non-Cloudflare requests carry no cf-visitor payload.
31
+ }
32
+
33
+ if (req.socket?.encrypted) {
34
+ return 'https:';
35
+ }
36
+
37
+ return 'http:';
38
+ }
29
39
 
30
40
  export function createAuthService(config) {
31
41
  const authConfig = config.auth ?? { strategy: AUTH_STRATEGY_NONE };
@@ -72,8 +82,26 @@ export function createAuthService(config) {
72
82
  },
73
83
 
74
84
  authorizeWebSocketRequest(req) {
85
+ // Browsers always send Origin; clients without it still need authentication.
86
+ if (req.headers.origin !== undefined) {
87
+ let allowed = false;
88
+ try {
89
+ const protocol = resolveRequestProtocol(req);
90
+ const expectedOrigin = authConfig.oidc?.publicBaseUrl
91
+ ? new URL(authConfig.oidc.publicBaseUrl).origin
92
+ : new URL(`${protocol}//${req.headers.host}`).origin;
93
+ allowed = req.headers.origin === expectedOrigin;
94
+ } catch {
95
+ // Malformed or opaque origins are forbidden.
96
+ }
97
+ if (!allowed) {
98
+ return { ok: false, statusCode: 403, statusMessage: 'Forbidden', body: 'Origin not allowed' };
99
+ }
100
+ }
75
101
  if (strategy.isAuthenticated(req)) {
76
- return { ok: true };
102
+ const expiresAt = authConfig.strategy === AUTH_STRATEGY_NONE
103
+ ? null : sessionCookieManager.readSession(req)?.expiresAt;
104
+ return { ok: true, expiresAt: Number.isFinite(expiresAt) ? expiresAt : null };
77
105
  }
78
106
 
79
107
  return {