collabmd 0.1.43 → 0.1.44

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 (586) hide show
  1. package/bin/collabmd.js +1 -2
  2. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-CbSISC1w.js +1 -0
  3. package/dist/client/assets/{abnfDiagram-VRR7QNED-C-CM0mGi.js → abnfDiagram-N423BO3Z-CUMTFJhI.js} +1 -1
  4. package/dist/client/assets/ar-SA-PQUY64WN-xjXgbW6d.js +10 -0
  5. package/dist/client/assets/arc-DgcGdgmL.js +1 -0
  6. package/dist/client/assets/architecture-TIHT7OUA-CsHfPErM.js +1 -0
  7. package/dist/client/assets/architectureDiagram-T3A2C74G-w25m71oV.js +36 -0
  8. package/dist/client/assets/asciiarmor-C_eisQCp.js +1 -0
  9. package/dist/client/assets/{asn1-Dr8qZg38.js → asn1-DCl_8MCW.js} +1 -1
  10. package/dist/client/assets/{asterisk-Bja0s6e1.js → asterisk-BEn0Cwpx.js} +1 -1
  11. package/dist/client/assets/az-AZ-OXJXL76K-4JkO4Pca.js +1 -0
  12. package/dist/client/assets/bases-preview-controller-2pLHk0uk.js +143 -0
  13. package/dist/client/assets/bg-BG-W2GKIJDF-DnkH_o81.js +5 -0
  14. package/dist/client/assets/{blockDiagram-677ZJIJ3-BLomrZyt.js → blockDiagram-VBNYF7ZC-CipJt9Jl.js} +5 -5
  15. package/dist/client/assets/bn-BD-TGL7M4PJ-CG4JkmtP.js +3 -0
  16. package/dist/client/assets/bn-IN-BKETKYEH-CG4JkmtP.js +3 -0
  17. package/dist/client/assets/browser-utils-CKtI_rZl.js +1 -0
  18. package/dist/client/assets/button-BCEiw4Rw.js +1 -0
  19. package/dist/client/assets/c4Diagram-5PPSVZJV-B5ktVx6g.js +10 -0
  20. package/dist/client/assets/ca-ES-LD5SCRVV-U6_TVMX9.js +8 -0
  21. package/dist/client/assets/channel-4Jkmq93I.js +1 -0
  22. package/dist/client/assets/{chunk-32BRIVSS-BD6LQmvI.js → chunk-2GRJ4B5K-DhnlUv3F.js} +1 -1
  23. package/dist/client/assets/chunk-3NCLNEKW-Y2Jf_LI-.js +1 -0
  24. package/dist/client/assets/{chunk-HOUHSVGY-DX1huN9x.js → chunk-4I5QYGJK-CCB2YcIH.js} +1 -1
  25. package/dist/client/assets/{chunk-5FCAYU7R-DNtJmW0j.js → chunk-5FCAYU7R-Dh5nylU8.js} +1 -1
  26. package/dist/client/assets/{chunk-5HE753X5-o8-OCfIL.js → chunk-5HE753X5-Bw-yg4kO.js} +1 -1
  27. package/dist/client/assets/{chunk-5JV3BV7I-DKfYBAeY.js → chunk-5JV3BV7I-Cy5pj3QY.js} +1 -1
  28. package/dist/client/assets/{chunk-EX3LRPZG-DNVm3Wj1.js → chunk-5RXB4S5H-BWrwFqMI.js} +3 -3
  29. package/dist/client/assets/{chunk-5TONJI2A-DOX2waSJ.js → chunk-5TONJI2A-DQOY3q1H.js} +1 -1
  30. package/dist/client/assets/{chunk-MOJQB5TN-BEEcDvmL.js → chunk-6Q2QTUOP-CPlWzBtc.js} +1 -1
  31. package/dist/client/assets/chunk-7XWMRXBY-CfMzEq80.js +1 -0
  32. package/dist/client/assets/chunk-7Z6QIM7H-BP9Pdsm9.js +10 -0
  33. package/dist/client/assets/chunk-AXR3VHVW-0GTk_evH.js +41 -0
  34. package/dist/client/assets/{chunk-BIQX33UG-CuPbkyWp.js → chunk-BIQX33UG-DZEsGuSn.js} +1 -1
  35. package/dist/client/assets/{chunk-CQNSW5MT-BbEh_krl.js → chunk-CQNSW5MT-B8S09OIh.js} +1 -1
  36. package/dist/client/assets/{chunk-CYSBUYHQ-CbOq7Rc1.js → chunk-CYSBUYHQ-C1Rf4art.js} +1 -1
  37. package/dist/client/assets/{chunk-Z24UKHUO-BQ6-bK37.js → chunk-CZQZEIFA-DT3N9fo7.js} +4 -4
  38. package/dist/client/assets/{chunk-EMLP6XTP-BoneA0Uo.js → chunk-EMLP6XTP-RLD4nXpI.js} +1 -1
  39. package/dist/client/assets/{chunk-V7JOEXUC-Bo_5WqHt.js → chunk-GF5L2VYU-DkJpO7ff.js} +3 -3
  40. package/dist/client/assets/chunk-I66GZJ75-CVFiiffQ.js +127 -0
  41. package/dist/client/assets/{chunk-FWX5IMBZ-Ch9_j2qF.js → chunk-J7OUQ5F2-4CEb7pvH.js} +2 -2
  42. package/dist/client/assets/{chunk-JG7HCLWE-Dk4_aECj.js → chunk-JG7HCLWE-BYfiSaVt.js} +1 -1
  43. package/dist/client/assets/{chunk-PUDLZKDR-C-JwZaMh.js → chunk-JQJVKLGR-cx8X_24v.js} +5 -5
  44. package/dist/client/assets/{chunk-VR4S4FIN-uXjSaaA7.js → chunk-KBJHAD2P-CB_3zWUf.js} +1 -1
  45. package/dist/client/assets/{chunk-KEIR6QF5-Dj-OpFgW.js → chunk-KEIR6QF5-BICK3FdT.js} +31 -31
  46. package/dist/client/assets/{chunk-MOZMSUNE-BgA8jCvb.js → chunk-MOZMSUNE-XVucA-n6.js} +1 -1
  47. package/dist/client/assets/chunk-NSK5VX7P-TLH37VXI.js +2 -0
  48. package/dist/client/assets/{chunk-OSBZ3O6U-CX9EQ5t2.js → chunk-OSBZ3O6U-CrKZOUOr.js} +1 -1
  49. package/dist/client/assets/{chunk-QBLGF6JB-C9zGMqvP.js → chunk-QBLGF6JB-CxAyS2mW.js} +1 -1
  50. package/dist/client/assets/{chunk-ZGVPDNZ5-Bmet6b46.js → chunk-QR6OTTB3-CDAA_5Ib.js} +3 -3
  51. package/dist/client/assets/{chunk-R7FJI6CG-BpBhcF6R.js → chunk-R7FJI6CG-Cnn3gE-Y.js} +1 -1
  52. package/dist/client/assets/chunk-RYQCIY6F-D-a0zH8K.js +1 -0
  53. package/dist/client/assets/{chunk-SRAX5OIU-Bpn6XoyU.js → chunk-SRAX5OIU-KFQikY-4.js} +1 -1
  54. package/dist/client/assets/{chunk-U6XO7XAA-CR0BSRFR.js → chunk-U6XO7XAA-BFxjP5U3.js} +1 -1
  55. package/dist/client/assets/chunk-UBXNYLIW-Bhk-PbFK.js +1 -0
  56. package/dist/client/assets/{chunk-C7G6YPKG-C97QUAKv.js → chunk-W5SLKNZC-BdNSCxZ9.js} +1 -1
  57. package/dist/client/assets/{chunk-Q4XR5HBZ-Dyewsidf.js → chunk-WRU74C26-h6_XkD3_.js} +7 -7
  58. package/dist/client/assets/{chunk-XXDRQBXY-Bq6zMMOx.js → chunk-XXDRQBXY-BvKO0v-W.js} +1 -1
  59. package/dist/client/assets/{chunk-YOTPTUD7-CjHV8V6f.js → chunk-YOTPTUD7-D0vRKqYp.js} +1 -1
  60. package/dist/client/assets/{chunk-Z5NKEFVG-DC2Lcs-4.js → chunk-Z5NKEFVG-q6fHH75m.js} +2 -2
  61. package/dist/client/assets/{chunk-ZIRB5QZD-C6fEPe3t.js → chunk-ZIRB5QZD-O39ZBUk3.js} +5 -5
  62. package/dist/client/assets/classDiagram-JCYQIIEL-L7lsyW_w.js +1 -0
  63. package/dist/client/assets/classDiagram-v2-OCEON4UE-L7lsyW_w.js +1 -0
  64. package/dist/client/assets/clike-D_6L3tnO.js +1 -0
  65. package/dist/client/assets/cmake-84nbDH0I.js +1 -0
  66. package/dist/client/assets/coffeescript-De_zI4J0.js +1 -0
  67. package/dist/client/assets/{room-BhC-3iml.js → comment-threads-D-iKphIp.js} +2 -2
  68. package/dist/client/assets/commonlisp-DgAKBe0r.js +1 -0
  69. package/dist/client/assets/cose-bilkent-JH36ORCC-Cm_QF_yb.js +1 -0
  70. package/dist/client/assets/crystal-Bsdphhtm.js +1 -0
  71. package/dist/client/assets/cs-CZ-OFPU5DBV-BmFAIhqX.js +7 -0
  72. package/dist/client/assets/css-CnaYoQib.js +1 -0
  73. package/dist/client/assets/cynefin-VYW2F7L2-Ds2Fw2Y0.js +1 -0
  74. package/dist/client/assets/cynefinDiagram-MW4NZA55-CJxXfJek.js +62 -0
  75. package/dist/client/assets/cytoscape.esm-B-NFISlW.js +321 -0
  76. package/dist/client/assets/{d-BhMjBjQP.js → d-DWkQyNnU.js} +1 -1
  77. package/dist/client/assets/da-DK-FRDJFYWF-H387Jw8B.js +2 -0
  78. package/dist/client/assets/dagre-Buvkdvvj.js +1 -0
  79. package/dist/client/assets/{dagre-VKFMJZFB-CSQjHsP2.js → dagre-VZM6K2ZE-L1xArOGs.js} +2 -2
  80. package/dist/client/assets/de-CH-ZG7H3QK3-C_groygo.js +11 -0
  81. package/dist/client/assets/de-DE-SIJYH4IH-C_groygo.js +11 -0
  82. package/dist/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  83. package/dist/client/assets/{diagram-OA4YK3LP-ruJmRhl8.js → diagram-7IWD3JNH-B2d2Bm15.js} +1 -1
  84. package/dist/client/assets/{diagram-FQU43EPY-D0RPbiE5.js → diagram-B4RE2ZJO-NP4UAwjR.js} +1 -1
  85. package/dist/client/assets/{diagram-NH7WQ7WH-CaTayrXM.js → diagram-LBJQPF4R-D1FJQV8t.js} +1 -1
  86. package/dist/client/assets/{diagram-G47NLZAW-XriksZQN.js → diagram-Q27KOJAE-DylDuwor.js} +13 -13
  87. package/dist/client/assets/diagram-UB23O5K3-DJcKCwv9.js +41 -0
  88. package/dist/client/assets/dist-3bgCp7iY.js +1 -0
  89. package/dist/client/assets/dist-BH87JoHx.js +11 -0
  90. package/dist/client/assets/{dist-BUxzPC-Q.js → dist-BIkPRZO7.js} +3 -3
  91. package/dist/client/assets/{dist-qx0Iv9vM.js → dist-B_J_HbC0.js} +1 -1
  92. package/dist/client/assets/dist-BqCsFpx4.js +1 -0
  93. package/dist/client/assets/dist-C11hHqv_.js +13 -0
  94. package/dist/client/assets/{dist-YCtFk_v0.js → dist-C2JHCt8U.js} +1 -1
  95. package/dist/client/assets/{dist-D3Tmtejd.js → dist-CYZmbokb.js} +2 -2
  96. package/dist/client/assets/dist-CZjTtmTu.js +1 -0
  97. package/dist/client/assets/{dist-C__bPRpd.js → dist-Cig4Ov_X.js} +1 -1
  98. package/dist/client/assets/{dist-DXTgEdvE.js → dist-CnL7Y2sM.js} +1 -1
  99. package/dist/client/assets/dist-CqQEC8gR.js +1 -0
  100. package/dist/client/assets/{dist-CQTo4Y46.js → dist-D2AQ-76g.js} +1 -1
  101. package/dist/client/assets/dist-D4Rzqod1.js +1 -0
  102. package/dist/client/assets/dist-D5sn-mwk.js +9 -0
  103. package/dist/client/assets/dist-D7G-n87v.js +1 -0
  104. package/dist/client/assets/dist-DCzuX1AF.js +1 -0
  105. package/dist/client/assets/dist-DGb27Dl6.js +1 -0
  106. package/dist/client/assets/{dist-CHJCI2AN.js → dist-DK5Gs2wa.js} +1 -1
  107. package/dist/client/assets/dist-DRqOrNgN.js +1 -0
  108. package/dist/client/assets/{dist-B0NFuQC3.js → dist-DetkMS_4.js} +1 -1
  109. package/dist/client/assets/dist-DhLvC8DS.js +2 -0
  110. package/dist/client/assets/{dist-D1W8XQvM.js → dist-Dp6FVkQ1.js} +1 -1
  111. package/dist/client/assets/{dist-D4MWz_rC.js → dist-Drp8uu5J.js} +1 -1
  112. package/dist/client/assets/dist-DtbjNB28.js +1 -0
  113. package/dist/client/assets/dist-DyrYcvpo2.js +1 -0
  114. package/dist/client/assets/dist-GrygD2zE.js +1 -0
  115. package/dist/client/assets/{dist-CzNyYE-S.js → dist-HmEpWUow.js} +1 -1
  116. package/dist/client/assets/{dist-D7-13adP.js → dist-JYEDRrPT.js} +1 -1
  117. package/dist/client/assets/dist-MvcV4190.js +1 -0
  118. package/dist/client/assets/{dist-gGmuzNio.js → dist-RTa81Km7.js} +1 -1
  119. package/dist/client/assets/{dockerfile-BLkNEvjs.js → dockerfile-DJkHQgkl.js} +1 -1
  120. package/dist/client/assets/drawio-editor-DDvFoarP.js +9 -0
  121. package/dist/client/assets/drawio-embed-controller-BD1GTRwn.js +1 -0
  122. package/dist/client/assets/drawioEditor-Bu5grlH5.js +2 -0
  123. package/dist/client/assets/{dylan-C6jEEEk-.js → dylan-BCDoL_-p.js} +1 -1
  124. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-exNgBUy6.js → ebnfDiagram-BXEA7PRR-nw0wmA6y.js} +1 -1
  125. package/dist/client/assets/{ecl-BSZaIHnp.js → ecl-BVIeWmwY.js} +1 -1
  126. package/dist/client/assets/editor-session-DGlpiAsK.js +16 -0
  127. package/dist/client/assets/el-GR-IEE2CGI2-BkT6YT54.js +7 -0
  128. package/dist/client/assets/en-GADW4C6J-DQ6zyCEM.js +1 -0
  129. package/dist/client/assets/{erDiagram-Q63AITRT-CoYS49kY.js → erDiagram-JOGREHBK-cYUpEKpf.js} +3 -3
  130. package/dist/client/assets/{erlang-DaB2Rkuy.js → erlang-BV0c4Hdn.js} +1 -1
  131. package/dist/client/assets/es-ES-TVVPWKV5-CpPKJXTM.js +12 -0
  132. package/dist/client/assets/eu-ES-CGBMFQDT-Bu3N2493.js +8 -0
  133. package/dist/client/assets/eventmodeling-45OFAUF4-CLEiVx5s.js +1 -0
  134. package/dist/client/assets/excalidraw-editor-BHu6k8d4.js +9 -0
  135. package/dist/client/assets/excalidraw-editor-Cr_184EF.css +1 -0
  136. package/dist/client/assets/excalidraw-embed-controller-y2fenN_g.js +1 -0
  137. package/dist/client/assets/excalidraw-scene-BvsQ6mLP.js +176 -0
  138. package/dist/client/assets/excalidrawEditor-4vFE--Uw.js +2 -0
  139. package/dist/client/assets/export-page-Cby8JzPO.js +39 -0
  140. package/dist/client/assets/exportDocument-CRHCfsdo.js +2 -0
  141. package/dist/client/assets/fa-IR-IE6XAPR4-BEvLCORD.js +9 -0
  142. package/dist/client/assets/{factor-D7LVTn2l.js → factor-LKH5gN8L.js} +1 -1
  143. package/dist/client/assets/fi-FI-P7TKNHRM-DI0q8iSX.js +6 -0
  144. package/dist/client/assets/{file-history-view-controller-CK3oHDCT.js → file-history-view-controller-BDjEV9xJ.js} +11 -11
  145. package/dist/client/assets/flowDiagram-UKHOOZJN-D0ypP0Ez.js +1 -0
  146. package/dist/client/assets/fr-FR-QI2XZNT7-y8kXd8LA.js +12 -0
  147. package/dist/client/assets/ganttDiagram-PKOTCBZU-BnM97BCT.js +292 -0
  148. package/dist/client/assets/{git-diff-view-controller-qorJ_Quo.js → git-diff-view-controller-DgdM1aqb.js} +24 -24
  149. package/dist/client/assets/git-panel-controller-BDTR2HVp.js +207 -0
  150. package/dist/client/assets/gitGraph-TEB2WS4Q-CZFBqwW-.js +1 -0
  151. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-x3NetpXU.js → gitGraphDiagram-DS77QQ5N-BQpQhjuN.js} +3 -3
  152. package/dist/client/assets/gl-ES-TLYCNOZZ-Br-Fhff-.js +6 -0
  153. package/dist/client/assets/groovy-CUpZ7dEl.js +1 -0
  154. package/dist/client/assets/he-IL-ZX43XLGP-qKQq6V9X.js +9 -0
  155. package/dist/client/assets/hi-IN-UTYRMTUF-DOUcwrDO.js +3 -0
  156. package/dist/client/assets/hu-HU-AJOSEBW6-FqTyvHlD.js +3 -0
  157. package/dist/client/assets/id-ID-ETLTVG6C-CQqh3CLS.js +8 -0
  158. package/dist/client/assets/image-XGD7JQR6-XDUWHRpO.js +1 -0
  159. package/dist/client/assets/image-blob-reduce.esm-Dj7YBvMv.js +2 -0
  160. package/dist/client/assets/index-7xOyXDhP.css +1 -0
  161. package/dist/client/assets/index-Bz1KuQ6y.js +2 -0
  162. package/dist/client/assets/info-DKCQHKI2--1InqQeT.js +1 -0
  163. package/dist/client/assets/{infoDiagram-FWYZ7A6U-DyfGrH8z.js → infoDiagram-6WML65LV-DYB8HCDQ.js} +1 -1
  164. package/dist/client/assets/init-C-OQMol4.js +1 -0
  165. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-BOts527_.js → ishikawaDiagram-WSZJBQD7-Coz_P3t6.js} +2 -2
  166. package/dist/client/assets/it-IT-B4B6TP6L-V-yK3SZz.js +12 -0
  167. package/dist/client/assets/ja-JP-IYKVURR5-BQKBXRpX.js +12 -0
  168. package/dist/client/assets/javascript-BWjar7HY.js +1 -0
  169. package/dist/client/assets/javascript-D-FtdkNC.js +1 -0
  170. package/dist/client/assets/{journeyDiagram-5HDEW3XC-DF37OVrZ.js → journeyDiagram-NVQOT4AX-B6edChce.js} +3 -3
  171. package/dist/client/assets/{react-lCSYwAWP.js → jsx-runtime-BpzPEenQ.js} +1 -1
  172. package/dist/client/assets/kaa-SE2BUIKX-CZ5kfwPg.js +1 -0
  173. package/dist/client/assets/kab-KAB-Y3GLKXLR-Do7GWfuN.js +4 -0
  174. package/dist/client/assets/{kanban-definition-HUTT4EX6-nCjbm1T6.js → kanban-definition-27J2QSJJ-BFd9-cLc.js} +3 -3
  175. package/dist/client/assets/{katex-B7rAX3Vi.js → katex-CXMH3UgJ.js} +3 -3
  176. package/dist/client/assets/kk-KZ-ABWUFVOH-BpqVciQz.js +1 -0
  177. package/dist/client/assets/{km-KH-PBSJLZ2M-Bh1DsarT.js → km-KH-PCWDKPHP-DSmy5shj.js} +3 -3
  178. package/dist/client/assets/ko-KR-7JQDXKGM-N42lep78.js +5 -0
  179. package/dist/client/assets/ku-TR-NAH2Q5B7-K8LLl9fk.js +6 -0
  180. package/dist/client/assets/{line-h44YiLOQ.js → line-B_S_S8kV.js} +1 -1
  181. package/dist/client/assets/linear-n-3HSMUF.js +1 -0
  182. package/dist/client/assets/lt-LT-VQFYRSNQ-BmOd0ALn.js +3 -0
  183. package/dist/client/assets/lv-LV-T62VSYUM-B22WdPhp.js +4 -0
  184. package/dist/client/assets/main-Ci07m9oP.js +152 -0
  185. package/dist/client/assets/{mermaid-parser.core-ygm3cZ_w.js → mermaid-parser.core-CUVdebAV.js} +2 -2
  186. package/dist/client/assets/mermaid.core-DN-lF51U.js +11 -0
  187. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CTpHMYFE.js → mindmap-definition-FAOFIHXS-C9PQ38Al.js} +3 -3
  188. package/dist/client/assets/mr-IN-V4FHLCJE-XX069tpm.js +9 -0
  189. package/dist/client/assets/{mumps-CW_TBmxz.js → mumps-BSzj6Xyz.js} +1 -1
  190. package/dist/client/assets/my-MM-E3SQ6E54-cst_-5SB.js +1 -0
  191. package/dist/client/assets/nb-NO-MLNOFN5H-Bu2URWko.js +8 -0
  192. package/dist/client/assets/nl-NL-D5L3ZV4M-BqrV0btt.js +13 -0
  193. package/dist/client/assets/nn-NO-NNHDGPKB-DK-xZaWM.js +4 -0
  194. package/dist/client/assets/{nsis-AQ_alPln.js → nsis-CfSuhXs5.js} +1 -1
  195. package/dist/client/assets/{ntriples-d28e9m0E.js → ntriples-B9h1VB_g.js} +1 -1
  196. package/dist/client/assets/oc-FR-DWCRF55G-BZ5Po5R6.js +4 -0
  197. package/dist/client/assets/{ordinal-hYBb2elL.js → ordinal-BDEzSJ7C.js} +1 -1
  198. package/dist/client/assets/pa-IN-3JSAY44M-BZQSjKrS.js +4 -0
  199. package/dist/client/assets/packet-7NZHBO7P-BGMXB0XL.js +1 -0
  200. package/dist/client/assets/path-fybaL0A-.js +1 -0
  201. package/dist/client/assets/{pegDiagram-2B236MQR-Bq9qITsk.js → pegDiagram-VL7TDLO6-BMZUrSaU.js} +1 -1
  202. package/dist/client/assets/percentages-ETZPVQEE-DFxFqXgH.js +1 -0
  203. package/dist/client/assets/perl-BkSkiI9m.js +1 -0
  204. package/dist/client/assets/{pica-D0pwGKw7.js → pica-xkWDouSg.js} +2 -2
  205. package/dist/client/assets/pie-RZYD4A2V-DgYg3tCt.js +1 -0
  206. package/dist/client/assets/{pieDiagram-ENE6RG2P--ax2FUc8.js → pieDiagram-7S7Q4E2Y-h8kbCL9o.js} +2 -2
  207. package/dist/client/assets/{pl-PL-EERMMCTN-dIzrbxJt.js → pl-PL-ACURYKP3-qcEOSfCk.js} +4 -4
  208. package/dist/client/assets/{powershell-CzG71I4L.js → powershell-BcIto6Sf.js} +1 -1
  209. package/dist/client/assets/preview-diagram-utils-n_bbJA9V.js +1 -0
  210. package/dist/client/assets/preview-render-compiler-BSaQO_p3.js +35 -0
  211. package/dist/client/assets/preview-render-compiler-csGM5ZFz.js +1 -0
  212. package/dist/client/assets/preview-render-profile-BZzGSg6K.js +22 -0
  213. package/dist/client/assets/preview-render-worker-B42LWvrD.js +60 -0
  214. package/dist/client/assets/pt-BR-LOX7MLGD-DLueHSyZ.js +10 -0
  215. package/dist/client/assets/pt-PT-CZ2U2RFQ-BJ-GAEm6.js +12 -0
  216. package/dist/client/assets/{pug-Ck0YjsGM.js → pug-Wky5Dnfy.js} +1 -1
  217. package/dist/client/assets/puppet-BZyAS7I4.js +1 -0
  218. package/dist/client/assets/python-B_1Jd8HM.js +1 -0
  219. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-f0PUv7DH.js → quadrantDiagram-CIZ2JOQS-CkElyfMi.js} +2 -2
  220. package/dist/client/assets/{quick-switcher-controller-CVRUPEKp.js → quick-switcher-controller-CoiYvllm.js} +4 -4
  221. package/dist/client/assets/r-CxDmU1I4.js +1 -0
  222. package/dist/client/assets/radar-I7S5WNFK-Ag-zp_Rq.js +1 -0
  223. package/dist/client/assets/railroad-3IZDKUUU-aibJDIDV.js +1 -0
  224. package/dist/client/assets/railroad-abnf-AHOZXSZD-BBMEuvIl.js +1 -0
  225. package/dist/client/assets/railroad-ebnf-EBAXGLYW-Be1nseej.js +1 -0
  226. package/dist/client/assets/railroad-peg-LSFZ7HO6-DIvD-Eyb.js +1 -0
  227. package/dist/client/assets/{railroadDiagram-RFXS5EU6-CZD_9g-4.js → railroadDiagram-AXF67PYL-c75gnikD.js} +1 -1
  228. package/dist/client/assets/{requirementDiagram-TGXJPOKE-C4Jwr3TE.js → requirementDiagram-LRYGKXZP-mNxKLuHS.js} +2 -2
  229. package/dist/client/assets/ro-RO-2HECL2X6-CJUvKAf0.js +12 -0
  230. package/dist/client/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  231. package/dist/client/assets/room-CDrmIdDt.js +1 -0
  232. package/dist/client/assets/{rough.esm-CSKSodPl.js → rough.esm-Dy-Kn_BL.js} +1 -1
  233. package/dist/client/assets/ru-RU-HAYNXO46-BWSlvTrt.js +10 -0
  234. package/dist/client/assets/ruby-BjXV7-Qa.js +1 -0
  235. package/dist/client/assets/runtime-config-loader-BHGniHP5.js +1 -0
  236. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-B2B2mdB6.js → sankeyDiagram-W5VNT64P-0OhplksI.js} +2 -2
  237. package/dist/client/assets/{scheme-tChLYBuY.js → scheme-D9qYN0V5.js} +1 -1
  238. package/dist/client/assets/{segmented-control-DhUkW6ro.js → segmented-control-DJrHSz8M.js} +1 -1
  239. package/dist/client/assets/sequenceDiagram-SI44F4Z6-BJ_yAocC.js +162 -0
  240. package/dist/client/assets/{shell-Du5Qg9im.js → shell-DwuoZtxw.js} +1 -1
  241. package/dist/client/assets/si-LK-W5KNS4H6-DGGCsn7k.js +1 -0
  242. package/dist/client/assets/{simple-mode-DRpGK0lJ.js → simple-mode-DXiLM1-G.js} +1 -1
  243. package/dist/client/assets/sk-SK-7K2CFGDV-CY4uTYgQ.js +7 -0
  244. package/dist/client/assets/sl-SI-OXV2QZWW-2-weqaBY.js +6 -0
  245. package/dist/client/assets/sql-DuQMFDvy.js +1 -0
  246. package/dist/client/assets/src-oBChb5qS.js +1 -0
  247. package/dist/client/assets/{stateDiagram-2N3HPSRC-B1niwAq-.js → stateDiagram-OKZ733FA-Cc83O86s.js} +1 -1
  248. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-B1-BufUk.js +1 -0
  249. package/dist/client/assets/{stex-sDrdk2BW.js → stex-DNzd62Q_.js} +1 -1
  250. package/dist/client/assets/{stylus-DLLZ8dgm.js → stylus-BOVgKnng.js} +1 -1
  251. package/dist/client/assets/subset-shared.chunk-BXlA-9CO.js +1 -0
  252. package/dist/client/assets/{subset-worker.chunk-Cuw2UvhD.js → subset-worker.chunk-CoaGye2U.js} +1 -1
  253. package/dist/client/assets/sv-SE-JTOBZRGL-9-IUtVkO.js +12 -0
  254. package/dist/client/assets/swimlanes-SLNWSIFB-oVTWEJIj.js +2 -0
  255. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-C5OTVwEu.js +8 -0
  256. package/dist/client/assets/ta-IN-KFAVKXGT-gHO6Q_DH.js +6 -0
  257. package/dist/client/assets/{textile-CyzeGT9J.js → textile-C4jVoHG1.js} +1 -1
  258. package/dist/client/assets/th-TH-VDMSCPDL-BvJuw6PJ.js +1 -0
  259. package/dist/client/assets/tiki-AK6FwT8q.js +1 -0
  260. package/dist/client/assets/timeline-definition-Z64GVDOM-BWDAGTHz.js +120 -0
  261. package/dist/client/assets/toml-BPTmHmyx.js +1 -0
  262. package/dist/client/assets/tr-TR-CEZ6GX45-CG6UU3Su.js +4 -0
  263. package/dist/client/assets/treeView-QDETBFTQ-uHZ-3Fz8.js +1 -0
  264. package/dist/client/assets/treemap-6X3UGDF4-BnUKyy3l.js +1 -0
  265. package/dist/client/assets/{ttcn-BePYh-hG.js → ttcn-PPSTk1ow.js} +1 -1
  266. package/dist/client/assets/{ttcn-cfg-CY0aot7Q.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
  267. package/dist/client/assets/uk-UA-Q3H3OXQC-CSuIg_DY.js +6 -0
  268. package/dist/client/assets/uz-UZ-NGCSWWPX-mom7rxSP.js +1 -0
  269. package/dist/client/assets/vault-api-client-sLB2bo56.js +1 -0
  270. package/dist/client/assets/vault-paths-CVkuh0j-.js +5 -0
  271. package/dist/client/assets/vault-utils-wdQ0RNR9.js +1 -0
  272. package/dist/client/assets/{vennDiagram-L72KCM5P-DPQ9kbN2.js → vennDiagram-T6HMQDX7-LOSsnlMB.js} +3 -3
  273. package/dist/client/assets/{verilog-BKSQ5RMB.js → verilog-7LoJAqYT.js} +1 -1
  274. package/dist/client/assets/{vhdl-CBDDcIJ_.js → vhdl-kS471soi.js} +1 -1
  275. package/dist/client/assets/vi-VN-P3NDEVPS-BB0Fu9ck.js +7 -0
  276. package/dist/client/assets/wardley-OPB4EBWU-Da7TLC2F.js +1 -0
  277. package/dist/client/assets/{wardleyDiagram-EHGQE667-5VW6_Csg.js → wardleyDiagram-T6FBY63Y-BxII3foY.js} +35 -35
  278. package/dist/client/assets/{xquery-Cda5K8Gy.js → xquery-BKJx4mf9.js} +1 -1
  279. package/dist/client/assets/{xychartDiagram-FW5EYKEG-Bj0UwltS.js → xychartDiagram-ELKLHX3M-B-pTEjju.js} +4 -4
  280. package/dist/client/assets/yjs-provider-reset-guard-Cox4nxwu.js +4 -0
  281. package/dist/client/assets/z80-Co3PbHdE.js +1 -0
  282. package/dist/client/assets/zh-CN-SS3O57GA-Bj8wsiMe.js +11 -0
  283. package/dist/client/assets/zh-HK-LWJT3VCF-DOTquTCh.js +1 -0
  284. package/dist/client/assets/zh-TW-VJXC72RT-B48PRo-l.js +13 -0
  285. package/dist/client/drawio-editor.html +2 -2
  286. package/dist/client/excalidraw-editor.html +2 -2
  287. package/dist/client/export-document.html +2 -2
  288. package/dist/client/index.html +655 -4
  289. package/package.json +19 -20
  290. package/src/client/app/index.html +652 -1
  291. package/src/client/app/main-entry.js +0 -2
  292. package/src/client/application/app-shell/git-feature.js +3 -8
  293. package/src/client/application/app-shell/ui-feature-shell.js +13 -0
  294. package/src/client/application/app-shell/ui-feature-toolbar.js +1 -8
  295. package/src/client/application/diagram-chrome.js +126 -8
  296. package/src/client/application/diagram-preview-export.js +6 -24
  297. package/src/client/application/diagram-preview-hydrator.js +217 -22
  298. package/src/client/application/mermaid-preview-hydrator.js +46 -14
  299. package/src/client/application/plantuml-preview-hydrator.js +34 -10
  300. package/src/client/application/preview-diagram-utils.js +71 -62
  301. package/src/client/application/preview-render-compiler.js +4 -2
  302. package/src/client/application/preview-render-profile.js +9 -1
  303. package/src/client/application/preview-renderer.js +30 -164
  304. package/src/client/application/wiki-link-file-controller.js +2 -2
  305. package/src/client/application/workspace-coordinator.js +76 -54
  306. package/src/client/application/workspace-route-controller.js +31 -1
  307. package/src/client/bootstrap/collabmd-app-shell.js +180 -149
  308. package/src/client/bootstrap/lazy-controller-feature.js +4 -5
  309. package/src/client/browser-utils.js +77 -0
  310. package/src/client/domain/excalidraw-api-scene-sync.js +7 -3
  311. package/src/client/domain/excalidraw-collaboration.js +3 -7
  312. package/src/client/domain/excalidraw-diagnostics.js +111 -0
  313. package/src/client/domain/excalidraw-scene.js +2 -3
  314. package/src/client/domain/room.js +2 -2
  315. package/src/client/domain/vault-paths.js +14 -0
  316. package/src/client/domain/vault-utils.js +0 -64
  317. package/src/client/excalidraw-editor.js +250 -44
  318. package/src/client/export/export-pipeline.js +6 -9
  319. package/src/client/infrastructure/api-client-utils.js +23 -0
  320. package/src/client/infrastructure/app-version-monitor.js +0 -1
  321. package/src/client/infrastructure/backlinks-api-client.js +3 -5
  322. package/src/client/infrastructure/browser-notification-port.js +6 -10
  323. package/src/client/infrastructure/browser-preferences-port.js +25 -40
  324. package/src/client/infrastructure/excalidraw-room-client.js +115 -16
  325. package/src/client/infrastructure/git-api-client.js +9 -32
  326. package/src/client/infrastructure/plantuml-api-client.js +3 -5
  327. package/src/client/infrastructure/vault-api-client.js +6 -56
  328. package/src/client/presentation/bases-preview-controller.js +6 -22
  329. package/src/client/presentation/comment-overview-controller.js +3 -15
  330. package/src/client/presentation/comment-ui/comment-ui-card.js +21 -4
  331. package/src/client/presentation/comment-ui/comment-ui-layout.js +54 -0
  332. package/src/client/presentation/comment-ui/comment-ui-render.js +1 -0
  333. package/src/client/presentation/comment-ui/comment-ui-shared.js +86 -5
  334. package/src/client/presentation/comment-ui/comment-ui-state.js +3 -0
  335. package/src/client/presentation/comment-ui-controller.js +17 -1
  336. package/src/client/presentation/components/ui/button.js +0 -25
  337. package/src/client/presentation/components/ui/class-names.js +8 -27
  338. package/src/client/presentation/drawio-embed-controller.js +8 -33
  339. package/src/client/presentation/excalidraw-embed-controller.js +50 -43
  340. package/src/client/presentation/file-action-controller.js +8 -25
  341. package/src/client/presentation/file-explorer-controller.js +1 -2
  342. package/src/client/presentation/file-explorer-view.js +4 -17
  343. package/src/client/presentation/file-history-view-controller.js +3 -12
  344. package/src/client/presentation/git-diff-view-controller.js +8 -17
  345. package/src/client/presentation/git-panel-controller.js +3 -12
  346. package/src/client/presentation/quick-switcher-controller.js +4 -7
  347. package/src/client/presentation/scroll-sync-controller.js +5 -30
  348. package/src/client/styles/features/comment-card.css +8 -0
  349. package/src/client/styles/features/comment-overlays.css +15 -0
  350. package/src/client/styles/features/diagram-preview.css +20 -0
  351. package/src/client/styles/style.css +25 -7
  352. package/src/client/styles/surfaces/excalidraw-editor.css +25 -0
  353. package/src/domain/excalidraw-room-codec.js +1 -9
  354. package/src/domain/vault-paths.js +41 -0
  355. package/src/server/config/env.js +1 -5
  356. package/src/server/domain/bases/base-expression-runtime.js +1 -46
  357. package/src/server/domain/collaboration/collaboration-document-store.js +12 -115
  358. package/src/server/domain/collaboration/collaboration-room.js +21 -10
  359. package/src/server/domain/markdown-reference-extractor.js +1 -46
  360. package/src/server/domain/workspace-state.js +0 -8
  361. package/src/server/infrastructure/git/git-service.js +10 -34
  362. package/src/server/infrastructure/git/history-service.js +51 -56
  363. package/src/server/infrastructure/git/parsers.js +42 -24
  364. package/src/server/infrastructure/git/responses.js +0 -23
  365. package/src/server/infrastructure/git/untracked-files.js +1 -1
  366. package/src/server/infrastructure/http/create-git-api-command-handler.js +7 -28
  367. package/src/server/infrastructure/http/create-git-api-query-handler.js +8 -24
  368. package/src/server/infrastructure/http/create-request-handler.js +37 -12
  369. package/src/server/infrastructure/http/create-vault-api-command-handler.js +17 -41
  370. package/src/server/infrastructure/http/create-vault-api-query-handler.js +7 -14
  371. package/src/server/infrastructure/http/http-request-helpers.js +23 -0
  372. package/src/server/infrastructure/http/http-response.js +13 -0
  373. package/src/server/infrastructure/persistence/vault-file-store.js +22 -60
  374. package/src/server/infrastructure/workspace/file-system-sync-service.js +3 -3
  375. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Fb3TgxXK.js +0 -1
  376. package/dist/client/assets/actions-XO29hEzr.css +0 -1
  377. package/dist/client/assets/ar-SA-YLAB6A27-B9ogj_Jh.js +0 -8
  378. package/dist/client/assets/arc-DqK6O3qL.js +0 -1
  379. package/dist/client/assets/architecture-TIHT7OUA-BWqzHezU.js +0 -1
  380. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-DL35gHTu.js +0 -36
  381. package/dist/client/assets/asciiarmor-qTkVPQu6.js +0 -1
  382. package/dist/client/assets/az-AZ-5JXPK2I2-C6Se5-4R.js +0 -1
  383. package/dist/client/assets/bases-preview-controller-CBHDzzot.js +0 -143
  384. package/dist/client/assets/bg-BG-NIQ2RVNG-xrf33IaO.js +0 -5
  385. package/dist/client/assets/bn-BD-BN65R3DE-YVZWNN-c.js +0 -3
  386. package/dist/client/assets/bn-IN-2YT4KVKB-YVZWNN-c.js +0 -3
  387. package/dist/client/assets/button-2ZnWQkWV.js +0 -1
  388. package/dist/client/assets/c4Diagram-LMCZKHZV-al3Umu1D.js +0 -10
  389. package/dist/client/assets/ca-ES-KSERGC3M-CoMtV4dM.js +0 -8
  390. package/dist/client/assets/channel-XzBGGMWh.js +0 -1
  391. package/dist/client/assets/chunk-52WLFC77-BjzXVnqm.js +0 -10
  392. package/dist/client/assets/chunk-6GK3VUBP-ChzWImvX.js +0 -41
  393. package/dist/client/assets/chunk-CJTDIR4C-DvUbqeGR.js +0 -1
  394. package/dist/client/assets/chunk-ICXQ74PX-DGYhuP6g.js +0 -2
  395. package/dist/client/assets/chunk-OGEWGWER-Xh5bvoYs.js +0 -1
  396. package/dist/client/assets/chunk-RYQCIY6F-Dtr3kkSR.js +0 -1
  397. package/dist/client/assets/chunk-VAUOI2AC-EcvKeBKU.js +0 -1
  398. package/dist/client/assets/chunk-WYO6CB5R-HgTPu1OL.js +0 -127
  399. package/dist/client/assets/classDiagram-OUVF2IWQ-vy5bnN3c.js +0 -1
  400. package/dist/client/assets/classDiagram-v2-EOCWNBFH-vy5bnN3c.js +0 -1
  401. package/dist/client/assets/clike-CVjTFI47.js +0 -1
  402. package/dist/client/assets/cmake-CyVbuzPu.js +0 -1
  403. package/dist/client/assets/coffeescript-B2pKbFk8.js +0 -1
  404. package/dist/client/assets/commonlisp-CcllspGY.js +0 -1
  405. package/dist/client/assets/controls-LYQrRFSF.css +0 -1
  406. package/dist/client/assets/cose-bilkent-JH36ORCC-ClqQrHIF.js +0 -1
  407. package/dist/client/assets/crystal-M5-qzICs.js +0 -1
  408. package/dist/client/assets/cs-CZ-EOMS3IHD-Bo0hDCLX.js +0 -7
  409. package/dist/client/assets/css-CYpP4FRV.js +0 -1
  410. package/dist/client/assets/cynefin-VYW2F7L2-4m18BxUG.js +0 -1
  411. package/dist/client/assets/cynefinDiagram-TSTJHNR4-BNlZcGFF.js +0 -62
  412. package/dist/client/assets/cytoscape.esm-CQFVGiJu.js +0 -321
  413. package/dist/client/assets/da-DK-AVL3DJQK-s5-TpkxN.js +0 -2
  414. package/dist/client/assets/dagre-dpRSp0QF.js +0 -1
  415. package/dist/client/assets/de-CH-M25HCZK4-B0r4rx6B.js +0 -7
  416. package/dist/client/assets/de-DE-BEN6XGXY-B0r4rx6B.js +0 -7
  417. package/dist/client/assets/defaultLocale-C8Fc0cco.js +0 -1
  418. package/dist/client/assets/diagram-WEI45ONY-C18MNAQv.js +0 -41
  419. package/dist/client/assets/dist-0x9D2TFD.js +0 -1
  420. package/dist/client/assets/dist-BA633xb4.js +0 -11
  421. package/dist/client/assets/dist-Bx-T__Lj.js +0 -1
  422. package/dist/client/assets/dist-ByYtm-FJ.js +0 -1
  423. package/dist/client/assets/dist-CCrwHjeP.js +0 -1
  424. package/dist/client/assets/dist-CHokDUN_.js +0 -1
  425. package/dist/client/assets/dist-CI1X-CJ2.js +0 -9
  426. package/dist/client/assets/dist-CPim1xdZ.js +0 -1
  427. package/dist/client/assets/dist-CZG184W2.js +0 -1
  428. package/dist/client/assets/dist-Cd1BXkVC.js +0 -1
  429. package/dist/client/assets/dist-CeEU6QwA.js +0 -2
  430. package/dist/client/assets/dist-DG2HpWvu.js +0 -1
  431. package/dist/client/assets/dist-DUj7Xwud.js +0 -13
  432. package/dist/client/assets/dist-DnbVQL2z.js +0 -1
  433. package/dist/client/assets/dist-QiKOmE2-.js +0 -1
  434. package/dist/client/assets/dist-du6QqIs42.js +0 -1
  435. package/dist/client/assets/dist-snK6kYA_.js +0 -1
  436. package/dist/client/assets/drawio-editor-Bpeofg5c.js +0 -9
  437. package/dist/client/assets/drawio-embed-controller-BtzURctK.js +0 -1
  438. package/dist/client/assets/drawioEditor-DOeuNmoO.js +0 -2
  439. package/dist/client/assets/editor-session-MbnP-AVK.js +0 -16
  440. package/dist/client/assets/el-GR-UBGIF2NW-DRoYAN8w.js +0 -7
  441. package/dist/client/assets/en-PCJ7LJZ2-1SKiH5y3.js +0 -1
  442. package/dist/client/assets/es-ES-SQEM5MNY-D5EtY06q.js +0 -7
  443. package/dist/client/assets/eu-ES-YG5N2JAG-CZ0xKIU4.js +0 -7
  444. package/dist/client/assets/eventmodeling-45OFAUF4-Dp0gpjhg.js +0 -1
  445. package/dist/client/assets/excalidraw-editor-CN3Wpa0D.css +0 -1
  446. package/dist/client/assets/excalidraw-editor-DV1u6p5J.js +0 -9
  447. package/dist/client/assets/excalidraw-embed-controller-BKx05cjZ.js +0 -1
  448. package/dist/client/assets/excalidraw-scene-qiXFUZvq.js +0 -176
  449. package/dist/client/assets/excalidrawEditor-C5Z0GfUw.js +0 -2
  450. package/dist/client/assets/export-page-CbIrJ_oK.js +0 -39
  451. package/dist/client/assets/exportDocument-6GQGZvBv.js +0 -2
  452. package/dist/client/assets/fa-IR-EVNM7MAJ-olht-LEH.js +0 -9
  453. package/dist/client/assets/fi-FI-MW7ZEZ64-D1PIXbLy.js +0 -6
  454. package/dist/client/assets/flowDiagram-23GEKE2U-DgaZtMXJ.js +0 -1
  455. package/dist/client/assets/fr-FR-Q7ZPXBDE-B0DjjyfT.js +0 -12
  456. package/dist/client/assets/ganttDiagram-NO4QXBWP-DaBgmYw5.js +0 -292
  457. package/dist/client/assets/git-panel-controller-CzgJWqbB.js +0 -207
  458. package/dist/client/assets/gitGraph-TEB2WS4Q-Do0SQOtM.js +0 -1
  459. package/dist/client/assets/gl-ES-O5B74VQL-DH5u_ADp.js +0 -6
  460. package/dist/client/assets/groovy-BC3IOsC8.js +0 -1
  461. package/dist/client/assets/he-IL-QGC2WXJA-BSBR1RcG.js +0 -8
  462. package/dist/client/assets/hi-IN-DEZ33NMQ-CorD0_d0.js +0 -3
  463. package/dist/client/assets/hu-HU-2ZPNVYSC-BlqNXhNG.js +0 -3
  464. package/dist/client/assets/id-ID-W65WM5EO-SkLgeJLx.js +0 -8
  465. package/dist/client/assets/image-QEDDDPDB-DtzL4Wgr.js +0 -1
  466. package/dist/client/assets/image-blob-reduce.esm-DLFdRAwc.js +0 -2
  467. package/dist/client/assets/index-BakyykHU.css +0 -1
  468. package/dist/client/assets/index-CvubXIUU.js +0 -2
  469. package/dist/client/assets/info-DKCQHKI2-DIc7uC4I.js +0 -1
  470. package/dist/client/assets/init-D6jRqBbL.js +0 -1
  471. package/dist/client/assets/input-CXk9Zxz9.js +0 -1
  472. package/dist/client/assets/it-IT-GAWJM2XW-CDZugsE0.js +0 -12
  473. package/dist/client/assets/ja-JP-FOAUPTH5-DkKXnwj8.js +0 -12
  474. package/dist/client/assets/javascript-B9TABJff.js +0 -1
  475. package/dist/client/assets/javascript-BRzqD9BA.js +0 -1
  476. package/dist/client/assets/jsx-runtime-DKdBMi_L.js +0 -1
  477. package/dist/client/assets/kaa-UEDB54S7-C0Sv0drM.js +0 -1
  478. package/dist/client/assets/kab-KAB-CTLMBVE3-QfxUgzL5.js +0 -4
  479. package/dist/client/assets/keyboard-shortcuts-C5LvVwoE.js +0 -1
  480. package/dist/client/assets/kk-KZ-XZK63ADD-CMZObxxP.js +0 -1
  481. package/dist/client/assets/ko-KR-YNTPN6WQ-DPBaHnwT.js +0 -5
  482. package/dist/client/assets/ku-TR-XUD5BUEU-75pMUQoD.js +0 -6
  483. package/dist/client/assets/linear-DhAcoVP9.js +0 -1
  484. package/dist/client/assets/lt-LT-LYCDYH7O-BeKUsKuy.js +0 -3
  485. package/dist/client/assets/lv-LV-7ROPDEEI-CrA6QOtq.js +0 -4
  486. package/dist/client/assets/main-CKWxzJUx.js +0 -807
  487. package/dist/client/assets/mermaid-runtime-2fJoRo49.js +0 -11
  488. package/dist/client/assets/mr-IN-TU6BXRKP-mIvXG0bt.js +0 -9
  489. package/dist/client/assets/my-MM-SJ3RWIEQ-CeEN5n4z.js +0 -1
  490. package/dist/client/assets/navigation-CoTUJ5Pi.css +0 -1
  491. package/dist/client/assets/nb-NO-GONF2AKR-IChp6OiI.js +0 -8
  492. package/dist/client/assets/nl-NL-UZF6UEKB-DfPPXXjo.js +0 -13
  493. package/dist/client/assets/nn-NO-ZVFRXEEO-BtpjNSGp.js +0 -4
  494. package/dist/client/assets/oc-FR-MBF2Z56W-CBl14QBM.js +0 -4
  495. package/dist/client/assets/pa-IN-3JCDVKKL-D95A1XFb.js +0 -4
  496. package/dist/client/assets/packet-7NZHBO7P-D2duWGIK.js +0 -1
  497. package/dist/client/assets/path-BWPyau1x.js +0 -1
  498. package/dist/client/assets/percentages-WBIPKLEE-bhlTAhiB.js +0 -1
  499. package/dist/client/assets/perl-CdEHsPfU.js +0 -1
  500. package/dist/client/assets/pie-RZYD4A2V-CynqTUkZ.js +0 -1
  501. package/dist/client/assets/preview-diagram-utils-BPaXsmlV.js +0 -1
  502. package/dist/client/assets/preview-render-compiler-C8wbmTyE.js +0 -1
  503. package/dist/client/assets/preview-render-compiler-CrQBxqqa.js +0 -35
  504. package/dist/client/assets/preview-render-profile-C89_PyT3.js +0 -23
  505. package/dist/client/assets/preview-render-worker-D84F1vpn.js +0 -59
  506. package/dist/client/assets/pt-BR-W4AF5QMX-DIJs8D4M.js +0 -6
  507. package/dist/client/assets/pt-PT-GNPUWAHX-BopN284Y.js +0 -8
  508. package/dist/client/assets/puppet-B4hC2X4m.js +0 -1
  509. package/dist/client/assets/python-2zlmcyof.js +0 -1
  510. package/dist/client/assets/r-DADKenSm.js +0 -1
  511. package/dist/client/assets/radar-I7S5WNFK-fIKE12aT.js +0 -1
  512. package/dist/client/assets/railroad-3IZDKUUU-Bgx8HJTj.js +0 -1
  513. package/dist/client/assets/railroad-abnf-AHOZXSZD-Nh6k60mH.js +0 -1
  514. package/dist/client/assets/railroad-ebnf-EBAXGLYW-C74h3s_I.js +0 -1
  515. package/dist/client/assets/railroad-peg-LSFZ7HO6-0hT-lN-u.js +0 -1
  516. package/dist/client/assets/ro-RO-DXHP33S5-PGxfl-ng.js +0 -12
  517. package/dist/client/assets/rolldown-runtime-aKtaBQYM.js +0 -1
  518. package/dist/client/assets/ru-RU-TTW2P7NF-Dwnn0sc5.js +0 -10
  519. package/dist/client/assets/ruby-DsYpTuWg.js +0 -1
  520. package/dist/client/assets/runtime-config-loader-BUK56BZz.js +0 -1
  521. package/dist/client/assets/sequenceDiagram-DBY2YBRQ-DonUqDnp.js +0 -162
  522. package/dist/client/assets/si-LK-BE6O7LVF-QO9nybVB.js +0 -1
  523. package/dist/client/assets/sk-SK-OI3KJLWQ-BAKIEIig.js +0 -7
  524. package/dist/client/assets/sl-SI-HF74RBGV-CnS5z7V_.js +0 -6
  525. package/dist/client/assets/sql-DcCJ9jop.js +0 -1
  526. package/dist/client/assets/src-UMNXGZaF.js +0 -1
  527. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-C4YrlXQg.js +0 -1
  528. package/dist/client/assets/states-DYMshUe2.css +0 -1
  529. package/dist/client/assets/subset-shared.chunk-D3olxosN.js +0 -1
  530. package/dist/client/assets/sv-SE-TXR2SQGA-CNgv7xeJ.js +0 -8
  531. package/dist/client/assets/swimlanes-5IMT3BWC-DP1GREXh.js +0 -2
  532. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CN_iOXin.js +0 -8
  533. package/dist/client/assets/ta-IN-Y2DOZGBR-DYzsfax7.js +0 -6
  534. package/dist/client/assets/th-TH-JUAISFQR-BAZHUCM7.js +0 -1
  535. package/dist/client/assets/tiki-CxVlf5KZ.js +0 -1
  536. package/dist/client/assets/timeline-definition-FHXFAJF6-C-QK9sME.js +0 -120
  537. package/dist/client/assets/toml-LvoKBwCs.js +0 -1
  538. package/dist/client/assets/tr-TR-U3HGKQXH-DTYupb_4.js +0 -4
  539. package/dist/client/assets/treeView-QDETBFTQ-CygwzEgj.js +0 -1
  540. package/dist/client/assets/treemap-6X3UGDF4-BbCXbaXr.js +0 -1
  541. package/dist/client/assets/uk-UA-FP2TKAFK-Bcxd6wgd.js +0 -6
  542. package/dist/client/assets/uz-UZ-WY5QKWXJ-B5N6xPud.js +0 -1
  543. package/dist/client/assets/vault-api-client-BPVNCJZC.js +0 -1
  544. package/dist/client/assets/vault-api-client-VAfZ8okg.js +0 -1
  545. package/dist/client/assets/vault-utils-kIbqyWPm.js +0 -1
  546. package/dist/client/assets/vi-VN-DE5I4H6K-BdlcTH5l.js +0 -7
  547. package/dist/client/assets/wardley-OPB4EBWU-BjXxCRf_.js +0 -1
  548. package/dist/client/assets/yjs-provider-reset-guard-DSfwdXS9.js +0 -4
  549. package/dist/client/assets/z80-CL1naaMV.js +0 -1
  550. package/dist/client/assets/zh-CN-VWHOHS7G-b12eD2L4.js +0 -11
  551. package/dist/client/assets/zh-HK-KQF7FW7H-Bvr6xExo.js +0 -1
  552. package/dist/client/assets/zh-TW-6VHVWZKW-B-KCOPyt.js +0 -13
  553. package/server.js +0 -1
  554. package/src/client/application/app-shell/ui-feature.js +0 -13
  555. package/src/client/application/file-open-lifecycle.js +0 -26
  556. package/src/client/application/workspace-chrome-controller.js +0 -109
  557. package/src/client/application/workspace-state-store.js +0 -48
  558. package/src/client/bootstrap/app-shell-feature-surface.js +0 -67
  559. package/src/client/domain/excalidraw-document-switch.js +0 -3
  560. package/src/client/domain/vault-api-client.js +0 -1
  561. package/src/client/domain/workspace-request-id.js +0 -7
  562. package/src/client/infrastructure/browser-navigation-port.js +0 -39
  563. package/src/client/mermaid-runtime.js +0 -3
  564. package/src/client/presentation/app-shell-renderer.js +0 -13
  565. package/src/client/presentation/app-shell-template.js +0 -669
  566. package/src/client/presentation/comments-panel.js +0 -578
  567. package/src/client/presentation/components/ui/badge.js +0 -24
  568. package/src/client/presentation/components/ui/ensure-ui-component-styles.js +0 -18
  569. package/src/client/presentation/components/ui/input.js +0 -9
  570. package/src/client/styles/features/collaboration-ui.css +0 -3
  571. package/src/client/styles/features/comments.css +0 -5
  572. package/src/client/styles/features/diff.css +0 -3
  573. package/src/client/styles/features/git.css +0 -3
  574. package/src/client/styles/features/preview-content.css +0 -3
  575. package/src/client/styles/features/preview-sidebars.css +0 -2
  576. package/src/client/styles/overrides/vendor.css +0 -2
  577. package/src/server/domain/collaboration/room-client-state-store.js +0 -29
  578. package/src/server/domain/git-service.js +0 -1
  579. package/src/server/domain/plantuml-renderer.js +0 -1
  580. package/src/server/index.js +0 -74
  581. package/src/server/infrastructure/git/concurrency.js +0 -19
  582. package/src/server/infrastructure/http/create-git-api-handler.js +0 -44
  583. package/src/server/infrastructure/http/create-vault-api-handler.js +0 -54
  584. package/src/server/infrastructure/persistence/vault-content-adapter.js +0 -61
  585. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +0 -20
  586. /package/dist/client/assets/{keyboard-shortcuts-C3mlS_4N.css → vault-api-client-C3mlS_4N.css} +0 -0
@@ -1,8 +1,3 @@
1
- import {
2
- createEmptyWorkspaceChange as createSharedEmptyWorkspaceChange,
3
- createWorkspaceChange as createSharedWorkspaceChange,
4
- } from '../../../domain/workspace-change.js';
5
-
6
1
  const STATUS_MAP = {
7
2
  A: { code: 'A', label: 'added', status: 'added' },
8
3
  C: { code: 'C', label: 'copied', status: 'copied' },
@@ -47,10 +42,6 @@ export function createEmptyBranchStatus() {
47
42
  };
48
43
  }
49
44
 
50
- export function createEmptyWorkspaceChange() {
51
- return createSharedEmptyWorkspaceChange();
52
- }
53
-
54
45
  export function createEmptyStatusResponse() {
55
46
  return {
56
47
  branch: createEmptyBranchStatus(),
@@ -158,17 +149,3 @@ export function createFileSnapshotResponse({
158
149
  path,
159
150
  };
160
151
  }
161
-
162
- export function createWorkspaceChange({
163
- changedPaths = [],
164
- deletedPaths = [],
165
- refreshExplorer = true,
166
- renamedPaths = [],
167
- } = {}) {
168
- return createSharedWorkspaceChange({
169
- changedPaths,
170
- deletedPaths,
171
- refreshExplorer,
172
- renamedPaths,
173
- });
174
- }
@@ -2,7 +2,7 @@ import { createReadStream } from 'node:fs';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
4
 
5
- import { mapWithConcurrency } from './concurrency.js';
5
+ import { mapWithConcurrency } from '../../shared/async-utils.js';
6
6
  import { createEmptyStats } from './responses.js';
7
7
  import { splitContentLines } from './parsers.js';
8
8
 
@@ -1,4 +1,4 @@
1
- import { getRequestErrorStatusCode } from './http-errors.js';
1
+ import { handleApiError, readRequestId } from './http-request-helpers.js';
2
2
  import { jsonResponse } from './http-response.js';
3
3
  import { parseJsonBody } from './request-body.js';
4
4
  import { createEmptyWorkspaceChange, hasWorkspaceMutation } from '../../../domain/workspace-change.js';
@@ -13,27 +13,6 @@ async function parseRequiredBody(req, res, fieldName) {
13
13
  return body;
14
14
  }
15
15
 
16
- function handleGitError(req, res, error, logMessage, fallbackMessage) {
17
- const statusCode = getRequestErrorStatusCode(error);
18
- if (statusCode) {
19
- const payload = { error: error.message };
20
- if (typeof error?.requestCode === 'string') {
21
- payload.code = error.requestCode;
22
- }
23
- jsonResponse(req, res, statusCode, payload);
24
- return true;
25
- }
26
-
27
- console.error(logMessage, error.message);
28
- jsonResponse(req, res, 500, { error: fallbackMessage });
29
- return true;
30
- }
31
-
32
- function readRequestId(req) {
33
- const value = String(req.headers['x-collabmd-request-id'] || '').trim();
34
- return value ? value.slice(0, 120) : null;
35
- }
36
-
37
16
  async function applyWorkspaceMutationEffects({
38
17
  action,
39
18
  req,
@@ -79,7 +58,7 @@ export function createGitApiCommandHandler({
79
58
  workspaceMutationCoordinator,
80
59
  }));
81
60
  } catch (error) {
82
- handleGitError(req, res, error, '[api] Failed to stage git file:', 'Failed to stage git file');
61
+ handleApiError(req, res, error, '[api] Failed to stage git file:', 'Failed to stage git file');
83
62
  }
84
63
  return true;
85
64
  }
@@ -100,7 +79,7 @@ export function createGitApiCommandHandler({
100
79
  workspaceMutationCoordinator,
101
80
  }));
102
81
  } catch (error) {
103
- handleGitError(req, res, error, '[api] Failed to unstage git file:', 'Failed to unstage git file');
82
+ handleApiError(req, res, error, '[api] Failed to unstage git file:', 'Failed to unstage git file');
104
83
  }
