collabmd 0.1.29 → 0.1.31

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 (445) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-9k1Shd4H.js → CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-B6kIfhzj.js → _basePickBy-Dv0sK1l7.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-Bbn0_sHS.js → _baseUniq-DKYX57ji.js} +1 -1
  5. package/dist/client/assets/{ar-SA-NXDWD63E-BWO5oYxe.js → ar-SA-NXDWD63E-WivLHHDW.js} +1 -1
  6. package/dist/client/assets/{arc-BIqum3oD.js → arc-DrfYGhWk.js} +1 -1
  7. package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +1 -0
  8. package/dist/client/assets/architectureDiagram-2XIMDMQ5-kYbOThe4.js +36 -0
  9. package/dist/client/assets/{az-AZ-MXSORGZV-Cfw6Z5oY.js → az-AZ-MXSORGZV-DOdq1TKC.js} +1 -1
  10. package/dist/client/assets/base-CaIEJUF9.css +1 -0
  11. package/dist/client/assets/{bg-BG-O6MV2KSF-CQmG3YpD.js → bg-BG-O6MV2KSF-CYucKuDS.js} +1 -1
  12. package/dist/client/assets/{blockDiagram-WCTKOSBZ-0rR9ivwb.js → blockDiagram-WCTKOSBZ-GIgTqnhk.js} +1 -1
  13. package/dist/client/assets/{bn-IN-MMW2ORAC-DZKVshfk.js → bn-BD-T2VJNT7N-2OKWLCYa.js} +1 -1
  14. package/dist/client/assets/{bn-BD-T2VJNT7N-C4S6DZ6o.js → bn-IN-MMW2ORAC-DYr8kqNL.js} +1 -1
  15. package/dist/client/assets/{c4Diagram-IC4MRINW-DHwxcDlQ.js → c4Diagram-IC4MRINW-CkHO1i_L.js} +1 -1
  16. package/dist/client/assets/{ca-ES-MKBCGNOG-Do3aMgyu.js → ca-ES-MKBCGNOG-B9Aeb43I.js} +1 -1
  17. package/dist/client/assets/channel-CgsU9TSN.js +1 -0
  18. package/dist/client/assets/{chunk-4BX2VUAB-BqEY6cCE.js → chunk-4BX2VUAB-2e7V-uuE.js} +1 -1
  19. package/dist/client/assets/{chunk-55IACEB6-039iVf6v.js → chunk-55IACEB6-CpncB3ru.js} +1 -1
  20. package/dist/client/assets/{chunk-7E7YKBS2-BreG0gYL.js → chunk-7E7YKBS2-TdU92i9i.js} +1 -1
  21. package/dist/client/assets/{chunk-7R4GIKGN-BMrp52Pk.js → chunk-7R4GIKGN-mqd2GwMg.js} +2 -2
  22. package/dist/client/assets/{chunk-ETSVUAFD-CN-gPl_j.js → chunk-AXZTUZBK-DuMiJYO9.js} +1 -1
  23. package/dist/client/assets/{chunk-C72U2L5F-BLB26v5d.js → chunk-C72U2L5F-CJKQWBtz.js} +1 -1
  24. package/dist/client/assets/{chunk-EGIJ26TM-fG-0Yh0k.js → chunk-EGIJ26TM-C4nq20om.js} +1 -1
  25. package/dist/client/assets/{chunk-FMBD7UC4-EWK5Pt4D.js → chunk-FMBD7UC4-CMahlBa_.js} +1 -1
  26. package/dist/client/assets/{chunk-GEFDOKGD-DYHmaq-c.js → chunk-GEFDOKGD-Bs7FmFox.js} +1 -1
  27. package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +2 -0
  28. package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +1 -0
  29. package/dist/client/assets/{chunk-JSJVCQXG-B69YGtcQ.js → chunk-JSJVCQXG-DPQ9cPJt.js} +1 -1
  30. package/dist/client/assets/{chunk-KX2RTZJC-tuEC7hg1.js → chunk-KX2RTZJC-BTiOJb7N.js} +1 -1
  31. package/dist/client/assets/{chunk-KYZI473N-D4r5eMJZ.js → chunk-KYZI473N-CTSCuqRb.js} +1 -1
  32. package/dist/client/assets/{chunk-L3YUKLVL-CD9nJYL8.js → chunk-L3YUKLVL-CJZMBtKF.js} +1 -1
  33. package/dist/client/assets/{chunk-MX3YWQON-DqN0TF5Q.js → chunk-MX3YWQON-DQpSwRf6.js} +1 -1
  34. package/dist/client/assets/{chunk-NQ4KR5QH-BCjGNd0g.js → chunk-NQ4KR5QH-CMJKI6Oj.js} +1 -1
  35. package/dist/client/assets/chunk-NU2UP6EN-DlUENSHU.js +35 -0
  36. package/dist/client/assets/{chunk-O4XLMI2P-DaS3COAu.js → chunk-O4XLMI2P-CcVxZh41.js} +1 -1
  37. package/dist/client/assets/{chunk-OZEHJAEY-BaBXI-8x.js → chunk-OZEHJAEY-DjBZbgu0.js} +1 -1
  38. package/dist/client/assets/{chunk-PQ6SQG4A-BY9_Srs_.js → chunk-PQ6SQG4A-D1AbThjy.js} +1 -1
  39. package/dist/client/assets/{chunk-PU5JKC2W-t0zUh6E3.js → chunk-PU5JKC2W-D_6N6t8f.js} +1 -1
  40. package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +1 -0
  41. package/dist/client/assets/{chunk-R5LLSJPH-BjSMFnTi.js → chunk-R5LLSJPH-CkjKXM73.js} +1 -1
  42. package/dist/client/assets/{chunk-WL4C6EOR-OuH0lN6M.js → chunk-WL4C6EOR-axcuKSup.js} +1 -1
  43. package/dist/client/assets/{chunk-XIRO2GV7-2tirYN5A.js → chunk-XIRO2GV7-4wqVHjs_.js} +1 -1
  44. package/dist/client/assets/{chunk-XPW4576I-C0GpOUHf.js → chunk-XPW4576I-DJr4_4Yy.js} +1 -1
  45. package/dist/client/assets/{chunk-XZSTWKYB-DDkpyNVE.js → chunk-XZSTWKYB-C8Y_hIKZ.js} +1 -1
  46. package/dist/client/assets/{chunk-YBOYWFTD-CzyyfGQX.js → chunk-YBOYWFTD-CKg4ymFF.js} +1 -1
  47. package/dist/client/assets/{chunk-Z5NKEFVG-Dgem5v98.js → chunk-Z5NKEFVG-HOkYqaKa.js} +1 -1
  48. package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +1 -0
  49. package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +1 -0
  50. package/dist/client/assets/clone-Dgi8Z4IL.js +1 -0
  51. package/dist/client/assets/{cose-bilkent-S5V4N54A-jZzFUguD.js → cose-bilkent-S5V4N54A-DASO2hrk.js} +1 -1
  52. package/dist/client/assets/{cs-CZ-V77HGUP7-DmZRJ2UO.js → cs-CZ-V77HGUP7-BDg-F0CJ.js} +1 -1
  53. package/dist/client/assets/{da-DK-I5RFNTM4-CRIiLQ-G.js → da-DK-I5RFNTM4-wtSQ0Jxa.js} +1 -1
  54. package/dist/client/assets/{dagre-fvYjRtTE.js → dagre-CfB3Fw33.js} +1 -1
  55. package/dist/client/assets/dagre-KLK3FWXG-CC7tq2Ky.js +4 -0
  56. package/dist/client/assets/{de-DE-DTI4WUSC-MFge9MC3.js → de-CH-WLRDEVBV-C1swvmZy.js} +1 -1
  57. package/dist/client/assets/{de-CH-WLRDEVBV-k728UA4j.js → de-DE-DTI4WUSC-C0L6Nz8X.js} +1 -1
  58. package/dist/client/assets/diagram-E7M64L7V-CMt7BN5M.js +24 -0
  59. package/dist/client/assets/diagram-IFDJBPK2-BFMBUGpd.js +43 -0
  60. package/dist/client/assets/diagram-P4PSJMXO-CviA1xXr.js +24 -0
  61. package/dist/client/assets/dist-3bQB_we3.js +1 -0
  62. package/dist/client/assets/dist-3uAMa5w5.js +1 -0
  63. package/dist/client/assets/dist-8Igu3Ee_2.js +1 -0
  64. package/dist/client/assets/{dist-D9c0A4Uh.js → dist-B-02vKOA.js} +1 -1
  65. package/dist/client/assets/dist-B4uQVR_X.js +1 -0
  66. package/dist/client/assets/{dist-A0eSMIyy.js → dist-BLAlZer_.js} +1 -1
  67. package/dist/client/assets/dist-BU8uusJX.js +1 -0
  68. package/dist/client/assets/dist-BVB8rn7o.js +1 -0
  69. package/dist/client/assets/{dist-DveOCUUJ.js → dist-Bc2ND6i3.js} +1 -1
  70. package/dist/client/assets/{dist-Bay3vk5z.js → dist-BtnXjRx0.js} +1 -1
  71. package/dist/client/assets/{dist-CEYpWxod.js → dist-BzbYwa8m.js} +1 -1
  72. package/dist/client/assets/{dist-Ct1bmQnL.js → dist-BzpfHRaE.js} +1 -1
  73. package/dist/client/assets/{dist-BbKpzsTB.js → dist-CGV1S_as.js} +1 -1
  74. package/dist/client/assets/dist-CL-jjdvG.js +1 -0
  75. package/dist/client/assets/{dist-D0e6Qsad.js → dist-CXpKYW9s.js} +1 -1
  76. package/dist/client/assets/{dist-BchrxlnW.js → dist-CjII8VDS.js} +1 -1
  77. package/dist/client/assets/{dist-DnrO-JZd.js → dist-CxfohGIV.js} +1 -1
  78. package/dist/client/assets/{dist-CMHIjMVe.js → dist-D5QOYy7y.js} +1 -1
  79. package/dist/client/assets/{dist-CEtbxXlI.js → dist-DIi0uqLJ.js} +1 -1
  80. package/dist/client/assets/dist-DJ16N7ol.js +1 -0
  81. package/dist/client/assets/dist-DUvaQ-Bj.js +1 -0
  82. package/dist/client/assets/{dist-DnxPQ0-w.js → dist-DWJL3_bF.js} +6 -6
  83. package/dist/client/assets/dist-DsL7sqZR.js +1 -0
  84. package/dist/client/assets/{dist-DbhQ5ANS.js → dist-Dyt7n5Ui.js} +1 -1
  85. package/dist/client/assets/{dist-BOrlJDrR.js → dist-E_jPb93e.js} +1 -1
  86. package/dist/client/assets/{dist-D-gRgZ6e.js → dist-O1z0Ayg0.js} +1 -1
  87. package/dist/client/assets/dist-OQE68wIX.js +1 -0
  88. package/dist/client/assets/dist-k47-Io7D.js +1 -0
  89. package/dist/client/assets/{dist-Cdzvi8cf.js → dist-lDhnP-K1.js} +1 -1
  90. package/dist/client/assets/{dist-DS6mEQYy.js → dist-rMhng5DK.js} +1 -1
  91. package/dist/client/assets/{dockerfile-C0qQqxf9.js → dockerfile-D8_6_FRV.js} +1 -1
  92. package/dist/client/assets/{drawio-editor-CgbaOvpF.js → drawio-editor-B4sHHwWJ.js} +1 -1
  93. package/dist/client/assets/drawioEditor-DGpo2hcx.js +2 -0
  94. package/dist/client/assets/editor-session-BKHEYkbY.js +16 -0
  95. package/dist/client/assets/{el-GR-ZXDJ2OS4-Bbz93mrG.js → el-GR-ZXDJ2OS4-BH0saXds.js} +1 -1
  96. package/dist/client/assets/{embedded-editor-base-DXRHYz6R.css → embedded-editor-base-DgmRcsR8.css} +1 -1
  97. package/dist/client/assets/{en-CTDJDZ6K-BHbXrqU0.js → en-IQZW2TQM-CzlcEpq3.js} +1 -1
  98. package/dist/client/assets/{erDiagram-INFDFZHY-DP3f20BF.js → erDiagram-INFDFZHY-DlIf-fb7.js} +1 -1
  99. package/dist/client/assets/{es-ES-DYQHAD43-CReXU-Nn.js → es-ES-DYQHAD43-CyzL9Mni.js} +1 -1
  100. package/dist/client/assets/{eu-ES-QDSYU5Y3-jRpcaWwz.js → eu-ES-QDSYU5Y3-D2-x316S.js} +1 -1
  101. package/dist/client/assets/{excalidraw-editor-Dj0c0PO6.js → excalidraw-editor-CHbeNZu6.js} +2 -2
  102. package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +1 -0
  103. package/dist/client/assets/{excalidraw-mermaid-stub-efoh2lJm.js → excalidraw-mermaid-stub-Bwe-bKcT.js} +1 -1
  104. package/dist/client/assets/excalidraw-scene-BF_bT1OL.js +176 -0
  105. package/dist/client/assets/excalidrawEditor-BhaTX2Ko.js +2 -0
  106. package/dist/client/assets/export-page-PeexH2QK.js +39 -0
  107. package/dist/client/assets/exportDocument-CtZKWE2c.js +2 -0
  108. package/dist/client/assets/{exportDocument-CLPYN_gg.css → exportDocument-DmV7Gngb.css} +1 -1
  109. package/dist/client/assets/{fa-IR-26LZG4PM-DP8pJ8e3.js → fa-IR-26LZG4PM-D8-trU2x.js} +1 -1
  110. package/dist/client/assets/{factor-2uy-lXe_.js → factor-Cz-hzBGH.js} +1 -1
  111. package/dist/client/assets/{fi-FI-6YS4KDE4-BLUDpNOj.js → fi-FI-6YS4KDE4-CCdRVFDQ.js} +1 -1
  112. package/dist/client/assets/file-kind-DBptLlF_.js +1 -0
  113. package/dist/client/assets/{flowDiagram-PKNHOUZH-CRbK5_5h.js → flowDiagram-PKNHOUZH-C_t-mkwb.js} +1 -1
  114. package/dist/client/assets/{fr-FR-BRLLPTZC-BoZz3Pi8.js → fr-FR-BRLLPTZC-Dqq-O5T_.js} +1 -1
  115. package/dist/client/assets/ganttDiagram-A5KZAMGK-BtK9Tb--.js +292 -0
  116. package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +1 -0
  117. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js +65 -0
  118. package/dist/client/assets/{gl-ES-OKUZTLYG-CaEvhjDi.js → gl-ES-OKUZTLYG-BK7pbLbm.js} +1 -1
  119. package/dist/client/assets/{graphlib-DSzYgMXB.js → graphlib-BgRST-Qg.js} +1 -1
  120. package/dist/client/assets/{he-IL-26MGYIU7-DYOchgy9.js → he-IL-26MGYIU7-C3BuYKyY.js} +1 -1
  121. package/dist/client/assets/{hi-IN-Q4ZOGTP2-yRs8g46n.js → hi-IN-Q4ZOGTP2-BEvXWXnH.js} +1 -1
  122. package/dist/client/assets/{hu-HU-P2OXPSN5-1skPmtgc.js → hu-HU-P2OXPSN5-BWWZeJNp.js} +1 -1
  123. package/dist/client/assets/{id-ID-2EIKXYN6-iUugQJd9.js → id-ID-2EIKXYN6-DxSKi_aJ.js} +1 -1
  124. package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +1 -0
  125. package/dist/client/assets/index-D69HOZHr.css +1 -0
  126. package/dist/client/assets/{index-CVgVzuh6.js → index-kPgEYvEX.js} +2 -2
  127. package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +1 -0
  128. package/dist/client/assets/infoDiagram-LFFYTUFH-DFTI0nfs.js +2 -0
  129. package/dist/client/assets/{isEmpty-C7iPDOO3.js → isEmpty-CVvRj8fj.js} +1 -1
  130. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-BDVPgkv4.js → ishikawaDiagram-PHBUUO56-DpBuDpC6.js} +1 -1
  131. package/dist/client/assets/{it-IT-4CFKVXI2-a5DFhzuI.js → it-IT-4CFKVXI2-BmA8wW6q.js} +1 -1
  132. package/dist/client/assets/{ja-JP-MAND2Z4V-DwogHVKd.js → ja-JP-MAND2Z4V-CLS1jI9o.js} +1 -1
  133. package/dist/client/assets/javascript-UJe68_xi.js +1 -0
  134. package/dist/client/assets/{journeyDiagram-4ABVD52K-DtNnwL48.js → journeyDiagram-4ABVD52K-DDur6iHm.js} +1 -1
  135. package/dist/client/assets/{jsx-runtime-B8dyIONw.js → jsx-runtime-C2p7wRmT.js} +1 -1
  136. package/dist/client/assets/{kaa-HQRTCXTJ-p81XNRfH.js → kaa-HQRTCXTJ-W15DEDPz.js} +1 -1
  137. package/dist/client/assets/{kab-KAB-JKIKKTGH-mV5VzQZc.js → kab-KAB-JKIKKTGH-MLh1inqS.js} +1 -1
  138. package/dist/client/assets/{kanban-definition-K7BYSVSG-C565sUNo.js → kanban-definition-K7BYSVSG-dA6NPLsg.js} +1 -1
  139. package/dist/client/assets/{kk-KZ-HXQ63ZFC-IIPX0GQv.js → kk-KZ-HXQ63ZFC-BtFrPeLs.js} +1 -1
  140. package/dist/client/assets/{km-KH-PKL3LSGX-D7WQFJuZ.js → km-KH-PKL3LSGX-xO5FyM9T.js} +1 -1
  141. package/dist/client/assets/{ko-KR-KXLREZX3-Bs1oLtJs.js → ko-KR-KXLREZX3-NZFoRybS.js} +1 -1
  142. package/dist/client/assets/{ku-TR-MJ4IER3X-DlxOs6aZ.js → ku-TR-MJ4IER3X-B5eVPIpK.js} +1 -1
  143. package/dist/client/assets/{line-D57TbKb7.js → line-B2GMovaI.js} +1 -1
  144. package/dist/client/assets/{linear-BIf852wI.js → linear-B2dOdA24.js} +1 -1
  145. package/dist/client/assets/{lt-LT-H6WFQ6FJ-xuo-3zKH.js → lt-LT-H6WFQ6FJ-D_7_OeJD.js} +1 -1
  146. package/dist/client/assets/{lv-LV-GOCK6SJW-C7S3M1nr.js → lv-LV-GOCK6SJW-CnpKr0oQ.js} +1 -1
  147. package/dist/client/assets/main-DSxNTtD-.js +1243 -0
  148. package/dist/client/assets/mermaid-parser.core-B1ogGcR8.js +4 -0
  149. package/dist/client/assets/{mermaid-runtime-DqncQoYK.js → mermaid-runtime-Bn8A6DGx.js} +3 -3
  150. package/dist/client/assets/{mindmap-definition-YRQLILUH-BbYzGfTD.js → mindmap-definition-YRQLILUH-DjQcsPoe.js} +1 -1
  151. package/dist/client/assets/{mr-IN-IXVLDMEQ-BsoowyZT.js → mr-IN-IXVLDMEQ-Pht2X_GK.js} +1 -1
  152. package/dist/client/assets/{my-MM-YG6MYTTD-DCqwN_K_.js → my-MM-YG6MYTTD-Cgq4HhPO.js} +1 -1
  153. package/dist/client/assets/{nb-NO-XGWJISD2-CZ5ytLgj.js → nb-NO-XGWJISD2-Bn_Bk2un.js} +1 -1
  154. package/dist/client/assets/{nl-NL-XVDVCPNC-wADsdb-h.js → nl-NL-XVDVCPNC-YkWSJS94.js} +1 -1
  155. package/dist/client/assets/{nn-NO-EMX5MJX5-D9zIKTL2.js → nn-NO-EMX5MJX5-DhP5eZJ7.js} +1 -1
  156. package/dist/client/assets/{nsis-CUd4RnvJ.js → nsis-QPGhLAeY.js} +1 -1
  157. package/dist/client/assets/{oc-FR-ROEINTVO-BSbBugJB.js → oc-FR-ROEINTVO-D3udMPnr.js} +1 -1
  158. package/dist/client/assets/{ordinal-B0PAtOQ6.js → ordinal-Dz3y_j0K.js} +1 -1
  159. package/dist/client/assets/{pa-IN-ZYN6SUDY-1pFA_3Pb.js → pa-IN-ZYN6SUDY-CR5YzFig.js} +1 -1
  160. package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +1 -0
  161. package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +1 -0
  162. package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +1 -0
  163. package/dist/client/assets/pieDiagram-SKSYHLDU-jhHouFpk.js +30 -0
  164. package/dist/client/assets/{pl-PL-6VTG7PHC-DyYw0u_z.js → pl-PL-6VTG7PHC-_wZuoIDM.js} +1 -1
  165. package/dist/client/assets/preview-render-compiler-BjLlHmiQ.js +35 -0
  166. package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +1 -0
  167. package/dist/client/assets/preview-render-worker-B4dH2yxj.js +59 -0
  168. package/dist/client/assets/{pt-BR-5YFKRR5G-DJCCBBDl.js → pt-BR-5YFKRR5G-M7gIm2Hi.js} +1 -1
  169. package/dist/client/assets/{pt-PT-GEIXXZ67-BPJd09Ax.js → pt-PT-GEIXXZ67-CcxWpkGj.js} +1 -1
  170. package/dist/client/assets/{pug-BqBF8qF7.js → pug-DkUcLYWt.js} +1 -1
  171. package/dist/client/assets/{quadrantDiagram-337W2JSQ-DhlKLozd.js → quadrantDiagram-337W2JSQ-CYKgdx7K.js} +1 -1
  172. package/dist/client/assets/quick-switcher-controller-DcyllYpm.js +5 -0
  173. package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +1 -0
  174. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-B7ZOMsIb.js → requirementDiagram-Z7DCOOCP-D9SHxoW7.js} +1 -1
  175. package/dist/client/assets/{ro-RO-E2P6TFZI-DWVyTV7V.js → ro-RO-E2P6TFZI-qR9noVzP.js} +1 -1
  176. package/dist/client/assets/{room-B0UGbzQj.js → room-yJaBAoEU.js} +1 -1
  177. package/dist/client/assets/{ru-RU-YBIIY43T-Dyar7CYM.js → ru-RU-YBIIY43T-CE4S_RX8.js} +1 -1
  178. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CXRga6Op.js → sankeyDiagram-WA2Y5GQK-CfHe3D6R.js} +1 -1
  179. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-CeSFlFx5.js → sequenceDiagram-2WXFIKYE-CZsMMqAJ.js} +1 -1
  180. package/dist/client/assets/{si-LK-673C2CI2-C61aLrIy.js → si-LK-673C2CI2-Bv6Avh3z.js} +1 -1
  181. package/dist/client/assets/{sk-SK-CKZHQ4AP-BlFwOxRD.js → sk-SK-CKZHQ4AP-Cnlpp55z.js} +1 -1
  182. package/dist/client/assets/{sl-SI-557H2GWM-DcAVW-_t.js → sl-SI-557H2GWM-BfGq7AQF.js} +1 -1
  183. package/dist/client/assets/stateDiagram-RAJIS63D-CoNZjTYV.js +1 -0
  184. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +1 -0
  185. package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +1 -0
  186. package/dist/client/assets/{subset-worker.chunk-DVGT6bvR.js → subset-worker.chunk-BSCP6IiC.js} +1 -1
  187. package/dist/client/assets/{sv-SE-XOPKKDWS-BkhfOHzh.js → sv-SE-XOPKKDWS-B2_Vk-sp.js} +1 -1
  188. package/dist/client/assets/{ta-IN-XBH7DQI3-BIfwglZa.js → ta-IN-XBH7DQI3-BXQMZZIx.js} +1 -1
  189. package/dist/client/assets/{th-TH-TOCWH3R4-CkrxqVkf.js → th-TH-TOCWH3R4-C-ZIYMfH.js} +1 -1
  190. package/dist/client/assets/{timeline-definition-YZTLITO2-BXBHNWLQ.js → timeline-definition-YZTLITO2-DSe2mrG8.js} +1 -1
  191. package/dist/client/assets/{tr-TR-GXW6CYY5-CDdvG9rD.js → tr-TR-GXW6CYY5-dl702PMA.js} +1 -1
  192. package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +1 -0
  193. package/dist/client/assets/{uk-UA-IJKTNUDG-DRHp0lWp.js → uk-UA-IJKTNUDG-CUYQvSSF.js} +1 -1
  194. package/dist/client/assets/{uz-UZ-TBZZEA4V-BIn-VE3Y.js → uz-UZ-TBZZEA4V-B9qw0PXX.js} +1 -1
  195. package/dist/client/assets/{vault-api-client-DIaCC56H.js → vault-api-client-BzHQseMN.js} +1 -1
  196. package/dist/client/assets/vault-utils-5Xr0MXCb.js +1 -0
  197. package/dist/client/assets/{vennDiagram-LZ73GAT5-Cs9aQmVM.js → vennDiagram-LZ73GAT5-xSzaIpy1.js} +1 -1
  198. package/dist/client/assets/{vi-VN-MULSGNVB-Du7t5I0v.js → vi-VN-MULSGNVB-DqxZ_sVc.js} +1 -1
  199. package/dist/client/assets/{xychartDiagram-JWTSCODW-B40ybbzC.js → xychartDiagram-JWTSCODW-C3vA70iJ.js} +1 -1
  200. package/dist/client/assets/{yjs-provider-reset-guard-DUP9XupO.js → yjs-provider-reset-guard-CtERLBID.js} +1 -1
  201. package/dist/client/assets/{zh-CN-MVX3E32U-RcjS3rjt.js → zh-CN-MVX3E32U-BM0aLuGc.js} +1 -1
  202. package/dist/client/assets/{zh-HK-JNU5RLIE-g8UeEw5v.js → zh-HK-JNU5RLIE-dmG_YD0d.js} +1 -1
  203. package/dist/client/assets/{zh-TW-LENVCA6T-DwV25BqC.js → zh-TW-LENVCA6T-LFgbiOi3.js} +1 -1
  204. package/dist/client/drawio-editor.html +1 -1
  205. package/dist/client/excalidraw-editor.html +1 -1
  206. package/dist/client/export-document.html +5 -5
  207. package/dist/client/index.html +4 -4
  208. package/docker-compose.yml +1 -0
  209. package/package.json +24 -21
  210. package/src/client/app/export-document.html +1 -1
  211. package/src/client/application/app-shell/ui-feature-shell.js +47 -1
  212. package/src/client/application/app-shell/ui-feature-toolbar.js +25 -3
  213. package/src/client/application/app-shell/workspace-feature.js +9 -0
  214. package/src/client/application/app-shell-elements.js +3 -0
  215. package/src/client/application/diagram-preview-hydrator.js +1 -1
  216. package/src/client/application/markdown-frontmatter.js +97 -0
  217. package/src/client/application/preview-render-compiler.js +60 -7
  218. package/src/client/application/preview-render-executor.js +8 -1
  219. package/src/client/application/preview-render-worker.js +4 -0
  220. package/src/client/application/preview-renderer.js +51 -1
  221. package/src/client/application/workspace-chrome-controller.js +25 -19
  222. package/src/client/application/workspace-coordinator.js +9 -0
  223. package/src/client/application/workspace-preview-controller.js +49 -3
  224. package/src/client/bootstrap/collabmd-app-shell.js +31 -2
  225. package/src/client/domain/markdown-formatting.js +1 -1
  226. package/src/client/domain/markdown-toolbar-actions.js +36 -0
  227. package/src/client/domain/vault-paths.js +19 -0
  228. package/src/client/export/export-page.js +11 -3
  229. package/src/client/export/export-pipeline.js +80 -3
  230. package/src/client/infrastructure/editor-session.js +4 -0
  231. package/src/client/infrastructure/editor-view-adapter.js +44 -7
  232. package/src/client/infrastructure/excalidraw-room-client.js +12 -4
  233. package/src/client/infrastructure/vault-api-client.js +54 -0
  234. package/src/client/presentation/app-shell-template.js +27 -0
  235. package/src/client/presentation/backlinks-panel.js +37 -11
  236. package/src/client/presentation/bases-preview-controller.js +444 -0
  237. package/src/client/presentation/file-action-controller.js +44 -2
  238. package/src/client/presentation/file-explorer-view.js +10 -2
  239. package/src/client/presentation/file-tree-state.js +9 -1
  240. package/src/client/presentation/git-diff-view-controller.js +7 -10
  241. package/src/client/presentation/quick-switcher-controller.js +54 -13
  242. package/src/client/styles/base.css +5 -0
  243. package/src/client/styles/export-document.css +12 -0
  244. package/src/client/styles/features/backlinks.css +65 -3
  245. package/src/client/styles/features/preview-markdown.css +347 -0
  246. package/src/client/styles/layout/editor-page.css +6 -0
  247. package/src/client/styles/layout/responsive.css +89 -0
  248. package/src/client/styles/layout/shell.css +14 -1
  249. package/src/client/styles/layout/view-modes.css +5 -0
  250. package/src/client/styles/overrides/codemirror.css +74 -0
  251. package/src/domain/file-kind.js +17 -2
  252. package/src/domain/wiki-link-resolver.js +41 -23
  253. package/src/domain/yaml-frontmatter.js +59 -0
  254. package/src/server/auth/create-auth-service.js +32 -6
  255. package/src/server/config/env.js +27 -0
  256. package/src/server/config/perf-logging.js +39 -0
  257. package/src/server/create-app-server.js +113 -7
  258. package/src/server/domain/backlink-index.js +129 -19
  259. package/src/server/domain/bases/base-query-service.js +2101 -0
  260. package/src/server/domain/collaboration/collaboration-document-store.js +13 -2
  261. package/src/server/domain/collaboration/collaboration-room.js +28 -5
  262. package/src/server/domain/workspace-state.js +52 -0
  263. package/src/server/infrastructure/git/history-service.js +1 -1
  264. package/src/server/infrastructure/http/create-request-handler.js +2 -0
  265. package/src/server/infrastructure/http/create-vault-api-command-handler.js +5 -0
  266. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  267. package/src/server/infrastructure/http/create-vault-api-query-handler.js +66 -0
  268. package/src/server/infrastructure/persistence/path-utils.js +1 -1
  269. package/src/server/infrastructure/persistence/pull-backup-store.js +1 -1
  270. package/src/server/infrastructure/persistence/vault-content-adapter.js +6 -0
  271. package/src/server/infrastructure/persistence/vault-file-store.js +88 -31
  272. package/src/server/infrastructure/workspace/file-system-sync-service.js +156 -31
  273. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +47 -51
  274. package/src/server/shared/async-utils.js +25 -0
  275. package/dist/client/assets/architecture-PBZL5I3N-iRyVT2GQ.js +0 -1
  276. package/dist/client/assets/architectureDiagram-2XIMDMQ5-Bhh8YQHn.js +0 -36
  277. package/dist/client/assets/base-B5gONpJK.css +0 -1
  278. package/dist/client/assets/channel-s0w88EQN.js +0 -1
  279. package/dist/client/assets/chunk-27N2SPOM-DbHKsQ_j.js +0 -34
  280. package/dist/client/assets/chunk-GLR3WWYH-ZnuaBvXp.js +0 -2
  281. package/dist/client/assets/chunk-HHEYEP7N-DOQ0PCdH.js +0 -1
  282. package/dist/client/assets/chunk-QZHKN3VN-B0v4d-CS.js +0 -1
  283. package/dist/client/assets/classDiagram-VBA2DB6C-Bpdym3dj.js +0 -1
  284. package/dist/client/assets/classDiagram-v2-RAHNMMFH-CRAsdVDB.js +0 -1
  285. package/dist/client/assets/clone-C-n46MFF.js +0 -1
  286. package/dist/client/assets/dagre-KLK3FWXG-CXSnjrX-.js +0 -4
  287. package/dist/client/assets/diagram-E7M64L7V-De0StFef.js +0 -24
  288. package/dist/client/assets/diagram-IFDJBPK2-B2m6AJbU.js +0 -43
  289. package/dist/client/assets/diagram-P4PSJMXO-YBWLVENw.js +0 -24
  290. package/dist/client/assets/dist-BNcU46Ik.js +0 -1
  291. package/dist/client/assets/dist-BUEzOS23.js +0 -1
  292. package/dist/client/assets/dist-BflL-_8D.js +0 -1
  293. package/dist/client/assets/dist-CI_qEj5K.js +0 -1
  294. package/dist/client/assets/dist-CtFNDttZ.js +0 -1
  295. package/dist/client/assets/dist-DS_4VpEd.js +0 -1
  296. package/dist/client/assets/dist-DwsFUbuB.js +0 -1
  297. package/dist/client/assets/dist-VCYAp958.js +0 -1
  298. package/dist/client/assets/dist-Yxt8txtM.js +0 -1
  299. package/dist/client/assets/dist-npxgF_6V.js +0 -1
  300. package/dist/client/assets/dist-u0zDRMQt.js +0 -1
  301. package/dist/client/assets/drawioEditor-Eb2yYhjE.js +0 -2
  302. package/dist/client/assets/editor-session-DFzBn4RY.js +0 -16
  303. package/dist/client/assets/excalidraw-editor-Bat1FRoT.css +0 -1
  304. package/dist/client/assets/excalidraw-scene-CixfM-jL.js +0 -174
  305. package/dist/client/assets/excalidrawEditor-diK4VITg.js +0 -2
  306. package/dist/client/assets/export-page-CUOMczdp.js +0 -39
  307. package/dist/client/assets/exportDocument-BM4_f2n8.js +0 -2
  308. package/dist/client/assets/ganttDiagram-A5KZAMGK-R-AMIgxR.js +0 -292
  309. package/dist/client/assets/gitGraph-HDMCJU4V-kkuqHGSM.js +0 -1
  310. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-CIPit_Sh.js +0 -65
  311. package/dist/client/assets/image-32MOCVDX-BB6utPzr.js +0 -1
  312. package/dist/client/assets/index-BOOhEiLo.css +0 -1
  313. package/dist/client/assets/info-3K5VOQVL-DPN78whf.js +0 -1
  314. package/dist/client/assets/infoDiagram-LFFYTUFH-CF8jXFTm.js +0 -2
  315. package/dist/client/assets/javascript-8DvdgifH.js +0 -1
  316. package/dist/client/assets/main-C8adLQnt.js +0 -1174
  317. package/dist/client/assets/mermaid-parser.core-By_5k2SF.js +0 -4
  318. package/dist/client/assets/packet-RMMSAZCW-BymvQ5cQ.js +0 -1
  319. package/dist/client/assets/percentages-5DKR754L-CiI2D7zA.js +0 -1
  320. package/dist/client/assets/pie-UPGHQEXC-MmzJzWOE.js +0 -1
  321. package/dist/client/assets/pieDiagram-SKSYHLDU-CAU_gC7U.js +0 -30
  322. package/dist/client/assets/preview-render-compiler-CVfDHnqM.js +0 -1
  323. package/dist/client/assets/preview-render-compiler-CapHJDHT.js +0 -1
  324. package/dist/client/assets/preview-render-worker-wMS710Bv.js +0 -23
  325. package/dist/client/assets/quick-switcher-controller-DplOTsT3.js +0 -5
  326. package/dist/client/assets/radar-KQ55EAFF-CCohASSY.js +0 -1
  327. package/dist/client/assets/stateDiagram-RAJIS63D-CPoSrNwn.js +0 -1
  328. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-5GW0Y21a.js +0 -1
  329. package/dist/client/assets/subset-shared.chunk-CC_u8ICU.js +0 -1
  330. package/dist/client/assets/treemap-KZPCXAKY-9kxB0uNY.js +0 -1
  331. package/dist/client/assets/vault-utils-BW53lKl1.js +0 -1
  332. /package/dist/client/assets/{apl-QJCYYBkj.js → apl-C1JYSI8J.js} +0 -0
  333. /package/dist/client/assets/{array-DwdVlTkF.js → array-B3agRrCs.js} +0 -0
  334. /package/dist/client/assets/{asciiarmor-DNy0UPqh.js → asciiarmor-DHW75j1s.js} +0 -0
  335. /package/dist/client/assets/{asn1-CNPXj-s7.js → asn1-CQiG40kG.js} +0 -0
  336. /package/dist/client/assets/{asterisk-BwMdLpT2.js → asterisk-BWExh0n4.js} +0 -0
  337. /package/dist/client/assets/{base-r5Zg2n3k.js → base-h1uscjTi.js} +0 -0
  338. /package/dist/client/assets/{brainfuck-C2gHT8aA.js → brainfuck-CTNFyOLg.js} +0 -0
  339. /package/dist/client/assets/{chunk-3PELD44J-CL87tpFo.js → chunk-3PELD44J-DymL2rGq.js} +0 -0
  340. /package/dist/client/assets/{chunk-A66AFZZU-DuceaGnc.js → chunk-A66AFZZU-BFHL744F.js} +0 -0
  341. /package/dist/client/assets/{chunk-SRAX5OIU-CC2mobFL.js → chunk-SRAX5OIU-CLVBQRWC.js} +0 -0
  342. /package/dist/client/assets/{clike-D5X7HJpo.js → clike-1_ZsiVV8.js} +0 -0
  343. /package/dist/client/assets/{clojure-BEDKZv_5.js → clojure-D-DYVqu7.js} +0 -0
  344. /package/dist/client/assets/{cmake-Y3shE7av.js → cmake-DtGL-Unu.js} +0 -0
  345. /package/dist/client/assets/{cobol-f-3TLk62.js → cobol-DP4QggbL.js} +0 -0
  346. /package/dist/client/assets/{coffeescript-C0XA9-xa.js → coffeescript-B_7eyHAa.js} +0 -0
  347. /package/dist/client/assets/{commonlisp-BOB6sIEu.js → commonlisp-COlJYiQT.js} +0 -0
  348. /package/dist/client/assets/{crystal-ByNgE_My.js → crystal-I_dE9xG-.js} +0 -0
  349. /package/dist/client/assets/{css-eaI-ENiR.js → css-CmhPNxBE.js} +0 -0
  350. /package/dist/client/assets/{cypher-CQ-dGGSi.js → cypher-DE6I2lIA.js} +0 -0
  351. /package/dist/client/assets/{cytoscape.esm-DBDRhUia.js → cytoscape.esm-Czjc507F.js} +0 -0
  352. /package/dist/client/assets/{d-D9pnu4Cr.js → d-BNkKjn0o.js} +0 -0
  353. /package/dist/client/assets/{defaultLocale-BWgun1yJ.js → defaultLocale-B_FbTTbl.js} +0 -0
  354. /package/dist/client/assets/{diff-z9q33Lo6.js → diff-BWuPUsEo.js} +0 -0
  355. /package/dist/client/assets/{dist-CsYRf4AV.js → dist-x7PIEmJu.js} +0 -0
  356. /package/dist/client/assets/{drawio-room-C592VDk7.js → drawio-room-DEivFyNV.js} +0 -0
  357. /package/dist/client/assets/{dtd-BDizf_te.js → dtd-C6brJFPg.js} +0 -0
  358. /package/dist/client/assets/{dylan-Bk__XCKW.js → dylan-Bft86ZSB.js} +0 -0
  359. /package/dist/client/assets/{ebnf-SzN4Kxtp.js → ebnf-D6ifG44A.js} +0 -0
  360. /package/dist/client/assets/{ecl-5ulxiKbt.js → ecl-M7Iek4lq.js} +0 -0
  361. /package/dist/client/assets/{eiffel-Bhoaqbb6.js → eiffel-DwxtewZF.js} +0 -0
  362. /package/dist/client/assets/{elm-C3je846J.js → elm-B1TncobV.js} +0 -0
  363. /package/dist/client/assets/{erlang-Cgk9SIAz.js → erlang-BDJZNtt8.js} +0 -0
  364. /package/dist/client/assets/{excalidraw-mermaid-stub-B_2dv3Ll.js → excalidraw-mermaid-stub-BZPU4ZhU.js} +0 -0
  365. /package/dist/client/assets/{fcl-dvkZwp9p.js → fcl-BWKK0S4-.js} +0 -0
  366. /package/dist/client/assets/{forth-DmfSa3jN.js → forth-nvhcMz63.js} +0 -0
  367. /package/dist/client/assets/{fortran-BsZAiNnN.js → fortran-BZID-z10.js} +0 -0
  368. /package/dist/client/assets/{gas-DBpKE9ut.js → gas-DjQsZDGE.js} +0 -0
  369. /package/dist/client/assets/{gherkin-CceEbBs7.js → gherkin-S0kHlzux.js} +0 -0
  370. /package/dist/client/assets/{groovy-CxJnDvES.js → groovy-BEKazBrO.js} +0 -0
  371. /package/dist/client/assets/{haskell-CUSb34Xy.js → haskell-C6qH3-aI.js} +0 -0
  372. /package/dist/client/assets/{haxe-6EHO_h-N.js → haxe-BY9d_5nB.js} +0 -0
  373. /package/dist/client/assets/{http-C3qcBpvG.js → http-DG1Y9fpK.js} +0 -0
  374. /package/dist/client/assets/{idl-C95wIO2I.js → idl-B64p3NTJ.js} +0 -0
  375. /package/dist/client/assets/{image-blob-reduce.esm-BaW4gpT9.js → image-blob-reduce.esm-DriR2zT9.js} +0 -0
  376. /package/dist/client/assets/{init-Bjj5fg68.js → init-DtLQcSuO.js} +0 -0
  377. /package/dist/client/assets/{isArrayLikeObject-Cmt1CYnI.js → isArrayLikeObject-BId_dPHM.js} +0 -0
  378. /package/dist/client/assets/{javascript-aWB87b1w.js → javascript-CdiVhQeA.js} +0 -0
  379. /package/dist/client/assets/{julia-DF9PPAXG.js → julia-B22G9Bym.js} +0 -0
  380. /package/dist/client/assets/{katex-BPsFnA3D.js → katex-CXYULLWy.js} +0 -0
  381. /package/dist/client/assets/{livescript-CnOyWwUY.js → livescript-CkcuHqeS.js} +0 -0
  382. /package/dist/client/assets/{lua-a0rEq19C.js → lua-kutgyRGY.js} +0 -0
  383. /package/dist/client/assets/{math-BaavbII8.js → math-B-LMBwub.js} +0 -0
  384. /package/dist/client/assets/{mathematica-CKUq0Ojc.js → mathematica-CKVhKnoY.js} +0 -0
  385. /package/dist/client/assets/{mbox-a-u2PLog.js → mbox-DANyzFJ2.js} +0 -0
  386. /package/dist/client/assets/{mirc-BOd43sOX.js → mirc-BVG2S5rO.js} +0 -0
  387. /package/dist/client/assets/{mllike-fHruGivh.js → mllike-C0p7lv48.js} +0 -0
  388. /package/dist/client/assets/{modelica-B0NJqf1C.js → modelica-vJ-Qa9jV.js} +0 -0
  389. /package/dist/client/assets/{mscgen-DJZ33SrF.js → mscgen-vUD-SWGJ.js} +0 -0
  390. /package/dist/client/assets/{mumps-DvMvHTxU.js → mumps-D0KfUTSd.js} +0 -0
  391. /package/dist/client/assets/{nginx-BVAs8laz.js → nginx-DkVceJrH.js} +0 -0
  392. /package/dist/client/assets/{ntriples-DrdyAZU1.js → ntriples-BBuCIfS0.js} +0 -0
  393. /package/dist/client/assets/{octave-_YqJ0g7E.js → octave-BTv2CqSQ.js} +0 -0
  394. /package/dist/client/assets/{oz-k7T3LoMr.js → oz-D8SjVDNU.js} +0 -0
  395. /package/dist/client/assets/{pascal-CftsTvte.js → pascal-T-tfhVyx.js} +0 -0
  396. /package/dist/client/assets/{path-BUmMWM1-.js → path-DIlZIGue.js} +0 -0
  397. /package/dist/client/assets/{perl-CbsLFc7A.js → perl-BDrCkHRd.js} +0 -0
  398. /package/dist/client/assets/{pica-By-YDy_B.js → pica-C1TdTz-C.js} +0 -0
  399. /package/dist/client/assets/{pig-C-jTwMS-.js → pig-BEyI4fPq.js} +0 -0
  400. /package/dist/client/assets/{powershell-DqXLgSHX.js → powershell-DtnFc6GG.js} +0 -0
  401. /package/dist/client/assets/{preview-diagram-utils-Dc83ucbv.js → preview-diagram-utils-COt-IYMD.js} +0 -0
  402. /package/dist/client/assets/{preview-render-profile-DPzmho7I.js → preview-render-profile-CR4dJZrp.js} +0 -0
  403. /package/dist/client/assets/{properties-05jaw55P.js → properties-DWUvbxV9.js} +0 -0
  404. /package/dist/client/assets/{protobuf-DThTsZQN.js → protobuf-CQGoYyfE.js} +0 -0
  405. /package/dist/client/assets/{puppet-DuHxMpoj.js → puppet-Dd-qWO3p.js} +0 -0
  406. /package/dist/client/assets/{python-BiE2VHJI.js → python-CZtTmYkS.js} +0 -0
  407. /package/dist/client/assets/{q-DH46YfNw.js → q-I27iQntV.js} +0 -0
  408. /package/dist/client/assets/{r-DmEm46kJ.js → r-DN_EydfL.js} +0 -0
  409. /package/dist/client/assets/{rough.esm-jZQkcmER.js → rough.esm-DE_lJ5Ge.js} +0 -0
  410. /package/dist/client/assets/{roundRect-CI6UmGg6.js → roundRect-BzEouiv_.js} +0 -0
  411. /package/dist/client/assets/{rpm-DILIIbRB.js → rpm-CjWxLM68.js} +0 -0
  412. /package/dist/client/assets/{ruby-2LcnHEMS.js → ruby-CB34f2Gf.js} +0 -0
  413. /package/dist/client/assets/{runtime-config-CqX_f_Q4.js → runtime-config-CqhchMC4.js} +0 -0
  414. /package/dist/client/assets/{sas-Bn81MKuB.js → sas-Bji4HDQq.js} +0 -0
  415. /package/dist/client/assets/{scheme-B8kPNbgd.js → scheme-C3elI80V.js} +0 -0
  416. /package/dist/client/assets/{shell-CGj6v8kb.js → shell-DUveK2Hb.js} +0 -0
  417. /package/dist/client/assets/{sieve-CfVNFN1K.js → sieve-2ogwMVx4.js} +0 -0
  418. /package/dist/client/assets/{simple-mode-_FSHdiXs.js → simple-mode-pOKc0mfx.js} +0 -0
  419. /package/dist/client/assets/{smalltalk-BpIFyCPt.js → smalltalk-BuGhc6lW.js} +0 -0
  420. /package/dist/client/assets/{solr-B7iFaetn.js → solr-DTxshpm8.js} +0 -0
  421. /package/dist/client/assets/{sparql-COhgMTFK.js → sparql-BOvq0dv7.js} +0 -0
  422. /package/dist/client/assets/{spreadsheet-BzuffEeg.js → spreadsheet-C6Vbtl9-.js} +0 -0
  423. /package/dist/client/assets/{sql-13lT5zDl.js → sql-DDFeQNTK.js} +0 -0
  424. /package/dist/client/assets/{src-E3c2cohN.js → src-Pgt9Gp65.js} +0 -0
  425. /package/dist/client/assets/{stex-BRSfZZYG.js → stex-CEwW0Q_0.js} +0 -0
  426. /package/dist/client/assets/{stylus-fFo0QRk_.js → stylus-D1SZIMDs.js} +0 -0
  427. /package/dist/client/assets/{swift-wb5gyb6a.js → swift-BCxe4-cw.js} +0 -0
  428. /package/dist/client/assets/{tcl-BJA7GgWY.js → tcl-SPk7uiDB.js} +0 -0
  429. /package/dist/client/assets/{textile-BQjiYu-x.js → textile-C48beRus.js} +0 -0
  430. /package/dist/client/assets/{tiddlywiki-D2vUXB6n.js → tiddlywiki-CiImjFLN.js} +0 -0
  431. /package/dist/client/assets/{tiki-BFhpdznG.js → tiki-HkXZ4BIW.js} +0 -0
  432. /package/dist/client/assets/{toml-DN06iQUw.js → toml-BmfpMy1_.js} +0 -0
  433. /package/dist/client/assets/{troff-DuQfjhPH.js → troff-BjbEOT5E.js} +0 -0
  434. /package/dist/client/assets/{ttcn-BCTy6d50.js → ttcn-NA-V4KnY.js} +0 -0
  435. /package/dist/client/assets/{ttcn-cfg-BYnZQqGa.js → ttcn-cfg-TPHncdGN.js} +0 -0
  436. /package/dist/client/assets/{turtle-BvN-Me9x.js → turtle-GBz_E4RG.js} +0 -0
  437. /package/dist/client/assets/{vb-DYk3wW9u.js → vb-C19AQWqO.js} +0 -0
  438. /package/dist/client/assets/{vbscript-BKI61VS6.js → vbscript-CHJk3s95.js} +0 -0
  439. /package/dist/client/assets/{velocity-BrtitHHA.js → velocity-Ya0P4sQU.js} +0 -0
  440. /package/dist/client/assets/{verilog-CjUx3yiL.js → verilog-C4wTycyo.js} +0 -0
  441. /package/dist/client/assets/{vhdl-CPWwYF4V.js → vhdl-Bwndeg44.js} +0 -0
  442. /package/dist/client/assets/{webidl-PiVOzma8.js → webidl-DttrYZRT.js} +0 -0
  443. /package/dist/client/assets/{xquery-CiTzM_oK.js → xquery-CEDTd8qs.js} +0 -0
  444. /package/dist/client/assets/{yacas-4QS9CntY.js → yacas-C7dxlPB0.js} +0 -0
  445. /package/dist/client/assets/{z80-BxidrTKR.js → z80-BqEfFSnA.js} +0 -0
