zidane-ui 9.0.4 → 9.1.3

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 (1435) hide show
  1. package/README.md +3 -1
  2. package/dist/adapters/extension-modules.d.ts +147 -0
  3. package/dist/adapters/extension-modules.js +244 -0
  4. package/dist/adapters/index.d.ts +3 -1
  5. package/dist/adapters/index.js +3 -1
  6. package/dist/adapters/live.d.ts +6 -0
  7. package/dist/adapters/live.js +33 -3
  8. package/dist/adapters/server-composer-host.js +20 -37
  9. package/dist/adapters/server-extensions-host.d.ts +113 -0
  10. package/dist/adapters/server-extensions-host.js +829 -0
  11. package/dist/adapters/server-host.js +28 -6
  12. package/dist/adapters/server-machines-host.js +1 -1
  13. package/dist/adapters/server-settings-host.js +1 -1
  14. package/dist/adapters/server-settings-sections.js +36 -13
  15. package/dist/adapters/server-transcript-members.d.ts +1 -1
  16. package/dist/adapters/server-transcript-members.js +19 -1
  17. package/dist/app/AppHostProvider.d.ts +4 -1
  18. package/dist/app/AppHostProvider.js +11 -4
  19. package/dist/app/ModalProvider.d.ts +9 -3
  20. package/dist/app/ModalProvider.js +45 -25
  21. package/dist/app/headless/app-host.d.ts +3 -0
  22. package/dist/appearance/AppearanceProvider.d.ts +11 -4
  23. package/dist/appearance/AppearanceProvider.js +18 -6
  24. package/dist/appearance/headless/index.js +1 -1
  25. package/dist/appearance/headless/prefs.d.ts +2 -2
  26. package/dist/appearance/index.d.ts +1 -1
  27. package/dist/approvals/ApprovalBar.js +7 -1
  28. package/dist/approvals/FileEditApproval.js +7 -3
  29. package/dist/approvals/headless/index.js +2 -2
  30. package/dist/approvals/headless/labels.js +3 -3
  31. package/dist/chat/HostBadge.js +1 -1
  32. package/dist/chat/HostStatusDot.js +1 -1
  33. package/dist/chat/HostTranscript.d.ts +3 -1
  34. package/dist/chat/HostTranscript.js +5 -3
  35. package/dist/chat/RunEstimateChip.d.ts +53 -0
  36. package/dist/chat/RunEstimateChip.js +116 -0
  37. package/dist/chat/SessionFilterMenu.d.ts +77 -5
  38. package/dist/chat/SessionFilterMenu.js +86 -4
  39. package/dist/chat/SessionGroupHeader.d.ts +6 -2
  40. package/dist/chat/SessionGroupHeader.js +35 -3
  41. package/dist/chat/SessionHostHeader.js +1 -1
  42. package/dist/chat/SessionList.js +1 -1
  43. package/dist/chat/SessionListRow.d.ts +8 -1
  44. package/dist/chat/SessionListRow.js +5 -4
  45. package/dist/chat/Throbber.js +0 -3
  46. package/dist/chat/Transcript.d.ts +1 -1
  47. package/dist/chat/Transcript.js +112 -57
  48. package/dist/chat/composer/ComposerEditor.js +1 -1
  49. package/dist/chat/composer/ConversationBadges.js +18 -11
  50. package/dist/chat/composer/HostPicker.js +1 -1
  51. package/dist/chat/composer/ProjectMenu.d.ts +8 -1
  52. package/dist/chat/composer/ProjectMenu.js +11 -8
  53. package/dist/chat/composer/RetryPill.js +1 -1
  54. package/dist/chat/composer/SelectTurnHint.d.ts +19 -0
  55. package/dist/chat/composer/SelectTurnHint.js +28 -0
  56. package/dist/chat/composer/ServerScopeToggle.js +4 -1
  57. package/dist/chat/composer/composer-bus.d.ts +8 -1
  58. package/dist/chat/composer/composer-bus.js +10 -1
  59. package/dist/chat/composer/index.d.ts +4 -4
  60. package/dist/chat/composer/index.js +3 -3
  61. package/dist/chat/composer/use-composer-stores.js +1 -1
  62. package/dist/chat/composer/use-draft-target.d.ts +19 -1
  63. package/dist/chat/composer/use-draft-target.js +14 -1
  64. package/dist/chat/composer/use-run-meter.js +1 -1
  65. package/dist/chat/headless/block-runs.d.ts +57 -0
  66. package/dist/chat/headless/block-runs.js +123 -0
  67. package/dist/chat/headless/chip-labels.d.ts +1 -0
  68. package/dist/chat/headless/chip-labels.js +1 -0
  69. package/dist/chat/headless/composer/conversation-badges.d.ts +8 -6
  70. package/dist/chat/headless/composer/conversation-badges.js +26 -24
  71. package/dist/chat/headless/composer/host-chrome.d.ts +2 -27
  72. package/dist/chat/headless/composer/host.d.ts +1 -3
  73. package/dist/chat/headless/composer/index.d.ts +3 -4
  74. package/dist/chat/headless/composer/index.js +5 -6
  75. package/dist/chat/headless/composer/labels-chrome.d.ts +1 -1
  76. package/dist/chat/headless/composer/labels-chrome.js +1 -1
  77. package/dist/chat/headless/extension-sources.d.ts +17 -0
  78. package/dist/chat/headless/extension-sources.js +52 -0
  79. package/dist/chat/headless/fixture-transcript.d.ts +6 -1
  80. package/dist/chat/headless/fixture-transcript.js +49 -0
  81. package/dist/chat/headless/host.d.ts +8 -0
  82. package/dist/chat/headless/hosts.d.ts +2 -0
  83. package/dist/chat/headless/index.d.ts +10 -8
  84. package/dist/chat/headless/index.js +21 -18
  85. package/dist/chat/headless/labels.d.ts +79 -1
  86. package/dist/chat/headless/labels.js +80 -3
  87. package/dist/chat/headless/session-list.d.ts +65 -2
  88. package/dist/chat/headless/session-list.js +10 -2
  89. package/dist/chat/headless/sidebar/badges.d.ts +2 -0
  90. package/dist/chat/headless/sidebar/badges.js +20 -1
  91. package/dist/chat/headless/sidebar/directory.d.ts +46 -6
  92. package/dist/chat/headless/sidebar/directory.js +198 -22
  93. package/dist/chat/headless/sidebar/estimates.d.ts +55 -0
  94. package/dist/chat/headless/sidebar/estimates.js +91 -0
  95. package/dist/chat/headless/sidebar/index.d.ts +6 -4
  96. package/dist/chat/headless/sidebar/index.js +6 -3
  97. package/dist/chat/headless/sidebar/labels.d.ts +71 -1
  98. package/dist/chat/headless/sidebar/labels.js +17 -0
  99. package/dist/chat/headless/sidebar/query.d.ts +276 -0
  100. package/dist/chat/headless/sidebar/query.js +450 -0
  101. package/dist/chat/headless/sidebar/rows.d.ts +104 -13
  102. package/dist/chat/headless/sidebar/rows.js +189 -5
  103. package/dist/chat/headless/sidebar/types.d.ts +37 -4
  104. package/dist/chat/headless/sidebar/types.js +8 -0
  105. package/dist/chat/headless/sidebar/view.d.ts +25 -1
  106. package/dist/chat/headless/sidebar/view.js +56 -3
  107. package/dist/chat/headless/streams/live-events.js +2 -1
  108. package/dist/chat/headless/streams/session-streams.js +6 -0
  109. package/dist/chat/headless/transcript/batch.d.ts +21 -1
  110. package/dist/chat/headless/transcript/batch.js +55 -10
  111. package/dist/chat/headless/transcript/collapse.js +22 -3
  112. package/dist/chat/headless/transcript/fold-attachments.js +1 -1
  113. package/dist/chat/headless/transcript/fold.js +26 -10
  114. package/dist/chat/headless/transcript/rows.d.ts +15 -1
  115. package/dist/chat/headless/transcript-labels.d.ts +1 -0
  116. package/dist/chat/index.d.ts +14 -6
  117. package/dist/chat/index.js +40 -32
  118. package/dist/chat/rich-composer/RichComposer.js +32 -1
  119. package/dist/chat/rich-composer/badge-decorations.js +1 -1
  120. package/dist/chat/rich-composer/use-extension-composer.d.ts +32 -0
  121. package/dist/chat/rich-composer/use-extension-composer.js +46 -0
  122. package/dist/chat/sidebar/MainSessionRow.js +1 -1
  123. package/dist/chat/sidebar/ProjectIcon.d.ts +25 -6
  124. package/dist/chat/sidebar/ProjectIcon.js +79 -34
  125. package/dist/chat/sidebar/SessionSidebar.d.ts +34 -1
  126. package/dist/chat/sidebar/SessionSidebar.js +161 -25
  127. package/dist/chat/sidebar/SidebarDecoration.d.ts +38 -0
  128. package/dist/chat/sidebar/SidebarDecoration.js +61 -0
  129. package/dist/chat/sidebar/SidebarFilterMenu.d.ts +15 -2
  130. package/dist/chat/sidebar/SidebarFilterMenu.js +226 -8
  131. package/dist/chat/sidebar/SidebarFooter.d.ts +3 -1
  132. package/dist/chat/sidebar/SidebarFooter.js +17 -4
  133. package/dist/chat/sidebar/SidebarGroupHeader.d.ts +17 -4
  134. package/dist/chat/sidebar/SidebarGroupHeader.js +23 -4
  135. package/dist/chat/sidebar/SidebarRowView.d.ts +30 -0
  136. package/dist/chat/sidebar/SidebarRowView.js +117 -0
  137. package/dist/chat/sidebar/SidebarSessionRow.d.ts +4 -1
  138. package/dist/chat/sidebar/SidebarSessionRow.js +22 -4
  139. package/dist/chat/sidebar/SpaceSwitcher.d.ts +12 -5
  140. package/dist/chat/sidebar/SpaceSwitcher.js +142 -49
  141. package/dist/chat/sidebar/SpacesSection.js +4 -2
  142. package/dist/chat/sidebar/collapsed.d.ts +24 -0
  143. package/dist/chat/sidebar/collapsed.js +44 -0
  144. package/dist/chat/sidebar/index.d.ts +8 -4
  145. package/dist/chat/sidebar/index.js +6 -2
  146. package/dist/chat/sidebar/session-menu.d.ts +2 -0
  147. package/dist/chat/sidebar/session-menu.js +8 -2
  148. package/dist/chat/sidebar/sidebar-live.d.ts +12 -1
  149. package/dist/chat/sidebar/sidebar-live.js +57 -17
  150. package/dist/chat/sidebar/useAgentNames.d.ts +8 -0
  151. package/dist/chat/sidebar/useAgentNames.js +13 -0
  152. package/dist/chat/sidebar/useSaveViewAsSpace.d.ts +13 -0
  153. package/dist/chat/sidebar/useSaveViewAsSpace.js +44 -0
  154. package/dist/chat/sidebar/useSessionDirectoryView.d.ts +4 -1
  155. package/dist/chat/sidebar/useSessionDirectoryView.js +46 -12
  156. package/dist/chat/sidebar/useSidebarKeyboardNav.js +3 -1
  157. package/dist/chat/testing/composer.contract.d.ts +2 -6
  158. package/dist/chat/testing/composer.contract.js +2 -31
  159. package/dist/chat/testing/contract.d.ts +6 -1
  160. package/dist/chat/testing/contract.js +30 -3
  161. package/dist/chat/testing/fixture-composer-chrome.d.ts +2 -6
  162. package/dist/chat/testing/fixture-composer-chrome.js +1 -17
  163. package/dist/chat/transcript/AnsiText.d.ts +27 -0
  164. package/dist/chat/transcript/AnsiText.js +73 -0
  165. package/dist/chat/transcript/BadgeMenu.d.ts +2 -0
  166. package/dist/chat/transcript/BadgeMenu.js +22 -6
  167. package/dist/chat/transcript/CardMarkdown.js +17 -5
  168. package/dist/chat/transcript/ChipCard.js +6 -0
  169. package/dist/chat/transcript/ChipCards.js +2 -2
  170. package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
  171. package/dist/chat/transcript/CodemodeScript.js +212 -0
  172. package/dist/chat/transcript/EditDiffBlock.js +4 -1
  173. package/dist/chat/transcript/FileChip.js +20 -7
  174. package/dist/chat/transcript/InlineChipText.js +1 -1
  175. package/dist/chat/transcript/InteractionToolBody.js +32 -13
  176. package/dist/chat/transcript/LiveOutput.d.ts +21 -0
  177. package/dist/chat/transcript/LiveOutput.js +42 -0
  178. package/dist/chat/transcript/MermaidDiagram.d.ts +22 -0
  179. package/dist/chat/transcript/MermaidDiagram.js +410 -0
  180. package/dist/chat/transcript/PromptEcho.js +5 -5
  181. package/dist/chat/transcript/ProseMarkdown.js +9 -6
  182. package/dist/chat/transcript/ReferenceText.js +7 -2
  183. package/dist/chat/transcript/SelectTurnHint.js +1 -1
  184. package/dist/chat/transcript/SubagentBlock.d.ts +4 -2
  185. package/dist/chat/transcript/SubagentBlock.js +5 -2
  186. package/dist/chat/transcript/TranscriptRow.js +28 -6
  187. package/dist/chat/transcript/TranscriptSearch.js +1 -1
  188. package/dist/chat/transcript/actions.d.ts +6 -0
  189. package/dist/chat/transcript/badges.js +5 -2
  190. package/dist/chat/transcript/extension-renderers.d.ts +36 -0
  191. package/dist/chat/transcript/extension-renderers.js +133 -0
  192. package/dist/chat/transcript/fold-worker.js +2 -2
  193. package/dist/chat/transcript/fold.js +6 -4
  194. package/dist/chat/transcript/index.d.ts +8 -2
  195. package/dist/chat/transcript/index.js +35 -29
  196. package/dist/chat/transcript/markdown-cache.js +16 -7
  197. package/dist/chat/transcript/markdown.d.ts +15 -1
  198. package/dist/chat/transcript/markdown.js +71 -6
  199. package/dist/chat/transcript/messages.js +3 -2
  200. package/dist/chat/transcript/notices.js +1 -1
  201. package/dist/chat/transcript/prompt.js +1 -1
  202. package/dist/chat/transcript/prose.js +1 -1
  203. package/dist/chat/transcript/recent-map.d.ts +20 -0
  204. package/dist/chat/transcript/recent-map.js +22 -0
  205. package/dist/chat/transcript/references.js +7 -3
  206. package/dist/chat/transcript/renderers.d.ts +11 -1
  207. package/dist/chat/transcript/renderers.js +14 -4
  208. package/dist/chat/transcript/script-input.d.ts +17 -0
  209. package/dist/chat/transcript/script-input.js +16 -0
  210. package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
  211. package/dist/chat/transcript/shell-block-scope.js +18 -0
  212. package/dist/chat/transcript/shell-block.d.ts +27 -0
  213. package/dist/chat/transcript/shell-block.js +306 -0
  214. package/dist/chat/transcript/tool-batch.js +4 -9
  215. package/dist/chat/transcript/tool-details.js +7 -67
  216. package/dist/chat/transcript/tool-parts.d.ts +18 -6
  217. package/dist/chat/transcript/tool-parts.js +15 -5
  218. package/dist/chat/transcript/tool-payload.d.ts +21 -0
  219. package/dist/chat/transcript/tool-payload.js +80 -0
  220. package/dist/chat/transcript/tool-row.js +158 -96
  221. package/dist/chat/transcript/useTranscriptScroll.js +3 -2
  222. package/dist/chat/transcript/user-bash.js +3 -2
  223. package/dist/chat/transcript-options.d.ts +15 -0
  224. package/dist/chat/transcript-options.js +40 -0
  225. package/dist/code/CodeHighlightProvider.d.ts +3 -3
  226. package/dist/code/CodeHighlightProvider.js +4 -4
  227. package/dist/code/HighlightedCode.d.ts +7 -2
  228. package/dist/code/HighlightedCode.js +7 -71
  229. package/dist/code/code-themes.d.ts +13 -6
  230. package/dist/code/code-themes.js +385 -13
  231. package/dist/code/editor/CodeHover.d.ts +5 -4
  232. package/dist/code/editor/CodeHover.js +20 -16
  233. package/dist/code/editor/HighlightWorkers.js +2 -2
  234. package/dist/code/editor/edit-session.js +1 -0
  235. package/dist/code/editor/environment.d.ts +1 -1
  236. package/dist/code/editor/environment.js +1 -1
  237. package/dist/code/editor/index.d.ts +2 -2
  238. package/dist/code/editor/index.js +2 -2
  239. package/dist/code/editor/pierre-theme.d.ts +5 -5
  240. package/dist/code/editor/pierre-theme.js +6 -5
  241. package/dist/code/highlight-lines.d.ts +24 -0
  242. package/dist/code/highlight-lines.js +41 -0
  243. package/dist/code/highlight.worker.js +2 -14
  244. package/dist/code/highlighter.d.ts +24 -9
  245. package/dist/code/highlighter.js +1 -4
  246. package/dist/code/highlights.d.ts +12 -0
  247. package/dist/code/highlights.js +47 -0
  248. package/dist/code/mermaid-lexer.d.ts +26 -0
  249. package/dist/code/mermaid-lexer.js +303 -0
  250. package/dist/code/shiki-theme.d.ts +6 -6
  251. package/dist/code/shiki-theme.js +3 -3
  252. package/dist/code/use-highlighted-html.d.ts +5 -0
  253. package/dist/code/use-highlighted-html.js +75 -0
  254. package/dist/components/BrandMark.d.ts +6 -4
  255. package/dist/components/BrandMark.js +5 -2
  256. package/dist/components/CodeFrame.d.ts +5 -0
  257. package/dist/components/CodeFrame.js +27 -23
  258. package/dist/components/Form.js +1 -1
  259. package/dist/core.css +82 -11
  260. package/dist/dist/{index-Cx7GDZlz.d.ts → index-WlE93Q6d.d.ts} +255 -51
  261. package/dist/extensions/ExtensionComponent.d.ts +62 -0
  262. package/dist/extensions/ExtensionComponent.js +120 -0
  263. package/dist/extensions/ExtensionDialogHost.d.ts +31 -0
  264. package/dist/extensions/ExtensionDialogHost.js +439 -0
  265. package/dist/extensions/ExtensionRenderer.d.ts +30 -0
  266. package/dist/extensions/ExtensionRenderer.js +78 -0
  267. package/dist/extensions/ExtensionScreen.d.ts +24 -0
  268. package/dist/extensions/ExtensionScreen.js +120 -0
  269. package/dist/extensions/ExtensionSettingsPage.d.ts +19 -0
  270. package/dist/extensions/ExtensionSettingsPage.js +116 -0
  271. package/dist/extensions/ExtensionSettingsPages.d.ts +17 -0
  272. package/dist/extensions/ExtensionSettingsPages.js +33 -0
  273. package/dist/extensions/ExtensionSettingsSidebar.d.ts +63 -0
  274. package/dist/extensions/ExtensionSettingsSidebar.js +360 -0
  275. package/dist/extensions/ExtensionSlot.d.ts +44 -0
  276. package/dist/extensions/ExtensionSlot.js +161 -0
  277. package/dist/extensions/ExtensionWebview.d.ts +32 -0
  278. package/dist/extensions/ExtensionWebview.js +80 -0
  279. package/dist/extensions/ExtensionsProvider.d.ts +42 -0
  280. package/dist/extensions/ExtensionsProvider.js +104 -0
  281. package/dist/extensions/SettingsWireForm.d.ts +44 -0
  282. package/dist/extensions/SettingsWireForm.js +104 -0
  283. package/dist/extensions/headless/dialog-queue.d.ts +27 -0
  284. package/dist/extensions/headless/dialog-queue.js +68 -0
  285. package/dist/extensions/headless/effect-channel.d.ts +15 -0
  286. package/dist/extensions/headless/effect-channel.js +33 -0
  287. package/dist/extensions/headless/effect-router.d.ts +34 -0
  288. package/dist/extensions/headless/effect-router.js +50 -0
  289. package/dist/extensions/headless/fixture-host.d.ts +110 -0
  290. package/dist/extensions/headless/fixture-host.js +258 -0
  291. package/dist/extensions/headless/host.d.ts +433 -0
  292. package/dist/extensions/headless/host.js +27 -0
  293. package/dist/extensions/headless/index.d.ts +10 -0
  294. package/dist/extensions/headless/index.js +10 -0
  295. package/dist/extensions/headless/labels.d.ts +45 -0
  296. package/dist/extensions/headless/labels.js +49 -0
  297. package/dist/extensions/headless/links.d.ts +30 -0
  298. package/dist/extensions/headless/links.js +34 -0
  299. package/dist/extensions/headless/select.d.ts +120 -0
  300. package/dist/extensions/headless/select.js +191 -0
  301. package/dist/extensions/headless/webview-bridge.d.ts +71 -0
  302. package/dist/extensions/headless/webview-bridge.js +78 -0
  303. package/dist/extensions/headless/wire.d.ts +113 -0
  304. package/dist/extensions/headless/wire.js +38 -0
  305. package/dist/extensions/hooks.d.ts +88 -0
  306. package/dist/extensions/hooks.js +151 -0
  307. package/dist/extensions/index.d.ts +15 -0
  308. package/dist/extensions/index.js +15 -0
  309. package/dist/extensions/kit.d.ts +19 -0
  310. package/dist/extensions/kit.js +19 -0
  311. package/dist/extensions/links.d.ts +79 -0
  312. package/dist/extensions/links.js +94 -0
  313. package/dist/extensions/testing/contract.d.ts +80 -0
  314. package/dist/extensions/testing/contract.js +407 -0
  315. package/dist/extensions/testing/index.d.ts +2 -0
  316. package/dist/extensions/testing/index.js +1 -0
  317. package/dist/extensions/useExtensionsLabels.d.ts +6 -0
  318. package/dist/extensions/useExtensionsLabels.js +18 -0
  319. package/dist/files/DiffsTab.js +7 -19
  320. package/dist/files/EditorColumn.js +1 -1
  321. package/dist/files/EditorEnvironmentRoot.d.ts +15 -0
  322. package/dist/files/EditorEnvironmentRoot.js +55 -0
  323. package/dist/files/MediaDiff.js +1 -1
  324. package/dist/files/drafts-store.d.ts +10 -0
  325. package/dist/files/drafts-store.js +30 -1
  326. package/dist/files/headless/lsp-edits.d.ts +4 -1
  327. package/dist/files/headless/lsp-edits.js +14 -2
  328. package/dist/files/index.d.ts +2 -1
  329. package/dist/files/index.js +2 -1
  330. package/dist/files/session-patch.d.ts +11 -0
  331. package/dist/files/session-patch.js +44 -0
  332. package/dist/files/useEntryActions.js +1 -1
  333. package/dist/files/useLsp.js +5 -2
  334. package/dist/files/useOpenFiles.js +1 -1
  335. package/dist/git/BranchMenu.d.ts +1 -5
  336. package/dist/git/BranchMenu.js +23 -39
  337. package/dist/git/GitBar.d.ts +1 -1
  338. package/dist/git/GitBar.js +7 -1
  339. package/dist/git/ImportRepoDialog.d.ts +3 -1
  340. package/dist/git/ImportRepoDialog.js +8 -6
  341. package/dist/git/MoveSessionDialog.js +3 -1
  342. package/dist/git/headless/labels.d.ts +0 -2
  343. package/dist/git/headless/labels.js +0 -2
  344. package/dist/hooks/useDisplayPath.d.ts +40 -0
  345. package/dist/hooks/useDisplayPath.js +75 -0
  346. package/dist/index.d.ts +6 -4
  347. package/dist/index.js +4 -2
  348. package/dist/keybindings/KeyCommands.js +1 -1
  349. package/dist/keybindings/KeybindingsProvider.js +1 -1
  350. package/dist/keybindings/headless/index.js +2 -2
  351. package/dist/keybindings/headless/overrides.js +1 -1
  352. package/dist/keybindings/index.d.ts +2 -1
  353. package/dist/keybindings/index.js +2 -1
  354. package/dist/keybindings/press.d.ts +27 -0
  355. package/dist/keybindings/press.js +67 -0
  356. package/dist/machines/Banners.js +1 -1
  357. package/dist/machines/HostSyncPanel.js +1 -1
  358. package/dist/machines/HostsSection.js +1 -1
  359. package/dist/machines/SyncOutcomeBadge.js +1 -1
  360. package/dist/machines/headless/index.js +1 -1
  361. package/dist/machines/headless/labels.d.ts +1 -0
  362. package/dist/machines/headless/labels.js +1 -0
  363. package/dist/machines/headless/messages.d.ts +2 -1
  364. package/dist/machines/headless/messages.js +4 -3
  365. package/dist/machines/settings-section.d.ts +1 -1
  366. package/dist/onboarding/conversation.js +21 -3
  367. package/dist/onboarding/demos/features.d.ts +5 -1
  368. package/dist/onboarding/demos/features.js +80 -1
  369. package/dist/onboarding/headless/fixture-host.d.ts +2 -2
  370. package/dist/onboarding/headless/host.d.ts +2 -2
  371. package/dist/onboarding/headless/labels.d.ts +2 -0
  372. package/dist/onboarding/headless/labels.js +2 -0
  373. package/dist/onboarding/index.d.ts +4 -2
  374. package/dist/onboarding/index.js +3 -2
  375. package/dist/onboarding/marks.d.ts +29 -7
  376. package/dist/onboarding/marks.js +38 -12
  377. package/dist/onboarding/skills/SkillSourceBrowser.js +56 -247
  378. package/dist/onboarding/skills/parts.d.ts +31 -4
  379. package/dist/onboarding/skills/parts.js +8 -11
  380. package/dist/onboarding/sources/SourceBrowser.d.ts +87 -0
  381. package/dist/onboarding/sources/SourceBrowser.js +292 -0
  382. package/dist/onboarding/steps/ConnectStep.js +1 -1
  383. package/dist/onboarding/steps/ConnectorsStep.js +3 -3
  384. package/dist/onboarding/steps/ConversationStep.js +2 -1
  385. package/dist/onboarding/steps/ExtensionsStep.js +2 -2
  386. package/dist/onboarding/steps/ReadyStep.js +2 -2
  387. package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
  388. package/dist/palette/app-sources.js +1 -1
  389. package/dist/path.d.ts +24 -2
  390. package/dist/path.js +34 -2
  391. package/dist/session/ArtifactRowChips.js +11 -2
  392. package/dist/session/ArtifactsPanel.d.ts +2 -0
  393. package/dist/session/ArtifactsPanel.js +67 -27
  394. package/dist/session/ProjectHome.d.ts +82 -0
  395. package/dist/session/ProjectHome.js +518 -0
  396. package/dist/session/ProviderUsageProvider.d.ts +3 -1
  397. package/dist/session/ProviderUsageProvider.js +5 -2
  398. package/dist/session/QueueTab.js +1 -1
  399. package/dist/session/SessionCacheFacts.js +1 -1
  400. package/dist/session/SessionDetailsDialog.d.ts +1 -1
  401. package/dist/session/SessionDetailsDialog.js +5 -2
  402. package/dist/session/SessionHeader.d.ts +3 -1
  403. package/dist/session/SessionHeader.js +7 -1
  404. package/dist/session/SideChat.js +2 -2
  405. package/dist/session/TodosPanel.js +4 -1
  406. package/dist/session/UsagePanel.js +139 -17
  407. package/dist/session/WelcomeScreen.d.ts +1 -1
  408. package/dist/session/WelcomeScreen.js +46 -502
  409. package/dist/session/headless/fixture-host.js +43 -1
  410. package/dist/session/headless/home-layout.d.ts +137 -0
  411. package/dist/session/headless/home-layout.js +235 -0
  412. package/dist/session/headless/host.d.ts +3 -1
  413. package/dist/session/headless/index.d.ts +4 -3
  414. package/dist/session/headless/index.js +4 -3
  415. package/dist/session/headless/labels.d.ts +33 -36
  416. package/dist/session/headless/labels.js +48 -47
  417. package/dist/session/headless/usage-format.d.ts +2 -92
  418. package/dist/session/headless/usage-format.js +2 -181
  419. package/dist/session/headless/usage.d.ts +15 -2
  420. package/dist/session/headless/usage.js +15 -1
  421. package/dist/session/index.d.ts +3 -1
  422. package/dist/session/index.js +4 -2
  423. package/dist/session/modal-shell.d.ts +8 -0
  424. package/dist/session/modal-shell.js +18 -0
  425. package/dist/session/testing/contract.d.ts +1 -1
  426. package/dist/session/testing/contract.js +16 -0
  427. package/dist/session/testing/demo.js +28 -4
  428. package/dist/settings/SettingsNav.d.ts +3 -2
  429. package/dist/settings/SettingsNav.js +86 -13
  430. package/dist/settings/SettingsRowsPage.d.ts +2 -2
  431. package/dist/settings/SettingsShell.d.ts +3 -1
  432. package/dist/settings/SettingsShell.js +16 -9
  433. package/dist/settings/headless/catalog.js +20 -0
  434. package/dist/settings/headless/fixture-sections.d.ts +10 -1
  435. package/dist/settings/headless/fixture-sections.js +88 -3
  436. package/dist/settings/headless/host.d.ts +2 -0
  437. package/dist/settings/headless/index.d.ts +4 -4
  438. package/dist/settings/headless/index.js +1 -1
  439. package/dist/settings/headless/layout.d.ts +8 -4
  440. package/dist/settings/headless/layout.js +22 -16
  441. package/dist/settings/headless/registry.d.ts +14 -0
  442. package/dist/settings/headless/search.d.ts +1 -1
  443. package/dist/settings/headless/sections-host.d.ts +36 -3
  444. package/dist/settings/index.d.ts +5 -3
  445. package/dist/settings/index.js +8 -6
  446. package/dist/settings/sections/appearance/AppearanceSection.js +4 -4
  447. package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
  448. package/dist/settings/sections/editor/EditorSection.js +1 -1
  449. package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
  450. package/dist/settings/sections/extensions/ChangeOriginDialog.d.ts +48 -0
  451. package/dist/settings/sections/extensions/ChangeOriginDialog.js +181 -0
  452. package/dist/settings/sections/extensions/CreateExtensionDialog.js +5 -2
  453. package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +76 -0
  454. package/dist/settings/sections/extensions/ExtensionConfigRows.js +349 -0
  455. package/dist/settings/sections/extensions/ExtensionOptionsSection.d.ts +1 -4
  456. package/dist/settings/sections/extensions/ExtensionOptionsSection.js +23 -286
  457. package/dist/settings/sections/extensions/ExtensionPicksBar.d.ts +46 -0
  458. package/dist/settings/sections/extensions/ExtensionPicksBar.js +102 -0
  459. package/dist/settings/sections/extensions/ExtensionSourceBrowser.d.ts +50 -0
  460. package/dist/settings/sections/extensions/ExtensionSourceBrowser.js +164 -0
  461. package/dist/settings/sections/extensions/ExtensionsSection.d.ts +6 -2
  462. package/dist/settings/sections/extensions/ExtensionsSection.js +233 -42
  463. package/dist/settings/sections/extensions/labels.d.ts +26 -5
  464. package/dist/settings/sections/extensions/labels.js +28 -3
  465. package/dist/settings/sections/extensions/options-labels.d.ts +2 -0
  466. package/dist/settings/sections/extensions/options-labels.js +2 -0
  467. package/dist/settings/sections/host-catalog/HostCatalogSection.js +104 -30
  468. package/dist/settings/sections/host-catalog/labels.js +4 -2
  469. package/dist/settings/sections/index.d.ts +5 -3
  470. package/dist/settings/sections/index.js +8 -6
  471. package/dist/settings/sections/instructions/InstructionsSection.js +7 -4
  472. package/dist/settings/sections/mcp/McpSection.js +1 -1
  473. package/dist/settings/sections/mcp/McpServerRow.js +3 -2
  474. package/dist/settings/sections/models/AgentDefaults.js +1 -1
  475. package/dist/settings/sections/models/ModelPickField.js +1 -1
  476. package/dist/settings/sections/models/ModelRows.js +3 -3
  477. package/dist/settings/sections/plugins/PluginsSection.js +3 -1
  478. package/dist/settings/sections/providers/ProvidersSection.js +3 -3
  479. package/dist/settings/sections/providers/ServerProvidersSection.js +2 -2
  480. package/dist/settings/sections/providers/ServerSignIn.js +3 -3
  481. package/dist/settings/sections/shared/catalog.d.ts +6 -1
  482. package/dist/settings/sections/shared/catalog.js +28 -22
  483. package/dist/settings/sections/skills/SkillList.js +2 -2
  484. package/dist/settings/sections/skills/SkillsSection.js +1 -1
  485. package/dist/styles.css +526 -21
  486. package/dist/terminal/HostTerminalSurface.js +18 -8
  487. package/dist/terminal/TerminalProvider.d.ts +3 -1
  488. package/dist/terminal/TerminalProvider.js +5 -1
  489. package/dist/terminal/headless/store.d.ts +17 -0
  490. package/dist/terminal/headless/store.js +31 -0
  491. package/dist/terminal/index.d.ts +2 -2
  492. package/dist/terminal/index.js +2 -2
  493. package/dist/theme/runtime-icons.d.ts +50 -0
  494. package/dist/theme/runtime-icons.js +95 -0
  495. package/dist/workspace/PanelContentView.d.ts +33 -4
  496. package/dist/workspace/PanelContentView.js +192 -58
  497. package/dist/workspace/PanelCorner.d.ts +35 -0
  498. package/dist/workspace/PanelCorner.js +68 -0
  499. package/dist/workspace/PanelGroups.d.ts +7 -2
  500. package/dist/workspace/PanelGroups.js +7 -3
  501. package/dist/workspace/PanelHome.d.ts +19 -0
  502. package/dist/workspace/PanelHome.js +74 -0
  503. package/dist/workspace/PanelItems.d.ts +28 -0
  504. package/dist/workspace/PanelItems.js +330 -0
  505. package/dist/workspace/PanelStrip.d.ts +5 -1
  506. package/dist/workspace/PanelStrip.js +6 -4
  507. package/dist/workspace/SidePanel.d.ts +9 -3
  508. package/dist/workspace/SidePanel.js +47 -10
  509. package/dist/workspace/TabParking.d.ts +2 -0
  510. package/dist/workspace/TabParking.js +8 -2
  511. package/dist/workspace/WorkspaceProvider.d.ts +1 -1
  512. package/dist/workspace/WorkspaceProvider.js +10 -6
  513. package/dist/workspace/extension-tabs.d.ts +36 -0
  514. package/dist/workspace/extension-tabs.js +175 -0
  515. package/dist/workspace/headless/host.d.ts +6 -2
  516. package/dist/workspace/headless/index.js +1 -1
  517. package/dist/workspace/headless/labels.d.ts +7 -0
  518. package/dist/workspace/headless/labels.js +14 -0
  519. package/dist/workspace/headless/view.d.ts +5 -0
  520. package/dist/workspace/index.d.ts +3 -2
  521. package/dist/workspace/index.js +3 -2
  522. package/package.json +37 -9
  523. package/src/styles/components.css +24 -8
  524. package/src/styles/motion.css +35 -0
  525. package/src/styles/primitives.css +5 -2
  526. package/src/styles/rich-composer.css +7 -2
  527. package/src/styles/sidebar.css +24 -0
  528. package/src/styles/transcript.css +329 -0
  529. package/src/styles/workspace.css +58 -0
  530. package/dist/chat/composer/use-hud.d.ts +0 -16
  531. package/dist/chat/composer/use-hud.js +0 -36
  532. package/dist/chat/headless/composer/hud.d.ts +0 -25
  533. package/dist/chat/headless/composer/hud.js +0 -66
  534. package/src/adapters/browser-appearance-host.ts +0 -51
  535. package/src/adapters/browser-keybindings-host.ts +0 -48
  536. package/src/adapters/browser-workspace-host.ts +0 -92
  537. package/src/adapters/closable-client.ts +0 -34
  538. package/src/adapters/index.ts +0 -32
  539. package/src/adapters/live-events.ts +0 -6
  540. package/src/adapters/live.ts +0 -230
  541. package/src/adapters/run-host.ts +0 -238
  542. package/src/adapters/server-approvals-host.ts +0 -102
  543. package/src/adapters/server-client.ts +0 -15
  544. package/src/adapters/server-composer-host.ts +0 -474
  545. package/src/adapters/server-files-host.ts +0 -287
  546. package/src/adapters/server-git-host.ts +0 -289
  547. package/src/adapters/server-host.ts +0 -459
  548. package/src/adapters/server-machines-host.ts +0 -283
  549. package/src/adapters/server-oauth-flow.ts +0 -133
  550. package/src/adapters/server-onboarding-host.ts +0 -363
  551. package/src/adapters/server-palette-host.ts +0 -134
  552. package/src/adapters/server-session-host.ts +0 -241
  553. package/src/adapters/server-settings-accounts.ts +0 -212
  554. package/src/adapters/server-settings-host.ts +0 -120
  555. package/src/adapters/server-settings-models.ts +0 -46
  556. package/src/adapters/server-settings-performance.ts +0 -58
  557. package/src/adapters/server-settings-sections.ts +0 -184
  558. package/src/adapters/server-sidebar-host.ts +0 -59
  559. package/src/adapters/server-terminal-host.ts +0 -124
  560. package/src/adapters/server-transcript-members.ts +0 -131
  561. package/src/adapters/sse-host.ts +0 -264
  562. package/src/adapters/sse-parser.ts +0 -82
  563. package/src/adapters/sse-protocol.ts +0 -118
  564. package/src/adapters/stream-pacer.ts +0 -122
  565. package/src/adapters/worker-host.ts +0 -192
  566. package/src/adapters/worker-protocol.ts +0 -97
  567. package/src/app/AppHostProvider.tsx +0 -122
  568. package/src/app/ModalProvider.tsx +0 -711
  569. package/src/app/headless/app-host.ts +0 -58
  570. package/src/app/headless/index.ts +0 -6
  571. package/src/app/headless/resource.ts +0 -444
  572. package/src/app/index.ts +0 -9
  573. package/src/app/testing/index.ts +0 -90
  574. package/src/app/useConfirm.tsx +0 -65
  575. package/src/app/useResource.ts +0 -30
  576. package/src/appearance/AppearanceProvider.tsx +0 -359
  577. package/src/appearance/apply.ts +0 -69
  578. package/src/appearance/headless/fixture-host.ts +0 -111
  579. package/src/appearance/headless/fonts.ts +0 -224
  580. package/src/appearance/headless/host.ts +0 -65
  581. package/src/appearance/headless/index.ts +0 -12
  582. package/src/appearance/headless/prefs.ts +0 -252
  583. package/src/appearance/headless/storage.ts +0 -127
  584. package/src/appearance/headless/zoom-commands.ts +0 -21
  585. package/src/appearance/index.ts +0 -11
  586. package/src/appearance/testing/contract.ts +0 -210
  587. package/src/appearance/testing/index.ts +0 -6
  588. package/src/approvals/ApprovalBar.tsx +0 -227
  589. package/src/approvals/ApprovalConcern.tsx +0 -33
  590. package/src/approvals/ApprovalShell.tsx +0 -69
  591. package/src/approvals/ApprovalsProvider.tsx +0 -110
  592. package/src/approvals/FileEditApproval.tsx +0 -305
  593. package/src/approvals/HunkPreviews.tsx +0 -225
  594. package/src/approvals/SafelistPanel.tsx +0 -149
  595. package/src/approvals/headless/fixture-host.ts +0 -73
  596. package/src/approvals/headless/fixtures.ts +0 -86
  597. package/src/approvals/headless/heads.ts +0 -81
  598. package/src/approvals/headless/host.ts +0 -80
  599. package/src/approvals/headless/index.ts +0 -12
  600. package/src/approvals/headless/labels.ts +0 -67
  601. package/src/approvals/headless/pending.ts +0 -91
  602. package/src/approvals/headless/preview.ts +0 -94
  603. package/src/approvals/headless/safelist.ts +0 -63
  604. package/src/approvals/index.ts +0 -13
  605. package/src/approvals/key-scope.ts +0 -33
  606. package/src/approvals/testing/contract.ts +0 -230
  607. package/src/approvals/testing/index.ts +0 -7
  608. package/src/brands/marks.ts +0 -298
  609. package/src/chat/ChatProvider.tsx +0 -60
  610. package/src/chat/DaemonOrb.tsx +0 -107
  611. package/src/chat/HostBadge.tsx +0 -71
  612. package/src/chat/HostStatusDot.tsx +0 -53
  613. package/src/chat/HostTranscript.tsx +0 -101
  614. package/src/chat/PdfPreview.tsx +0 -65
  615. package/src/chat/SessionFilterMenu.tsx +0 -237
  616. package/src/chat/SessionGroupHeader.tsx +0 -136
  617. package/src/chat/SessionHostHeader.tsx +0 -66
  618. package/src/chat/SessionList.tsx +0 -413
  619. package/src/chat/SessionListRow.tsx +0 -279
  620. package/src/chat/SessionStreamsProvider.tsx +0 -253
  621. package/src/chat/StatusDot.tsx +0 -128
  622. package/src/chat/TextPreview.tsx +0 -121
  623. package/src/chat/Throbber.tsx +0 -277
  624. package/src/chat/Transcript.tsx +0 -461
  625. package/src/chat/composer/AgentPicker.tsx +0 -155
  626. package/src/chat/composer/AgentPickerDialog.tsx +0 -99
  627. package/src/chat/composer/ApprovalDock.tsx +0 -64
  628. package/src/chat/composer/ArchivedBanner.tsx +0 -44
  629. package/src/chat/composer/AttachmentTiles.tsx +0 -211
  630. package/src/chat/composer/Composer.tsx +0 -500
  631. package/src/chat/composer/ComposerBadges.tsx +0 -339
  632. package/src/chat/composer/ComposerControls.tsx +0 -243
  633. package/src/chat/composer/ComposerEditor.tsx +0 -101
  634. package/src/chat/composer/ComposerHostProvider.tsx +0 -46
  635. package/src/chat/composer/ComposerShell.tsx +0 -129
  636. package/src/chat/composer/ContextBreakdown.tsx +0 -382
  637. package/src/chat/composer/ContextOrb.tsx +0 -176
  638. package/src/chat/composer/ConversationBadges.tsx +0 -159
  639. package/src/chat/composer/DockCard.tsx +0 -126
  640. package/src/chat/composer/EffortPickerDialog.tsx +0 -184
  641. package/src/chat/composer/HostComposer.tsx +0 -135
  642. package/src/chat/composer/HostContextOrb.tsx +0 -94
  643. package/src/chat/composer/HostModelChainList.tsx +0 -102
  644. package/src/chat/composer/HostPicker.tsx +0 -97
  645. package/src/chat/composer/HostPickers.tsx +0 -320
  646. package/src/chat/composer/ImageModelList.tsx +0 -151
  647. package/src/chat/composer/ModelChainList.tsx +0 -442
  648. package/src/chat/composer/ModelChainParts.tsx +0 -247
  649. package/src/chat/composer/ModelChainRow.tsx +0 -191
  650. package/src/chat/composer/ModelChainRows.tsx +0 -223
  651. package/src/chat/composer/ModelChainTooltip.tsx +0 -121
  652. package/src/chat/composer/ModelFacts.tsx +0 -204
  653. package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
  654. package/src/chat/composer/ModelPicker.tsx +0 -513
  655. package/src/chat/composer/ModelPickerDialog.tsx +0 -99
  656. package/src/chat/composer/ModelProviderPills.tsx +0 -141
  657. package/src/chat/composer/PickerPill.tsx +0 -41
  658. package/src/chat/composer/ProjectMenu.tsx +0 -170
  659. package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
  660. package/src/chat/composer/RetryPill.tsx +0 -47
  661. package/src/chat/composer/RunStatusChip.tsx +0 -150
  662. package/src/chat/composer/ScopeToggle.tsx +0 -94
  663. package/src/chat/composer/SendButton.tsx +0 -89
  664. package/src/chat/composer/ServerScopeToggle.tsx +0 -179
  665. package/src/chat/composer/attachment-ingest.ts +0 -413
  666. package/src/chat/composer/attachments.tsx +0 -176
  667. package/src/chat/composer/badge-order.ts +0 -65
  668. package/src/chat/composer/composer-bus.ts +0 -307
  669. package/src/chat/composer/index.ts +0 -63
  670. package/src/chat/composer/load-composer-editor.ts +0 -25
  671. package/src/chat/composer/model-catalog.ts +0 -424
  672. package/src/chat/composer/model-list-layout.ts +0 -118
  673. package/src/chat/composer/prompt-history-nav.ts +0 -60
  674. package/src/chat/composer/scope-side.ts +0 -7
  675. package/src/chat/composer/suggestion-extension.ts +0 -113
  676. package/src/chat/composer/suggestions.tsx +0 -115
  677. package/src/chat/composer/use-agent-profiles.ts +0 -97
  678. package/src/chat/composer/use-cache-hints.ts +0 -93
  679. package/src/chat/composer/use-composer-stores.ts +0 -140
  680. package/src/chat/composer/use-draft-target.ts +0 -284
  681. package/src/chat/composer/use-hud.ts +0 -38
  682. package/src/chat/composer/use-new-session-defaults.ts +0 -201
  683. package/src/chat/composer/use-provider-ready-poll.ts +0 -35
  684. package/src/chat/composer/use-run-meter.ts +0 -140
  685. package/src/chat/composer/use-send-prompt.ts +0 -188
  686. package/src/chat/composer/use-session-meters.ts +0 -109
  687. package/src/chat/composer/use-sustained-work.ts +0 -74
  688. package/src/chat/composer/useAttachmentIngest.ts +0 -116
  689. package/src/chat/composer/useModelListSpy.ts +0 -19
  690. package/src/chat/headless/badge-refs.ts +0 -76
  691. package/src/chat/headless/chip-labels.ts +0 -39
  692. package/src/chat/headless/chip-settle.ts +0 -53
  693. package/src/chat/headless/chip-views.ts +0 -215
  694. package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
  695. package/src/chat/headless/composer/commands.ts +0 -16
  696. package/src/chat/headless/composer/composer-sources.ts +0 -150
  697. package/src/chat/headless/composer/conversation-badges.ts +0 -222
  698. package/src/chat/headless/composer/draft-sync.ts +0 -199
  699. package/src/chat/headless/composer/editor-markdown.ts +0 -137
  700. package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
  701. package/src/chat/headless/composer/host-chrome.ts +0 -227
  702. package/src/chat/headless/composer/host.ts +0 -253
  703. package/src/chat/headless/composer/hud.ts +0 -101
  704. package/src/chat/headless/composer/index.ts +0 -18
  705. package/src/chat/headless/composer/labels-chrome.ts +0 -83
  706. package/src/chat/headless/composer/labels-editor.ts +0 -44
  707. package/src/chat/headless/composer/labels.ts +0 -18
  708. package/src/chat/headless/composer/live-cost.ts +0 -67
  709. package/src/chat/headless/composer/model-knobs.ts +0 -179
  710. package/src/chat/headless/composer/model-names.ts +0 -145
  711. package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
  712. package/src/chat/headless/composer/models.ts +0 -86
  713. package/src/chat/headless/composer/new-session-defaults.ts +0 -68
  714. package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
  715. package/src/chat/headless/composer/remember-model-pick.ts +0 -132
  716. package/src/chat/headless/composer/run-meter.ts +0 -228
  717. package/src/chat/headless/composer-modes.ts +0 -170
  718. package/src/chat/headless/draft-scope.ts +0 -136
  719. package/src/chat/headless/draft-target.ts +0 -87
  720. package/src/chat/headless/file-chip.ts +0 -175
  721. package/src/chat/headless/fixture-host.ts +0 -294
  722. package/src/chat/headless/fixture-transcript.ts +0 -125
  723. package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
  724. package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
  725. package/src/chat/headless/host.ts +0 -259
  726. package/src/chat/headless/hosts.ts +0 -53
  727. package/src/chat/headless/index.ts +0 -31
  728. package/src/chat/headless/labels.ts +0 -331
  729. package/src/chat/headless/markdown-chunks.ts +0 -134
  730. package/src/chat/headless/path-resolver.ts +0 -178
  731. package/src/chat/headless/prompt-origin.ts +0 -90
  732. package/src/chat/headless/reference-store.ts +0 -285
  733. package/src/chat/headless/send-flow.ts +0 -347
  734. package/src/chat/headless/session-list.ts +0 -390
  735. package/src/chat/headless/sidebar/activity.ts +0 -179
  736. package/src/chat/headless/sidebar/badges.ts +0 -163
  737. package/src/chat/headless/sidebar/compaction.ts +0 -98
  738. package/src/chat/headless/sidebar/directory.ts +0 -819
  739. package/src/chat/headless/sidebar/dot-state.ts +0 -36
  740. package/src/chat/headless/sidebar/environment.ts +0 -70
  741. package/src/chat/headless/sidebar/host.ts +0 -41
  742. package/src/chat/headless/sidebar/index.ts +0 -16
  743. package/src/chat/headless/sidebar/labels.ts +0 -140
  744. package/src/chat/headless/sidebar/notifications.ts +0 -61
  745. package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
  746. package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
  747. package/src/chat/headless/sidebar/project-icons.ts +0 -116
  748. package/src/chat/headless/sidebar/rows.ts +0 -229
  749. package/src/chat/headless/sidebar/types.ts +0 -61
  750. package/src/chat/headless/sidebar/view.ts +0 -296
  751. package/src/chat/headless/site-icons.ts +0 -51
  752. package/src/chat/headless/smooth-stream.ts +0 -76
  753. package/src/chat/headless/store.ts +0 -62
  754. package/src/chat/headless/streams/actions.ts +0 -85
  755. package/src/chat/headless/streams/index.ts +0 -25
  756. package/src/chat/headless/streams/live-events.ts +0 -124
  757. package/src/chat/headless/streams/merge.ts +0 -60
  758. package/src/chat/headless/streams/pacer.ts +0 -189
  759. package/src/chat/headless/streams/prompt-previews.ts +0 -64
  760. package/src/chat/headless/streams/scheduler.ts +0 -36
  761. package/src/chat/headless/streams/selectors.ts +0 -76
  762. package/src/chat/headless/streams/session-streams.ts +0 -394
  763. package/src/chat/headless/streams/store.ts +0 -1107
  764. package/src/chat/headless/streams/transcript.ts +0 -41
  765. package/src/chat/headless/streams/types.ts +0 -84
  766. package/src/chat/headless/transcript/batch.ts +0 -429
  767. package/src/chat/headless/transcript/collapse.ts +0 -780
  768. package/src/chat/headless/transcript/fold-actions.ts +0 -269
  769. package/src/chat/headless/transcript/fold-attachments.ts +0 -78
  770. package/src/chat/headless/transcript/fold.ts +0 -382
  771. package/src/chat/headless/transcript/index.ts +0 -41
  772. package/src/chat/headless/transcript/nesting.ts +0 -73
  773. package/src/chat/headless/transcript/pairing.ts +0 -124
  774. package/src/chat/headless/transcript/rows.ts +0 -367
  775. package/src/chat/headless/transcript/run-failures.ts +0 -72
  776. package/src/chat/headless/transcript/select-stops.ts +0 -151
  777. package/src/chat/headless/transcript/tool-media.ts +0 -42
  778. package/src/chat/headless/transcript-host.ts +0 -180
  779. package/src/chat/headless/transcript-labels.ts +0 -12
  780. package/src/chat/headless/turn-labels.ts +0 -28
  781. package/src/chat/headless/turn-prompt.ts +0 -32
  782. package/src/chat/index.ts +0 -29
  783. package/src/chat/interactions/HostInteractions.tsx +0 -76
  784. package/src/chat/interactions/InboxPanel.tsx +0 -226
  785. package/src/chat/interactions/InteractionCard.tsx +0 -111
  786. package/src/chat/interactions/PlanCard.tsx +0 -186
  787. package/src/chat/interactions/QuestionField.tsx +0 -336
  788. package/src/chat/interactions/QuestionForm.tsx +0 -283
  789. package/src/chat/interactions/card-ui.tsx +0 -86
  790. package/src/chat/interactions/hooks.ts +0 -49
  791. package/src/chat/interactions/index.ts +0 -8
  792. package/src/chat/provider-color.ts +0 -71
  793. package/src/chat/rich-composer/MentionList.tsx +0 -238
  794. package/src/chat/rich-composer/RichComposer.tsx +0 -1036
  795. package/src/chat/rich-composer/badge-decorations.ts +0 -157
  796. package/src/chat/rich-composer/composer-controls.tsx +0 -102
  797. package/src/chat/rich-composer/composer-extensions.ts +0 -388
  798. package/src/chat/rich-composer/composer-keys.ts +0 -416
  799. package/src/chat/rich-composer/ghost-plugin.ts +0 -89
  800. package/src/chat/rich-composer/index.ts +0 -3
  801. package/src/chat/rich-composer/mention-popover.ts +0 -336
  802. package/src/chat/rich-composer/slash-completion.ts +0 -143
  803. package/src/chat/rich-composer/use-composer-bus.ts +0 -57
  804. package/src/chat/rich-composer/use-composer-editor.ts +0 -216
  805. package/src/chat/rich-composer/use-composer-sources.ts +0 -90
  806. package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
  807. package/src/chat/rich-composer/use-editor-handover.ts +0 -45
  808. package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
  809. package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
  810. package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
  811. package/src/chat/sidebar/MainSessionRow.tsx +0 -102
  812. package/src/chat/sidebar/ProjectIcon.tsx +0 -336
  813. package/src/chat/sidebar/RowChips.tsx +0 -98
  814. package/src/chat/sidebar/SessionSidebar.tsx +0 -805
  815. package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -41
  816. package/src/chat/sidebar/SidebarFooter.tsx +0 -234
  817. package/src/chat/sidebar/SidebarFrame.tsx +0 -154
  818. package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -231
  819. package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
  820. package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
  821. package/src/chat/sidebar/SidebarSessionRow.tsx +0 -293
  822. package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
  823. package/src/chat/sidebar/SpaceSwitcher.tsx +0 -232
  824. package/src/chat/sidebar/SpacesSection.tsx +0 -256
  825. package/src/chat/sidebar/index.ts +0 -92
  826. package/src/chat/sidebar/session-menu.ts +0 -437
  827. package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
  828. package/src/chat/sidebar/sidebar-live.tsx +0 -605
  829. package/src/chat/sidebar/use-main-session.ts +0 -32
  830. package/src/chat/sidebar/useCompactionProgress.ts +0 -24
  831. package/src/chat/sidebar/usePinnedProjects.ts +0 -36
  832. package/src/chat/sidebar/useSessionActivity.ts +0 -24
  833. package/src/chat/sidebar/useSessionBadges.ts +0 -26
  834. package/src/chat/sidebar/useSessionDirectoryView.ts +0 -86
  835. package/src/chat/sidebar/useSessionSearch.ts +0 -94
  836. package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -165
  837. package/src/chat/sidebar/useSidebarLabels.ts +0 -10
  838. package/src/chat/testing/composer.contract.ts +0 -532
  839. package/src/chat/testing/contract.ts +0 -634
  840. package/src/chat/testing/fixture-composer-chrome.ts +0 -178
  841. package/src/chat/testing/fixture-composer-host.ts +0 -147
  842. package/src/chat/testing/fixture-sidebar-host.ts +0 -99
  843. package/src/chat/testing/index.ts +0 -12
  844. package/src/chat/testing/sidebar.contract.ts +0 -196
  845. package/src/chat/transcript/BadgeMenu.tsx +0 -223
  846. package/src/chat/transcript/CardMarkdown.tsx +0 -92
  847. package/src/chat/transcript/ChipCard.tsx +0 -176
  848. package/src/chat/transcript/ChipCards.tsx +0 -100
  849. package/src/chat/transcript/DiffLines.tsx +0 -122
  850. package/src/chat/transcript/EarlierHistory.tsx +0 -136
  851. package/src/chat/transcript/EditDiffBlock.tsx +0 -171
  852. package/src/chat/transcript/FileChip.tsx +0 -350
  853. package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
  854. package/src/chat/transcript/InlineChipText.tsx +0 -57
  855. package/src/chat/transcript/InteractionToolBody.tsx +0 -193
  856. package/src/chat/transcript/LazyRow.tsx +0 -311
  857. package/src/chat/transcript/PromptEcho.tsx +0 -171
  858. package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
  859. package/src/chat/transcript/ProseMarkdown.tsx +0 -165
  860. package/src/chat/transcript/ReferenceText.tsx +0 -193
  861. package/src/chat/transcript/SelectCursor.tsx +0 -118
  862. package/src/chat/transcript/SelectTurnHint.tsx +0 -81
  863. package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
  864. package/src/chat/transcript/SubagentBlock.tsx +0 -218
  865. package/src/chat/transcript/TranscriptRow.tsx +0 -356
  866. package/src/chat/transcript/TranscriptSearch.tsx +0 -171
  867. package/src/chat/transcript/TurnMenu.tsx +0 -217
  868. package/src/chat/transcript/actions.tsx +0 -77
  869. package/src/chat/transcript/badges.tsx +0 -152
  870. package/src/chat/transcript/chip-details.ts +0 -169
  871. package/src/chat/transcript/chip-resolve.ts +0 -56
  872. package/src/chat/transcript/fold-attachments.tsx +0 -221
  873. package/src/chat/transcript/fold-status.tsx +0 -112
  874. package/src/chat/transcript/fold-worker.tsx +0 -160
  875. package/src/chat/transcript/fold.tsx +0 -520
  876. package/src/chat/transcript/frame.tsx +0 -326
  877. package/src/chat/transcript/index.ts +0 -65
  878. package/src/chat/transcript/markdown-cache.ts +0 -70
  879. package/src/chat/transcript/markdown-context.ts +0 -52
  880. package/src/chat/transcript/markdown.tsx +0 -282
  881. package/src/chat/transcript/messages.tsx +0 -168
  882. package/src/chat/transcript/notices.tsx +0 -508
  883. package/src/chat/transcript/prompt-lines.tsx +0 -55
  884. package/src/chat/transcript/prompt.tsx +0 -258
  885. package/src/chat/transcript/prose.tsx +0 -171
  886. package/src/chat/transcript/references.ts +0 -104
  887. package/src/chat/transcript/remark-references.ts +0 -157
  888. package/src/chat/transcript/remark-refs.ts +0 -176
  889. package/src/chat/transcript/renderer-slots.tsx +0 -35
  890. package/src/chat/transcript/renderers.tsx +0 -241
  891. package/src/chat/transcript/row-estimate.ts +0 -158
  892. package/src/chat/transcript/run-rows.tsx +0 -291
  893. package/src/chat/transcript/site-icons.ts +0 -27
  894. package/src/chat/transcript/thumbnails.ts +0 -146
  895. package/src/chat/transcript/tool-batch.tsx +0 -111
  896. package/src/chat/transcript/tool-details.tsx +0 -77
  897. package/src/chat/transcript/tool-media.tsx +0 -132
  898. package/src/chat/transcript/tool-parts.tsx +0 -358
  899. package/src/chat/transcript/tool-row.tsx +0 -489
  900. package/src/chat/transcript/turn-commands.ts +0 -101
  901. package/src/chat/transcript/use-transcript-rows.ts +0 -195
  902. package/src/chat/transcript/useComposerSearch.ts +0 -106
  903. package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
  904. package/src/chat/transcript/useSettledReveal.ts +0 -57
  905. package/src/chat/transcript/useStickToBottom.ts +0 -600
  906. package/src/chat/transcript/useTranscriptFind.ts +0 -70
  907. package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
  908. package/src/chat/transcript/useTranscriptScroll.ts +0 -162
  909. package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
  910. package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
  911. package/src/chat/transcript/useWheelHoverPause.ts +0 -79
  912. package/src/chat/transcript/user-bash.tsx +0 -134
  913. package/src/chat/useChatLabels.ts +0 -14
  914. package/src/code/CodeHighlightProvider.tsx +0 -87
  915. package/src/code/HighlightedCode.tsx +0 -150
  916. package/src/code/code-themes.ts +0 -34
  917. package/src/code/editor/CodeCompletion.tsx +0 -719
  918. package/src/code/editor/CodeEditor.tsx +0 -480
  919. package/src/code/editor/CodeHover.tsx +0 -428
  920. package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
  921. package/src/code/editor/DiagnosticsChip.tsx +0 -85
  922. package/src/code/editor/DiffView.tsx +0 -197
  923. package/src/code/editor/EditorColumn.tsx +0 -256
  924. package/src/code/editor/FileIcon.tsx +0 -89
  925. package/src/code/editor/FileTabPill.tsx +0 -101
  926. package/src/code/editor/FileTree.tsx +0 -414
  927. package/src/code/editor/FileView.tsx +0 -462
  928. package/src/code/editor/HighlightWorkers.tsx +0 -84
  929. package/src/code/editor/LanguageEditor.tsx +0 -210
  930. package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
  931. package/src/code/editor/diagnostics.ts +0 -140
  932. package/src/code/editor/edit-session.ts +0 -28
  933. package/src/code/editor/environment.tsx +0 -88
  934. package/src/code/editor/find/FindBar.tsx +0 -126
  935. package/src/code/editor/find/find-highlight.ts +0 -138
  936. package/src/code/editor/find/find-model.ts +0 -123
  937. package/src/code/editor/find/settle-scroll.ts +0 -77
  938. package/src/code/editor/find/useFind.ts +0 -203
  939. package/src/code/editor/fs-adapter.ts +0 -37
  940. package/src/code/editor/index.ts +0 -36
  941. package/src/code/editor/language.ts +0 -31
  942. package/src/code/editor/patch-parse.ts +0 -176
  943. package/src/code/editor/patch-parse.worker.ts +0 -12
  944. package/src/code/editor/pierre-theme.ts +0 -154
  945. package/src/code/editor/prime-diff.ts +0 -37
  946. package/src/code/editor/reveal.ts +0 -58
  947. package/src/code/editor/scroll-reach.ts +0 -28
  948. package/src/code/editor/useCodeDocument.ts +0 -226
  949. package/src/code/editor/useDefinition.ts +0 -159
  950. package/src/code/editor/useDetachCleanup.ts +0 -36
  951. package/src/code/editor/useFileDocument.ts +0 -87
  952. package/src/code/editor/useRevealLine.ts +0 -92
  953. package/src/code/editor/word-at.ts +0 -145
  954. package/src/code/highlight.worker.ts +0 -19
  955. package/src/code/highlighter.ts +0 -185
  956. package/src/code/shiki-theme.ts +0 -47
  957. package/src/components/BrandMark.tsx +0 -107
  958. package/src/components/Breadcrumb.tsx +0 -105
  959. package/src/components/BrowserChrome.tsx +0 -189
  960. package/src/components/BrowserSignIn.tsx +0 -210
  961. package/src/components/ChoiceCards.tsx +0 -170
  962. package/src/components/CodeFrame.tsx +0 -209
  963. package/src/components/ConfirmDialog.tsx +0 -119
  964. package/src/components/CopyButton.tsx +0 -85
  965. package/src/components/EditableTitle.tsx +0 -199
  966. package/src/components/ErrorBoundary.tsx +0 -208
  967. package/src/components/Form.tsx +0 -589
  968. package/src/components/Highlighted.tsx +0 -68
  969. package/src/components/HowItWorks.tsx +0 -123
  970. package/src/components/IconButton.tsx +0 -101
  971. package/src/components/IconToggle.tsx +0 -71
  972. package/src/components/Keycap.tsx +0 -334
  973. package/src/components/Lightbox.tsx +0 -257
  974. package/src/components/LoadError.tsx +0 -45
  975. package/src/components/MediaNav.tsx +0 -85
  976. package/src/components/Menu.tsx +0 -435
  977. package/src/components/Overlay.tsx +0 -327
  978. package/src/components/PanelEmpty.tsx +0 -80
  979. package/src/components/PanelRows.tsx +0 -107
  980. package/src/components/PreviewWindow.tsx +0 -53
  981. package/src/components/ReorderTabs.tsx +0 -103
  982. package/src/components/RowActionsMenu.tsx +0 -383
  983. package/src/components/SegmentSpinner.tsx +0 -88
  984. package/src/components/Segmented.tsx +0 -126
  985. package/src/components/StepFrame.tsx +0 -151
  986. package/src/components/Stepper.tsx +0 -157
  987. package/src/components/Surface.tsx +0 -191
  988. package/src/components/SwatchPicker.tsx +0 -147
  989. package/src/components/SwitchGlyph.tsx +0 -56
  990. package/src/components/TabPill.tsx +0 -188
  991. package/src/components/ThemeThumb.tsx +0 -52
  992. package/src/components/ToggleCard.tsx +0 -120
  993. package/src/components/Tooltip.tsx +0 -288
  994. package/src/components/ZoomableImage.tsx +0 -322
  995. package/src/components/button.ts +0 -120
  996. package/src/components/floating/FloatingSurface.tsx +0 -158
  997. package/src/components/floating/HoverCard.tsx +0 -143
  998. package/src/components/floating/Popover.tsx +0 -166
  999. package/src/components/floating/useAnchoredPosition.ts +0 -186
  1000. package/src/components/floating/usePopover.ts +0 -158
  1001. package/src/components/image-clipboard.ts +0 -70
  1002. package/src/components/keyboard-layout.ts +0 -115
  1003. package/src/components/palette/PaletteList.tsx +0 -432
  1004. package/src/components/palette/PalettePanel.tsx +0 -338
  1005. package/src/components/palette/palette-layout.ts +0 -86
  1006. package/src/components/report-error.ts +0 -142
  1007. package/src/components/zoom.ts +0 -133
  1008. package/src/files/CodeViewer.tsx +0 -289
  1009. package/src/files/DiffFileViewer.tsx +0 -143
  1010. package/src/files/DiffsTab.tsx +0 -590
  1011. package/src/files/EditorColumn.tsx +0 -453
  1012. package/src/files/FilesDiagnosticsChip.tsx +0 -32
  1013. package/src/files/FilesProvider.tsx +0 -58
  1014. package/src/files/FilesTab.tsx +0 -441
  1015. package/src/files/MediaDiff.tsx +0 -61
  1016. package/src/files/MediaView.tsx +0 -170
  1017. package/src/files/ReviewDraft.tsx +0 -88
  1018. package/src/files/ReviewableDiff.tsx +0 -72
  1019. package/src/files/SearchPanel.tsx +0 -325
  1020. package/src/files/TreeColumn.tsx +0 -229
  1021. package/src/files/code-excerpt.ts +0 -265
  1022. package/src/files/code-menu.ts +0 -53
  1023. package/src/files/drafts-store.ts +0 -159
  1024. package/src/files/file-actions.ts +0 -152
  1025. package/src/files/headless/editor-prefs.ts +0 -230
  1026. package/src/files/headless/entries.ts +0 -172
  1027. package/src/files/headless/fixture-host.ts +0 -260
  1028. package/src/files/headless/host.ts +0 -387
  1029. package/src/files/headless/index.ts +0 -14
  1030. package/src/files/headless/labels.ts +0 -123
  1031. package/src/files/headless/lsp-edits.ts +0 -40
  1032. package/src/files/headless/media.ts +0 -57
  1033. package/src/files/headless/name-match.ts +0 -38
  1034. package/src/files/headless/search.ts +0 -23
  1035. package/src/files/headless/view.ts +0 -114
  1036. package/src/files/headless/workspace-diff.ts +0 -82
  1037. package/src/files/index.ts +0 -24
  1038. package/src/files/lazy-tabs.tsx +0 -41
  1039. package/src/files/tab-hooks.ts +0 -37
  1040. package/src/files/testing/contract.ts +0 -279
  1041. package/src/files/testing/demo.ts +0 -36
  1042. package/src/files/testing/index.ts +0 -7
  1043. package/src/files/useCodeReview.tsx +0 -177
  1044. package/src/files/useDiagnostics.ts +0 -59
  1045. package/src/files/useDiagnosticsRun.ts +0 -86
  1046. package/src/files/useEntryActions.ts +0 -280
  1047. package/src/files/useFilesDiagnostics.ts +0 -51
  1048. package/src/files/useFilesLabels.ts +0 -14
  1049. package/src/files/useFolderChanges.ts +0 -38
  1050. package/src/files/useLsp.ts +0 -178
  1051. package/src/files/useOpenFiles.ts +0 -402
  1052. package/src/files/useWorkspace.ts +0 -148
  1053. package/src/files/working-tree-diff.ts +0 -142
  1054. package/src/git/BranchMenu.tsx +0 -981
  1055. package/src/git/GitBar.tsx +0 -286
  1056. package/src/git/GitProvider.tsx +0 -50
  1057. package/src/git/ImportRepoDialog.tsx +0 -381
  1058. package/src/git/MoveSessionDialog.tsx +0 -394
  1059. package/src/git/RemoteFolderPicker.tsx +0 -475
  1060. package/src/git/SyncChip.tsx +0 -275
  1061. package/src/git/WherePicker.tsx +0 -358
  1062. package/src/git/headless/environment.ts +0 -132
  1063. package/src/git/headless/host.ts +0 -353
  1064. package/src/git/headless/index.ts +0 -14
  1065. package/src/git/headless/labels.ts +0 -230
  1066. package/src/git/headless/move.ts +0 -101
  1067. package/src/git/headless/remote-clone.ts +0 -44
  1068. package/src/git/headless/status-reads.ts +0 -77
  1069. package/src/git/headless/switcher.ts +0 -215
  1070. package/src/git/headless/sync.ts +0 -71
  1071. package/src/git/index.ts +0 -17
  1072. package/src/git/testing/contract.ts +0 -551
  1073. package/src/git/testing/index.ts +0 -537
  1074. package/src/git/useEnvironmentChoices.ts +0 -50
  1075. package/src/git/useGitBar.ts +0 -180
  1076. package/src/hooks/keyed-store.ts +0 -65
  1077. package/src/hooks/useHydrated.ts +0 -16
  1078. package/src/hooks/useMinuteTick.ts +0 -49
  1079. package/src/hooks/useNearViewport.ts +0 -111
  1080. package/src/hooks/usePersistedState.ts +0 -98
  1081. package/src/hooks/useResizeDrag.ts +0 -240
  1082. package/src/hooks/useTabDrag.ts +0 -88
  1083. package/src/index.ts +0 -118
  1084. package/src/keybindings/KeyCommands.tsx +0 -123
  1085. package/src/keybindings/KeyHint.tsx +0 -78
  1086. package/src/keybindings/KeybindingsProvider.tsx +0 -231
  1087. package/src/keybindings/headless/catalog.ts +0 -360
  1088. package/src/keybindings/headless/commands.ts +0 -77
  1089. package/src/keybindings/headless/fixture-host.ts +0 -51
  1090. package/src/keybindings/headless/host.ts +0 -29
  1091. package/src/keybindings/headless/index.ts +0 -13
  1092. package/src/keybindings/headless/key-scope.ts +0 -91
  1093. package/src/keybindings/headless/labels.ts +0 -14
  1094. package/src/keybindings/headless/overrides.ts +0 -64
  1095. package/src/keybindings/index.ts +0 -14
  1096. package/src/keybindings/load-once.ts +0 -11
  1097. package/src/keybindings/match.ts +0 -48
  1098. package/src/keybindings/testing/contract.ts +0 -139
  1099. package/src/keybindings/testing/index.ts +0 -6
  1100. package/src/keybindings/useHelpKey.ts +0 -35
  1101. package/src/keybindings/useKeybindingsLabels.ts +0 -14
  1102. package/src/labels.tsx +0 -175
  1103. package/src/machines/AddServerForm.tsx +0 -151
  1104. package/src/machines/Banners.tsx +0 -172
  1105. package/src/machines/DaemonMenu.tsx +0 -413
  1106. package/src/machines/HostCapabilities.tsx +0 -245
  1107. package/src/machines/HostSignIn.tsx +0 -63
  1108. package/src/machines/HostSyncPanel.tsx +0 -275
  1109. package/src/machines/HostsSection.tsx +0 -312
  1110. package/src/machines/MachinesProvider.tsx +0 -164
  1111. package/src/machines/ServerCard.tsx +0 -347
  1112. package/src/machines/ServerMachinesPanel.tsx +0 -547
  1113. package/src/machines/ServerUpdatePanel.tsx +0 -160
  1114. package/src/machines/SyncAccounts.tsx +0 -148
  1115. package/src/machines/SyncMarker.tsx +0 -87
  1116. package/src/machines/SyncOutcomeBadge.tsx +0 -84
  1117. package/src/machines/TokensPanel.tsx +0 -249
  1118. package/src/machines/headless/fixture-host.ts +0 -519
  1119. package/src/machines/headless/fixtures.ts +0 -164
  1120. package/src/machines/headless/host.ts +0 -381
  1121. package/src/machines/headless/index.ts +0 -13
  1122. package/src/machines/headless/labels.ts +0 -356
  1123. package/src/machines/headless/messages.ts +0 -197
  1124. package/src/machines/headless/presence.ts +0 -110
  1125. package/src/machines/headless/settings-focus.ts +0 -25
  1126. package/src/machines/headless/stores.ts +0 -137
  1127. package/src/machines/headless/sync.ts +0 -207
  1128. package/src/machines/index.ts +0 -29
  1129. package/src/machines/settings-section.tsx +0 -37
  1130. package/src/machines/testing/contract.ts +0 -617
  1131. package/src/machines/testing/index.ts +0 -7
  1132. package/src/machines/testing/sync.contract.ts +0 -260
  1133. package/src/motion/SwapIcon.tsx +0 -29
  1134. package/src/motion/collapse.ts +0 -21
  1135. package/src/motion/grow.tsx +0 -86
  1136. package/src/motion/layout-animating.ts +0 -50
  1137. package/src/motion/presence.ts +0 -191
  1138. package/src/motion/provider.tsx +0 -63
  1139. package/src/motion/reduced.ts +0 -36
  1140. package/src/motion/roll.tsx +0 -131
  1141. package/src/motion/shimmer.ts +0 -15
  1142. package/src/motion/size.tsx +0 -192
  1143. package/src/motion/springs.ts +0 -413
  1144. package/src/motion/swap.tsx +0 -216
  1145. package/src/motion/title-text.tsx +0 -74
  1146. package/src/onboarding/ConnectProviderCard.tsx +0 -49
  1147. package/src/onboarding/OnboardingFlow.tsx +0 -176
  1148. package/src/onboarding/OnboardingProvider.tsx +0 -209
  1149. package/src/onboarding/OnboardingStepFrame.tsx +0 -80
  1150. package/src/onboarding/conversation.tsx +0 -179
  1151. package/src/onboarding/demos/autonomy.tsx +0 -154
  1152. package/src/onboarding/demos/extensions.tsx +0 -183
  1153. package/src/onboarding/demos/features.tsx +0 -447
  1154. package/src/onboarding/demos/how-it-works.tsx +0 -698
  1155. package/src/onboarding/demos/index.ts +0 -11
  1156. package/src/onboarding/demos/parts.tsx +0 -133
  1157. package/src/onboarding/demos/tour.tsx +0 -217
  1158. package/src/onboarding/headless/controller.ts +0 -110
  1159. package/src/onboarding/headless/fixture-host.ts +0 -269
  1160. package/src/onboarding/headless/fixtures.ts +0 -486
  1161. package/src/onboarding/headless/host.ts +0 -176
  1162. package/src/onboarding/headless/index.ts +0 -8
  1163. package/src/onboarding/headless/labels.ts +0 -280
  1164. package/src/onboarding/index.ts +0 -20
  1165. package/src/onboarding/marks.tsx +0 -69
  1166. package/src/onboarding/preview-attachments.ts +0 -39
  1167. package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -336
  1168. package/src/onboarding/skills/parts.tsx +0 -440
  1169. package/src/onboarding/steps/AutonomyStep.tsx +0 -128
  1170. package/src/onboarding/steps/ConnectStep.tsx +0 -104
  1171. package/src/onboarding/steps/ConnectorsStep.tsx +0 -226
  1172. package/src/onboarding/steps/ConversationStep.tsx +0 -131
  1173. package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
  1174. package/src/onboarding/steps/FeatureExample.tsx +0 -46
  1175. package/src/onboarding/steps/FeaturesStep.tsx +0 -88
  1176. package/src/onboarding/steps/ImportStep.tsx +0 -156
  1177. package/src/onboarding/steps/LookStep.tsx +0 -276
  1178. package/src/onboarding/steps/ReadyStep.tsx +0 -278
  1179. package/src/onboarding/steps/SkillsStep.tsx +0 -45
  1180. package/src/onboarding/steps/StepSection.tsx +0 -63
  1181. package/src/onboarding/steps/Tradeoff.tsx +0 -45
  1182. package/src/onboarding/steps/WelcomeStep.tsx +0 -147
  1183. package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
  1184. package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
  1185. package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
  1186. package/src/onboarding/steps/connect/ready-text.ts +0 -17
  1187. package/src/onboarding/steps/index.ts +0 -12
  1188. package/src/onboarding/steps/tasks.tsx +0 -84
  1189. package/src/onboarding/testing/contract.ts +0 -472
  1190. package/src/onboarding/testing/index.ts +0 -7
  1191. package/src/onboarding/tutorials.tsx +0 -45
  1192. package/src/onboarding/useSignIn.ts +0 -58
  1193. package/src/palette/CommandPalette.tsx +0 -59
  1194. package/src/palette/PaletteDialog.tsx +0 -186
  1195. package/src/palette/PaletteProvider.tsx +0 -149
  1196. package/src/palette/PaletteRows.tsx +0 -208
  1197. package/src/palette/app-sources.ts +0 -62
  1198. package/src/palette/headless/app-sources.ts +0 -515
  1199. package/src/palette/headless/gather.ts +0 -50
  1200. package/src/palette/headless/host.ts +0 -129
  1201. package/src/palette/headless/index.ts +0 -15
  1202. package/src/palette/headless/labels.ts +0 -124
  1203. package/src/palette/headless/rank-protocol.ts +0 -23
  1204. package/src/palette/headless/recents.ts +0 -35
  1205. package/src/palette/headless/session-sources.ts +0 -218
  1206. package/src/palette/headless/sources.ts +0 -313
  1207. package/src/palette/headless/store.ts +0 -105
  1208. package/src/palette/index.ts +0 -17
  1209. package/src/palette/rank.worker.ts +0 -30
  1210. package/src/palette/setup.ts +0 -19
  1211. package/src/palette/testing/contract.ts +0 -250
  1212. package/src/palette/testing/index.ts +0 -152
  1213. package/src/palette/useConversationSearch.ts +0 -115
  1214. package/src/palette/usePaletteController.ts +0 -229
  1215. package/src/palette/useRankedItems.ts +0 -122
  1216. package/src/path.ts +0 -165
  1217. package/src/server/demo-tools.ts +0 -34
  1218. package/src/server/environment.ts +0 -118
  1219. package/src/server/index.ts +0 -7
  1220. package/src/server/scripted-provider.ts +0 -174
  1221. package/src/server/sse-handler.ts +0 -457
  1222. package/src/server/testing/index.ts +0 -7
  1223. package/src/session/ArtifactRowChips.tsx +0 -251
  1224. package/src/session/ArtifactsPanel.tsx +0 -381
  1225. package/src/session/DiffFileTree.tsx +0 -173
  1226. package/src/session/PanelAttention.tsx +0 -131
  1227. package/src/session/ProviderUsageProvider.tsx +0 -106
  1228. package/src/session/QueueTab.tsx +0 -669
  1229. package/src/session/RunningWorkDialog.tsx +0 -178
  1230. package/src/session/SessionCacheFacts.tsx +0 -190
  1231. package/src/session/SessionDetailsDialog.tsx +0 -621
  1232. package/src/session/SessionHeader.tsx +0 -237
  1233. package/src/session/SessionProvider.tsx +0 -98
  1234. package/src/session/SessionShell.tsx +0 -77
  1235. package/src/session/SideChat.tsx +0 -316
  1236. package/src/session/TodoList.tsx +0 -123
  1237. package/src/session/TodosPanel.tsx +0 -278
  1238. package/src/session/TurnDetailsDialog.tsx +0 -299
  1239. package/src/session/UsagePanel.tsx +0 -222
  1240. package/src/session/WelcomeScreen.tsx +0 -578
  1241. package/src/session/headless/artifacts.ts +0 -101
  1242. package/src/session/headless/diff-tree.ts +0 -167
  1243. package/src/session/headless/fixture-host.ts +0 -331
  1244. package/src/session/headless/host.ts +0 -255
  1245. package/src/session/headless/index.ts +0 -22
  1246. package/src/session/headless/keyed.ts +0 -72
  1247. package/src/session/headless/labels.ts +0 -321
  1248. package/src/session/headless/queue-attachments.ts +0 -73
  1249. package/src/session/headless/queue.ts +0 -122
  1250. package/src/session/headless/running-work.ts +0 -85
  1251. package/src/session/headless/session-actions.ts +0 -198
  1252. package/src/session/headless/session-diffs.ts +0 -136
  1253. package/src/session/headless/side.ts +0 -63
  1254. package/src/session/headless/todos.ts +0 -62
  1255. package/src/session/headless/usage-format.ts +0 -280
  1256. package/src/session/headless/usage.ts +0 -380
  1257. package/src/session/index.ts +0 -29
  1258. package/src/session/testing/contract.ts +0 -579
  1259. package/src/session/testing/demo.ts +0 -209
  1260. package/src/session/testing/index.ts +0 -7
  1261. package/src/session/useSessionLabels.ts +0 -14
  1262. package/src/session/useUsageSummary.ts +0 -82
  1263. package/src/settings/SettingsHeadingText.tsx +0 -54
  1264. package/src/settings/SettingsHostSwitcher.tsx +0 -93
  1265. package/src/settings/SettingsNav.tsx +0 -116
  1266. package/src/settings/SettingsProvider.tsx +0 -127
  1267. package/src/settings/SettingsRowsPage.tsx +0 -217
  1268. package/src/settings/SettingsShell.tsx +0 -336
  1269. package/src/settings/SettingsTutorial.tsx +0 -55
  1270. package/src/settings/headless/catalog.ts +0 -553
  1271. package/src/settings/headless/claude-import.ts +0 -61
  1272. package/src/settings/headless/enabled.ts +0 -44
  1273. package/src/settings/headless/fixture-accounts.ts +0 -260
  1274. package/src/settings/headless/fixture-host.ts +0 -162
  1275. package/src/settings/headless/fixture-models.ts +0 -51
  1276. package/src/settings/headless/fixture-performance.ts +0 -350
  1277. package/src/settings/headless/fixture-sections.ts +0 -323
  1278. package/src/settings/headless/host.ts +0 -125
  1279. package/src/settings/headless/index.ts +0 -22
  1280. package/src/settings/headless/labels.ts +0 -63
  1281. package/src/settings/headless/layout-sections.ts +0 -41
  1282. package/src/settings/headless/layout.ts +0 -723
  1283. package/src/settings/headless/mcp.ts +0 -319
  1284. package/src/settings/headless/models.ts +0 -51
  1285. package/src/settings/headless/page-counts.ts +0 -40
  1286. package/src/settings/headless/performance.ts +0 -524
  1287. package/src/settings/headless/providers.ts +0 -117
  1288. package/src/settings/headless/registry.ts +0 -52
  1289. package/src/settings/headless/resource.ts +0 -75
  1290. package/src/settings/headless/search.ts +0 -142
  1291. package/src/settings/headless/sections-host.ts +0 -307
  1292. package/src/settings/index.ts +0 -32
  1293. package/src/settings/rows.tsx +0 -152
  1294. package/src/settings/section.tsx +0 -165
  1295. package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
  1296. package/src/settings/sections/appearance/labels.ts +0 -77
  1297. package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
  1298. package/src/settings/sections/claude-import/labels.ts +0 -42
  1299. package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
  1300. package/src/settings/sections/descriptors.tsx +0 -261
  1301. package/src/settings/sections/editor/EditorSection.tsx +0 -521
  1302. package/src/settings/sections/editor/labels.ts +0 -84
  1303. package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
  1304. package/src/settings/sections/enabled-list/labels.ts +0 -37
  1305. package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
  1306. package/src/settings/sections/environments/labels.ts +0 -31
  1307. package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -206
  1308. package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -743
  1309. package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -480
  1310. package/src/settings/sections/extensions/create-labels.ts +0 -31
  1311. package/src/settings/sections/extensions/labels.ts +0 -38
  1312. package/src/settings/sections/extensions/options-labels.ts +0 -31
  1313. package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -374
  1314. package/src/settings/sections/host-catalog/labels.ts +0 -40
  1315. package/src/settings/sections/index.ts +0 -58
  1316. package/src/settings/sections/instructions/InstructionsSection.tsx +0 -381
  1317. package/src/settings/sections/instructions/labels.ts +0 -33
  1318. package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
  1319. package/src/settings/sections/keybindings/labels.ts +0 -72
  1320. package/src/settings/sections/keybindings/rows.ts +0 -103
  1321. package/src/settings/sections/logs/LogsSection.tsx +0 -153
  1322. package/src/settings/sections/logs/labels.ts +0 -20
  1323. package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
  1324. package/src/settings/sections/mcp/McpSection.tsx +0 -358
  1325. package/src/settings/sections/mcp/McpServerRow.tsx +0 -403
  1326. package/src/settings/sections/mcp/labels.ts +0 -193
  1327. package/src/settings/sections/models/AgentDefaults.tsx +0 -365
  1328. package/src/settings/sections/models/ModelListPicker.tsx +0 -265
  1329. package/src/settings/sections/models/ModelPickField.tsx +0 -220
  1330. package/src/settings/sections/models/ModelRows.tsx +0 -381
  1331. package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
  1332. package/src/settings/sections/models/labels.ts +0 -119
  1333. package/src/settings/sections/models/model-test.tsx +0 -125
  1334. package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
  1335. package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
  1336. package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
  1337. package/src/settings/sections/performance/labels.ts +0 -114
  1338. package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
  1339. package/src/settings/sections/plugins/PluginsSection.tsx +0 -148
  1340. package/src/settings/sections/plugins/labels.ts +0 -23
  1341. package/src/settings/sections/providers/CredentialSources.tsx +0 -237
  1342. package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
  1343. package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
  1344. package/src/settings/sections/providers/ServerSignIn.tsx +0 -136
  1345. package/src/settings/sections/providers/labels.ts +0 -160
  1346. package/src/settings/sections/shared/catalog.tsx +0 -246
  1347. package/src/settings/sections/shared/labels.ts +0 -31
  1348. package/src/settings/sections/skills/SkillList.tsx +0 -494
  1349. package/src/settings/sections/skills/SkillsSection.tsx +0 -249
  1350. package/src/settings/sections/skills/labels.ts +0 -54
  1351. package/src/settings/sections/use-section-labels.ts +0 -10
  1352. package/src/settings/testing/accounts-demo.ts +0 -110
  1353. package/src/settings/testing/accounts.contract.ts +0 -319
  1354. package/src/settings/testing/claude-import.contract.ts +0 -93
  1355. package/src/settings/testing/contract.ts +0 -192
  1356. package/src/settings/testing/extension-options.contract.ts +0 -163
  1357. package/src/settings/testing/index.ts +0 -11
  1358. package/src/settings/testing/models.contract.ts +0 -135
  1359. package/src/settings/testing/performance.contract.ts +0 -219
  1360. package/src/settings/testing/sections.contract.ts +0 -306
  1361. package/src/terminal/HostTerminalSurface.tsx +0 -911
  1362. package/src/terminal/TerminalDrawer.tsx +0 -228
  1363. package/src/terminal/TerminalPanel.tsx +0 -740
  1364. package/src/terminal/TerminalProvider.tsx +0 -201
  1365. package/src/terminal/TerminalSurface.tsx +0 -262
  1366. package/src/terminal/box-glyphs.ts +0 -333
  1367. package/src/terminal/ghostty.ts +0 -116
  1368. package/src/terminal/grid-size.ts +0 -46
  1369. package/src/terminal/headless/fixture-host.ts +0 -250
  1370. package/src/terminal/headless/host.ts +0 -99
  1371. package/src/terminal/headless/index.ts +0 -11
  1372. package/src/terminal/headless/labels.ts +0 -69
  1373. package/src/terminal/headless/layout.ts +0 -57
  1374. package/src/terminal/headless/links.ts +0 -227
  1375. package/src/terminal/headless/order.ts +0 -28
  1376. package/src/terminal/headless/output-cursor.ts +0 -66
  1377. package/src/terminal/headless/recent.ts +0 -20
  1378. package/src/terminal/headless/replay.ts +0 -45
  1379. package/src/terminal/headless/scope.ts +0 -60
  1380. package/src/terminal/headless/store.ts +0 -621
  1381. package/src/terminal/index.ts +0 -40
  1382. package/src/terminal/keys.ts +0 -34
  1383. package/src/terminal/testing/contract.ts +0 -274
  1384. package/src/terminal/testing/demo.ts +0 -40
  1385. package/src/terminal/testing/index.ts +0 -7
  1386. package/src/terminal/theme.ts +0 -110
  1387. package/src/terminal/useTerminalLabels.ts +0 -14
  1388. package/src/theme/accents.ts +0 -46
  1389. package/src/theme/color.ts +0 -450
  1390. package/src/theme/css-vars.ts +0 -187
  1391. package/src/theme/derive.ts +0 -700
  1392. package/src/theme/from-theme.ts +0 -52
  1393. package/src/theme/stylesheet.ts +0 -55
  1394. package/src/theme/themes.ts +0 -767
  1395. package/src/theme/without-transitions.ts +0 -18
  1396. package/src/uno.ts +0 -167
  1397. package/src/workspace/LayoutBudget.tsx +0 -143
  1398. package/src/workspace/PanelContentView.tsx +0 -335
  1399. package/src/workspace/PanelGroups.tsx +0 -249
  1400. package/src/workspace/PanelStrip.tsx +0 -307
  1401. package/src/workspace/SidePanel.tsx +0 -192
  1402. package/src/workspace/TabParking.tsx +0 -111
  1403. package/src/workspace/WorkspaceProvider.tsx +0 -554
  1404. package/src/workspace/dnd/engine.ts +0 -371
  1405. package/src/workspace/dnd/hooks.ts +0 -72
  1406. package/src/workspace/dnd/index.ts +0 -57
  1407. package/src/workspace/dnd/parking.tsx +0 -181
  1408. package/src/workspace/frame-motion.ts +0 -160
  1409. package/src/workspace/headless/contents.ts +0 -125
  1410. package/src/workspace/headless/host.ts +0 -118
  1411. package/src/workspace/headless/index.ts +0 -33
  1412. package/src/workspace/headless/labels.ts +0 -34
  1413. package/src/workspace/headless/layout-memory.ts +0 -649
  1414. package/src/workspace/headless/layouts.ts +0 -224
  1415. package/src/workspace/headless/open-target.ts +0 -125
  1416. package/src/workspace/headless/ops.ts +0 -163
  1417. package/src/workspace/headless/panel-focus.ts +0 -58
  1418. package/src/workspace/headless/panel-tree.ts +0 -259
  1419. package/src/workspace/headless/resolve.ts +0 -146
  1420. package/src/workspace/headless/reveal-at.ts +0 -27
  1421. package/src/workspace/headless/strip-drop.ts +0 -81
  1422. package/src/workspace/headless/tree.ts +0 -480
  1423. package/src/workspace/headless/view.ts +0 -159
  1424. package/src/workspace/index.ts +0 -22
  1425. package/src/workspace/panel-group-keys.ts +0 -36
  1426. package/src/workspace/panel-visibility.ts +0 -28
  1427. package/src/workspace/tab-scopes.ts +0 -245
  1428. package/src/workspace/testing/contract.ts +0 -282
  1429. package/src/workspace/testing/index.ts +0 -140
  1430. package/src/workspace/use-split-drag.ts +0 -73
  1431. package/src/workspace/useScopeLayout.ts +0 -26
  1432. package/src/workspace/useViewport.ts +0 -22
  1433. package/src/workspace/useWorkspaceLabels.ts +0 -14
  1434. package/src/workspace/workspace-key-commands.ts +0 -108
  1435. /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