105
84
  return true;
106
85
  }
@@ -124,7 +103,7 @@ export function createGitApiCommandHandler({
124
103
  workspaceMutationCoordinator,
125
104
  }));
126
105
  } catch (error) {
127
- handleGitError(req, res, error, '[api] Failed to commit staged changes:', 'Failed to commit staged changes');
106
+ handleApiError(req, res, error, '[api] Failed to commit staged changes:', 'Failed to commit staged changes');
128
107
  }
129
108
  return true;
130
109
  }
@@ -140,7 +119,7 @@ export function createGitApiCommandHandler({
140
119
  workspaceMutationCoordinator,
141
120
  }));
142
121
  } catch (error) {
143
- handleGitError(req, res, error, '[api] Failed to push git branch:', 'Failed to push git branch');
122
+ handleApiError(req, res, error, '[api] Failed to push git branch:', 'Failed to push git branch');
144
123
  }
145
124
  return true;
146
125
  }
@@ -156,7 +135,7 @@ export function createGitApiCommandHandler({
156
135
  workspaceMutationCoordinator,
157
136
  }));
158
137
  } catch (error) {
159
- handleGitError(req, res, error, '[api] Failed to pull git branch:', 'Failed to pull git branch');
138
+ handleApiError(req, res, error, '[api] Failed to pull git branch:', 'Failed to pull git branch');
160
139
  }
