collabmd 0.1.27 → 0.1.30

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 (469) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-C5yVpm45.js → CodeMirrorEditor-UCMRAMCV-tj0_ycIx.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-Dr0N-hVE.js → _basePickBy-B6kIfhzj.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-BddJc3B1.js → _baseUniq-Bbn0_sHS.js} +1 -1
  5. package/dist/client/assets/actions-XO29hEzr.css +1 -0
  6. package/dist/client/assets/{ar-SA-NXDWD63E-C3GLfrYV.js → ar-SA-NXDWD63E-BWO5oYxe.js} +1 -1
  7. package/dist/client/assets/{arc-fx_D7wYg.js → arc-BIqum3oD.js} +1 -1
  8. package/dist/client/assets/architecture-PBZL5I3N-iRyVT2GQ.js +1 -0
  9. package/dist/client/assets/architectureDiagram-2XIMDMQ5-BPG5b65m.js +36 -0
  10. package/dist/client/assets/{az-AZ-MXSORGZV-BJ2t-y-C.js → az-AZ-MXSORGZV-Cfw6Z5oY.js} +1 -1
  11. package/dist/client/assets/base-CaIEJUF9.css +1 -0
  12. package/dist/client/assets/base-h1uscjTi.js +1 -0
  13. package/dist/client/assets/{bg-BG-O6MV2KSF-Cd3kEZI-.js → bg-BG-O6MV2KSF-CQmG3YpD.js} +1 -1
  14. package/dist/client/assets/{blockDiagram-WCTKOSBZ-BivLpsk_.js → blockDiagram-WCTKOSBZ-F38TRzI3.js} +1 -1
  15. package/dist/client/assets/{bn-IN-MMW2ORAC-Dn9W9dUT.js → bn-BD-T2VJNT7N-C4S6DZ6o.js} +1 -1
  16. package/dist/client/assets/{bn-BD-T2VJNT7N-BFCx9nbZ.js → bn-IN-MMW2ORAC-DZKVshfk.js} +1 -1
  17. package/dist/client/assets/{c4Diagram-IC4MRINW-nVzPTZmV.js → c4Diagram-IC4MRINW-DHwxcDlQ.js} +1 -1
  18. package/dist/client/assets/{ca-ES-MKBCGNOG-D_BNlrmg.js → ca-ES-MKBCGNOG-Do3aMgyu.js} +1 -1
  19. package/dist/client/assets/channel-s0w88EQN.js +1 -0
  20. package/dist/client/assets/{chunk-4BX2VUAB-n_yl-toC.js → chunk-4BX2VUAB-BqEY6cCE.js} +1 -1
  21. package/dist/client/assets/{chunk-55IACEB6-CJ9i_5Da.js → chunk-55IACEB6-039iVf6v.js} +1 -1
  22. package/dist/client/assets/{chunk-7E7YKBS2-CebEBDsj.js → chunk-7E7YKBS2-BreG0gYL.js} +1 -1
  23. package/dist/client/assets/{chunk-7R4GIKGN-BXNhzFkP.js → chunk-7R4GIKGN-BMrp52Pk.js} +2 -2
  24. package/dist/client/assets/{chunk-ETSVUAFD-C8C1JDu2.js → chunk-AXZTUZBK-Cxfm7hmm.js} +1 -1
  25. package/dist/client/assets/{chunk-C72U2L5F-Cck8MvGP.js → chunk-C72U2L5F-BLB26v5d.js} +1 -1
  26. package/dist/client/assets/{chunk-EGIJ26TM-BDQ7tRV-.js → chunk-EGIJ26TM-fG-0Yh0k.js} +1 -1
  27. package/dist/client/assets/{chunk-FMBD7UC4-DAcjCJR-.js → chunk-FMBD7UC4-EWK5Pt4D.js} +1 -1
  28. package/dist/client/assets/{chunk-GEFDOKGD-CYSNVsp-.js → chunk-GEFDOKGD-DYHmaq-c.js} +1 -1
  29. package/dist/client/assets/chunk-GLR3WWYH-CQ1LryrI.js +2 -0
  30. package/dist/client/assets/chunk-HHEYEP7N-DOQ0PCdH.js +1 -0
  31. package/dist/client/assets/{chunk-JSJVCQXG-CLgStmEI.js → chunk-JSJVCQXG-B69YGtcQ.js} +1 -1
  32. package/dist/client/assets/{chunk-KX2RTZJC-B__vUl1o.js → chunk-KX2RTZJC-tuEC7hg1.js} +1 -1
  33. package/dist/client/assets/{chunk-KYZI473N-BpfobHkp.js → chunk-KYZI473N-D4r5eMJZ.js} +1 -1
  34. package/dist/client/assets/{chunk-L3YUKLVL-B7jdwbRL.js → chunk-L3YUKLVL-CD9nJYL8.js} +1 -1
  35. package/dist/client/assets/{chunk-MX3YWQON-DNcuP5dS.js → chunk-MX3YWQON-DqN0TF5Q.js} +1 -1
  36. package/dist/client/assets/{chunk-NQ4KR5QH-oaq5iS2W.js → chunk-NQ4KR5QH-BBX89uUa.js} +1 -1
  37. package/dist/client/assets/chunk-NU2UP6EN-CGeKI3BV.js +35 -0
  38. package/dist/client/assets/{chunk-O4XLMI2P-NI4OcSZ6.js → chunk-O4XLMI2P-DaS3COAu.js} +1 -1
  39. package/dist/client/assets/{chunk-OZEHJAEY-BevHLeQ0.js → chunk-OZEHJAEY-BaBXI-8x.js} +1 -1
  40. package/dist/client/assets/{chunk-PQ6SQG4A-fQ_Oml5n.js → chunk-PQ6SQG4A-BY9_Srs_.js} +1 -1
  41. package/dist/client/assets/{chunk-PU5JKC2W-Bp4H-mwZ.js → chunk-PU5JKC2W-t0zUh6E3.js} +1 -1
  42. package/dist/client/assets/chunk-QZHKN3VN-B0v4d-CS.js +1 -0
  43. package/dist/client/assets/{chunk-R5LLSJPH-CZzZlfdI.js → chunk-R5LLSJPH-BjSMFnTi.js} +1 -1
  44. package/dist/client/assets/{chunk-SRAX5OIU-CtUYAya6.js → chunk-SRAX5OIU-CC2mobFL.js} +1 -1
  45. package/dist/client/assets/{chunk-WL4C6EOR-DnV9nMco.js → chunk-WL4C6EOR-zSV-8h7F.js} +1 -1
  46. package/dist/client/assets/{chunk-XIRO2GV7-BnkmoLpc.js → chunk-XIRO2GV7-2tirYN5A.js} +1 -1
  47. package/dist/client/assets/{chunk-XPW4576I-DOk6pMat.js → chunk-XPW4576I-C0GpOUHf.js} +1 -1
  48. package/dist/client/assets/{chunk-XZSTWKYB-DZzfqgVn.js → chunk-XZSTWKYB-DDkpyNVE.js} +1 -1
  49. package/dist/client/assets/{chunk-YBOYWFTD-CrI5WFnC.js → chunk-YBOYWFTD-CzyyfGQX.js} +1 -1
  50. package/dist/client/assets/{chunk-Z5NKEFVG-EGvolisB.js → chunk-Z5NKEFVG-Dgem5v98.js} +1 -1
  51. package/dist/client/assets/classDiagram-VBA2DB6C-BQqG4q1b.js +1 -0
  52. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BUKbprX1.js +1 -0
  53. package/dist/client/assets/clone-C-n46MFF.js +1 -0
  54. package/dist/client/assets/controls-CLpueX2m.css +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-PcMOD_rX.js → cose-bilkent-S5V4N54A-jZzFUguD.js} +1 -1
  56. package/dist/client/assets/{cs-CZ-V77HGUP7-gpioT6mv.js → cs-CZ-V77HGUP7-DmZRJ2UO.js} +1 -1
  57. package/dist/client/assets/{da-DK-I5RFNTM4-CVv-_qu9.js → da-DK-I5RFNTM4-CRIiLQ-G.js} +1 -1
  58. package/dist/client/assets/dagre-KLK3FWXG-CAG8WeES.js +4 -0
  59. package/dist/client/assets/{dagre-BD9xHP_z.js → dagre-fvYjRtTE.js} +1 -1
  60. package/dist/client/assets/{de-CH-WLRDEVBV-CL0gsFEp.js → de-CH-WLRDEVBV-k728UA4j.js} +1 -1
  61. package/dist/client/assets/{de-DE-DTI4WUSC-BQO1SHIK.js → de-DE-DTI4WUSC-MFge9MC3.js} +1 -1
  62. package/dist/client/assets/diagram-E7M64L7V-Bm5FD0I5.js +24 -0
  63. package/dist/client/assets/diagram-IFDJBPK2-pqicH-av.js +43 -0
  64. package/dist/client/assets/diagram-P4PSJMXO-DwIXO27H.js +24 -0
  65. package/dist/client/assets/dist-3bQB_we3.js +1 -0
  66. package/dist/client/assets/dist-3uAMa5w5.js +1 -0
  67. package/dist/client/assets/{dist-Q6uG0wie.js → dist-B-02vKOA.js} +1 -1
  68. package/dist/client/assets/{dist-DzArd_Bk.js → dist-BLAlZer_.js} +1 -1
  69. package/dist/client/assets/dist-BVB8rn7o.js +1 -0
  70. package/dist/client/assets/{dist-DrNF924C.js → dist-Bc2ND6i3.js} +1 -1
  71. package/dist/client/assets/{dist-lbtQBzLu.js → dist-BqQjnEWr.js} +1 -1
  72. package/dist/client/assets/{dist-BQhICHxD.js → dist-BtnXjRx0.js} +1 -1
  73. package/dist/client/assets/{dist-Ciw3BJA2.js → dist-BzbYwa8m.js} +1 -1
  74. package/dist/client/assets/{dist-fkQ6urpt.js → dist-BzpfHRaE.js} +1 -1
  75. package/dist/client/assets/{dist-DhzldYic.js → dist-CGV1S_as.js} +1 -1
  76. package/dist/client/assets/dist-CL-jjdvG.js +1 -0
  77. package/dist/client/assets/{dist-WrbPKwPQ.js → dist-CXpKYW9s.js} +1 -1
  78. package/dist/client/assets/{dist-60g3bzYH.js → dist-CjII8VDS.js} +1 -1
  79. package/dist/client/assets/{dist-BiFbHWxc.js → dist-CsYRf4AV.js} +1 -1
  80. package/dist/client/assets/{dist-U9MIFRLF.js → dist-CxfohGIV.js} +1 -1
  81. package/dist/client/assets/{dist-D2m8lD1h.js → dist-D5QOYy7y.js} +1 -1
  82. package/dist/client/assets/{dist-CvMToPSN.js → dist-DIi0uqLJ.js} +1 -1
  83. package/dist/client/assets/dist-DJ16N7ol.js +1 -0
  84. package/dist/client/assets/dist-DUvaQ-Bj.js +1 -0
  85. package/dist/client/assets/{dist-yRVuIDKu.js → dist-DWJL3_bF.js} +6 -6
  86. package/dist/client/assets/dist-DsL7sqZR.js +1 -0
  87. package/dist/client/assets/{dist-DAwSRqIJ.js → dist-Dyt7n5Ui.js} +1 -1
  88. package/dist/client/assets/{dist-B2pRSR5A.js → dist-E_jPb93e.js} +1 -1
  89. package/dist/client/assets/{dist-EPRNBXHp.js → dist-O1z0Ayg0.js} +1 -1
  90. package/dist/client/assets/dist-OQE68wIX.js +1 -0
  91. package/dist/client/assets/dist-k47-Io7D.js +1 -0
  92. package/dist/client/assets/{dist-2HWwyMLA.js → dist-lDhnP-K1.js} +1 -1
  93. package/dist/client/assets/{dist-BZc5d15t.js → dist-rMhng5DK.js} +1 -1
  94. package/dist/client/assets/dist-xO1ImhKz.js +1 -0
  95. package/dist/client/assets/{dockerfile-Ci0-ApQC.js → dockerfile-C0qQqxf9.js} +1 -1
  96. package/dist/client/assets/drawio-editor-CTZtMo1J.js +9 -0
  97. package/dist/client/assets/drawio-editor-UQQ8XHou.css +1 -0
  98. package/dist/client/assets/drawioEditor-keSJVTcv.js +2 -0
  99. package/dist/client/assets/editor-session-C9l9XwVg.js +16 -0
  100. package/dist/client/assets/{el-GR-ZXDJ2OS4-DGa9DqWI.js → el-GR-ZXDJ2OS4-Bbz93mrG.js} +1 -1
  101. package/dist/client/assets/embedded-editor-base-DgmRcsR8.css +1 -0
  102. package/dist/client/assets/{en-CTDJDZ6K-DC-4I8h8.js → en-IQZW2TQM-CZeIyvu2.js} +1 -1
  103. package/dist/client/assets/{erDiagram-INFDFZHY-Dnub3poK.js → erDiagram-INFDFZHY-DlhPv4az.js} +1 -1
  104. package/dist/client/assets/{es-ES-DYQHAD43-Cox3GUnj.js → es-ES-DYQHAD43-CReXU-Nn.js} +1 -1
  105. package/dist/client/assets/{eu-ES-QDSYU5Y3-DrPM2uSX.js → eu-ES-QDSYU5Y3-jRpcaWwz.js} +1 -1
  106. package/dist/client/assets/excalidraw-editor-CBEWfuhb.js +9 -0
  107. package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +1 -0
  108. package/dist/client/assets/{excalidraw-mermaid-stub-LpuTrLnr.js → excalidraw-mermaid-stub-efoh2lJm.js} +1 -1
  109. package/dist/client/assets/excalidraw-scene-BL-OtvCd.js +176 -0
  110. package/dist/client/assets/excalidrawEditor-Ws-fwGOc.js +2 -0
  111. package/dist/client/assets/export-page-B6xYnwy7.js +39 -0
  112. package/dist/client/assets/exportDocument-8JBw0p8O.js +2 -0
  113. package/dist/client/assets/exportDocument-CtX_4PSk.css +1 -0
  114. package/dist/client/assets/{fa-IR-26LZG4PM-ViTdxAWX.js → fa-IR-26LZG4PM-DP8pJ8e3.js} +1 -1
  115. package/dist/client/assets/{factor-DMvifS-k.js → factor-2uy-lXe_.js} +1 -1
  116. package/dist/client/assets/{fi-FI-6YS4KDE4-BTBRGd69.js → fi-FI-6YS4KDE4-BLUDpNOj.js} +1 -1
  117. package/dist/client/assets/{flowDiagram-PKNHOUZH-DF4dDV_8.js → flowDiagram-PKNHOUZH-BU4MOSq8.js} +1 -1
  118. package/dist/client/assets/{fr-FR-BRLLPTZC-z-POHcHJ.js → fr-FR-BRLLPTZC-BoZz3Pi8.js} +1 -1
  119. package/dist/client/assets/ganttDiagram-A5KZAMGK-CbX67lZu.js +292 -0
  120. package/dist/client/assets/gitGraph-HDMCJU4V-kkuqHGSM.js +1 -0
  121. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DhyvWcW1.js +65 -0
  122. package/dist/client/assets/{gl-ES-OKUZTLYG-BQtfDFNk.js → gl-ES-OKUZTLYG-CaEvhjDi.js} +1 -1
  123. package/dist/client/assets/{graphlib-B7v-yqry.js → graphlib-DSzYgMXB.js} +1 -1
  124. package/dist/client/assets/{he-IL-26MGYIU7-Dyw-xS4W.js → he-IL-26MGYIU7-DYOchgy9.js} +1 -1
  125. package/dist/client/assets/{hi-IN-Q4ZOGTP2-BqENUkZA.js → hi-IN-Q4ZOGTP2-yRs8g46n.js} +1 -1
  126. package/dist/client/assets/{hu-HU-P2OXPSN5-D1HGK0_M.js → hu-HU-P2OXPSN5-1skPmtgc.js} +1 -1
  127. package/dist/client/assets/{id-ID-2EIKXYN6-BEjyfllL.js → id-ID-2EIKXYN6-iUugQJd9.js} +1 -1
  128. package/dist/client/assets/image-XLNPCCAD-B4wZgh-Y.js +1 -0
  129. package/dist/client/assets/index-CywRKxsk.js +2 -0
  130. package/dist/client/assets/index-R4OArFku.css +1 -0
  131. package/dist/client/assets/info-3K5VOQVL-DPN78whf.js +1 -0
  132. package/dist/client/assets/infoDiagram-LFFYTUFH-Bap6MyHX.js +2 -0
  133. package/dist/client/assets/{isEmpty-CLDc0Kt_.js → isEmpty-C7iPDOO3.js} +1 -1
  134. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-CmO_FyHY.js → ishikawaDiagram-PHBUUO56-DbftskqN.js} +1 -1
  135. package/dist/client/assets/{it-IT-4CFKVXI2-C24G-VcQ.js → it-IT-4CFKVXI2-a5DFhzuI.js} +1 -1
  136. package/dist/client/assets/{ja-JP-MAND2Z4V-DLhvsdYk.js → ja-JP-MAND2Z4V-DwogHVKd.js} +1 -1
  137. package/dist/client/assets/javascript-8DvdgifH.js +1 -0
  138. package/dist/client/assets/{journeyDiagram-4ABVD52K-DF4HAYLk.js → journeyDiagram-4ABVD52K-165YoX6B.js} +1 -1
  139. package/dist/client/assets/{jsx-runtime-DJkgQklN.js → jsx-runtime-DiaMmmG6.js} +1 -1
  140. package/dist/client/assets/{kaa-HQRTCXTJ-DC8l3BuJ.js → kaa-HQRTCXTJ-p81XNRfH.js} +1 -1
  141. package/dist/client/assets/{kab-KAB-JKIKKTGH-DVFog4hd.js → kab-KAB-JKIKKTGH-mV5VzQZc.js} +1 -1
  142. package/dist/client/assets/{kanban-definition-K7BYSVSG-nQoJJABn.js → kanban-definition-K7BYSVSG-MlixoNyx.js} +1 -1
  143. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CULUfwMg.js → kk-KZ-HXQ63ZFC-IIPX0GQv.js} +1 -1
  144. package/dist/client/assets/{km-KH-PKL3LSGX-CnLlEv7i.js → km-KH-PKL3LSGX-D7WQFJuZ.js} +1 -1
  145. package/dist/client/assets/{ko-KR-KXLREZX3-DNKXAYCx.js → ko-KR-KXLREZX3-Bs1oLtJs.js} +1 -1
  146. package/dist/client/assets/{ku-TR-MJ4IER3X-DLUiMa4h.js → ku-TR-MJ4IER3X-DlxOs6aZ.js} +1 -1
  147. package/dist/client/assets/{line-DvLjT0Gv.js → line-D57TbKb7.js} +1 -1
  148. package/dist/client/assets/{linear-CEb8O7zv.js → linear-BIf852wI.js} +1 -1
  149. package/dist/client/assets/{lt-LT-H6WFQ6FJ-CoFiurzb.js → lt-LT-H6WFQ6FJ-xuo-3zKH.js} +1 -1
  150. package/dist/client/assets/{lv-LV-GOCK6SJW-DzeEvHxX.js → lv-LV-GOCK6SJW-C7S3M1nr.js} +1 -1
  151. package/dist/client/assets/main-CB97rY6B.js +1213 -0
  152. package/dist/client/assets/mermaid-parser.core-lf87rdG-.js +4 -0
  153. package/dist/client/assets/{mermaid-runtime-DbCLD8Ih.js → mermaid-runtime-C4a7TrTS.js} +3 -3
  154. package/dist/client/assets/{mindmap-definition-YRQLILUH-DaMULsE9.js → mindmap-definition-YRQLILUH-_YbQSc4Q.js} +1 -1
  155. package/dist/client/assets/{mr-IN-IXVLDMEQ-C5i5R9H5.js → mr-IN-IXVLDMEQ-BsoowyZT.js} +1 -1
  156. package/dist/client/assets/{my-MM-YG6MYTTD-DvwceqO-.js → my-MM-YG6MYTTD-DCqwN_K_.js} +1 -1
  157. package/dist/client/assets/navigation-Du6CLhvs.css +1 -0
  158. package/dist/client/assets/{nb-NO-XGWJISD2-BUhX8hX0.js → nb-NO-XGWJISD2-CZ5ytLgj.js} +1 -1
  159. package/dist/client/assets/{nl-NL-XVDVCPNC-BV6Y0-Q0.js → nl-NL-XVDVCPNC-wADsdb-h.js} +1 -1
  160. package/dist/client/assets/{nn-NO-EMX5MJX5-CF_bB9Jq.js → nn-NO-EMX5MJX5-D9zIKTL2.js} +1 -1
  161. package/dist/client/assets/{nsis-42hkxqLx.js → nsis-CUd4RnvJ.js} +1 -1
  162. package/dist/client/assets/{oc-FR-ROEINTVO-CiNI8fg8.js → oc-FR-ROEINTVO-BSbBugJB.js} +1 -1
  163. package/dist/client/assets/{ordinal-fW5lWpNM.js → ordinal-B0PAtOQ6.js} +1 -1
  164. package/dist/client/assets/{pa-IN-ZYN6SUDY-CsbIU150.js → pa-IN-ZYN6SUDY-1pFA_3Pb.js} +1 -1
  165. package/dist/client/assets/packet-RMMSAZCW-BymvQ5cQ.js +1 -0
  166. package/dist/client/assets/percentages-5DKR754L-CiI2D7zA.js +1 -0
  167. package/dist/client/assets/{pica-BbcTjVoI.js → pica-By-YDy_B.js} +1 -1
  168. package/dist/client/assets/pie-UPGHQEXC-MmzJzWOE.js +1 -0
  169. package/dist/client/assets/pieDiagram-SKSYHLDU-CqCgXFom.js +30 -0
  170. package/dist/client/assets/{pl-PL-6VTG7PHC-D1Nnx7R3.js → pl-PL-6VTG7PHC-DyYw0u_z.js} +1 -1
  171. package/dist/client/assets/preview-diagram-utils-Dc83ucbv.js +1 -0
  172. package/dist/client/assets/preview-render-compiler-TmHpBDlh.js +1 -0
  173. package/dist/client/assets/preview-render-compiler-aYpnXmNm.js +35 -0
  174. package/dist/client/assets/{preview-render-profile-DQsam_Ol.js → preview-render-profile-DPzmho7I.js} +1 -1
  175. package/dist/client/assets/preview-render-worker-BVbVXXPS.js +59 -0
  176. package/dist/client/assets/{pt-BR-5YFKRR5G-DEDTeWEP.js → pt-BR-5YFKRR5G-DJCCBBDl.js} +1 -1
  177. package/dist/client/assets/{pt-PT-GEIXXZ67-BpqPVZom.js → pt-PT-GEIXXZ67-BPJd09Ax.js} +1 -1
  178. package/dist/client/assets/{pug-BANqyQJ9.js → pug-BqBF8qF7.js} +1 -1
  179. package/dist/client/assets/{quadrantDiagram-337W2JSQ-DjPGrcJM.js → quadrantDiagram-337W2JSQ-B8eMuhg4.js} +1 -1
  180. package/dist/client/assets/{quick-switcher-controller-n6Jhu3Z9.js → quick-switcher-controller-DplOTsT3.js} +1 -1
  181. package/dist/client/assets/radar-KQ55EAFF-CCohASSY.js +1 -0
  182. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-BmiYAMKV.js → requirementDiagram-Z7DCOOCP-B6POvqz4.js} +1 -1
  183. package/dist/client/assets/{ro-RO-E2P6TFZI-4vRM1jVT.js → ro-RO-E2P6TFZI-DWVyTV7V.js} +1 -1
  184. package/dist/client/assets/{room-DyhEnogt.js → room-COWSP--i.js} +1 -1
  185. package/dist/client/assets/{ru-RU-YBIIY43T-Cfbhz4Ew.js → ru-RU-YBIIY43T-Dyar7CYM.js} +1 -1
  186. package/dist/client/assets/runtime-config-CqX_f_Q4.js +1 -0
  187. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-BEoPAlcC.js → sankeyDiagram-WA2Y5GQK-CXRga6Op.js} +1 -1
  188. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-BXqojuDS.js → sequenceDiagram-2WXFIKYE-CeSFlFx5.js} +1 -1
  189. package/dist/client/assets/{si-LK-673C2CI2-0muNkOEn.js → si-LK-673C2CI2-C61aLrIy.js} +1 -1
  190. package/dist/client/assets/{sk-SK-CKZHQ4AP-EnLgxyJL.js → sk-SK-CKZHQ4AP-BlFwOxRD.js} +1 -1
  191. package/dist/client/assets/{sl-SI-557H2GWM-BN6npqVj.js → sl-SI-557H2GWM-DcAVW-_t.js} +1 -1
  192. package/dist/client/assets/{src-DUDi_GeV.js → src-E3c2cohN.js} +1 -1
  193. package/dist/client/assets/stateDiagram-RAJIS63D-DbewhqwJ.js +1 -0
  194. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-DbW-jVkS.js +1 -0
  195. package/dist/client/assets/states-P2LsGDDn.css +1 -0
  196. package/dist/client/assets/subset-shared.chunk-CC_u8ICU.js +1 -0
  197. package/dist/client/assets/{subset-worker.chunk-1FoL7eL0.js → subset-worker.chunk-DVGT6bvR.js} +1 -1
  198. package/dist/client/assets/{sv-SE-XOPKKDWS-D3VSs2SQ.js → sv-SE-XOPKKDWS-BkhfOHzh.js} +1 -1
  199. package/dist/client/assets/{ta-IN-XBH7DQI3-BKR1mqfo.js → ta-IN-XBH7DQI3-BIfwglZa.js} +1 -1
  200. package/dist/client/assets/{th-TH-TOCWH3R4-Bek1dQcW.js → th-TH-TOCWH3R4-CkrxqVkf.js} +1 -1
  201. package/dist/client/assets/{timeline-definition-YZTLITO2-BP09qqIh.js → timeline-definition-YZTLITO2-BXBHNWLQ.js} +1 -1
  202. package/dist/client/assets/{tr-TR-GXW6CYY5-xdLb7Dgi.js → tr-TR-GXW6CYY5-CDdvG9rD.js} +1 -1
  203. package/dist/client/assets/treemap-KZPCXAKY-9kxB0uNY.js +1 -0
  204. package/dist/client/assets/{uk-UA-IJKTNUDG-Cd0AhTti.js → uk-UA-IJKTNUDG-DRHp0lWp.js} +1 -1
  205. package/dist/client/assets/{uz-UZ-TBZZEA4V-DQH4e-QC.js → uz-UZ-TBZZEA4V-BIn-VE3Y.js} +1 -1
  206. package/dist/client/assets/vault-api-client-DIaCC56H.js +1 -0
  207. package/dist/client/assets/vault-api-client-De7kMvrE.css +1 -0
  208. package/dist/client/assets/{vennDiagram-LZ73GAT5-BvSlhnT0.js → vennDiagram-LZ73GAT5-C1hrSbf2.js} +1 -1
  209. package/dist/client/assets/{vi-VN-MULSGNVB-BYDcPrAo.js → vi-VN-MULSGNVB-Du7t5I0v.js} +1 -1
  210. package/dist/client/assets/{xychartDiagram-JWTSCODW-BvZ78F0j.js → xychartDiagram-JWTSCODW-DhpWp8LV.js} +1 -1
  211. package/dist/client/assets/yjs-provider-reset-guard-DWGhQClh.js +4 -0
  212. package/dist/client/assets/{zh-CN-MVX3E32U-BqZQ-18-.js → zh-CN-MVX3E32U-RcjS3rjt.js} +1 -1
  213. package/dist/client/assets/{zh-HK-JNU5RLIE-CbF8Agwa.js → zh-HK-JNU5RLIE-g8UeEw5v.js} +1 -1
  214. package/dist/client/assets/{zh-TW-LENVCA6T-CepoVycx.js → zh-TW-LENVCA6T-DwV25BqC.js} +1 -1
  215. package/dist/client/drawio-editor.html +4 -26
  216. package/dist/client/excalidraw-editor.html +4 -19
  217. package/dist/client/export-document.html +29 -0
  218. package/dist/client/index.html +7 -445
  219. package/docker-compose.yml +1 -0
  220. package/package.json +26 -22
  221. package/src/client/app/drawio-editor.html +1 -23
  222. package/src/client/app/excalidraw-editor.html +1 -16
  223. package/src/client/app/export-document-entry.js +25 -0
  224. package/src/client/app/export-document.html +24 -0
  225. package/src/client/app/index.html +1 -441
  226. package/src/client/app/main-entry.js +2 -0
  227. package/src/client/application/app-shell/export-feature.js +39 -0
  228. package/src/client/application/app-shell/ui-feature-shell.js +112 -17
  229. package/src/client/application/app-shell/ui-feature-toolbar.js +26 -4
  230. package/src/client/application/app-shell/workspace-feature.js +31 -3
  231. package/src/client/application/app-shell-elements.js +5 -0
  232. package/src/client/application/diagram-preview-hydrator.js +1 -1
  233. package/src/client/application/markdown-frontmatter.js +152 -0
  234. package/src/client/application/preview-render-compiler.js +16 -4
  235. package/src/client/application/preview-render-executor.js +8 -1
  236. package/src/client/application/preview-render-worker.js +4 -0
  237. package/src/client/application/preview-renderer.js +51 -1
  238. package/src/client/application/workspace-chrome-controller.js +3 -1
  239. package/src/client/application/workspace-coordinator.js +8 -1
  240. package/src/client/application/workspace-preview-controller.js +9 -3
  241. package/src/client/application/workspace-state-store.js +1 -0
  242. package/src/client/bootstrap/collabmd-app-shell.js +13 -1
  243. package/src/client/domain/markdown-formatting.js +1 -1
  244. package/src/client/domain/markdown-toolbar-actions.js +36 -0
  245. package/src/client/drawio-editor.js +4 -1
  246. package/src/client/excalidraw-editor.js +8 -0
  247. package/src/client/export/export-host.js +193 -0
  248. package/src/client/export/export-page.js +60 -0
  249. package/src/client/export/export-pipeline.js +1412 -0
  250. package/src/client/export/export-print-layout.js +50 -0
  251. package/src/client/infrastructure/auth-client.js +2 -203
  252. package/src/client/infrastructure/editor-session.js +12 -0
  253. package/src/client/infrastructure/editor-view-adapter.js +70 -2
  254. package/src/client/infrastructure/excalidraw-room-client.js +12 -4
  255. package/src/client/presentation/app-shell-renderer.js +13 -0
  256. package/src/client/presentation/app-shell-template.js +605 -0
  257. package/src/client/presentation/comment-ui/comment-ui-card.js +32 -10
  258. package/src/client/presentation/comments-panel.js +5 -3
  259. package/src/client/presentation/components/ui/badge.js +24 -0
  260. package/src/client/presentation/components/ui/button.js +78 -0
  261. package/src/client/presentation/components/ui/class-names.js +30 -0
  262. package/src/client/presentation/components/ui/ensure-ui-component-styles.js +18 -0
  263. package/src/client/presentation/components/ui/input.js +9 -0
  264. package/src/client/presentation/components/ui/segmented-control.js +31 -0
  265. package/src/client/presentation/create-menu-presenter.js +10 -2
  266. package/src/client/presentation/file-action-controller.js +5 -6
  267. package/src/client/presentation/file-explorer-view.js +9 -2
  268. package/src/client/presentation/file-history-view-controller.js +4 -3
  269. package/src/client/presentation/git-diff-view-controller.js +9 -11
  270. package/src/client/presentation/git-panel-controller.js +10 -8
  271. package/src/client/presentation/layout-controller.js +34 -4
  272. package/src/client/styles/base.css +5 -0
  273. package/src/client/styles/components/actions.css +6 -0
  274. package/src/client/styles/components/navigation.css +1 -0
  275. package/src/client/styles/export-document.css +250 -0
  276. package/src/client/styles/features/auth-gate.css +182 -0
  277. package/src/client/styles/features/git-branch.css +30 -2
  278. package/src/client/styles/features/preview-markdown.css +145 -4
  279. package/src/client/styles/layout/editor-page.css +101 -3
  280. package/src/client/styles/layout/responsive.css +97 -7
  281. package/src/client/styles/layout/shell.css +6 -0
  282. package/src/client/styles/layout/sidebar.css +1 -1
  283. package/src/client/styles/overrides/codemirror.css +74 -0
  284. package/src/client/styles/primitives/controls.css +22 -31
  285. package/src/client/styles/style.css +0 -4
  286. package/src/client/styles/surfaces/drawio-editor.css +104 -0
  287. package/src/client/styles/surfaces/embedded-editor-base.css +23 -0
  288. package/src/client/styles/surfaces/excalidraw-editor.css +16 -0
  289. package/src/server/auth/create-auth-service.js +32 -6
  290. package/src/server/config/env.js +27 -0
  291. package/src/server/config/perf-logging.js +39 -0
  292. package/src/server/create-app-server.js +105 -5
  293. package/src/server/domain/backlink-index.js +31 -7
  294. package/src/server/domain/collaboration/collaboration-room.js +28 -5
  295. package/src/server/domain/docx-exporter.js +62 -0
  296. package/src/server/infrastructure/git/history-service.js +1 -1
  297. package/src/server/infrastructure/http/create-request-handler.js +2 -0
  298. package/src/server/infrastructure/http/create-vault-api-command-handler.js +59 -1
  299. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  300. package/src/server/infrastructure/http/request-body.js +2 -2
  301. package/src/server/infrastructure/persistence/pull-backup-store.js +1 -1
  302. package/src/server/infrastructure/persistence/vault-file-store.js +74 -31
  303. package/src/server/infrastructure/workspace/file-system-sync-service.js +46 -12
  304. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +32 -7
  305. package/src/server/shared/async-utils.js +25 -0
  306. package/dist/client/assets/architecture-PBZL5I3N-C1Yv7agI.js +0 -1
  307. package/dist/client/assets/architectureDiagram-2XIMDMQ5-T__yxKk2.js +0 -36
  308. package/dist/client/assets/channel-DBZin7O0.js +0 -1
  309. package/dist/client/assets/chunk-27N2SPOM-CyIruM79.js +0 -34
  310. package/dist/client/assets/chunk-GLR3WWYH-FplqAopN.js +0 -2
  311. package/dist/client/assets/chunk-HHEYEP7N-Bv_FKHmu.js +0 -1
  312. package/dist/client/assets/chunk-QZHKN3VN-Blawx8vd.js +0 -1
  313. package/dist/client/assets/classDiagram-VBA2DB6C-CreQafQu.js +0 -1
  314. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BIYHzbiv.js +0 -1
  315. package/dist/client/assets/clone-C3ajWNce.js +0 -1
  316. package/dist/client/assets/dagre-KLK3FWXG-Ct1xwvCC.js +0 -4
  317. package/dist/client/assets/diagram-E7M64L7V-DkHzt94k.js +0 -24
  318. package/dist/client/assets/diagram-IFDJBPK2-D4g8afpU.js +0 -43
  319. package/dist/client/assets/diagram-P4PSJMXO-DVwwx6ED.js +0 -24
  320. package/dist/client/assets/dist-BS6yAJ9F.js +0 -1
  321. package/dist/client/assets/dist-BUnp4fHW.js +0 -1
  322. package/dist/client/assets/dist-BWEDjv8G.js +0 -1
  323. package/dist/client/assets/dist-BdtPRC1F.js +0 -1
  324. package/dist/client/assets/dist-BlhsMbAl.js +0 -1
  325. package/dist/client/assets/dist-CLsz2DCg.js +0 -1
  326. package/dist/client/assets/dist-DZD5y4h6.js +0 -1
  327. package/dist/client/assets/dist-_L_gn5XE.js +0 -1
  328. package/dist/client/assets/dist-a6bFAbQd.js +0 -1
  329. package/dist/client/assets/dist-naAaVPPS.js +0 -1
  330. package/dist/client/assets/drawio-editor-BW2z4NH2.js +0 -9
  331. package/dist/client/assets/drawioEditor-DgoA4Zqi.js +0 -2
  332. package/dist/client/assets/editor-session-xPvmulmt.js +0 -16
  333. package/dist/client/assets/excalidraw-editor-BAYca95w.js +0 -182
  334. package/dist/client/assets/excalidraw-editor-D8O7A69r.css +0 -1
  335. package/dist/client/assets/excalidrawEditor-BY5rq_Bn.js +0 -2
  336. package/dist/client/assets/ganttDiagram-A5KZAMGK-CwrN53Gu.js +0 -292
  337. package/dist/client/assets/gitGraph-HDMCJU4V-DbS2XnWK.js +0 -1
  338. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-BV9w0K-N.js +0 -65
  339. package/dist/client/assets/image-32MOCVDX-BBXPyAeU.js +0 -1
  340. package/dist/client/assets/index-D4FS-o13.js +0 -2
  341. package/dist/client/assets/index-DRgeOr4A.css +0 -1
  342. package/dist/client/assets/info-3K5VOQVL-Bre4VStM.js +0 -1
  343. package/dist/client/assets/infoDiagram-LFFYTUFH-CuUbZqrG.js +0 -2
  344. package/dist/client/assets/javascript-DdEc60Aj.js +0 -1
  345. package/dist/client/assets/main-Q1xvhoqP.js +0 -600
  346. package/dist/client/assets/mermaid-parser.core-DllATXd7.js +0 -4
  347. package/dist/client/assets/packet-RMMSAZCW-B7lnOkip.js +0 -1
  348. package/dist/client/assets/percentages-5DKR754L-Dp1vwDEq.js +0 -1
  349. package/dist/client/assets/pie-UPGHQEXC-D0gHdMgb.js +0 -1
  350. package/dist/client/assets/pieDiagram-SKSYHLDU-BPFp1WBd.js +0 -30
  351. package/dist/client/assets/preview-render-compiler-BYiRMsPq.js +0 -1
  352. package/dist/client/assets/preview-render-worker-CcASh3y3.js +0 -23
  353. package/dist/client/assets/radar-KQ55EAFF-D48du2CB.js +0 -1
  354. package/dist/client/assets/stateDiagram-RAJIS63D-DTR2sQs8.js +0 -1
  355. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-BwVII-kJ.js +0 -1
  356. package/dist/client/assets/subset-shared.chunk-C6pUl_Oh.js +0 -1
  357. package/dist/client/assets/treemap-KZPCXAKY-BBRObSiT.js +0 -1
  358. package/dist/client/assets/vault-api-client-fFJfUVXM.js +0 -188
  359. package/dist/client/assets/yjs-provider-reset-guard-Cj00kgyM.js +0 -4
  360. /package/dist/client/assets/{apl-CJPt5sW7.js → apl-QJCYYBkj.js} +0 -0
  361. /package/dist/client/assets/{array-e43ctQmx.js → array-DwdVlTkF.js} +0 -0
  362. /package/dist/client/assets/{asciiarmor-D0oCypDs.js → asciiarmor-DNy0UPqh.js} +0 -0
  363. /package/dist/client/assets/{asn1-8xgVfRoq.js → asn1-CNPXj-s7.js} +0 -0
  364. /package/dist/client/assets/{asterisk-B5kv5AQp.js → asterisk-BwMdLpT2.js} +0 -0
  365. /package/dist/client/assets/{brainfuck-Dh7M1Ucz.js → brainfuck-C2gHT8aA.js} +0 -0
  366. /package/dist/client/assets/{chunk-3PELD44J-D4qJ8fq7.js → chunk-3PELD44J-CL87tpFo.js} +0 -0
  367. /package/dist/client/assets/{chunk-A66AFZZU-CJuwmF1m.js → chunk-A66AFZZU-DuceaGnc.js} +0 -0
  368. /package/dist/client/assets/{chunk-D-fkvfCP.js → chunk-DpHwWhuW.js} +0 -0
  369. /package/dist/client/assets/{clike-zYz_LEkw.js → clike-D5X7HJpo.js} +0 -0
  370. /package/dist/client/assets/{clojure-CdWlIeQh.js → clojure-BEDKZv_5.js} +0 -0
  371. /package/dist/client/assets/{cmake-wWuF5ifR.js → cmake-Y3shE7av.js} +0 -0
  372. /package/dist/client/assets/{cobol-D3WLbLVy.js → cobol-f-3TLk62.js} +0 -0
  373. /package/dist/client/assets/{coffeescript-DRtt-5a2.js → coffeescript-C0XA9-xa.js} +0 -0
  374. /package/dist/client/assets/{commonlisp-DJV75lsU.js → commonlisp-BOB6sIEu.js} +0 -0
  375. /package/dist/client/assets/{crystal-C7mEw92C.js → crystal-ByNgE_My.js} +0 -0
  376. /package/dist/client/assets/{css-_6KgQwpu.js → css-eaI-ENiR.js} +0 -0
  377. /package/dist/client/assets/{cypher-B3uWx7jm.js → cypher-CQ-dGGSi.js} +0 -0
  378. /package/dist/client/assets/{cytoscape.esm-BbbuX1pV.js → cytoscape.esm-DBDRhUia.js} +0 -0
  379. /package/dist/client/assets/{d-D3kOh3JF.js → d-D9pnu4Cr.js} +0 -0
  380. /package/dist/client/assets/{defaultLocale-DTn6RiRA.js → defaultLocale-BWgun1yJ.js} +0 -0
  381. /package/dist/client/assets/{diff-CoamybWh.js → diff-z9q33Lo6.js} +0 -0
  382. /package/dist/client/assets/{drawio-room-D6352KkV.js → drawio-room-C592VDk7.js} +0 -0
  383. /package/dist/client/assets/{dtd-BjGQwMWL.js → dtd-BDizf_te.js} +0 -0
  384. /package/dist/client/assets/{dylan-B9W3X2GI.js → dylan-Bk__XCKW.js} +0 -0
  385. /package/dist/client/assets/{ebnf-d5D0otVn.js → ebnf-SzN4Kxtp.js} +0 -0
  386. /package/dist/client/assets/{ecl-C5Q_IBPt.js → ecl-5ulxiKbt.js} +0 -0
  387. /package/dist/client/assets/{eiffel-BQA_6I3b.js → eiffel-Bhoaqbb6.js} +0 -0
  388. /package/dist/client/assets/{elm-unPS17vB.js → elm-C3je846J.js} +0 -0
  389. /package/dist/client/assets/{erlang-R8nOsUTx.js → erlang-Cgk9SIAz.js} +0 -0
  390. /package/dist/client/assets/{excalidraw-mermaid-stub-BJq3n7pR.js → excalidraw-mermaid-stub-B_2dv3Ll.js} +0 -0
  391. /package/dist/client/assets/{fcl-CVAfW9wK.js → fcl-dvkZwp9p.js} +0 -0
  392. /package/dist/client/assets/{forth-DHbsK8X8.js → forth-DmfSa3jN.js} +0 -0
  393. /package/dist/client/assets/{fortran-4jMwxW9-.js → fortran-BsZAiNnN.js} +0 -0
  394. /package/dist/client/assets/{gas-zC_XGrQT.js → gas-DBpKE9ut.js} +0 -0
  395. /package/dist/client/assets/{gherkin-CPBQou3u.js → gherkin-CceEbBs7.js} +0 -0
  396. /package/dist/client/assets/{groovy-Cqopym0q.js → groovy-CxJnDvES.js} +0 -0
  397. /package/dist/client/assets/{haskell-imzbNPgF.js → haskell-CUSb34Xy.js} +0 -0
  398. /package/dist/client/assets/{haxe-Doh225Ku.js → haxe-6EHO_h-N.js} +0 -0
  399. /package/dist/client/assets/{http-j4R5uEso.js → http-C3qcBpvG.js} +0 -0
  400. /package/dist/client/assets/{idl-l9d1__Hj.js → idl-C95wIO2I.js} +0 -0
  401. /package/dist/client/assets/{image-blob-reduce.esm-CQfEe3_g.js → image-blob-reduce.esm-BaW4gpT9.js} +0 -0
  402. /package/dist/client/assets/{init-207s1ipc.js → init-Bjj5fg68.js} +0 -0
  403. /package/dist/client/assets/{isArrayLikeObject-ZCMZRndo.js → isArrayLikeObject-Cmt1CYnI.js} +0 -0
  404. /package/dist/client/assets/{javascript-9dQYqEHJ.js → javascript-aWB87b1w.js} +0 -0
  405. /package/dist/client/assets/{julia-ByGjwiLn.js → julia-DF9PPAXG.js} +0 -0
  406. /package/dist/client/assets/{katex-XOVNa2d9.js → katex-BPsFnA3D.js} +0 -0
  407. /package/dist/client/assets/{livescript-B8l2m7xO.js → livescript-CnOyWwUY.js} +0 -0
  408. /package/dist/client/assets/{lua-DrfAKnQQ.js → lua-a0rEq19C.js} +0 -0
  409. /package/dist/client/assets/{math-BlD6rf4Z.js → math-BaavbII8.js} +0 -0
  410. /package/dist/client/assets/{mathematica-DYk_2Ik_.js → mathematica-CKUq0Ojc.js} +0 -0
  411. /package/dist/client/assets/{mbox-BOzVHzVt.js → mbox-a-u2PLog.js} +0 -0
  412. /package/dist/client/assets/{mirc-DStbUCmv.js → mirc-BOd43sOX.js} +0 -0
  413. /package/dist/client/assets/{mllike-BmhQglqS.js → mllike-fHruGivh.js} +0 -0
  414. /package/dist/client/assets/{modelica-ZElxtbqD.js → modelica-B0NJqf1C.js} +0 -0
  415. /package/dist/client/assets/{mscgen-f-YxHPr0.js → mscgen-DJZ33SrF.js} +0 -0
  416. /package/dist/client/assets/{mumps-B79RJJhR.js → mumps-DvMvHTxU.js} +0 -0
  417. /package/dist/client/assets/{nginx-c--axfuP.js → nginx-BVAs8laz.js} +0 -0
  418. /package/dist/client/assets/{ntriples-CgD4YZZC.js → ntriples-DrdyAZU1.js} +0 -0
  419. /package/dist/client/assets/{octave-BQk-bCrp.js → octave-_YqJ0g7E.js} +0 -0
  420. /package/dist/client/assets/{oz-DPCSPrx5.js → oz-k7T3LoMr.js} +0 -0
  421. /package/dist/client/assets/{pascal-C1iGzZ53.js → pascal-CftsTvte.js} +0 -0
  422. /package/dist/client/assets/{path-CDSE7Nw0.js → path-BUmMWM1-.js} +0 -0
  423. /package/dist/client/assets/{perl-DQ3L8ffg.js → perl-CbsLFc7A.js} +0 -0
  424. /package/dist/client/assets/{pig-B4S8acys.js → pig-C-jTwMS-.js} +0 -0
  425. /package/dist/client/assets/{powershell-BhSVdaeY.js → powershell-DqXLgSHX.js} +0 -0
  426. /package/dist/client/assets/{preload-helper-I1wKxk_B.js → preload-helper-Bo9GmnuQ.js} +0 -0
  427. /package/dist/client/assets/{properties-B2nfdtxE.js → properties-05jaw55P.js} +0 -0
  428. /package/dist/client/assets/{protobuf-BFW_iwVN.js → protobuf-DThTsZQN.js} +0 -0
  429. /package/dist/client/assets/{puppet-C1-CkyhQ.js → puppet-DuHxMpoj.js} +0 -0
  430. /package/dist/client/assets/{python-CYXPDD4I.js → python-BiE2VHJI.js} +0 -0
  431. /package/dist/client/assets/{q-Bub5Xmxm.js → q-DH46YfNw.js} +0 -0
  432. /package/dist/client/assets/{r-C59ONZO2.js → r-DmEm46kJ.js} +0 -0
  433. /package/dist/client/assets/{rough.esm-xhKrnp4d.js → rough.esm-jZQkcmER.js} +0 -0
  434. /package/dist/client/assets/{roundRect-CTz-kxJH.js → roundRect-CI6UmGg6.js} +0 -0
  435. /package/dist/client/assets/{rpm-DiM-R-wd.js → rpm-DILIIbRB.js} +0 -0
  436. /package/dist/client/assets/{ruby-DTqG95KX.js → ruby-2LcnHEMS.js} +0 -0
  437. /package/dist/client/assets/{runtime-config-loader-DwWsKc1-.js → runtime-config-loader-_D2KZKn-.js} +0 -0
  438. /package/dist/client/assets/{sas-BjdhmGHX.js → sas-Bn81MKuB.js} +0 -0
  439. /package/dist/client/assets/{scheme-CWNdoI17.js → scheme-B8kPNbgd.js} +0 -0
  440. /package/dist/client/assets/{shell-iaorleRB.js → shell-CGj6v8kb.js} +0 -0
  441. /package/dist/client/assets/{sieve-D8m9Etmd.js → sieve-CfVNFN1K.js} +0 -0
  442. /package/dist/client/assets/{simple-mode-kdHrpFjq.js → simple-mode-_FSHdiXs.js} +0 -0
  443. /package/dist/client/assets/{smalltalk-28WS1mUj.js → smalltalk-BpIFyCPt.js} +0 -0
  444. /package/dist/client/assets/{solr-x8qQ6eAP.js → solr-B7iFaetn.js} +0 -0
  445. /package/dist/client/assets/{sparql-BvLmi7B6.js → sparql-COhgMTFK.js} +0 -0
  446. /package/dist/client/assets/{spreadsheet-BuqSwScP.js → spreadsheet-BzuffEeg.js} +0 -0
  447. /package/dist/client/assets/{sql-B8tBavZM.js → sql-13lT5zDl.js} +0 -0
  448. /package/dist/client/assets/{stex-Bx4bLPxI.js → stex-BRSfZZYG.js} +0 -0
  449. /package/dist/client/assets/{stylus-CMEhEjuV.js → stylus-fFo0QRk_.js} +0 -0
  450. /package/dist/client/assets/{swift-wY9II8hY.js → swift-wb5gyb6a.js} +0 -0
  451. /package/dist/client/assets/{tcl-BGywDEsi.js → tcl-BJA7GgWY.js} +0 -0
  452. /package/dist/client/assets/{textile-K_mvsehZ.js → textile-BQjiYu-x.js} +0 -0
  453. /package/dist/client/assets/{tiddlywiki-BrpeQ34q.js → tiddlywiki-D2vUXB6n.js} +0 -0
  454. /package/dist/client/assets/{tiki-z2eQQPgI.js → tiki-BFhpdznG.js} +0 -0
  455. /package/dist/client/assets/{toml-Dcu7S7XA.js → toml-DN06iQUw.js} +0 -0
  456. /package/dist/client/assets/{troff-Djlumm7T.js → troff-DuQfjhPH.js} +0 -0
  457. /package/dist/client/assets/{ttcn-XqU6tthJ.js → ttcn-BCTy6d50.js} +0 -0
  458. /package/dist/client/assets/{ttcn-cfg-BzD0wr3i.js → ttcn-cfg-BYnZQqGa.js} +0 -0
  459. /package/dist/client/assets/{turtle-DcjXkx6M.js → turtle-BvN-Me9x.js} +0 -0
  460. /package/dist/client/assets/{vault-utils-BM4i-Ofm.js → vault-utils-BW53lKl1.js} +0 -0
  461. /package/dist/client/assets/{vb-DV4y2QrD.js → vb-DYk3wW9u.js} +0 -0
  462. /package/dist/client/assets/{vbscript-BS8DsYJ_.js → vbscript-BKI61VS6.js} +0 -0
  463. /package/dist/client/assets/{velocity-CS6Ly2yV.js → velocity-BrtitHHA.js} +0 -0
  464. /package/dist/client/assets/{verilog-DbEC7ose.js → verilog-CjUx3yiL.js} +0 -0
  465. /package/dist/client/assets/{vhdl-DBLrW9bF.js → vhdl-CPWwYF4V.js} +0 -0
  466. /package/dist/client/assets/{webidl-CnE8KY-y.js → webidl-PiVOzma8.js} +0 -0
  467. /package/dist/client/assets/{xquery--K5Za5EW.js → xquery-CiTzM_oK.js} +0 -0
  468. /package/dist/client/assets/{yacas-ClQfYBmX.js → yacas-4QS9CntY.js} +0 -0
  469. /package/dist/client/assets/{z80-Dr2oR3X2.js → z80-BxidrTKR.js} +0 -0
