collabmd 0.1.48 → 0.1.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/README.md +61 -5
  2. package/bin/collabmd.js +3 -0
  3. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-C-nmgL5g.js +1 -0
  4. package/dist/client/assets/abnfDiagram-VCTEODGH-CdVZqicp.js +1 -0
  5. package/dist/client/assets/{architectureDiagram-5GKGNRK7-I39sYjHI.js → architectureDiagram-5GKGNRK7-wUo0bXif.js} +3 -3
  6. package/dist/client/assets/{blockDiagram-NRAW4CY4-C6DtJy5Y.js → blockDiagram-I7D4REHJ-BRSK3m49.js} +4 -4
  7. package/dist/client/assets/browser-utils-DbXSMI-6.js +1 -0
  8. package/dist/client/assets/{c4Diagram-UCG6FXSJ-CtWtxS9_.js → c4Diagram-7LVT6UL2-yD2poxqw.js} +1 -1
  9. package/dist/client/assets/channel-Fa4GS_-F.js +1 -0
  10. package/dist/client/assets/chunk-2E4U76K2-BPnTT-J3.js +2 -0
  11. package/dist/client/assets/{chunk-TEH6E4GO-DVayPj-q.js → chunk-4HAMMTFA-DStbIfJ1.js} +20 -20
  12. package/dist/client/assets/{chunk-75Z2AOVW-CdFSaPjz.js → chunk-75Z2AOVW-C5pGd3W9.js} +1 -1
  13. package/dist/client/assets/{chunk-CLGD4ZFX-DQLgbQrv.js → chunk-CLGD4ZFX-BMeArk03.js} +1 -1
  14. package/dist/client/assets/chunk-DU6HZSFF-Zkp69c6c.js +127 -0
  15. package/dist/client/assets/{chunk-F27PBJKO-CNHIFhjo.js → chunk-F27PBJKO-D4xNct1r.js} +1 -1
  16. package/dist/client/assets/{chunk-GMAD6QVW-CbcBqPM5.js → chunk-GMAD6QVW-NZ6WpDb8.js} +1 -1
  17. package/dist/client/assets/{chunk-OBVCFTLP-BJR7u1jh.js → chunk-GVQU2GXP-D8SDprfX.js} +1 -1
  18. package/dist/client/assets/{chunk-G27WJ6UU-D9-eg537.js → chunk-IMKFNOWR-D8jEuU3Q.js} +2 -2
  19. package/dist/client/assets/{chunk-JQ64N6SF-DSFNH4bh.js → chunk-L3NEJ4N5-aijKP-eh.js} +1 -1
  20. package/dist/client/assets/chunk-OSK3NFVY-CCbLQAMa.js +10 -0
  21. package/dist/client/assets/{chunk-P2QGCYS3-BRpqY32H.js → chunk-P2QGCYS3-Oag_FdCq.js} +1 -1
  22. package/dist/client/assets/{chunk-POPQ4Y6H-Cb4SlVZF.js → chunk-POPQ4Y6H-CYnpIgXT.js} +1 -1
  23. package/dist/client/assets/{chunk-PWAF6VOD-Cz8IwBB5.js → chunk-PWAF6VOD-JSNrcBmP.js} +1 -1
  24. package/dist/client/assets/{chunk-RM4UPSZO-CWRwxNWJ.js → chunk-RM4UPSZO-DOWllDY8.js} +4 -4
  25. package/dist/client/assets/{chunk-RHFEMEQ7-CWY8cf4H.js → chunk-SHT3W25Y-BiQGljao.js} +5 -5
  26. package/dist/client/assets/{chunk-SVP7TREG-CyHOmcac.js → chunk-SVP7TREG-DB485R5x.js} +1 -1
  27. package/dist/client/assets/{chunk-LCL6LL3I-DmDkVukh.js → chunk-TICWLB2K-8rAVvoS3.js} +4 -4
  28. package/dist/client/assets/{chunk-CKBBP62Z-DG26UiBv.js → chunk-TLUHSLCS-DTY5v0aj.js} +2 -2
  29. package/dist/client/assets/classDiagram-ZZMXUADV-BsQWoR3Q.js +1 -0
  30. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BsQWoR3Q.js +1 -0
  31. package/dist/client/assets/{comment-thread-store-CdcwrObc.js → comment-thread-store-CX98zR6q.js} +1 -1
  32. package/dist/client/assets/comment-threads-BnRwo5B9.js +4 -0
  33. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CdTPi2yO.js → cynefinDiagram-5FMLGOSQ-rTz9RhFH.js} +1 -1
  34. package/dist/client/assets/{dagre-3AP2YEHR-5gtJtd0O.js → dagre-GXQ25YYZ-Cr67wLpQ.js} +2 -2
  35. package/dist/client/assets/{diagram-S7CK7UJ4-BudWz9WU.js → diagram-S7CK7UJ4-DywERe__.js} +2 -2
  36. package/dist/client/assets/{diagram-UQ7AKVKN-3v4rbH-s.js → diagram-UQ7AKVKN-CNYlXtu4.js} +1 -1
  37. package/dist/client/assets/diagram-VSXAHHWV-0H1a61Bn.js +3 -0
  38. package/dist/client/assets/{diagram-VX7I27RA-C_-rj0sw.js → diagram-VX7I27RA-CsJbsx5F.js} +1 -1
  39. package/dist/client/assets/{diagram-Z3DM3KII-B4yxavgj.js → diagram-Z3DM3KII-D0mLxEgI.js} +1 -1
  40. package/dist/client/assets/dist--hk9I5HQ.js +1 -0
  41. package/dist/client/assets/{dist-DutPuFmC.js → dist-B1XEa-Zs.js} +1 -1
  42. package/dist/client/assets/dist-Bd1JucQF.js +1 -0
  43. package/dist/client/assets/{dist-DZAAWTG-.js → dist-C0G3AaXG.js} +1 -1
  44. package/dist/client/assets/dist-Dm4w5UId.js +1 -0
  45. package/dist/client/assets/{dist-B_yQaEv_.js → dist-DpYDHR9p.js} +1 -1
  46. package/dist/client/assets/{dist-CietwTVS.js → dist-DzNmC81X.js} +1 -1
  47. package/dist/client/assets/{dist-DDUn5zTz.js → dist-GvvCNBe4.js} +1 -1
  48. package/dist/client/assets/dist-JaU3aRlD.js +19 -0
  49. package/dist/client/assets/{dist-Bw3VIE_v.js → dist-TW8iFRyW.js} +1 -1
  50. package/dist/client/assets/{dist-Dir5dDKZ.js → dist-jVU5Be5P.js} +1 -1
  51. package/dist/client/assets/document-formatter-rDDjRfZ2.js +2 -0
  52. package/dist/client/assets/drawioEditor-JubEEha7.js +9 -0
  53. package/dist/client/assets/ebnfDiagram-PWID7BFC-HeTxHpCU.js +1 -0
  54. package/dist/client/assets/editor-session-Bk6oIvSr.js +54 -0
  55. package/dist/client/assets/{embedded-editor-base-B3l6Xy65.css → embedded-editor-base-BlCgz6mw.css} +1 -1
  56. package/dist/client/assets/{erDiagram-SSCWMZ5O-C-iy6VkX.js → erDiagram-RLTQ6QDP-CbrDdd5P.js} +2 -2
  57. package/dist/client/assets/{vault-utils-DvoSftJT.js → es-Bfdp096f.js} +13 -13
  58. package/dist/client/assets/excalidraw-element-link-YLIaTnVF.js +7 -0
  59. package/dist/client/assets/{excalidraw-scene-BOben2gr.js → excalidraw-scene-6uROebca.js} +1 -1
  60. package/dist/client/assets/excalidrawEditor-dBMbRX_S.js +9 -0
  61. package/dist/client/assets/export-page-CRRQ2NEl.js +57 -0
  62. package/dist/client/assets/exportDocument-BlQRd9_m.js +2 -0
  63. package/dist/client/assets/exportDocument-CNSbjZwu.css +1 -0
  64. package/dist/client/assets/flowDiagram-HODETNUW-D5Gy0wmg.js +1 -0
  65. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-DtKHAbez.js → ganttDiagram-EL5Y4UJY-BHgOYiZz.js} +1 -1
  66. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-oue8fQ5o.js → gitGraphDiagram-WWUBYQGX-Dl__X3Sk.js} +1 -1
  67. package/dist/client/assets/image-ZVKINSPA-DgzW5zAy.js +1 -0
  68. package/dist/client/assets/index-D3RER1SZ.js +1023 -0
  69. package/dist/client/assets/index-DREVKl_K.css +1 -0
  70. package/dist/client/assets/{infoDiagram-RXCK75RN-BMzo6KIn.js → infoDiagram-27XIBGKW-DBpoANC9.js} +1 -1
  71. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BIM3h287.js → ishikawaDiagram-5VMMS53U-BMPC6hfp.js} +1 -1
  72. package/dist/client/assets/{journeyDiagram-EYS64GPL-mF6Lh8O-.js → journeyDiagram-3NMN7TZE-B1sApUmM.js} +2 -2
  73. package/dist/client/assets/{kanban-definition-3QL26DDD-DLN2NyoR.js → kanban-definition-UXKFOSKX-C9yP4td1.js} +4 -4
  74. package/dist/client/assets/{line-BfTWJmgf.js → line-BFl3ujec.js} +1 -1
  75. package/dist/client/assets/mermaid.core-BrY09czX.js +11 -0
  76. package/dist/client/assets/mermaid.core-DfcNfOTv.js +1 -0
  77. package/dist/client/assets/{mindmap-definition-FBJOCRG2-CRyHaHTk.js → mindmap-definition-YA3MSWOX-BUQHcYbK.js} +8 -8
  78. package/dist/client/assets/pegDiagram-XKGWAZYB-Bi2Iml7Z.js +1 -0
  79. package/dist/client/assets/{pieDiagram-E7YTZNPT-B5OZPb88.js → pieDiagram-E7YTZNPT-_gYXnMoi.js} +1 -1
  80. package/dist/client/assets/preview-render-compiler-CfxJYldJ.js +41 -0
  81. package/dist/client/assets/preview-render-compiler-Cu8_i9iS.js +1 -0
  82. package/dist/client/assets/{preview-render-worker-_QTxqKvP.js → preview-render-worker-c4Yi93qW.js} +41 -35
  83. package/dist/client/assets/prod-BiJL30sl.js +1 -0
  84. package/dist/client/assets/prod-qAk7rHa4.js +177 -0
  85. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-Drrw14YH.js → quadrantDiagram-AXDQQJYC-DwexhEhd.js} +1 -1
  86. package/dist/client/assets/quick-switcher-controller-BoIK_wuG.js +1 -0
  87. package/dist/client/assets/railroadDiagram-O6MQD6OU-BVA5UbMu.js +1 -0
  88. package/dist/client/assets/{requirementDiagram-EFPCY7ZU-CRZG6mRB.js → requirementDiagram-BXWQKSXE-C4cKwiIw.js} +2 -2
  89. package/dist/client/assets/runtime-config-DcmnGcXU.js +1 -0
  90. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-DvarEJpo.js → sankeyDiagram-P5KCCOFB-B5HHkRT2.js} +1 -1
  91. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-B4oWlb-w.js → sequenceDiagram-WJ2MYXX4-BX6jqJFD.js} +6 -6
  92. package/dist/client/assets/{stateDiagram-HBIQ2CUA-qbHIIqRZ.js → stateDiagram-D77RDMKH-CmqxyRGx.js} +1 -1
  93. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-zoLLQVyh.js +1 -0
  94. package/dist/client/assets/{swimlanes-XN3QIQJK-xB6CtUGj.js → swimlanes-42K2YHIH-Bmgb9Zld.js} +1 -1
  95. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DS-KQN37.js +8 -0
  96. package/dist/client/assets/{timeline-definition-24CTP7MA-Lj_yTNlY.js → timeline-definition-24CTP7MA-BA-lVH6P.js} +1 -1
  97. package/dist/client/assets/vault-api-client-iZLhMJKe.js +6 -0
  98. package/dist/client/assets/{vennDiagram-4TSXK5OY-BekRp5Y0.js → vennDiagram-4TSXK5OY-DNdUC_Xj.js} +1 -1
  99. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-kdnV_Hdm.js → wardleyDiagram-VM6X3IG4-C2oY-YbF.js} +1 -1
  100. package/dist/client/assets/wiki-link-resolver-DFIwErjc.js +1 -0
  101. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DufGwNSB.js → xychartDiagram-S5SC5T6Z-CoIR8CBX.js} +1 -1
  102. package/dist/client/assets/{yjs-provider-reset-guard-DE0vINDP.js → yjs-provider-reset-guard-9ul1qF6k.js} +1 -1
  103. package/dist/client/drawio-editor.html +11 -3
  104. package/dist/client/excalidraw-editor.html +45 -2
  105. package/dist/client/export-document.html +3 -3
  106. package/dist/client/index.html +67 -35
  107. package/integrations/pi/index.ts +94 -0
  108. package/package.json +41 -32
  109. package/src/client/app/drawio-editor.html +2 -2
  110. package/src/client/app/excalidraw-editor.html +2 -2
  111. package/src/client/app/export-document.html +1 -1
  112. package/src/client/app/index.html +49 -33
  113. package/src/client/app/main-entry.js +15 -1
  114. package/src/client/application/app-shell/chat-feature.js +7 -22
  115. package/src/client/application/app-shell/git-feature.js +23 -5
  116. package/src/client/application/app-shell/presence-feature.js +8 -25
  117. package/src/client/application/app-shell/ui-feature-shell.js +36 -91
  118. package/src/client/application/app-shell/ui-feature-sidebar.js +43 -7
  119. package/src/client/application/app-shell/ui-feature-tab-activity.js +19 -6
  120. package/src/client/application/app-shell/ui-feature-toolbar.js +16 -129
  121. package/src/client/application/app-shell-elements.js +4 -0
  122. package/src/client/application/preview-render-compiler.js +1 -87
  123. package/src/client/application/preview-render-scheduler.js +8 -24
  124. package/src/client/application/preview-renderer.js +2 -2
  125. package/src/client/application/webmcp-diagram-renderer.js +47 -0
  126. package/src/client/application/workspace-coordinator.js +3 -1
  127. package/src/client/application/workspace-route-controller.js +7 -0
  128. package/src/client/bootstrap/collabmd-app-shell.js +78 -1
  129. package/src/client/domain/excalidraw-element-link.js +73 -0
  130. package/src/client/domain/excalidraw-scene.js +21 -0
  131. package/src/client/domain/hash-routes.js +8 -0
  132. package/src/client/domain/room.js +1 -5
  133. package/src/client/domain/runtime-paths.js +5 -0
  134. package/src/client/excalidraw-editor.js +135 -10
  135. package/src/client/export/export-host.js +3 -1
  136. package/src/client/export/export-pipeline.js +4 -17
  137. package/src/client/infrastructure/agent-connection-api-client.js +23 -0
  138. package/src/client/infrastructure/auth-client.js +3 -13
  139. package/src/client/infrastructure/editor-session.js +11 -0
  140. package/src/client/infrastructure/editor-view-adapter.js +13 -0
  141. package/src/client/infrastructure/excalidraw-room-client.js +80 -1
  142. package/src/client/infrastructure/git-api-client.js +39 -33
  143. package/src/client/infrastructure/lobby-presence.js +2 -5
  144. package/src/client/infrastructure/runtime-config.js +11 -1
  145. package/src/client/infrastructure/tab-activity-lock.js +2 -5
  146. package/src/client/infrastructure/vault-api-client.js +33 -26
  147. package/src/client/infrastructure/webmcp-tool-registry.js +283 -0
  148. package/src/client/infrastructure/workspace-sync-client.js +6 -4
  149. package/src/client/presentation/agent-connection-controller.js +255 -0
  150. package/src/client/presentation/backlinks-panel.js +3 -0
  151. package/src/client/presentation/bases-preview-controller.js +27 -18
  152. package/src/client/presentation/comment-ui/comment-ui-card.js +4 -2
  153. package/src/client/presentation/create-menu-presenter.js +19 -16
  154. package/src/client/presentation/excalidraw-embed-controller.js +164 -4
  155. package/src/client/presentation/file-explorer-view.js +70 -12
  156. package/src/client/presentation/file-history-view-controller.js +13 -11
  157. package/src/client/presentation/git-diff-view-controller.js +35 -43
  158. package/src/client/presentation/git-panel-controller.js +77 -27
  159. package/src/client/presentation/image-lightbox-controller.js +20 -16
  160. package/src/client/presentation/layout-controller.js +3 -1
  161. package/src/client/presentation/quick-switcher-controller.js +20 -78
  162. package/src/client/presentation/quick-switcher-text-search.js +10 -14
  163. package/src/client/styles/components/navigation.css +1 -2
  164. package/src/client/styles/features/agent-connection.css +202 -0
  165. package/src/client/styles/features/collaboration-chat.css +8 -1
  166. package/src/client/styles/features/collaboration-dialogs.css +16 -1
  167. package/src/client/styles/features/collaboration-presence.css +17 -4
  168. package/src/client/styles/features/diff-toolbar.css +1 -1
  169. package/src/client/styles/features/media-lightbox.css +12 -3
  170. package/src/client/styles/features/quick-switcher.css +20 -11
  171. package/src/client/styles/foundation/themes.css +2 -0
  172. package/src/client/styles/layout/editor-page.css +25 -11
  173. package/src/client/styles/layout/responsive.css +2 -20
  174. package/src/client/styles/layout/shell.css +1 -0
  175. package/src/client/styles/layout/sidebar.css +7 -4
  176. package/src/client/styles/primitives/controls.css +21 -54
  177. package/src/client/styles/style.css +1 -0
  178. package/src/domain/agent-tool-definitions.js +796 -0
  179. package/src/domain/collabmd-content-capabilities.js +149 -0
  180. package/src/domain/collaboration-protocol.js +2 -0
  181. package/src/domain/comment-threads.js +3 -5
  182. package/src/domain/diagram-source.js +50 -0
  183. package/src/domain/editable-content-revision.js +10 -0
  184. package/src/domain/editable-text.js +3 -0
  185. package/src/domain/exact-text-edits.js +69 -0
  186. package/src/domain/excalidraw-agent-scene.js +522 -0
  187. package/src/domain/excalidraw-agent-verification.js +460 -0
  188. package/src/domain/excalidraw-room-codec.js +1 -5
  189. package/src/domain/video-embed.js +76 -0
  190. package/src/server/application/agent-connection-service.js +178 -0
  191. package/src/server/application/agent-content-service.js +773 -0
  192. package/src/server/application/workspace-reconciliation.js +5 -7
  193. package/src/server/config/env.js +51 -1
  194. package/src/server/create-app-server.js +36 -0
  195. package/src/server/domain/bases/base-query-service.js +1 -5
  196. package/src/server/domain/collaboration/collaboration-room.js +121 -25
  197. package/src/server/domain/collaboration/protocol.js +4 -0
  198. package/src/server/domain/hosted-workspace.js +21 -0
  199. package/src/server/domain/markdown-reference-extractor.js +15 -1
  200. package/src/server/infrastructure/git/git-service.js +19 -1
  201. package/src/server/infrastructure/git/history-service.js +1 -1
  202. package/src/server/infrastructure/git/local-exclude.js +25 -0
  203. package/src/server/infrastructure/git/parsers.js +19 -17
  204. package/src/server/infrastructure/git/path-utils.js +0 -16
  205. package/src/server/infrastructure/git/status-service.js +1 -1
  206. package/src/server/infrastructure/git/untracked-files.js +12 -21
  207. package/src/server/infrastructure/http/create-agent-api-handler.js +171 -0
  208. package/src/server/infrastructure/http/create-git-api-command-handler.js +32 -0
  209. package/src/server/infrastructure/http/create-request-handler.js +28 -0
  210. package/src/server/infrastructure/http/create-static-handler.js +6 -0
  211. package/src/server/infrastructure/mcp/create-agent-mcp-handler.js +199 -0
  212. package/src/server/infrastructure/persistence/agent-connection-store.js +120 -0
  213. package/src/server/infrastructure/persistence/pull-backup-store.js +2 -27
  214. package/src/server/infrastructure/persistence/vault-file-store.js +9 -2
  215. package/src/server/shared/agent-tool-image.js +22 -0
  216. package/src/server/shared/agent-tool-rate-limiter.js +20 -0
  217. package/src/server/startup/git-remote-bootstrap.js +5 -33
  218. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BPH4FJkv.js +0 -1
  219. package/dist/client/assets/abnfDiagram-VCTEODGH-BNDLzJ7L.js +0 -1
  220. package/dist/client/assets/browser-utils--H_DkyEF.js +0 -1
  221. package/dist/client/assets/channel-CaoKA_We.js +0 -1
  222. package/dist/client/assets/chunk-DSNCTWBM-8xkug7fQ.js +0 -2
  223. package/dist/client/assets/chunk-DU6HZSFF-COXDzJK1.js +0 -127
  224. package/dist/client/assets/chunk-R7TYR2AO-CTd0Yj98.js +0 -10
  225. package/dist/client/assets/classDiagram-DTDB5LWJ-7fEmn0zV.js +0 -1
  226. package/dist/client/assets/classDiagram-v2-JRS7N3AN-7fEmn0zV.js +0 -1
  227. package/dist/client/assets/comment-threads-9J6Em-_y.js +0 -4
  228. package/dist/client/assets/comment-ui-shared-DuoyznXW.js +0 -7
  229. package/dist/client/assets/diagram-VSXAHHWV-CQRVEZR7.js +0 -3
  230. package/dist/client/assets/dist-73RPdcyU.js +0 -1
  231. package/dist/client/assets/dist-CH-sQu3r.js +0 -1
  232. package/dist/client/assets/document-formatter-Dxl_a8XO.js +0 -2
  233. package/dist/client/assets/drawio-editor-BVaNNtYp.js +0 -9
  234. package/dist/client/assets/drawioEditor-BkIBlXx0.js +0 -2
  235. package/dist/client/assets/ebnfDiagram-PWID7BFC-OXa8VEp1.js +0 -1
  236. package/dist/client/assets/editor-session-DMyVdHLj.js +0 -54
  237. package/dist/client/assets/excalidraw-editor-BjYaNEMY.js +0 -9
  238. package/dist/client/assets/excalidraw-mermaid-stub-BNckbX2n.js +0 -1
  239. package/dist/client/assets/excalidraw-mermaid-stub-DE5FTiZB.js +0 -1
  240. package/dist/client/assets/excalidrawEditor-ChqF_d82.js +0 -2
  241. package/dist/client/assets/export-page-Dyu0XCbu.js +0 -57
  242. package/dist/client/assets/exportDocument-CJBx4Xjx.css +0 -1
  243. package/dist/client/assets/exportDocument-Dgvfa2Sd.js +0 -2
  244. package/dist/client/assets/flowDiagram-A5DVABFB-CiW1eN8C.js +0 -1
  245. package/dist/client/assets/image-ZVKINSPA-0zXSnE7M.js +0 -1
  246. package/dist/client/assets/index-CSNIMyOP.css +0 -1
  247. package/dist/client/assets/index-DG3N2Ps-.js +0 -2
  248. package/dist/client/assets/main-D0wCxpVn.js +0 -903
  249. package/dist/client/assets/mermaid.core-BJRLUQZE.js +0 -11
  250. package/dist/client/assets/pegDiagram-XKGWAZYB-B31fKPR2.js +0 -1
  251. package/dist/client/assets/preview-render-compiler-CrJIooVD.js +0 -35
  252. package/dist/client/assets/preview-render-compiler-O0JxBVNF.js +0 -1
  253. package/dist/client/assets/preview-render-profile-B4RWYWHt.js +0 -1
  254. package/dist/client/assets/prod-BiYPMR1i.js +0 -177
  255. package/dist/client/assets/prod-VxdGZ5Ly.js +0 -1
  256. package/dist/client/assets/quick-switcher-controller-CaEjEtq_.js +0 -1
  257. package/dist/client/assets/railroadDiagram-O6MQD6OU-BPifP0MB.js +0 -1
  258. package/dist/client/assets/runtime-config-BLrEKVO1.js +0 -1
  259. package/dist/client/assets/stateDiagram-v2-4QOOHH4V-B--gjrit.js +0 -1
  260. package/dist/client/assets/swimlanesDiagram-VK2B7HYN-DO8XNXEg.js +0 -8
  261. package/dist/client/assets/vault-api-client-BkwdFjx0.js +0 -6
  262. package/src/client/app/drawio-editor-entry.js +0 -1
  263. package/src/client/app/excalidraw-editor-entry.js +0 -1
  264. package/src/client/excalidraw-mermaid-stub.js +0 -7
  265. package/src/client/main.js +0 -16
  266. /package/dist/client/assets/{drawio-editor-UQQ8XHou.css → drawioEditor-UQQ8XHou.css} +0 -0
  267. /package/dist/client/assets/{excalidraw-editor-BbSbI80a.css → excalidrawEditor-BbSbI80a.css} +0 -0
  268. /package/dist/client/assets/{sizeCapture-X5ZJPWSS-B0uUizjq.js → sizeCapture-INFHLROL-B0uUizjq.js} +0 -0