161
140
  return true;
162
141
  }
@@ -177,7 +156,7 @@ export function createGitApiCommandHandler({
177
156
  workspaceMutationCoordinator,
178
157
  }));
179
158
  } catch (error) {
180
- handleGitError(req, res, error, '[api] Failed to reset git file:', 'Failed to reset git file');
159
+ handleApiError(req, res, error, '[api] Failed to reset git file:', 'Failed to reset git file');
181
160
  }
182
161
  return true;
183
162
  }
@@ -1,4 +1,4 @@
1
- import { getRequestErrorStatusCode } from './http-errors.js';
1
+ import { handleApiError } from './http-request-helpers.js';
2
2
  import { jsonResponse } from './http-response.js';
3
3
 
4
4
  function resolveDiffScope(requestUrl) {
@@ -28,22 +28,6 @@ function readHistoryOffset(value) {
28
28
  return Number.isFinite(parsed) ? parsed : 0;
29
29
  }
30
30
 
31
- function handleGitError(req, res, error, message, fallback) {
32
- const statusCode = getRequestErrorStatusCode(error);
33
- if (statusCode) {
34
- const payload = { error: error.message };
35
- if (typeof error?.requestCode === 'string') {
36
- payload.code = error.requestCode;
37
- }
38
- jsonResponse(req, res, statusCode, payload);
39
- return true;
40
- }
41
-
42
- console.error(message, error.message);
43
- jsonResponse(req, res, 500, { error: fallback });
44
- return true;
45
- }
46
-
47
31
  export function createGitApiQueryHandler({ gitService }) {
48
32
  return async function handleGitApiQuery(req, res, requestUrl) {
49
33
  if (requestUrl.pathname === '/api/git/status' && req.method === 'GET') {
@@ -52,7 +36,7 @@ export function createGitApiQueryHandler({ gitService }) {
52
36
  force: isTruthyParam(requestUrl.searchParams.get('force')),
53
37
  }));
54
38
  } catch (error) {
55
- handleGitError(req, res, error, '[api] Failed to read git status:', 'Failed to read git status');
39
+ handleApiError(req, res, error, '[api] Failed to read git status:', 'Failed to read git status');
56
40
  }
57
41
  return true;
58
42
  }
