collabmd 0.1.49 → 0.1.51
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.
- package/README.md +10 -659
- package/bin/collabmd.js +36 -20
- package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Crf9Y3Q6.js +1 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-CdVZqicp.js → abnfDiagram-VCTEODGH-PuinKbSQ.js} +1 -1
- package/dist/client/assets/ar-SA-5WIASEJP-Di7OimCN.js +10 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-wUo0bXif.js → architectureDiagram-5GKGNRK7-46hPkrZv.js} +1 -1
- package/dist/client/assets/az-AZ-V5EUQD6C-C19OGTT_.js +1 -0
- package/dist/client/assets/bg-BG-EXASCMTR-BIt0xWyb.js +5 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-BRSK3m49.js → blockDiagram-I7D4REHJ-C1S5Bzf8.js} +1 -1
- package/dist/client/assets/bn-BD-U4SYNFCO-CdNaPy4Q.js +3 -0
- package/dist/client/assets/bn-IN-HKDJIITE-CdNaPy4Q.js +3 -0
- package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-BBqQnUEb.js → browser-BKLM0ThC-IxjwuOIz-DyJcVMFR.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-yD2poxqw.js → c4Diagram-7LVT6UL2-VAk1HPmz.js} +1 -1
- package/dist/client/assets/ca-ES-2KGUU5XB-C9t-c0cH.js +8 -0
- package/dist/client/assets/channel-jwdhnPiV.js +1 -0
- package/dist/client/assets/chunk-2E4U76K2-Ba8Wf22k.js +1 -0
- package/dist/client/assets/{chunk-4HAMMTFA-DStbIfJ1.js → chunk-4HAMMTFA-Ht-73lsT.js} +1 -1
- package/dist/client/assets/chunk-5XKZK2GL-D4UAZSOJ.js +1 -0
- package/dist/client/assets/{chunk-75Z2AOVW-C5pGd3W9.js → chunk-75Z2AOVW-B2cZexqK.js} +1 -1
- package/dist/client/assets/{chunk-CLGD4ZFX-BMeArk03.js → chunk-CLGD4ZFX-Cmtx89ht.js} +1 -1
- package/dist/client/assets/{chunk-DU6HZSFF-Zkp69c6c.js → chunk-DU6HZSFF-C6d6PJfE.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-D4xNct1r.js → chunk-F27PBJKO-Dg3H6KLL.js} +1 -1
- package/dist/client/assets/{chunk-GMAD6QVW-NZ6WpDb8.js → chunk-GMAD6QVW-DUfjx_d5.js} +1 -1
- package/dist/client/assets/{chunk-GVQU2GXP-D8SDprfX.js → chunk-GVQU2GXP-D1l7oRGR.js} +1 -1
- package/dist/client/assets/{chunk-IMKFNOWR-D8jEuU3Q.js → chunk-IMKFNOWR-3F6NhHUP.js} +1 -1
- package/dist/client/assets/{chunk-L3NEJ4N5-aijKP-eh.js → chunk-L3NEJ4N5-BmCVn4y-.js} +1 -1
- package/dist/client/assets/{chunk-OSK3NFVY-CCbLQAMa.js → chunk-OSK3NFVY-CWHXAmfx.js} +1 -1
- package/dist/client/assets/{chunk-P2QGCYS3-Oag_FdCq.js → chunk-P2QGCYS3-Du8EtwOa.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-CYnpIgXT.js → chunk-POPQ4Y6H-B5yJIrZE.js} +1 -1
- package/dist/client/assets/{chunk-PWAF6VOD-JSNrcBmP.js → chunk-PWAF6VOD-B3gML4ps.js} +1 -1
- package/dist/client/assets/{chunk-SHT3W25Y-BiQGljao.js → chunk-SHT3W25Y-BKaI8jZO.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-DB485R5x.js → chunk-SVP7TREG-XlsB_ZMZ.js} +1 -1
- package/dist/client/assets/{chunk-TICWLB2K-8rAVvoS3.js → chunk-TICWLB2K-Cpp2z8yK.js} +1 -1
- package/dist/client/assets/chunk-TLUHSLCS-Yl7B0Vrz.js +1 -0
- package/dist/client/assets/chunk-ZNVOA63L-BmCQjhx-.js +40 -0
- package/dist/client/assets/{chunk-FLYJHZSQ-Be7lKF17.js → chunk-ZPMXAHWN-Dt0TxJa6.js} +2 -2
- package/dist/client/assets/classDiagram-ZZMXUADV-BRw9vo8U.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BRw9vo8U.js +1 -0
- package/dist/client/assets/comment-markdown-renderer-B9_vPc3F.js +1 -0
- package/dist/client/assets/comment-thread-store-NNHqRVsX.js +1 -0
- package/dist/client/assets/comment-threads-nJhK1yfc.js +4 -0
- package/dist/client/assets/cs-CZ-VUCGPRML-BfCoYAgj.js +7 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-rTz9RhFH.js → cynefinDiagram-5FMLGOSQ-BRoCEoZM.js} +1 -1
- package/dist/client/assets/da-DK-NNDP2IVP-DBw9ZNTR.js +2 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-Cr67wLpQ.js → dagre-GXQ25YYZ-BSfKCfy7.js} +1 -1
- package/dist/client/assets/de-CH-I7RAVIZN-DYW18Vsr.js +11 -0
- package/dist/client/assets/de-DE-WBQ3DQLR-DYW18Vsr.js +11 -0
- package/dist/client/assets/deferred-collab-rBe4nuQ2.css +1 -0
- package/dist/client/assets/deferred-git-BHKtkFYi.css +1 -0
- package/dist/client/assets/deferred-preview-pe7Iwwx3.css +1 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-DywERe__.js → diagram-S7CK7UJ4-D7KaM9yj.js} +1 -1
- package/dist/client/assets/{diagram-UQ7AKVKN-CNYlXtu4.js → diagram-UQ7AKVKN-JevUZuYi.js} +1 -1
- package/dist/client/assets/{diagram-VSXAHHWV-0H1a61Bn.js → diagram-VSXAHHWV-B3-U-Q2E.js} +1 -1
- package/dist/client/assets/{diagram-VX7I27RA-CsJbsx5F.js → diagram-VX7I27RA-pSD4HMh1.js} +1 -1
- package/dist/client/assets/{diagram-Z3DM3KII-D0mLxEgI.js → diagram-Z3DM3KII-D8r1_CIb.js} +1 -1
- package/dist/client/assets/{direct-engine-DdrQKpgq-CtKfQzCt.js → direct-engine-DdrQKpgq-B5zIoeQw.js} +1 -1
- package/dist/client/assets/dist-B3HdUPsK.js +1 -0
- package/dist/client/assets/{dist-Tw-Fxpeb.js → dist-B7XMN9AT.js} +1 -1
- package/dist/client/assets/dist-BIRygGYH.js +1 -0
- package/dist/client/assets/dist-BPyOlNLY.js +2 -0
- package/dist/client/assets/{dist-D5wCC32z.js → dist-BR81yxMt.js} +1 -1
- package/dist/client/assets/{dist-TW8iFRyW.js → dist-B_B4XLmq.js} +1 -1
- package/dist/client/assets/dist-Bdy9ZRzd.js +9 -0
- package/dist/client/assets/{dist-netZOQtD.js → dist-Bfxzlnrf.js} +1 -1
- package/dist/client/assets/{dist-DzNmC81X.js → dist-Bx3QkS-3.js} +1 -1
- package/dist/client/assets/{dist-mj2Ht75J.js → dist-By7ieqAf.js} +1 -1
- package/dist/client/assets/dist-ByhQbe-x.js +1 -0
- package/dist/client/assets/{dist-CdmKGRGr.js → dist-BzFSJM0U.js} +1 -1
- package/dist/client/assets/dist-C5NkYKAa.js +1 -0
- package/dist/client/assets/{dist-D3fehAZ2.js → dist-CELhfKzh.js} +1 -1
- package/dist/client/assets/dist-CEirJSxk.js +1 -0
- package/dist/client/assets/dist-CO0-4CuV.js +39 -0
- package/dist/client/assets/dist-CRnJ0D9h.js +1 -0
- package/dist/client/assets/{dist-GvvCNBe4.js → dist-CbDyXgCo.js} +1 -1
- package/dist/client/assets/{dist-BeajGMhO.js → dist-CqXVyYoH.js} +1 -1
- package/dist/client/assets/{dist-LQ4kDCKz.js → dist-CrWzIWEE.js} +1 -1
- package/dist/client/assets/dist-CyNrloSI.js +1 -0
- package/dist/client/assets/dist-D60_kdpQ.js +1 -0
- package/dist/client/assets/{dist-DuH3ZrHo.js → dist-DCpIH3-_.js} +1 -1
- package/dist/client/assets/{dist-BPHLJ09L.js → dist-DJAMplZI.js} +2 -2
- package/dist/client/assets/{dist-DGEbEfw4.js → dist-DVXzbeDx.js} +1 -1
- package/dist/client/assets/{dist-C5NgpdG5.js → dist-Drv_wZYC.js} +1 -1
- package/dist/client/assets/{dist-DVy5woUy.js → dist-EWJYvBK1.js} +1 -1
- package/dist/client/assets/dist-Hdhj3L3t.js +1 -0
- package/dist/client/assets/{dist-DpYDHR9p.js → dist-gRRhmB-2.js} +3 -3
- package/dist/client/assets/dist-kWb2d1CH.js +1 -0
- package/dist/client/assets/dist-kiD2GIsD.js +13 -0
- package/dist/client/assets/{dist-JaU3aRlD.js → dist-l-56SowH.js} +1 -1
- package/dist/client/assets/{dist-BK9QvQrc.js → dist-nxQErAaK.js} +2 -2
- package/dist/client/assets/dist-sLzRQQk7.js +1 -0
- package/dist/client/assets/document-formatter-Qdiq9uJs.js +1 -0
- package/dist/client/assets/drawioEditor-CHf1vtdQ.js +9 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-HeTxHpCU.js → ebnfDiagram-PWID7BFC-UJ0Fz5ci.js} +1 -1
- package/dist/client/assets/editor-session-4Bn81iWm.js +14 -0
- package/dist/client/assets/el-GR-TYQHVGXW-Dx82YYAS.js +7 -0
- package/dist/client/assets/embedded-editor-base-jK221GC8.css +1 -0
- package/dist/client/assets/{embedpdf-DA4bA119-BPqZxwjc.js → embedpdf-DA4bA119-E8wZ11J2.js} +2 -3
- package/dist/client/assets/{embedpdf-BmE13ZZ0.js → embedpdf-LUXDBD3-.js} +1 -1
- package/dist/client/assets/{en-SJ2YIMFF-CJBL3nkq.js → en-2RFA324Y-BsuNJTcL.js} +1 -1
- package/dist/client/assets/{erDiagram-RLTQ6QDP-CbrDdd5P.js → erDiagram-RLTQ6QDP-CWrH1UJ9.js} +1 -1
- package/dist/client/assets/es-ES-JEUOREKJ-Rx0NUQDl.js +12 -0
- package/dist/client/assets/eu-ES-SO5DEEAN-CDYm-BcK.js +8 -0
- package/dist/client/assets/excalidraw-element-link-iA6zo0_f.js +7 -0
- package/dist/client/assets/{excalidrawEditor-BbSbI80a.css → excalidrawEditor-DDE0n1Pk.css} +1 -1
- package/dist/client/assets/excalidrawEditor-WIuguTz7.js +9 -0
- package/dist/client/assets/export-page-AN-wI5p4.js +56 -0
- package/dist/client/assets/exportDocument-B7IagJhQ.css +1 -0
- package/dist/client/assets/exportDocument-B9xNKpQe.js +2 -0
- package/dist/client/assets/fa-IR-FIYUE2GQ-C865Nx3X.js +9 -0
- package/dist/client/assets/fi-FI-REAEF6HQ-BIpjJqIb.js +6 -0
- package/dist/client/assets/flowDiagram-HODETNUW-kb1lUSBo.js +1 -0
- package/dist/client/assets/fr-FR-SUCL7J6B-DGAKE8jH.js +12 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-BHgOYiZz.js → ganttDiagram-EL5Y4UJY-BBNzDfaV.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-Dl__X3Sk.js → gitGraphDiagram-WWUBYQGX-Csf0Dm_1.js} +1 -1
- package/dist/client/assets/gl-ES-KHCSOGVH-DWKh0CMu.js +6 -0
- package/dist/client/assets/he-IL-JYXVXV2Q-zqbcM-4g.js +9 -0
- package/dist/client/assets/hi-IN-BU52H3BO-CY8v6eG9.js +3 -0
- package/dist/client/assets/highlight-theme-CzNkO-IJ.js +1 -0
- package/dist/client/assets/hu-HU-OWADXDQ3-CEl6Udfh.js +3 -0
- package/dist/client/assets/id-ID-EOMR5R3I-CGQwUjoL.js +8 -0
- package/dist/client/assets/image-2QKV3NAF-BUbX0y5Y.js +1 -0
- package/dist/client/assets/index-BAmZnTFV.css +1 -0
- package/dist/client/assets/index-mWiw418b.js +1111 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-DBpoANC9.js → infoDiagram-27XIBGKW-Bzy6kCbb.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BMPC6hfp.js → ishikawaDiagram-5VMMS53U-CRy9vIS5.js} +1 -1
- package/dist/client/assets/it-IT-FC2VTM3L-KTijNcUe.js +12 -0
- package/dist/client/assets/ja-JP-JBNTKYP4-BflWlGhw.js +12 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-B1sApUmM.js → journeyDiagram-3NMN7TZE-D4ZR_s9J.js} +1 -1
- package/dist/client/assets/kaa-TC3VIB7V-B-xtZfy0.js +1 -0
- package/dist/client/assets/kab-KAB-UOUDSQKM-BmO0O4Y4.js +4 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-C9yP4td1.js → kanban-definition-UXKFOSKX-CIDTmu5g.js} +1 -1
- package/dist/client/assets/kk-KZ-P5H2X7YS-CSQFB8IN.js +1 -0
- package/dist/client/assets/{km-KH-PCWDKPHP-DSmy5shj.js → km-KH-IHMV2US7-BxrjuEzr.js} +4 -4
- package/dist/client/assets/ko-KR-ZTMANIDF-BnNRXd5J.js +5 -0
- package/dist/client/assets/ku-TR-GPJTRB5G-BZM7f2aT.js +6 -0
- package/dist/client/assets/{line-BFl3ujec.js → line-DSWLHgpx.js} +1 -1
- package/dist/client/assets/lobby-presence-Rdjnc0_0.js +1 -0
- package/dist/client/assets/lt-LT-V3XDOK3P-MVQBOHmF.js +3 -0
- package/dist/client/assets/lv-LV-DVQ3FADO-CrenwAhS.js +4 -0
- package/dist/client/assets/markdown-it-CocJWnjv.js +13 -0
- package/dist/client/assets/mermaid-parser.core-DrdLA3p0.js +3 -0
- package/dist/client/assets/mermaid.core-C_FK-7n4.js +1 -0
- package/dist/client/assets/{mermaid.core-BrY09czX.js → mermaid.core-D0cMM4Rl.js} +2 -3
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-BUQHcYbK.js → mindmap-definition-YA3MSWOX-DO8NB9VH.js} +1 -1
- package/dist/client/assets/mr-IN-VZ6HH5FE-B-PHPglH.js +9 -0
- package/dist/client/assets/my-MM-XYKWHRK6-Be5sYp5q.js +1 -0
- package/dist/client/assets/nb-NO-UNO2GGZJ-BvSKGdja.js +8 -0
- package/dist/client/assets/nl-NL-76EFHT4P-C2yNx1Cj.js +13 -0
- package/dist/client/assets/nn-NO-CFKD7ABE-4NsqlDRP.js +4 -0
- package/dist/client/assets/oc-FR-YBJTCJ3J-B4OTQsWW.js +4 -0
- package/dist/client/assets/pa-IN-SNOXSMRV-CKj_sOG7.js +4 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-Bi2Iml7Z.js → pegDiagram-XKGWAZYB-DS6Ab21R.js} +1 -1
- package/dist/client/assets/percentages-Q7USCRWZ-DWE6uvTs.js +1 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-_gYXnMoi.js → pieDiagram-E7YTZNPT-BbFe6Tgs.js} +1 -1
- package/dist/client/assets/pl-PL-BSY6YFZ3-CFuzA6L0.js +12 -0
- package/dist/client/assets/preload-helper-CtT0-S4g.js +1 -0
- package/dist/client/assets/preview-render-compiler-C_7J7eia.js +43 -0
- package/dist/client/assets/preview-render-compiler-DzJ1KR_M.js +1 -0
- package/dist/client/assets/preview-render-worker-1DoIDllV.js +59 -0
- package/dist/client/assets/prod-D5TxmmoB.js +1 -0
- package/dist/client/assets/prod-pbFU4TaM.js +145 -0
- package/dist/client/assets/pt-BR-CZDV62R3-CkPMtyNx.js +10 -0
- package/dist/client/assets/pt-PT-JO57XJJW-CBSnfGtF.js +12 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DwexhEhd.js → quadrantDiagram-AXDQQJYC-fJE7iAxt.js} +1 -1
- package/dist/client/assets/quick-switcher-De4PjZFC.css +1 -0
- package/dist/client/assets/quick-switcher-controller-CUajuy78.js +1 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-BVA5UbMu.js → railroadDiagram-O6MQD6OU-CUQKqbCK.js} +1 -1
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-C4cKwiIw.js → requirementDiagram-BXWQKSXE-Balm0WW8.js} +1 -1
- package/dist/client/assets/ro-RO-UZ5ICYYN-BOuntc_r.js +12 -0
- package/dist/client/assets/room-DX7lIfnu.js +1 -0
- package/dist/client/assets/ru-RU-AN7JPREC-D-ow3SNR.js +10 -0
- package/dist/client/assets/runtime-config-BFVdhnJu.js +1 -0
- package/dist/client/assets/runtime-paths-Cn0snt_9.js +1 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-B5HHkRT2.js → sankeyDiagram-P5KCCOFB-CcbMqrlQ.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BX6jqJFD.js → sequenceDiagram-WJ2MYXX4-BL1j3Sn-.js} +1 -1
- package/dist/client/assets/si-LK-7CBLD6QQ-c91EepX0.js +1 -0
- package/dist/client/assets/sk-SK-SWR6DKBI-D5vFMIL6.js +7 -0
- package/dist/client/assets/sl-SI-JRML4FIH-D53L_0S2.js +6 -0
- package/dist/client/assets/{stateDiagram-D77RDMKH-CmqxyRGx.js → stateDiagram-D77RDMKH-DNi924hh.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-C62JEwak.js +1 -0
- package/dist/client/assets/sv-SE-4ZPKFFXF-DT-G7RCI.js +12 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-Bmgb9Zld.js → swimlanes-42K2YHIH-ColgjSH4.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-B9UZhEj4.js +8 -0
- package/dist/client/assets/ta-IN-V6NHHU6Z-D5jy7_AE.js +6 -0
- package/dist/client/assets/th-TH-P7CTMGDK-6sy0NO7K.js +1 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-BA-lVH6P.js → timeline-definition-24CTP7MA-7pch5JAr.js} +1 -1
- package/dist/client/assets/tr-TR-GUFYG22B-ClVaf8h1.js +4 -0
- package/dist/client/assets/uk-UA-K6SV5NFQ-BLTTtyNB.js +6 -0
- package/dist/client/assets/uz-UZ-TVKTZO2G-Bm02Eg3D.js +1 -0
- package/dist/client/assets/vault-api-client-QjZ_T03l.js +7 -0
- package/dist/client/assets/vault-utils-Bct69Xw2.js +1 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-DNdUC_Xj.js → vennDiagram-4TSXK5OY-C5taziCX.js} +1 -1
- package/dist/client/assets/vi-VN-7FKFXJNO-CL3WPhmG.js +7 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-C2oY-YbF.js → wardleyDiagram-VM6X3IG4-BbSlUwuM.js} +1 -1
- package/dist/client/assets/{wiki-link-resolver-DFIwErjc.js → wiki-link-resolver-C2P_WmTV.js} +1 -1
- package/dist/client/assets/{worker-engine-m0rlHn8R-S8mpn_O0.js → worker-engine-m0rlHn8R-eSDcDGEI.js} +1 -1
- package/dist/client/assets/workspace-change-CVA9dVmy.js +1 -0
- package/dist/client/assets/workspace-sync-client-D4nblH_2.js +1 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CoIR8CBX.js → xychartDiagram-S5SC5T6Z-D06X1arY.js} +1 -1
- package/dist/client/assets/yjs-B41tM6Sz.js +4 -0
- package/dist/client/assets/yjs-provider-reset-guard-R43MnLNc.js +1 -0
- package/dist/client/assets/zh-CN-AOKVLNNK-DGidDH2b.js +11 -0
- package/dist/client/assets/zh-HK-CDKPF5DC-CRcNR3rk.js +1 -0
- package/dist/client/assets/zh-TW-ZVGYESGW-C7Qji1y6.js +13 -0
- package/dist/client/drawio-editor.html +7 -8
- package/dist/client/excalidraw-editor.html +31 -33
- package/dist/client/export-document.html +5 -7
- package/dist/client/index.html +30 -26
- package/package.json +14 -20
- package/src/client/app/drawio-editor.html +1 -1
- package/src/client/app/excalidraw-editor.html +1 -1
- package/src/client/app/export-document.html +1 -1
- package/src/client/app/index.html +28 -4
- package/src/client/app/main-entry.js +1 -19
- package/src/client/application/app-shell/comments-feature.js +6 -0
- package/src/client/application/app-shell/ui-feature-shell.js +136 -58
- package/src/client/application/app-shell/ui-feature-tab-activity.js +8 -3
- package/src/client/application/app-shell-elements.js +5 -0
- package/src/client/application/highlight-theme.js +16 -0
- package/src/client/application/preview-render-compiler.js +43 -20
- package/src/client/application/preview-render-executor.js +0 -26
- package/src/client/application/preview-renderer.js +24 -7
- package/src/client/application/workspace-coordinator.js +20 -21
- package/src/client/bootstrap/collabmd-app-shell.js +71 -35
- package/src/client/bootstrap/lazy-collab-clients.js +90 -0
- package/src/client/domain/excalidraw-scene-reconcile.js +5 -2
- package/src/client/domain/hash-routes.js +5 -0
- package/src/client/domain/highlight-runtime.js +47 -0
- package/src/client/domain/lobby-chat.js +2 -0
- package/src/client/domain/runtime-paths.js +56 -7
- package/src/client/domain/vault-utils.js +11 -0
- package/src/client/excalidraw-editor.js +20 -4
- package/src/client/infrastructure/auth-client.js +1 -2
- package/src/client/infrastructure/browser-preferences-port.js +16 -0
- package/src/client/infrastructure/editor-view-adapter.js +43 -8
- package/src/client/infrastructure/excalidraw-room-client.js +9 -1
- package/src/client/infrastructure/hosted-api-client.js +60 -0
- package/src/client/infrastructure/lobby-presence.js +2 -2
- package/src/client/infrastructure/runtime-config.js +3 -1
- package/src/client/infrastructure/webmcp-tool-registry.js +16 -2
- package/src/client/presentation/comment-markdown-renderer.js +2 -14
- package/src/client/presentation/comment-overview-controller.js +1 -2
- package/src/client/presentation/comment-ui/comment-ui-shared.js +5 -2
- package/src/client/presentation/file-explorer-controller.js +3 -0
- package/src/client/presentation/file-explorer-view.js +272 -174
- package/src/client/presentation/git-panel-controller.js +1 -1
- package/src/client/presentation/hosted-workspace-gate-controller.js +180 -0
- package/src/client/presentation/layout-controller.js +10 -1
- package/src/client/presentation/team-settings-controller.js +228 -0
- package/src/client/styles/deferred-collab.css +5 -0
- package/src/client/styles/deferred-git.css +7 -0
- package/src/client/styles/deferred-preview.css +6 -0
- package/src/client/styles/features/diagram-preview.css +0 -15
- package/src/client/styles/features/outline.css +4 -2
- package/src/client/styles/features/preview-markdown.css +25 -11
- package/src/client/styles/features/team-settings.css +162 -0
- package/src/client/styles/foundation/tokens.css +2 -2
- package/src/client/styles/layout/editor-page.css +0 -13
- package/src/client/styles/layout/overlays.css +16 -0
- package/src/client/styles/layout/responsive.css +5 -5
- package/src/client/styles/layout/shell.css +20 -1
- package/src/client/styles/layout/sidebar.css +92 -3
- package/src/client/styles/style.css +3 -19
- package/src/domain/agent-tool-definitions.js +139 -63
- package/src/domain/collabmd-content-capabilities.js +4 -4
- package/src/domain/excalidraw-agent-scene.js +108 -6
- package/src/domain/excalidraw-agent-verification.js +95 -1
- package/src/domain/excalidraw-room-codec.js +12 -1
- package/src/domain/literal-text-search.js +13 -0
- package/src/server/application/agent-content-service.js +142 -74
- package/src/server/config/env.js +96 -5
- package/src/server/create-app-server.js +23 -153
- package/src/server/domain/hosted-workspace.js +10 -1
- package/src/server/domain/ripgrep-search-service.js +68 -21
- package/src/server/infrastructure/git/local-exclude.js +13 -1
- package/src/server/infrastructure/http/create-agent-api-handler.js +1 -1
- package/src/server/infrastructure/http/create-hosted-api-handler.js +5 -0
- package/src/server/infrastructure/http/create-request-handler.js +95 -26
- package/src/server/infrastructure/http/create-static-handler.js +3 -0
- package/src/server/infrastructure/http/create-vault-api-query-handler.js +15 -2
- package/src/server/infrastructure/mcp/create-agent-mcp-handler.js +2 -1
- package/src/server/infrastructure/persistence/sidecar-store.js +12 -5
- package/src/server/infrastructure/persistence/vault-file-store.js +2 -3
- package/src/server/infrastructure/websocket/attach-collaboration-gateway.js +48 -22
- package/src/server/shared/agent-tool-rate-limiter.js +7 -0
- package/src/server/startup/git-remote-bootstrap.js +56 -49
- package/src/server/vault-registry.js +251 -0
- package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-C-nmgL5g.js +0 -1
- package/dist/client/assets/ar-SA-PQUY64WN-xjXgbW6d.js +0 -10
- package/dist/client/assets/az-AZ-OXJXL76K-4JkO4Pca.js +0 -1
- package/dist/client/assets/base-CaIEJUF9.css +0 -1
- package/dist/client/assets/bg-BG-W2GKIJDF-DnkH_o81.js +0 -5
- package/dist/client/assets/bn-BD-TGL7M4PJ-CG4JkmtP.js +0 -3
- package/dist/client/assets/bn-IN-BKETKYEH-CG4JkmtP.js +0 -3
- package/dist/client/assets/ca-ES-LD5SCRVV-U6_TVMX9.js +0 -8
- package/dist/client/assets/channel-Fa4GS_-F.js +0 -1
- package/dist/client/assets/chunk-2E4U76K2-BPnTT-J3.js +0 -2
- package/dist/client/assets/chunk-7XWMRXBY-CfMzEq80.js +0 -1
- package/dist/client/assets/chunk-RM4UPSZO-DOWllDY8.js +0 -41
- package/dist/client/assets/chunk-TLUHSLCS-DTY5v0aj.js +0 -2
- package/dist/client/assets/classDiagram-ZZMXUADV-BsQWoR3Q.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BsQWoR3Q.js +0 -1
- package/dist/client/assets/comment-thread-store-CX98zR6q.js +0 -1
- package/dist/client/assets/comment-threads-BnRwo5B9.js +0 -4
- package/dist/client/assets/cs-CZ-OFPU5DBV-BmFAIhqX.js +0 -7
- package/dist/client/assets/da-DK-FRDJFYWF-H387Jw8B.js +0 -2
- package/dist/client/assets/de-CH-ZG7H3QK3-C_groygo.js +0 -11
- package/dist/client/assets/de-DE-SIJYH4IH-C_groygo.js +0 -11
- package/dist/client/assets/dist--hk9I5HQ.js +0 -1
- package/dist/client/assets/dist-B1XEa-Zs.js +0 -1
- package/dist/client/assets/dist-BJ1bJs33.js +0 -1
- package/dist/client/assets/dist-Bd1JucQF.js +0 -1
- package/dist/client/assets/dist-ByrG2qBA.js +0 -1
- package/dist/client/assets/dist-C0G3AaXG.js +0 -1
- package/dist/client/assets/dist-CKS_-are.js +0 -1
- package/dist/client/assets/dist-D37Hyu3h.js +0 -9
- package/dist/client/assets/dist-Dl_tpDSr.js +0 -1
- package/dist/client/assets/dist-Dm4w5UId.js +0 -1
- package/dist/client/assets/dist-RKBTaQMb.js +0 -13
- package/dist/client/assets/dist-eBx8q6Sy.js +0 -1
- package/dist/client/assets/dist-jVU5Be5P.js +0 -1
- package/dist/client/assets/document-formatter-rDDjRfZ2.js +0 -2
- package/dist/client/assets/drawioEditor-JubEEha7.js +0 -9
- package/dist/client/assets/editor-session-Bk6oIvSr.js +0 -54
- package/dist/client/assets/el-GR-IEE2CGI2-BkT6YT54.js +0 -7
- package/dist/client/assets/embedded-editor-base-BlCgz6mw.css +0 -1
- package/dist/client/assets/es-Bfdp096f.js +0 -22
- package/dist/client/assets/es-ES-TVVPWKV5-CpPKJXTM.js +0 -12
- package/dist/client/assets/eu-ES-CGBMFQDT-Bu3N2493.js +0 -8
- package/dist/client/assets/excalidraw-element-link-YLIaTnVF.js +0 -7
- package/dist/client/assets/excalidrawEditor-dBMbRX_S.js +0 -9
- package/dist/client/assets/export-page-CRRQ2NEl.js +0 -57
- package/dist/client/assets/exportDocument-BlQRd9_m.js +0 -2
- package/dist/client/assets/exportDocument-CNSbjZwu.css +0 -1
- package/dist/client/assets/fa-IR-IE6XAPR4-BEvLCORD.js +0 -9
- package/dist/client/assets/fi-FI-P7TKNHRM-DI0q8iSX.js +0 -6
- package/dist/client/assets/file-icon-svg-Y_kpF957.js +0 -1
- package/dist/client/assets/flowDiagram-HODETNUW-D5Gy0wmg.js +0 -1
- package/dist/client/assets/fr-FR-QI2XZNT7-y8kXd8LA.js +0 -12
- package/dist/client/assets/gl-ES-TLYCNOZZ-Br-Fhff-.js +0 -6
- package/dist/client/assets/he-IL-ZX43XLGP-qKQq6V9X.js +0 -9
- package/dist/client/assets/hi-IN-UTYRMTUF-DOUcwrDO.js +0 -3
- package/dist/client/assets/hu-HU-AJOSEBW6-FqTyvHlD.js +0 -3
- package/dist/client/assets/id-ID-ETLTVG6C-CQqh3CLS.js +0 -8
- package/dist/client/assets/image-ZVKINSPA-DgzW5zAy.js +0 -1
- package/dist/client/assets/index-D3RER1SZ.js +0 -1023
- package/dist/client/assets/index-DREVKl_K.css +0 -1
- package/dist/client/assets/it-IT-B4B6TP6L-V-yK3SZz.js +0 -12
- package/dist/client/assets/ja-JP-IYKVURR5-BQKBXRpX.js +0 -12
- package/dist/client/assets/kaa-SE2BUIKX-CZ5kfwPg.js +0 -1
- package/dist/client/assets/kab-KAB-Y3GLKXLR-Do7GWfuN.js +0 -4
- package/dist/client/assets/kk-KZ-ABWUFVOH-BpqVciQz.js +0 -1
- package/dist/client/assets/ko-KR-7JQDXKGM-N42lep78.js +0 -5
- package/dist/client/assets/ku-TR-NAH2Q5B7-K8LLl9fk.js +0 -6
- package/dist/client/assets/lt-LT-VQFYRSNQ-BmOd0ALn.js +0 -3
- package/dist/client/assets/lv-LV-T62VSYUM-B22WdPhp.js +0 -4
- package/dist/client/assets/mermaid-parser.core-Bl0efOMt.js +0 -4
- package/dist/client/assets/mermaid.core-DfcNfOTv.js +0 -1
- package/dist/client/assets/modulepreload-polyfill-P2Xu9kJm.js +0 -1
- package/dist/client/assets/mr-IN-V4FHLCJE-XX069tpm.js +0 -9
- package/dist/client/assets/my-MM-E3SQ6E54-cst_-5SB.js +0 -1
- package/dist/client/assets/nb-NO-MLNOFN5H-Bu2URWko.js +0 -8
- package/dist/client/assets/nl-NL-D5L3ZV4M-BqrV0btt.js +0 -13
- package/dist/client/assets/nn-NO-NNHDGPKB-DK-xZaWM.js +0 -4
- package/dist/client/assets/oc-FR-DWCRF55G-BZ5Po5R6.js +0 -4
- package/dist/client/assets/pa-IN-3JSAY44M-BZQSjKrS.js +0 -4
- package/dist/client/assets/percentages-ETZPVQEE-DFxFqXgH.js +0 -1
- package/dist/client/assets/pl-PL-ACURYKP3-qcEOSfCk.js +0 -12
- package/dist/client/assets/preload-helper-HclGiUj8.js +0 -1
- package/dist/client/assets/preview-render-compiler-CfxJYldJ.js +0 -41
- package/dist/client/assets/preview-render-compiler-Cu8_i9iS.js +0 -1
- package/dist/client/assets/preview-render-worker-c4Yi93qW.js +0 -66
- package/dist/client/assets/prod-BiJL30sl.js +0 -1
- package/dist/client/assets/prod-qAk7rHa4.js +0 -177
- package/dist/client/assets/pt-BR-LOX7MLGD-DLueHSyZ.js +0 -10
- package/dist/client/assets/pt-PT-CZ2U2RFQ-BJ-GAEm6.js +0 -12
- package/dist/client/assets/quick-switcher-controller-BoIK_wuG.js +0 -1
- package/dist/client/assets/ro-RO-2HECL2X6-CJUvKAf0.js +0 -12
- package/dist/client/assets/ru-RU-HAYNXO46-BWSlvTrt.js +0 -10
- package/dist/client/assets/runtime-config-DcmnGcXU.js +0 -1
- package/dist/client/assets/si-LK-W5KNS4H6-DGGCsn7k.js +0 -1
- package/dist/client/assets/sk-SK-7K2CFGDV-CY4uTYgQ.js +0 -7
- package/dist/client/assets/sl-SI-OXV2QZWW-2-weqaBY.js +0 -6
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-zoLLQVyh.js +0 -1
- package/dist/client/assets/sv-SE-JTOBZRGL-9-IUtVkO.js +0 -12
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DS-KQN37.js +0 -8
- package/dist/client/assets/ta-IN-KFAVKXGT-gHO6Q_DH.js +0 -6
- package/dist/client/assets/th-TH-VDMSCPDL-BvJuw6PJ.js +0 -1
- package/dist/client/assets/tr-TR-CEZ6GX45-CG6UU3Su.js +0 -4
- package/dist/client/assets/uk-UA-Q3H3OXQC-CSuIg_DY.js +0 -6
- package/dist/client/assets/uz-UZ-NGCSWWPX-mom7rxSP.js +0 -1
- package/dist/client/assets/vault-api-client-iZLhMJKe.js +0 -6
- package/dist/client/assets/vi-VN-P3NDEVPS-BB0Fu9ck.js +0 -7
- package/dist/client/assets/yjs-provider-reset-guard-9ul1qF6k.js +0 -4
- package/dist/client/assets/zh-CN-SS3O57GA-Bj8wsiMe.js +0 -11
- package/dist/client/assets/zh-HK-LWJT3VCF-DOTquTCh.js +0 -1
- package/dist/client/assets/zh-TW-VJXC72RT-B48PRo-l.js +0 -13
- package/integrations/pi/index.ts +0 -94
- /package/dist/client/assets/{vault-api-client-C3mlS_4N.css → auth-gate-C3mlS_4N.css} +0 -0
- /package/dist/client/assets/{base-BYODPHdS.js → github.min-DBihDoic.js} +0 -0
|
@@ -6,32 +6,18 @@ import { AgentConnectionService } from './application/agent-connection-service.j
|
|
|
6
6
|
import { AgentContentService } from './application/agent-content-service.js';
|
|
7
7
|
import { createAuthService } from './auth/create-auth-service.js';
|
|
8
8
|
import { logPerfEvent } from './config/perf-logging.js';
|
|
9
|
-
import { BacklinkIndex } from './domain/backlink-index.js';
|
|
10
|
-
import { BaseQueryService } from './domain/bases/base-query-service.js';
|
|
11
|
-
import { CollaborationDocumentStore } from './domain/collaboration/collaboration-document-store.js';
|
|
12
|
-
import { CollaborationRoom } from './domain/collaboration/collaboration-room.js';
|
|
13
9
|
import { renderDocx } from './domain/docx-exporter.js';
|
|
14
|
-
import { GitService } from './infrastructure/git/git-service.js';
|
|
15
|
-
import { ensureCollabMetadataGitExclude } from './infrastructure/git/local-exclude.js';
|
|
16
10
|
import { GitHubAppClient } from './infrastructure/github/github-app-client.js';
|
|
17
11
|
import { GitHubSetupFlow } from './infrastructure/github/github-setup-flow.js';
|
|
18
12
|
import { HostedWorkspaceService } from './domain/hosted-workspace.js';
|
|
19
13
|
import { PlantUmlRenderer } from './infrastructure/plantuml/plantuml-renderer.js';
|
|
20
14
|
import { StructurizrWorkspaceService } from './infrastructure/structurizr/structurizr-workspace-service.js';
|
|
21
|
-
import { RoomRegistry } from './domain/collaboration/room-registry.js';
|
|
22
|
-
import { RipgrepSearchService } from './domain/ripgrep-search-service.js';
|
|
23
15
|
import { createRequestHandler } from './infrastructure/http/create-request-handler.js';
|
|
24
16
|
import { AgentConnectionStore } from './infrastructure/persistence/agent-connection-store.js';
|
|
25
17
|
import { HostedMetadataStore } from './infrastructure/persistence/hosted-metadata-store.js';
|
|
26
|
-
import { VaultFileStore } from './infrastructure/persistence/vault-file-store.js';
|
|
27
18
|
import { attachCollaborationGateway } from './infrastructure/websocket/attach-collaboration-gateway.js';
|
|
28
|
-
import { isDrawioLeaseRoom } from '../domain/drawio-room.js';
|
|
29
|
-
import { WORKSPACE_ROOM_NAME } from '../domain/workspace-room.js';
|
|
30
|
-
import { FileSystemSyncService } from './infrastructure/workspace/file-system-sync-service.js';
|
|
31
|
-
import { WorkspaceReconciliation } from './application/workspace-reconciliation.js';
|
|
32
|
-
import { createWorkspaceStateFileSystemAdapter } from './infrastructure/workspace/workspace-state-file-system-adapter.js';
|
|
33
19
|
import { createSignedCookieManager } from './auth/session-cookie.js';
|
|
34
|
-
import {
|
|
20
|
+
import { createVaultRegistry } from './vault-registry.js';
|
|
35
21
|
|
|
36
22
|
function getDisplayHost(host) {
|
|
37
23
|
return host === '127.0.0.1' ? 'localhost' : host;
|
|
@@ -76,16 +62,20 @@ export function createAppServer(config = loadConfig()) {
|
|
|
76
62
|
githubAppClient,
|
|
77
63
|
})
|
|
78
64
|
: null;
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
65
|
+
const testControls = {
|
|
66
|
+
wsRoomHydrateDelayMs: Math.max(0, Number(config.testWsRoomHydrateDelayMs || 0)),
|
|
67
|
+
};
|
|
68
|
+
// ponytail: one live context per vault; agent/hosted/structurizr stay on the primary this slice
|
|
69
|
+
const vaultRegistry = createVaultRegistry({ config, testControls });
|
|
70
|
+
const primary = vaultRegistry.getPrimaryContext();
|
|
71
|
+
const vaultFileStore = primary.vaultFileStore;
|
|
72
|
+
const backlinkIndex = primary.backlinkIndex;
|
|
73
|
+
const baseQueryService = primary.baseQueryService;
|
|
74
|
+
const gitService = primary.gitService;
|
|
75
|
+
const searchService = primary.searchService;
|
|
76
|
+
const roomRegistry = primary.roomRegistry;
|
|
77
|
+
const workspaceMutationCoordinator = primary.workspaceMutationCoordinator;
|
|
78
|
+
const fileSystemSyncService = primary.fileSystemSyncService;
|
|
89
79
|
const plantUmlRenderer = new PlantUmlRenderer({
|
|
90
80
|
serverUrl: config.plantumlServerUrl,
|
|
91
81
|
});
|
|
@@ -95,56 +85,6 @@ export function createAppServer(config = loadConfig()) {
|
|
|
95
85
|
trustedExecutableDsl: config.structurizr?.trustedExecutableDsl,
|
|
96
86
|
vaultDir: config.vaultDir,
|
|
97
87
|
});
|
|
98
|
-
const gitService = new GitService({
|
|
99
|
-
commandEnv: config.git?.commandEnv,
|
|
100
|
-
enabled: config.gitEnabled,
|
|
101
|
-
vaultDir: config.vaultDir,
|
|
102
|
-
});
|
|
103
|
-
const searchService = new RipgrepSearchService({
|
|
104
|
-
maxBufferBytes: config.searchMaxBufferBytes,
|
|
105
|
-
maxFileSize: config.searchMaxFileSize,
|
|
106
|
-
perfLoggingEnabled: config.perfLoggingEnabled,
|
|
107
|
-
vaultDir: config.vaultDir,
|
|
108
|
-
});
|
|
109
|
-
const testControls = {
|
|
110
|
-
wsRoomHydrateDelayMs: Math.max(0, Number(config.testWsRoomHydrateDelayMs || 0)),
|
|
111
|
-
};
|
|
112
|
-
const roomRegistry = new RoomRegistry({
|
|
113
|
-
createRoom: ({ name, onEmpty }) => {
|
|
114
|
-
const isTransientRoom = name === '__lobby__' || name === WORKSPACE_ROOM_NAME || isDrawioLeaseRoom(name);
|
|
115
|
-
const room = new CollaborationRoom({
|
|
116
|
-
documentStore: new CollaborationDocumentStore({
|
|
117
|
-
backlinkIndex: isTransientRoom ? null : backlinkIndex,
|
|
118
|
-
name,
|
|
119
|
-
vaultFileStore: isTransientRoom ? null : vaultFileStore,
|
|
120
|
-
}),
|
|
121
|
-
getHydrateDelayMs: () => testControls.wsRoomHydrateDelayMs,
|
|
122
|
-
idleGraceMs: config.wsRoomIdleGraceMs,
|
|
123
|
-
maxInitialSyncBytes: config.maxInitialSyncBytes,
|
|
124
|
-
maxBufferedAmountBytes: config.wsMaxBufferedAmountBytes,
|
|
125
|
-
name,
|
|
126
|
-
onEmpty,
|
|
127
|
-
perfLoggingEnabled: config.perfLoggingEnabled,
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
if (name === WORKSPACE_ROOM_NAME && workspaceMutationCoordinator?.workspaceState) {
|
|
131
|
-
room.replaceWorkspaceEntries(workspaceMutationCoordinator.workspaceState.entries, {
|
|
132
|
-
generatedAt: workspaceMutationCoordinator.workspaceState.scannedAt,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return room;
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
workspaceMutationCoordinator = new WorkspaceReconciliation({
|
|
140
|
-
backlinkIndex,
|
|
141
|
-
baseQueryService,
|
|
142
|
-
roomRegistry,
|
|
143
|
-
vaultFileStore,
|
|
144
|
-
workspaceStateAdapter: createWorkspaceStateFileSystemAdapter({
|
|
145
|
-
vaultDir: vaultFileStore.vaultDir,
|
|
146
|
-
}),
|
|
147
|
-
});
|
|
148
88
|
const agentConnectionStore = new AgentConnectionStore({
|
|
149
89
|
dbPath: config.agentAccess.dbPath,
|
|
150
90
|
});
|
|
@@ -156,18 +96,13 @@ export function createAppServer(config = loadConfig()) {
|
|
|
156
96
|
});
|
|
157
97
|
const agentContentService = new AgentContentService({
|
|
158
98
|
backlinkIndex,
|
|
99
|
+
baseQueryService,
|
|
159
100
|
plantUmlRenderer,
|
|
160
101
|
roomRegistry,
|
|
161
102
|
searchService,
|
|
162
103
|
vaultFileStore,
|
|
163
104
|
workspaceMutationCoordinator,
|
|
164
105
|
});
|
|
165
|
-
vaultFileStore.setManagedWriteTracker(workspaceMutationCoordinator);
|
|
166
|
-
fileSystemSyncService = new FileSystemSyncService({
|
|
167
|
-
mutationCoordinator: workspaceMutationCoordinator,
|
|
168
|
-
perfLoggingEnabled: config.perfLoggingEnabled,
|
|
169
|
-
vaultFileStore,
|
|
170
|
-
});
|
|
171
106
|
const requestHandler = createRequestHandler(
|
|
172
107
|
config,
|
|
173
108
|
authService,
|
|
@@ -189,6 +124,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
189
124
|
connectionService: agentConnectionService,
|
|
190
125
|
contentService: agentContentService,
|
|
191
126
|
},
|
|
127
|
+
vaultRegistry,
|
|
192
128
|
);
|
|
193
129
|
const httpServer = createServer((req, res) => {
|
|
194
130
|
requestHandler(req, res).catch((error) => {
|
|
@@ -211,6 +147,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
211
147
|
roomRegistry,
|
|
212
148
|
wsBasePath: config.wsBasePath,
|
|
213
149
|
hostedWorkspaceService,
|
|
150
|
+
vaultRegistry,
|
|
214
151
|
});
|
|
215
152
|
|
|
216
153
|
let shutdownPromise = null;
|
|
@@ -219,81 +156,14 @@ export function createAppServer(config = loadConfig()) {
|
|
|
219
156
|
async function listen() {
|
|
220
157
|
const startupStartedAt = Date.now();
|
|
221
158
|
|
|
222
|
-
if (await gitService.isGitRepo()) {
|
|
223
|
-
await ensureCollabMetadataGitExclude(config.vaultDir);
|
|
224
|
-
}
|
|
225
159
|
await hostedWorkspaceService.initialize();
|
|
226
160
|
if (config.agentAccess.enabled && config.auth.strategy !== 'none') {
|
|
227
161
|
await agentConnectionService.initialize();
|
|
228
162
|
}
|
|
229
163
|
|
|
230
|
-
const
|
|
231
|
-
config.search =
|
|
232
|
-
|
|
233
|
-
available: config.search.available,
|
|
234
|
-
durationMs: Date.now() - searchCapabilityStartedAt,
|
|
235
|
-
phase: 'search-capability',
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
const initialWorkspaceScanStartedAt = Date.now();
|
|
239
|
-
const initialWorkspaceSnapshot = await vaultFileStore.scanWorkspaceState();
|
|
240
|
-
vaultFileCount = initialWorkspaceSnapshot.vaultFileCount ?? 0;
|
|
241
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
242
|
-
durationMs: Date.now() - initialWorkspaceScanStartedAt,
|
|
243
|
-
phase: 'workspace-scan',
|
|
244
|
-
vaultFileCount,
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
const backlinkBuildStartedAt = Date.now();
|
|
248
|
-
await backlinkIndex.build({ workspaceState: initialWorkspaceSnapshot });
|
|
249
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
250
|
-
durationMs: Date.now() - backlinkBuildStartedAt,
|
|
251
|
-
markdownFileCount: initialWorkspaceSnapshot.markdownPaths?.length ?? 0,
|
|
252
|
-
phase: 'backlink-build',
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
const liveWorkspaceScanStartedAt = Date.now();
|
|
256
|
-
const liveWorkspaceSnapshot = await vaultFileStore.scanWorkspaceState();
|
|
257
|
-
const workspaceChangedDuringStartup = !workspaceStateMetadataEqual(initialWorkspaceSnapshot, liveWorkspaceSnapshot);
|
|
258
|
-
vaultFileCount = liveWorkspaceSnapshot.vaultFileCount ?? vaultFileCount;
|
|
259
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
260
|
-
changedDuringStartup: workspaceChangedDuringStartup,
|
|
261
|
-
durationMs: Date.now() - liveWorkspaceScanStartedAt,
|
|
262
|
-
phase: 'workspace-rescan',
|
|
263
|
-
vaultFileCount,
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
if (workspaceChangedDuringStartup) {
|
|
267
|
-
const backlinkRebuildStartedAt = Date.now();
|
|
268
|
-
await backlinkIndex.build({ workspaceState: liveWorkspaceSnapshot });
|
|
269
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
270
|
-
durationMs: Date.now() - backlinkRebuildStartedAt,
|
|
271
|
-
markdownFileCount: liveWorkspaceSnapshot.markdownPaths?.length ?? 0,
|
|
272
|
-
phase: 'backlink-rebuild',
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
const workspaceInitStartedAt = Date.now();
|
|
277
|
-
await workspaceMutationCoordinator.initialize({ snapshot: liveWorkspaceSnapshot });
|
|
278
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
279
|
-
durationMs: Date.now() - workspaceInitStartedAt,
|
|
280
|
-
phase: 'workspace-init',
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
if (config.fileWatcherEnabled !== false) {
|
|
284
|
-
const watcherStartStartedAt = Date.now();
|
|
285
|
-
await fileSystemSyncService.start({ snapshot: liveWorkspaceSnapshot });
|
|
286
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
287
|
-
durationMs: Date.now() - watcherStartStartedAt,
|
|
288
|
-
phase: 'watcher-start',
|
|
289
|
-
});
|
|
290
|
-
} else {
|
|
291
|
-
fileSystemSyncService.initializeFromSnapshot({ snapshot: liveWorkspaceSnapshot });
|
|
292
|
-
logPerfEvent(config.perfLoggingEnabled, 'startup', {
|
|
293
|
-
durationMs: 0,
|
|
294
|
-
phase: 'watcher-skipped',
|
|
295
|
-
});
|
|
296
|
-
}
|
|
164
|
+
const { searchCapability, snapshot: liveWorkspaceSnapshot, vaultFileCount: primaryFileCount } = await vaultRegistry.initializePrimary();
|
|
165
|
+
config.search = searchCapability;
|
|
166
|
+
vaultFileCount = primaryFileCount;
|
|
297
167
|
|
|
298
168
|
return new Promise((resolve, reject) => {
|
|
299
169
|
const listenStartedAt = Date.now();
|
|
@@ -331,8 +201,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
331
201
|
|
|
332
202
|
shutdownPromise = (async () => {
|
|
333
203
|
await collaborationGateway.close();
|
|
334
|
-
await
|
|
335
|
-
await roomRegistry.reset();
|
|
204
|
+
await vaultRegistry.closeAll();
|
|
336
205
|
await Promise.all([
|
|
337
206
|
closeHttpServer(httpServer),
|
|
338
207
|
config.git?.cleanup?.(),
|
|
@@ -367,6 +236,7 @@ export function createAppServer(config = loadConfig()) {
|
|
|
367
236
|
testControls.wsRoomHydrateDelayMs = Math.max(0, Number(delayMs) || 0);
|
|
368
237
|
},
|
|
369
238
|
vaultFileStore,
|
|
239
|
+
vaultRegistry,
|
|
370
240
|
get vaultFileCount() { return vaultFileCount; },
|
|
371
241
|
};
|
|
372
242
|
}
|
|
@@ -381,7 +381,7 @@ export class HostedWorkspaceService {
|
|
|
381
381
|
};
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
async completeWorkspaceSetup() {
|
|
384
|
+
async completeWorkspaceSetup({ user = null } = {}) {
|
|
385
385
|
await this.initialize();
|
|
386
386
|
const team = await this.store.getTeam();
|
|
387
387
|
if (!team) {
|
|
@@ -394,6 +394,15 @@ export class HostedWorkspaceService {
|
|
|
394
394
|
setupCompletedAt: team.setupCompletedAt || timestamp,
|
|
395
395
|
};
|
|
396
396
|
await this.store.updateTeam(updatedTeam);
|
|
397
|
+
if (!team.setupCompletedAt) {
|
|
398
|
+
await this.store.createAuditEvent(createAuditEvent({
|
|
399
|
+
actor: user,
|
|
400
|
+
targetEmail: user?.email ?? '',
|
|
401
|
+
targetRole: user?.role ?? '',
|
|
402
|
+
timestamp,
|
|
403
|
+
type: 'workspace_setup_completed',
|
|
404
|
+
}));
|
|
405
|
+
}
|
|
397
406
|
return updatedTeam;
|
|
398
407
|
}
|
|
399
408
|
|
|
@@ -4,6 +4,7 @@ import { join } from 'node:path';
|
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
5
|
|
|
6
6
|
import { getVaultFileKind } from '../../domain/file-kind.js';
|
|
7
|
+
import { isWholeWordMatch } from '../../domain/literal-text-search.js';
|
|
7
8
|
import { logPerfEvent } from '../config/perf-logging.js';
|
|
8
9
|
|
|
9
10
|
const execFile = promisify(execFileCallback);
|
|
@@ -108,6 +109,7 @@ function createSnippet(lineText = '', matchStart = 0, matchEnd = matchStart) {
|
|
|
108
109
|
function createRipgrepArgs(query, {
|
|
109
110
|
maxFileSize = DEFAULT_MAX_FILE_SIZE,
|
|
110
111
|
maxSnippetsPerFile = DEFAULT_MAX_SNIPPETS_PER_FILE,
|
|
112
|
+
wholeWord = false,
|
|
111
113
|
} = {}) {
|
|
112
114
|
const args = [
|
|
113
115
|
'--json',
|
|
@@ -130,6 +132,7 @@ function createRipgrepArgs(query, {
|
|
|
130
132
|
'--glob',
|
|
131
133
|
'!.trash/**',
|
|
132
134
|
];
|
|
135
|
+
if (wholeWord) args.push('--word-regexp');
|
|
133
136
|
|
|
134
137
|
TEXT_SEARCH_GLOBS.forEach((glob) => {
|
|
135
138
|
args.push('--glob', glob);
|
|
@@ -140,10 +143,13 @@ function createRipgrepArgs(query, {
|
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
export function parseRipgrepJson(stdout, {
|
|
146
|
+
kinds = [],
|
|
143
147
|
maxFiles = DEFAULT_MAX_FILES,
|
|
144
148
|
maxSnippetsPerFile = DEFAULT_MAX_SNIPPETS_PER_FILE,
|
|
149
|
+
prefix = '',
|
|
145
150
|
query = '',
|
|
146
151
|
} = {}) {
|
|
152
|
+
const kindFilter = new Set(Array.isArray(kinds) ? kinds : []);
|
|
147
153
|
const files = [];
|
|
148
154
|
const filesByPath = new Map();
|
|
149
155
|
let matchCount = 0;
|
|
@@ -167,7 +173,12 @@ export function parseRipgrepJson(stdout, {
|
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
const filePath = String(event?.data?.path?.text ?? '').replace(/^\.\//u, '');
|
|
170
|
-
|
|
176
|
+
const kind = getVaultFileKind(filePath) ?? 'text';
|
|
177
|
+
if (
|
|
178
|
+
!filePath
|
|
179
|
+
|| (prefix && filePath !== prefix && !filePath.startsWith(`${prefix}/`))
|
|
180
|
+
|| (kindFilter.size > 0 && !kindFilter.has(kind))
|
|
181
|
+
) {
|
|
171
182
|
continue;
|
|
172
183
|
}
|
|
173
184
|
|
|
@@ -180,7 +191,7 @@ export function parseRipgrepJson(stdout, {
|
|
|
180
191
|
|
|
181
192
|
fileGroup = {
|
|
182
193
|
file: filePath,
|
|
183
|
-
kind
|
|
194
|
+
kind,
|
|
184
195
|
matchCount: 0,
|
|
185
196
|
snippets: [],
|
|
186
197
|
truncated: false,
|
|
@@ -226,7 +237,21 @@ export function parseRipgrepJson(stdout, {
|
|
|
226
237
|
};
|
|
227
238
|
}
|
|
228
239
|
|
|
229
|
-
async function searchExcalidrawText({
|
|
240
|
+
async function searchExcalidrawText({
|
|
241
|
+
kinds = [],
|
|
242
|
+
maxFileSize,
|
|
243
|
+
maxFiles,
|
|
244
|
+
maxSnippetsPerFile,
|
|
245
|
+
prefix = '',
|
|
246
|
+
query,
|
|
247
|
+
wholeWord = false,
|
|
248
|
+
signal,
|
|
249
|
+
vaultDir,
|
|
250
|
+
}) {
|
|
251
|
+
const kindFilter = new Set(Array.isArray(kinds) ? kinds : []);
|
|
252
|
+
if (kindFilter.size > 0 && !kindFilter.has('excalidraw')) {
|
|
253
|
+
return { files: [], matchCount: 0, truncated: false };
|
|
254
|
+
}
|
|
230
255
|
const files = [];
|
|
231
256
|
let matchCount = 0;
|
|
232
257
|
let truncated = false;
|
|
@@ -237,6 +262,8 @@ async function searchExcalidrawText({ maxFileSize, maxFiles, maxSnippetsPerFile,
|
|
|
237
262
|
});
|
|
238
263
|
|
|
239
264
|
for await (const filePath of paths) {
|
|
265
|
+
const normalizedPath = filePath.replaceAll('\\', '/');
|
|
266
|
+
if (prefix && normalizedPath !== prefix && !normalizedPath.startsWith(`${prefix}/`)) continue;
|
|
240
267
|
signal?.throwIfAborted?.();
|
|
241
268
|
const absolutePath = join(vaultDir, filePath);
|
|
242
269
|
if ((await stat(absolutePath)).size > parseByteLimit(maxFileSize)) continue;
|
|
@@ -256,19 +283,21 @@ async function searchExcalidrawText({ maxFileSize, maxFiles, maxSnippetsPerFile,
|
|
|
256
283
|
const normalizedText = text.toLocaleLowerCase();
|
|
257
284
|
let matchStart = normalizedText.indexOf(normalizedQuery);
|
|
258
285
|
while (matchStart >= 0) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
286
|
+
if (!wholeWord || isWholeWordMatch(normalizedText, matchStart, matchStart + normalizedQuery.length)) {
|
|
287
|
+
fileMatchCount += 1;
|
|
288
|
+
matchCount += 1;
|
|
289
|
+
if (snippets.length < maxSnippetsPerFile) {
|
|
290
|
+
const snippet = createSnippet(text, matchStart, matchStart + query.length);
|
|
291
|
+
snippets.push({
|
|
292
|
+
column: matchStart + 1,
|
|
293
|
+
line: 1,
|
|
294
|
+
matchEnd: snippet.matchEnd,
|
|
295
|
+
matchStart: snippet.matchStart,
|
|
296
|
+
text: snippet.text,
|
|
297
|
+
});
|
|
298
|
+
} else {
|
|
299
|
+
truncated = true;
|
|
300
|
+
}
|
|
272
301
|
}
|
|
273
302
|
matchStart = normalizedText.indexOf(normalizedQuery, matchStart + Math.max(query.length, 1));
|
|
274
303
|
}
|
|
@@ -280,7 +309,7 @@ async function searchExcalidrawText({ maxFileSize, maxFiles, maxSnippetsPerFile,
|
|
|
280
309
|
continue;
|
|
281
310
|
}
|
|
282
311
|
files.push({
|
|
283
|
-
file:
|
|
312
|
+
file: normalizedPath,
|
|
284
313
|
kind: 'excalidraw',
|
|
285
314
|
matchCount: fileMatchCount,
|
|
286
315
|
snippets,
|
|
@@ -354,11 +383,19 @@ export class RipgrepSearchService {
|
|
|
354
383
|
}
|
|
355
384
|
|
|
356
385
|
async search({
|
|
386
|
+
kinds = [],
|
|
357
387
|
limit = DEFAULT_MAX_FILES,
|
|
388
|
+
maxSnippetsPerFile = DEFAULT_MAX_SNIPPETS_PER_FILE,
|
|
389
|
+
prefix = '',
|
|
358
390
|
query = '',
|
|
359
391
|
signal = null,
|
|
392
|
+
wholeWord = false,
|
|
360
393
|
} = {}) {
|
|
361
394
|
const normalizedQuery = String(query ?? '').trim();
|
|
395
|
+
const snippetLimit = normalizePositiveInt(maxSnippetsPerFile, this.maxSnippetsPerFile, {
|
|
396
|
+
max: 10,
|
|
397
|
+
min: 1,
|
|
398
|
+
});
|
|
362
399
|
const maxFiles = normalizePositiveInt(limit, this.maxFiles, {
|
|
363
400
|
max: this.maxFiles,
|
|
364
401
|
min: 1,
|
|
@@ -381,7 +418,8 @@ export class RipgrepSearchService {
|
|
|
381
418
|
const startedAt = Date.now();
|
|
382
419
|
const args = createRipgrepArgs(normalizedQuery, {
|
|
383
420
|
maxFileSize: this.maxFileSize,
|
|
384
|
-
maxSnippetsPerFile:
|
|
421
|
+
maxSnippetsPerFile: snippetLimit,
|
|
422
|
+
wholeWord,
|
|
385
423
|
});
|
|
386
424
|
let parsed;
|
|
387
425
|
try {
|
|
@@ -393,8 +431,10 @@ export class RipgrepSearchService {
|
|
|
393
431
|
timeout: this.timeoutMs,
|
|
394
432
|
});
|
|
395
433
|
parsed = parseRipgrepJson(result.stdout, {
|
|
434
|
+
kinds,
|
|
396
435
|
maxFiles,
|
|
397
|
-
maxSnippetsPerFile:
|
|
436
|
+
maxSnippetsPerFile: snippetLimit,
|
|
437
|
+
prefix,
|
|
398
438
|
query: normalizedQuery,
|
|
399
439
|
});
|
|
400
440
|
} catch (error) {
|
|
@@ -406,8 +446,10 @@ export class RipgrepSearchService {
|
|
|
406
446
|
} else {
|
|
407
447
|
const isMaxBuffer = error?.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER';
|
|
408
448
|
parsed = parseRipgrepJson(error?.stdout ?? '', {
|
|
449
|
+
kinds,
|
|
409
450
|
maxFiles,
|
|
410
|
-
maxSnippetsPerFile:
|
|
451
|
+
maxSnippetsPerFile: snippetLimit,
|
|
452
|
+
prefix,
|
|
411
453
|
query: normalizedQuery,
|
|
412
454
|
});
|
|
413
455
|
if (isMaxBuffer && parsed.files.length > 0) {
|
|
@@ -421,16 +463,21 @@ export class RipgrepSearchService {
|
|
|
421
463
|
|
|
422
464
|
if (parsed.files.length < maxFiles) {
|
|
423
465
|
const excalidraw = await searchExcalidrawText({
|
|
466
|
+
kinds,
|
|
424
467
|
maxFileSize: this.maxFileSize,
|
|
425
468
|
maxFiles: maxFiles - parsed.files.length,
|
|
426
|
-
maxSnippetsPerFile:
|
|
469
|
+
maxSnippetsPerFile: snippetLimit,
|
|
470
|
+
prefix,
|
|
427
471
|
query: normalizedQuery,
|
|
472
|
+
wholeWord,
|
|
428
473
|
signal,
|
|
429
474
|
vaultDir: this.vaultDir,
|
|
430
475
|
});
|
|
431
476
|
parsed.files.push(...excalidraw.files);
|
|
432
477
|
parsed.matchCount += excalidraw.matchCount;
|
|
433
478
|
parsed.truncated ||= excalidraw.truncated;
|
|
479
|
+
} else if (kinds.length === 0 || kinds.includes('excalidraw')) {
|
|
480
|
+
parsed.truncated = true;
|
|
434
481
|
}
|
|
435
482
|
parsed.search = this.getClientConfig();
|
|
436
483
|
logPerfEvent(this.perfLoggingEnabled, 'search-query', {
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from 'node:child_process';
|
|
1
2
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
2
3
|
import { resolve } from 'node:path';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
|
|
6
|
+
const execFile = promisify(execFileCallback);
|
|
3
7
|
|
|
4
8
|
export async function ensureCollabMetadataGitExclude(vaultDir) {
|
|
5
|
-
|
|
9
|
+
let excludePath = resolve(vaultDir, '.git/info/exclude');
|
|
10
|
+
try {
|
|
11
|
+
const { stdout } = await execFile('git', ['rev-parse', '--git-path', 'info/exclude'], {
|
|
12
|
+
cwd: vaultDir,
|
|
13
|
+
});
|
|
14
|
+
excludePath = resolve(vaultDir, String(stdout).trim());
|
|
15
|
+
} catch {
|
|
16
|
+
// Preserve support for repositories represented by a local .git directory.
|
|
17
|
+
}
|
|
6
18
|
let existingContent = '';
|
|
7
19
|
|
|
8
20
|
try {
|
|
@@ -63,7 +63,7 @@ async function createWebMcpActor({ agentConnectionService, authService, config,
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
async function mapWebMcpResult(definition, value) {
|
|
66
|
-
if (
|
|
66
|
+
if (value.svg && ['image', 'optional-image'].includes(definition.resultKind)) {
|
|
67
67
|
const { data, mimeType, structuredContent } = await encodeAgentToolImage(value);
|
|
68
68
|
return {
|
|
69
69
|
...structuredContent,
|
|
@@ -43,6 +43,11 @@ export function createHostedApiHandler({
|
|
|
43
43
|
user,
|
|
44
44
|
}));
|
|
45
45
|
}],
|
|
46
|
+
['POST /api/hosted/setup/complete', async ({ req, res, user }) => {
|
|
47
|
+
const admin = await hostedWorkspaceService.requireAdmin(user);
|
|
48
|
+
const team = await hostedWorkspaceService.completeWorkspaceSetup({ user: admin });
|
|
49
|
+
jsonResponse(req, res, 200, { ok: true, setupComplete: true, team });
|
|
50
|
+
}],
|
|
46
51
|
['GET /api/hosted/vault-source', async ({ req, res, user }) => {
|
|
47
52
|
jsonResponse(req, res, 200, { vaultSource: await hostedWorkspaceService.getVaultSource(user) });
|
|
48
53
|
}],
|