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
|
@@ -18,6 +18,17 @@ export function escapeHtml(text) {
|
|
|
18
18
|
.replace(/'/g, ''');
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Builds a document fragment from an HTML string for a single
|
|
23
|
+
* replaceChildren() call. Escape untrusted parts before calling.
|
|
24
|
+
*
|
|
25
|
+
* @param {string} markup — trusted HTML markup
|
|
26
|
+
* @returns {DocumentFragment} parsed fragment
|
|
27
|
+
*/
|
|
28
|
+
export function createFragment(markup) {
|
|
29
|
+
return document.createRange().createContextualFragment(markup);
|
|
30
|
+
}
|
|
31
|
+
|
|
21
32
|
/**
|
|
22
33
|
* Clamps a numeric value between a minimum and maximum bound.
|
|
23
34
|
*
|
|
@@ -88,6 +88,7 @@ function setAppliedSceneJson(value) {
|
|
|
88
88
|
|
|
89
89
|
let collabReady = false;
|
|
90
90
|
let pendingRemoteSceneJson = '';
|
|
91
|
+
let pendingRemoteSceneAuthoritative = false;
|
|
91
92
|
let pendingCollaborators = null;
|
|
92
93
|
let activeCollaborators = new Map();
|
|
93
94
|
let followedSocketId = null;
|
|
@@ -432,12 +433,12 @@ function createRoomClient(filePath) {
|
|
|
432
433
|
|
|
433
434
|
handleRoomConnectionStateChange(event);
|
|
434
435
|
},
|
|
435
|
-
onRemoteSceneJson: (sceneJson) => {
|
|
436
|
+
onRemoteSceneJson: (sceneJson, { authoritative = false } = {}) => {
|
|
436
437
|
if (generation !== roomClientGeneration) {
|
|
437
438
|
return;
|
|
438
439
|
}
|
|
439
440
|
|
|
440
|
-
applySceneFromJson(sceneJson);
|
|
441
|
+
applySceneFromJson(sceneJson, { authoritative });
|
|
441
442
|
},
|
|
442
443
|
syncTimeoutMs: Number.isFinite(syncTimeoutMs) ? syncTimeoutMs : undefined,
|
|
443
444
|
vaultClient: vaultApiClient,
|
|
@@ -1393,14 +1394,18 @@ function flushPendingRemoteScene() {
|
|
|
1393
1394
|
}
|
|
1394
1395
|
|
|
1395
1396
|
const sceneJson = pendingRemoteSceneJson;
|
|
1397
|
+
const authoritative = pendingRemoteSceneAuthoritative;
|
|
1396
1398
|
pendingRemoteSceneJson = '';
|
|
1399
|
+
pendingRemoteSceneAuthoritative = false;
|
|
1397
1400
|
applySceneFromJson(sceneJson, {
|
|
1401
|
+
authoritative,
|
|
1398
1402
|
force: true,
|
|
1399
1403
|
});
|
|
1400
1404
|
return true;
|
|
1401
1405
|
}
|
|
1402
1406
|
|
|
1403
1407
|
function applySceneFromJson(rawJson, {
|
|
1408
|
+
authoritative = false,
|
|
1404
1409
|
force = false,
|
|
1405
1410
|
} = {}) {
|
|
1406
1411
|
const scene = parseSceneJson(rawJson);
|
|
@@ -1414,15 +1419,18 @@ function applySceneFromJson(rawJson, {
|
|
|
1414
1419
|
|
|
1415
1420
|
if (!getMountedExcalidrawAPI() || !collabReady) {
|
|
1416
1421
|
pendingRemoteSceneJson = normalizedJson;
|
|
1422
|
+
pendingRemoteSceneAuthoritative ||= authoritative;
|
|
1417
1423
|
return;
|
|
1418
1424
|
}
|
|
1419
1425
|
|
|
1420
1426
|
if (!force && isEditingTextElement()) {
|
|
1421
1427
|
pendingRemoteSceneJson = normalizedJson;
|
|
1428
|
+
pendingRemoteSceneAuthoritative ||= authoritative;
|
|
1422
1429
|
return;
|
|
1423
1430
|
}
|
|
1424
1431
|
|
|
1425
|
-
|
|
1432
|
+
pendingRemoteSceneAuthoritative = false;
|
|
1433
|
+
updateApiScene(scene, { authoritative });
|
|
1426
1434
|
}
|
|
1427
1435
|
|
|
1428
1436
|
function releaseViewportBroadcastSuppressionAfterPaint() {
|
|
@@ -1440,6 +1448,7 @@ function releaseViewportBroadcastSuppressionAfterPaint() {
|
|
|
1440
1448
|
function buildApiSceneUpdate(scene, {
|
|
1441
1449
|
appStateOverrides = {},
|
|
1442
1450
|
api = getMountedExcalidrawAPI(),
|
|
1451
|
+
authoritative = false,
|
|
1443
1452
|
} = {}) {
|
|
1444
1453
|
if (!api) {
|
|
1445
1454
|
return null;
|
|
@@ -1450,6 +1459,7 @@ function buildApiSceneUpdate(scene, {
|
|
|
1450
1459
|
|
|
1451
1460
|
return buildReconciledExcalidrawSceneUpdate({
|
|
1452
1461
|
appStateOverrides,
|
|
1462
|
+
authoritative,
|
|
1453
1463
|
currentAppState,
|
|
1454
1464
|
currentElements,
|
|
1455
1465
|
documentViewState: getDocumentViewState(),
|
|
@@ -1500,6 +1510,7 @@ function requestEditorRemount(scene) {
|
|
|
1500
1510
|
|
|
1501
1511
|
function applySceneToMountedApi(scene, {
|
|
1502
1512
|
appStateOverrides = {},
|
|
1513
|
+
authoritative = false,
|
|
1503
1514
|
captureUpdate = CaptureUpdateAction.NEVER,
|
|
1504
1515
|
trackedSharedSnapshot = false,
|
|
1505
1516
|
} = {}) {
|
|
@@ -1511,6 +1522,7 @@ function applySceneToMountedApi(scene, {
|
|
|
1511
1522
|
const nextSceneUpdate = buildApiSceneUpdate(scene, {
|
|
1512
1523
|
appStateOverrides,
|
|
1513
1524
|
api,
|
|
1525
|
+
authoritative,
|
|
1514
1526
|
});
|
|
1515
1527
|
let applyResult;
|
|
1516
1528
|
|
|
@@ -1545,11 +1557,13 @@ function applySceneToMountedApi(scene, {
|
|
|
1545
1557
|
|
|
1546
1558
|
function updateApiScene(scene, {
|
|
1547
1559
|
appStateOverrides = {},
|
|
1560
|
+
authoritative = false,
|
|
1548
1561
|
captureUpdate = CaptureUpdateAction.NEVER,
|
|
1549
1562
|
trackedSharedSnapshot = true,
|
|
1550
1563
|
} = {}) {
|
|
1551
1564
|
applySceneToMountedApi(scene, {
|
|
1552
1565
|
appStateOverrides,
|
|
1566
|
+
authoritative,
|
|
1553
1567
|
captureUpdate,
|
|
1554
1568
|
trackedSharedSnapshot,
|
|
1555
1569
|
});
|
|
@@ -2176,10 +2190,12 @@ function initializeEditor(api) {
|
|
|
2176
2190
|
}));
|
|
2177
2191
|
|
|
2178
2192
|
const sceneJson = pendingRemoteSceneJson || roomClient?.getLastSceneJson?.() || '';
|
|
2193
|
+
const authoritative = pendingRemoteSceneAuthoritative;
|
|
2179
2194
|
const initialScene = parseSceneJson(sceneJson);
|
|
2180
2195
|
pendingRemoteSceneJson = '';
|
|
2196
|
+
pendingRemoteSceneAuthoritative = false;
|
|
2181
2197
|
setAppliedSceneJson(JSON.stringify(initialScene));
|
|
2182
|
-
updateApiScene(initialScene);
|
|
2198
|
+
updateApiScene(initialScene, { authoritative });
|
|
2183
2199
|
|
|
2184
2200
|
if (pendingCollaborators) {
|
|
2185
2201
|
const renderableCollaborators = buildRenderableCollaboratorsMap(pendingCollaborators);
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import '../styles/features/auth-gate.css';
|
|
2
|
-
|
|
3
1
|
import { getHashParamsFromRaw } from '../domain/hash-routes.js';
|
|
4
2
|
import { parseApiResponse } from './api-client-utils.js';
|
|
5
3
|
import { getRuntimeConfig } from './runtime-config.js';
|
|
@@ -255,6 +253,7 @@ export async function ensureClientAuthenticated() {
|
|
|
255
253
|
return { authenticated: true, auth: config };
|
|
256
254
|
}
|
|
257
255
|
|
|
256
|
+
await import('../styles/features/auth-gate.css');
|
|
258
257
|
const { card, overlay } = createOverlayShell();
|
|
259
258
|
document.body.append(overlay);
|
|
260
259
|
let pendingOidcError = consumeHashParam('auth_error');
|
|
@@ -23,6 +23,7 @@ export class BrowserPreferencesPort {
|
|
|
23
23
|
lineWrappingKey,
|
|
24
24
|
recentFilesKey = 'collabmd-recent-files',
|
|
25
25
|
vimModeKey = 'collabmd-editor-vim-mode',
|
|
26
|
+
viewModeKey = 'collabmd-editor-view-mode',
|
|
26
27
|
sidebarVisibleKey,
|
|
27
28
|
userNameKey,
|
|
28
29
|
storage = globalThis.localStorage,
|
|
@@ -33,6 +34,7 @@ export class BrowserPreferencesPort {
|
|
|
33
34
|
this.sidebarVisibleKey = sidebarVisibleKey;
|
|
34
35
|
this.storage = storage;
|
|
35
36
|
this.userNameKey = userNameKey;
|
|
37
|
+
this.viewModeKey = viewModeKey;
|
|
36
38
|
this.vimModeKey = vimModeKey;
|
|
37
39
|
}
|
|
38
40
|
|
|
@@ -68,6 +70,20 @@ export class BrowserPreferencesPort {
|
|
|
68
70
|
writeStorage(this.storage, this.vimModeKey, String(enabled));
|
|
69
71
|
}
|
|
70
72
|
|
|
73
|
+
getViewMode() {
|
|
74
|
+
const value = readStorage(this.storage, this.viewModeKey, null);
|
|
75
|
+
if (value === 'editor' || value === 'preview' || value === 'split') {
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
setViewMode(view) {
|
|
82
|
+
if (view === 'editor' || view === 'preview' || view === 'split') {
|
|
83
|
+
writeStorage(this.storage, this.viewModeKey, view);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
71
87
|
getRecentFiles() {
|
|
72
88
|
const stored = readStorage(this.storage, this.recentFilesKey, '[]');
|
|
73
89
|
try {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { vim } from '@replit/codemirror-vim';
|
|
2
1
|
import { autocompletion, closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';
|
|
3
2
|
import {
|
|
4
3
|
defaultKeymap,
|
|
@@ -60,8 +59,20 @@ import { plantUmlLanguage, plantUmlLanguageDescription } from '../domain/plantum
|
|
|
60
59
|
import { structurizrLanguage, structurizrLanguageDescription } from '../domain/structurizr-language.js';
|
|
61
60
|
import { handleImagePasteEvent } from './editor-paste-utils.js';
|
|
62
61
|
|
|
62
|
+
const MARKDOWN_CODE_LANGUAGE_ALIASES = new Set([
|
|
63
|
+
'bash', 'c', 'c++', 'cpp', 'css', 'diff', 'html', 'java', 'javascript', 'js',
|
|
64
|
+
'json', 'jsx', 'markdown', 'md', 'python', 'py', 'rust', 'sh', 'shell', 'sql',
|
|
65
|
+
'ts', 'tsx', 'typescript', 'xml', 'yaml', 'yml',
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
function isMarkdownCodeLanguage(language) {
|
|
69
|
+
const names = [language.name, ...(language.alias || [])]
|
|
70
|
+
.map((value) => String(value).toLowerCase());
|
|
71
|
+
return names.some((name) => MARKDOWN_CODE_LANGUAGE_ALIASES.has(name));
|
|
72
|
+
}
|
|
73
|
+
|
|
63
74
|
const markdownCodeLanguages = [
|
|
64
|
-
...languages,
|
|
75
|
+
...languages.filter(isMarkdownCodeLanguage),
|
|
65
76
|
mermaidLanguageDescription,
|
|
66
77
|
plantUmlLanguageDescription,
|
|
67
78
|
structurizrLanguageDescription,
|
|
@@ -501,7 +512,7 @@ export class EditorViewAdapter {
|
|
|
501
512
|
highlightActiveLine(),
|
|
502
513
|
highlightSelectionMatches(),
|
|
503
514
|
createSearchNavigationListener(),
|
|
504
|
-
this.vimModeCompartment.of(
|
|
515
|
+
this.vimModeCompartment.of([]),
|
|
505
516
|
keymap.of([
|
|
506
517
|
...closeBracketsKeymap,
|
|
507
518
|
...defaultKeymap,
|
|
@@ -585,6 +596,10 @@ export class EditorViewAdapter {
|
|
|
585
596
|
this.onSelectionChanged?.(this.editorView.state);
|
|
586
597
|
this.emitViewportChange();
|
|
587
598
|
|
|
599
|
+
if (this.vimModeEnabled && editorMode !== 'provisional') {
|
|
600
|
+
void this.applyVimExtension();
|
|
601
|
+
}
|
|
602
|
+
|
|
588
603
|
if (preserveScrollTop > 0) {
|
|
589
604
|
requestAnimationFrame(() => {
|
|
590
605
|
if (this.editorView?.scrollDOM) {
|
|
@@ -676,6 +691,21 @@ export class EditorViewAdapter {
|
|
|
676
691
|
return this.vimModeEnabled;
|
|
677
692
|
}
|
|
678
693
|
|
|
694
|
+
async applyVimExtension() {
|
|
695
|
+
if (!this.vimModeEnabled || !this.editorView || this.editorView.state.readOnly) {
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
const { vim } = await import('@replit/codemirror-vim');
|
|
700
|
+
if (!this.vimModeEnabled || !this.editorView || this.editorView.state.readOnly) {
|
|
701
|
+
return;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
this.editorView.dispatch({
|
|
705
|
+
effects: this.vimModeCompartment.reconfigure(vim({ status: true })),
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
|
|
679
709
|
setVimMode(enabled) {
|
|
680
710
|
const nextEnabled = Boolean(enabled);
|
|
681
711
|
if (nextEnabled === this.vimModeEnabled) {
|
|
@@ -687,12 +717,17 @@ export class EditorViewAdapter {
|
|
|
687
717
|
return nextEnabled;
|
|
688
718
|
}
|
|
689
719
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
)
|
|
720
|
+
if (!nextEnabled) {
|
|
721
|
+
this.editorView.dispatch({
|
|
722
|
+
effects: this.vimModeCompartment.reconfigure([]),
|
|
723
|
+
});
|
|
724
|
+
this.editorView.focus();
|
|
725
|
+
return nextEnabled;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
void this.applyVimExtension().then(() => {
|
|
729
|
+
this.editorView?.focus();
|
|
694
730
|
});
|
|
695
|
-
this.editorView.focus();
|
|
696
731
|
return nextEnabled;
|
|
697
732
|
}
|
|
698
733
|
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
buildExcalidrawRoomScene,
|
|
12
12
|
ensureExcalidrawRoomSchema,
|
|
13
13
|
isExcalidrawRoomDocStructured,
|
|
14
|
+
readExcalidrawReplaceGeneration,
|
|
14
15
|
readLegacyExcalidrawRoomScene,
|
|
15
16
|
replaceExcalidrawRoomScene,
|
|
16
17
|
} from '../../domain/excalidraw-room-codec.js';
|
|
@@ -174,6 +175,7 @@ export class ExcalidrawRoomClient {
|
|
|
174
175
|
this.handleProviderSync = null;
|
|
175
176
|
this.handleProviderStatus = null;
|
|
176
177
|
this.lastSceneJson = '';
|
|
178
|
+
this.lastReplaceGeneration = null;
|
|
177
179
|
this.sceneSyncTimer = null;
|
|
178
180
|
this.sceneSyncDueAt = 0;
|
|
179
181
|
this.lastSceneSyncAt = 0;
|
|
@@ -217,6 +219,11 @@ export class ExcalidrawRoomClient {
|
|
|
217
219
|
return;
|
|
218
220
|
}
|
|
219
221
|
|
|
222
|
+
const prevReplaceGeneration = this.lastReplaceGeneration;
|
|
223
|
+
this.lastReplaceGeneration = readExcalidrawReplaceGeneration(this.ydoc);
|
|
224
|
+
const authoritative = prevReplaceGeneration !== null
|
|
225
|
+
&& this.lastReplaceGeneration > prevReplaceGeneration;
|
|
226
|
+
|
|
220
227
|
const remoteJson = this.getStructuredSceneJson();
|
|
221
228
|
if (!remoteJson || remoteJson === this.lastSceneJson) {
|
|
222
229
|
return;
|
|
@@ -224,7 +231,7 @@ export class ExcalidrawRoomClient {
|
|
|
224
231
|
|
|
225
232
|
this.pendingEmptySceneCandidate = null;
|
|
226
233
|
this.lastSceneJson = JSON.stringify(parseSceneJson(remoteJson));
|
|
227
|
-
this.onRemoteSceneJson(this.lastSceneJson);
|
|
234
|
+
this.onRemoteSceneJson(this.lastSceneJson, { authoritative });
|
|
228
235
|
};
|
|
229
236
|
}
|
|
230
237
|
|
|
@@ -1071,5 +1078,6 @@ export class ExcalidrawRoomClient {
|
|
|
1071
1078
|
this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED);
|
|
1072
1079
|
this.applyingSharedSnapshotDepth = 0;
|
|
1073
1080
|
this.suppressStructuredSceneUpdateDepth = 0;
|
|
1081
|
+
this.lastReplaceGeneration = null;
|
|
1074
1082
|
}
|
|
1075
1083
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { resolveApiUrl } from '../domain/runtime-paths.js';
|
|
2
|
+
import { parseApiResponse } from './api-client-utils.js';
|
|
3
|
+
|
|
4
|
+
function request(path, { body = null, fallback = 'Request failed', method = 'GET' } = {}) {
|
|
5
|
+
return fetch(resolveApiUrl(path), {
|
|
6
|
+
...(body === null ? {} : { body: JSON.stringify(body) }),
|
|
7
|
+
headers: { 'Content-Type': 'application/json' },
|
|
8
|
+
method,
|
|
9
|
+
}).then((response) => parseApiResponse(response, fallback));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const hostedApiClient = {
|
|
13
|
+
acceptInvitation() {
|
|
14
|
+
return request('/hosted/invitations/accept', { fallback: 'Failed to accept invitation', method: 'POST' });
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
claimWorkspace({ teamName, token }) {
|
|
18
|
+
return request('/hosted/claim', { body: { teamName, token }, fallback: 'Failed to claim workspace', method: 'POST' });
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
completeSetup() {
|
|
22
|
+
return request('/hosted/setup/complete', { fallback: 'Failed to complete setup', method: 'POST' });
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
createInvitation({ email, role }) {
|
|
26
|
+
return request('/hosted/invitations', { body: { email, role }, fallback: 'Failed to create invitation', method: 'POST' });
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
getStatus() {
|
|
30
|
+
return request('/hosted/status', { fallback: 'Failed to load workspace status' });
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
listAuditEvents() {
|
|
34
|
+
return request('/hosted/audit', { fallback: 'Failed to load access history' });
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
listInvitations() {
|
|
38
|
+
return request('/hosted/invitations', { fallback: 'Failed to load invitations' });
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
listMemberships() {
|
|
42
|
+
return request('/hosted/memberships', { fallback: 'Failed to load collaborators' });
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
removeMembership(membershipId) {
|
|
46
|
+
return request(`/hosted/memberships/${encodeURIComponent(membershipId)}`, { fallback: 'Failed to remove collaborator', method: 'DELETE' });
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
revokeInvitation(invitationId) {
|
|
50
|
+
return request(`/hosted/invitations/${encodeURIComponent(invitationId)}`, { fallback: 'Failed to revoke invitation', method: 'DELETE' });
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
updateInvitationRole(invitationId, role) {
|
|
54
|
+
return request(`/hosted/invitations/${encodeURIComponent(invitationId)}`, { body: { role }, fallback: 'Failed to update invitation', method: 'PATCH' });
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
updateMembershipRole(membershipId, role) {
|
|
58
|
+
return request(`/hosted/memberships/${encodeURIComponent(membershipId)}`, { body: { role }, fallback: 'Failed to update role', method: 'PATCH' });
|
|
59
|
+
},
|
|
60
|
+
};
|
|
@@ -2,12 +2,12 @@ import { WebsocketProvider } from 'y-websocket';
|
|
|
2
2
|
import * as Y from 'yjs';
|
|
3
3
|
|
|
4
4
|
import { createRandomUser } from '../domain/room.js';
|
|
5
|
+
import { LOBBY_CHAT_MAX_MESSAGES, LOBBY_CHAT_MESSAGE_MAX_LENGTH } from '../domain/lobby-chat.js';
|
|
5
6
|
import { resolveWsBaseUrl } from './runtime-config.js';
|
|
6
7
|
import { stopReconnectOnControlledClose } from './yjs-provider-reset-guard.js';
|
|
7
8
|
|
|
8
9
|
const LOBBY_ROOM_NAME = '__lobby__';
|
|
9
|
-
|
|
10
|
-
export const LOBBY_CHAT_MAX_MESSAGES = 40;
|
|
10
|
+
|
|
11
11
|
|
|
12
12
|
function normalizeChatMessage(value) {
|
|
13
13
|
const normalized = String(value ?? '')
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
getActiveVaultId,
|
|
2
3
|
getClientRuntimeConfig,
|
|
3
4
|
resolveApiUrl,
|
|
4
5
|
resolveAppPath,
|
|
5
6
|
resolveAppUrl,
|
|
6
7
|
resolveWsBaseUrl,
|
|
8
|
+
setActiveVaultId,
|
|
7
9
|
} from '../domain/runtime-paths.js';
|
|
8
10
|
import {
|
|
9
11
|
createFileRouteHash,
|
|
@@ -16,7 +18,7 @@ export function getRuntimeConfig() {
|
|
|
16
18
|
return getClientRuntimeConfig();
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
export { resolveApiUrl, resolveAppPath, resolveAppUrl, resolveWsBaseUrl };
|
|
21
|
+
export { getActiveVaultId, resolveApiUrl, resolveAppPath, resolveAppUrl, resolveWsBaseUrl, setActiveVaultId };
|
|
20
22
|
export { createFileRouteHash, isCollabMdHashRoute };
|
|
21
23
|
|
|
22
24
|
function getHashParams() {
|
|
@@ -213,7 +213,7 @@ export class WebMcpToolRegistry {
|
|
|
213
213
|
try {
|
|
214
214
|
const tools = listWebMcpToolDefinitions().map((definition) => ({
|
|
215
215
|
annotations: {
|
|
216
|
-
|
|
216
|
+
...definition.annotations,
|
|
217
217
|
untrustedContentHint: Boolean(definition.untrustedContentHint),
|
|
218
218
|
},
|
|
219
219
|
description: getWebMcpDescription(definition),
|
|
@@ -228,7 +228,21 @@ export class WebMcpToolRegistry {
|
|
|
228
228
|
});
|
|
229
229
|
throwIfAborted(signal);
|
|
230
230
|
}
|
|
231
|
-
|
|
231
|
+
let serverResult;
|
|
232
|
+
try {
|
|
233
|
+
serverResult = await this.callTool(definition.name, input, { signal });
|
|
234
|
+
} catch (error) {
|
|
235
|
+
throwIfAborted(signal);
|
|
236
|
+
const body = error?.body;
|
|
237
|
+
if (
|
|
238
|
+
typeof body?.code === 'string'
|
|
239
|
+
&& body.code.startsWith('AGENT_')
|
|
240
|
+
&& body.code !== 'AGENT_REQUEST_FAILED'
|
|
241
|
+
) {
|
|
242
|
+
return { ...body, isError: true };
|
|
243
|
+
}
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
232
246
|
let result = await replaceSnapshotRendering(
|
|
233
247
|
serverResult,
|
|
234
248
|
this.renderExcalidrawScene,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import markdownIt from 'markdown-it';
|
|
2
|
-
import hljs from 'highlight.js';
|
|
3
2
|
|
|
4
3
|
import { escapeHtml } from '../domain/vault-utils.js';
|
|
5
4
|
|
|
@@ -15,19 +14,8 @@ function renderPlainTextCommentHtml(text = '') {
|
|
|
15
14
|
function createCommentMarkdownRenderer() {
|
|
16
15
|
const markdown = markdownIt({
|
|
17
16
|
breaks: true,
|
|
18
|
-
highlight(source
|
|
19
|
-
|
|
20
|
-
if (language && hljs.getLanguage(language)) {
|
|
21
|
-
return hljs.highlight(source, {
|
|
22
|
-
ignoreIllegals: true,
|
|
23
|
-
language,
|
|
24
|
-
}).value;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return hljs.highlightAuto(source).value;
|
|
28
|
-
} catch {
|
|
29
|
-
return escapeHtml(source);
|
|
30
|
-
}
|
|
17
|
+
highlight(source) {
|
|
18
|
+
return escapeHtml(source);
|
|
31
19
|
},
|
|
32
20
|
html: false,
|
|
33
21
|
linkify: true,
|
|
@@ -105,12 +105,11 @@ export class CommentOverviewController {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
render() {
|
|
108
|
-
if (!this.panel) {
|
|
108
|
+
if (!this.panel || this.panel.classList.contains('hidden')) {
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
this.panel.replaceChildren();
|
|
113
|
-
|
|
114
113
|
if (this.errorMessage) {
|
|
115
114
|
const error = createOverviewState({
|
|
116
115
|
copy: this.errorMessage,
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
normalizeCommentQuoteForComparison,
|
|
5
5
|
} from '../../../domain/comment-threads.js';
|
|
6
6
|
import { clamp } from '../../domain/vault-utils.js';
|
|
7
|
-
import { renderCommentMarkdownToHtml } from '../comment-markdown-renderer.js';
|
|
8
7
|
|
|
9
8
|
export { COMMENT_BODY_MAX_LENGTH, clamp };
|
|
10
9
|
|
|
@@ -112,7 +111,11 @@ export function getLatestGroupMessage(group) {
|
|
|
112
111
|
export function createRenderedCommentBody(body, className = 'comment-markdown') {
|
|
113
112
|
const container = document.createElement('div');
|
|
114
113
|
container.className = className;
|
|
115
|
-
|
|
114
|
+
const markdownText = String(body ?? '');
|
|
115
|
+
container.textContent = markdownText;
|
|
116
|
+
void import('../comment-markdown-renderer.js').then(({ renderCommentMarkdownToHtml }) => {
|
|
117
|
+
container.innerHTML = renderCommentMarkdownToHtml(markdownText);
|
|
118
|
+
});
|
|
116
119
|
return container;
|
|
117
120
|
}
|
|
118
121
|
|
|
@@ -14,6 +14,7 @@ export class FileExplorerController {
|
|
|
14
14
|
showFileExtensions = false,
|
|
15
15
|
toastController,
|
|
16
16
|
vaultClient,
|
|
17
|
+
vaultSwitcher = null,
|
|
17
18
|
}) {
|
|
18
19
|
this.onFileSelect = onFileSelect;
|
|
19
20
|
this.onFileDelete = onFileDelete;
|
|
@@ -21,6 +22,7 @@ export class FileExplorerController {
|
|
|
21
22
|
this.onShowFileExtensionsChange = onShowFileExtensionsChange;
|
|
22
23
|
this.toastController = toastController;
|
|
23
24
|
this.vaultClient = vaultClient;
|
|
25
|
+
this.vaultSwitcher = vaultSwitcher;
|
|
24
26
|
this.state = new FileTreeState();
|
|
25
27
|
this.showFileExtensions = Boolean(showFileExtensions);
|
|
26
28
|
this.threadCounts = new Map();
|
|
@@ -78,6 +80,7 @@ export class FileExplorerController {
|
|
|
78
80
|
|
|
79
81
|
initialize() {
|
|
80
82
|
this.view.initialize();
|
|
83
|
+
this.view.renderVaultSwitcher(this.vaultSwitcher);
|
|
81
84
|
this.actionController.initialize();
|
|
82
85
|
}
|
|
83
86
|
|