@@ -66,7 +50,7 @@ export function createGitApiQueryHandler({ gitService }) {
66
50
  scope: resolveDiffScope(requestUrl),
67
51
  }));
68
52
  } catch (error) {
69
- handleGitError(req, res, error, '[api] Failed to read git diff:', 'Failed to read git diff');
53
+ handleApiError(req, res, error, '[api] Failed to read git diff:', 'Failed to read git diff');
70
54
  }
71
55
  return true;
72
56
  }
@@ -78,7 +62,7 @@ export function createGitApiQueryHandler({ gitService }) {
78
62
  offset: readHistoryOffset(requestUrl.searchParams.get('offset')),
79
63
  }));
80
64
  } catch (error) {
81
- handleGitError(req, res, error, '[api] Failed to read git history:', 'Failed to read git history');
65
+ handleApiError(req, res, error, '[api] Failed to read git history:', 'Failed to read git history');
82
66
  }
83
67
  return true;
84
68
  }
@@ -91,7 +75,7 @@ export function createGitApiQueryHandler({ gitService }) {
91
75
  path: requestUrl.searchParams.get('path'),
92
76
  }));
93
77
  } catch (error) {
94
- handleGitError(req, res, error, '[api] Failed to read git file history:', 'Failed to read git file history');
78
+ handleApiError(req, res, error, '[api] Failed to read git file history:', 'Failed to read git file history');
95
79
  }
