collabmd 0.1.47 → 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 (305) hide show
  1. package/README.md +70 -11
  2. package/bin/collabmd.js +3 -0
  3. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-C-nmgL5g.js +1 -0
  4. package/dist/client/assets/JetBrainsMono-Regular-BQaDgvhP.woff2 +0 -0
  5. package/dist/client/assets/abnfDiagram-VCTEODGH-CdVZqicp.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-5GKGNRK7-I39sYjHI.js → architectureDiagram-5GKGNRK7-wUo0bXif.js} +3 -3
  7. package/dist/client/assets/babel-CY5KOv-I.js +16 -0
  8. package/dist/client/assets/{blockDiagram-NRAW4CY4-C6DtJy5Y.js → blockDiagram-I7D4REHJ-BRSK3m49.js} +4 -4
  9. package/dist/client/assets/browser-utils-DbXSMI-6.js +1 -0
  10. package/dist/client/assets/{c4Diagram-UCG6FXSJ-CtWtxS9_.js → c4Diagram-7LVT6UL2-yD2poxqw.js} +1 -1
  11. package/dist/client/assets/channel-Fa4GS_-F.js +1 -0
  12. package/dist/client/assets/chunk-2E4U76K2-BPnTT-J3.js +2 -0
  13. package/dist/client/assets/{chunk-TEH6E4GO-DVayPj-q.js → chunk-4HAMMTFA-DStbIfJ1.js} +20 -20
  14. package/dist/client/assets/{chunk-75Z2AOVW-CdFSaPjz.js → chunk-75Z2AOVW-C5pGd3W9.js} +1 -1
  15. package/dist/client/assets/{chunk-CLGD4ZFX-DQLgbQrv.js → chunk-CLGD4ZFX-BMeArk03.js} +1 -1
  16. package/dist/client/assets/chunk-DU6HZSFF-Zkp69c6c.js +127 -0
  17. package/dist/client/assets/{chunk-F27PBJKO-CNHIFhjo.js → chunk-F27PBJKO-D4xNct1r.js} +1 -1
  18. package/dist/client/assets/{chunk-GMAD6QVW-CbcBqPM5.js → chunk-GMAD6QVW-NZ6WpDb8.js} +1 -1
  19. package/dist/client/assets/{chunk-OBVCFTLP-BJR7u1jh.js → chunk-GVQU2GXP-D8SDprfX.js} +1 -1
  20. package/dist/client/assets/{chunk-G27WJ6UU-D9-eg537.js → chunk-IMKFNOWR-D8jEuU3Q.js} +2 -2
  21. package/dist/client/assets/{chunk-JQ64N6SF-DSFNH4bh.js → chunk-L3NEJ4N5-aijKP-eh.js} +1 -1
  22. package/dist/client/assets/chunk-OSK3NFVY-CCbLQAMa.js +10 -0
  23. package/dist/client/assets/{chunk-P2QGCYS3-BRpqY32H.js → chunk-P2QGCYS3-Oag_FdCq.js} +1 -1
  24. package/dist/client/assets/{chunk-POPQ4Y6H-Cb4SlVZF.js → chunk-POPQ4Y6H-CYnpIgXT.js} +1 -1
  25. package/dist/client/assets/{chunk-PWAF6VOD-Cz8IwBB5.js → chunk-PWAF6VOD-JSNrcBmP.js} +1 -1
  26. package/dist/client/assets/{chunk-RM4UPSZO-CWRwxNWJ.js → chunk-RM4UPSZO-DOWllDY8.js} +4 -4
  27. package/dist/client/assets/{chunk-RHFEMEQ7-CWY8cf4H.js → chunk-SHT3W25Y-BiQGljao.js} +5 -5
  28. package/dist/client/assets/{chunk-SVP7TREG-CyHOmcac.js → chunk-SVP7TREG-DB485R5x.js} +1 -1
  29. package/dist/client/assets/{chunk-LCL6LL3I-DmDkVukh.js → chunk-TICWLB2K-8rAVvoS3.js} +4 -4
  30. package/dist/client/assets/{chunk-CKBBP62Z-DG26UiBv.js → chunk-TLUHSLCS-DTY5v0aj.js} +2 -2
  31. package/dist/client/assets/classDiagram-ZZMXUADV-BsQWoR3Q.js +1 -0
  32. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BsQWoR3Q.js +1 -0
  33. package/dist/client/assets/{comment-thread-store-CdcwrObc.js → comment-thread-store-CX98zR6q.js} +1 -1
  34. package/dist/client/assets/comment-threads-BnRwo5B9.js +4 -0
  35. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CdTPi2yO.js → cynefinDiagram-5FMLGOSQ-rTz9RhFH.js} +1 -1
  36. package/dist/client/assets/{dagre-3AP2YEHR-5gtJtd0O.js → dagre-GXQ25YYZ-Cr67wLpQ.js} +2 -2
  37. package/dist/client/assets/{diagram-S7CK7UJ4-BudWz9WU.js → diagram-S7CK7UJ4-DywERe__.js} +2 -2
  38. package/dist/client/assets/{diagram-UQ7AKVKN-3v4rbH-s.js → diagram-UQ7AKVKN-CNYlXtu4.js} +1 -1
  39. package/dist/client/assets/diagram-VSXAHHWV-0H1a61Bn.js +3 -0
  40. package/dist/client/assets/{diagram-VX7I27RA-C_-rj0sw.js → diagram-VX7I27RA-CsJbsx5F.js} +1 -1
  41. package/dist/client/assets/{diagram-Z3DM3KII-B4yxavgj.js → diagram-Z3DM3KII-D0mLxEgI.js} +1 -1
  42. package/dist/client/assets/dist--hk9I5HQ.js +1 -0
  43. package/dist/client/assets/{dist-DutPuFmC.js → dist-B1XEa-Zs.js} +1 -1
  44. package/dist/client/assets/dist-Bd1JucQF.js +1 -0
  45. package/dist/client/assets/{dist-DZAAWTG-.js → dist-C0G3AaXG.js} +1 -1
  46. package/dist/client/assets/dist-ChRoo3IB.js +9 -0
  47. package/dist/client/assets/dist-Dm4w5UId.js +1 -0
  48. package/dist/client/assets/{dist-B_yQaEv_.js → dist-DpYDHR9p.js} +1 -1
  49. package/dist/client/assets/{dist-CietwTVS.js → dist-DzNmC81X.js} +1 -1
  50. package/dist/client/assets/{dist-DDUn5zTz.js → dist-GvvCNBe4.js} +1 -1
  51. package/dist/client/assets/dist-JaU3aRlD.js +19 -0
  52. package/dist/client/assets/{dist-Bw3VIE_v.js → dist-TW8iFRyW.js} +1 -1
  53. package/dist/client/assets/{dist-Dir5dDKZ.js → dist-jVU5Be5P.js} +1 -1
  54. package/dist/client/assets/document-formatter-rDDjRfZ2.js +2 -0
  55. package/dist/client/assets/drawioEditor-JubEEha7.js +9 -0
  56. package/dist/client/assets/ebnfDiagram-PWID7BFC-HeTxHpCU.js +1 -0
  57. package/dist/client/assets/editor-session-Bk6oIvSr.js +54 -0
  58. package/dist/client/assets/embedded-editor-base-BlCgz6mw.css +1 -0
  59. package/dist/client/assets/{erDiagram-SSCWMZ5O-C-iy6VkX.js → erDiagram-RLTQ6QDP-CbrDdd5P.js} +2 -2
  60. package/dist/client/assets/{es-CAsWR6hG.js → es-Bfdp096f.js} +13 -13
  61. package/dist/client/assets/estree-CuT_pB8K.js +44 -0
  62. package/dist/client/assets/excalidraw-element-link-YLIaTnVF.js +7 -0
  63. package/dist/client/assets/{excalidraw-scene-BOben2gr.js → excalidraw-scene-6uROebca.js} +1 -1
  64. package/dist/client/assets/{excalidraw-editor-BlcN6umJ.css → excalidrawEditor-BbSbI80a.css} +1 -1
  65. package/dist/client/assets/excalidrawEditor-dBMbRX_S.js +9 -0
  66. package/dist/client/assets/export-page-CRRQ2NEl.js +57 -0
  67. package/dist/client/assets/exportDocument-BlQRd9_m.js +2 -0
  68. package/dist/client/assets/exportDocument-CNSbjZwu.css +1 -0
  69. package/dist/client/assets/{file-icon-svg-CQAjlWjK.js → file-icon-svg-Y_kpF957.js} +1 -1
  70. package/dist/client/assets/file-kind-BwMIcZbi.js +1 -0
  71. package/dist/client/assets/file-search-DDLyyLDU.js +1 -0
  72. package/dist/client/assets/flowDiagram-HODETNUW-D5Gy0wmg.js +1 -0
  73. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-DtKHAbez.js → ganttDiagram-EL5Y4UJY-BHgOYiZz.js} +1 -1
  74. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-oue8fQ5o.js → gitGraphDiagram-WWUBYQGX-Dl__X3Sk.js} +1 -1
  75. package/dist/client/assets/html-Cdnr2qzU.js +25 -0
  76. package/dist/client/assets/image-ZVKINSPA-DgzW5zAy.js +1 -0
  77. package/dist/client/assets/index-D3RER1SZ.js +1023 -0
  78. package/dist/client/assets/index-DREVKl_K.css +1 -0
  79. package/dist/client/assets/{infoDiagram-RXCK75RN-BMzo6KIn.js → infoDiagram-27XIBGKW-DBpoANC9.js} +1 -1
  80. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BIM3h287.js → ishikawaDiagram-5VMMS53U-BMPC6hfp.js} +1 -1
  81. package/dist/client/assets/{journeyDiagram-EYS64GPL-mF6Lh8O-.js → journeyDiagram-3NMN7TZE-B1sApUmM.js} +2 -2
  82. package/dist/client/assets/{kanban-definition-3QL26DDD-DLN2NyoR.js → kanban-definition-UXKFOSKX-C9yP4td1.js} +4 -4
  83. package/dist/client/assets/{line-BfTWJmgf.js → line-BFl3ujec.js} +1 -1
  84. package/dist/client/assets/markdown-CByV-4CU.js +70 -0
  85. package/dist/client/assets/{mermaid.core-CLZBlpIW.js → mermaid.core-BrY09czX.js} +5 -5
  86. package/dist/client/assets/mermaid.core-DfcNfOTv.js +1 -0
  87. package/dist/client/assets/{mindmap-definition-FBJOCRG2-CRyHaHTk.js → mindmap-definition-YA3MSWOX-BUQHcYbK.js} +8 -8
  88. package/dist/client/assets/pegDiagram-XKGWAZYB-Bi2Iml7Z.js +1 -0
  89. package/dist/client/assets/{pieDiagram-E7YTZNPT-B5OZPb88.js → pieDiagram-E7YTZNPT-_gYXnMoi.js} +1 -1
  90. package/dist/client/assets/preview-render-compiler-CfxJYldJ.js +41 -0
  91. package/dist/client/assets/preview-render-compiler-Cu8_i9iS.js +1 -0
  92. package/dist/client/assets/{preview-render-worker-BmN79bVc.js → preview-render-worker-c4Yi93qW.js} +41 -35
  93. package/dist/client/assets/prod-BiJL30sl.js +1 -0
  94. package/dist/client/assets/prod-qAk7rHa4.js +177 -0
  95. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-Drrw14YH.js → quadrantDiagram-AXDQQJYC-DwexhEhd.js} +1 -1
  96. package/dist/client/assets/quick-switcher-controller-BoIK_wuG.js +1 -0
  97. package/dist/client/assets/railroadDiagram-O6MQD6OU-BVA5UbMu.js +1 -0
  98. package/dist/client/assets/{requirementDiagram-EFPCY7ZU-CRZG6mRB.js → requirementDiagram-BXWQKSXE-C4cKwiIw.js} +2 -2
  99. package/dist/client/assets/runtime-config-DcmnGcXU.js +1 -0
  100. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-DvarEJpo.js → sankeyDiagram-P5KCCOFB-B5HHkRT2.js} +1 -1
  101. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-B4oWlb-w.js → sequenceDiagram-WJ2MYXX4-BX6jqJFD.js} +6 -6
  102. package/dist/client/assets/standalone-6z5x8CWe.js +29 -0
  103. package/dist/client/assets/{stateDiagram-HBIQ2CUA-qbHIIqRZ.js → stateDiagram-D77RDMKH-CmqxyRGx.js} +1 -1
  104. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-zoLLQVyh.js +1 -0
  105. package/dist/client/assets/{swimlanes-XN3QIQJK-xB6CtUGj.js → swimlanes-42K2YHIH-Bmgb9Zld.js} +1 -1
  106. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DS-KQN37.js +8 -0
  107. package/dist/client/assets/{timeline-definition-24CTP7MA-Lj_yTNlY.js → timeline-definition-24CTP7MA-BA-lVH6P.js} +1 -1
  108. package/dist/client/assets/vault-api-client-iZLhMJKe.js +6 -0
  109. package/dist/client/assets/{vennDiagram-4TSXK5OY-BekRp5Y0.js → vennDiagram-4TSXK5OY-DNdUC_Xj.js} +1 -1
  110. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-kdnV_Hdm.js → wardleyDiagram-VM6X3IG4-C2oY-YbF.js} +1 -1
  111. package/dist/client/assets/wiki-link-resolver-DFIwErjc.js +1 -0
  112. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DufGwNSB.js → xychartDiagram-S5SC5T6Z-CoIR8CBX.js} +1 -1
  113. package/dist/client/assets/yaml-9ltHPDNO.js +154 -0
  114. package/dist/client/assets/{yjs-provider-reset-guard-DE0vINDP.js → yjs-provider-reset-guard-9ul1qF6k.js} +1 -1
  115. package/dist/client/drawio-editor.html +11 -3
  116. package/dist/client/excalidraw-editor.html +45 -2
  117. package/dist/client/export-document.html +3 -3
  118. package/dist/client/index.html +106 -52
  119. package/integrations/pi/index.ts +94 -0
  120. package/package.json +41 -29
  121. package/src/client/app/drawio-editor.html +2 -2
  122. package/src/client/app/excalidraw-editor.html +2 -2
  123. package/src/client/app/export-document.html +1 -1
  124. package/src/client/app/index.html +88 -50
  125. package/src/client/app/main-entry.js +15 -1
  126. package/src/client/application/app-shell/chat-feature.js +7 -22
  127. package/src/client/application/app-shell/export-feature.js +17 -1
  128. package/src/client/application/app-shell/git-feature.js +51 -14
  129. package/src/client/application/app-shell/presence-feature.js +8 -25
  130. package/src/client/application/app-shell/ui-feature-identity.js +13 -0
  131. package/src/client/application/app-shell/ui-feature-shell.js +199 -99
  132. package/src/client/application/app-shell/ui-feature-sidebar.js +43 -7
  133. package/src/client/application/app-shell/ui-feature-tab-activity.js +19 -6
  134. package/src/client/application/app-shell/ui-feature-toolbar.js +16 -129
  135. package/src/client/application/app-shell-elements.js +8 -0
  136. package/src/client/application/preview-render-compiler.js +1 -87
  137. package/src/client/application/preview-render-scheduler.js +8 -24
  138. package/src/client/application/preview-renderer.js +2 -2
  139. package/src/client/application/webmcp-diagram-renderer.js +47 -0
  140. package/src/client/application/workspace-coordinator.js +23 -4
  141. package/src/client/application/workspace-preview-controller.js +120 -2
  142. package/src/client/application/workspace-route-controller.js +11 -1
  143. package/src/client/assets/vendor/jetbrains-mono/JetBrainsMono-Regular.woff2 +0 -0
  144. package/src/client/assets/vendor/jetbrains-mono/OFL.txt +93 -0
  145. package/src/client/bootstrap/collabmd-app-shell.js +99 -6
  146. package/src/client/domain/document-formatter.js +193 -0
  147. package/src/client/domain/excalidraw-element-link.js +73 -0
  148. package/src/client/domain/excalidraw-scene.js +21 -0
  149. package/src/client/domain/file-search.js +73 -0
  150. package/src/client/domain/git-labels.js +5 -0
  151. package/src/client/domain/hash-routes.js +8 -0
  152. package/src/client/domain/room.js +1 -5
  153. package/src/client/domain/runtime-paths.js +5 -0
  154. package/src/client/domain/vault-paths.js +6 -4
  155. package/src/client/domain/wiki-link-completions.js +20 -20
  156. package/src/client/drawio-editor.js +8 -3
  157. package/src/client/excalidraw-editor.js +287 -16
  158. package/src/client/export/export-host.js +59 -36
  159. package/src/client/export/export-page.js +14 -4
  160. package/src/client/export/export-pipeline.js +270 -42
  161. package/src/client/infrastructure/agent-connection-api-client.js +23 -0
  162. package/src/client/infrastructure/auth-client.js +3 -13
  163. package/src/client/infrastructure/editor-session.js +15 -0
  164. package/src/client/infrastructure/editor-view-adapter.js +73 -14
  165. package/src/client/infrastructure/excalidraw-room-client.js +80 -1
  166. package/src/client/infrastructure/git-api-client.js +39 -33
  167. package/src/client/infrastructure/lobby-presence.js +2 -5
  168. package/src/client/infrastructure/runtime-config.js +11 -1
  169. package/src/client/infrastructure/tab-activity-lock.js +2 -5
  170. package/src/client/infrastructure/vault-api-client.js +33 -26
  171. package/src/client/infrastructure/webmcp-tool-registry.js +283 -0
  172. package/src/client/infrastructure/workspace-sync-client.js +6 -4
  173. package/src/client/presentation/agent-connection-controller.js +255 -0
  174. package/src/client/presentation/backlinks-panel.js +3 -0
  175. package/src/client/presentation/bases-preview-controller.js +59 -26
  176. package/src/client/presentation/comment-ui/comment-ui-card.js +4 -2
  177. package/src/client/presentation/create-menu-presenter.js +19 -16
  178. package/src/client/presentation/excalidraw-embed-controller.js +164 -4
  179. package/src/client/presentation/file-action-controller.js +15 -2
  180. package/src/client/presentation/file-explorer-controller.js +3 -0
  181. package/src/client/presentation/file-explorer-view.js +71 -12
  182. package/src/client/presentation/file-history-view-controller.js +19 -12
  183. package/src/client/presentation/file-tree-state.js +1 -11
  184. package/src/client/presentation/git-diff-view-controller.js +70 -53
  185. package/src/client/presentation/git-panel-controller.js +86 -32
  186. package/src/client/presentation/image-lightbox-controller.js +20 -16
  187. package/src/client/presentation/layout-controller.js +3 -1
  188. package/src/client/presentation/quick-switcher-controller.js +74 -232
  189. package/src/client/presentation/quick-switcher-text-search.js +10 -14
  190. package/src/client/styles/components/navigation.css +1 -2
  191. package/src/client/styles/components/scrollbars.css +10 -0
  192. package/src/client/styles/export-document.css +44 -29
  193. package/src/client/styles/features/agent-connection.css +202 -0
  194. package/src/client/styles/features/collaboration-chat.css +8 -1
  195. package/src/client/styles/features/collaboration-dialogs.css +16 -1
  196. package/src/client/styles/features/collaboration-presence.css +30 -5
  197. package/src/client/styles/features/diff-toolbar.css +1 -1
  198. package/src/client/styles/features/media-lightbox.css +12 -3
  199. package/src/client/styles/features/preview-markdown.css +54 -0
  200. package/src/client/styles/features/quick-switcher.css +20 -11
  201. package/src/client/styles/foundation/themes.css +2 -0
  202. package/src/client/styles/foundation/tokens.css +8 -0
  203. package/src/client/styles/layout/editor-page.css +25 -11
  204. package/src/client/styles/layout/responsive.css +2 -20
  205. package/src/client/styles/layout/shell.css +77 -24
  206. package/src/client/styles/layout/sidebar.css +7 -4
  207. package/src/client/styles/layout/view-modes.css +2 -0
  208. package/src/client/styles/overrides/codemirror.css +31 -19
  209. package/src/client/styles/primitives/controls.css +21 -54
  210. package/src/client/styles/style.css +1 -0
  211. package/src/client/styles/surfaces/excalidraw-editor.css +42 -0
  212. package/src/domain/agent-tool-definitions.js +796 -0
  213. package/src/domain/collabmd-content-capabilities.js +149 -0
  214. package/src/domain/collaboration-protocol.js +2 -0
  215. package/src/domain/comment-threads.js +3 -5
  216. package/src/domain/diagram-source.js +50 -0
  217. package/src/domain/editable-content-revision.js +10 -0
  218. package/src/domain/editable-text.js +3 -0
  219. package/src/domain/exact-text-edits.js +69 -0
  220. package/src/domain/excalidraw-agent-scene.js +522 -0
  221. package/src/domain/excalidraw-agent-verification.js +460 -0
  222. package/src/domain/excalidraw-room-codec.js +1 -5
  223. package/src/domain/file-kind.js +12 -1
  224. package/src/domain/video-embed.js +76 -0
  225. package/src/server/application/agent-connection-service.js +178 -0
  226. package/src/server/application/agent-content-service.js +773 -0
  227. package/src/server/application/workspace-reconciliation.js +5 -7
  228. package/src/server/config/env.js +51 -1
  229. package/src/server/create-app-server.js +36 -0
  230. package/src/server/domain/bases/base-query-service.js +1 -5
  231. package/src/server/domain/collaboration/collaboration-room.js +121 -25
  232. package/src/server/domain/collaboration/protocol.js +4 -0
  233. package/src/server/domain/hosted-workspace.js +21 -0
  234. package/src/server/domain/markdown-reference-extractor.js +15 -1
  235. package/src/server/domain/ripgrep-search-service.js +110 -37
  236. package/src/server/infrastructure/git/git-service.js +19 -1
  237. package/src/server/infrastructure/git/history-service.js +1 -1
  238. package/src/server/infrastructure/git/local-exclude.js +25 -0
  239. package/src/server/infrastructure/git/parsers.js +19 -17
  240. package/src/server/infrastructure/git/path-utils.js +0 -16
  241. package/src/server/infrastructure/git/status-service.js +1 -1
  242. package/src/server/infrastructure/git/untracked-files.js +12 -21
  243. package/src/server/infrastructure/http/create-agent-api-handler.js +171 -0
  244. package/src/server/infrastructure/http/create-git-api-command-handler.js +32 -0
  245. package/src/server/infrastructure/http/create-request-handler.js +28 -0
  246. package/src/server/infrastructure/http/create-static-handler.js +6 -0
  247. package/src/server/infrastructure/mcp/create-agent-mcp-handler.js +199 -0
  248. package/src/server/infrastructure/persistence/agent-connection-store.js +120 -0
  249. package/src/server/infrastructure/persistence/path-utils.js +10 -4
  250. package/src/server/infrastructure/persistence/pull-backup-store.js +2 -27
  251. package/src/server/infrastructure/persistence/vault-file-store.js +11 -2
  252. package/src/server/shared/agent-tool-image.js +22 -0
  253. package/src/server/shared/agent-tool-rate-limiter.js +20 -0
  254. package/src/server/startup/git-remote-bootstrap.js +5 -33
  255. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BPH4FJkv.js +0 -1
  256. package/dist/client/assets/abnfDiagram-VCTEODGH-BNDLzJ7L.js +0 -1
  257. package/dist/client/assets/browser-utils--H_DkyEF.js +0 -1
  258. package/dist/client/assets/channel-CaoKA_We.js +0 -1
  259. package/dist/client/assets/chunk-DSNCTWBM-8xkug7fQ.js +0 -2
  260. package/dist/client/assets/chunk-DU6HZSFF-COXDzJK1.js +0 -127
  261. package/dist/client/assets/chunk-R7TYR2AO-CTd0Yj98.js +0 -10
  262. package/dist/client/assets/classDiagram-DTDB5LWJ-7fEmn0zV.js +0 -1
  263. package/dist/client/assets/classDiagram-v2-JRS7N3AN-7fEmn0zV.js +0 -1
  264. package/dist/client/assets/comment-threads-9J6Em-_y.js +0 -4
  265. package/dist/client/assets/comment-ui-shared-DWkk9Vh3.js +0 -7
  266. package/dist/client/assets/diagram-VSXAHHWV-CQRVEZR7.js +0 -3
  267. package/dist/client/assets/dist-73RPdcyU.js +0 -1
  268. package/dist/client/assets/dist-CH-sQu3r.js +0 -1
  269. package/dist/client/assets/drawio-editor-BjrxTe3l.js +0 -9
  270. package/dist/client/assets/drawioEditor-DUVZjSSr.js +0 -2
  271. package/dist/client/assets/ebnfDiagram-PWID7BFC-OXa8VEp1.js +0 -1
  272. package/dist/client/assets/editor-session-DfZuRgB_.js +0 -54
  273. package/dist/client/assets/embedded-editor-base-DvMynhKu.css +0 -1
  274. package/dist/client/assets/excalidraw-editor-D7pnUCLH.js +0 -9
  275. package/dist/client/assets/excalidraw-mermaid-stub-BNckbX2n.js +0 -1
  276. package/dist/client/assets/excalidraw-mermaid-stub-DE5FTiZB.js +0 -1
  277. package/dist/client/assets/excalidrawEditor-B0jOK3lv.js +0 -2
  278. package/dist/client/assets/export-page-Bs3xE1fg.js +0 -57
  279. package/dist/client/assets/exportDocument-Dg9MjkIk.js +0 -2
  280. package/dist/client/assets/exportDocument-PnYU3v1s.css +0 -1
  281. package/dist/client/assets/file-kind-BbqgGzpc.js +0 -1
  282. package/dist/client/assets/flowDiagram-A5DVABFB-CiW1eN8C.js +0 -1
  283. package/dist/client/assets/image-ZVKINSPA-0zXSnE7M.js +0 -1
  284. package/dist/client/assets/index-BIpgxyGZ.css +0 -1
  285. package/dist/client/assets/index-Z5sI0Bj-.js +0 -2
  286. package/dist/client/assets/main-Dwnj9Gaq.js +0 -903
  287. package/dist/client/assets/pegDiagram-XKGWAZYB-B31fKPR2.js +0 -1
  288. package/dist/client/assets/preview-render-compiler-BApvlLLo.js +0 -35
  289. package/dist/client/assets/preview-render-compiler-BQ_3h9vD.js +0 -1
  290. package/dist/client/assets/preview-render-profile-CE-5rVTC.js +0 -1
  291. package/dist/client/assets/prod-BiYPMR1i.js +0 -177
  292. package/dist/client/assets/prod-VxdGZ5Ly.js +0 -1
  293. package/dist/client/assets/quick-switcher-controller-ButWPmCI.js +0 -12
  294. package/dist/client/assets/railroadDiagram-O6MQD6OU-BPifP0MB.js +0 -1
  295. package/dist/client/assets/runtime-config-BLrEKVO1.js +0 -1
  296. package/dist/client/assets/stateDiagram-v2-4QOOHH4V-B--gjrit.js +0 -1
  297. package/dist/client/assets/swimlanesDiagram-VK2B7HYN-DO8XNXEg.js +0 -8
  298. package/dist/client/assets/vault-api-client-_LpV1aIn.js +0 -6
  299. package/dist/client/assets/vault-utils-wdQ0RNR9.js +0 -1
  300. package/src/client/app/drawio-editor-entry.js +0 -1
  301. package/src/client/app/excalidraw-editor-entry.js +0 -1
  302. package/src/client/excalidraw-mermaid-stub.js +0 -7
  303. package/src/client/main.js +0 -16
  304. /package/dist/client/assets/{drawio-editor-UQQ8XHou.css → drawioEditor-UQQ8XHou.css} +0 -0
  305. /package/dist/client/assets/{sizeCapture-X5ZJPWSS-B0uUizjq.js → sizeCapture-INFHLROL-B0uUizjq.js} +0 -0