@@ -0,0 +1,149 @@
1
+ import {
2
+ BASE_FILE_EXTENSION,
3
+ DRAWIO_FILE_EXTENSION,
4
+ EXCALIDRAW_FILE_EXTENSION,
5
+ HTML_FILE_EXTENSIONS,
6
+ IMAGE_ATTACHMENT_EXTENSIONS,
7
+ MARKDOWN_FILE_EXTENSIONS,
8
+ MERMAID_FILE_EXTENSIONS,
9
+ PDF_FILE_EXTENSION,
10
+ PLANTUML_FILE_EXTENSIONS,
11
+ STRUCTURIZR_FILE_EXTENSIONS,
12
+ getVaultFileKind,
13
+ supportsCommentsForFilePath,
14
+ } from './file-kind.js';
15
+
16
+ const CAPABILITIES = Object.freeze({
17
+ base: {
18
+ agentCreatable: false,
19
+ agentEditable: false,
20
+ editable: true,
21
+ extensions: [BASE_FILE_EXTENSION],
22
+ guide: 'YAML Base definition. Embed a file with ![[query.base]] or an inline query with a fenced base block. Agent writes are disabled until Base validation is shared.',
23
+ examples: ['```base\nfilters:\n and: []\n```', '![[tasks.base]]'],
24
+ },
25
+ drawio: {
26
+ agentCreatable: false,
27
+ agentEditable: false,
28
+ editable: true,
29
+ extensions: [DRAWIO_FILE_EXTENSION],
30
+ guide: 'diagrams.net XML managed by the embedded draw.io editor. Embed with ![[architecture.drawio]]. Agent writes are disabled.',
31
+ examples: ['![[architecture.drawio]]'],
32
+ },
33
+ excalidraw: {
34
+ agentCreatable: true,
35
+ agentEditable: true,
36
+ editable: true,
37
+ extensions: [EXCALIDRAW_FILE_EXTENSION],
38
+ guide: 'Excalidraw scene JSON managed by the canvas editor. Use create_excalidraw and edit_excalidraw rather than raw text edits. Element order is back-to-front; create supports beforeElementId and afterElementId, while edit supports relationship-aware translation, reorder, same-ID replace, and same-revision verification. Container or group translation also moves bound text and grouped members. Standalone auto-resizing text recalculates its bounds when text metrics change. Line, arrow, and freedraw dimensions are derived from points. Creation and editing support inline inspection and optional rendering; remote fallback renders report preview-not-pixel-identical. Supported agent element types: rectangle, ellipse, diamond, text, arrow, line, and freedraw. Embed with ![[drawing.excalidraw]].',
39
+ examples: ['![[drawing.excalidraw]]'],
40
+ },
41
+ html: {
42
+ agentCreatable: true,
43
+ agentEditable: true,
44
+ editable: true,
45
+ extensions: [...HTML_FILE_EXTENSIONS],
46
+ guide: 'Standalone HTML file. Raw HTML inside Markdown is escaped; use a standalone .html or .htm file when HTML is required.',
47
+ examples: ['<!doctype html>\n<html lang="en"><body><h1>Title</h1></body></html>'],
48
+ },
49
+ image: {
50
+ agentCreatable: false,
51
+ agentEditable: false,
52
+ editable: false,
53
+ extensions: [...IMAGE_ATTACHMENT_EXTENSIONS],
54
+ guide: 'Binary or SVG attachment. Reference from Markdown with a relative image path. Use attachment upload rather than create_document.',
55
+ examples: ['![Diagram](assets/diagram.png)'],
56
+ },
57
+ markdown: {
58
+ agentCreatable: true,
59
+ agentEditable: true,
60
+ editable: true,
61
+ extensions: [...MARKDOWN_FILE_EXTENSIONS],
62
+ guide: 'Markdown-it syntax with YAML frontmatter, headings, tables, task lists, fenced code, linkified URLs, [[wiki-links]], aliases, and embeds. Use ![[file.ext]] for Base, draw.io, Excalidraw, Mermaid, or PlantUML Vault embeds. Use ![Label](https://...) for public video embeds: valid YouTube URLs or direct public HTTPS URLs ending in .mp4, .webm, or .ogg. Use relative Markdown image paths for Vault image attachments. Raw HTML is disabled.',
63
+ examples: [
64
+ '---\ntags: [docs]\n---\n# Title\n\n- [ ] Task\n\n[[Other Note|Alias]]',
65
+ '![[diagram.mmd]]\n![[diagram.puml]]\n![[drawing.excalidraw]]\n![[architecture.drawio]]\n![[query.base]]',
66
+ '![Demo](https://www.youtube.com/watch?v=dQw4w9WgXcQ)\n![Demo](https://cdn.example.com/demo.webm)\n![Diagram](assets/diagram.png)',
67
+ '```mermaid\nflowchart LR\n A --> B\n```\n\n```plantuml\n@startuml\nAlice -> Bob\n@enduml\n```',
68
+ ],
69
+ },
70
+ mermaid: {
71
+ agentCreatable: true,
72
+ agentEditable: true,
73
+ editable: true,
74
+ extensions: [...MERMAID_FILE_EXTENSIONS],
75
+ guide: 'Standalone Mermaid source. Markdown also supports fenced mermaid blocks and ![[diagram.mmd]] embeds.',
76
+ examples: ['flowchart LR\n A[Start] --> B[Done]'],
77
+ },
78
+ pdf: {
79
+ agentCreatable: false,
80
+ agentEditable: false,
81
+ editable: false,
82
+ extensions: [PDF_FILE_EXTENSION],
83
+ guide: 'Readonly PDF Vault Content. Agent text tools do not read or write PDF bytes.',
84
+ examples: [],
85
+ },
86
+ plantuml: {
87
+ agentCreatable: true,
88
+ agentEditable: true,
89
+ editable: true,
90
+ extensions: [...PLANTUML_FILE_EXTENSIONS],
91
+ guide: 'Standalone PlantUML source, normally enclosed by @startuml and @enduml. Markdown supports plantuml or puml fences and ![[diagram.puml]] embeds.',
92
+ examples: ['@startuml\nAlice -> Bob : Hello\n@enduml'],
93
+ },
94
+ structurizr: {
95
+ agentCreatable: true,
96
+ agentEditable: true,
97
+ editable: true,
98
+ extensions: [...STRUCTURIZR_FILE_EXTENSIONS],
99
+ guide: 'Structurizr DSL C4 workspace. Preview requires configured Structurizr renderer.',
100
+ examples: ['workspace {\n model {\n user = person "User"\n system = softwareSystem "System"\n user -> system "Uses"\n }\n views { systemContext system { include * } }\n}'],
101
+ },
102
+ });
103
+
104
+ function resolveKind(kindOrPath) {
105
+ const normalized = String(kindOrPath ?? '').trim().toLowerCase();
106
+ return Object.hasOwn(CAPABILITIES, normalized) ? normalized : getVaultFileKind(normalized);
107
+ }
108
+
109
+ export function getCollabMdContentCapability(kindOrPath) {
110
+ const kind = resolveKind(kindOrPath);
111
+ if (!kind || !CAPABILITIES[kind]) return null;
112
+ const capability = CAPABILITIES[kind];
113
+ const commentPath = capability.extensions[0] ? `file${capability.extensions[0]}` : '';
114
+ return {
115
+ ...capability,
116
+ commentsSupported: commentPath ? supportsCommentsForFilePath(commentPath) : false,
117
+ kind,
118
+ readable: capability.editable,
119
+ searchable: kind !== 'image' && kind !== 'pdf',
120
+ };
121
+ }
122
+
123
+ export function listCollabMdContentCapabilities() {
124
+ return Object.keys(CAPABILITIES).map(getCollabMdContentCapability);
125
+ }
126
+
127
+ export function getCollabMdSyntaxGuide(kind) {
128
+ const capability = getCollabMdContentCapability(kind);
129
+ return capability ? {
130
+ examples: capability.examples,
131
+ extensions: capability.extensions,
132
+ guide: capability.guide,
133
+ kind: capability.kind,
134
+ } : null;
135
+ }
136
+
137
+ export function isAgentReadablePath(path) {
138
+ return Boolean(getCollabMdContentCapability(path)?.readable);
139
+ }
140
+
141
+ export function isAgentEditablePath(path) {
142
+ const capability = getCollabMdContentCapability(path);
143
+ return Boolean(capability?.agentEditable && capability.kind !== 'excalidraw');
144
+ }
145
+
146
+ export function isAgentCreatablePath(path) {
147
+ const capability = getCollabMdContentCapability(path);
148
+ return Boolean(capability?.agentCreatable && capability.kind !== 'excalidraw');
149
+ }
@@ -0,0 +1,2 @@
1
+ export const MSG_AGENT_FLUSH = 4;
2
+ export const MSG_AGENT_FLUSH_ACK = 5;
@@ -219,11 +219,9 @@ function serializeMessages(messages) {
219
219
  }