96
80
  return true;
97
81
  }
@@ -105,7 +89,7 @@ export function createGitApiQueryHandler({ gitService }) {
105
89
  path: requestUrl.searchParams.get('path'),
106
90
  }));
107
91
  } catch (error) {
108
- handleGitError(req, res, error, '[api] Failed to read git commit:', 'Failed to read git commit');
92
+ handleApiError(req, res, error, '[api] Failed to read git commit:', 'Failed to read git commit');
109
93
  }
110
94
  return true;
111
95
  }
@@ -117,7 +101,7 @@ export function createGitApiQueryHandler({ gitService }) {
117
101
  path: requestUrl.searchParams.get('path'),
118
102
  }));
119
103
  } catch (error) {
120
- handleGitError(req, res, error, '[api] Failed to read git file snapshot:', 'Failed to read git file snapshot');
104
+ handleApiError(req, res, error, '[api] Failed to read git file snapshot:', 'Failed to read git file snapshot');
121
105
  }
122
106
  return true;
123
107
  }
@@ -128,7 +112,7 @@ export function createGitApiQueryHandler({ gitService }) {
128
112
  backups: await gitService.listPullBackups(),
129
113
  });
130
114
  } catch (error) {
131
- handleGitError(req, res, error, '[api] Failed to read pull backups:', 'Failed to read pull backups');
115
+ handleApiError(req, res, error, '[api] Failed to read pull backups:', 'Failed to read pull backups');
132
116
  }
