collabmd 0.1.51 → 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 (584) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BEz2BKN1.js +1 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/Middleware-DUgFSleI.js +1 -0
  63. package/dist/client/assets/_basePickBy-QJXUw_pr.js +1 -0
  64. package/dist/client/assets/_baseUniq-DR4vVjyC.js +1 -0
  65. package/dist/client/assets/abnfDiagram-O67JEVCF-Dwt6a0Ds.js +1 -0
  66. package/dist/client/assets/abnfDiagram-VCTEODGH-DxNxad6-.js +1 -0
  67. package/dist/client/assets/architecture-7GRP2DOG-BBwRXFv3.js +1 -0
  68. package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +1 -0
  69. package/dist/client/assets/architectureDiagram-5GKGNRK7-C1uvg5id.js +36 -0
  70. package/dist/client/assets/architectureDiagram-NJMV4G6O-D5CGiX3G.js +36 -0
  71. package/dist/client/assets/{babel-CY5KOv-I.js → babel-Bi_28hhi.js} +1 -1
  72. package/dist/client/assets/band-D-Cum8PO.js +1 -0
  73. package/dist/client/assets/blockDiagram-BEXU5L5S-BgTM0var.js +140 -0
  74. package/dist/client/assets/blockDiagram-I7D4REHJ-B2YonsoG.js +129 -0
  75. package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-DyJcVMFR.js → browser-BKLM0ThC-IxjwuOIz-C0mP17s1.js} +1 -1
  76. package/dist/client/assets/{browser-utils-DbXSMI-6.js → browser-utils-vlHL9goC.js} +1 -1
  77. package/dist/client/assets/{c4Diagram-7LVT6UL2-VAk1HPmz.js → c4Diagram-7LVT6UL2-r4IwomZm.js} +2 -2
  78. package/dist/client/assets/c4Diagram-YGBWAQC7-_xZPrNkB.js +38 -0
  79. package/dist/client/assets/channel-CgcHBnmr.js +1 -0
  80. package/dist/client/assets/chunk-2E4U76K2-CIQUuV9n.js +1 -0
  81. package/dist/client/assets/chunk-2Q5K7J3B-BMFG3ur0.js +1 -0
  82. package/dist/client/assets/{chunk-2ZTRR5NV-C2qZJila.js → chunk-2ZTRR5NV-CnDP55cn.js} +1 -1
  83. package/dist/client/assets/chunk-2ZTRR5NV-DcPRfelM.js +2 -0
  84. package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +1 -0
  85. package/dist/client/assets/{chunk-3Z5EZCMW-DMniOlPd.js → chunk-3Z5EZCMW-BAnA6eQ7.js} +1 -1
  86. package/dist/client/assets/chunk-3Z5EZCMW-Yx4Q5AcN.js +1 -0
  87. package/dist/client/assets/chunk-4HAMMTFA-q0ldNVvr.js +62 -0
  88. package/dist/client/assets/chunk-4SOEAONT-C3fufoVl.js +40 -0
  89. package/dist/client/assets/chunk-5DYCD2WN-BKWCKnK-.js +1 -0
  90. package/dist/client/assets/{chunk-5V3GS4D5-i-ZDOEnP.js → chunk-5V3GS4D5-B5uC2oxu.js} +1 -1
  91. package/dist/client/assets/chunk-5V3GS4D5-BR7kgIgJ.js +1 -0
  92. package/dist/client/assets/chunk-5VM5RSS4-hE9rU_bl.js +15 -0
  93. package/dist/client/assets/chunk-6AEJRKK7-DTVZj5bY.js +1 -0
  94. package/dist/client/assets/{chunk-6AZGARVD-BB6FqMl-.js → chunk-6AZGARVD--pTGpDnx.js} +1 -1
  95. package/dist/client/assets/chunk-6AZGARVD-CnZDr4Cj.js +1 -0
  96. package/dist/client/assets/{chunk-6EIED4P4-DdUJkP0f.js → chunk-6EIED4P4-Bp8dpTvX.js} +1 -1
  97. package/dist/client/assets/chunk-6EIED4P4-DBVWq7Tz.js +1 -0
  98. package/dist/client/assets/{chunk-6K3QC6MW-CqVsVn-y.js → chunk-6K3QC6MW-DGVRzL6v.js} +1 -1
  99. package/dist/client/assets/chunk-6K3QC6MW-JnuvEGV4.js +1 -0
  100. package/dist/client/assets/{chunk-6TQVIW2G-DKlLbNIP.js → chunk-6TQVIW2G-BSj0l_pu.js} +1 -1
  101. package/dist/client/assets/chunk-6TQVIW2G-DgBX-Pv0.js +1 -0
  102. package/dist/client/assets/chunk-742MDFTN-D1nh6vNv.js +1 -0
  103. package/dist/client/assets/{chunk-747NJXEK-BFkZPlab.js → chunk-747NJXEK-BjqqAsS9.js} +1 -1
  104. package/dist/client/assets/chunk-747NJXEK-Cur1aosP.js +2 -0
  105. package/dist/client/assets/chunk-75Z2AOVW-DitkSoSG.js +2 -0
  106. package/dist/client/assets/chunk-7INBJB4K-CDmiHbaX.js +62 -0
  107. package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +213 -0
  108. package/dist/client/assets/chunk-7PRAP22T-9uTvtc_-.js +1 -0
  109. package/dist/client/assets/{chunk-CLGD4ZFX-Cmtx89ht.js → chunk-CLGD4ZFX-BfYJtJm1.js} +1 -1
  110. package/dist/client/assets/chunk-DU6HZSFF-CWlP1Dk_.js +125 -0
  111. package/dist/client/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  112. package/dist/client/assets/chunk-DYU5D34O-DN0WQZBm.js +1 -0
  113. package/dist/client/assets/{chunk-F27PBJKO-Dg3H6KLL.js → chunk-F27PBJKO-DPcsPcEs.js} +1 -1
  114. package/dist/client/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-Dmmo5Kak.js} +9 -9
  115. package/dist/client/assets/chunk-FOHPRMQF-DzxwRta7.js +161 -0
  116. package/dist/client/assets/chunk-GMAD6QVW-Bgk8qnty.js +8 -0
  117. package/dist/client/assets/chunk-GNY47TPC-CTrH5O5R.js +1 -0
  118. package/dist/client/assets/{chunk-SVP7TREG-XlsB_ZMZ.js → chunk-GTNCS2PH-ChgkzEIi.js} +1 -1
  119. package/dist/client/assets/chunk-GVQU2GXP-CQ8cl-Uu.js +1 -0
  120. package/dist/client/assets/chunk-GWA4HPMP-CGmv2yIq.js +1 -0
  121. package/dist/client/assets/{chunk-I5DQTOEV-Hm2LfiYI.js → chunk-I5DQTOEV-B98XA8VK.js} +1 -1
  122. package/dist/client/assets/chunk-I5DQTOEV-aBZooNp1.js +1 -0
  123. package/dist/client/assets/{chunk-ICYGCRZG-749o-pGJ.js → chunk-ICYGCRZG-D97UeqJs.js} +1 -1
  124. package/dist/client/assets/chunk-ICYGCRZG-odvlDZyA.js +1 -0
  125. package/dist/client/assets/{chunk-IH6LHLGP-CC6I9F3i.js → chunk-IH6LHLGP-BNevEHZK.js} +1 -1
  126. package/dist/client/assets/chunk-IH6LHLGP-CvXe34hB.js +1 -0
  127. package/dist/client/assets/{chunk-IMKFNOWR-3F6NhHUP.js → chunk-IMKFNOWR-CBqxfpcP.js} +2 -2
  128. package/dist/client/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  129. package/dist/client/assets/chunk-JWPE2WC7-GDilnS5Y.js +1 -0
  130. package/dist/client/assets/{chunk-KI3K4JFJ-Rma-0k_M.js → chunk-KI3K4JFJ-D5XCPRZv.js} +1 -1
  131. package/dist/client/assets/chunk-KI3K4JFJ-FTtDwx3-.js +1 -0
  132. package/dist/client/assets/chunk-L3NEJ4N5-BflzkdTI.js +1 -0
  133. package/dist/client/assets/{chunk-LNGE3PJU-DWpGwHrW.js → chunk-LNGE3PJU-5-SxdO55.js} +1 -1
  134. package/dist/client/assets/chunk-LNGE3PJU-5nWSl6jJ.js +34 -0
  135. package/dist/client/assets/chunk-MBY4JIJT-DTJ4UcAm.js +8 -0
  136. package/dist/client/assets/chunk-NETBCI7D-CmUwDWUZ.js +1 -0
  137. package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +126 -0
  138. package/dist/client/assets/chunk-OSK3NFVY-DqeKV_pg.js +10 -0
  139. package/dist/client/assets/{chunk-OUJLGHUK-D0j2JRSg.js → chunk-OUJLGHUK-75UXlPjl.js} +1 -1
  140. package/dist/client/assets/chunk-OUJLGHUK-DA95-S9B.js +2 -0
  141. package/dist/client/assets/{chunk-P2QGCYS3-Du8EtwOa.js → chunk-P2QGCYS3-BA--DhpW.js} +1 -1
  142. package/dist/client/assets/chunk-POPQ4Y6H-V_NEc45n.js +1 -0
  143. package/dist/client/assets/chunk-PWAF6VOD-D_kLse-N.js +1 -0
  144. package/dist/client/assets/{chunk-ZPMXAHWN-Dt0TxJa6.js → chunk-RUX4WMZV-BGnd3s_C.js} +4 -4
  145. package/dist/client/assets/{chunk-SHT3W25Y-BKaI8jZO.js → chunk-SHT3W25Y-YM3S-A_M.js} +5 -5
  146. package/dist/client/assets/chunk-SVP7TREG-DdNhDOmW.js +88 -0
  147. package/dist/client/assets/{chunk-TICWLB2K-Cpp2z8yK.js → chunk-TICWLB2K-BGGgCr4x.js} +3 -3
  148. package/dist/client/assets/chunk-TLUHSLCS-DCZhIDYA.js +1 -0
  149. package/dist/client/assets/chunk-UA2S7LBM-DicYDjDM.js +1 -0
  150. package/dist/client/assets/{chunk-UY3FDG6J-CnmaAkG5.js → chunk-UY3FDG6J-DqSM_0FB.js} +1 -1
  151. package/dist/client/assets/chunk-UY3FDG6J-QT-rkt0y.js +1 -0
  152. package/dist/client/assets/chunk-WEXAMYUT-DDlVNp8J.js +1 -0
  153. package/dist/client/assets/chunk-X3CZISLH-BixgQztF.js +1 -0
  154. package/dist/client/assets/chunk-X3CZISLH-DwWpRaN8.js +1 -0
  155. package/dist/client/assets/{chunk-XHIXRSVI-BFQ6B8BE.js → chunk-XHIXRSVI-BSN7JlfK.js} +1 -1
  156. package/dist/client/assets/chunk-XHIXRSVI-DN_fEwws.js +1 -0
  157. package/dist/client/assets/chunk-XXDRQBXY-C7hQHDmQ.js +1 -0
  158. package/dist/client/assets/{chunk-XXDRQBXY-BvKO0v-W.js → chunk-XXDRQBXY-CdRN9Akd.js} +1 -1
  159. package/dist/client/assets/chunk-Y2CYZVJY-BbRBGnmc.js +1 -0
  160. package/dist/client/assets/chunk-Z7XXMR3K-P4Vaq8hD.js +10 -0
  161. package/dist/client/assets/chunk-ZIGJFQKS-b8OUHKK5.js +2 -0
  162. package/dist/client/assets/classDiagram-ZZMXUADV-QLbh_Nkf.js +1 -0
  163. package/dist/client/assets/classDiagram-v2-NBCMYWYE-3TQORq33.js +217 -0
  164. package/dist/client/assets/classDiagram-v2-VYDZK3BY-QLbh_Nkf.js +1 -0
  165. package/dist/client/assets/clone-C1hp9FUh.js +1 -0
  166. package/dist/client/assets/comment-markdown-renderer-Bxi_JRSR.js +1 -0
  167. package/dist/client/assets/comment-thread-store-CHvy8GF8.js +1 -0
  168. package/dist/client/assets/cose-bilkent-JH36ORCC-Czr0rwGr.js +1 -0
  169. package/dist/client/assets/cose-bilkent-JH36ORCC-DLmEf9HS.js +1 -0
  170. package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +1 -0
  171. package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +1 -0
  172. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DTnLZaO7.js +62 -0
  173. package/dist/client/assets/cynefinDiagram-VND7K2PF-DwfMZ3vk.js +62 -0
  174. package/dist/client/assets/cytoscape-cose-bilkent-NdTYBUiT.js +1 -0
  175. package/dist/client/assets/cytoscape-fcose-DE9_QRG_.js +1 -0
  176. package/dist/client/assets/cytoscape.esm-EK2DW5Qr.js +321 -0
  177. package/dist/client/assets/dagre-6A5THRUB-DewyAGK6.js +4 -0
  178. package/dist/client/assets/dagre-D7FiCLLP.js +1 -0
  179. package/dist/client/assets/{dagre-GXQ25YYZ-BSfKCfy7.js → dagre-GXQ25YYZ-Vtyx08Qh.js} +2 -2
  180. package/dist/client/assets/deferred-collab-D4cxEdad.css +1 -0
  181. package/dist/client/assets/deferred-preview-BAXYgf4T.css +1 -0
  182. package/dist/client/assets/diagram-22UHCM2B-DbZirFfl.js +200 -0
  183. package/dist/client/assets/diagram-3UASUU5V-DmhdYv6_.js +24 -0
  184. package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +3 -0
  185. package/dist/client/assets/diagram-CDSNMT55-D_qyS11R.js +30 -0
  186. package/dist/client/assets/diagram-MLGK6HIB-DIBG6Ivu.js +24 -0
  187. package/dist/client/assets/diagram-MPIPVDR6-D9XsALDV.js +41 -0
  188. package/dist/client/assets/{diagram-S7CK7UJ4-D7KaM9yj.js → diagram-S7CK7UJ4-CGTzfo2f.js} +3 -3
  189. package/dist/client/assets/diagram-UQ7AKVKN-CWZS8QtB.js +41 -0
  190. package/dist/client/assets/{diagram-VSXAHHWV-B3-U-Q2E.js → diagram-VSXAHHWV-DaO1nOZF.js} +3 -3
  191. package/dist/client/assets/diagram-VX7I27RA-B54P6Cyf.js +24 -0
  192. package/dist/client/assets/diagram-Z3DM3KII-Cl2EXiXp.js +24 -0
  193. package/dist/client/assets/direct-engine-DdrQKpgq-4QysbH_V.js +5 -0
  194. package/dist/client/assets/dist-B7fBbwrO.js +1 -0
  195. package/dist/client/assets/{dist-DVXzbeDx.js → dist-BVCNc-Es.js} +1 -1
  196. package/dist/client/assets/dist-BYBF4LtZ.js +1 -0
  197. package/dist/client/assets/{dist-B_B4XLmq.js → dist-B_1hMrc6.js} +1 -1
  198. package/dist/client/assets/{dist-EWJYvBK1.js → dist-BfpAc922.js} +1 -1
  199. package/dist/client/assets/dist-BnVaoRgZ.js +1 -0
  200. package/dist/client/assets/{dist-kiD2GIsD.js → dist-Bog8M5U3.js} +6 -6
  201. package/dist/client/assets/dist-CAG5sIOj.js +1 -0
  202. package/dist/client/assets/{dist-CrWzIWEE.js → dist-CKf7LlAo.js} +1 -1
  203. package/dist/client/assets/{dist-CqXVyYoH.js → dist-CUsXdnU4.js} +1 -1
  204. package/dist/client/assets/{dist-B7XMN9AT.js → dist-CXOUa90Q.js} +1 -1
  205. package/dist/client/assets/dist-CYMCikZo.js +1 -0
  206. package/dist/client/assets/dist-CYfPeupF.js +1 -0
  207. package/dist/client/assets/dist-Ch6Sr9KF.js +28 -0
  208. package/dist/client/assets/dist-Ck-B8onw.js +2 -0
  209. package/dist/client/assets/dist-CrkYYcOU.js +1 -0
  210. package/dist/client/assets/{dist-BR81yxMt.js → dist-CsQTfQFi.js} +1 -1
  211. package/dist/client/assets/dist-Cu5Ze2cs.js +6 -0
  212. package/dist/client/assets/{dist-Drv_wZYC.js → dist-CvVoyTRF.js} +1 -1
  213. package/dist/client/assets/{dist-CbDyXgCo.js → dist-D4kDR0g8.js} +1 -1
  214. package/dist/client/assets/dist-D8LnhZzy.js +1 -0
  215. package/dist/client/assets/{dist-CELhfKzh.js → dist-DGa-2MNX.js} +2 -2
  216. package/dist/client/assets/{dist-CO0-4CuV.js → dist-DI6c02Da.js} +8 -8
  217. package/dist/client/assets/{dist-DJAMplZI.js → dist-DNONgI1P.js} +2 -2
  218. package/dist/client/assets/dist-DVBYH83t.js +1 -0
  219. package/dist/client/assets/dist-DX6qtdxv.js +1 -0
  220. package/dist/client/assets/{dist-Bx3QkS-3.js → dist-Da-jLrCf.js} +1 -1
  221. package/dist/client/assets/dist-DofvCYzJ.js +1 -0
  222. package/dist/client/assets/{dist-BzFSJM0U.js → dist-Dx37MHWs.js} +1 -1
  223. package/dist/client/assets/{dist-Bdy9ZRzd.js → dist-GTGhtpyW.js} +1 -1
  224. package/dist/client/assets/{dist-nxQErAaK.js → dist-W0FoeIxk.js} +9 -9
  225. package/dist/client/assets/{dist-By7ieqAf.js → dist-Y6zYRI-A.js} +1 -1
  226. package/dist/client/assets/{dist-Bfxzlnrf.js → dist-jVKfryIL.js} +1 -1
  227. package/dist/client/assets/{dist-DCpIH3-_.js → dist-zHDLm1oE.js} +1 -1
  228. package/dist/client/assets/{document-formatter-Qdiq9uJs.js → document-formatter-gO8qM2qY.js} +1 -1
  229. package/dist/client/assets/{drawioEditor-CHf1vtdQ.js → drawioEditor-DCkWweiy.js} +2 -2
  230. package/dist/client/assets/duration-BiuFXtXd.js +1 -0
  231. package/dist/client/assets/ebnfDiagram-PWID7BFC-PfC84FyI.js +1 -0
  232. package/dist/client/assets/ebnfDiagram-ZINNZB2B-DYvm_QtE.js +1 -0
  233. package/dist/client/assets/editor-session-DxRyr4EM.js +14 -0
  234. package/dist/client/assets/elk-276RUBZZ-B8LB3Pac.js +27 -0
  235. package/dist/client/assets/embedded-editor-base-elU0Avik.css +1 -0
  236. package/dist/client/assets/{embedpdf-DA4bA119-E8wZ11J2.js → embedpdf-DA4bA119-DsoNiPlQ.js} +4 -4
  237. package/dist/client/assets/{embedpdf-LUXDBD3-.js → embedpdf-DyOonRvx.js} +1 -1
  238. package/dist/client/assets/{en-2RFA324Y-BsuNJTcL.js → en-GNC3RJIS-CEy_oGTd.js} +1 -1
  239. package/dist/client/assets/erDiagram-OPXOYQCR-o8GRv8A_.js +99 -0
  240. package/dist/client/assets/{erDiagram-RLTQ6QDP-CWrH1UJ9.js → erDiagram-RLTQ6QDP-C9cJl5NB.js} +2 -2
  241. package/dist/client/assets/esm-BzZ1JFVo.js +65 -0
  242. package/dist/client/assets/{estree-CuT_pB8K.js → estree-DCT3Jm65.js} +4 -4
  243. package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +1 -0
  244. package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +1 -0
  245. package/dist/client/assets/{excalidraw-element-link-iA6zo0_f.js → excalidraw-element-link-CGZ5934B.js} +1 -1
  246. package/dist/client/assets/{excalidrawEditor-DDE0n1Pk.css → excalidrawEditor-BCTFp_CV.css} +1 -1
  247. package/dist/client/assets/excalidrawEditor-BVfSxjSO.js +9 -0
  248. package/dist/client/assets/export-page-BCo_e15t.js +46 -0
  249. package/dist/client/assets/exportDocument-Ba-n1X4U.css +1 -0
  250. package/dist/client/assets/exportDocument-DP6oE_or.js +2 -0
  251. package/dist/client/assets/{fa-IR-FIYUE2GQ-C865Nx3X.js → fa-IR-I4JNTJHK-CFtHZqoT.js} +1 -1
  252. package/dist/client/assets/file-search-3hYF4cYa.js +1 -0
  253. package/dist/client/assets/flowDiagram-HODETNUW-Bq4470NR.js +1 -0
  254. package/dist/client/assets/flowDiagram-KWPJA3E3-DQG9qGiU.js +1 -0
  255. package/dist/client/assets/forth-D6RzAl64.js +1 -0
  256. package/dist/client/assets/ganttDiagram-EL5Y4UJY-x40PW0Ah.js +292 -0
  257. package/dist/client/assets/ganttDiagram-FUAMR5RP-BQpsI7gQ.js +292 -0
  258. package/dist/client/assets/gitGraph-4MIJSDKK-B-rpDYbz.js +1 -0
  259. package/dist/client/assets/gitGraph-4MIJSDKK-ZaBIE4Lb.js +1 -0
  260. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-ahsNaZsp.js +106 -0
  261. package/dist/client/assets/gitGraphDiagram-X574FWY7-wbs_2m9f.js +106 -0
  262. package/dist/client/assets/graphlib-C9Tl7QrK.js +1 -0
  263. package/dist/client/assets/{html-Cdnr2qzU.js → html-CBXMuS97.js} +2 -2
  264. package/dist/client/assets/html-DTuc_pxj.js +1 -0
  265. package/dist/client/assets/{id-ID-EOMR5R3I-CGQwUjoL.js → id-ID-2WY7E4VX-CCAeQpPr.js} +2 -2
  266. package/dist/client/assets/image-EJJKRVD3-BQfi5nWJ.js +1 -0
  267. package/dist/client/assets/{image-blob-reduce.esm-Dj7YBvMv.js → image-blob-reduce.esm-BFq-Mx5V.js} +2 -2
  268. package/dist/client/assets/index-BxAuGDoN.css +1 -0
  269. package/dist/client/assets/index-uw9O0z1c.js +1112 -0
  270. package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +1 -0
  271. package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +1 -0
  272. package/dist/client/assets/infoDiagram-27XIBGKW-MrZyptIy.js +2 -0
  273. package/dist/client/assets/infoDiagram-VRGFBTTK-KkUjDRAQ.js +2 -0
  274. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-CRy9vIS5.js → ishikawaDiagram-5VMMS53U-Bnt9yM0O.js} +2 -2
  275. package/dist/client/assets/ishikawaDiagram-OU5B5YK6-Di9BcpOY.js +70 -0
  276. package/dist/client/assets/{it-IT-FC2VTM3L-KTijNcUe.js → it-IT-INVHSAJF-DytAgndh.js} +1 -1
  277. package/dist/client/assets/javascript-B9I2pbsP.js +1 -0
  278. package/dist/client/assets/javascript-DctB8BJo.js +1 -0
  279. package/dist/client/assets/{journeyDiagram-3NMN7TZE-D4ZR_s9J.js → journeyDiagram-3NMN7TZE-Bl0abK1r.js} +1 -1
  280. package/dist/client/assets/journeyDiagram-ZHPQQLJL-J-sGrs9e.js +139 -0
  281. package/dist/client/assets/jsx-runtime-DKj5X9O4.js +1 -0
  282. package/dist/client/assets/kanban-definition-PNTS6WVX-5ZDV_yIa.js +89 -0
  283. package/dist/client/assets/{kanban-definition-UXKFOSKX-CIDTmu5g.js → kanban-definition-UXKFOSKX-DMgUfNt0.js} +10 -10
  284. package/dist/client/assets/{katex-CXMH3UgJ.js → katex-9NBMfU68.js} +2 -2
  285. package/dist/client/assets/katex-ZlcWpGUi.js +257 -0
  286. package/dist/client/assets/line-DEbP8Ok6.js +1 -0
  287. package/dist/client/assets/linear-DExL6ILt.js +1 -0
  288. package/dist/client/assets/{lobby-presence-Rdjnc0_0.js → lobby-presence-Cz5jGOPg.js} +1 -1
  289. package/dist/client/assets/{lua-CL1SqxuB.js → lua-zbJo2mq3.js} +1 -1
  290. package/dist/client/assets/{markdown-CByV-4CU.js → markdown-Bo71X2X2.js} +8 -8
  291. package/dist/client/assets/markdown-it-DpvIRaVq.js +13 -0
  292. package/dist/client/assets/markdown-math-CyyBVuDO.js +517 -0
  293. package/dist/client/assets/merge-CALoRt3l.js +1 -0
  294. package/dist/client/assets/{mermaid-parser.core-DrdLA3p0.js → mermaid-parser.core-Bpogunsh.js} +1 -1
  295. package/dist/client/assets/mermaid-parser.core-DBy--Jc0.js +3 -0
  296. package/dist/client/assets/mermaid.core-BeOUPE3Q.js +10 -0
  297. package/dist/client/assets/mindmap-definition-NLK3R4M7-ByVb-0vj.js +96 -0
  298. package/dist/client/assets/{mindmap-definition-YA3MSWOX-DO8NB9VH.js → mindmap-definition-YA3MSWOX-DBZN5_GH.js} +29 -29
  299. package/dist/client/assets/{nginx-BMaDbqW3.js → nginx-8H7HVH4w.js} +1 -1
  300. package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +1 -0
  301. package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +1 -0
  302. package/dist/client/assets/pegDiagram-GJSIUBJH-aost1sSO.js +1 -0
  303. package/dist/client/assets/pegDiagram-XKGWAZYB-DRo8CZu3.js +1 -0
  304. package/dist/client/assets/percentages-LWOC67ZH-VhvllE7L.js +1 -0
  305. package/dist/client/assets/{pica-xkWDouSg.js → pica-BPrp-GK1.js} +1 -1
  306. package/dist/client/assets/pie-DzWLGKAD.js +1 -0
  307. package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +1 -0
  308. package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +1 -0
  309. package/dist/client/assets/pieDiagram-5QR66LMP-BICdpEuz.js +39 -0
  310. package/dist/client/assets/pieDiagram-E7YTZNPT-CZThaHsc.js +39 -0
  311. package/dist/client/assets/{preload-helper-CtT0-S4g.js → preload-helper-BAlEavIC.js} +1 -1
  312. package/dist/client/assets/preview-render-compiler-ktU0SXxY.js +43 -0
  313. package/dist/client/assets/preview-render-profile-D652PAjA.js +1 -0
  314. package/dist/client/assets/preview-render-worker-BI2bFVqM.js +575 -0
  315. package/dist/client/assets/prod-DU-0VfI7.js +145 -0
  316. package/dist/client/assets/prod-cXUNdmYV.js +1 -0
  317. package/dist/client/assets/{pug-Wky5Dnfy.js → pug-CqqUmdG7.js} +1 -1
  318. package/dist/client/assets/purify.es-go7v6Te-.js +3 -0
  319. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-fJE7iAxt.js → quadrantDiagram-AXDQQJYC-C5iowkl_.js} +3 -3
  320. package/dist/client/assets/quadrantDiagram-O4NWA36T-Bgx5bF97.js +7 -0
  321. package/dist/client/assets/quick-switcher-controller-DSlOwOsU.js +1 -0
  322. package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +1 -0
  323. package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +1 -0
  324. package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +1 -0
  325. package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +1 -0
  326. package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.js +1 -0
  327. package/dist/client/assets/railroad-abnf-HS5TGJTU-CLkdDRsJ.js +1 -0
  328. package/dist/client/assets/railroad-ebnf-LZEXJU2U-B162zvcG.js +1 -0
  329. package/dist/client/assets/railroad-ebnf-LZEXJU2U-DA0sEq7w.js +1 -0
  330. package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +1 -0
  331. package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +1 -0
  332. package/dist/client/assets/railroadDiagram-O6MQD6OU-BTt_rKjT.js +1 -0
  333. package/dist/client/assets/railroadDiagram-XR7U4H2S-DbVoNgSz.js +1 -0
  334. package/dist/client/assets/{requirementDiagram-BXWQKSXE-Balm0WW8.js → requirementDiagram-BXWQKSXE-BkvazG7r.js} +1 -1
  335. package/dist/client/assets/requirementDiagram-PLB6GJNP-BT0j9C40.js +84 -0
  336. package/dist/client/assets/sankeyDiagram-IPEJSGJF-X1BCUIrf.js +40 -0
  337. package/dist/client/assets/sankeyDiagram-P5KCCOFB-C_IemB9h.js +40 -0
  338. package/dist/client/assets/sankeyLinkHorizontal-usjP1-Cg.js +1 -0
  339. package/dist/client/assets/sequenceDiagram-PO4LG4MO-B-2QfXhV.js +169 -0
  340. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BL1j3Sn-.js → sequenceDiagram-WJ2MYXX4-CxFBgLGd.js} +3 -3
  341. package/dist/client/assets/{sieve-BAxa3IjF.js → sieve-tLWDfEkZ.js} +1 -1
  342. package/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -1
  343. package/dist/client/assets/sizeCapture-INFHLROL-DrzwYt5z.js +1 -0
  344. package/dist/client/assets/sl-SI-QY5KCFGA-RZhwMpQL.js +8 -0
  345. package/dist/client/assets/solr-B78wSQJQ.js +1 -0
  346. package/dist/client/assets/src-XiVvaevx.js +1 -0
  347. package/dist/client/assets/stateDiagram-D77RDMKH-BaSQ6Owj.js +1 -0
  348. package/dist/client/assets/stateDiagram-v2-GCMORJYK-CsVcfwVp.js +291 -0
  349. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +1 -0
  350. package/dist/client/assets/sv-SE-O3OFCY3J-DnS86_7q.js +12 -0
  351. package/dist/client/assets/swimlanes-2SLR337P-CnYTVqRX.js +1 -0
  352. package/dist/client/assets/swimlanes-42K2YHIH-CALFEmiS.js +1 -0
  353. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Bh4tmz27.js +8 -0
  354. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-xhehUG9e.js +8 -0
  355. package/dist/client/assets/th-TH-WLSZUSBX-DHehoYR2.js +1 -0
  356. package/dist/client/assets/{timeline-definition-24CTP7MA-7pch5JAr.js → timeline-definition-24CTP7MA-zse-5Dbm.js} +5 -5
  357. package/dist/client/assets/timeline-definition-EJHVYXUP-BhqPlKkN.js +120 -0
  358. package/dist/client/assets/treeView-Q6P3EWNA-BvHOzbu9.js +1 -0
  359. package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +1 -0
  360. package/dist/client/assets/treemap-CxZTjHiH.js +1 -0
  361. package/dist/client/assets/treemap-WGGIJYW6-oety7paS.js +1 -0
  362. package/dist/client/assets/treemap-WGGIJYW6-sMRCjCtX.js +1 -0
  363. package/dist/client/assets/usecaseDiagram-POWQR4AR-DR2LHQYs.js +328 -0
  364. package/dist/client/assets/v4-DDdyfk2q.js +1 -0
  365. package/dist/client/assets/{vault-api-client-QjZ_T03l.js → vault-api-client-BQxLVPeF.js} +1 -1
  366. package/dist/client/assets/vault-paths-BT-6nztu.js +1 -0
  367. package/dist/client/assets/venn.esm-C5rDfA9t.js +7 -0
  368. package/dist/client/assets/vennDiagram-4TSXK5OY-DgHr6cJD.js +28 -0
  369. package/dist/client/assets/vennDiagram-UO4OBE2U-BRwLn2Q1.js +28 -0
  370. package/dist/client/assets/{verilog-7LoJAqYT.js → verilog-CjI9Y6RI.js} +1 -1
  371. package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +1 -0
  372. package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +1 -0
  373. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BbSlUwuM.js → wardleyDiagram-VM6X3IG4-9A60XZis.js} +3 -3
  374. package/dist/client/assets/wardleyDiagram-VNRHLVJA-B_tMcVFG.js +78 -0
  375. package/dist/client/assets/wiki-link-resolver-Dch88erO.js +1 -0
  376. package/dist/client/assets/{worker-engine-m0rlHn8R-eSDcDGEI.js → worker-engine-m0rlHn8R-5h66k403.js} +1 -1
  377. package/dist/client/assets/{workspace-sync-client-D4nblH_2.js → workspace-sync-client-C2pdaQUN.js} +1 -1
  378. package/dist/client/assets/xychartDiagram-PMCCYNJV-fRpZ1MA5.js +7 -0
  379. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D00iy-wB.js +7 -0
  380. package/dist/client/assets/{yaml-9ltHPDNO.js → yaml-BcZaqAz8.js} +1 -1
  381. package/dist/client/assets/{yjs-provider-reset-guard-R43MnLNc.js → yjs-provider-reset-guard-DpntzUDR.js} +1 -1
  382. package/dist/client/drawio-editor.html +6 -5
  383. package/dist/client/excalidraw-editor.html +39 -32
  384. package/dist/client/export-document.html +4 -3
  385. package/dist/client/index.html +21 -14
  386. package/package.json +12 -9
  387. package/src/client/app/drawio-editor.html +1 -0
  388. package/src/client/app/excalidraw-editor.html +1 -0
  389. package/src/client/app/export-document-entry.js +1 -0
  390. package/src/client/app/export-document.html +1 -0
  391. package/src/client/app/index.html +19 -12
  392. package/src/client/application/app-shell/ui-feature-shell.js +20 -1
  393. package/src/client/application/app-shell-elements.js +2 -0
  394. package/src/client/application/diagram-preview-hydrator.js +7 -0
  395. package/src/client/application/mermaid-preview-hydrator.js +89 -3
  396. package/src/client/application/preview-diagram-utils.js +1 -0
  397. package/src/client/application/preview-render-compiler.js +2 -0
  398. package/src/client/application/preview-render-executor.js +4 -1
  399. package/src/client/application/preview-render-profile.js +8 -12
  400. package/src/client/application/preview-renderer.js +3 -0
  401. package/src/client/bootstrap/collabmd-app-shell.js +16 -7
  402. package/src/client/browser-utils.js +1 -1
  403. package/src/client/domain/excalidraw-scene.js +0 -11
  404. package/src/client/domain/file-search.js +1 -0
  405. package/src/client/domain/highlight-runtime.js +30 -3
  406. package/src/client/domain/markdown-math.js +14 -0
  407. package/src/client/export/export-host.js +3 -7
  408. package/src/client/export/export-pipeline.js +208 -21
  409. package/src/client/infrastructure/browser-preferences-port.js +8 -0
  410. package/src/client/infrastructure/editor-session.js +20 -0
  411. package/src/client/infrastructure/editor-view-adapter.js +8 -7
  412. package/src/client/infrastructure/excalidraw-room-client.js +2 -45
  413. package/src/client/infrastructure/git-api-client.js +5 -0
  414. package/src/client/infrastructure/tab-activity-lock.js +8 -4
  415. package/src/client/infrastructure/webmcp-tool-registry.js +12 -5
  416. package/src/client/presentation/bases-preview-controller.js +2 -1
  417. package/src/client/presentation/comment-markdown-renderer.js +2 -0
  418. package/src/client/presentation/comment-ui-controller.js +21 -30
  419. package/src/client/presentation/create-menu-presenter.js +16 -18
  420. package/src/client/presentation/drawio-embed-controller.js +55 -7
  421. package/src/client/presentation/excalidraw-embed-controller.js +11 -3
  422. package/src/client/presentation/file-explorer-controller.js +1 -0
  423. package/src/client/presentation/file-explorer-view.js +32 -2
  424. package/src/client/presentation/file-history-view-controller.js +6 -0
  425. package/src/client/presentation/git-diff-view-controller.js +3 -2
  426. package/src/client/presentation/git-panel-controller.js +6 -5
  427. package/src/client/presentation/image-lightbox-controller.js +7 -6
  428. package/src/client/presentation/outline-controller.js +0 -86
  429. package/src/client/presentation/quick-switcher-controller.js +50 -13
  430. package/src/client/presentation/scroll-sync-controller.js +69 -21
  431. package/src/client/styles/components/navigation.css +2 -2
  432. package/src/client/styles/deferred-collab.css +1 -0
  433. package/src/client/styles/deferred-preview.css +1 -0
  434. package/src/client/styles/features/diagram-preview.css +1 -0
  435. package/src/client/styles/features/preview-markdown.css +4 -4
  436. package/src/client/styles/foundation/themes.css +56 -271
  437. package/src/client/styles/layout/editor-page.css +0 -1
  438. package/src/client/styles/layout/shell.css +6 -0
  439. package/src/client/styles/layout/sidebar.css +3 -0
  440. package/src/client/styles/surfaces/landing-page.css +260 -0
  441. package/src/domain/agent-tool-definitions.js +45 -13
  442. package/src/domain/collabmd-content-capabilities.js +59 -4
  443. package/src/domain/collaboration-protocol.js +2 -0
  444. package/src/domain/markdown-outline.js +35 -0
  445. package/src/server/application/agent-connection-service.js +6 -2
  446. package/src/server/application/agent-content-service.js +124 -56
  447. package/src/server/auth/create-auth-service.js +40 -12
  448. package/src/server/auth/session-cookie.js +49 -38
  449. package/src/server/config/env.js +1 -1
  450. package/src/server/domain/backlink-index.js +1 -11
  451. package/src/server/domain/bases/base-query-results.js +7 -3
  452. package/src/server/domain/bases/base-query-service.js +2 -7
  453. package/src/server/domain/collaboration/collaboration-room.js +54 -16
  454. package/src/server/domain/docx-exporter.js +256 -2
  455. package/src/server/domain/hosted-workspace-contract.js +7 -0
  456. package/src/server/domain/hosted-workspace.js +29 -62
  457. package/src/server/domain/ripgrep-search-service.js +44 -28
  458. package/src/server/infrastructure/git/diff-service.js +15 -11
  459. package/src/server/infrastructure/git/git-service.js +4 -0
  460. package/src/server/infrastructure/git/image-mime.js +4 -3
  461. package/src/server/infrastructure/git/status-service.js +10 -6
  462. package/src/server/infrastructure/http/create-git-api-query-handler.js +25 -0
  463. package/src/server/infrastructure/http/create-vault-api-query-handler.js +13 -53
  464. package/src/server/infrastructure/http/http-response.js +2 -0
  465. package/src/server/infrastructure/persistence/hosted-metadata-store.js +42 -5
  466. package/src/server/infrastructure/persistence/path-utils.js +23 -3
  467. package/src/server/infrastructure/persistence/pull-backup-store.js +52 -42
  468. package/src/server/infrastructure/persistence/sidecar-store.js +7 -4
  469. package/src/server/infrastructure/persistence/vault-file-store.js +55 -168
  470. package/src/server/infrastructure/plantuml/plantuml-renderer.js +33 -0
  471. package/src/server/infrastructure/structurizr/structurizr-workspace-service.js +24 -10
  472. package/src/server/infrastructure/websocket/attach-collaboration-gateway.js +7 -3
  473. package/src/server/infrastructure/websocket/client-socket-session.js +32 -4
  474. package/src/server/infrastructure/workspace/file-system-sync-service.js +4 -2
  475. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Crf9Y3Q6.js +0 -1
  476. package/dist/client/assets/abnfDiagram-VCTEODGH-PuinKbSQ.js +0 -1
  477. package/dist/client/assets/architecture-7GRP2DOG-BMOPAkUC.js +0 -1
  478. package/dist/client/assets/architectureDiagram-5GKGNRK7-46hPkrZv.js +0 -36
  479. package/dist/client/assets/blockDiagram-I7D4REHJ-C1S5Bzf8.js +0 -129
  480. package/dist/client/assets/channel-jwdhnPiV.js +0 -1
  481. package/dist/client/assets/chunk-2E4U76K2-Ba8Wf22k.js +0 -1
  482. package/dist/client/assets/chunk-4HAMMTFA-Ht-73lsT.js +0 -62
  483. package/dist/client/assets/chunk-5XKZK2GL-D4UAZSOJ.js +0 -1
  484. package/dist/client/assets/chunk-75Z2AOVW-B2cZexqK.js +0 -2
  485. package/dist/client/assets/chunk-DU6HZSFF-C6d6PJfE.js +0 -127
  486. package/dist/client/assets/chunk-GMAD6QVW-DUfjx_d5.js +0 -72
  487. package/dist/client/assets/chunk-GVQU2GXP-D1l7oRGR.js +0 -1
  488. package/dist/client/assets/chunk-L3NEJ4N5-BmCVn4y-.js +0 -1
  489. package/dist/client/assets/chunk-OSK3NFVY-CWHXAmfx.js +0 -10
  490. package/dist/client/assets/chunk-POPQ4Y6H-B5yJIrZE.js +0 -1
  491. package/dist/client/assets/chunk-PWAF6VOD-B3gML4ps.js +0 -1
  492. package/dist/client/assets/chunk-TLUHSLCS-Yl7B0Vrz.js +0 -1
  493. package/dist/client/assets/chunk-ZNVOA63L-BmCQjhx-.js +0 -40
  494. package/dist/client/assets/classDiagram-ZZMXUADV-BRw9vo8U.js +0 -1
  495. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BRw9vo8U.js +0 -1
  496. package/dist/client/assets/comment-markdown-renderer-B9_vPc3F.js +0 -1
  497. package/dist/client/assets/comment-thread-store-NNHqRVsX.js +0 -1
  498. package/dist/client/assets/cose-bilkent-JH36ORCC-Cm_QF_yb.js +0 -1
  499. package/dist/client/assets/cynefin-OW5HDTMX-7tP7QfM3.js +0 -1
  500. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BRoCEoZM.js +0 -62
  501. package/dist/client/assets/cytoscape.esm-B-NFISlW.js +0 -321
  502. package/dist/client/assets/dagre-PrKaheQc.js +0 -1
  503. package/dist/client/assets/deferred-collab-rBe4nuQ2.css +0 -1
  504. package/dist/client/assets/deferred-preview-pe7Iwwx3.css +0 -1
  505. package/dist/client/assets/diagram-UQ7AKVKN-JevUZuYi.js +0 -41
  506. package/dist/client/assets/diagram-VX7I27RA-pSD4HMh1.js +0 -24
  507. package/dist/client/assets/diagram-Z3DM3KII-D8r1_CIb.js +0 -24
  508. package/dist/client/assets/direct-engine-DdrQKpgq-B5zIoeQw.js +0 -5
  509. package/dist/client/assets/dist-B3HdUPsK.js +0 -1
  510. package/dist/client/assets/dist-BIRygGYH.js +0 -1
  511. package/dist/client/assets/dist-BPyOlNLY.js +0 -2
  512. package/dist/client/assets/dist-ByhQbe-x.js +0 -1
  513. package/dist/client/assets/dist-C5NkYKAa.js +0 -1
  514. package/dist/client/assets/dist-CEirJSxk.js +0 -1
  515. package/dist/client/assets/dist-CRnJ0D9h.js +0 -1
  516. package/dist/client/assets/dist-CyNrloSI.js +0 -1
  517. package/dist/client/assets/dist-D60_kdpQ.js +0 -1
  518. package/dist/client/assets/dist-Hdhj3L3t.js +0 -1
  519. package/dist/client/assets/dist-gRRhmB-2.js +0 -6
  520. package/dist/client/assets/dist-kWb2d1CH.js +0 -1
  521. package/dist/client/assets/dist-l-56SowH.js +0 -19
  522. package/dist/client/assets/dist-sLzRQQk7.js +0 -1
  523. package/dist/client/assets/ebnfDiagram-PWID7BFC-UJ0Fz5ci.js +0 -1
  524. package/dist/client/assets/editor-session-4Bn81iWm.js +0 -14
  525. package/dist/client/assets/embedded-editor-base-jK221GC8.css +0 -1
  526. package/dist/client/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +0 -1
  527. package/dist/client/assets/excalidrawEditor-WIuguTz7.js +0 -9
  528. package/dist/client/assets/export-page-AN-wI5p4.js +0 -56
  529. package/dist/client/assets/exportDocument-B7IagJhQ.css +0 -1
  530. package/dist/client/assets/exportDocument-B9xNKpQe.js +0 -2
  531. package/dist/client/assets/file-search-DDLyyLDU.js +0 -1
  532. package/dist/client/assets/flowDiagram-HODETNUW-kb1lUSBo.js +0 -1
  533. package/dist/client/assets/forth-Cezjo90N.js +0 -1
  534. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BBNzDfaV.js +0 -292
  535. package/dist/client/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +0 -1
  536. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Csf0Dm_1.js +0 -106
  537. package/dist/client/assets/graphlib-DS17s2tU.js +0 -1
  538. package/dist/client/assets/image-2QKV3NAF-BUbX0y5Y.js +0 -1
  539. package/dist/client/assets/index-BAmZnTFV.css +0 -1
  540. package/dist/client/assets/index-mWiw418b.js +0 -1111
  541. package/dist/client/assets/info-A6RAGUB7-BlU-8_xu.js +0 -1
  542. package/dist/client/assets/infoDiagram-27XIBGKW-Bzy6kCbb.js +0 -2
  543. package/dist/client/assets/javascript-BWjar7HY.js +0 -1
  544. package/dist/client/assets/javascript-D-FtdkNC.js +0 -1
  545. package/dist/client/assets/jsx-runtime-BpzPEenQ.js +0 -1
  546. package/dist/client/assets/line-DSWLHgpx.js +0 -1
  547. package/dist/client/assets/linear-n-3HSMUF.js +0 -1
  548. package/dist/client/assets/markdown-it-CocJWnjv.js +0 -13
  549. package/dist/client/assets/mermaid.core-C_FK-7n4.js +0 -1
  550. package/dist/client/assets/mermaid.core-D0cMM4Rl.js +0 -10
  551. package/dist/client/assets/packet-AYTQ26CC-BSJEH9Lb.js +0 -1
  552. package/dist/client/assets/pegDiagram-XKGWAZYB-DS6Ab21R.js +0 -1
  553. package/dist/client/assets/percentages-Q7USCRWZ-DWE6uvTs.js +0 -1
  554. package/dist/client/assets/pie-WAS4IAKB-qxv01Y8W.js +0 -1
  555. package/dist/client/assets/pieDiagram-E7YTZNPT-BbFe6Tgs.js +0 -39
  556. package/dist/client/assets/preview-render-compiler-C_7J7eia.js +0 -43
  557. package/dist/client/assets/preview-render-compiler-DzJ1KR_M.js +0 -1
  558. package/dist/client/assets/preview-render-worker-1DoIDllV.js +0 -59
  559. package/dist/client/assets/prod-D5TxmmoB.js +0 -1
  560. package/dist/client/assets/prod-pbFU4TaM.js +0 -145
  561. package/dist/client/assets/quick-switcher-controller-CUajuy78.js +0 -1
  562. package/dist/client/assets/radar-RG4KPBEZ-B6h6pWOs.js +0 -1
  563. package/dist/client/assets/railroad-74A4TZTK-CGtTWdGc.js +0 -1
  564. package/dist/client/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +0 -1
  565. package/dist/client/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +0 -1
  566. package/dist/client/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +0 -1
  567. package/dist/client/assets/railroadDiagram-O6MQD6OU-CUQKqbCK.js +0 -1
  568. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CcbMqrlQ.js +0 -40
  569. package/dist/client/assets/sl-SI-JRML4FIH-D53L_0S2.js +0 -6
  570. package/dist/client/assets/solr-BBopId9w.js +0 -1
  571. package/dist/client/assets/src-oBChb5qS.js +0 -1
  572. package/dist/client/assets/stateDiagram-D77RDMKH-DNi924hh.js +0 -1
  573. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-C62JEwak.js +0 -1
  574. package/dist/client/assets/sv-SE-4ZPKFFXF-DT-G7RCI.js +0 -12
  575. package/dist/client/assets/swimlanes-42K2YHIH-ColgjSH4.js +0 -1
  576. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-B9UZhEj4.js +0 -8
  577. package/dist/client/assets/th-TH-P7CTMGDK-6sy0NO7K.js +0 -1
  578. package/dist/client/assets/treeView-Q6P3EWNA-BTTYcvrF.js +0 -1
  579. package/dist/client/assets/treemap-WGGIJYW6-Cg7tyfH8.js +0 -1
  580. package/dist/client/assets/vennDiagram-4TSXK5OY-C5taziCX.js +0 -34
  581. package/dist/client/assets/wardley-WFR3VGLG-C6N1rULY.js +0 -1
  582. package/dist/client/assets/wiki-link-resolver-C2P_WmTV.js +0 -1
  583. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D06X1arY.js +0 -7
  584. package/src/server/domain/collaboration/protocol.js +0 -6