220
220
 
221
221
  export function createCommentId(prefix = 'comment') {
222
- if (globalThis.crypto?.randomUUID) {
223
- return `${prefix}-${globalThis.crypto.randomUUID()}`;
224
- }
225
-
226
- return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
222
+ const id = globalThis.crypto?.randomUUID?.()
223
+ ?? `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
224
+ return `${prefix}-${id}`;
227
225
  }
228
226
 
229
227
  export function normalizeCommentAnchor(record = {}) {
@@ -0,0 +1,50 @@
1
+ import { getVaultFileKind } from './file-kind.js';
2
+
3
+ const FENCE_OPEN_PATTERN = /^\s*(`{3,})(mermaid|plantuml|puml)\s*$/iu;
4
+
5
+ export function listRenderableDiagrams(content = '', path = '', { contentStartLine = 1 } = {}) {
6
+ const kind = getVaultFileKind(path);
7
+ const lines = String(content).split('\n');
8
+ if (kind === 'mermaid' || kind === 'plantuml') {
9
+ return [{
10
+ endLine: contentStartLine + Math.max(lines.length - 1, 0),
11
+ kind,
12
+ source: String(content),
13
+ startLine: contentStartLine,
14
+ }];
15
+ }
16
+ if (kind !== 'markdown') return [];
17
+
18
+ const diagrams = [];
19
+ for (let index = 0; index < lines.length; index += 1) {
20
+ const match = lines[index].match(FENCE_OPEN_PATTERN);
21
+ if (!match) continue;
22
+
23
+ const fence = match[1];
24
+ const diagramKind = match[2].toLowerCase() === 'mermaid' ? 'mermaid' : 'plantuml';
25
+ const sourceStart = index + 1;
26
+ let end = sourceStart;
27
+ while (end < lines.length && lines[end].trim() !== fence) {
28
+ end += 1;
29
+ }
30
+ if (end >= lines.length) continue;
31
+
32
+ diagrams.push({
33
+ endLine: contentStartLine + end,
34
+ kind: diagramKind,
35
+ source: lines.slice(sourceStart, end).join('\n'),
36
+ startLine: contentStartLine + index,
37
+ });
38
+ index = end;
39
+ }
40
+ return diagrams;
41
+ }
42
+
43
+ export function resolveRenderableDiagram(content = '', path = '', options = {}) {
44
+ const diagrams = listRenderableDiagrams(content, path, options);
45
+ const requestedStartLine = Number.parseInt(options.startLine, 10);
46
+ if (Number.isInteger(requestedStartLine)) {
47
+ return diagrams.find(({ startLine }) => startLine === requestedStartLine) ?? null;
48
+ }
49
+ return diagrams.length === 1 ? diagrams[0] : null;
50
+ }
@@ -0,0 +1,10 @@
1
+ export async function createEditableContentRevision(content) {
2
+ const digest = await globalThis.crypto.subtle.digest(
3
+ 'SHA-256',
4
+ new TextEncoder().encode(String(content ?? '')),
5
+ );
6
+ return Array.from(
7
+ new Uint8Array(digest),
8
+ (byte) => byte.toString(16).padStart(2, '0'),
9
+ ).join('');
10
+ }
@@ -0,0 +1,3 @@
1
+ export function normalizeEditableText(content) {
2
+ return String(content ?? '').replace(/\r\n?/g, '\n');
3
+ }
@@ -0,0 +1,69 @@
1
+ function createEditError(code, message) {
2
+ const error = new Error(message);
3
+ error.code = code;
4
+ return error;
5
+ }
6
+
7
+ export function validateExactTextReplacements(replacements, {
8
+ maxCharacters = Infinity,
9
+ maxReplacements = Infinity,
10
+ } = {}) {
11
+ if (!Array.isArray(replacements) || replacements.length === 0) {
12
+ throw createEditError('EXACT_EDIT_REQUIRED', 'At least one text replacement is required');
13
+ }
14
+ if (replacements.length > maxReplacements) {
15
+ throw createEditError('EXACT_EDIT_LIMIT', `At most ${maxReplacements} text replacements are allowed`);
16
+ }
17
+
18
+ let characterCount = 0;
19
+ for (const replacement of replacements) {
20
+ if (
21
+ !replacement
22
+ || typeof replacement.oldText !== 'string'
23
+ || replacement.oldText.length === 0
24
+ || typeof replacement.newText !== 'string'
25
+ ) {
26
+ throw createEditError('EXACT_EDIT_INVALID', 'Each replacement requires non-empty oldText and string newText');
27
+ }
28
+ if (replacement.oldText === replacement.newText) {
29
+ throw createEditError('EXACT_EDIT_UNCHANGED', 'A replacement must change the document');
30
+ }
31
+ characterCount += replacement.oldText.length + replacement.newText.length;
32
+ }
33
+
34
+ if (characterCount > maxCharacters) {
35
+ throw createEditError('EXACT_EDIT_LIMIT', `Text replacements may contain at most ${maxCharacters} characters`);
36
+ }
37
+ return replacements;
38
+ }
39
+
40
+ export function resolveExactTextChanges(content, replacements, limits = {}) {
41
+ const text = String(content ?? '');
42
+ const validated = validateExactTextReplacements(replacements, limits);
43
+ const changes = validated.map(({ newText, oldText }) => {
44
+ const from = text.indexOf(oldText);
45
+ if (from < 0) {
46
+ throw createEditError('EXACT_EDIT_MISMATCH', 'A requested text replacement no longer matches the document');
47
+ }
48
+ if (text.includes(oldText, from + 1)) {
49
+ throw createEditError('EXACT_EDIT_NOT_UNIQUE', 'A requested text replacement is not unique in the document');
50
+ }
51
+ return { from, insert: newText, to: from + oldText.length };
52
+ }).sort((left, right) => left.from - right.from);
53
+
54
+ for (let index = 1; index < changes.length; index += 1) {
55
+ if (changes[index].from < changes[index - 1].to) {
56
+ throw createEditError('EXACT_EDIT_OVERLAP', 'Requested text replacements overlap');
57
+ }
58
+ }
59
+ return changes;
60
+ }
61
+
62
+ export function applyExactTextChanges(content, changes) {
63
+ let result = String(content ?? '');
64
+ for (let index = changes.length - 1; index >= 0; index -= 1) {
65
+ const change = changes[index];
66
+ result = result.slice(0, change.from) + change.insert + result.slice(change.to);
67
+ }
68
+ return result;
69
+ }