133
117
  return true;
134
118
  }
@@ -1,9 +1,12 @@
1
1
  import { createAuthApiHandler } from './create-auth-api-handler.js';
2
- import { createGitApiHandler } from './create-git-api-handler.js';
2
+ import { createGitApiCommandHandler } from './create-git-api-command-handler.js';
3
+ import { createGitApiQueryHandler } from './create-git-api-query-handler.js';
3
4
  import { createHostedApiHandler } from './create-hosted-api-handler.js';
4
5
  import { createEsmProxyHandler } from './create-esm-proxy-handler.js';
6
+ import { createPlantUmlApiHandler } from './create-plantuml-api-handler.js';
5
7
  import { createStaticHandler } from './create-static-handler.js';
6
- import { createVaultApiHandler } from './create-vault-api-handler.js';
8
+ import { createVaultApiCommandHandler } from './create-vault-api-command-handler.js';
9
+ import { createVaultApiQueryHandler } from './create-vault-api-query-handler.js';
7
10
  import { parseJsonBody } from './request-body.js';
8
11
  import {
9
12
  applyCorsHeaders,
@@ -61,25 +64,28 @@ export function createRequestHandler(
61
64
  githubSetupFlow,
62
65
  hostedWorkspaceService,
63
66
  });
64
- const handleGitApi = createGitApiHandler({
67
+ const handleGitApiQuery = createGitApiQueryHandler({ gitService });
68
+ const handleGitApiCommand = createGitApiCommandHandler({
65
69
  authService,
66
- backlinkIndex,
67
70
  gitService,
68
- roomRegistry,
69
- vaultFileStore,
70
71
  workspaceMutationCoordinator,
71
72
  });
72
- const handleVaultApi = createVaultApiHandler({
73
+ const handleVaultApiQuery = createVaultApiQueryHandler({
73
74
  baseQueryService,
74
75
  backlinkIndex,
75
76
  config,
77
+ searchService,
78
+ vaultFileStore,
79
+ workspaceMutationCoordinator,
80
+ });
81
+ const handleVaultApiCommand = createVaultApiCommandHandler({
82
+ backlinkIndex,
76
83
  docxExporter,
77
- plantUmlRenderer,
78
84
  roomRegistry,
79
- searchService,
80
85
  vaultFileStore,
81
86
  workspaceMutationCoordinator,
82
87
  });
88
+ const handlePlantUmlApi = createPlantUmlApiHandler({ plantUmlRenderer });
83
89
 
84
90
  function handleBasePathRedirect(req, res, originalRequestUrl) {
85
91
  if (
@@ -209,11 +215,30 @@ export function createRequestHandler(
209
215
  }
210
216
  }
211
217
 
212
- if (await handleVaultApi(req, res, requestUrl)) {
213
- return;
218
+ if (requestUrl.pathname.startsWith('/api/')) {
219
+ if (await handleVaultApiQuery(req, res, requestUrl)) {
220
+ return;
221
+ }
222
+ if (await handleVaultApiCommand(req, res, requestUrl)) {
223
+ return;
224
+ }
225
+ if (await handlePlantUmlApi(req, res, requestUrl)) {
226
+ return;
227
+ }
214
228
  }
215
229
 
216
- if (await handleGitApi(req, res, requestUrl)) {
230
+ if (requestUrl.pathname.startsWith('/api/git')) {
231
+ if (!gitService) {
232
+ jsonResponse(req, res, 503, { error: 'Git integration is not configured' });
233
+ return;
234
+ }
235
+ if (await handleGitApiQuery(req, res, requestUrl)) {
236
+ return;
237
+ }
238
+ if (await handleGitApiCommand(req, res, requestUrl)) {
239
+ return;
240
+ }
241
+ jsonResponse(req, res, 404, { error: 'Git API endpoint not found' });
217
242
  return;
218
243
  }
219
244
 
@@ -1,30 +1,23 @@
1
1
  import { basename } from 'node:path';
2
- import { createRequestError, getRequestErrorStatusCode } from './http-errors.js';
3
- import { jsonResponse, sendResponse } from './http-response.js';
2
+ import { createRequestError } from './http-errors.js';
3
+ import { handleApiError, readRequestId } from './http-request-helpers.js';
4
+ import {
5
+ createSafeAsciiFilename,
6
+ encodeContentDispositionFilename,
7
+ jsonResponse,
8
+ sendResponse,
9
+ } from './http-response.js';
4
10
  import { parseJsonBody, readBinaryRequestBody } from './request-body.js';
5
11
 
6
12
  const DOCX_EXPORT_REQUEST_LIMIT_BYTES = 33_554_432;
7
13
  const DOCX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
8
14
 
9
- function encodeContentDispositionFilename(fileName) {
10
- return encodeURIComponent(String(fileName ?? ''))
11
- .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
12
- }
13
-
14
- function createSafeAsciiFilename(fileName) {
15
- const fallback = String(fileName ?? '')
16
- .replace(/[^\x20-\x7E]+/g, '_')
17
- .replace(/["\\]/g, '_')
18
- .trim();
19
- return fallback || 'document';
20
- }
21
-
22
15
  function createDocxDownloadHeaders(filePath) {
23
16
  const fileName = basename(String(filePath ?? 'document')).replace(/\.[^.]+$/u, '') || 'document';
24
17
  const exportFileName = `${fileName}.docx`;
25
18
  return {
26
19
  'Cache-Control': 'no-store',
27
- 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(exportFileName)}"; filename*=UTF-8''${encodeContentDispositionFilename(exportFileName)}`,
20
+ 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(exportFileName, 'document')}"; filename*=UTF-8''${encodeContentDispositionFilename(exportFileName)}`,
28
21
  'Content-Type': DOCX_MIME_TYPE,
29
22
  'X-Content-Type-Options': 'nosniff',
30
23
  };
@@ -43,23 +36,6 @@ function decodeHeaderMetadata(value) {
43
36
  }
44
37
  }
45
38
 
46
- function readRequestId(req) {
47
- const value = String(req.headers['x-collabmd-request-id'] || '').trim();
48
- return value ? value.slice(0, 120) : null;
49
- }
50
-
51
- function handleVaultError(req, res, error, logMessage, fallbackMessage) {
52
- const statusCode = getRequestErrorStatusCode(error);
53
- if (statusCode) {
54
- jsonResponse(req, res, statusCode, { error: error.message });
55
- return true;
56
- }
57
-
58
- console.error(logMessage, error.message);
59
- jsonResponse(req, res, 500, { error: fallbackMessage });
60
- return true;
61
- }
62
-
63
39
  function getDirectoryDeleteStatusCode(message = '') {
64
40
  return String(message).includes('Directory is not empty') ? 409 : 400;
65
41
  }
@@ -88,7 +64,7 @@ async function handleExportDocx({ docxExporter }, req, res) {
88
64
  statusCode: 200,
89
65
  });
90
66
  } catch (error) {
91
- handleVaultError(req, res, error, '[api] Failed to export DOCX:', 'Failed to export DOCX');
67
+ handleApiError(req, res, error, '[api] Failed to export DOCX:', 'Failed to export DOCX');
92
68
  }
93
69
  return true;
94
70
  }
@@ -113,7 +89,7 @@ async function handleWriteFile({ workspaceMutationCoordinator }, req, res) {
113
89
 
114
90
  jsonResponse(req, res, 200, { ok: true });
115
91
  } catch (error) {
116
- handleVaultError(req, res, error, '[api] Failed to write file:', 'Failed to write file');
92
+ handleApiError(req, res, error, '[api] Failed to write file:', 'Failed to write file');
117
93
  }
118
94
  return true;
119
95
  }
@@ -148,7 +124,7 @@ async function handleUploadAttachment({ workspaceMutationCoordinator }, req, res
148
124
  path: result.path,
149
125
  });
150
126
  } catch (error) {
151
- handleVaultError(req, res, error, '[api] Failed to upload attachment:', 'Failed to upload attachment');
127
+ handleApiError(req, res, error, '[api] Failed to upload attachment:', 'Failed to upload attachment');
152
128
  }
153
129
  return true;
154
130
  }