@@ -18,7 +18,7 @@
18
18
  </head>
19
19
  <body>
20
20
 
21
- <a href="#editorContainer" class="sr-only skip-link">Skip to editor</a>
21
+ <a href="#editorContainer" class="sr-only skip-link" id="skipToEditor">Skip to editor</a>
22
22
 
23
23
  <div class="app-shell">
24
24
  <aside id="sidebar" class="sidebar">
@@ -72,8 +72,8 @@
72
72
  </button>
73
73
  </div>
74
74
  </div>
75
- <div class="ui-nav-tabs" id="sidebarTabs">
76
- <button class="ui-nav-tab active" id="filesSidebarTab" type="button">
75
+ <div class="ui-nav-tabs" id="sidebarTabs" role="tablist" aria-label="Sidebar views">
76
+ <button class="ui-nav-tab active" id="filesSidebarTab" type="button" role="tab" aria-selected="true" aria-controls="fileTree" tabindex="0">
77
77
  <span class="ui-nav-tab-icon" aria-hidden="true">
78
78
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
79
79
  <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
@@ -81,7 +81,7 @@
81
81
  </span>
82
82
  <span class="ui-nav-tab-label">Files</span>
83
83
  </button>
84
- <button class="ui-nav-tab" id="commentsSidebarTab" type="button">
84
+ <button class="ui-nav-tab" id="commentsSidebarTab" type="button" role="tab" aria-selected="false" aria-controls="commentOverviewPanel" tabindex="-1">
85
85
  <span class="ui-nav-tab-icon" aria-hidden="true">