@@ -1,5 +1,5 @@
1
1
  import { copyFile, mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';
2
- import { dirname, join, resolve } from 'node:path';
2
+ import { dirname, resolve } from 'node:path';
3
3
 
4
4
  import { ensureCollabMetadataGitExclude } from '../git/local-exclude.js';
5
5
  import { sanitizeVaultPath } from './path-utils.js';
@@ -104,12 +104,18 @@ export class PullBackupStore {
104
104
  this.vaultDir = resolve(vaultDir);
105
105
  }
106
106
 
107
+ resolveStoragePath(path) {
108
+ const absolute = sanitizeVaultPath(this.vaultDir, path, { allowIgnored: true });
109
+ if (!absolute) throw new Error('Unsafe pull backup path');
110
+ return absolute;
111
+ }
112
+
107
113
  getStorageRoot() {
108
- return resolve(this.vaultDir, PULL_BACKUP_STORAGE_ROOT);
114
+ return this.resolveStoragePath(PULL_BACKUP_STORAGE_ROOT);
109
115
  }
110
116
 
111
117
  getBackupPath(backupId) {
112
- return resolve(this.getStorageRoot(), backupId);
118
+ return this.resolveStoragePath(`${PULL_BACKUP_STORAGE_ROOT}/${backupId}`);
113
119
  }
114
120
 
115
121
  getSummaryPath(backupId) {
@@ -123,12 +129,12 @@ export class PullBackupStore {
123
129
  headRef = null,
124
130
  targetRef = null,
125
131
  } = {}) {
126
- await ensureCollabMetadataGitExclude(this.vaultDir);
127
-
128
132
  const backupId = createBackupId(headRef, createdAt);
129
- const backupDir = this.getBackupPath(backupId);
130
- const filesRoot = join(backupDir, 'files');
131
- const patchesRoot = join(backupDir, 'patches');
133
+ const filesRoot = this.resolveStoragePath(`${PULL_BACKUP_STORAGE_ROOT}/${backupId}/files`);
134
+ const patchesRoot = this.resolveStoragePath(`${PULL_BACKUP_STORAGE_ROOT}/${backupId}/patches`);
135
+ this.resolveStoragePath(this.getSummaryPath(backupId));
136
+ this.resolveStoragePath('.git/info/exclude');
137
+ await ensureCollabMetadataGitExclude(this.vaultDir);
132
138
  const backupEntries = [];
133
139
 
134
140
  await mkdir(filesRoot, { recursive: true });
@@ -140,7 +146,8 @@ export class PullBackupStore {
140
146
  continue;
141
147
  }
142
148
 
143
- const absoluteSourcePath = sanitizeVaultPath(this.vaultDir, normalizedPath);
149
+ const absoluteSourcePath = sanitizeVaultPath(this.vaultDir, normalizedPath, { allowIgnored: true });
150
+ if (!absoluteSourcePath) continue;
144
151
  const relativeBackupPath = `${PULL_BACKUP_STORAGE_ROOT}/${backupId}/files/${normalizedPath}`;
145
152
  const relativeStagedPatchPath = entry?.stagedPatchContent
146
153
  ? `${PULL_BACKUP_STORAGE_ROOT}/${backupId}/patches/${normalizedPath}.staged.patch`
@@ -150,28 +157,26 @@ export class PullBackupStore {
150
157
  : null;
151
158
  let backupPath = null;
152
159
 
153
- if (absoluteSourcePath) {
154
- try {
155
- await stat(absoluteSourcePath);
156
- const absoluteBackupPath = resolve(this.vaultDir, relativeBackupPath);
157
- await mkdir(dirname(absoluteBackupPath), { recursive: true });
158
- await copyFile(absoluteSourcePath, absoluteBackupPath);
159
- backupPath = normalizeRelativePath(relativeBackupPath);
160
- } catch (error) {
161
- if (error?.code !== 'ENOENT') {
162
- throw error;
163
- }
160
+ try {
161
+ await stat(absoluteSourcePath);
162
+ const absoluteBackupPath = this.resolveStoragePath(relativeBackupPath);
163
+ await mkdir(dirname(absoluteBackupPath), { recursive: true });
164
+ await copyFile(absoluteSourcePath, absoluteBackupPath);
165
+ backupPath = normalizeRelativePath(relativeBackupPath);
166
+ } catch (error) {
167
+ if (error?.code !== 'ENOENT') {
168
+ throw error;
164
169
  }
165
170
  }
166
171
 
167
172
  if (relativeStagedPatchPath) {
168
- const absolutePatchPath = resolve(this.vaultDir, relativeStagedPatchPath);
173
+ const absolutePatchPath = this.resolveStoragePath(relativeStagedPatchPath);
169
174
  await mkdir(dirname(absolutePatchPath), { recursive: true });
170
175
  await writeFile(absolutePatchPath, entry.stagedPatchContent, 'utf8');
171
176
  }
172
177
 
173
178
  if (relativeWorktreePatchPath) {
174
- const absolutePatchPath = resolve(this.vaultDir, relativeWorktreePatchPath);
179
+ const absolutePatchPath = this.resolveStoragePath(relativeWorktreePatchPath);
175
180
  await mkdir(dirname(absolutePatchPath), { recursive: true });
176
181
  await writeFile(absolutePatchPath, entry.worktreePatchContent, 'utf8');
177
182
  }
@@ -192,7 +197,7 @@ export class PullBackupStore {
192
197
  )).length;
193
198
  const summaryPath = this.getSummaryPath(backupId);
194
199
  await writeFile(
195
- resolve(this.vaultDir, summaryPath),
200
+ this.resolveStoragePath(summaryPath),
196
201
  formatSummary({
197
202
  backupEntries,
198
203
  backupId,
@@ -214,6 +219,18 @@ export class PullBackupStore {
214
219
  };
215
220
  }
216
221
 
222
+ async readSummary(backupId) {
223
+ if (typeof backupId !== 'string' || !/^[a-z0-9-]{1,128}$/iu.test(backupId)) return null;
224
+ const path = sanitizeVaultPath(this.vaultDir, this.getSummaryPath(backupId), { allowIgnored: true });
225
+ if (!path) return null;
226
+ try {
227
+ return await readFile(path, 'utf8');
228
+ } catch (error) {
229
+ if (error.code === 'ENOENT' || error.code === 'EISDIR') return null;
230
+ throw error;
231
+ }
232
+ }
233
+
217
234
  async listBackups() {
218
235
  let entries;
219
236
  try {
@@ -229,26 +246,19 @@ export class PullBackupStore {
229
246
  .filter((entry) => entry.isDirectory())
230
247
  .map(async (entry) => {
231
248
  const summaryPath = this.getSummaryPath(entry.name);
232
- try {
233
- const content = await readFile(resolve(this.vaultDir, summaryPath), 'utf8');
234
- const metadata = parseBackupMetadata(content);
235
- if (!metadata) {
236
- return null;
237
- }
238
-
239
- return {
240
- branch: metadata.branch ?? null,
241
- createdAt: metadata.createdAt ?? null,
242
- fileCount: Number(metadata.fileCount ?? 0) || 0,
243
- id: entry.name,
244
- summaryPath,
245
- };
246
- } catch (error) {
247
- if (error?.code === 'ENOENT') {
248
- return null;
249
- }
250
- throw error;
249
+ const content = await this.readSummary(entry.name);
250
+ const metadata = parseBackupMetadata(content);
251
+ if (!metadata) {
252
+ return null;
251
253
  }
254
+
255
+ return {
256
+ branch: metadata.branch ?? null,
257
+ createdAt: metadata.createdAt ?? null,
258
+ fileCount: Number(metadata.fileCount ?? 0) || 0,
259
+ id: entry.name,
260
+ summaryPath,
261
+ };
252
262
  }));
253
263
 
254
264
  return backups
@@ -1,7 +1,7 @@
1
- import { dirname, join, resolve } from 'path';
1
+ import { dirname, join } from 'path';
2
2
  import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from 'fs/promises';
3
3
 
4
- import { resolveVaultFilePath, toVaultRelativePath } from './path-utils.js';
4
+ import { resolveVaultFilePath, sanitizeVaultPath, toVaultRelativePath } from './path-utils.js';
5
5
  import { mapWithConcurrency } from '../../shared/async-utils.js';
6
6
 
7
7
  const COMMENT_STORAGE_ROOT = '.collabmd/comments';
@@ -15,7 +15,7 @@ function resolveSidecarPath(vaultDir, filePath, storageRoot, extension) {
15
15
  }
16
16
 
17
17
  const relativeVaultPath = toVaultRelativePath(vaultDir, absoluteVaultPath);
18
- return resolve(vaultDir, storageRoot, `${relativeVaultPath}${extension}`);
18
+ return sanitizeVaultPath(vaultDir, `${storageRoot}/${relativeVaultPath}${extension}`, { allowIgnored: true });
19
19
  }
20
20
 
21
21
  async function renameIfPresent(sourcePath, targetPath) {
@@ -44,7 +44,7 @@ export class SidecarStore {
44
44
  }
45
45
 
46
46
  getCommentStorageRootPath() {
47
- return resolve(this.vaultDir, COMMENT_STORAGE_ROOT);
47
+ return sanitizeVaultPath(this.vaultDir, COMMENT_STORAGE_ROOT, { allowIgnored: true });
48
48
  }
49
49
 
50
50
  getSnapshotPath(filePath) {
@@ -77,6 +77,9 @@ export class SidecarStore {
77
77
  async listCommentThreadEntries({ filePaths = null } = {}) {
78
78
  const allowedPaths = filePaths ? new Set(filePaths) : null;
79
79
  const rootPath = this.getCommentStorageRootPath();
80
+ if (!rootPath) {
81
+ return [];
82
+ }
80
83
  const commentFilePaths = [];
81
84
 
82
85
  const visitDirectory = async (absoluteDirectoryPath, relativeDirectoryPath = '') => {
@@ -1,5 +1,6 @@
1
1
  import { createReadStream } from 'fs';
2
2
  import { copyFile, mkdir, readFile, readdir, rename, rm, rmdir, stat, writeFile } from 'fs/promises';
3
+ import { randomUUID } from 'node:crypto';
3
4
  import { basename, dirname, extname, join, relative, resolve } from 'path';
4
5
  import sharp from 'sharp';
5
6
 
@@ -76,7 +77,7 @@ const TEXT_FILE_MIME_TYPES = Object.freeze({
76
77
  });
77
78
 
78
79
  function createTransactionalPath(targetPath, label) {
79
- return `${targetPath}.collabmd-${label}-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`;
80
+ return `${targetPath}.collabmd-${label}-${process.pid}-${Date.now()}-${randomUUID()}`;
80
81
  }
81
82
 
82
83
  function createCommentThreadsPayload(threads = []) {
@@ -345,7 +346,7 @@ export class VaultFileStore {
345
346
  });
346
347
 
347
348
  for (const entry of sorted) {
348
- if (isIgnoredVaultEntry(entry.name)) {
349
+ if (isIgnoredVaultEntry(entry.name) || entry.isSymbolicLink()) {
349
350
  continue;
350
351
  }
351
352
 
@@ -417,7 +418,15 @@ export class VaultFileStore {
417
418
  return this.readContentFile(filePath);
418
419
  }
419
420
 
420
- async writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
421
+ async writeEditableVaultContent(filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
422
+ const resolved = this.resolveAdapter(filePath);
423
+ if (!resolved) {
424
+ return {
425
+ ok: false,
426
+ error: getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
427
+ };
428
+ }
429
+
421
430
  try {
422
431
  await this.runManagedWrite([filePath], async () => {
423
432
  await mkdir(dirname(resolved.absolute), { recursive: true });
@@ -432,22 +441,6 @@ export class VaultFileStore {
432
441
  }
433
442
  }
434
443
 
435
- async writeContentFile(filePath, content, expectedKind = null, { invalidateCollaborationSnapshot = true } = {}) {
436
- const resolved = this.resolveAdapter(filePath);
437
- if (!resolved || (expectedKind && resolved.adapter.kind !== expectedKind)) {
438
- return {
439
- ok: false,
440
- error: resolved?.adapter?.invalidPathError ?? getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
441
- };
442
- }
443
-
444
- return this.writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot });
445
- }
446
-
447
- async writeEditableVaultContent(filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
448
- return this.writeContentFile(filePath, content, null, { invalidateCollaborationSnapshot });
449
- }
450
-
451
444
  async readMarkdownFile(filePath) {
452
445
  return this.readContentFile(filePath, 'markdown');
453
446
  }
@@ -508,14 +501,6 @@ export class VaultFileStore {
508
501
  }
509
502
  }
510
503
 
511
- async writeMarkdownFile(filePath, content, options = {}) {
512
- return this.writeContentFile(filePath, content, 'markdown', options);
513
- }
514
-
515
- async writeBaseFile(filePath, content, options = {}) {
516
- return this.writeContentFile(filePath, content, 'base', options);
517
- }
518
-
519
504
  async writeImageAttachmentForDocument(sourceDocumentPath, {
520
505
  content,
521
506
  mimeType,
@@ -581,36 +566,6 @@ export class VaultFileStore {
581
566
  };
582
567
  }
583
568
 
584
- async readDownloadFile(filePath) {
585
- const normalizedPath = String(filePath ?? '').replace(/\\/g, '/').trim();
586
- if (!normalizedPath || !isVaultFilePath(normalizedPath)) {
587
- return null;
588
- }
589
-
590
- if (isImageAttachmentFilePath(normalizedPath)) {
591
- return this.readImageAttachmentFile(normalizedPath);
592
- }
593
-
594
- const absolute = this.resolveContentPath(normalizedPath, { requireVaultFile: false });
595
- if (!absolute) {
596
- return null;
597
- }
598
-
599
- try {
600
- return {
601
- content: await readFile(absolute),
602
- mimeType: getDownloadMimeType(normalizedPath),
603
- path: normalizedPath,
604
- };
605
- } catch (error) {
606
- if (error.code === 'ENOENT') {
607
- return null;
608
- }
609
-
610
- throw error;
611
- }
612
- }
613
-
614
569
  async openDownloadFileStream(filePath, { maxBytes = Infinity } = {}) {
615
570
  const normalizedPath = String(filePath ?? '').replace(/\\/g, '/').trim();
616
571
  if (!normalizedPath || !isVaultFilePath(normalizedPath)) {
@@ -664,16 +619,22 @@ export class VaultFileStore {
664
619
  };
665
620
  }
666
621
 
622
+ const commentPath = this.sidecarStore.getCommentThreadPath(filePath);
623
+ const snapshotPath = this.sidecarStore.getSnapshotPath(filePath);
624
+ if (!commentPath || !snapshotPath) {
625
+ return { ok: false, error: 'Invalid collaboration state path' };
626
+ }
627
+
667
628
  const operations = [
668
629
  {
669
630
  kind: Array.isArray(commentThreads) && commentThreads.length > 0 ? 'write' : 'delete',
670
- targetPath: this.sidecarStore.getCommentThreadPath(filePath),
631
+ targetPath: commentPath,
671
632
  value: createCommentThreadsPayload(commentThreads),
672
633
  writeOptions: 'utf-8',
673
634
  },
674
635
  {
675
636
  kind: snapshot ? 'write' : 'delete',
676
- targetPath: this.sidecarStore.getSnapshotPath(filePath),
637
+ targetPath: snapshotPath,
677
638
  value: snapshot ? Buffer.from(snapshot) : null,
678
639
  },
679
640
  includeContent ? {
@@ -843,7 +804,7 @@ export class VaultFileStore {
843
804
  const sortedEntries = dirEntries.sort((left, right) => left.name.localeCompare(right.name, undefined, { sensitivity: 'base' }));
844
805
 
845
806
  for (const entry of sortedEntries) {
846
- if (isIgnoredVaultEntry(entry.name)) {
807
+ if (isIgnoredVaultEntry(entry.name) || entry.isSymbolicLink()) {
847
808
  continue;
848
809
  }
849
810
 
@@ -865,68 +826,6 @@ export class VaultFileStore {
865
826
  return sortWorkspacePaths(paths);
866
827
  }
867
828
 
868
- async listDirectoryEntriesForDownload(dirPath) {
869
- const normalizedPath = String(dirPath ?? '').replace(/\\/g, '/').trim();
870
- const { absolute, error } = resolveVaultDirectoryPath(this.vaultDir, normalizedPath);
871
- if (!absolute) {
872
- return { ok: false, error };
873
- }
874
-
875
- try {
876
- const info = await stat(absolute);
877
- if (!info.isDirectory()) {
878
- return { ok: false, error: 'Directory not found' };
879
- }
880
- } catch (statError) {
881
- if (statError.code === 'ENOENT') {
882
- return { ok: false, error: 'Directory not found' };
883
- }
884
-
885
- throw statError;
886
- }
887
-
888
- const entries = [];
889
- const visitDirectory = async (directoryAbsolutePath, relativeDirectoryPath = '') => {
890
- const dirEntries = sortDirectoryEntries(await readdir(directoryAbsolutePath, { withFileTypes: true }))
891
- .filter((entry) => !isIgnoredVaultEntry(entry.name));
892
-
893
- if (dirEntries.length === 0) {
894
- entries.push({
895
- path: relativeDirectoryPath,
896
- type: 'directory',
897
- });
898
- return;
899
- }
900
-
901
- for (const entry of dirEntries) {
902
- const childAbsolutePath = join(directoryAbsolutePath, entry.name);
903
- const childRelativePath = relativeDirectoryPath
904
- ? `${relativeDirectoryPath}/${entry.name}`
905
- : entry.name;
906
-
907
- if (entry.isDirectory()) {
908
- await visitDirectory(childAbsolutePath, childRelativePath);
909
- continue;
910
- }
911
-
912
- if (isVaultFilePath(entry.name)) {
913
- entries.push({
914
- absolutePath: childAbsolutePath,
915
- path: childRelativePath,
916
- type: 'file',
917
- });
918
- }
919
- }
920
- };
921
-
922
- await visitDirectory(absolute);
923
- return {
924
- entries,
925
- ok: true,
926
- rootName: basename(normalizedPath),
927
- };
928
- }
929
-
930
829
  async resolveDirectoryDownloadRoot(dirPath) {
931
830
  const normalizedPath = String(dirPath ?? '').replace(/\\/g, '/').trim();
932
831
  const { absolute, error } = resolveVaultDirectoryPath(this.vaultDir, normalizedPath);
@@ -954,21 +853,28 @@ export class VaultFileStore {
954
853
  };
955
854
  }
956
855
 
957
- async countDirectoryDownloadEntries(directoryAbsolutePath, { maxEntries = Infinity } = {}) {
856
+ async collectDirectoryDownloadEntries(directoryAbsolutePath, { maxEntries = Infinity } = {}) {
857
+ const entries = [];
958
858
  let count = 0;
959
- const visitDirectory = async (currentDirectoryPath) => {
859
+ const visitDirectory = async (currentDirectoryPath, relativeDirectoryPath = '') => {
960
860
  const dirEntries = sortDirectoryEntries(await readdir(currentDirectoryPath, { withFileTypes: true }))
961
861
  .filter((entry) => !isIgnoredVaultEntry(entry.name));
962
862
 
963
863
  if (dirEntries.length === 0) {
964
864
  count += 1;
965
- return count <= maxEntries;
865
+ if (count > maxEntries) {
866
+ return false;
867
+ }
868
+
869
+ entries.push({ kind: 'directory', relativePath: relativeDirectoryPath });
870
+ return true;
966
871
  }
967
872
 
968
873
  for (const entry of dirEntries) {
969
874
  const childAbsolutePath = join(currentDirectoryPath, entry.name);
875
+ const childRelativePath = relativeDirectoryPath ? `${relativeDirectoryPath}/${entry.name}` : entry.name;
970
876
  if (entry.isDirectory()) {
971
- const withinLimit = await visitDirectory(childAbsolutePath);
877
+ const withinLimit = await visitDirectory(childAbsolutePath, childRelativePath);
972
878
  if (!withinLimit) {
973
879
  return false;
974
880
  }
@@ -980,6 +886,12 @@ export class VaultFileStore {
980
886
  if (count > maxEntries) {
981
887
  return false;
982
888
  }
889
+
890
+ entries.push({
891
+ absolutePath: childAbsolutePath,
892
+ kind: 'file',
893
+ relativePath: childRelativePath,
894
+ });
983
895
  }
984
896
  }
985
897
 
@@ -988,7 +900,7 @@ export class VaultFileStore {
988
900
 
989
901
  const withinLimit = await visitDirectory(directoryAbsolutePath);
990
902
  return {
991
- count,
903
+ entries,
992
904
  withinLimit,
993
905
  };
994
906
  }
@@ -1016,6 +928,14 @@ export class VaultFileStore {
1016
928
  return { ok: false, error };
1017
929
  }
1018
930
 
931
+ try {
932
+ if (!(await stat(absoluteOld)).isFile()) {
933
+ return { ok: false, error: 'Path is not a file' };
934
+ }
935
+ } catch {
936
+ return { ok: false, error: 'File not found' };
937
+ }
938
+
1019
939
  if (absoluteOld === absoluteNew) {
1020
940
  return { ok: true };
1021
941
  }
@@ -1056,6 +976,14 @@ export class VaultFileStore {
1056
976
  return { ok: false, error };
1057
977
  }
1058
978
 
979
+ try {
980
+ if (!(await stat(absoluteOld)).isDirectory()) {
981
+ return { ok: false, error: 'Path is not a directory' };
982
+ }
983
+ } catch {
984
+ return { ok: false, error: 'Directory not found' };
985
+ }
986
+
1059
987
  if (absoluteOld === absoluteNew) {
1060
988
  return { ok: true };
1061
989
  }
@@ -1126,11 +1054,6 @@ export class VaultFileStore {
1126
1054
  }
1127
1055
  }
1128
1056
 
1129
- async countVaultFiles() {
1130
- const snapshot = await this.scanWorkspaceState();
1131
- return snapshot.vaultFileCount;
1132
- }
1133
-
1134
1057
  async reconcileSidecars({
1135
1058
  deletedPaths = [],
1136
1059
  renamedPaths = [],
@@ -1162,42 +1085,6 @@ export class VaultFileStore {
1162
1085
  );
1163
1086
  }
1164
1087
 
1165
- async countFilesInDir(dirPath) {
1166
- let count = 0;
1167
-
1168
- let entries;
1169
- try {
1170
- entries = await readdir(dirPath, { withFileTypes: true });
1171
- } catch {
1172
- return 0;
1173
- }
1174
-
1175
- for (const entry of entries) {
1176
- if (isIgnoredVaultEntry(entry.name)) {
1177
- continue;
1178
- }
1179
-
1180
- const fullPath = join(dirPath, entry.name);
1181
- if (entry.isDirectory()) {
1182
- count += await this.countFilesInDir(fullPath);
1183
- } else if (isVaultFilePath(entry.name)) {
1184
- count += 1;
1185
- }
1186
- }
1187
-
1188
- return count;
1189
- }
1190
-
1191
- resolveWikiLink(linkTarget) {
1192
- const normalized = linkTarget.endsWith('.md') ? linkTarget : `${linkTarget}.md`;
1193
- const absolute = this.resolveContentPath(normalized, { requireVaultFile: false });
1194
- if (!absolute) {
1195
- return null;
1196
- }
1197
-
1198
- return toVaultRelativePath(this.vaultDir, absolute);
1199
- }
1200
-
1201
1088
  async scanWorkspaceState() {
1202
1089
  return scanWorkspaceStateFromAdapter(createWorkspaceStateFileSystemAdapter({
1203
1090
  vaultDir: this.vaultDir,
@@ -18,13 +18,45 @@ function normalizeSvgPayload(body = '') {
18
18
  return normalized;
19
19
  }
20
20
 
21
+ const SVG_CACHE_LIMIT = 50;
22
+
21
23
  export class PlantUmlRenderer {
22
24
  constructor({ fetchImpl = fetch, serverUrl } = {}) {
23
25
  this.fetchImpl = fetchImpl;
24
26
  this.serverUrl = normalizeServerUrl(serverUrl);
27
+ this.svgCache = new Map();
28
+ this.inflightRequests = new Map();
25
29
  }
26
30
 
27
31
  async renderSvg(source = '') {
32
+ const cacheKey = String(source);
33
+ const cached = this.svgCache.get(cacheKey);
34
+ if (cached !== undefined) {
35
+ return cached;
36
+ }
37
+
38
+ if (this.inflightRequests.has(cacheKey)) {
39
+ return this.inflightRequests.get(cacheKey);
40
+ }
41
+
42
+ const request = this.fetchSvg(cacheKey).finally(() => {
43
+ this.inflightRequests.delete(cacheKey);
44
+ });
45
+ this.inflightRequests.set(cacheKey, request);
46
+ return request;
47
+ }
48
+
49
+ storeSvg(source, svgMarkup) {
50
+ if (this.svgCache.has(source)) {
51
+ this.svgCache.delete(source);
52
+ }
53
+ while (this.svgCache.size >= SVG_CACHE_LIMIT) {
54
+ this.svgCache.delete(this.svgCache.keys().next().value);
55
+ }
56
+ this.svgCache.set(source, svgMarkup);
57
+ }
58
+
59
+ async fetchSvg(source = '') {
28
60
  const encoded = encodePlantUmlText(source);
29
61
  const requestUrl = `${this.serverUrl}/svg/${encoded}`;
30
62
 
@@ -51,6 +83,7 @@ export class PlantUmlRenderer {
51
83
  throw error;
52
84
  }
53
85
 
86
+ this.storeSvg(source, normalizedSvg);
54
87
  return normalizedSvg;
55
88
  }
56
89
  }