@@ -5,10 +5,38 @@ import {
5
5
  isPlantUmlFilePath,
6
6
  } from '../../../domain/file-kind.js';
7
7
  import { createWorkspaceChange } from '../../../domain/workspace-change.js';
8
+ import { basename } from 'node:path';
8
9
  import { createRequestError, getRequestErrorStatusCode } from './http-errors.js';
9
- import { jsonResponse } from './http-response.js';
10
+ import { jsonResponse, sendResponse } from './http-response.js';
10
11
  import { parseJsonBody, readBinaryRequestBody } from './request-body.js';
11
12
 
13
+ const DOCX_EXPORT_REQUEST_LIMIT_BYTES = 33_554_432;
14
+ const DOCX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
15
+
16
+ function encodeContentDispositionFilename(fileName) {
17
+ return encodeURIComponent(String(fileName ?? ''))
18
+ .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
19
+ }
20
+
21
+ function createSafeAsciiFilename(fileName) {
22
+ const fallback = String(fileName ?? '')
23
+ .replace(/[^\x20-\x7E]+/g, '_')
24
+ .replace(/["\\]/g, '_')
25
+ .trim();
26
+ return fallback || 'document';
27
+ }
28
+
29
+ function createDocxDownloadHeaders(filePath) {
30
+ const fileName = basename(String(filePath ?? 'document')).replace(/\.[^.]+$/u, '') || 'document';
31
+ const exportFileName = `${fileName}.docx`;
32
+ return {
33
+ 'Cache-Control': 'no-store',
34
+ 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(exportFileName)}"; filename*=UTF-8''${encodeContentDispositionFilename(exportFileName)}`,
35
+ 'Content-Type': DOCX_MIME_TYPE,
36
+ 'X-Content-Type-Options': 'nosniff',
37
+ };
38
+ }
39
+
12
40
  function decodeHeaderMetadata(value) {
13
41
  const normalized = String(value ?? '').trim();
14
42
  if (!normalized) {
@@ -64,10 +92,40 @@ function getDirectoryDeleteStatusCode(message = '') {
64
92
  }
65
93
 
66
94
  export function createVaultApiCommandHandler({
95
+ docxExporter = null,
67
96
  vaultFileStore,
68
97
  workspaceMutationCoordinator = null,
69
98
  }) {
70
99
  return async function handleVaultApiCommand(req, res, requestUrl) {
100
+ if (requestUrl.pathname === '/api/export/docx' && req.method === 'POST') {
101
+ try {
102
+ const body = await parseJsonBody(req, DOCX_EXPORT_REQUEST_LIMIT_BYTES);
103
+ if (!body?.filePath || typeof body?.html !== 'string') {
104
+ jsonResponse(req, res, 400, { error: 'Missing filePath or html' });
105
+ return true;
106
+ }
107
+
108
+ if (!docxExporter?.render) {
109
+ jsonResponse(req, res, 503, { error: 'DOCX export is unavailable' });
110
+ return true;
111
+ }
112
+
113
+ const docxBuffer = await docxExporter.render({
114
+ html: body.html,
115
+ title: body.title || '',
116
+ });
117
+
118
+ sendResponse(req, res, {
119
+ body: docxBuffer,
120
+ headers: createDocxDownloadHeaders(body.filePath),
121
+ statusCode: 200,
122
+ });
123
+ } catch (error) {
124
+ handleVaultError(req, res, error, '[api] Failed to export DOCX:', 'Failed to export DOCX');
125
+ }
126
+ return true;
127
+ }
128
+
71
129
  if (requestUrl.pathname === '/api/file' && req.method === 'PUT') {
72
130
  try {
73
131
  const body = await parseJsonBody(req);
@@ -4,6 +4,7 @@ import { createVaultApiQueryHandler } from './create-vault-api-query-handler.js'
4
4
 
5
5
  export function createVaultApiHandler({
6
6
  backlinkIndex,
7
+ docxExporter = null,
7
8
  plantUmlRenderer = null,
8
9
  roomRegistry = null,
9
10
  vaultFileStore,
@@ -16,6 +17,7 @@ export function createVaultApiHandler({
16
17
  });
17
18
  const handleVaultApiCommand = createVaultApiCommandHandler({
18
19
  backlinkIndex,
20
+ docxExporter,
19
21
  roomRegistry,
20
22
  vaultFileStore,
21
23
  workspaceMutationCoordinator,
@@ -54,8 +54,8 @@ export async function readBinaryRequestBody(req, maxBytes = REQUEST_BODY_LIMIT_B
54
54
  return readRequestBuffer(req, maxBytes);
55
55
  }
56
56
 
57
- export async function parseJsonBody(req) {
58
- const rawBody = await readRequestBody(req);
57
+ export async function parseJsonBody(req, maxBytes = REQUEST_BODY_LIMIT_BYTES) {
58
+ const rawBody = await readRequestBody(req, maxBytes);
59
59
 
60
60
  try {
61
61
  return JSON.parse(rawBody);
@@ -240,7 +240,7 @@ export class PullBackupStore {
240
240
  }
241
241
 
242
242
  async listBackups() {
243
- let entries = [];
243
+ let entries;
244
244
  try {
245
245
  entries = await readdir(this.getStorageRoot(), { withFileTypes: true });
246
246
  } catch (error) {
@@ -7,6 +7,7 @@ import {
7
7
  isMarkdownFilePath,
8
8
  isVaultFilePath,
9
9
  } from '../../../domain/file-kind.js';
10
+ import { mapWithConcurrency } from '../../shared/async-utils.js';
10
11
  import { getVaultContentAdapter } from './vault-content-adapter.js';
11
12
  import {
12
13
  INVALID_VAULT_FILE_PATH_ERROR,
@@ -36,6 +37,7 @@ const MIME_TYPE_TO_IMAGE_EXTENSION = Object.freeze({
36
37
  'image/svg+xml': '.svg',
37
38
  'image/webp': '.webp',
38
39
  });
40
+ const WORKSPACE_SCAN_CONCURRENCY = 8;
39
41
 
40
42
  function createTransactionalPath(targetPath, label) {
41
43
  return `${targetPath}.collabmd-${label}-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2, 10)}`;
@@ -74,6 +76,16 @@ function createWorkspaceEntry(relativePath, type) {
74
76
  };
75
77
  }
76
78
 
79
+ function createWorkspaceMetadata(pathValue, type, info) {
80
+ return {
81
+ inode: Number(info.ino || 0),
82
+ mtimeMs: Number(info.mtimeMs || 0),
83
+ path: pathValue,
84
+ size: type === 'directory' ? 0 : Number(info.size || 0),
85
+ type,
86
+ };
87
+ }
88
+
77
89
  function replacePathPrefix(pathValue, oldPrefix, newPrefix) {
78
90
  if (pathValue === oldPrefix) {
79
91
  return newPrefix;
@@ -94,6 +106,14 @@ function sortWorkspacePaths(paths = [], direction = 'asc') {
94
106
  });
95
107
  }
96
108
 
109
+ function sortDirectoryEntries(entries = []) {
110
+ return [...entries].sort((left, right) => {
111
+ if (left.isDirectory() && !right.isDirectory()) return -1;
112
+ if (!left.isDirectory() && right.isDirectory()) return 1;
113
+ return left.name.localeCompare(right.name, undefined, { sensitivity: 'base' });
114
+ });
115
+ }
116
+
97
117
  async function cleanupPaths(paths = []) {
98
118
  await Promise.allSettled(paths.filter(Boolean).map((pathValue) => rm(pathValue, { force: true })));
99
119
  }
@@ -398,8 +418,8 @@ export class VaultFileStore {
398
418
  const timestamp = createAttachmentTimestamp(now);
399
419
  const baseFileName = `${attachmentStem}-${timestamp}`;
400
420
  let collisionIndex = 0;
401
- let storedPath = '';
402
- let absolutePath = '';
421
+ let storedPath;
422
+ let absolutePath;
403
423
 
404
424
  do {
405
425
  const suffix = collisionIndex > 0 ? `-${collisionIndex + 1}` : '';
@@ -765,7 +785,8 @@ export class VaultFileStore {
765
785
  }
766
786
 
767
787
  async countVaultFiles() {
768
- return this.countFilesInDir(this.vaultDir);
788
+ const snapshot = await this.scanWorkspaceState();
789
+ return snapshot.vaultFileCount;
769
790
  }
770
791
 
771
792
  async reconcileSidecars({
@@ -838,6 +859,8 @@ export class VaultFileStore {
838
859
  async scanWorkspaceState() {
839
860
  const entries = new Map();
840
861
  const metadata = new Map();
862
+ const markdownPaths = [];
863
+ let vaultFileCount = 0;
841
864
 
842
865
  const visitDirectory = async (dirPath) => {
843
866
  let dirEntries;
@@ -847,64 +870,84 @@ export class VaultFileStore {
847
870
  return;
848
871
  }
849
872
 
850
- const sorted = dirEntries.sort((left, right) => {
851
- if (left.isDirectory() && !right.isDirectory()) return -1;
852
- if (!left.isDirectory() && right.isDirectory()) return 1;
853
- return left.name.localeCompare(right.name, undefined, { sensitivity: 'base' });
854
- });
873
+ const sorted = sortDirectoryEntries(dirEntries);
855
874
 
856
- for (const entry of sorted) {
875
+ await mapWithConcurrency(sorted, WORKSPACE_SCAN_CONCURRENCY, async (entry) => {
857
876
  if (isIgnoredVaultEntry(entry.name)) {
858
- continue;
877
+ return;
859
878
  }
860
879
 
861
880
  const fullPath = join(dirPath, entry.name);
862
881
  const relativePath = toVaultRelativePath(this.vaultDir, fullPath).replace(/\\/g, '/');
882
+ const direntKind = entry.isDirectory()
883
+ ? 'directory'
884
+ : (entry.isFile() ? 'file' : null);
863
885
 
864
- if (entry.isDirectory()) {
886
+ if (direntKind === 'directory') {
865
887
  entries.set(relativePath, createWorkspaceEntry(relativePath, 'directory'));
866
888
  try {
867
889
  const info = await stat(fullPath);
868
- metadata.set(relativePath, {
869
- inode: Number(info.ino || 0),
870
- mtimeMs: Number(info.mtimeMs || 0),
871
- path: relativePath,
872
- size: 0,
873
- type: 'directory',
874
- });
890
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'directory', info));
875
891
  } catch {
876
892
  // Ignore transient directories that disappear during scans.
877
893
  }
878
894
  await visitDirectory(fullPath);
879
- continue;
895
+ return;
880
896
  }
881
897
 
882
- if (!isVaultFilePath(entry.name)) {
883
- continue;
898
+ if (direntKind === 'file') {
899
+ if (!isVaultFilePath(entry.name)) {
900
+ return;
901
+ }
902
+
903
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
904
+ vaultFileCount += 1;
905
+ if (isMarkdownFilePath(relativePath)) {
906
+ markdownPaths.push(relativePath);
907
+ }
908
+ try {
909
+ const info = await stat(fullPath);
910
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'file', info));
911
+ } catch {
912
+ // Ignore transient files that disappear during scans.
913
+ }
914
+ return;
884
915
  }
885
916
 
886
- entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
887
917
  try {
888
918
  const info = await stat(fullPath);
889
- metadata.set(relativePath, {
890
- inode: Number(info.ino || 0),
891
- mtimeMs: Number(info.mtimeMs || 0),
892
- path: relativePath,
893
- size: Number(info.size || 0),
894
- type: 'file',
895
- });
919
+ if (info.isDirectory()) {
920
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'directory'));
921
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'directory', info));
922
+ await visitDirectory(fullPath);
923
+ return;
924
+ }
925
+
926
+ if (!info.isFile() || !isVaultFilePath(entry.name)) {
927
+ return;
928
+ }
929
+
930
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
931
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'file', info));
932
+ vaultFileCount += 1;
933
+ if (isMarkdownFilePath(relativePath)) {
934
+ markdownPaths.push(relativePath);
935
+ }
896
936
  } catch {
897
- // Ignore transient files that disappear during scans.
937
+ // Ignore transient entries that disappear during scans.
898
938
  }
899
- }
939
+ });
900
940
  };
901
941
 
902
942
  await visitDirectory(this.vaultDir);
943
+ markdownPaths.sort((left, right) => left.localeCompare(right, undefined, { sensitivity: 'base' }));
903
944
 
904
945
  return {
905
946
  entries,
906
947
  metadata,
948
+ markdownPaths,
907
949
  scannedAt: Date.now(),
950
+ vaultFileCount,
908
951
  };
909
952
  }
910
953
  }
@@ -4,6 +4,7 @@ import { basename, dirname, join } from 'path';
4
4
 
5
5
  import { createWorkspaceChange } from '../../../domain/workspace-change.js';
6
6
  import { getVaultTreeNodeType, isVaultFilePath } from '../../../domain/file-kind.js';
7
+ import { logPerfEvent } from '../../config/perf-logging.js';
7
8
  import {
8
9
  isIgnoredVaultEntry,
9
10
  sanitizeVaultPath,
@@ -194,10 +195,12 @@ export class FileSystemSyncService {
194
195
  constructor({
195
196
  debounceMs = 180,
196
197
  mutationCoordinator,
198
+ perfLoggingEnabled = false,
197
199
  vaultFileStore,
198
200
  }) {
199
201
  this.debounceMs = debounceMs;
200
202
  this.mutationCoordinator = mutationCoordinator;
203
+ this.perfLoggingEnabled = perfLoggingEnabled;
201
204
  this.vaultFileStore = vaultFileStore;
202
205
  this.watcher = null;
203
206
  this.debounceTimer = null;
@@ -208,8 +211,8 @@ export class FileSystemSyncService {
208
211
  this.suspendWatchEventsUntil = 0;
209
212
  }
210
213
 
211
- async start() {
212
- this.lastState = this.mutationCoordinator.workspaceState ?? await this.vaultFileStore.scanWorkspaceState();
214
+ async start({ snapshot = null } = {}) {
215
+ this.lastState = snapshot ?? this.mutationCoordinator.workspaceState ?? await this.vaultFileStore.scanWorkspaceState();
213
216
  this.watcher = watch(this.vaultFileStore.vaultDir, { recursive: true }, (eventType, filename) => {
214
217
  this.handleWatchEvent(eventType, filename);
215
218
  });
@@ -253,7 +256,7 @@ export class FileSystemSyncService {
253
256
  this.debounceTimer.unref?.();
254
257
  }
255
258
 
256
- async resetForExternalStateChange() {
259
+ async resetForExternalStateChange({ snapshot = null } = {}) {
257
260
  this.suspendWatchEventsUntil = Math.max(this.suspendWatchEventsUntil, Date.now() + 750);
258
261
  clearTimeout(this.debounceTimer);
259
262
  this.debounceTimer = null;
@@ -268,7 +271,7 @@ export class FileSystemSyncService {
268
271
 
269
272
  this.pendingEventTypesByPath.clear();
270
273
  this.forceFullScan = false;
271
- this.lastState = this.mutationCoordinator.workspaceState ?? await this.vaultFileStore.scanWorkspaceState();
274
+ this.lastState = snapshot ?? this.mutationCoordinator.workspaceState ?? await this.vaultFileStore.scanWorkspaceState();
272
275
  }
273
276
 
274
277
  async readWorkspacePathSnapshot(pathValue) {
@@ -382,15 +385,23 @@ export class FileSystemSyncService {
382
385
  }
383
386
 
384
387
  async buildIncrementalResult() {
385
- if (this.forceFullScan || this.pendingEventTypesByPath.size === 0 || !this.lastState) {
386
- return null;
388
+ if (this.forceFullScan) {
389
+ return { fallbackReason: 'forced-full-scan', incrementalResult: null };
390
+ }
391
+
392
+ if (this.pendingEventTypesByPath.size === 0) {
393
+ return { fallbackReason: 'no-pending-paths', incrementalResult: null };
394
+ }
395
+
396
+ if (!this.lastState) {
397
+ return { fallbackReason: 'missing-last-state', incrementalResult: null };
387
398
  }
388
399
 
389
400
  const pendingPaths = Array.from(this.pendingEventTypesByPath.keys())
390
401
  .filter(Boolean)
391
402
  .sort((left, right) => left.localeCompare(right, undefined, { sensitivity: 'base' }));
392
403
  if (pendingPaths.length === 0 || pendingPaths.length > MAX_INCREMENTAL_PENDING_PATHS) {
393
- return null;
404
+ return { fallbackReason: 'too-many-pending-paths', incrementalResult: null };
394
405
  }
395
406
 
396
407
  const nextEntries = new Map(this.lastState.entries);
@@ -411,12 +422,12 @@ export class FileSystemSyncService {
411
422
 
412
423
  const snapshot = await this.readWorkspacePathSnapshot(pathValue);
413
424
  if (!snapshot) {
414
- return null;
425
+ return { fallbackReason: 'snapshot-unavailable', incrementalResult: null };
415
426
  }
416
427
 
417
428
  if (snapshot.entries.size > 0) {
418
429
  if (!(await this.ensureAncestorDirectories(nextEntries, nextMetadata, pathValue))) {
419
- return null;
430
+ return { fallbackReason: 'ancestor-missing', incrementalResult: null };
420
431
  }
421
432
  }
422
433
 
@@ -436,8 +447,11 @@ export class FileSystemSyncService {
436
447
  const workspaceChange = detectWorkspaceChange(this.lastState, nextState);
437
448
 
438
449
  return {
439
- nextState,
440
- workspaceChange,
450
+ fallbackReason: '',
451
+ incrementalResult: {
452
+ nextState,
453
+ workspaceChange,
454
+ },
441
455
  };
442
456
  }
443
457
 
@@ -449,7 +463,9 @@ export class FileSystemSyncService {
449
463
  }
450
464
 
451
465
  async flush() {
452
- const incrementalResult = await this.buildIncrementalResult();
466
+ const startedAt = Date.now();
467
+ const pendingPathCount = this.pendingEventTypesByPath.size;
468
+ const { fallbackReason, incrementalResult } = await this.buildIncrementalResult();
453
469
  this.consumePendingEvents();
454
470
 
455
471
  const previousWorkspaceState = this.mutationCoordinator.workspaceState;
@@ -463,6 +479,15 @@ export class FileSystemSyncService {
463
479
  previousState: previousWorkspaceState,
464
480
  });
465
481
  this.mutationCoordinator.replaceWorkspaceState(nextState);
482
+ logPerfEvent(this.perfLoggingEnabled, 'filesystem-sync', {
483
+ changedPathCount: workspaceChange.changedPaths?.length ?? 0,
484
+ deletedPathCount: workspaceChange.deletedPaths?.length ?? 0,
485
+ durationMs: Date.now() - startedAt,
486
+ fallbackReason,
487
+ mode: incrementalResult ? 'incremental' : 'full-scan',
488
+ pendingPathCount,
489
+ renamedPathCount: workspaceChange.renamedPaths?.length ?? 0,
490
+ });
466
491
  return;
467
492
  }
468
493
 
@@ -472,6 +497,15 @@ export class FileSystemSyncService {
472
497
  nextState,
473
498
  workspaceChange: filteredChange,
474
499
  });
500
+ logPerfEvent(this.perfLoggingEnabled, 'filesystem-sync', {
501
+ changedPathCount: filteredChange.changedPaths?.length ?? 0,
502
+ deletedPathCount: filteredChange.deletedPaths?.length ?? 0,
503
+ durationMs: Date.now() - startedAt,
504
+ fallbackReason,
505
+ mode: incrementalResult ? 'incremental' : 'full-scan',
506
+ pendingPathCount,
507
+ renamedPathCount: filteredChange.renamedPaths?.length ?? 0,
508
+ });
475
509
  }
476
510
 
477
511
  async close() {
@@ -26,6 +26,31 @@ function countWorkspacePaths(workspaceChange = {}) {
26
26
  );
27
27
  }
28
28
 
29
+ function countBacklinkAffectedPaths(workspaceChange = {}) {
30
+ const affectedPaths = new Set();
31
+
32
+ (workspaceChange.changedPaths ?? []).forEach((pathValue) => {
33
+ if (supportsBacklinksForFilePath(pathValue)) {
34
+ affectedPaths.add(pathValue);
35
+ }
36
+ });
37
+ (workspaceChange.deletedPaths ?? []).forEach((pathValue) => {
38
+ if (supportsBacklinksForFilePath(pathValue)) {
39
+ affectedPaths.add(pathValue);
40
+ }
41
+ });
42
+ (workspaceChange.renamedPaths ?? []).forEach((entry) => {
43
+ if (supportsBacklinksForFilePath(entry?.oldPath)) {
44
+ affectedPaths.add(entry.oldPath);
45
+ }
46
+ if (supportsBacklinksForFilePath(entry?.newPath)) {
47
+ affectedPaths.add(entry.newPath);
48
+ }
49
+ });
50
+
51
+ return affectedPaths.size;
52
+ }
53
+
29
54
  function normalizePaths(paths = []) {
30
55
  return Array.from(new Set((paths ?? []).filter(Boolean)));
31
56
  }
@@ -386,13 +411,13 @@ export class WorkspaceMutationCoordinator {
386
411
  });
387
412
  }
388
413
 
389
- async initialize() {
390
- const snapshot = await this.vaultFileStore.scanWorkspaceState();
391
- this.replaceWorkspaceState(snapshot);
392
- this.getWorkspaceRoom()?.replaceWorkspaceEntries(snapshot.entries, {
393
- generatedAt: snapshot.scannedAt,
414
+ async initialize({ snapshot = null } = {}) {
415
+ const effectiveSnapshot = snapshot ?? await this.vaultFileStore.scanWorkspaceState();
416
+ this.replaceWorkspaceState(effectiveSnapshot);
417
+ this.getWorkspaceRoom()?.replaceWorkspaceEntries(effectiveSnapshot.entries, {
418
+ generatedAt: effectiveSnapshot.scannedAt,
394
419
  });
395
- return snapshot;
420
+ return effectiveSnapshot;
396
421
  }
397
422
 
398
423
  markManagedPaths(paths = [], { durationMs = this.managedWriteWindowMs } = {}) {
@@ -532,7 +557,7 @@ export class WorkspaceMutationCoordinator {
532
557
  const previousEntries = this.workspaceState?.entries ?? new Map();
533
558
  if (
534
559
  forceRebuild
535
- || countWorkspacePaths(workspaceChange) > 25
560
+ || countBacklinkAffectedPaths(workspaceChange) > 25
536
561
  ) {
537
562
  this.backlinkIndex.scheduleBuild?.();
538
563
  return;
@@ -0,0 +1,25 @@
1
+ export async function mapWithConcurrency(values, concurrency, iteratee) {
2
+ const items = Array.from(values ?? []);
3
+ const limit = Math.max(1, Number(concurrency) || 1);
4
+
5
+ if (items.length === 0) {
6
+ return [];
7
+ }
8
+
9
+ const results = new Array(items.length);
10
+ let nextIndex = 0;
11
+
12
+ async function worker() {
13
+ while (nextIndex < items.length) {
14
+ const currentIndex = nextIndex;
15
+ nextIndex += 1;
16
+ results[currentIndex] = await iteratee(items[currentIndex], currentIndex);
17
+ }
18
+ }
19
+
20
+ await Promise.all(
21
+ Array.from({ length: Math.min(limit, items.length) }, () => worker()),
22
+ );
23
+
24
+ return results;
25
+ }
@@ -1 +0,0 @@
1
- import"./chunk-XZSTWKYB-DZzfqgVn.js";import{n as e}from"./chunk-R5LLSJPH-CZzZlfdI.js";export{e as createArchitectureServices};