86
86
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
87
87
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
@@ -89,7 +89,7 @@
89
89
  </span>
90
90
  <span class="ui-nav-tab-label">Comments</span>
91
91
  </button>
92
- <button class="ui-nav-tab hidden" id="gitSidebarTab" type="button">
92
+ <button class="ui-nav-tab hidden" id="gitSidebarTab" type="button" role="tab" aria-selected="false" aria-controls="gitPanel" tabindex="-1">
93
93
  <span class="ui-nav-tab-icon" aria-hidden="true">
94
94
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
95
95
  <circle cx="18" cy="18" r="3"></circle>
@@ -125,9 +125,9 @@
125
125
  aria-label="Search changed files"
126
126
  >
127
127
  </div>
128
- <nav id="fileTree" class="file-tree" aria-label="File explorer"></nav>
129
- <section id="commentOverviewPanel" class="comment-overview-panel hidden" aria-label="Open comments"></section>
130
- <div id="gitPanel" class="git-panel hidden" aria-label="Git changes"></div>
128
+ <nav id="fileTree" class="file-tree" role="tabpanel" aria-labelledby="filesSidebarTab"></nav>
129
+ <section id="commentOverviewPanel" class="comment-overview-panel hidden" role="tabpanel" aria-labelledby="commentsSidebarTab"></section>
130
+ <div id="gitPanel" class="git-panel hidden" role="tabpanel" aria-labelledby="gitSidebarTab"></div>
131
131
  <div
