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,1107 +0,0 @@
1
- /**
2
- * The per-session stream store: every session's live transcript window and
3
- * run state, reduced from zidane's host signals, with per-session listeners
4
- * so a tick on one session never wakes the readers of another.
5
- *
6
- * State shape and merge semantics match `zidane/chat`'s `useStreamBuffer`:
7
- * same-owner same-kind markdown / thinking deltas coalesce onto the trailing
8
- * block; tool / tool-result / error / spawn-* events append verbatim;
9
- * `turn:end` and `run:end` finalize the trailing streaming markdown so the
10
- * renderer stops absorbing tokens. React-free: the desktop app binds it with
11
- * `useSyncExternalStore`, a {@link ChatHost} reads it through
12
- * `SessionStreams.transcript`.
13
- */
14
- import type { Owner, StreamEvent, SystemMdFile } from 'zidane/chat';
15
- import {
16
- discardThinking,
17
- finalizeStreamingMarkdownForOwner,
18
- type MarkdownDeltaOptions,
19
- type PromptSegmentRef,
20
- reconcileEvents,
21
- retagUserPromptEventsFromRefs,
22
- } from 'zidane/chat/pure';
23
-
24
- import type { ChatAttachment, ChatEvent } from '../host';
25
- import { inheritRowIdentity } from '../transcript/collapse';
26
- import { applyLiveEvent, closeThinkingSegment, finishLive } from './live-events';
27
- import { mergeLiveTail } from './merge';
28
- import type { DrainPlan } from './pacer';
29
- import { mergePromptPreviews, missingPreviewData } from './prompt-previews';
30
- import { defaultFrameScheduler, type FrameScheduler } from './scheduler';
31
- import type {
32
- OtherStreamSignal,
33
- SessionFallbackModel,
34
- SessionPageState,
35
- SessionRetryState,
36
- SessionStreamPage,
37
- SessionStreamSignal,
38
- } from './types';
39
-
40
- const PARENT_OWNER: Owner = 'parent';
41
-
42
- /**
43
- * Module-level stable empty array — returned by `getEventsSnapshot` when
44
- * the session has no entry yet. Keeping this reference identical across
45
- * calls avoids breaking downstream `useMemo([events])` deps when a
46
- * consumer mounts before its session hydrates.
47
- */
48
- const EMPTY_EVENTS: readonly ChatEvent[] = Object.freeze([]) as readonly ChatEvent[];
49
-
50
- /** Page-state snapshot for a session with no hydrated page — stable identity. */
51
- const NO_PAGE: SessionPageState = Object.freeze({ firstSeq: 0, hasMore: false, loadingEarlier: false });
52
-
53
- /**
54
- * Markdown merge options by default. No 64 KB segmenting: a reloaded
55
- * transcript shows each message whole (the renderer chunks long text
56
- * itself, see `markdown-chunks.ts`), so a split live message would carry
57
- * per-segment message actions that vanish on reload.
58
- */
59
- const WHOLE_MESSAGES: MarkdownDeltaOptions = { segmentChars: Number.POSITIVE_INFINITY };
60
-
61
- /** Notifications held for the next frame are delivered after this long when frames do not run (a hidden window). */
62
- const NOTIFY_FALLBACK_MS = 50;
63
-
64
- /** Options for {@link SessionStreamStore}. */
65
- export interface SessionStreamStoreOptions {
66
- /** Frames and timers for batched notifications. Default: {@link defaultFrameScheduler}. */
67
- scheduler?: FrameScheduler;
68
- /** How streamed markdown merges. Default: one event per message (`segmentChars: Infinity`). */
69
- markdown?: MarkdownDeltaOptions;
70
- /** Deliver transcript-event notifications once per frame (`true`, the default) or at once (`false`). The state is current at once either way. */
71
- batch?: boolean;
72
- }
73
-
74
- /** One write to a session's window, see {@link SessionStreamStore.write}. */
75
- export interface SessionStreamWrite {
76
- /** Replaces the events. */
77
- events?: readonly ChatEvent[];
78
- /** Sets the run flag. */
79
- running?: boolean;
80
- /** Sets the page state (and so marks the window hydrated); `null` drops it. */
81
- page?: SessionPageState | null;
82
- }
83
-
84
- /**
85
- * External store backing all per-session reads. Mutates the underlying
86
- * Maps in place and notifies only the per-`sessionId` listeners that
87
- * actually subscribed to the changed session — that's what isolates
88
- * sibling sessions from each other's stream churn. Every write path
89
- * replaces the session's events array, so identity says whether anything
90
- * landed in between (the run-end compaction and scrollback guards rely on
91
- * it).
92
- *
93
- * The reducer alone: {@link createSessionStreams} adds smooth-stream pacing,
94
- * lazy scrollback and run-end compaction around it.
95
- *
96
- * @typeParam K - The session key type (the desktop app's branded `SessionKey`). Default: `string`.
97
- */
98
- export class SessionStreamStore<K extends string = string> {
99
- private _events = new Map<K, ChatEvent[]>();
100
- private _running = new Map<K, boolean>();
101
- private readonly _scheduler: FrameScheduler;
102
- private readonly _markdown: MarkdownDeltaOptions;
103
- private readonly _batch: boolean;
104
- /** Bumped by every run-state change (`run:start`, `run:end`, `dropAll`): a snapshot fetched before a bump is stale. */
105
- runStateVersion = 0;
106
-
107
- /**
108
- * @param options - The scheduler for batched notifications, the markdown merge rule and whether to batch.
109
- */
110
- constructor(options: SessionStreamStoreOptions = {}) {
111
- this._scheduler = options.scheduler ?? defaultFrameScheduler;
112
- this._markdown = options.markdown ?? WHOLE_MESSAGES;
113
- this._batch = options.batch ?? true;
114
- }
115
- /**
116
- * Per-session run-sticky fallback target — set by the `model:fallback`
117
- * signal when the agent's stream failed terminally on the picked model
118
- * and the run advanced down its fallback chain. Cleared on `run:start`
119
- * (every run starts from the primary again). Read by the model pill so
120
- * the user always sees the model ACTUALLY serving the run.
121
- */
122
- private _fallback = new Map<K, SessionFallbackModel>();
123
- /**
124
- * Per-session `SYSTEM.md` override the HOST composed the prompt with, or
125
- * `null` when none applied. Pushed by the `system-md` signal at agent-build
126
- * time.
127
- *
128
- * Not derivable in the renderer: the override is resolved where the prompt
129
- * is composed, against a cwd and a `userInstructionsScope` this window does
130
- * not own (under a daemon it is another process entirely). Surfaced because
131
- * an override REPLACES the built-in doctrine — including the safety and git
132
- * guidance — and does so without erroring.
133
- */
134
- private _systemMd = new Map<K, SystemMdFile | null>();
135
- /**
136
- * Per-session provider-retry state. Cleared on `run:end` rather than
137
- * `run:start`: a terminal stream failure never streams again, so run end is
138
- * the only guaranteed clear — the same backstop the TUI uses.
139
- */
140
- private _retry = new Map<K, SessionRetryState>();
141
- /**
142
- * Monotonically increasing per-session run-start counter — bumped on
143
- * every `run:start` this window observes (including runs started by
144
- * OTHER windows, which fan out through the same signal path). Read
145
- * non-reactively by the re-convergence guard so a disk snapshot
146
- * kicked off before a run started is dropped instead of clobbering
147
- * the just-seeded stream.
148
- */
149
- private _runSeq = new Map<K, number>();
150
- private _pages = new Map<K, SessionPageState>();
151
- /**
152
- * Texts of user prompts THIS window appended optimistically that still
153
- * await their host echo. The host stamps `echo: true` on the broadcast
154
- * of the sender's own prompt (send / steer paths) for EVERY peer — it
155
- * cannot know which window originated the send — so the dedupe lives
156
- * here: one pending entry consumes one echo (keeping the local copy,
157
- * which carries refs + attachments the canonical event doesn't).
158
- * Echo-tagged prompts with NO pending match are genuine remote sends
159
- * (another window, a daemon-drained queued prompt) and must render.
160
- * Leftovers (failed sends) are cleared at `run:end`.
161
- */
162
- private _pendingEcho = new Map<K, string[]>();
163
- /**
164
- * Image previews of prompts THIS window queued, FIFO per session, until
165
- * the prompt shows up in the transcript (see `prompt-previews.ts`).
166
- */
167
- private _promptPreviews = new Map<K, Array<{ text: string; attachments: ChatAttachment[] }>>();
168
- private _listenersBySession = new Map<K, Set<() => void>>();
169
- private _listenersForHas = new Set<() => void>();
170
-
171
- /**
172
- * A session's events: the stored array itself (stable identity until a write), or a shared empty array.
173
- *
174
- * @param sessionId - The session, or `null` for none.
175
- */
176
- getEventsSnapshot(sessionId: K | null): readonly ChatEvent[] {
177
- if (!sessionId) {
178
- return EMPTY_EVENTS;
179
- }
180
-
181
- return this._events.get(sessionId) ?? EMPTY_EVENTS;
182
- }
183
-
184
- /**
185
- * Whether a run is in flight for the session.
186
- *
187
- * @param sessionId - The session, or `null` for none.
188
- */
189
- getRunningSnapshot(sessionId: K | null): boolean {
190
- if (!sessionId) {
191
- return false;
192
- }
193
-
194
- return this._running.get(sessionId) ?? false;
195
- }
196
-
197
- /**
198
- * Seed "running" from the store row for a run this window never saw
199
- * start — a session driven by the daemon or another client, opened
200
- * mid-run. Only ever sets TRUE: clearing belongs to `run:end` (or a
201
- * runtime drop), since a list fetched just before a local run:start
202
- * would otherwise flip a genuinely live session back to idle.
203
- *
204
- * @param sessionId - The session.
205
- */
206
- markRunning(sessionId: K): void {
207
- if (this._running.get(sessionId)) {
208
- return;
209
- }
210
-
211
- if (!this._events.has(sessionId)) {
212
- this._events.set(sessionId, []);
213
- this._notifyHas();
214
- }
215
-
216
- this._running.set(sessionId, true);
217
- this._notifySession(sessionId);
218
- }
219
-
220
- /**
221
- * How many runs this client saw start for the session (0 for none). Read non-reactively: a snapshot fetched before a run started is stale.
222
- *
223
- * @param sessionId - The session, or `null` for none.
224
- */
225
- getRunSeqSnapshot(sessionId: K | null): number {
226
- if (!sessionId) {
227
- return 0;
228
- }
229
-
230
- return this._runSeq.get(sessionId) ?? 0;
231
- }
232
-
233
- /**
234
- * Stable-reference snapshot (the stored object itself) — safe for
235
- * `useSyncExternalStore`, which compares snapshots by identity.
236
- *
237
- * @param sessionId - The session, or `null` for none.
238
- */
239
- getFallbackSnapshot(sessionId: K | null): SessionFallbackModel | null {
240
- if (!sessionId) {
241
- return null;
242
- }
243
-
244
- return this._fallback.get(sessionId) ?? null;
245
- }
246
-
247
- /**
248
- * Seed the override from the main-process PULL (`sessions.systemMd`).
249
- *
250
- * The `system-md` signal only fires when an agent is BUILT, and agents are
251
- * cached — so opening the app onto a warm session, or switching back to one,
252
- * delivers no signal at all. Without this seed the badge is silent in the
253
- * most common flow rather than an edge case, which is the wrong direction
254
- * for a warning that the built-in doctrine has been replaced.
255
- *
256
- * Skipped while a live signal already holds a value for the session: the
257
- * push is authoritative and may have landed while this fetch was in flight.
258
- *
259
- * @param sessionId - The session.
260
- * @param file - The override, or `null` for none.
261
- */
262
- seedSystemMd(sessionId: K, file: SystemMdFile | null): void {
263
- if (this._systemMd.has(sessionId)) {
264
- return;
265
- }
266
-
267
- this._systemMd.set(sessionId, file);
268
- this._notifySession(sessionId);
269
- }
270
-
271
- /**
272
- * Stable-reference snapshot of the active `SYSTEM.md` override, for
273
- * `useSyncExternalStore` (compared by identity, and the stored object is the
274
- * one the signal delivered).
275
- *
276
- * @param sessionId - The session, or `null` for none.
277
- */
278
- getSystemMdSnapshot(sessionId: K | null): SystemMdFile | null {
279
- if (!sessionId) {
280
- return null;
281
- }
282
-
283
- return this._systemMd.get(sessionId) ?? null;
284
- }
285
-
286
- /**
287
- * Stable-reference snapshot of in-flight provider-retry state.
288
- *
289
- * @param sessionId - The session, or `null` for none.
290
- */
291
- getRetrySnapshot(sessionId: K | null): SessionRetryState | null {
292
- if (!sessionId) {
293
- return null;
294
- }
295
-
296
- return this._retry.get(sessionId) ?? null;
297
- }
298
-
299
- /**
300
- * Whether the store holds any record for the session (live-only windows included; see `isHydrated`).
301
- *
302
- * @param sessionId - The session, or `null` for none.
303
- */
304
- hasEvents(sessionId: K | null): boolean {
305
- if (!sessionId) {
306
- return false;
307
- }
308
-
309
- return this._events.has(sessionId);
310
- }
311
-
312
- /**
313
- * Whether the session's window was hydrated from DISK (`setEventsPage`),
314
- * as opposed to merely having a record. `markRunning` and every live
315
- * signal seed `_events` for a session this window never loaded — a run
316
- * driven by the TUI or another window — and `hasEvents` alone read those
317
- * live-only windows as hydrated, so activation skipped `loadEvents` and
318
- * the transcript showed nothing but the deltas that had arrived so far,
319
- * with no page state to scroll back from.
320
- *
321
- * @param sessionId - The session, or `null` for none.
322
- */
323
- isHydrated(sessionId: K | null): boolean {
324
- if (!sessionId) {
325
- return false;
326
- }
327
-
328
- return this._pages.has(sessionId);
329
- }
330
-
331
- /**
332
- * The session's scrollback bookkeeping (a shared empty state when it was never hydrated). Stable identity until a page write.
333
- *
334
- * @param sessionId - The session, or `null` for none.
335
- */
336
- getPageSnapshot(sessionId: K | null): SessionPageState {
337
- if (!sessionId) {
338
- return NO_PAGE;
339
- }
340
-
341
- return this._pages.get(sessionId) ?? NO_PAGE;
342
- }
343
-
344
- /**
345
- * Hydrate one replay page as the session's full window — the
346
- * `loadEvents` (tail page) path. One notify covers both the events
347
- * swap and the page-state swap.
348
- *
349
- * @param sessionId - The session.
350
- * @param page - The persisted page.
351
- */
352
- setEventsPage(sessionId: K, page: SessionStreamPage): void {
353
- const had = this._events.has(sessionId);
354
- const wasHydrated = this._pages.has(sessionId);
355
- const prior = this._events.get(sessionId) ?? [];
356
- /*
357
- * Reuse the OBJECTS of events that are unchanged. Row identity in the
358
- * timeline is keyed by event object (`rowIdFor`), so a page that merely
359
- * re-states the same tool calls with fresh objects would remount every
360
- * row: expanded tool results snap shut, `zg-row-enter` replays, the
361
- * viewport jumps. Re-convergence (`sessions:changed` while another
362
- * surface drives the session, run-end compaction, reconnect backfill)
363
- * hits this path on every persisted turn.
364
- *
365
- * A window that was never hydrated holds ONLY live deltas (see
366
- * `isHydrated`); the disk page goes in front of them and the not-yet-
367
- * persisted suffix survives, instead of the page clobbering the stream.
368
- */
369
- const next = wasHydrated ? reconcileEvents(prior, page.events) : mergeLiveTail(prior, page.events);
370
- // A prompt on show whose persisted copy replaces it (a new chat's first read) stays the same bubble.
371
- inheritRowIdentity(prior, next);
372
- this._events.set(sessionId, next);
373
- this._pages.set(sessionId, { firstSeq: page.firstSeq, hasMore: page.hasMore, loadingEarlier: false });
374
- this._notifySession(sessionId);
375
-
376
- if (!had || !wasHydrated) {
377
- this._notifyHas();
378
- }
379
- }
380
-
381
- /**
382
- * Splice an OLDER page in front of the hydrated window (lazy scrollback).
383
- *
384
- * @param sessionId - The session.
385
- * @param page - The persisted page.
386
- */
387
- prependEventsPage(sessionId: K, page: SessionStreamPage): void {
388
- const existing = this._events.get(sessionId) ?? [];
389
- const wasHydrated = this._pages.has(sessionId);
390
- this._events.set(sessionId, [...page.events, ...existing]);
391
- this._pages.set(sessionId, { firstSeq: page.firstSeq, hasMore: page.hasMore, loadingEarlier: false });
392
- this._notifySession(sessionId);
393
-
394
- if (!wasHydrated) {
395
- this._notifyHas();
396
- }
397
- }
398
-
399
- /**
400
- * Marks a fetch of the previous page in flight, or done.
401
- *
402
- * @param sessionId - The session.
403
- * @param loading - Whether a fetch is in flight.
404
- */
405
- setLoadingEarlier(sessionId: K, loading: boolean): void {
406
- const prior = this._pages.get(sessionId) ?? NO_PAGE;
407
-
408
- if (prior.loadingEarlier === loading) {
409
- return;
410
- }
411
-
412
- this._pages.set(sessionId, { ...prior, loadingEarlier: loading });
413
- this._notifySession(sessionId);
414
- }
415
-
416
- /**
417
- * Registers a listener for one session's changes. Returns the function that removes it.
418
- *
419
- * @param sessionId - The session, or `null` for none.
420
- * @param listener - Called after the state changes.
421
- */
422
- subscribeSession(sessionId: K | null, listener: () => void): () => void {
423
- /*
424
- * `null` sessions need a still-callable subscription (returns a noop
425
- * unsubscriber). `useSyncExternalStore` calls `subscribe` once on
426
- * mount + on every snapshot identity change — we honor the signature
427
- * even for "no session" callers so the empty-state Center doesn't
428
- * crash.
429
- */
430
- if (!sessionId) {
431
- return () => undefined;
432
- }
433
-
434
- let set = this._listenersBySession.get(sessionId);
435
-
436
- if (!set) {
437
- set = new Set();
438
- this._listenersBySession.set(sessionId, set);
439
- }
440
-
441
- set.add(listener);
442
-
443
- return () => {
444
- const live = this._listenersBySession.get(sessionId);
445
-
446
- if (!live) {
447
- return;
448
- }
449
-
450
- live.delete(listener);
451
-
452
- if (live.size === 0) {
453
- this._listenersBySession.delete(sessionId);
454
- }
455
- };
456
- }
457
-
458
- /**
459
- * Subscribe to "the set of known sessions changed" — used by
460
- * `useHasEvents` so we only re-render the consumer when its target
461
- * session flips between hydrated / not.
462
- *
463
- * @param listener - Called after the state changes.
464
- */
465
- subscribeHas(listener: () => void): () => void {
466
- this._listenersForHas.add(listener);
467
-
468
- return () => {
469
- this._listenersForHas.delete(listener);
470
- };
471
- }
472
-
473
- /**
474
- * Drop EVERY session's transient state — used when the execution runtime
475
- * changes underneath the window (`useDaemon` toggled: the authority for
476
- * every transcript, run flag and per-run chip just moved to another
477
- * process, or back). Unlike `evictExcept`, running sessions are NOT spared:
478
- * a `running` flag from the previous runtime is exactly the kind of stale
479
- * truth this exists to discard. Sessions re-hydrate through the ordinary
480
- * cold path on next view, and the new runtime's `run:start`/`run:end`
481
- * re-establish the flags.
482
- */
483
- dropAll(): void {
484
- this.runStateVersion++;
485
- const had = this._events.size > 0;
486
- const sessionIds = new Set([...this._events.keys(), ...this._running.keys(), ...this._systemMd.keys()]);
487
- this._events.clear();
488
- this._running.clear();
489
- this._runSeq.clear();
490
- this._fallback.clear();
491
- this._retry.clear();
492
- this._systemMd.clear();
493
- this._pages.clear();
494
- // Echoes of sends made to the previous runtime never arrive, and no
495
- // `run:end` from it will sweep them: left in place they would swallow an
496
- // identical prompt sent through the new runtime.
497
- this._pendingEcho.clear();
498
-
499
- for (const sessionId of sessionIds) {
500
- this._notifySession(sessionId);
501
- }
502
-
503
- if (had) {
504
- this._notifyHas();
505
- }
506
- }
507
-
508
- /**
509
- * Empties a session's window and run state, and drops its hydration so the next activation reloads from disk.
510
- *
511
- * @param sessionId - The session.
512
- */
513
- reset(sessionId: K): void {
514
- const had = this._events.has(sessionId);
515
- const wasHydrated = this._pages.has(sessionId);
516
- this._events.set(sessionId, []);
517
- this._running.set(sessionId, false);
518
- this._fallback.delete(sessionId);
519
- this._retry.delete(sessionId);
520
- this._systemMd.delete(sessionId);
521
- this._pages.delete(sessionId);
522
- this._notifySession(sessionId);
523
-
524
- if (!had || wasHydrated) {
525
- this._notifyHas();
526
- }
527
- }
528
-
529
- /**
530
- * Evict every hydrated window whose session id is not in `keep` — the
531
- * memory bound for a long-lived window. Prewarm slides a window of
532
- * likely-next sessions into the cache, and this slides old entries
533
- * OUT, so a long browsing session does not accumulate one tail page per
534
- * session ever visited. Revisiting an evicted session re-hydrates through the
535
- * exact same `hydrated()` → `loadEvents` path a cold session uses.
536
- *
537
- * Never evicts:
538
- * - running sessions (live deltas exist only in this store — dropping
539
- * them would blank an in-flight background run's transcript);
540
- * - sessions with a scrollback fetch in flight (`loadingEarlier` —
541
- * the prepend landing after eviction would resurrect a window
542
- * containing ONLY the old page).
543
- *
544
- * @param keep - The sessions to keep.
545
- */
546
- evictExcept(keep: ReadonlySet<K>): void {
547
- let dropped = false;
548
-
549
- for (const sessionId of [...this._events.keys()]) {
550
- if (keep.has(sessionId) || this._running.get(sessionId) || this._pages.get(sessionId)?.loadingEarlier) {
551
- continue;
552
- }
553
-
554
- this._events.delete(sessionId);
555
- this._running.delete(sessionId);
556
- this._fallback.delete(sessionId);
557
- this._retry.delete(sessionId);
558
- /*
559
- * `_systemMd` is deliberately NOT evicted here. This pass exists to
560
- * bound the memory held by transcript EVENT windows; the override is one
561
- * small object per session, and dropping it silently hides the badge
562
- * warning that the built-in safety and git doctrine has been replaced —
563
- * with no way to recover it until the agent is rebuilt.
564
- */
565
- this._pages.delete(sessionId);
566
- this._notifySession(sessionId);
567
- dropped = true;
568
- }
569
-
570
- if (dropped) {
571
- this._notifyHas();
572
- }
573
- }
574
-
575
- /**
576
- * Drop a session entirely — called by `SessionsContext.deleteSession`
577
- * so a removed row's stored events don't leak past the IPC delete.
578
- *
579
- * @param sessionId - The session.
580
- */
581
- drop(sessionId: K): void {
582
- const had = this._events.has(sessionId) || this._running.has(sessionId);
583
- this._events.delete(sessionId);
584
- this._running.delete(sessionId);
585
- this._runSeq.delete(sessionId);
586
- this._fallback.delete(sessionId);
587
- this._retry.delete(sessionId);
588
- this._systemMd.delete(sessionId);
589
- this._pages.delete(sessionId);
590
- this._pendingEcho.delete(sessionId);
591
- this._promptPreviews.delete(sessionId);
592
-
593
- if (had) {
594
- this._notifySession(sessionId);
595
- this._notifyHas();
596
- }
597
- }
598
-
599
- /**
600
- * Remember the image previews of a prompt this window queued, so the copy
601
- * that reaches the transcript later (host drain / push) keeps thumbnails.
602
- * Bounded: a queue that never drains can't grow this without limit.
603
- *
604
- * @param sessionId - The session.
605
- * @param text - The queued prompt's text.
606
- * @param attachments - The prompt's attachments.
607
- */
608
- rememberPromptPreviews(sessionId: K, text: string, attachments: readonly ChatAttachment[]): void {
609
- const withData = attachments.filter((a) => a.dataUrl !== undefined);
610
- if (withData.length === 0) return;
611
- const list = this._promptPreviews.get(sessionId) ?? [];
612
- list.push({ text, attachments: withData });
613
- this._promptPreviews.set(sessionId, list.slice(-16));
614
- }
615
-
616
- /**
617
- * Unwind the latest `rememberPromptPreviews` entry for `text` after a failed enqueue.
618
- *
619
- * @param sessionId - The session.
620
- * @param text - The queued prompt's text.
621
- */
622
- dropPromptPreviews(sessionId: K, text: string): void {
623
- const list = this._promptPreviews.get(sessionId);
624
- if (!list) return;
625
- for (let i = list.length - 1; i >= 0; i--) {
626
- if (list[i]!.text === text) {
627
- list.splice(i, 1);
628
- if (list.length === 0) this._promptPreviews.delete(sessionId);
629
- return;
630
- }
631
- }
632
- }
633
-
634
- /**
635
- * Follow a queued entry's text edit so its previews still match when it's sent.
636
- *
637
- * @param sessionId - The session.
638
- * @param from - The queued prompt's text before the edit.
639
- * @param to - Its text after the edit.
640
- */
641
- renamePromptPreviews(sessionId: K, from: string, to: string): void {
642
- const list = this._promptPreviews.get(sessionId) ?? [];
643
- for (let i = list.length - 1; i >= 0; i--) {
644
- if (list[i]!.text === from) {
645
- list[i]!.text = to;
646
- return;
647
- }
648
- }
649
- }
650
-
651
- private takePromptPreviews(sessionId: K, text: string): ChatAttachment[] {
652
- const list = this._promptPreviews.get(sessionId);
653
- const index = list?.findIndex((entry) => entry.text === text) ?? -1;
654
- if (!list || index === -1) return [];
655
- const [taken] = list.splice(index, 1);
656
- if (list.length === 0) this._promptPreviews.delete(sessionId);
657
- return taken!.attachments;
658
- }
659
-
660
- /**
661
- * Shows the user's prompt at once (optimistic append) and waits for its host echo, which is then dropped.
662
- *
663
- * @param sessionId - The session.
664
- * @param text - The prompt text.
665
- * @param refs - The completions the prompt used (skills, files), for its chips.
666
- * @param rawAttachments - The prompt's attachments. Omitted for a pushed queued prompt, which takes the previews this client remembered for it.
667
- */
668
- appendUserPrompt(
669
- sessionId: K,
670
- text: string,
671
- refs?: readonly PromptSegmentRef[],
672
- rawAttachments?: readonly ChatAttachment[],
673
- ): void {
674
- const had = this._events.has(sessionId);
675
- const events = this._events.get(sessionId)?.slice() ?? [];
676
- /*
677
- * A pushed queued entry is appended with no attachment list at all:
678
- * restore its previews. A local send passes its own list (possibly
679
- * empty), so it never inherits another prompt's previews.
680
- */
681
- const attachments =
682
- rawAttachments === undefined || missingPreviewData(rawAttachments)
683
- ? mergePromptPreviews(rawAttachments, this.takePromptPreviews(sessionId, text))
684
- : rawAttachments;
685
-
686
- /*
687
- * `refs` only attaches when the user actually used a completion —
688
- * bare prompts skip the field entirely so downstream `refs?.length`
689
- * checks fast-path without a clone.
690
- *
691
- * `attachments` rides along on `ChatEvent` — canonical
692
- * `StreamEvent` has no slot for it (TUI doesn't render inline
693
- * images), but the GUI wire type extends it with the optional
694
- * field.
695
- */
696
- const event: ChatEvent = {
697
- kind: 'user-prompt',
698
- text,
699
- ...(refs && refs.length > 0 ? { refs: [...refs] } : {}),
700
- ...(attachments && attachments.length > 0 ? { attachments: [...attachments] } : {}),
701
- };
702
- events.push(event);
703
-
704
- const pending = this._pendingEcho.get(sessionId) ?? [];
705
- pending.push(text);
706
- this._pendingEcho.set(sessionId, pending);
707
-
708
- this._events.set(sessionId, events);
709
- this._notifySession(sessionId);
710
-
711
- if (!had) {
712
- this._notifyHas();
713
- }
714
- }
715
-
716
- /**
717
- * Unwind ONE pending echo after a FAILED send — a refused/errored send
718
- * produces no run, so the `run:end` sweep never fires and the stale
719
- * entry would silently swallow an identical remote prompt later.
720
- *
721
- * @param sessionId - The session.
722
- * @param text - The prompt text.
723
- */
724
- dropPendingEcho(sessionId: K, text: string): void {
725
- const pending = this._pendingEcho.get(sessionId);
726
- const index = pending?.indexOf(text) ?? -1;
727
-
728
- if (pending && index !== -1) {
729
- pending.splice(index, 1);
730
- }
731
- }
732
-
733
- /**
734
- * The prompt texts this client appended that still await their host echo
735
- * (see `appendUserPrompt`). The live list: an adapter that keeps its own
736
- * echo rule (`createLiveState`) edits it in place.
737
- *
738
- * @param sessionId - The session.
739
- */
740
- pendingEchoes(sessionId: K): string[] {
741
- let pending = this._pendingEcho.get(sessionId);
742
-
743
- if (!pending) {
744
- pending = [];
745
- this._pendingEcho.set(sessionId, pending);
746
- }
747
-
748
- return pending;
749
- }
750
-
751
- /**
752
- * Low-level write: sets any of a session's events, run flag and page state
753
- * in one notification, with none of the signal rules (no finalize, no
754
- * reconcile). For adapters that own their merge rules (`createLiveState`).
755
- * The store keeps `events` as given and never mutates it.
756
- *
757
- * @param sessionId - The session.
758
- * @param patch - The fields to set.
759
- */
760
- write(sessionId: K, patch: SessionStreamWrite): void {
761
- const had = this._events.has(sessionId);
762
- const wasHydrated = this._pages.has(sessionId);
763
-
764
- if (patch.events !== undefined) {
765
- this._events.set(sessionId, patch.events as ChatEvent[]);
766
- } else if (!had) {
767
- this._events.set(sessionId, []);
768
- }
769
-
770
- if (patch.running !== undefined) {
771
- this._running.set(sessionId, patch.running);
772
- }
773
-
774
- if (patch.page === null) {
775
- this._pages.delete(sessionId);
776
- } else if (patch.page !== undefined) {
777
- this._pages.set(sessionId, patch.page);
778
- }
779
-
780
- this._notifySession(sessionId);
781
-
782
- if (!had || wasHydrated !== this._pages.has(sessionId)) {
783
- this._notifyHas();
784
- }
785
- }
786
-
787
- /**
788
- * Appends a display-only error row (a send that failed before any run).
789
- *
790
- * @param sessionId - The session.
791
- * @param text - The error message.
792
- */
793
- appendErrorEvent(sessionId: K, text: string): void {
794
- const had = this._events.has(sessionId);
795
- const events = this._events.get(sessionId)?.slice() ?? [];
796
- events.push({ kind: 'error', text });
797
- this._events.set(sessionId, events);
798
- this._notifySession(sessionId);
799
-
800
- if (!had) {
801
- this._notifyHas();
802
- }
803
- }
804
-
805
- /**
806
- * Reduces one live signal into its session (see {@link SessionStreamSignal}). Signals of other kinds are ignored.
807
- *
808
- * @param input - The signal.
809
- */
810
- applySignal(input: SessionStreamSignal<K> | OtherStreamSignal): void {
811
- const signal = input as SessionStreamSignal<K>;
812
- switch (signal.kind) {
813
- case 'run:start': {
814
- this.runStateVersion++;
815
- const had = this._events.has(signal.sessionId);
816
-
817
- if (!had) {
818
- this._events.set(signal.sessionId, []);
819
- this._notifyHas();
820
- }
821
-
822
- this._running.set(signal.sessionId, true);
823
- this._runSeq.set(signal.sessionId, (this._runSeq.get(signal.sessionId) ?? 0) + 1);
824
- // Fallback is run-sticky — a new run starts from the primary, so
825
- // the pill snaps back until (unless) this run falls back too.
826
- this._fallback.delete(signal.sessionId);
827
- this._notifySession(signal.sessionId);
828
-
829
- return;
830
- }
831
- case 'run:end': {
832
- this.runStateVersion++;
833
- const prior = this._events.get(signal.sessionId) ?? [];
834
-
835
- /*
836
- * Finalize any in-flight streaming markdown first so its caret
837
- * disappears and the final text persists.
838
- */
839
- // Run over: close every reasoning lane still open, whatever its owner
840
- // (a worker aborted mid-thought gets no `turn:end`), so each row
841
- // collapses with its duration.
842
- let next = finishLive(prior);
843
-
844
- /*
845
- * When the run rejected, append an error row carrying the message.
846
- * Without this the failure is silent — the user sees their prompt
847
- * submitted, then nothing, with no clue why. The most common
848
- * causes are provider auth issues, protocol-history rejections
849
- * (unresolved tool_use from a prior session), and aborts.
850
- */
851
- if (!signal.ok && signal.error) {
852
- next = [...next, { kind: 'error', text: signal.error, ...(signal.detail ? { detail: signal.detail } : {}) }];
853
- }
854
-
855
- const had = this._events.has(signal.sessionId);
856
- this._events.set(signal.sessionId, next);
857
- this._running.set(signal.sessionId, false);
858
- // Retry can't outlive its run: a terminal failure never streams again,
859
- // so nothing else would ever clear the indicator.
860
- this._retry.delete(signal.sessionId);
861
- // No echo can follow its run — drop leftovers (e.g. failed sends)
862
- // so they can't swallow an identical future remote prompt.
863
- this._pendingEcho.delete(signal.sessionId);
864
- this._notifySession(signal.sessionId);
865
-
866
- if (!had) {
867
- this._notifyHas();
868
- }
869
-
870
- return;
871
- }
872
- case 'turn:end': {
873
- const prior = this._events.get(signal.sessionId) ?? [];
874
- const owner: Owner = signal.childId ?? PARENT_OWNER;
875
- const had = this._events.has(signal.sessionId);
876
- this._events.set(
877
- signal.sessionId,
878
- finalizeStreamingMarkdownForOwner(closeThinkingSegment(prior, owner), owner),
879
- );
880
- this._notifySession(signal.sessionId);
881
-
882
- if (!had) {
883
- this._notifyHas();
884
- }
885
-
886
- return;
887
- }
888
- case 'event': {
889
- // The sender's own echo: consume exactly one pending optimistic
890
- // append (see `_pendingEcho`) instead of rendering a duplicate.
891
- if (signal.event.kind === 'user-prompt' && signal.echo) {
892
- const pending = this._pendingEcho.get(signal.sessionId);
893
- const index = pending?.indexOf(signal.event.text) ?? -1;
894
-
895
- if (pending && index !== -1) {
896
- pending.splice(index, 1);
897
- return;
898
- }
899
- }
900
-
901
- // A host-sent queued prompt carries attachment metadata only; paint
902
- // the thumbnails this window kept when it queued the message.
903
- let event = signal.event as ChatEvent;
904
-
905
- if (event.kind === 'user-prompt' && missingPreviewData(event.attachments)) {
906
- const previews = this.takePromptPreviews(signal.sessionId, event.text);
907
- if (previews.length > 0) event = { ...event, attachments: mergePromptPreviews(event.attachments, previews) };
908
- }
909
-
910
- const had = this._events.has(signal.sessionId);
911
- const prior = this._events.get(signal.sessionId) ?? [];
912
- this._events.set(signal.sessionId, this._append(prior, event));
913
- // Transcript events arrive at token rate (thinking deltas, tool bursts): the state is
914
- // current at once, subscribers hear about it once per frame.
915
- if (this._batch) this._notifySoon(signal.sessionId);
916
- else this._notifySession(signal.sessionId);
917
-
918
- if (!had) {
919
- this._notifyHas();
920
- }
921
-
922
- return;
923
- }
924
- case 'model:fallback': {
925
- this._fallback.set(signal.sessionId, signal.to);
926
- if (signal.discardTurnId) this._discardThinking(signal.sessionId, 'parent', signal.discardTurnId);
927
- this._notifySession(signal.sessionId);
928
-
929
- return;
930
- }
931
- // `cache:break` falls to `default`: the transcript row arrives as a persisted notice `event`, filed after the turn it describes.
932
- case 'stream:retry': {
933
- this._retry.set(signal.sessionId, {
934
- attempt: signal.attempt,
935
- max: signal.max,
936
- source: signal.source,
937
- });
938
- if (signal.discardTurnId) this._discardThinking(signal.sessionId, signal.source, signal.discardTurnId);
939
- this._notifySession(signal.sessionId);
940
-
941
- return;
942
- }
943
- case 'prompt-turns': {
944
- /*
945
- * Bind just-persisted prompt turns to their live `user-prompt` echoes so
946
- * a prompt sent from THIS window becomes selectable (hover actions,
947
- * edit, delete, fork) during the run — not only after the run-end
948
- * hydration replaces the transcript. Same fix the TUI applies via
949
- * `onPromptTurns`, on the same shared matcher. `ChatEvent` only
950
- * narrows `attachments`, which the matcher reads structurally, so the
951
- * cast back is safe.
952
- */
953
- const events = this._events.get(signal.sessionId);
954
-
955
- if (!events || events.length === 0) {
956
- return;
957
- }
958
-
959
- const next = retagUserPromptEventsFromRefs(events as unknown as StreamEvent[], signal.refs);
960
-
961
- if (next !== events) {
962
- // The bound prompt is the same bubble: its row keeps its key, so it updates in place
963
- // instead of remounting (the send "blinked": the bubble rose a second time).
964
- inheritRowIdentity(events, next);
965
- this._events.set(signal.sessionId, next as unknown as ChatEvent[]);
966
- this._notifySession(signal.sessionId);
967
- }
968
-
969
- return;
970
- }
971
- case 'stream:retry:cleared': {
972
- /*
973
- * Source-matched: a subagent stream dying must not clear a retry the
974
- * PARENT stream is still in the middle of (and vice versa).
975
- */
976
- const current = this._retry.get(signal.sessionId);
977
-
978
- if (current?.source === signal.source) {
979
- this._retry.delete(signal.sessionId);
980
- this._notifySession(signal.sessionId);
981
- }
982
-
983
- return;
984
- }
985
- case 'system-md': {
986
- /*
987
- * Which `SYSTEM.md` composed this session's prompt, or null for none.
988
- *
989
- * This must be surfaced, not merely stored: a `SYSTEM.md` REPLACES the
990
- * built-in doctrine rather than appending to it, so an override in
991
- * force means the safety and git guidance the user expects is gone —
992
- * silently, since nothing errors. The host applies it wherever the
993
- * prompt is composed, which can be another process.
994
- */
995
- this._systemMd.set(signal.sessionId, signal.file);
996
- this._notifySession(signal.sessionId);
997
-
998
- return;
999
- }
1000
- default: {
1001
- return;
1002
- }
1003
- }
1004
- }
1005
-
1006
- /**
1007
- * Apply a batch of synthesized smooth-stream deltas in one shot.
1008
- * Coalesces per-session work so a tick that touches sessions A and B
1009
- * fires exactly one notify per session — not one per delta.
1010
- *
1011
- * @param plan - The text released from the smooth-stream buckets.
1012
- */
1013
- applyDrainPlan(plan: readonly DrainPlan<K>[]): void {
1014
- if (plan.length === 0) {
1015
- return;
1016
- }
1017
-
1018
- const touched = new Set<K>();
1019
-
1020
- for (const entry of plan) {
1021
- const prior = this._events.get(entry.sessionId) ?? [];
1022
-
1023
- const synthetic: StreamEvent = {
1024
- kind: 'markdown',
1025
- text: entry.text,
1026
- streaming: true,
1027
- ...(entry.childId ? { childId: entry.childId } : {}),
1028
- ...(entry.depth != null ? { depth: entry.depth } : {}),
1029
- ...(entry.turnId ? { turnId: entry.turnId } : {}),
1030
- };
1031
-
1032
- this._events.set(entry.sessionId, this._append(prior, synthetic));
1033
- touched.add(entry.sessionId);
1034
- }
1035
-
1036
- for (const sessionId of touched) {
1037
- this._notifySession(sessionId);
1038
- }
1039
- }
1040
-
1041
- /** Sessions whose subscribers are owed a notification at the next frame (`_notifySoon`). */
1042
- private _pendingNotify = new Set<K>();
1043
- private _flushHandles: { raf: unknown; timer: unknown } = { raf: null, timer: null };
1044
-
1045
- /**
1046
- * Coalesce notifications to one per frame. A frame callback when frames run, a
1047
- * timer when they don't (a hidden window throttles rAF; updates must still land).
1048
- */
1049
- private _notifySoon(sessionId: K): void {
1050
- this._pendingNotify.add(sessionId);
1051
- if (this._flushHandles.raf !== null || this._flushHandles.timer !== null) return;
1052
- const flush = () => this.flushNotifications();
1053
- this._flushHandles.raf = this._scheduler.frame(flush) ?? null;
1054
- this._flushHandles.timer = this._scheduler.timeout(flush, NOTIFY_FALLBACK_MS);
1055
- }
1056
-
1057
- /** Deliver notifications `_notifySoon` held back (also called before anything that must be immediate). */
1058
- flushNotifications(): void {
1059
- const { raf, timer } = this._flushHandles;
1060
- if (raf !== null) this._scheduler.cancelFrame(raf);
1061
- if (timer !== null) this._scheduler.cancelTimeout(timer);
1062
- this._flushHandles = { raf: null, timer: null };
1063
- if (this._pendingNotify.size === 0) return;
1064
- const ids = [...this._pendingNotify];
1065
- this._pendingNotify.clear();
1066
- for (const id of ids) this._notifySession(id);
1067
- }
1068
-
1069
- /** Drop a stalled attempt's reasoning lane: the retry (or next model) streams its own, and the saved turn never holds it. */
1070
- private _discardThinking(sessionId: K, source: string, turnId: string): void {
1071
- const events = this._events.get(sessionId);
1072
- if (!events) return;
1073
- const next = discardThinking(events, source, turnId);
1074
- if (next !== events) this._events.set(sessionId, next);
1075
- }
1076
-
1077
- /**
1078
- * Append a fresh event with the kit's live rule (`applyLiveEvent`, the
1079
- * web chat's too): markdown / thinking deltas grow the owner's open block
1080
- * even when concurrent subagents rotate the tail between them, a new
1081
- * thinking lane is stamped with its start, any other event of an owner
1082
- * closes that owner's lane ("Thought for Ns"), and tool rows get their
1083
- * live arrival time (`receivedAt`, the fallback for a host that sends no
1084
- * timing of its own).
1085
- */
1086
- private _append(events: ChatEvent[], event: ChatEvent | StreamEvent): ChatEvent[] {
1087
- return applyLiveEvent<ChatEvent>(events, event as ChatEvent, Date.now(), this._markdown);
1088
- }
1089
-
1090
- private _notifySession(sessionId: K): void {
1091
- // Anything owed to this session goes out with this notification.
1092
- this._pendingNotify.delete(sessionId);
1093
- const set = this._listenersBySession.get(sessionId);
1094
-
1095
- if (set) {
1096
- for (const listener of set) {
1097
- listener();
1098
- }
1099
- }
1100
- }
1101
-
1102
- private _notifyHas(): void {
1103
- for (const listener of this._listenersForHas) {
1104
- listener();
1105
- }
1106
- }
1107
- }