@@ -1,1036 +0,0 @@
1
- /**
2
- * The desktop app's rich composer: a Tiptap editor set in the chatbox card,
3
- * with `@` `/` `#` and extension completions, typed badges, inline ghost
4
- * text and the next-prompt suggestion, shell (`!`) and transcript-search
5
- * (`?`) modes, ↑/↓ prompt history, staged attachments, the shared
6
- * per-session draft and the composer bus. Data comes from `ComposerHost`
7
- * (`useComposerHost`); sending is the app's (`onSend`).
8
- *
9
- * Its modules: `use-composer-editor.ts` (the editor: `composer-extensions.ts`,
10
- * `composer-keys.ts`), `use-ghost-lifecycle.ts`, `use-draft-mirror.ts`,
11
- * `use-composer-sources.ts`, `use-composer-bus.ts`, `use-staged-attachments.ts`,
12
- * `composer-controls.tsx`.
13
- */
14
- import { EditorContent, useEditorState, type Editor } from '@tiptap/react';
15
- import {
16
- type ChangeEvent,
17
- type ComponentType,
18
- type CSSProperties,
19
- type MouseEvent as ReactMouseEvent,
20
- type ReactNode,
21
- useEffect,
22
- useLayoutEffect,
23
- useMemo,
24
- useRef,
25
- useState,
26
- } from 'react';
27
- import { createSkillsCompletionProvider, type InlineGhost, uniqueSkillNamesFromReferences } from 'zidane/chat/pure';
28
-
29
- import { useLightbox } from '../../components/Lightbox';
30
- import { basename } from '../../path';
31
- import { AttachmentNotices, attachmentLightboxItems } from '../composer/attachments';
32
- import { type AttachmentLabelFn, AttachmentRow } from '../composer/AttachmentTiles';
33
- import { useComposerHost, useComposerLabels } from '../composer/ComposerHostProvider';
34
- import { usePromptHistory } from '../composer/PromptHistoryProvider';
35
- import { plainTextToDocJson } from '../composer/prompt-history-nav';
36
- import { composeSubmitText, type ComposerMode, unsentDraft } from '../headless/composer-modes';
37
- import { findCommand } from '../headless/composer/commands';
38
- import { draftTextToDocJson } from '../headless/composer/draft-sync';
39
- import { editorJsonToMarkdown, type JsonNode } from '../headless/composer/editor-markdown';
40
- import type { GhostController, PromptGhostOffer } from '../headless/composer/ghost-autocomplete';
41
- import type { ComposerAttachment, ComposerCommandArgs } from '../headless/composer/host';
42
- import type { ChatSiteIcons } from '../headless/transcript-host';
43
- import type { TextPreviewSlotProps } from '../transcript/renderers';
44
- import { badgeDecorationsKey, createBadgeDecorationsPlugin, refreshBadgeDecorations } from './badge-decorations';
45
- import { MODE_CHIP, modeChipTone, PlusButton, SendStopButton } from './composer-controls';
46
- import { ghostTextPluginKey } from './ghost-plugin';
47
- import { createPopoverGate } from './mention-popover';
48
- import { useComposerBus } from './use-composer-bus';
49
- import { useComposerEditor } from './use-composer-editor';
50
- import { useComposerSources } from './use-composer-sources';
51
- import { serializeDraftText, useDraftMirror } from './use-draft-mirror';
52
- import { type GhostLifecycle, useGhostLifecycle, useSharedGhost } from './use-ghost-lifecycle';
53
- import { usePromptGhost } from './use-prompt-ghost';
54
- import { useStagedAttachments } from './use-staged-attachments';
55
-
56
- /**
57
- * Once-latch for the `useEditorState` selector's `getText()` catch —
58
- * see the comment at the catch site. Module-level (not a ref) because
59
- * the selector can run before any render commits, and one warning per
60
- * app lifetime is the point.
61
- */
62
- let warnedEditorGetText = false;
63
-
64
- const NO_ARGS: ReadonlySet<string> = new Set();
65
-
66
- /** Props for {@link RichComposer}. */
67
- export interface RichComposerProps {
68
- /** No folder picked: read-only, with its own placeholder. */
69
- disabled: boolean;
70
- /** The folder the session runs in (`''`: none; `null`: none picked yet). */
71
- folderPath: string | null;
72
-
73
- /**
74
- * Where `@` file mentions list from, when it isn't `folderPath`: a sandbox
75
- * session's virtual root (`SidebarSession.workspace`).
76
- */
77
- fileRoot?: string;
78
- /** The session the composer writes to (`null`: a new chat). */
79
- activeSessionId?: string | null;
80
-
81
- /**
82
- * The server the session (or the draft) runs on: `/` commands, their
83
- * arguments and the ghost text come from it; this window's extension
84
- * popups don't apply there. Absent = This computer.
85
- */
86
- hostId?: string | null;
87
-
88
- /** When true, the send button is replaced by a stop button that calls `onStop`. */
89
- running?: boolean;
90
- /** Stops the run. */
91
- onStop?: () => void;
92
- /** Sends a prompt. Rejecting puts the prompt back in an empty composer. */
93
- onSend: (
94
- text: string,
95
- attachments: ComposerAttachment[],
96
- skills: string[],
97
- opts?: { keepDraft?: boolean },
98
- ) => void | Promise<void>;
99
-
100
- /**
101
- * Rendered next to the `+` attachment button — typically the inline
102
- * AgentPicker. Kept as a slot so the Chatbox doesn't need to know
103
- * which app-level controls the user wants inline.
104
- */
105
- leadingActions?: React.ReactNode;
106
-
107
- /**
108
- * Rendered on the right side of the controls row, immediately before
109
- * the Send / Stop button — the per-session context gauge + cost pill
110
- * cluster lives here. Slot keeps Chatbox agnostic of the actual
111
- * pills (App.tsx owns the state, Center.tsx threads the node in).
112
- * Children are responsible for their own collapse behavior; the
113
- * Chatbox surface declares a CSS container so container queries on
114
- * descendants can react to the prompt's inline-size.
115
- */
116
- trailingActions?: React.ReactNode;
117
-
118
- /**
119
- * The badge strip (`ConversationBadges`, the kit's `ComposerBadges`): the
120
- * band at the top of the tray ring, above the card, the git bar's mirror.
121
- * Built by `ConversationComposer`, so a keystroke here never re-renders it.
122
- */
123
- badges?: React.ReactNode;
124
-
125
- /*
126
- * ---- `?` transcript-search mode (TUI parity) --------------------
127
- * The Chatbox owns the MODE (entered by typing `?` into an empty
128
- * composer, exited by Esc / Backspace-at-start); the host owns the
129
- * search ENGINE (`useTranscriptSearch` needs the transcript's scroll
130
- * container + events, which live in Center). Query changes stream
131
- * out through `onSearchQueryChange` (`null` = mode exited), match
132
- * hops go through `onSearchNavigate`, and the counter state comes
133
- * back in as `searchStatus`.
134
- */
135
- /** The search engine's counter while in search mode: matches, whether capped, the active one, whether a query is typed. */
136
- searchStatus?: { count: number; capped: boolean; activeIndex: number; hasNeedle: boolean } | null;
137
- /** The search query as typed (`null`: search mode exited). */
138
- onSearchQueryChange?: (query: string | null) => void;
139
- /** Hops to the next (`1`) or previous (`-1`) match. */
140
- onSearchNavigate?: (direction: 1 | -1) => void;
141
-
142
- /**
143
- * True while the ⌘F overlay is open. The overlay and the composer
144
- * mode drive the same document-wide highlight registry, so opening
145
- * the overlay force-exits the composer's search mode.
146
- */
147
- searchOverlayOpen?: boolean;
148
-
149
- /**
150
- * Shared-search application (daemon mode) — Center threads the active
151
- * session's `search:changed` signals here so the composer's `?` mode
152
- * mirrors a search driven from another window. `seq` forces the apply
153
- * effect to re-fire on every signal (values alone can repeat).
154
- */
155
- remoteSearchApply?: { active: boolean; query: string; seq: number } | null;
156
- /** Pasted and dropped files become attachments (off: images and long pastes stay inline, drops are ignored). Default true. */
157
- attachmentsEnabled?: boolean;
158
- /** Inline ghost-text autocomplete (`ComposerHost.autocomplete`). Default false. */
159
- inlineAutocomplete?: boolean;
160
- /** The next-prompt suggestion as a ghost while the composer is empty (`ComposerHost.suggestions`). Default false. */
161
- promptSuggestions?: boolean;
162
- /** The composer's scope on the composer bus (`composer-bus.ts`): pushes aimed at it land here. */
163
- scopeKey?: string | null;
164
- /** The commands' fixed argument values (the command badge, the `/` popover's arguments). */
165
- commandArgs?: ComposerCommandArgs;
166
- /** Site icons for link badges. Absent: links show the globe. */
167
- siteIcons?: ChatSiteIcons;
168
- /** The icon and name an attachment tile shows. */
169
- attachmentLabel?: AttachmentLabelFn;
170
- /** What a text attachment opens as in the lightbox. Default: the kit's `TextPreview`. */
171
- textPreview?: ComponentType<TextPreviewSlotProps>;
172
- /** Rendered in the tray under the card (the desktop app's git bar). */
173
- footer?: ReactNode;
174
- /** Classes merged on the root. */
175
- className?: string;
176
- /** Styles on the root. */
177
- style?: CSSProperties;
178
- }
179
-
180
- /**
181
- * Search-mode tint — the TUI paints its search-mode prompt border with
182
- * `COLOR.warn`; the GUI uses the themable `--zg-warn` token (tokens.css
183
- * defaults it to amber, theme packs can override). Shell mode reuses the
184
- * accent, exactly like the TUI.
185
- */
186
- const SEARCH_MODE_COLOR = 'var(--zg-warn)';
187
-
188
- /** What the composer's editor-state selector returns for a non-empty draft outside search mode. */
189
- const DRAFT_HAS_TEXT = '\u0000draft';
190
-
191
- /**
192
- * The desktop app's composer card: the editor, its completions and modes, staged attachments and Send / Stop.
193
- *
194
- * @param props - What the composer edits and sends, and its slots.
195
- */
196
- export function RichComposer({
197
- disabled,
198
- folderPath,
199
- fileRoot,
200
- activeSessionId = null,
201
- hostId = null,
202
- running = false,
203
- onStop,
204
- onSend,
205
- leadingActions,
206
- trailingActions,
207
- badges,
208
- searchStatus = null,
209
- onSearchQueryChange,
210
- onSearchNavigate,
211
- searchOverlayOpen = false,
212
- remoteSearchApply = null,
213
- attachmentsEnabled = true,
214
- inlineAutocomplete = false,
215
- promptSuggestions = false,
216
- scopeKey = null,
217
- commandArgs,
218
- siteIcons,
219
- attachmentLabel,
220
- textPreview,
221
- footer,
222
- className,
223
- style,
224
- }: RichComposerProps) {
225
- const { completions, autocomplete } = useComposerHost();
226
- const labels = useComposerLabels();
227
-
228
- /*
229
- * Prompt history — the provider owns the per-session ring (draft
230
- * stash, cursor, persistence); the Chatbox owns the keyboard edge
231
- * conditions and the "history N/M" indicator.
232
- */
233
- const history = usePromptHistory();
234
- const [historyStatus, setHistoryStatus] = useState<{ position: number; total: number } | null>(null);
235
-
236
- /*
237
- * `editorRef` exposes the live TipTap editor to closures captured by
238
- * `editorProps.handleKeyDown` (which is evaluated when `useEditor`
239
- * builds the editor — at that point the `editor` const itself is still
240
- * undefined). The ref is wired below via `useEffect`.
241
- */
242
- const editorRef = useRef<Editor | null>(null);
243
- // TipTap's destroy() nulls the command manager while the ref still holds the
244
- // editor: `editor.commands` then throws. Effects reach the editor through this.
245
- const liveEditor = () => {
246
- const ed = editorRef.current;
247
- return ed && !ed.isDestroyed ? ed : null;
248
- };
249
-
250
- /*
251
- * Completion catalogs (`chatbox/use-composer-sources.ts`): one stable handle
252
- * the editor's callbacks read per call (the popover re-renders itself,
253
- * `chatbox/mention-popover.ts`). A commands or skills change re-reads the
254
- * typed `/name` badges.
255
- */
256
- const [refreshBadges] = useState(() => () => {
257
- const ed = editorRef.current;
258
- if (ed && !ed.isDestroyed) refreshBadgeDecorations(ed.view);
259
- });
260
- const { sources, providers: extensionCompletionProviders } = useComposerSources(
261
- folderPath,
262
- fileRoot ?? null,
263
- hostId,
264
- refreshBadges,
265
- );
266
- const [mentionPopovers] = useState(createPopoverGate);
267
- const staged = useStagedAttachments();
268
- const {
269
- attachments,
270
- setAttachments,
271
- addFiles: addAttachmentFiles,
272
- replace: replaceAttachments,
273
- notices: attachmentNotices,
274
- exitingIds,
275
- removeAttachment,
276
- finalizeRemove,
277
- } = staged;
278
- // Synchronous re-entry guard: React state updates flush async, so two rapid
279
- // Enter presses could both pass a state check across the submit-hook await.
280
- // A ref claimed synchronously closes that window; `submitting` state only
281
- // drives the button's disabled visual.
282
- const submittingRef = useRef(false);
283
- const [submitting, setSubmitting] = useState(false);
284
-
285
- /*
286
- * Composer prompt mode — TUI parity (src/tui/prompt/). `!` typed
287
- * into an empty composer enters SHELL mode (the bang is consumed;
288
- * submit re-attaches it), `?` enters transcript-SEARCH mode (the
289
- * draft drives the host's match engine). Stateful — NOT derived from
290
- * the draft text — so the sentinel never sits in the buffer and
291
- * pasted/recalled `!cmd` stays literal.
292
- *
293
- * `modeRef` is the synchronous mirror for the `editorProps.handleKeyDown`
294
- * closure (captured at `useEditor` build time) and for same-tick
295
- * reads after a flip — the TUI's `setShellModeNow` pattern.
296
- */
297
- const [composerMode, setComposerMode] = useState<ComposerMode>('normal');
298
- const modeRef = useRef<ComposerMode>('normal');
299
-
300
- /*
301
- * Edit-less ghost-gate transitions (popover closed, prompt mode
302
- * flipped, setting toggled) re-evaluate the ghost through here —
303
- * assigned by the ghost lifecycle effect below, no-op until the
304
- * editor mounts. The TUI gets this for free from its trigger effect's
305
- * dependency list (`useInlineGhostQuery`, src/tui/prompt/use-inline-ghost-query.ts);
306
- * the GUI's transaction listener
307
- * only sees edits, so the gate-flag owners call this explicitly.
308
- */
309
- const ghostGateChangedRef = useRef<() => void>(() => {});
310
-
311
- const applyMode = (next: ComposerMode) => {
312
- const prev = modeRef.current;
313
-
314
- if (prev === next) {
315
- return;
316
- }
317
-
318
- modeRef.current = next;
319
- setComposerMode(next);
320
-
321
- /*
322
- * Search mode is a live wire to the host's engine: entering opens
323
- * the (empty) query, leaving sends `null` so the host clears the
324
- * highlights + counter.
325
- */
326
- if (next === 'search') {
327
- live.current.onSearchQueryChange?.('');
328
- } else if (prev === 'search') {
329
- live.current.onSearchQueryChange?.(null);
330
- }
331
-
332
- /*
333
- * The mode is a ghost-gate input that just flipped WITHOUT an edit
334
- * — e.g. shell mode exiting on Backspace-at-start keeps the buffer.
335
- * The TUI's trigger effect re-runs on `shellMode`/`searchMode`
336
- * (`useInlineGhostQuery`, src/tui/prompt/use-inline-ghost-query.ts)
337
- * and re-queries; mirror that here.
338
- */
339
- ghostGateChangedRef.current();
340
- };
341
-
342
- /*
343
- * ---- Inline ghost-text autocomplete (TUI parity) -----------------
344
- * State is a ref + a ProseMirror plugin, not React state: the ghost
345
- * changes per keystroke and is consumed by `editorProps.handleKeyDown`
346
- * (captured at `useEditor` build time) and painted by the plugin's
347
- * decoration — a re-render would buy nothing. `applyGhost` keeps the
348
- * ref and the plugin's display string in lockstep. The canonical
349
- * provider engine runs main-side behind `autocomplete:inline`; the
350
- * snapshot/patch machinery is the canonical `patchInlineGhost`
351
- * (core `zidane/chat/pure`, `inline-ghost.ts`).
352
- */
353
- const ghostRef = useRef<InlineGhost | null>(null);
354
- // Bumped per transaction — an IPC reply whose sequence is stale is
355
- // dropped (latest-wins), the renderer half of the TUI's abort-on-edit
356
- // (`useInlineGhostQuery`, src/tui/prompt/use-inline-ghost-query.ts).
357
- const inlineAutocompleteEnabled = !disabled && inlineAutocomplete;
358
- // True only while a prompt-history recall's own setContent/focus
359
- // transactions run — browsing history must not pop ghosts, but editing
360
- // the recalled text afterwards queries normally.
361
- const historyRecallRef = useRef(false);
362
-
363
- // The next-prompt suggestion rides the same ghost plugin while the doc is empty (`chatbox/use-prompt-ghost.ts`).
364
- const promptGhost = usePromptGhost(activeSessionId, running, !disabled && promptSuggestions, () =>
365
- ghostGateChangedRef.current(),
366
- );
367
-
368
- const applyGhost = (next: InlineGhost | null, prompt?: PromptGhostOffer) => {
369
- ghostRef.current = next;
370
- promptGhost.setPainted(next ? (prompt ?? null) : null);
371
-
372
- const ed = editorRef.current;
373
-
374
- if (!ed || ed.isDestroyed) {
375
- return;
376
- }
377
-
378
- const display = next ? next.suffixes[next.index] : null;
379
-
380
- if (ghostTextPluginKey.getState(ed.state) !== display) {
381
- ed.view.dispatch(ed.state.tr.setMeta(ghostTextPluginKey, display));
382
- }
383
- };
384
-
385
- // Read by callbacks registered once (editor plugins, IPC listeners, mount-keyed effects): current as of the last commit.
386
- const live = useRef({
387
- activeSessionId,
388
- folderPath,
389
- hostId,
390
- inlineAutocompleteEnabled,
391
- onSearchQueryChange,
392
- applyMode,
393
- applyGhost,
394
- });
395
- useLayoutEffect(() => {
396
- live.current = {
397
- activeSessionId,
398
- folderPath,
399
- hostId,
400
- inlineAutocompleteEnabled,
401
- onSearchQueryChange,
402
- applyMode,
403
- applyGhost,
404
- };
405
- });
406
- // Live controller handle for the remote-mirror path — its `hasPending()`
407
- // is the "this window is the active typist" test.
408
- const ghostControllerRef = useRef<GhostController | null>(null);
409
-
410
- const [isDragOver, setIsDragOver] = useState(false);
411
- const lightbox = useLightbox();
412
- const openLightbox = (id: string, origin: HTMLElement) => {
413
- const items = attachmentLightboxItems(attachments, textPreview);
414
- lightbox.open(
415
- items,
416
- items.findIndex((item) => item.key === id),
417
- origin,
418
- );
419
- };
420
- const fileInputRef = useRef<HTMLInputElement>(null);
421
-
422
- // eslint-disable-next-line react-hooks/exhaustive-deps -- stable handles (refs, built-once sources and host); the effect keys on what it re-runs for
423
- const skillsProvider = useMemo(() => createSkillsCompletionProvider({ getCatalog: () => sources.skills() }), []);
424
-
425
- const editor = useComposerEditor({
426
- disabled,
427
- folderPath,
428
- extensionCompletionProviders,
429
- sources,
430
- skillsProvider,
431
- mentionPopovers,
432
- promptGhost,
433
- editorRef,
434
- modeRef,
435
- ghostRef,
436
- historyRecallRef,
437
- ghostGateChangedRef,
438
- attachmentsEnabled,
439
- history,
440
- activeSessionId,
441
- hostId,
442
- // Declared below: it reads the editor.
443
- send: () => send(),
444
- onSearchNavigate,
445
- applyMode,
446
- applyGhost,
447
- addFiles: addAttachmentFiles,
448
- setHistoryStatus,
449
- commandArgs,
450
- });
451
-
452
- /*
453
- * Mirror `editor` into `editorRef` so the `editorProps.handleKeyDown`
454
- * closure can reach the live TipTap commands API (e.g. for the
455
- * history-cycle setContent). `useEditor` returns a fresh instance
456
- * when its deps change, so we re-pin each render.
457
- */
458
- useEffect(() => {
459
- editorRef.current = editor;
460
- }, [editor]);
461
-
462
- // Links and a leading command's `/name` read as badges while typed (see badge-decorations.ts).
463
- useEffect(() => {
464
- if (!editor || editor.isDestroyed) {
465
- return;
466
- }
467
-
468
- const scope = () => ({ cwd: live.current.folderPath ?? '', hostId: live.current.hostId });
469
- editor.registerPlugin(
470
- createBadgeDecorationsPlugin(
471
- {
472
- isCommand: (name) => findCommand(sources.commands.peek(), name) !== undefined,
473
- args: (name) => commandArgs?.args(scope(), name) ?? NO_ARGS,
474
- request: (name) => commandArgs?.request(scope(), name),
475
- ...(commandArgs ? { subscribe: (listener: () => void) => commandArgs.subscribe(listener) } : {}),
476
- isSkill: (name) => sources.skills().some((skill) => skill.name === name),
477
- },
478
- siteIcons,
479
- ),
480
- );
481
-
482
- return () => {
483
- if (!editor.isDestroyed) {
484
- editor.unregisterPlugin(badgeDecorationsKey);
485
- }
486
- };
487
- // eslint-disable-next-line react-hooks/exhaustive-deps -- stable handles (refs, built-once sources and host); the effect keys on what it re-runs for
488
- }, [editor]);
489
-
490
- const ghost: GhostLifecycle = {
491
- editor,
492
- editorRef,
493
- live,
494
- autocomplete,
495
- inlineAutocompleteEnabled,
496
- mentionPopovers,
497
- modeRef,
498
- historyRecallRef,
499
- ghostRef,
500
- promptGhost,
501
- ghostGateChangedRef,
502
- ghostControllerRef,
503
- };
504
- useGhostLifecycle(ghost);
505
-
506
- /*
507
- * Fresh session, fresh navigation: a cursor parked by an earlier
508
- * visit shouldn't make the first ↑ resume mid-ring, and the "history
509
- * N/M" indicator belongs to the session it was navigating.
510
- */
511
- useEffect(() => {
512
- // eslint-disable-next-line react-hooks/set-state-in-effect -- resets with the scope it keys on
513
- setHistoryStatus(null);
514
-
515
- if (activeSessionId) {
516
- history.reset(activeSessionId);
517
- }
518
- }, [activeSessionId, history]);
519
-
520
- const send = () => {
521
- if (!editor) {
522
- return;
523
- }
524
-
525
- /*
526
- * Serialize through the JSON walker rather than `getText()` (which drops
527
- * the mention nodes' ids), with ONE newline per line
528
- * break: the prompt is sent, stored, shown and recalled exactly as it
529
- * looks in the composer. The markdown paragraph gap (`\n\n` per block)
530
- * doubled every line break and tripled every blank line in the
531
- * transcript, the TUI and ↑ history recall.
532
- */
533
- const raw = editorJsonToMarkdown(editor.getJSON() as JsonNode, { blockGap: '\n' }).trim();
534
-
535
- /*
536
- * Shell mode re-attaches the consumed bang so the submit contract
537
- * stays `!cmd` end to end (Center's handleSend + prompt history —
538
- * TUI `submit` in src/tui/prompt/use-composer-actions.ts). A blank
539
- * shell command never submits,
540
- * even with attachments staged; search mode never submits at all.
541
- */
542
- const text = composeSubmitText(modeRef.current, raw);
543
-
544
- if (text === null || (!text && attachments.length === 0) || disabled || submittingRef.current) {
545
- return;
546
- }
547
-
548
- // Submit leaves shell mode — the next prompt starts normal (TUI
549
- // `submit` in src/tui/prompt/use-composer-actions.ts).
550
- live.current.applyMode('normal');
551
-
552
- const submitted = attachments;
553
-
554
- // Clear the composer optimistically: the box empties on the same tick the
555
- // user hits Enter, and a second Enter can't re-submit the same text while
556
- // the submit-hook IPC is in flight.
557
- editor.commands.clearContent();
558
- replaceAttachments([]);
559
- mirror.dropStash();
560
- // Submitting exits history navigation (the host's `push` resets the
561
- // provider cursor); drop the indicator on the same tick.
562
- setHistoryStatus(null);
563
- dispatch(text, submitted);
564
- };
565
-
566
- /*
567
- * A prompt sent from elsewhere (Continue / Retry, the palette): the same
568
- * dispatch as Enter, without reading or clearing the composer.
569
- */
570
- const sendText = (raw: string) => {
571
- const text = raw.trim();
572
- if (!text || disabled || submittingRef.current) {
573
- return;
574
- }
575
- dispatch(text, [], { keepDraft: true });
576
- };
577
-
578
- const dispatch = (text: string, submitted: typeof attachments, opts?: { keepDraft?: boolean }) => {
579
- /*
580
- * Submit-time skill activation. `parseReferences` runs against the
581
- * editor's rendered plain text — TipTap mention nodes serialize back
582
- * to `/<name>` / `@<path>` / `#<chat>`, matching the chat providers'
583
- * reference grammars. Same code path the TUI calls before `agent.run()`.
584
- */
585
- const references = skillsProvider.parseReferences(text, { text, cursor: text.length });
586
- const skills = uniqueSkillNamesFromReferences(references);
587
- mirror.promoteNewChat(live.current.activeSessionId === null);
588
- submittingRef.current = true;
589
- setSubmitting(true);
590
-
591
- // Run extension submit hooks (resolveReferences/onSubmit) before the turn
592
- // is dispatched so their side effects land first, then send.
593
- void (async () => {
594
- try {
595
- if (folderPath !== null) {
596
- await completions?.submit?.({ cwd: folderPath, hostId }, text, text.length).catch(() => undefined);
597
- }
598
- await onSend(text, submitted, skills, opts);
599
- } catch {
600
- /*
601
- * Not sent (the host says why, e.g. a new chat's server went
602
- * offline): the box was cleared on Enter, so put the prompt back,
603
- * unless something was typed since or it came from elsewhere.
604
- */
605
- mirror.promoteNewChat(false);
606
- const ed = editorRef.current;
607
- if (!opts?.keepDraft && ed && !ed.isDestroyed && serializeDraftText(ed) === '') {
608
- const draft = unsentDraft(text);
609
- mirror.applyDraft(draft.text, draft.shell);
610
- setAttachments((current) => (current.length === 0 ? [...submitted] : current));
611
- }
612
- } finally {
613
- submittingRef.current = false;
614
- setSubmitting(false);
615
- }
616
- })();
617
- };
618
-
619
- /*
620
- * Live plain-text mirror of the draft. TipTap v3's `useEditor` does
621
- * NOT re-render the host component on transactions (its internal
622
- * `shouldRerenderOnTransaction` selector short-circuits to `null`
623
- * when the option is unset), so render-time `editor.getText()` reads
624
- * — as a draft-derived `hasContent` or shell flag would do — only
625
- * ever see the state from the LAST unrelated re-render, so the send
626
- * button and the `!` affordance would look dead while typing.
627
- * `useEditorState` subscribes to transactions and re-renders
628
- * exactly when the selected string changes.
629
- *
630
- * Outside search mode only emptiness is selected (`DRAFT_HAS_TEXT`), so
631
- * the composer does not re-render on every keystroke for a send button
632
- * that only cares whether there is anything to send. Search mode selects
633
- * the text itself (it drives the match engine per edit).
634
- */
635
- const searchingDraft = composerMode === 'search';
636
- const editorPlainText =
637
- useEditorState({
638
- editor,
639
- /*
640
- * Defensive beyond the null check: on the very first render the
641
- * editor INSTANCE can exist while its state/schema is still being
642
- * constructed — `getText()` then dereferences a null schema inside
643
- * `getTextSerializersFromSchema` and the whole app white-screens
644
- * (this exact crash shipped once; caught by the e2e launch test).
645
- * A mid-construction snapshot is worthless anyway: the store
646
- * notifies again the moment the editor is ready.
647
- */
648
- selector: (ctx) => {
649
- const ed = ctx.editor;
650
-
651
- if (!ed || ed.isDestroyed) {
652
- return '';
653
- }
654
-
655
- try {
656
- const text = ed.getText({ blockSeparator: '\n' });
657
- if (searchingDraft) return text;
658
- return text.trim().length > 0 ? DRAFT_HAS_TEXT : '';
659
- } catch (error) {
660
- /*
661
- * Once-latched: the selector runs per transaction, so an
662
- * editor whose serialization is persistently broken would
663
- * otherwise spam a warn per keystroke — but swallowing
664
- * silently forever hides the breakage (send button dead with
665
- * no trace). One warning is enough to diagnose.
666
- */
667
- if (!warnedEditorGetText) {
668
- warnedEditorGetText = true;
669
- console.warn('[chatbox] editor.getText() threw; treating the draft as empty.', error);
670
- }
671
-
672
- return '';
673
- }
674
- },
675
- }) ?? '';
676
-
677
- const hasContent = editorPlainText.trim().length > 0 || attachments.length > 0;
678
- const canSend = !disabled && !submitting && hasContent && composerMode !== 'search';
679
-
680
- const shellMode = !disabled && composerMode === 'shell';
681
- const searchMode = !disabled && composerMode === 'search';
682
-
683
- /*
684
- * Search mode is a live wire: every draft edit re-drives the host's
685
- * match engine (TUI parity — `syncBuffer` pushes `onSearchQueryChange`
686
- * per keystroke, src/tui/prompt/use-sync-buffer.ts).
687
- */
688
- useEffect(() => {
689
- if (composerMode === 'search') {
690
- live.current.onSearchQueryChange?.(editorPlainText);
691
- }
692
- }, [composerMode, editorPlainText]);
693
-
694
- /*
695
- * Mode flips happen on consumed keystrokes (no transaction), so the
696
- * Placeholder decoration — recomputed only per state update — would
697
- * keep the previous copy. A no-op dispatch repaints it.
698
- */
699
- useEffect(() => {
700
- const ed = editorRef.current;
701
-
702
- if (ed && !ed.isDestroyed) {
703
- ed.view.dispatch(ed.state.tr);
704
- }
705
- }, [composerMode]);
706
-
707
- /*
708
- * Session switch tears the mode down: a shell/search mode armed on
709
- * one conversation must not leak into the next (the TUI's modes are
710
- * per-prompt-block state with the same lifetime). Search also drops
711
- * its query text — it belongs to the previous transcript.
712
- */
713
- useEffect(() => {
714
- if (modeRef.current === 'search') {
715
- liveEditor()?.commands.clearContent(true);
716
- }
717
-
718
- live.current.applyMode('normal');
719
- }, [activeSessionId]);
720
-
721
- /*
722
- * The ⌘F overlay owns the same document-wide highlight registry —
723
- * opening it while the composer is searching would leave two writers
724
- * fighting per stream tick. The overlay wins; the composer exits.
725
- */
726
- useEffect(() => {
727
- if (searchOverlayOpen && modeRef.current === 'search') {
728
- liveEditor()?.commands.clearContent(true);
729
- live.current.applyMode('normal');
730
- }
731
- }, [searchOverlayOpen]);
732
-
733
- // The shared per-session draft and the buffers kept across session switches (`chatbox/use-draft-mirror.ts`).
734
- const mirror = useDraftMirror({
735
- editor,
736
- editorRef,
737
- modeRef,
738
- composerMode,
739
- activeSessionId,
740
- staged,
741
- applyMode,
742
- resetHistoryStatus: () => setHistoryStatus(null),
743
- });
744
-
745
- // Far-away producers (review comments, palette prompts, Edit message) push into this composer.
746
- useComposerBus(scopeKey, {
747
- attachment: staged.add,
748
- mention: (path) => {
749
- liveEditor()
750
- ?.chain()
751
- .focus('end')
752
- .insertContent([
753
- { type: 'mention', attrs: { id: path, label: basename(path) } },
754
- { type: 'text', text: ' ' },
755
- ])
756
- .run();
757
- },
758
- insert: (text) => {
759
- liveEditor()?.chain().focus('end').insertContent(text).run();
760
- },
761
- focus: () => {
762
- liveEditor()?.commands.focus('end');
763
- },
764
- // Sent as is, beside the draft: whatever the user was typing stays put.
765
- prompt: sendText,
766
- // The draft is replaced, not merged.
767
- draft: ({ text, attachments: next }) => {
768
- const ed = liveEditor();
769
- if (!ed) return;
770
- live.current.applyMode('normal');
771
- ed.chain().setContent(draftTextToDocJson(text), { emitUpdate: true }).focus('end').run();
772
- replaceAttachments([...next]);
773
- },
774
- });
775
-
776
- useSharedGhost(ghost);
777
-
778
- /*
779
- * Shared-search application (daemon mode). Mode + buffer are set
780
- * directly (NOT via `applyMode`) so no `onSearchQueryChange` fires —
781
- * Center already holds the remote value; re-emitting the transient ''
782
- * from `applyMode('search')` would publish it back and clobber the
783
- * remote query. The live-wire effect above re-emits the final query
784
- * after `setContent`, which Center's echo guard absorbs.
785
- */
786
- useEffect(() => {
787
- if (!remoteSearchApply) {
788
- return;
789
- }
790
-
791
- const ed = editorRef.current;
792
-
793
- if (!ed || ed.isDestroyed) {
794
- return;
795
- }
796
-
797
- if (remoteSearchApply.active) {
798
- if (modeRef.current !== 'search') {
799
- modeRef.current = 'search';
800
- setComposerMode('search');
801
- }
802
-
803
- if (ed.getText({ blockSeparator: '\n' }) !== remoteSearchApply.query) {
804
- ed.commands.setContent(plainTextToDocJson(remoteSearchApply.query), { emitUpdate: true });
805
- }
806
- } else if (modeRef.current === 'search') {
807
- ed.commands.clearContent(true);
808
- modeRef.current = 'normal';
809
- setComposerMode('normal');
810
- }
811
- // eslint-disable-next-line react-hooks/exhaustive-deps -- keyed by seq: values alone can repeat across signals.
812
- }, [remoteSearchApply?.seq]);
813
-
814
- const onPlusClick = () => fileInputRef.current?.click();
815
-
816
- const onFilesPicked = (event: ChangeEvent<HTMLInputElement>) => {
817
- /*
818
- * The picker offers every file (no `accept`): what can attach is
819
- * `readAttachment`'s call, the same for paste and drop, and a refused
820
- * file says why in the card. Images become `PromptImagePart`s, PDFs
821
- * and text `PromptDocumentPart`s (the engine's media-type branch).
822
- */
823
- const picked = Array.from(event.target.files ?? []);
824
- addAttachmentFiles(picked);
825
- event.target.value = '';
826
- };
827
-
828
- /*
829
- * A click on the chatbox's empty surface focuses the composer. Clicks
830
- * that land on a control (a pill, a button, a popover's search field)
831
- * belong to that control: focusing the composer from their bubbling click
832
- * stole focus from, e.g., the model picker's search right after it opened.
833
- */
834
- const focusEditor = (event: ReactMouseEvent) => {
835
- const target = event.target as HTMLElement | null;
836
- if (
837
- target?.closest('button, a, input, textarea, select, [role="dialog"], [role="listbox"], [contenteditable="true"]')
838
- )
839
- return;
840
- editor?.commands.focus();
841
- };
842
-
843
- return (
844
- /*
845
- * The composer is a raised card set in a tray (gui/CLAUDE.md "Surfaces").
846
- * The tray's 4px ring comes out of the footer's budget (Center.tsx: px-5,
847
- * pb-2), so the card keeps its size, its edges on the transcript column,
848
- * and the + button's center on the sidebar footer separator (H − 37).
849
- * Radius 28 = the card's 24 + the 4px ring: concentric.
850
- */
851
- <div
852
- className={`zg-chatbox-surface zg-tray relative rounded-[28px] p-1${className ? ` ${className}` : ''}`}
853
- style={style}
854
- >
855
- {badges}
856
- <input ref={fileInputRef} type="file" multiple onChange={onFilesPicked} className="hidden" />
857
- {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- a click on the card's empty surface focuses the editor, which has its own keyboard */}
858
- <div
859
- onClick={focusEditor}
860
- onDragOver={(event) => {
861
- event.preventDefault();
862
-
863
- // Any file: the drop decides what attaches. A file's type is often empty mid-drag.
864
- if (attachmentsEnabled && Array.from(event.dataTransfer.types).includes('Files')) {
865
- setIsDragOver(true);
866
- }
867
- }}
868
- onDragLeave={(event) => {
869
- if (event.currentTarget === event.target) {
870
- setIsDragOver(false);
871
- }
872
- }}
873
- onDrop={(event) => {
874
- event.preventDefault();
875
- setIsDragOver(false);
876
-
877
- if (!attachmentsEnabled) {
878
- return;
879
- }
880
-
881
- addAttachmentFiles(Array.from(event.dataTransfer.files));
882
- }}
883
- /*
884
- * Vertical padding is INTENTIONALLY asymmetric (pt-4/pb-2 = 16/8px):
885
- * 1. The controls row mixes heights (24px pills, 30px scope toggle,
886
- * 32px + / send circles) all centered on one axis via
887
- * `items-center` on the row and both subgroups. The row's 32px
888
- * box is set by the two circles, but its dominant visual mass —
889
- * the 24px pills — floats 4px above the box bottom. A symmetric
890
- * pb-3 stacked 12px under that built-in optical padding, so the
891
- * bottom band read 13–17px against a crisp 13px above the
892
- * cap-trimmed editor text (measured in an 800px window: text top
893
- * at card+13, pill bottoms at card_bottom−17) — bottom-heavy.
894
- * pb-2 puts the pill bottoms 13px from the border, matching the
895
- * 13px the text then sat below the top (pt-3). pt-4 leaves
896
- * ~17px above the text on purpose: a roomier prompt; the bottom
897
- * band keeps its 13px.
898
- * 2. Concentric corner nesting (send circle ⇄ card corner): the
899
- * card radius is rounded-3xl (24px) so the corner arc's center
900
- * lands 1.4px from the send circle's center — the circle inset
901
- * is 8px content + 1px border = 9px on BOTH axes (pb-2 below;
902
- * px-1 + the controls row's pr-1 on the right). Measured gaps
903
- * button-edge → outer card border: right 9.0, bottom 9.0,
904
- * 45° diagonal 9.4 — uniform within ±1px, so the circle reads
905
- * as following the curve. At rounded-2xl (16px) the
906
- * gaps would be 5 / 9 / 10.05 (the unnested look) and the only
907
- * uniform inset is ≈2.4px — too cramped. Rule: concentric when
908
- * R ≈ button inset(outer) + button radius (= 9 + 16 = 25 here;
909
- * 24 is the nearest Tailwind step). Re-measure if either moves.
910
- * 3. Cross-app alignment invariant: with the outer footer's pb-3
911
- * (12px, Center.tsx) + 1px card border + 8px here + 16px half
912
- * of the 32px + button, the + button's center lands at
913
- * windowH − 37 — exactly the sidebar footer's top separator
914
- * (28px h-7 row + 2×4px py-1 + 1px border-t = 37px,
915
- * Footer.tsx). Both are bottom-anchored fixed heights, so the
916
- * equality holds at every window size. If you change this
917
- * padding, retune Footer.tsx's py to keep separator-y ==
918
- * plus-center-y.
919
- */
920
- className="zg-raised relative rounded-3xl border pt-4 pb-2 px-1 flex flex-col cursor-text"
921
- // Lifts one step while a run streams; settles when it ends.
922
- data-live={running ? '' : undefined}
923
- style={
924
- {
925
- /*
926
- * Mode border repaint — the TUI's visual contract for prompt
927
- * modes (`PromptBlock`, src/tui/prompt/prompt-block.tsx):
928
- * shell = accent, search = warn (`--zg-warn`). Drag-over keeps accent.
929
- */
930
- borderColor:
931
- isDragOver || shellMode ? 'var(--zg-accent)' : searchMode ? SEARCH_MODE_COLOR : 'var(--zg-hairline)',
932
- // Transitions live on `.zg-raised` (primitives.css) so motion-off can stop them.
933
- // ONE structural knob for the composer text column — consumed by
934
- // .zg-editor-scroll's padding-inline (rich-composer.css). See the editor
935
- // wrapper comment below for the alignment contract.
936
- '--zg-composer-inset': '12px',
937
- } as CSSProperties
938
- }
939
- >
940
- {/*
941
- * Always mounted — the collapse animation handles both the row's
942
- * inner content (grid-template-rows) and its own outer spacing
943
- * (margin-bottom), so unmounting on `attachments.length === 0`
944
- * would yank the 12px gap and produce a visible jump on
945
- * removing the LAST attachment. The CSS hides it at zero
946
- * height + zero margin when empty.
947
- */}
948
- <AttachmentNotices notices={attachmentNotices.notices} onDismiss={attachmentNotices.dismiss} />
949
- <AttachmentRow
950
- attachments={attachments}
951
- exitingIds={exitingIds}
952
- onRemove={removeAttachment}
953
- onExited={finalizeRemove}
954
- onOpenLightbox={openLightbox}
955
- attachmentLabel={attachmentLabel}
956
- />
957
- {/*
958
- * Height-capped scroll region — the editor grows with content up
959
- * to `.zg-editor-scroll`'s max-height, then scrolls internally
960
- * (TUI parity: the textarea grows to MAX_CONTENT_LINES then
961
- * scrolls, `PromptBlock` in src/tui/prompt/prompt-block.tsx). The
962
- * cap lives on this wrapper
963
- * (not `.ProseMirror`) so ProseMirror's own scrollIntoView finds
964
- * a scrollable ANCESTOR and keeps the caret visible while typing
965
- * at the cap. Attachment row + controls row are siblings outside
966
- * the region, so the card's bottom-band geometry (separator ==
967
- * plus-center == H−37, concentric corner nesting — see the card
968
- * comment above) is unaffected by content height.
969
- */}
970
- {/* Text inset comes from --zg-composer-inset (declared on the card,
971
- consumed in rich-composer.css) — ONE structural knob placing the editor
972
- text's left edge against the + button's glyph column (8px sat
973
- exactly on the glyph; 12px sits 4px inside it, for room). The card's own
974
- px-1 is dictated by the send-button corner nesting; changing that
975
- or the button width means retuning the variable in ONE place. */}
976
- {/* min-h-12 (two leading-6 lines even when empty) sits here, not on .ProseMirror: its
977
- overflow-clip must hug the trimmed text so the line-tall caret Chrome draws after a
978
- badge is clipped to the plain caret's height. */}
979
- <div className="zg-editor-scroll min-w-0 min-h-12">
980
- <EditorContent editor={editor} />
981
- </div>
982
- {/*
983
- * One line at every width (`zg-chatbox` container tiers in
984
- * composer.css): the left group shrinks, its names truncating; the
985
- * right group (status, a draft's pickers, send) never shrinks, its
986
- * parts fold instead.
987
- */}
988
- <div className="zg-chatbox-controls flex items-center justify-between gap-2 mt-3 min-w-0">
989
- <div className="flex items-center gap-1 flex-1 min-w-0">
990
- <PlusButton onClick={onPlusClick} />
991
- {leadingActions}
992
- {shellMode && (
993
- <span className={MODE_CHIP} style={modeChipTone('var(--zg-accent)')}>
994
- <span className="i-ph-terminal-window text-zg-meta" />
995
- {labels.modeShell}
996
- </span>
997
- )}
998
- {searchMode && (
999
- <span className={MODE_CHIP} style={modeChipTone(SEARCH_MODE_COLOR)}>
1000
- <span className="i-ph-magnifying-glass text-zg-meta" />
1001
- {labels.modeSearch}
1002
- {searchStatus?.hasNeedle && (
1003
- <span className="opacity-90">
1004
- {searchStatus.count === 0
1005
- ? '0/0'
1006
- : `${searchStatus.activeIndex + 1}/${searchStatus.capped ? `${searchStatus.count}+` : searchStatus.count}`}
1007
- </span>
1008
- )}
1009
- </span>
1010
- )}
1011
- {historyStatus && (
1012
- <span className={MODE_CHIP}>
1013
- <span className="i-ph-clock text-zg-meta" />
1014
- {labels.historyPosition(historyStatus.position, historyStatus.total)}
1015
- </span>
1016
- )}
1017
- </div>
1018
- {/*
1019
- * pr-1 equalizes the send button's right inset with its bottom
1020
- * one (4px px-1 + 4px here = 8px content, 9px to the outer
1021
- * border) — the concentric-nesting invariant documented on the
1022
- * card's padding comment above. Horizontal only: the row's
1023
- * shared vertical center axis is untouched.
1024
- */}
1025
- <div className="flex items-center gap-2 shrink-0 pr-1">
1026
- {trailingActions}
1027
- <SendStopButton running={running && Boolean(onStop)} canSend={canSend} onSend={send} onStop={onStop} />
1028
- </div>
1029
- </div>
1030
- </div>
1031
- {/* The tray showing under the card (the desktop app: where the checkout stands). */}
1032
- {footer}
1033
- {lightbox.element}
1034
- </div>
1035
- );
1036
- }