132
132
  class="sidebar-resizer"
133
133
  id="sidebarResizer"
@@ -210,6 +210,16 @@
210
210
  </div>
211
211
 
212
212
  <div class="toolbar-right">
213
+ <button class="ui-button ui-button--ghost ui-button--compact hidden" id="reviewFileChangesBtn" type="button" aria-label="Review changes to this file" title="Review changes to this file">
214
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
215
+ <line x1="6" y1="3" x2="6" y2="15"></line>
216
+ <circle cx="18" cy="6" r="3"></circle>
217
+ <circle cx="6" cy="18" r="3"></circle>
218
+ <path d="M18 9a9 9 0 0 1-9 9"></path>
219
+ </svg>
220
+ <span class="ui-toolbar-button-label">Review changes</span>
221
+ </button>
222
+
213
223
  <button class="ui-button ui-button--ghost ui-button--toolbar mobile-view-toggle" id="mobileViewToggle" aria-label="Toggle editor/preview" title="Toggle view">
214
224
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
215
225
  <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
@@ -221,19 +231,19 @@
221
231
  <div class="toolbar-status-cluster" aria-label="Workspace status">
222
232
  <span class="ui-pill-badge ui-pill-badge--accent hidden toolbar-badge" id="toolbarDiffBadge">Diff</span>