@@ -172,7 +148,7 @@ async function handleCreateFile({ workspaceMutationCoordinator }, req, res) {
172
148
  }
173
149
  jsonResponse(req, res, 201, { ok: true, path: body.path });
174
150
  } catch (error) {
175
- handleVaultError(req, res, error, '[api] Failed to create file:', 'Failed to create file');
151
+ handleApiError(req, res, error, '[api] Failed to create file:', 'Failed to create file');
176
152
  }
177
153
  return true;
178
154
  }
@@ -220,7 +196,7 @@ async function handleRenameFile({ workspaceMutationCoordinator }, req, res) {
220
196
  }
221
197
  jsonResponse(req, res, 200, { ok: true, path: body.newPath });
222
198
  } catch (error) {
223
- handleVaultError(req, res, error, '[api] Failed to rename file:', 'Failed to rename file');
199
+ handleApiError(req, res, error, '[api] Failed to rename file:', 'Failed to rename file');
224
200
  }
225
201
  return true;
226
202
  }
@@ -244,7 +220,7 @@ async function handleCreateDirectory({ workspaceMutationCoordinator }, req, res)
244
220
 
245
221
  jsonResponse(req, res, 201, { ok: true });
246
222
  } catch (error) {
247
- handleVaultError(req, res, error, '[api] Failed to create directory:', 'Failed to create directory');
223
+ handleApiError(req, res, error, '[api] Failed to create directory:', 'Failed to create directory');
248
224
  }