@@ -1,9 +1,10 @@
1
1
  import {
2
+ isBaseFilePath,
2
3
  isDrawioFilePath,
3
4
  isExcalidrawFilePath,
5
+ isMarkdownFilePath,
4
6
  isMermaidFilePath,
5
7
  isPlantUmlFilePath,
6
- supportsBacklinksForFilePath,
7
8
  } from '../../../domain/file-kind.js';
8
9
 
9
10
  function assertWriteSucceeded(result, operation, filePath) {
@@ -54,6 +55,10 @@ export class CollaborationDocumentStore {
54
55
  return this.vaultFileStore.readExcalidrawFile(this.name);
55
56
  }
56
57
 
58
+ if (isBaseFilePath(this.name) && typeof this.vaultFileStore.readBaseFile === 'function') {
59
+ return this.vaultFileStore.readBaseFile(this.name);
60
+ }
61
+
57
62
  if (isDrawioFilePath(this.name) && typeof this.vaultFileStore.readDrawioFile === 'function') {
58
63
  return this.vaultFileStore.readDrawioFile(this.name);
59
64
  }
@@ -99,7 +104,7 @@ export class CollaborationDocumentStore {
99
104
  await this.writeSnapshot(snapshot);
100
105
  }
101
106
 
102
- if (this.backlinkIndex && supportsBacklinksForFilePath(this.name)) {
107
+ if (this.backlinkIndex && isMarkdownFilePath(this.name)) {
103
108
  this.backlinkIndex.updateFile(this.name, content);
104
109
  }
105
110
  }
@@ -122,6 +127,12 @@ export class CollaborationDocumentStore {
122
127
  return;
123
128
  }
124
129
 
130
+ if (isBaseFilePath(this.name) && typeof this.vaultFileStore.writeBaseFile === 'function') {
131
+ const result = await this.vaultFileStore.writeBaseFile(this.name, content, options);
132
+ assertWriteSucceeded(result, 'write content', this.name);
133
+ return;
134
+ }
135
+
125
136
  if (isMermaidFilePath(this.name) && typeof this.vaultFileStore.writeMermaidFile === 'function') {
126
137
  const result = await this.vaultFileStore.writeMermaidFile(this.name, content, options);
127
138
  assertWriteSucceeded(result, 'write content', this.name);
@@ -8,6 +8,7 @@ import { MSG_AWARENESS, MSG_SYNC } from './protocol.js';
8
8
  import { CollaborationDocumentStore } from './collaboration-document-store.js';
9
9
  import { RoomClientStateStore } from './room-client-state-store.js';
10
10
  import { RoomPersistenceController } from './room-persistence-controller.js';
11
+ import { logPerfEvent } from '../../config/perf-logging.js';
11
12
  import { populateCommentThreads, serializeCommentThreads } from '../../../domain/comment-threads.js';
12
13
  import {
13
14
  isExcalidrawRoomDocStructured,
@@ -131,6 +132,7 @@ export class CollaborationRoom {
131
132
  name,
132
133
  idleGraceMs = 0,
133
134
  maxBufferedAmountBytes,
135
+ perfLoggingEnabled = false,
134
136
  vaultFileStore,
135
137
  backlinkIndex,
136
138
  onEmpty,
@@ -138,6 +140,7 @@ export class CollaborationRoom {
138
140
  this.name = name;
139
141
  this.idleGraceMs = idleGraceMs;
140
142
  this.maxBufferedAmountBytes = maxBufferedAmountBytes;
143
+ this.perfLoggingEnabled = perfLoggingEnabled;
141
144
  this.documentStore = documentStore ?? new CollaborationDocumentStore({
142
145
  backlinkIndex,
143
146
  name,
@@ -187,6 +190,8 @@ export class CollaborationRoom {
187
190
  let snapshotExists = false;
188
191
  let snapshotValid = false;
189
192
  let commentThreadCount = 0;
193
+ let snapshotReadDurationMs = 0;
194
+ let contentFallbackDurationMs = 0;
190
195
  const hydrateDelayMs = Math.max(0, Number(this.getHydrateDelayMs?.() || 0));
191
196
 
192
197
  try {
@@ -195,7 +200,9 @@ export class CollaborationRoom {
195
200
  }
196
201
 
197
202
  if (this.documentStore?.hasPersistence()) {
203
+ const snapshotReadStartedAt = Date.now();
198
204
  const snapshot = await this.documentStore.readSnapshot();
205
+ snapshotReadDurationMs = Date.now() - snapshotReadStartedAt;
199
206
  if (snapshot) {
200
207
  snapshotExists = true;
201
208
  try {
@@ -227,10 +234,12 @@ export class CollaborationRoom {
227
234
  }
228
235
  }
229
236
 
237
+ const fallbackStartedAt = Date.now();
230
238
  const [content, commentThreads] = await Promise.all([
231
239
  this.documentStore.readContent(),
232
240
  this.documentStore.readCommentThreads(),
233
241
  ]);
242
+ contentFallbackDurationMs = Date.now() - fallbackStartedAt;
234
243
  commentThreadCount = commentThreads.length;
235
244
  if (content !== null || commentThreads.length > 0) {
236
245
  hydrateSource = 'content';
@@ -262,14 +271,23 @@ export class CollaborationRoom {
262
271
  this.debugMetrics.hydrateCount += 1;
263
272
  this.debugMetrics.lastHydrate = {
264
273
  commentThreadCount,
274
+ contentFallbackDurationMs,
265
275
  durationMs: Date.now() - startedAt,
276
+ snapshotReadDurationMs,
266
277
  snapshotExists,
267
278
  snapshotValid,
268
279
  source: hydrateSource,
269
280
  };
270
- console.info(
271
- `[perf][room:${this.name}] hydrate durationMs=${this.debugMetrics.lastHydrate.durationMs} source=${this.debugMetrics.lastHydrate.source} snapshotExists=${this.debugMetrics.lastHydrate.snapshotExists} snapshotValid=${this.debugMetrics.lastHydrate.snapshotValid} commentThreads=${this.debugMetrics.lastHydrate.commentThreadCount}`,
272
- );
281
+ logPerfEvent(this.perfLoggingEnabled, `room:${this.name}`, {
282
+ commentThreads: this.debugMetrics.lastHydrate.commentThreadCount,
283
+ contentFallbackDurationMs: this.debugMetrics.lastHydrate.contentFallbackDurationMs,
284
+ durationMs: this.debugMetrics.lastHydrate.durationMs,
285
+ event: 'hydrate',
286
+ snapshotExists: this.debugMetrics.lastHydrate.snapshotExists,
287
+ snapshotReadDurationMs: this.debugMetrics.lastHydrate.snapshotReadDurationMs,
288
+ snapshotValid: this.debugMetrics.lastHydrate.snapshotValid,
289
+ source: this.debugMetrics.lastHydrate.source,
290
+ });
273
291
  }
274
292
  }
275
293
  })().catch((error) => {
@@ -522,8 +540,13 @@ export class CollaborationRoom {
522
540
  sendInitialSync(ws) {
523
541
  this.debugMetrics.initialSyncCount += 1;
524
542
  this.debugMetrics.lastInitialSyncAt = Date.now();
525
- console.info(`[perf][room:${this.name}] send-initial-sync count=${this.debugMetrics.initialSyncCount}`);
526
- return sendMessage.call(this, ws, this.getInitialSyncMessage(), this);
543
+ const initialSyncMessage = this.getInitialSyncMessage();
544
+ logPerfEvent(this.perfLoggingEnabled, `room:${this.name}`, {
545
+ bytes: initialSyncMessage.byteLength,
546
+ count: this.debugMetrics.initialSyncCount,
547
+ event: 'initial-sync',
548
+ });
549
+ return sendMessage.call(this, ws, initialSyncMessage, this);
527
550
  }
528
551
 
529
552
  async addClient(ws, { sendInitialSync: shouldSendInitialSync = true } = {}) {
@@ -0,0 +1,52 @@
1
+ import { isMarkdownFilePath, isVaultFilePath } from '../../domain/file-kind.js';
2
+
3
+ function compareWorkspacePaths(left = '', right = '') {
4
+ return String(left).localeCompare(String(right), undefined, { sensitivity: 'base' });
5
+ }
6
+
7
+ export function collectWorkspaceStateStats(entries = new Map(), metadata = new Map()) {
8
+ const filePaths = [];
9
+ const markdownPaths = [];
10
+ let vaultFileCount = 0;
11
+
12
+ entries.forEach((entry, pathValue) => {
13
+ const entryType = entry?.type ?? entry?.nodeType ?? metadata.get(pathValue)?.type ?? '';
14
+ if (entryType === 'directory') {
15
+ return;
16
+ }
17
+
18
+ vaultFileCount += 1;
19
+ if (isVaultFilePath(pathValue)) {
20
+ filePaths.push(pathValue);
21
+ }
22
+ if (isMarkdownFilePath(pathValue)) {
23
+ markdownPaths.push(pathValue);
24
+ }
25
+ });
26
+
27
+ filePaths.sort(compareWorkspacePaths);
28
+ markdownPaths.sort(compareWorkspacePaths);
29
+
30
+ return {
31
+ filePaths,
32
+ markdownPaths,
33
+ vaultFileCount,
34
+ };
35
+ }
36
+
37
+ export function createWorkspaceStateSnapshot(entries = new Map(), metadata = new Map(), {
38
+ scannedAt = Date.now(),
39
+ } = {}) {
40
+ const normalizedEntries = entries instanceof Map ? entries : new Map(entries ?? []);
41
+ const normalizedMetadata = metadata instanceof Map ? metadata : new Map(metadata ?? []);
42
+ const stats = collectWorkspaceStateStats(normalizedEntries, normalizedMetadata);
43
+
44
+ return {
45
+ entries: normalizedEntries,
46
+ filePaths: stats.filePaths,
47
+ markdownPaths: stats.markdownPaths,
48
+ metadata: normalizedMetadata,
49
+ scannedAt,
50
+ vaultFileCount: stats.vaultFileCount,
51
+ };
52
+ }
@@ -430,7 +430,7 @@ export class GitHistoryService {
430
430
  }
431
431
 
432
432
  return this.runRequest(cacheKey, async () => {
433
- let content = '';
433
+ let content;
434
434
  try {
435
435
  content = await this.commandRunner.execGit(['show', `${normalizedHash}:${normalizedPath}`]);
436
436
  } catch {
@@ -40,6 +40,7 @@ export function createRequestHandler(
40
40
  authService,
41
41
  vaultFileStore,
42
42
  backlinkIndex,
43
+ baseQueryService = null,
43
44
  docxExporter = null,
44
45
  roomRegistry = null,
45
46
  plantUmlRenderer = null,
@@ -60,6 +61,7 @@ export function createRequestHandler(
60
61
  workspaceMutationCoordinator,
61
62
  });
62
63
  const handleVaultApi = createVaultApiHandler({
64
+ baseQueryService,
63
65
  backlinkIndex,
64
66
  docxExporter,
65
67
  plantUmlRenderer,
@@ -1,4 +1,5 @@
1
1
  import {
2
+ isBaseFilePath,
2
3
  isDrawioFilePath,
3
4
  isExcalidrawFilePath,
4
5
  isMermaidFilePath,
@@ -55,6 +56,10 @@ function selectWriteOperation(vaultFileStore, filePath, content) {
55
56
  return vaultFileStore.writeExcalidrawFile(filePath, content);
56
57
  }
57
58
 
59
+ if (isBaseFilePath(filePath)) {
60
+ return vaultFileStore.writeBaseFile(filePath, content);
61
+ }
62
+
58
63
  if (isDrawioFilePath(filePath)) {
59
64
  return vaultFileStore.writeDrawioFile(filePath, content);
60
65
  }
@@ -3,6 +3,7 @@ import { createVaultApiCommandHandler } from './create-vault-api-command-handler
3
3
  import { createVaultApiQueryHandler } from './create-vault-api-query-handler.js';
4
4
 
5
5
  export function createVaultApiHandler({
6
+ baseQueryService = null,
6
7
  backlinkIndex,
7
8
  docxExporter = null,
8
9
  plantUmlRenderer = null,
@@ -11,6 +12,7 @@ export function createVaultApiHandler({
11
12
  workspaceMutationCoordinator = null,
12
13
  }) {
13
14
  const handleVaultApiQuery = createVaultApiQueryHandler({
15
+ baseQueryService,
14
16
  backlinkIndex,
15
17
  vaultFileStore,
16
18
  workspaceMutationCoordinator,
@@ -1,12 +1,14 @@
1
1
  import { basename } from 'node:path';
2
2
 
3
3
  import {
4
+ isBaseFilePath,
4
5
  isDrawioFilePath,
5
6
  isExcalidrawFilePath,
6
7
  isImageAttachmentFilePath,
7
8
  isMermaidFilePath,
8
9
  isPlantUmlFilePath,
9
10
  } from '../../../domain/file-kind.js';
11
+ import { parseJsonBody } from './request-body.js';
10
12
  import { jsonResponse, sendResponse } from './http-response.js';
11
13
 
12
14
  const SVG_MIME_TYPE = 'image/svg+xml';
@@ -46,6 +48,10 @@ function selectReadOperation(vaultFileStore, filePath) {
46
48
  return vaultFileStore.readExcalidrawFile(filePath);
47
49
  }
48
50
 
51
+ if (isBaseFilePath(filePath)) {
52
+ return vaultFileStore.readBaseFile(filePath);
53
+ }
54
+
49
55
  if (isDrawioFilePath(filePath)) {
50
56
  return vaultFileStore.readDrawioFile(filePath);
51
57
  }
@@ -62,11 +68,71 @@ function selectReadOperation(vaultFileStore, filePath) {
62
68
  }
63
69
 
64
70
  export function createVaultApiQueryHandler({
71
+ baseQueryService = null,
65
72
  backlinkIndex,
66
73
  vaultFileStore,
67
74
  workspaceMutationCoordinator = null,
68
75
  }) {
69
76
  return async function handleVaultApiQuery(req, res, requestUrl) {
77
+ if (requestUrl.pathname === '/api/base/query' && req.method === 'POST') {
78
+ try {
79
+ if (!baseQueryService?.query) {
80
+ jsonResponse(req, res, 503, { error: 'Bases query service is unavailable' });
81
+ return true;
82
+ }
83
+
84
+ const body = await parseJsonBody(req);
85
+ const result = await baseQueryService.query({
86
+ activeFilePath: body?.activeFilePath ?? '',
87
+ basePath: body?.path ?? '',
88
+ search: body?.search ?? '',
89
+ source: typeof body?.source === 'string' ? body.source : null,
90
+ sourcePath: body?.sourcePath ?? '',
91
+ view: body?.view ?? '',
92
+ });
93
+
94
+ jsonResponse(req, res, 200, { ok: true, result });
95
+ } catch (error) {
96
+ console.error('[api] Failed to query base:', error.message);
97
+ jsonResponse(req, res, 400, { error: error.message || 'Failed to query base' });
98
+ }
99
+ return true;
100
+ }
101
+
102
+ if (requestUrl.pathname === '/api/base/export' && req.method === 'POST') {
103
+ try {
104
+ if (!baseQueryService?.query) {
105
+ jsonResponse(req, res, 503, { error: 'Bases query service is unavailable' });
106
+ return true;
107
+ }
108
+
109
+ const body = await parseJsonBody(req);
110
+ const result = await baseQueryService.query({
111
+ activeFilePath: body?.activeFilePath ?? '',
112
+ basePath: body?.path ?? '',
113
+ search: body?.search ?? '',
114
+ source: typeof body?.source === 'string' ? body.source : null,
115
+ sourcePath: body?.sourcePath ?? '',
116
+ view: body?.view ?? '',
117
+ });
118
+ const fileName = basename(String(body?.path || body?.sourcePath || 'base')).replace(/\.[^.]+$/u, '') || 'base';
119
+ sendResponse(req, res, {
120
+ body: result.csv,
121
+ headers: {
122
+ 'Cache-Control': 'no-store',
123
+ 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(`${fileName}.csv`)}"; filename*=UTF-8''${encodeContentDispositionFilename(`${fileName}.csv`)}`,
124
+ 'Content-Type': 'text/csv; charset=utf-8',
125
+ 'X-Content-Type-Options': 'nosniff',
126
+ },
127
+ statusCode: 200,
128
+ });
129
+ } catch (error) {
130
+ console.error('[api] Failed to export base CSV:', error.message);
131
+ jsonResponse(req, res, 400, { error: error.message || 'Failed to export base CSV' });
132
+ }
133
+ return true;
134
+ }
135
+
70
136
  if (requestUrl.pathname === '/api/files' && req.method === 'GET') {
71
137
  try {
72
138
  const tree = workspaceMutationCoordinator?.getWorkspaceTree?.() ?? await vaultFileStore.tree();
@@ -3,7 +3,7 @@ import { isAbsolute, normalize, relative, resolve } from 'path';
3
3
  import { isVaultFilePath } from '../../../domain/file-kind.js';
4
4
 
5
5
  export const IGNORED_DIRECTORIES = new Set(['.git', '.obsidian', '.trash', 'node_modules', '.DS_Store']);
6
- export const VAULT_FILE_PATH_REQUIREMENT = '.md, .excalidraw, .drawio, .mmd, .mermaid, .puml, .plantuml, .png, .jpg, .jpeg, .webp, .gif, or .svg';
6
+ export const VAULT_FILE_PATH_REQUIREMENT = '.md, .base, .excalidraw, .drawio, .mmd, .mermaid, .puml, .plantuml, .png, .jpg, .jpeg, .webp, .gif, or .svg';
7
7
  export const INVALID_VAULT_FILE_PATH_ERROR = `Invalid file path — must end in ${VAULT_FILE_PATH_REQUIREMENT}`;
8
8
  export const INVALID_DIRECTORY_PATH_ERROR = 'Invalid directory path';
9
9
 
@@ -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) {
@@ -1,4 +1,5 @@
1
1
  import {
2
+ isBaseFilePath,
2
3
  isDrawioFilePath,
3
4
  isExcalidrawFilePath,
4
5
  isMarkdownFilePath,
@@ -28,6 +29,11 @@ const adapters = [
28
29
  kind: 'markdown',
29
30
  matches: isMarkdownFilePath,
30
31
  }),
32
+ new VaultContentAdapter({
33
+ invalidPathError: 'Invalid file path — must end in .base',
34
+ kind: 'base',
35
+ matches: isBaseFilePath,
36
+ }),
31
37
  new VaultContentAdapter({
32
38
  invalidPathError: 'Invalid file path — must end in .excalidraw',
33
39
  kind: 'excalidraw',
@@ -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,17 @@ function createWorkspaceEntry(relativePath, type) {
74
76
  };
75
77
  }
76
78
 
79
+ function createWorkspaceMetadata(pathValue, type, info) {
80
+ return {
81
+ ctimeMs: Number(info.ctimeMs || 0),
82
+ inode: Number(info.ino || 0),
83
+ mtimeMs: Number(info.mtimeMs || 0),
84
+ path: pathValue,
85
+ size: type === 'directory' ? 0 : Number(info.size || 0),
86
+ type,
87
+ };
88
+ }
89
+
77
90
  function replacePathPrefix(pathValue, oldPrefix, newPrefix) {
78
91
  if (pathValue === oldPrefix) {
79
92
  return newPrefix;
@@ -94,6 +107,14 @@ function sortWorkspacePaths(paths = [], direction = 'asc') {
94
107
  });
95
108
  }
96
109
 
110
+ function sortDirectoryEntries(entries = []) {
111
+ return [...entries].sort((left, right) => {
112
+ if (left.isDirectory() && !right.isDirectory()) return -1;
113
+ if (!left.isDirectory() && right.isDirectory()) return 1;
114
+ return left.name.localeCompare(right.name, undefined, { sensitivity: 'base' });
115
+ });
116
+ }
117
+
97
118
  async function cleanupPaths(paths = []) {
98
119
  await Promise.allSettled(paths.filter(Boolean).map((pathValue) => rm(pathValue, { force: true })));
99
120
  }
@@ -315,6 +336,10 @@ export class VaultFileStore {
315
336
  return this.readContentFile(filePath, 'markdown');
316
337
  }
317
338
 
339
+ async readBaseFile(filePath) {
340
+ return this.readContentFile(filePath, 'base');
341
+ }
342
+
318
343
  async readExcalidrawFile(filePath) {
319
344
  return this.readContentFile(filePath, 'excalidraw');
320
345
  }
@@ -357,6 +382,10 @@ export class VaultFileStore {
357
382
  return this.writeContentFile(filePath, content, 'markdown', options);
358
383
  }
359
384
 
385
+ async writeBaseFile(filePath, content, options = {}) {
386
+ return this.writeContentFile(filePath, content, 'base', options);
387
+ }
388
+
360
389
  async writeExcalidrawFile(filePath, content, options = {}) {
361
390
  return this.writeContentFile(filePath, content, 'excalidraw', options);
362
391
  }
@@ -398,8 +427,8 @@ export class VaultFileStore {
398
427
  const timestamp = createAttachmentTimestamp(now);
399
428
  const baseFileName = `${attachmentStem}-${timestamp}`;
400
429
  let collisionIndex = 0;
401
- let storedPath = '';
402
- let absolutePath = '';
430
+ let storedPath;
431
+ let absolutePath;
403
432
 
404
433
  do {
405
434
  const suffix = collisionIndex > 0 ? `-${collisionIndex + 1}` : '';
@@ -765,7 +794,8 @@ export class VaultFileStore {
765
794
  }
766
795
 
767
796
  async countVaultFiles() {
768
- return this.countFilesInDir(this.vaultDir);
797
+ const snapshot = await this.scanWorkspaceState();
798
+ return snapshot.vaultFileCount;
769
799
  }
770
800
 
771
801
  async reconcileSidecars({
@@ -837,7 +867,10 @@ export class VaultFileStore {
837
867
 
838
868
  async scanWorkspaceState() {
839
869
  const entries = new Map();
870
+ const filePaths = [];
840
871
  const metadata = new Map();
872
+ const markdownPaths = [];
873
+ let vaultFileCount = 0;
841
874
 
842
875
  const visitDirectory = async (dirPath) => {
843
876
  let dirEntries;
@@ -847,64 +880,88 @@ export class VaultFileStore {
847
880
  return;
848
881
  }
849
882
 
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
- });
883
+ const sorted = sortDirectoryEntries(dirEntries);
855
884
 
856
- for (const entry of sorted) {
885
+ await mapWithConcurrency(sorted, WORKSPACE_SCAN_CONCURRENCY, async (entry) => {
857
886
  if (isIgnoredVaultEntry(entry.name)) {
858
- continue;
887
+ return;
859
888
  }
860
889
 
861
890
  const fullPath = join(dirPath, entry.name);
862
891
  const relativePath = toVaultRelativePath(this.vaultDir, fullPath).replace(/\\/g, '/');
892
+ const direntKind = entry.isDirectory()
893
+ ? 'directory'
894
+ : (entry.isFile() ? 'file' : null);
863
895
 
864
- if (entry.isDirectory()) {
896
+ if (direntKind === 'directory') {
865
897
  entries.set(relativePath, createWorkspaceEntry(relativePath, 'directory'));
866
898
  try {
867
899
  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
- });
900
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'directory', info));
875
901
  } catch {
876
902
  // Ignore transient directories that disappear during scans.
877
903
  }
878
904
  await visitDirectory(fullPath);
879
- continue;
905
+ return;
880
906
  }
881
907
 
882
- if (!isVaultFilePath(entry.name)) {
883
- continue;
908
+ if (direntKind === 'file') {
909
+ if (!isVaultFilePath(entry.name)) {
910
+ return;
911
+ }
912
+
913
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
914
+ filePaths.push(relativePath);
915
+ vaultFileCount += 1;
916
+ if (isMarkdownFilePath(relativePath)) {
917
+ markdownPaths.push(relativePath);
918
+ }
919
+ try {
920
+ const info = await stat(fullPath);
921
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'file', info));
922
+ } catch {
923
+ // Ignore transient files that disappear during scans.
924
+ }
925
+ return;
884
926
  }
885
927
 
886
- entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
887
928
  try {
888
929
  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
- });
930
+ if (info.isDirectory()) {
931
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'directory'));
932
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'directory', info));
933
+ await visitDirectory(fullPath);
934
+ return;
935
+ }
936
+
937
+ if (!info.isFile() || !isVaultFilePath(entry.name)) {
938
+ return;
939
+ }
940
+
941
+ entries.set(relativePath, createWorkspaceEntry(relativePath, 'file'));
942
+ metadata.set(relativePath, createWorkspaceMetadata(relativePath, 'file', info));
943
+ filePaths.push(relativePath);
944
+ vaultFileCount += 1;
945
+ if (isMarkdownFilePath(relativePath)) {
946
+ markdownPaths.push(relativePath);
947
+ }
896
948
  } catch {
897
- // Ignore transient files that disappear during scans.
949
+ // Ignore transient entries that disappear during scans.
898
950
  }
899
- }
951
+ });
900
952
  };
901
953
 
902
954
  await visitDirectory(this.vaultDir);
955
+ filePaths.sort((left, right) => left.localeCompare(right, undefined, { sensitivity: 'base' }));
956
+ markdownPaths.sort((left, right) => left.localeCompare(right, undefined, { sensitivity: 'base' }));
903
957
 
904
958
  return {
905
959
  entries,
960
+ filePaths,
906
961
  metadata,
962
+ markdownPaths,
907
963
  scannedAt: Date.now(),
964
+ vaultFileCount,
908
965
  };
909
966
  }
910
967
  }