223
233
  <span class="ui-pill-badge ui-pill-badge--muted hidden toolbar-badge" id="gitOperationStatus" aria-live="polite" aria-atomic="true"></span>
234
+ </div>
235
+
236
+ <div class="toolbar-presence-cluster">
237
+ <div class="user-avatars" id="userAvatars"></div>
224
238
  <button
225
239
  type="button"
226
- class="ui-pill-badge ui-pill-badge--muted toolbar-badge toolbar-badge-button"
240
+ class="ui-pill-badge ui-pill-badge--muted toolbar-badge toolbar-badge-button toolbar-presence-count"
227
241
  id="userCount"
228
- aria-controls="presencePanel"
229
- aria-expanded="false"
230
- data-presence-panel-trigger="true"
242
+ popovertarget="presencePanel"
231
243
  ></button>
232
244
  </div>
233
245
 
234
- <div class="user-avatars toolbar-presence-cluster" id="userAvatars"></div>
235
-
236
- <section class="collaboration-popover presence-panel hidden" id="presencePanel" aria-label="Online users" aria-hidden="true">
246
+ <section class="collaboration-popover presence-panel" id="presencePanel" aria-label="Online users" popover="auto">
237
247
  <div class="presence-panel-header">
238
248
  <div>
239
249
  <h2 class="presence-panel-title">Online now</h2>
@@ -244,7 +254,7 @@
244
254
  </section>
245
255
 
246
256
  <div class="chat-container" id="chatContainer">
247
- <button type="button" class="ui-button ui-button--ghost ui-button--toolbar chat-toggle-btn" id="chatToggleBtn" aria-label="Open team chat" aria-controls="chatPanel" aria-expanded="false" title="Team chat">
257
+ <button type="button" class="ui-button ui-button--ghost ui-button--toolbar chat-toggle-btn" id="chatToggleBtn" aria-label="Open team chat" popovertarget="chatPanel" title="Team chat">
248
258
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
249
259
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
250
260
  </svg>
@@ -253,7 +263,7 @@
253
263
  </button>
254
264
  <div class="toast-container chat-toast-container" id="chatToastContainer" aria-live="polite" aria-atomic="true"></div>
255
265
 
256
- <section class="collaboration-popover chat-panel hidden" id="chatPanel" role="dialog" aria-labelledby="chatPanelTitle">
266
+ <section class="collaboration-popover chat-panel" id="chatPanel" role="dialog" aria-labelledby="chatPanelTitle" popover="auto">
257
267
  <div class="chat-panel-header">
258
268
  <div class="chat-panel-heading">
259
269
  <h2 class="chat-panel-title" id="chatPanelTitle">Team chat</h2>
@@ -280,7 +290,7 @@
280
290
  <path class="chat-notification-mute-slash" d="m4 4 16 16"></path>
281
291
  </svg>
282
292
  </button>
283
- <button type="button" class="ui-icon-button chat-close-btn" id="chatCloseBtn" aria-label="Close team chat" title="Close team chat">
293
+ <button type="button" class="ui-icon-button chat-close-btn" id="chatCloseBtn" aria-label="Close team chat" popovertarget="chatPanel" popovertargetaction="hide" title="Close team chat">
284
294
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
285
295
  <line x1="18" y1="6" x2="6" y2="18"></line>
286
296
  <line x1="6" y1="6" x2="18" y2="18"></line>
@@ -315,7 +325,7 @@
315
325
  class="ui-button ui-button--ghost ui-button--toolbar toolbar-overflow-toggle"
316
326
  id="toolbarOverflowToggle"
317
327
  aria-label="Open more actions"
318
- aria-expanded="false"
328
+ popovertarget="toolbarOverflowMenu"
319
329
  title="More actions"
320
330
  >
321
331
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
@@ -325,7 +335,7 @@
325
335
  </svg>
326
336
  </button>
327
337
 
328
- <div class="toolbar-overflow-menu" id="toolbarOverflowMenu">
338
+ <div class="toolbar-overflow-menu" id="toolbarOverflowMenu" popover="auto">
329
339
  <button class="ui-button ui-button--ghost ui-button--toolbar hidden" id="fileHistoryBtn" aria-label="Open file history" title="View file history">
330
340
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
331
341
  <path d="M3 12a9 9 0 1 0 3-6.7"></path>
@@ -351,6 +361,14 @@
351
361
  <span class="ui-toolbar-button-label">Share</span>
352
362
  </button>
353
363
 
364
+ <button class="ui-button ui-button--ghost ui-button--toolbar hidden" id="connectAgentBtn" aria-label="Connect AI Agent" title="Connect AI Agent">
365
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
366
+ <rect x="5" y="7" width="14" height="11" rx="3"></rect>
367
+ <path d="M12 3v4M8 12h.01M16 12h.01M9 16h6"></path>
368
+ </svg>
369
+ <span class="ui-toolbar-button-label">Connect AI Agent</span>
370
+ </button>
371
+
354
372
  <button class="ui-button ui-button--ghost ui-button--toolbar toolbar-search-files-btn" id="searchFilesBtn" aria-label="Search files" title="Search files">
355
373
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
356
374
  <circle cx="11" cy="11" r="7"></circle>
@@ -448,7 +466,7 @@
448
466
  <circle cx="11" cy="11" r="8"></circle>
449
467
  <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
450
468
  </svg>
451
- Search Everything
469
+ Search everything
452
470
  <kbd class="empty-state-kbd">⌘K</kbd>
453
471
  </button>
454
472
  </div>
@@ -477,6 +495,14 @@
477
495
  </svg>
478
496
  <span class="ui-action-label">Comment</span>
479
497
  </button>
498
+ <button class="ui-button ui-button--ghost ui-button--compact ui-button--toggle" id="editorFormatBtn" aria-label="Format document" title="Format document">
499
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
500
+ <path d="M4 7h10"></path>
501
+ <path d="M4 12h16"></path>
502
+ <path d="M4 17h10"></path>
503
+ </svg>
504
+ <span class="ui-action-label">Format</span>
505
+ </button>
480
506
  <button class="ui-button ui-button--ghost ui-button--compact ui-button--toggle" id="toggleWrapBtn" aria-label="Disable line wrap" title="Disable line wrap">
481
507
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
482
508
  <path d="M3 6h14a4 4 0 1 1 0 8H9"></path>
@@ -489,7 +515,7 @@
489
515
  </div>
490
516
  <div id="markdownToolbar" class="markdown-toolbar hidden" role="toolbar" aria-label="Markdown formatting"></div>
491
517
  <div id="editorContainer" class="editor-container">
492
- <div class="editor-loading" id="editorLoading">
518
+ <div class="editor-loading" id="editorLoading" role="status" aria-live="polite" aria-label="Loading file…">
493
519
  <div class="skeleton-line skeleton-line--title skeleton-line--break"></div>
494
520
  <div class="skeleton-line skeleton-line--full"></div>
495
521
  <div class="skeleton-line skeleton-line--ninety"></div>
@@ -507,6 +533,7 @@
507
533
  <div class="pane-header">
508
534
  <span class="pane-label">Preview</span>
509
535
  <div class="pane-header-actions">