249
225
  return true;
250
226
  }
@@ -269,7 +245,7 @@ async function handleRenameDirectory({ workspaceMutationCoordinator }, req, res)
269
245
 
270
246
  jsonResponse(req, res, 200, { ok: true, path: body.newPath });
271
247
  } catch (error) {
272
- handleVaultError(req, res, error, '[api] Failed to rename directory:', 'Failed to rename directory');
248
+ handleApiError(req, res, error, '[api] Failed to rename directory:', 'Failed to rename directory');
273
249
  }
274
250
  return true;
275
251
  }
@@ -295,7 +271,7 @@ async function handleDeleteDirectory({ workspaceMutationCoordinator }, req, res,
295
271
 
296
272
  jsonResponse(req, res, 200, { ok: true });
297
273
  } catch (error) {
298
- handleVaultError(req, res, error, '[api] Failed to delete directory:', 'Failed to delete directory');
274
+ handleApiError(req, res, error, '[api] Failed to delete directory:', 'Failed to delete directory');
299
275
  }
300
276
  return true;
301
277
  }
@@ -6,26 +6,19 @@ import { join } from 'node:path';
6
6
  import { isImageAttachmentFilePath } from '../../../domain/file-kind.js';
7
7
  import { isIgnoredVaultEntry } from '../persistence/path-utils.js';
8
8
  import { parseJsonBody } from './request-body.js';
9
- import { jsonResponse, sendResponse, sendStreamResponse } from './http-response.js';
9
+ import {
10
+ createSafeAsciiFilename,
11
+ encodeContentDispositionFilename,
12
+ jsonResponse,
13
+ sendResponse,
14
+ sendStreamResponse,
15
+ } from './http-response.js';
10
16
 
11
17
  const SVG_MIME_TYPE = 'image/svg+xml';
12
18
  const SVG_ATTACHMENT_CSP = "default-src 'none'; img-src 'self' data: blob:; style-src 'unsafe-inline'; sandbox";
13
19
  const DEFAULT_MAX_ARCHIVE_ENTRIES = 10_000;
14
20
  const DEFAULT_MAX_DOWNLOAD_FILE_BYTES = 268_435_456;
15
21
 
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 || 'attachment';
27
- }
28
-
29
22
  function createAttachmentHeaders(attachment) {
30
23
  const fileName = basename(String(attachment?.path ?? 'attachment'));
31
24
  const headers = {
@@ -0,0 +1,23 @@
1
+ import { getRequestErrorStatusCode } from './http-errors.js';
2
+ import { jsonResponse } from './http-response.js';
3
+
4
+ export function readRequestId(req) {
5
+ const value = String(req.headers['x-collabmd-request-id'] || '').trim();
6
+ return value ? value.slice(0, 120) : null;
7
+ }
8
+
9
+ export function handleApiError(req, res, error, logMessage, fallbackMessage) {
10
+ const statusCode = getRequestErrorStatusCode(error);
11
+ if (statusCode) {
12
+ const payload = { error: error.message };
13
+ if (typeof error?.requestCode === 'string') {
14
+ payload.code = error.requestCode;
15
+ }
16
+ jsonResponse(req, res, statusCode, payload);
17
+ return true;
18
+ }
19
+
20
+ console.error(logMessage, error.message);
21
+ jsonResponse(req, res, 500, { error: fallbackMessage });
22
+ return true;
23
+ }
@@ -7,6 +7,19 @@ import {
7
7
  const COMPRESSIBLE_CONTENT_TYPE_PATTERN = /^(?:text\/|application\/(?:javascript|json|xml)|image\/svg\+xml)/i;
8
8
  const MIN_COMPRESSIBLE_BYTES = 1024;
9
9
 
10
+ export function encodeContentDispositionFilename(fileName) {
11
+ return encodeURIComponent(String(fileName ?? ''))
12
+ .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
13
+ }
14
+
15
+ export function createSafeAsciiFilename(fileName, fallback = 'attachment') {
16
+ const normalized = String(fileName ?? '')
17
+ .replace(/[^\x20-\x7E]+/g, '_')
18
+ .replace(/["\\]/g, '_')
19
+ .trim();
20
+ return normalized || fallback;
21
+ }
22
+
10
23
  export const SECURITY_HEADERS = {
11
24
  'Referrer-Policy': 'strict-origin-when-cross-origin',
12
25
  'X-Content-Type-Options': 'nosniff',
@@ -13,7 +13,6 @@ import {
13
13
  } from '../../../domain/file-kind.js';
14
14
  import { createCommentOverview } from '../../domain/comment-overview.js';
15
15
  import { scanWorkspaceState as scanWorkspaceStateFromAdapter } from '../../domain/workspace-state.js';
16
- import { getEditableVaultContentKind } from './vault-content-adapter.js';
17
16
  import {
18
17
  INVALID_VAULT_FILE_PATH_ERROR,
19
18
  isIgnoredVaultEntry,
@@ -24,6 +23,22 @@ import {
24
23
  sanitizeVaultPath,
25
24
  toVaultRelativePath,
26
25
  } from './path-utils.js';
26
+
27
+ const EDITABLE_VAULT_CONTENT_PATH_ERRORS = {
28
+ base: 'Invalid file path — must end in .base',
29
+ drawio: 'Invalid file path — must end in .drawio',
30
+ excalidraw: 'Invalid file path — must end in .excalidraw',
31
+ markdown: 'Invalid file path',
32
+ mermaid: 'Invalid file path — must end in .mmd or .mermaid',
33
+ plantuml: 'Invalid file path — must end in .puml or .plantuml',
34
+ };
35
+
36
+ function getEditableVaultContentKind(filePath) {
37
+ const kind = getVaultFileKind(filePath);
38
+ return EDITABLE_VAULT_CONTENT_PATH_ERRORS[kind]
39
+ ? { invalidPathError: EDITABLE_VAULT_CONTENT_PATH_ERRORS[kind], kind }
40
+ : null;
41
+ }
27
42
  import { SidecarStore } from './sidecar-store.js';
28
43
  import { createWorkspaceStateFileSystemAdapter } from '../workspace/workspace-state-file-system-adapter.js';
29
44
 
@@ -376,9 +391,9 @@ export class VaultFileStore {
376
391
  return { absolute, adapter };
377
392
  }
378
393
 
379
- async readContentFile(filePath, expectedKind) {
394
+ async readContentFile(filePath, expectedKind = null) {
380
395
  const resolved = this.resolveAdapter(filePath);
381
- if (!resolved || resolved.adapter.kind !== expectedKind) {
396
+ if (!resolved || (expectedKind && resolved.adapter.kind !== expectedKind)) {
382
397
  return null;
383
398
  }
384
399
 
@@ -394,20 +409,7 @@ export class VaultFileStore {
394
409
  }
395
410
 
396
411
  async readEditableVaultContent(filePath) {
397
- const resolved = this.resolveAdapter(filePath);
398
- if (!resolved) {
399
- return null;
400
- }
401
-
402
- try {
403
- return await readFile(resolved.absolute, 'utf-8');
404
- } catch (error) {
405
- if (error.code === 'ENOENT') {
406
- return null;
407
- }
408
-
409
- throw error;
410
- }
412
+ return this.readContentFile(filePath);
411
413
  }
412
414
 
413
415
  async writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
@@ -425,9 +427,9 @@ export class VaultFileStore {
425
427
  }
426
428
  }
427
429
 
428
- async writeContentFile(filePath, content, expectedKind, { invalidateCollaborationSnapshot = true } = {}) {
430
+ async writeContentFile(filePath, content, expectedKind = null, { invalidateCollaborationSnapshot = true } = {}) {
429
431
  const resolved = this.resolveAdapter(filePath);
430
- if (!resolved || resolved.adapter.kind !== expectedKind) {
432
+ if (!resolved || (expectedKind && resolved.adapter.kind !== expectedKind)) {
431
433
  return {
432
434
  ok: false,
433
435
  error: resolved?.adapter?.invalidPathError ?? getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
@@ -438,15 +440,7 @@ export class VaultFileStore {
438
440
  }
439
441
 
440
442
  async writeEditableVaultContent(filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
441
- const resolved = this.resolveAdapter(filePath);
442
- if (!resolved) {
443
- return {
444
- ok: false,
445
- error: getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
446
- };
447
- }
448
-
449
- return this.writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot });
443
+ return this.writeContentFile(filePath, content, null, { invalidateCollaborationSnapshot });
450
444
  }
451
445
 
452
446
  async readMarkdownFile(filePath) {
@@ -457,22 +451,6 @@ export class VaultFileStore {
457
451
  return this.readContentFile(filePath, 'base');
458
452
  }
459
453
 
460
- async readExcalidrawFile(filePath) {
461
- return this.readContentFile(filePath, 'excalidraw');
462
- }
463
-
464
- async readDrawioFile(filePath) {
465
- return this.readContentFile(filePath, 'drawio');
466
- }
467
-
468
- async readMermaidFile(filePath) {
469
- return this.readContentFile(filePath, 'mermaid');
470
- }
471
-
472
- async readPlantUmlFile(filePath) {
473
- return this.readContentFile(filePath, 'plantuml');
474
- }
475
-
476
454
  async readImageAttachmentFile(filePath) {
477
455
  const absolute = this.resolveContentPath(filePath, { requireVaultFile: false });
478
456
  if (!absolute || !isImageAttachmentFilePath(filePath)) {
@@ -533,22 +511,6 @@ export class VaultFileStore {
533
511
  return this.writeContentFile(filePath, content, 'base', options);
534
512
  }
535
513
 
536
- async writeExcalidrawFile(filePath, content, options = {}) {
537
- return this.writeContentFile(filePath, content, 'excalidraw', options);
538
- }
539
-
540
- async writeDrawioFile(filePath, content, options = {}) {
541
- return this.writeContentFile(filePath, content, 'drawio', options);
542
- }
543
-
544
- async writeMermaidFile(filePath, content, options = {}) {
545
- return this.writeContentFile(filePath, content, 'mermaid', options);
546
- }
547
-
548
- async writePlantUmlFile(filePath, content, options = {}) {
549
- return this.writeContentFile(filePath, content, 'plantuml', options);
550
- }
551
-
552
514
  async writeImageAttachmentForDocument(sourceDocumentPath, {
553
515
  content,
554
516
  mimeType,