536
+ <button class="ui-button ui-button--ghost ui-button--compact ui-button--toggle hidden" id="htmlPreviewMaximize" aria-label="Maximize HTML preview" title="Maximize HTML preview"></button>
510
537
  <div id="backlinksHeaderPanel" class="backlinks-panel backlinks-panel-header hidden" data-backlinks-variant="header">
511
538
  <button type="button" class="backlinks-header" aria-expanded="false">
512
539
  <svg class="backlinks-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
@@ -609,20 +636,14 @@
609
636
  </div>
610
637
  <div class="diff-toolbar-actions">
611
638
  <button class="ui-button ui-button--secondary ui-button--action ui-button--wide ui-button--surface hidden diff-back-btn" id="diffBackToHistoryBtn" type="button">
612
- Back to History
639
+ Back to history
613
640
  </button>
614
641
  <div class="diff-toolbar-actions-group diff-toolbar-actions-group-git" id="diffGitActionsGroup" role="group" aria-label="Git file actions">
615
642
  <button class="ui-button ui-button--secondary ui-button--action ui-button--wide ui-button--surface" id="diffPrimaryActionBtn" type="button" disabled>
616
- Stage
643
+ Include in commit
617
644
  </button>
618
645
  <button class="ui-button ui-button--primary ui-button--action ui-button--wide" id="diffCommitBtn" type="button" disabled>
619
- Commit Staged
620
- </button>
621
- </div>
622
- <span class="diff-toolbar-actions-divider" id="diffToolbarDivider" aria-hidden="true"></span>
623
- <div class="diff-toolbar-actions-group" id="diffEditorActionsGroup" role="group" aria-label="Navigation actions">
624
- <button class="ui-button ui-button--secondary ui-button--action ui-button--wide ui-button--surface diff-open-editor-btn" id="diffOpenEditorBtn" type="button" disabled>
625
- Open in Editor
646
+ Commit included files
626
647
  </button>
627
648
  </div>
628
649
  </div>
@@ -633,12 +654,18 @@
633
654
  <span class="ui-stat-token ui-stat-token--del diff-stats-del">-0</span>
634
655
  </div>
635
656
  <div class="ui-segmented-control hidden diff-layout-toggle" id="diffLayoutToggle" role="group" aria-label="Commit diff layout">
636
- <button class="ui-segmented-btn view-btn diff-layout-btn" data-diff-layout="stacked" type="button">Stacked</button>
637
- <button class="ui-segmented-btn active view-btn diff-layout-btn" data-diff-layout="focused" type="button">Focused</button>
657
+ <button class="ui-segmented-btn diff-layout-btn" data-diff-layout="stacked" type="button" aria-pressed="false">Stacked</button>
658
+ <button class="ui-segmented-btn active diff-layout-btn" data-diff-layout="focused" type="button" aria-pressed="true">Focused</button>
638
659
  </div>
639
660
  <div class="ui-segmented-control diff-mode-toggle" role="group" aria-label="Diff view mode">
640
- <button class="ui-segmented-btn active view-btn diff-mode-btn" data-diff-mode="unified" type="button">Unified</button>
641
- <button class="ui-segmented-btn view-btn diff-mode-btn" data-diff-mode="split" type="button">Split</button>
661
+ <button class="ui-segmented-btn active diff-mode-btn" data-diff-mode="unified" type="button" aria-pressed="true">Unified</button>
662
+ <button class="ui-segmented-btn diff-mode-btn" data-diff-mode="split" type="button" aria-pressed="false">Split</button>
663
+ </div>
664
+ <span class="diff-toolbar-actions-divider" id="diffToolbarDivider" aria-hidden="true"></span>
665
+ <div class="diff-toolbar-actions-group" id="diffEditorActionsGroup" role="group" aria-label="Navigation actions">
666
+ <button class="ui-button ui-button--secondary ui-button--action ui-button--wide ui-button--surface diff-open-editor-btn" id="diffOpenEditorBtn" type="button" disabled>
667
+ Open in editor
668
+ </button>
642
669
  </div>
643
670
  </div>
644
671
  </div>
@@ -649,7 +676,7 @@
649
676
  </main>
650
677
  </div>
651
678
 
652
- <dialog class="app-dialog" id="displayNameDialog">
679
+ <dialog class="app-dialog" id="displayNameDialog" aria-labelledby="displayNameTitle">
653
680
  <form class="app-dialog-form" id="displayNameForm" method="dialog">
654
681
  <div class="app-dialog-header">
655
682
  <h2 class="app-dialog-title" id="displayNameTitle">Update display name</h2>
@@ -666,7 +693,17 @@
666
693
  </form>
667
694
  </dialog>
668
695
 
669
- <dialog class="app-dialog" id="fileActionDialog">
696
+ <dialog class="app-dialog agent-connection-dialog" id="agentConnectionDialog" aria-labelledby="agentConnectionTitle">
697
+ <div class="app-dialog-form">
698
+ <div class="app-dialog-header">
699
+ <h2 class="app-dialog-title" id="agentConnectionTitle">Connect an AI agent</h2>
700
+ <p class="app-dialog-copy">Follow the steps below to give an agent secure access to this workspace.</p>
701
+ </div>
702
+ <div id="agentConnectionContent"></div>
703
+ </div>
704
+ </dialog>
705
+
706
+ <dialog class="app-dialog" id="fileActionDialog" aria-labelledby="fileActionTitle">
670
707
  <form class="app-dialog-form" id="fileActionForm" method="dialog">
671
708
  <div class="app-dialog-header">
672
709
  <h2 class="app-dialog-title" id="fileActionTitle">Create file</h2>
@@ -685,24 +722,25 @@
685
722
  </form>
686
723
  </dialog>
687
724
 
688
- <dialog class="app-dialog" id="gitCommitDialog">
725
+ <dialog class="app-dialog" id="gitCommitDialog" aria-labelledby="gitCommitTitle">
689
726
  <form class="app-dialog-form" id="gitCommitForm" method="dialog">
690
727
  <div class="app-dialog-header">
691
- <h2 class="app-dialog-title" id="gitCommitTitle">Commit staged changes</h2>
692
- <p class="app-dialog-copy" id="gitCommitCopy">All staged changes will be included.</p>
728
+ <h2 class="app-dialog-title" id="gitCommitTitle">Commit included files</h2>
729
+ <p class="app-dialog-copy" id="gitCommitCopy">All included changes will be committed.</p>
693
730
  </div>
694
731
  <label class="app-dialog-field" for="gitCommitInput">
695
- <span class="app-dialog-label">Commit message</span>
696
- <input type="text" class="ui-input" id="gitCommitInput" name="gitCommitMessage" autocomplete="off" spellcheck="true" required>
732
+ <span class="app-dialog-label">What changed?</span>
733
+ <input type="text" class="ui-input" id="gitCommitInput" name="gitCommitMessage" autocomplete="off" spellcheck="true" aria-describedby="gitCommitHint" required>
734
+ <span class="app-dialog-hint" id="gitCommitHint">This becomes the Git commit message.</span>
697
735
  </label>
698
736
  <div class="app-dialog-actions">
699
737
  <button type="button" class="ui-button ui-button--secondary" id="gitCommitCancel">Cancel</button>
700
- <button type="submit" class="ui-button ui-button--primary" id="gitCommitSubmit">Commit staged changes</button>
738
+ <button type="submit" class="ui-button ui-button--primary" id="gitCommitSubmit">Commit included files</button>
701
739
  </div>
702
740
  </form>
703
741
  </dialog>
704
742
 
705
- <dialog class="app-dialog" id="gitResetDialog">
743
+ <dialog class="app-dialog" id="gitResetDialog" aria-labelledby="gitResetTitle">
706
744
  <form class="app-dialog-form" method="dialog">
707
745
  <div class="app-dialog-header">
708
746
  <h2 class="app-dialog-title" id="gitResetTitle">Reset file</h2>
@@ -717,12 +755,12 @@
717
755
  </div>
718
756
  <div class="app-dialog-actions">
719
757
  <button class="ui-button ui-button--secondary" id="gitResetCancel" type="button">Cancel</button>
720
- <button class="ui-button ui-button--danger" id="gitResetSubmit" type="button">Reset File</button>
758
+ <button class="ui-button ui-button--danger" id="gitResetSubmit" type="button">Reset file</button>
721
759
  </div>
722
760
  </form>
723
761
  </dialog>
724
762
 
725
- <div class="tab-lock-overlay hidden" id="tabLockOverlay" role="dialog" aria-modal="true" aria-labelledby="tabLockTitle">
763
+ <dialog class="tab-lock-overlay" id="tabLockOverlay" aria-labelledby="tabLockTitle">
726
764
  <div class="tab-lock-card">
727
765
  <span class="tab-lock-kicker">Single active tab</span>
728
766
  <h2 class="tab-lock-title" id="tabLockTitle">This vault is active in another tab</h2>
@@ -731,11 +769,11 @@
731
769
  <button type="button" class="ui-button ui-button--primary ui-button--lg" id="tabLockTakeoverBtn">Take over here</button>
732
770
  </div>
733
771
  </div>
734
- </div>
772
+ </dialog>
735
773
 
736
774
  <div class="toast-container" id="toastContainer"></div>
737
775
 
738
- <div class="qs-overlay" id="quickSwitcher" role="dialog" aria-modal="true" aria-labelledby="quickSwitcherTitle" aria-hidden="true">
776
+ <dialog class="qs-overlay" id="quickSwitcher" aria-labelledby="quickSwitcherTitle" closedby="any">
739
777
  <div class="qs-modal">
740
778
  <h2 class="sr-only" id="quickSwitcherTitle">Search files and text</h2>
741
779
  <div class="qs-mode-tabs" role="tablist" aria-label="Search mode">
@@ -747,7 +785,7 @@
747
785
  <circle cx="11" cy="11" r="8"></circle>
748
786
  <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
749
787
  </svg>
750
- <input type="text" class="qs-input" id="quickSwitcherInput" role="combobox" placeholder="Search files..." aria-label="Search files" aria-controls="quickSwitcherResults" aria-describedby="quickSwitcherHint quickSwitcherScope" aria-autocomplete="list" aria-expanded="false" autocomplete="off" spellcheck="false">
788
+ <input type="text" class="qs-input" id="quickSwitcherInput" role="combobox" placeholder="Search files..." aria-label="Search files" aria-controls="quickSwitcherResults" aria-describedby="quickSwitcherHint quickSwitcherScope" aria-autocomplete="list" aria-expanded="false" autocomplete="off" spellcheck="false" autofocus>
751
789
  <kbd class="qs-kbd">esc</kbd>
752
790
  </div>
753
791
  <div class="qs-scope hidden" id="quickSwitcherScope" role="note" aria-hidden="true">Exact, case-insensitive text in Markdown, Base, Mermaid, PlantUML, Draw.io, and Excalidraw files. Images are excluded.</div>
@@ -759,7 +797,7 @@
759
797
  <span><kbd>Tab</kbd> Switch mode</span>
760
798
  </div>
761
799
  </div>
762
- </div>
800
+ </dialog>
763
801
  <script vite-ignore src="./app-config.js"></script>
764
802
  <script type="module" src="./main-entry.js"></script>
765
803
  </body>
@@ -1,5 +1,7 @@
1
1
  import darkHighlightThemeUrl from '../assets/vendor/highlight/github-dark.min.css?url';
2
2
  import lightHighlightThemeUrl from '../assets/vendor/highlight/github.min.css?url';
3
+ import { CollabMdAppShell } from '../bootstrap/collabmd-app-shell.js';
4
+ import { ensureClientAuthenticated } from '../infrastructure/auth-client.js';
3
5
  import '../styles/base.css';
4
6
  import '../styles/style.css';
5
7
 
@@ -18,4 +20,16 @@ function ensureHighlightThemeStylesheet() {
18
20
  }
19
21
 
20
22
  ensureHighlightThemeStylesheet();
21
- await import('../main.js');
23
+ async function start() {
24
+ await ensureClientAuthenticated();
25
+ const app = new CollabMdAppShell();
26
+ app.initialize();
27
+ }
28
+
29
+ if (document.readyState === 'loading') {
30
+ document.addEventListener('DOMContentLoaded', () => {
31
+ void start();
32
+ }, { once: true });
33
+ } else {
34
+ void start();
35
+ }
@@ -72,34 +72,23 @@ export const chatFeature = {
72
72
  this.renderChat();
73
73
  },
74
74
 
75
- toggleChatPanel() {
76
- if (this.chatIsOpen) {
77
- this.closeChatPanel({ restoreFocus: true });
78
- return;
79
- }
80
-
81
- this.openChatPanel();
82
- },
83
75
 
84
76
  openChatPanel() {
85
77
  this.chatIsOpen = true;
86
78
  this.chatUnreadCount = 0;
79
+ if (!this.elements.chatPanel?.matches(':popover-open')) {
80
+ this.elements.chatPanel?.showPopover();
81
+ }
87
82
  this.renderChat({ stickToBottom: true });
88
- requestAnimationFrame(() => {
89
- this.elements.chatInput?.focus();
90
- });
83
+ requestAnimationFrame(() => this.elements.chatInput?.focus());
91
84
  },
92
85
 
93
- closeChatPanel({ restoreFocus = false } = {}) {
94
- if (!this.chatIsOpen) {
95
- return;
86
+ closeChatPanel() {
87
+ if (this.elements.chatPanel?.matches(':popover-open')) {
88
+ this.elements.chatPanel.hidePopover();
96
89
  }
97
-
98
90
  this.chatIsOpen = false;
99
91
  this.renderChat({ messagesChanged: false });
100
- if (restoreFocus) {
101
- requestAnimationFrame(() => this.elements.chatToggleButton?.focus());
102
- }
103
92
  },
104
93
 
105
94
  handleChatSubmit() {
@@ -129,8 +118,6 @@ export const chatFeature = {
129
118
  },
130
119
 
131
120
  renderChat({ messagesChanged = true, stickToBottom = false } = {}) {
132
- this.elements.chatContainer?.classList.toggle('is-open', this.chatIsOpen);
133
- this.elements.chatPanel?.classList.toggle('hidden', !this.chatIsOpen);
134
121
 
135
122
  this.syncChatToggleButton();
136
123
  this.syncChatNotificationButton();
@@ -363,8 +350,6 @@ export const chatFeature = {
363
350
 
364
351
  button.classList.toggle('is-active', this.chatIsOpen);
365
352
  button.classList.toggle('is-unread', shouldEmphasizeUnread);
366
- button.setAttribute('aria-controls', 'chatPanel');
367
- button.setAttribute('aria-expanded', String(this.chatIsOpen));
368
353
  button.setAttribute(
369
354
  'aria-label',
370
355
  hasUnread ? `Open team chat, ${this.chatUnreadCount} unread` : 'Open team chat',
@@ -1,5 +1,5 @@
1
1
  import { isMarkdownFilePath } from '../../../domain/file-kind.js';
2
- import { exportDocument, initializeExportBridge } from '../../export/export-host.js';
2
+ import { exportDirectory, exportDocument, initializeExportBridge } from '../../export/export-host.js';
3
3
 
4
4
  export const exportFeature = {
5
5
  initializeExportBridge() {
@@ -15,6 +15,22 @@ export const exportFeature = {
15
15
  this._exportBridgeInitialized = true;
16
16
  },
17
17
 
18
+ async handleDirectoryExportRequest(directoryPath, format) {
19
+ try {
20
+ await exportDirectory({
21
+ currentFilePath: this.currentFilePath,
22
+ currentMarkdownText: this.session?.getText?.() ?? '',
23
+ directoryPath,
24
+ fileList: this.fileExplorer?.flatDocumentFiles ?? [],
25
+ format,
26
+ });
27
+ return true;
28
+ } catch (error) {
29
+ this.toastController?.show(error instanceof Error ? error.message : 'Failed to start folder export');
30
+ return false;
31
+ }
32
+ },
33
+
18
34
  async handleExportRequest(format) {
19
35
  const filePath = String(this.currentFilePath ?? '').trim();
20
36
  if (!isMarkdownFilePath(filePath)) {
@@ -1,3 +1,4 @@
1
+ import { commitButtonLabel } from '../../domain/git-labels.js';
1
2
  import { createWorkspaceChange } from '../../../domain/workspace-change.js';
2
3
 
3
4
  export const gitFeature = {
@@ -89,6 +90,7 @@ export const gitFeature = {
89
90
  this.elements.gitSidebarTab?.classList.toggle('has-changes', hasChanges);
90
91
 
91
92
  this.gitDiffView.setRepoStatus(this.gitRepoAvailable ? status : null);
93
+ this.syncReviewFileChangesButton();
92
94
 
93
95
  if (!this.gitRepoAvailable && this.activeSidebarTab === 'git') {
94
96
  this.syncFileHistoryButton({ mode: this.navigation.getHashRoute().type === 'git-file-preview' ? 'history-preview' : 'editor' });
@@ -130,7 +132,7 @@ export const gitFeature = {
130
132
 
131
133
  button.classList.remove('hidden');
132
134
  if (mode === 'history-preview') {
133
- label.textContent = 'Back to History';
135
+ label.textContent = 'Back to history';
134
136
  button.setAttribute('aria-label', 'Back to file history');
135
137
  button.title = 'Back to file history';
136
138
  return;
@@ -146,6 +148,21 @@ export const gitFeature = {
146
148
  button.title = 'View file history';
147
149
  },
148
150
 
151
+ syncReviewFileChangesButton({
152
+ filePath = this.currentFilePath,
153
+ mode = 'editor',
154
+ } = {}) {
155
+ const button = this.elements.reviewFileChangesButton;
156
+ if (!button) {
157
+ return;
158
+ }
159
+
160
+ button.classList.toggle(
161
+ 'hidden',
162
+ !this.gitRepoAvailable || mode !== 'editor' || !filePath,
163
+ );
164
+ },
165
+
149
166
  syncMainChrome({ badgeLabel = '', mode, title = null } = {}) {
150
167
  const isSpecialMode = mode === 'diff' || mode === 'history' || mode === 'history-preview';
151
168
  this.elements.toolbarViewToggle?.classList.toggle('hidden', isSpecialMode);
@@ -161,6 +178,7 @@ export const gitFeature = {
161
178
  }
162
179
 
163
180
  this.syncFileHistoryButton({ filePath: this.currentFilePath, mode });
181
+ this.syncReviewFileChangesButton({ filePath: this.currentFilePath, mode });
164
182
  },
165
183
 
166
184
  async showGitDiff({ filePath = null, scope = 'all' } = {}) {
@@ -308,6 +326,10 @@ export const gitFeature = {
308
326
  return await this.gitApiClient.stageFile({ path: payload.path, requestId });
309
327
  case 'unstage':
310
328
  return await this.gitApiClient.unstageFile({ path: payload.path, requestId });
329
+ case 'stage-all':
330
+ return await this.gitApiClient.stageAll({ requestId });
331
+ case 'unstage-all':
332
+ return await this.gitApiClient.unstageAll({ requestId });
311
333
  case 'push':
312
334
  return await this.gitApiClient.pushBranch({ requestId });
313
335
  case 'pull':
@@ -516,6 +538,20 @@ export const gitFeature = {
516
538
  });
517
539
  },
518
540
 
541
+ async stageAllGitFiles() {
542
+ await this.runGitActionWithStatus('Staging all changes...', async () => {
543
+ const result = await this.postGitAction('stage-all', {});
544
+ await this.finalizeGitAction({ action: 'stage-all', preferredScope: 'staged', result });
545
+ });
546
+ },
547
+
548
+ async unstageAllGitFiles() {
549
+ await this.runGitActionWithStatus('Unstaging all changes...', async () => {
550
+ const result = await this.postGitAction('unstage-all', {});
551
+ await this.finalizeGitAction({ action: 'unstage-all', preferredScope: 'working-tree', result });
552
+ });
553
+ },
554
+
519
555
  async pushGitBranch() {
520
556
  await this.runGitActionWithStatus('Pushing branch...', async () => {
521
557
  try {
@@ -577,7 +613,7 @@ export const gitFeature = {
577
613
  }
578
614
  this.elements.gitResetFileName.value = filePath;
579
615
  if (this.elements.gitResetSubmit) {
580
- this.elements.gitResetSubmit.textContent = 'Reset File';
616
+ this.elements.gitResetSubmit.textContent = 'Reset file';
581
617
  }
582
618
  this.elements.gitResetSubmit?.toggleAttribute('disabled', false);
583
619
 
@@ -601,10 +637,10 @@ export const gitFeature = {
601
637
 
602
638
  submit?.toggleAttribute('disabled', true);
603
639
  if (submit) {
604
- submit.textContent = 'Resetting...';
640
+ submit.textContent = 'Resetting';
605
641
  }
606
642
  try {
607
- await this.runGitActionWithStatus('Resetting file...', async () => {
643
+ await this.runGitActionWithStatus('Resetting file', async () => {
608
644
  const result = await this.postGitAction('reset-file', { path: filePath });
609
645
  await this.finalizeGitAction({
610
646
  action: 'reset',
@@ -618,7 +654,7 @@ export const gitFeature = {
618
654
  this.toastController.show(error.message || 'Failed to reset file');
619
655
  } finally {
620
656
  if (submit) {
621
- submit.textContent = 'Reset File';
657
+ submit.textContent = 'Reset file';
622
658
  }
623
659
  submit?.toggleAttribute('disabled', false);
624
660
  }
@@ -635,17 +671,18 @@ export const gitFeature = {
635
671
  return;
636
672
  }
637
673
 
674
+ const includedFileCount = Number(this.gitPanel.status?.summary?.staged || 0);
675
+ const commitLabel = commitButtonLabel(includedFileCount);
638
676
  if (this.elements.gitCommitTitle) {
639
- this.elements.gitCommitTitle.textContent = 'Commit staged changes';
677
+ this.elements.gitCommitTitle.textContent = commitLabel;
640
678
  }
641
679
  if (this.elements.gitCommitCopy) {
642
- const stagedCount = Number(this.gitPanel.status?.summary?.staged || 0);
643
- this.elements.gitCommitCopy.textContent = stagedCount > 0
644
- ? `${stagedCount} staged file${stagedCount === 1 ? '' : 's'} will be included.`
645
- : 'All staged changes will be included.';
680
+ this.elements.gitCommitCopy.textContent = includedFileCount > 0
681
+ ? `This commit will include ${includedFileCount} file${includedFileCount === 1 ? '' : 's'}.`
682
+ : 'All included changes will be committed.';
646
683
  }
647
684
  if (this.elements.gitCommitSubmit) {
648
- this.elements.gitCommitSubmit.textContent = 'Commit staged changes';
685
+ this.elements.gitCommitSubmit.textContent = commitLabel;
649
686
  }
650
687
  input.value = '';
651
688
 
@@ -673,7 +710,7 @@ export const gitFeature = {
673
710
  }
674
711
  if (!message) {
675
712
  input.focus();
676
- this.toastController.show('Commit message cannot be empty');
713
+ this.toastController.show('Describe what changed before committing');
677
714
  return;
678
715
  }
679
716
 
@@ -693,10 +730,10 @@ export const gitFeature = {
693
730
  });
694
731
  dialog.close();
695
732
  } catch (error) {
696
- this.toastController.show(error.message || 'Failed to commit staged changes');
733
+ this.toastController.show(error.message || 'Failed to commit included changes');
697
734
  } finally {
698
735
  if (submit) {
699
- submit.textContent = 'Commit staged changes';
736
+ submit.textContent = 'Commit included files';
700
737
  }
701
738
  submit?.toggleAttribute('disabled', false);
702
739
  }