zidane-ui 9.1.13 → 9.1.14

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 (309) hide show
  1. package/dist/adapters/index.d.ts +2 -2
  2. package/dist/adapters/index.js +2 -2
  3. package/dist/adapters/live.d.ts +29 -3
  4. package/dist/adapters/live.js +9 -1
  5. package/dist/adapters/server-composer-host.js +17 -2
  6. package/dist/adapters/server-extensions-host.d.ts +0 -1
  7. package/dist/adapters/server-extensions-host.js +5 -16
  8. package/dist/adapters/server-git-host.js +7 -16
  9. package/dist/adapters/server-host.js +181 -43
  10. package/dist/adapters/server-machines-host.d.ts +2 -0
  11. package/dist/adapters/server-machines-host.js +24 -25
  12. package/dist/adapters/server-onboarding-host.d.ts +1 -1
  13. package/dist/adapters/server-onboarding-host.js +3 -4
  14. package/dist/adapters/server-session-host.js +22 -3
  15. package/dist/adapters/server-settings-accounts.js +2 -2
  16. package/dist/adapters/server-settings-host.js +3 -3
  17. package/dist/adapters/server-settings-performance.js +7 -9
  18. package/dist/adapters/server-settings-sections.js +13 -14
  19. package/dist/adapters/server-sidebar-host.js +2 -2
  20. package/dist/adapters/sse-host.js +68 -3
  21. package/dist/adapters/sse-protocol.d.ts +12 -2
  22. package/dist/adapters/sse-protocol.js +4 -2
  23. package/dist/app/AppHostProvider.js +4 -3
  24. package/dist/app/ModalProvider.d.ts +13 -3
  25. package/dist/app/ModalProvider.js +103 -24
  26. package/dist/app/NoticeStack.d.ts +33 -0
  27. package/dist/app/NoticeStack.js +90 -0
  28. package/dist/app/index.d.ts +3 -2
  29. package/dist/app/index.js +3 -2
  30. package/dist/appearance/AppearanceProvider.js +2 -2
  31. package/dist/appearance/headless/index.js +1 -1
  32. package/dist/approvals/headless/index.js +2 -2
  33. package/dist/chat/SessionFilterMenu.d.ts +1 -1
  34. package/dist/chat/SessionFilterMenu.js +2 -1
  35. package/dist/chat/Transcript.js +1 -1
  36. package/dist/chat/composer/Composer.js +9 -6
  37. package/dist/chat/composer/ComposerEditor.js +1 -1
  38. package/dist/chat/composer/ConversationBadges.js +1 -1
  39. package/dist/chat/composer/ModelChainList.js +17 -8
  40. package/dist/chat/composer/ModelChainTooltip.js +5 -2
  41. package/dist/chat/composer/use-composer-stores.js +1 -1
  42. package/dist/chat/composer/use-draft-target.d.ts +20 -1
  43. package/dist/chat/composer/use-draft-target.js +122 -6
  44. package/dist/chat/composer/use-new-session-defaults.d.ts +5 -1
  45. package/dist/chat/composer/use-new-session-defaults.js +17 -4
  46. package/dist/chat/composer/use-run-meter.js +1 -1
  47. package/dist/chat/composer/use-send-prompt.js +1 -1
  48. package/dist/chat/headless/chip-labels.d.ts +1 -0
  49. package/dist/chat/headless/chip-labels.js +1 -0
  50. package/dist/chat/headless/composer/index.js +2 -2
  51. package/dist/chat/headless/draft-target.d.ts +21 -1
  52. package/dist/chat/headless/fixture-host.js +17 -2
  53. package/dist/chat/headless/host.d.ts +3 -3
  54. package/dist/chat/headless/index.d.ts +9 -9
  55. package/dist/chat/headless/index.js +15 -15
  56. package/dist/chat/headless/labels.d.ts +13 -4
  57. package/dist/chat/headless/labels.js +8 -5
  58. package/dist/chat/headless/session-list.d.ts +20 -6
  59. package/dist/chat/headless/session-list.js +1 -0
  60. package/dist/chat/headless/sidebar/directory.d.ts +56 -14
  61. package/dist/chat/headless/sidebar/directory.js +149 -70
  62. package/dist/chat/headless/sidebar/index.d.ts +3 -3
  63. package/dist/chat/headless/sidebar/index.js +3 -3
  64. package/dist/chat/headless/sidebar/labels.d.ts +15 -6
  65. package/dist/chat/headless/sidebar/types.d.ts +3 -1
  66. package/dist/chat/headless/sidebar/view.d.ts +13 -5
  67. package/dist/chat/headless/sidebar/view.js +31 -11
  68. package/dist/chat/headless/streams/actions.d.ts +5 -3
  69. package/dist/chat/headless/streams/actions.js +3 -2
  70. package/dist/chat/headless/streams/index.d.ts +3 -3
  71. package/dist/chat/headless/streams/merge.d.ts +6 -10
  72. package/dist/chat/headless/streams/merge.js +7 -21
  73. package/dist/chat/headless/streams/session-streams.d.ts +29 -4
  74. package/dist/chat/headless/streams/session-streams.js +86 -0
  75. package/dist/chat/headless/streams/store.d.ts +162 -16
  76. package/dist/chat/headless/streams/store.js +334 -38
  77. package/dist/chat/headless/streams/types.d.ts +10 -7
  78. package/dist/chat/headless/transcript-labels.d.ts +1 -0
  79. package/dist/chat/interactions/PlanCard.js +10 -3
  80. package/dist/chat/interactions/QuestionForm.js +7 -3
  81. package/dist/chat/interactions/card-ui.d.ts +5 -3
  82. package/dist/chat/interactions/card-ui.js +9 -7
  83. package/dist/chat/sidebar/SessionSidebar.js +5 -5
  84. package/dist/chat/sidebar/SidebarFilterMenu.js +3 -1
  85. package/dist/chat/sidebar/SidebarFrame.d.ts +4 -0
  86. package/dist/chat/sidebar/SidebarFrame.js +27 -9
  87. package/dist/chat/sidebar/SidebarGroupHeader.js +1 -1
  88. package/dist/chat/sidebar/SidebarHostProvider.d.ts +8 -5
  89. package/dist/chat/sidebar/SidebarHostProvider.js +13 -9
  90. package/dist/chat/sidebar/SidebarToggleButton.js +7 -3
  91. package/dist/chat/sidebar/index.d.ts +2 -2
  92. package/dist/chat/sidebar/session-menu.js +4 -4
  93. package/dist/chat/sidebar/useSaveViewAsSpace.js +2 -2
  94. package/dist/chat/testing/contract.js +2 -2
  95. package/dist/chat/transcript/AuthFailureCard.js +11 -8
  96. package/dist/chat/transcript/BadgeMenu.js +13 -2
  97. package/dist/chat/transcript/MermaidDiagram.js +7 -3
  98. package/dist/chat/transcript/fold.d.ts +4 -0
  99. package/dist/chat/transcript/fold.js +53 -22
  100. package/dist/chat/transcript/script-input.d.ts +1 -1
  101. package/dist/chat/transcript/shell-block.js +8 -4
  102. package/dist/chat/transcript/useStickToBottom.js +12 -0
  103. package/dist/components/BrowserSignIn.js +23 -21
  104. package/dist/components/Form.d.ts +6 -4
  105. package/dist/components/Form.js +16 -8
  106. package/dist/components/LoadError.d.ts +4 -2
  107. package/dist/components/LoadError.js +13 -9
  108. package/dist/components/Notice.d.ts +29 -0
  109. package/dist/components/Notice.js +63 -0
  110. package/dist/components/PanelEmpty.d.ts +1 -1
  111. package/dist/components/PanelEmpty.js +4 -2
  112. package/dist/components/Restricted.d.ts +1 -1
  113. package/dist/components/palette/PaletteList.js +8 -1
  114. package/dist/components/palette/PalettePanel.js +14 -6
  115. package/dist/core.css +24 -5
  116. package/dist/dist/{index-Bq87OcGy.d.ts → index-C6rzc-tt.d.ts} +28 -3
  117. package/dist/dist/index.d.ts +2 -2
  118. package/dist/dist/{timeout-B5pO5I5a.d.ts → timeout-Cz9dRF8Q.d.ts} +1 -1
  119. package/dist/extensions/ExtensionSettingsPage.js +2 -5
  120. package/dist/extensions/ExtensionSettingsSection.js +5 -4
  121. package/dist/extensions/ExtensionSettingsSidebar.js +3 -7
  122. package/dist/extensions/SettingsWireForm.d.ts +1 -7
  123. package/dist/extensions/SettingsWireForm.js +7 -5
  124. package/dist/extensions/headless/fixture-host.d.ts +1 -5
  125. package/dist/extensions/headless/fixture-host.js +2 -5
  126. package/dist/extensions/headless/host.d.ts +1 -11
  127. package/dist/extensions/headless/index.d.ts +3 -3
  128. package/dist/extensions/headless/index.js +6 -6
  129. package/dist/extensions/headless/select.d.ts +1 -11
  130. package/dist/extensions/headless/select.js +1 -18
  131. package/dist/extensions/hooks.js +1 -1
  132. package/dist/files/EditorColumn.js +13 -2
  133. package/dist/files/MediaDiff.js +1 -1
  134. package/dist/files/TreeColumn.js +13 -20
  135. package/dist/files/useEntryActions.js +1 -1
  136. package/dist/files/useOpenFiles.js +3 -1
  137. package/dist/git/BranchMenu.js +6 -4
  138. package/dist/git/ImportRepoDialog.js +18 -9
  139. package/dist/git/MoveSessionDialog.js +16 -8
  140. package/dist/git/RemoteFolderPicker.js +35 -17
  141. package/dist/git/SyncChip.js +17 -17
  142. package/dist/git/WherePicker.d.ts +16 -1
  143. package/dist/git/WherePicker.js +81 -37
  144. package/dist/git/headless/environment.d.ts +33 -3
  145. package/dist/git/headless/environment.js +33 -5
  146. package/dist/git/headless/index.d.ts +2 -2
  147. package/dist/git/headless/index.js +2 -2
  148. package/dist/git/headless/labels.d.ts +15 -2
  149. package/dist/git/headless/labels.js +17 -4
  150. package/dist/git/useEnvironmentChoices.d.ts +3 -1
  151. package/dist/git/useEnvironmentChoices.js +7 -4
  152. package/dist/index.d.ts +2 -1
  153. package/dist/index.js +2 -1
  154. package/dist/keybindings/KeyCommands.js +1 -1
  155. package/dist/keybindings/KeybindingsProvider.js +1 -1
  156. package/dist/keybindings/headless/index.js +2 -2
  157. package/dist/keybindings/headless/overrides.js +1 -1
  158. package/dist/labels.d.ts +5 -0
  159. package/dist/labels.js +5 -0
  160. package/dist/machines/AddMachineDialog.d.ts +34 -0
  161. package/dist/machines/AddMachineDialog.js +464 -0
  162. package/dist/machines/Banners.d.ts +33 -4
  163. package/dist/machines/Banners.js +64 -3
  164. package/dist/machines/DaemonMenu.js +27 -4
  165. package/dist/machines/HostCapabilities.d.ts +1 -3
  166. package/dist/machines/HostCapabilities.js +24 -45
  167. package/dist/machines/HostSyncPanel.js +124 -130
  168. package/dist/machines/HostsSection.d.ts +4 -1
  169. package/dist/machines/HostsSection.js +30 -7
  170. package/dist/machines/MachinesExplainer.d.ts +17 -0
  171. package/dist/machines/MachinesExplainer.js +71 -0
  172. package/dist/machines/MachinesProvider.d.ts +14 -2
  173. package/dist/machines/MachinesProvider.js +35 -1
  174. package/dist/machines/ServerAddedCard.d.ts +31 -0
  175. package/dist/machines/ServerAddedCard.js +72 -0
  176. package/dist/machines/ServerCard.js +91 -215
  177. package/dist/machines/ServerMachinesPanel.d.ts +2 -2
  178. package/dist/machines/ServerMachinesPanel.js +184 -323
  179. package/dist/machines/ServerUpdatePanel.js +51 -40
  180. package/dist/machines/ShareThisComputerForm.d.ts +19 -0
  181. package/dist/machines/ShareThisComputerForm.js +133 -0
  182. package/dist/machines/SyncOutcomeBadge.js +1 -1
  183. package/dist/machines/TokensPanel.d.ts +5 -3
  184. package/dist/machines/TokensPanel.js +98 -78
  185. package/dist/machines/headless/fixture-host.d.ts +19 -3
  186. package/dist/machines/headless/fixture-host.js +43 -6
  187. package/dist/machines/headless/fixtures.js +4 -6
  188. package/dist/machines/headless/host.d.ts +40 -19
  189. package/dist/machines/headless/index.d.ts +3 -3
  190. package/dist/machines/headless/index.js +3 -3
  191. package/dist/machines/headless/labels.d.ts +63 -20
  192. package/dist/machines/headless/labels.js +88 -25
  193. package/dist/machines/headless/messages.js +8 -0
  194. package/dist/machines/headless/stores.d.ts +9 -2
  195. package/dist/machines/headless/stores.js +28 -1
  196. package/dist/machines/index.d.ts +7 -3
  197. package/dist/machines/index.js +8 -4
  198. package/dist/machines/testing/contract.d.ts +15 -3
  199. package/dist/machines/testing/contract.js +68 -14
  200. package/dist/motion/grow.d.ts +8 -1
  201. package/dist/motion/grow.js +10 -4
  202. package/dist/onboarding/headless/labels.d.ts +13 -0
  203. package/dist/onboarding/headless/labels.js +8 -0
  204. package/dist/onboarding/sources/SourceBrowser.js +11 -7
  205. package/dist/onboarding/steps/ImportStep.js +4 -1
  206. package/dist/onboarding/steps/ReadyStep.js +9 -2
  207. package/dist/onboarding/steps/connect/KeyForm.js +6 -2
  208. package/dist/onboarding/steps/connect/ProviderPanel.js +6 -2
  209. package/dist/onboarding/steps/connect/ProviderReady.js +25 -20
  210. package/dist/onboarding/steps/tasks.js +17 -14
  211. package/dist/palette/app-sources.js +1 -1
  212. package/dist/server/sse-handler.js +141 -19
  213. package/dist/session/ArtifactsPanel.js +40 -18
  214. package/dist/session/PlanTracker.js +13 -8
  215. package/dist/session/ProjectHome.js +13 -11
  216. package/dist/session/RemindersPanel.js +35 -17
  217. package/dist/session/RunningWorkDialog.js +6 -2
  218. package/dist/session/SecretsPanel.js +29 -10
  219. package/dist/session/SessionDetailsDialog.d.ts +1 -1
  220. package/dist/session/SessionDetailsDialog.js +18 -10
  221. package/dist/session/SideChat.js +10 -7
  222. package/dist/session/TurnDetailsDialog.js +19 -5
  223. package/dist/session/UsagePanel.js +10 -4
  224. package/dist/session/headless/host.d.ts +2 -0
  225. package/dist/session/headless/index.js +2 -2
  226. package/dist/session/headless/labels.d.ts +19 -1
  227. package/dist/session/headless/labels.js +15 -1
  228. package/dist/session/headless/queue.js +2 -1
  229. package/dist/session/headless/reminder-labels.d.ts +4 -0
  230. package/dist/session/headless/reminder-labels.js +4 -0
  231. package/dist/settings/SettingsRestricted.d.ts +1 -1
  232. package/dist/settings/SettingsRestricted.js +4 -4
  233. package/dist/settings/SettingsShell.d.ts +7 -0
  234. package/dist/settings/SettingsShell.js +6 -1
  235. package/dist/settings/headless/fixture-performance.d.ts +1 -1
  236. package/dist/settings/headless/host.d.ts +2 -2
  237. package/dist/settings/headless/index.js +1 -1
  238. package/dist/settings/headless/labels.d.ts +3 -3
  239. package/dist/settings/headless/labels.js +3 -3
  240. package/dist/settings/headless/performance.d.ts +3 -4
  241. package/dist/settings/headless/search.d.ts +1 -1
  242. package/dist/settings/index.d.ts +2 -1
  243. package/dist/settings/index.js +2 -1
  244. package/dist/settings/sections/appearance/AppearanceSection.js +2 -2
  245. package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
  246. package/dist/settings/sections/editor/EditorSection.js +8 -5
  247. package/dist/settings/sections/editor/labels.d.ts +1 -0
  248. package/dist/settings/sections/editor/labels.js +1 -0
  249. package/dist/settings/sections/environments/EnvironmentsSection.js +21 -14
  250. package/dist/settings/sections/environments/labels.d.ts +1 -0
  251. package/dist/settings/sections/environments/labels.js +2 -1
  252. package/dist/settings/sections/extensions/ChangeOriginDialog.js +1 -1
  253. package/dist/settings/sections/extensions/CreateExtensionDialog.js +1 -1
  254. package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +1 -3
  255. package/dist/settings/sections/extensions/ExtensionConfigRows.js +20 -19
  256. package/dist/settings/sections/extensions/ExtensionOptionsSection.js +2 -1
  257. package/dist/settings/sections/extensions/ExtensionsSection.js +1 -1
  258. package/dist/settings/sections/extensions/options-labels.d.ts +2 -1
  259. package/dist/settings/sections/extensions/options-labels.js +2 -1
  260. package/dist/settings/sections/host-catalog/HostCatalogSection.js +1 -1
  261. package/dist/settings/sections/index.d.ts +2 -1
  262. package/dist/settings/sections/index.js +2 -1
  263. package/dist/settings/sections/instructions/InstructionsSection.js +1 -1
  264. package/dist/settings/sections/logs/LogsSection.d.ts +2 -2
  265. package/dist/settings/sections/logs/LogsSection.js +2 -2
  266. package/dist/settings/sections/mcp/McpSection.d.ts +1 -1
  267. package/dist/settings/sections/mcp/McpSection.js +13 -7
  268. package/dist/settings/sections/mcp/McpServerRow.js +21 -14
  269. package/dist/settings/sections/mcp/labels.d.ts +8 -2
  270. package/dist/settings/sections/mcp/labels.js +8 -2
  271. package/dist/settings/sections/models/ModelRows.js +1 -1
  272. package/dist/settings/sections/models/NewChatPlaceRow.d.ts +26 -0
  273. package/dist/settings/sections/models/NewChatPlaceRow.js +78 -0
  274. package/dist/settings/sections/models/SpacesDefaultsSection.js +15 -3
  275. package/dist/settings/sections/models/labels.d.ts +7 -0
  276. package/dist/settings/sections/models/labels.js +7 -0
  277. package/dist/settings/sections/models/model-test.js +7 -4
  278. package/dist/settings/sections/performance/PerformanceSection.js +16 -6
  279. package/dist/settings/sections/performance/labels.d.ts +1 -1
  280. package/dist/settings/sections/performance/labels.js +1 -1
  281. package/dist/settings/sections/providers/ProvidersSection.d.ts +1 -1
  282. package/dist/settings/sections/providers/ProvidersSection.js +15 -8
  283. package/dist/settings/sections/providers/ServerProvidersSection.d.ts +1 -1
  284. package/dist/settings/sections/providers/ServerProvidersSection.js +12 -6
  285. package/dist/settings/sections/providers/labels.d.ts +2 -2
  286. package/dist/settings/sections/providers/labels.js +2 -2
  287. package/dist/settings/sections/shared/catalog.js +1 -1
  288. package/dist/settings/sections/skills/SkillsSection.js +1 -1
  289. package/dist/settings/testing/performance.contract.js +8 -12
  290. package/dist/styles.css +32 -3
  291. package/dist/terminal/HostTerminalSurface.js +17 -7
  292. package/dist/terminal/TerminalPanel.js +30 -17
  293. package/dist/terminal/TerminalSurface.js +11 -4
  294. package/dist/terminal/headless/labels.d.ts +5 -0
  295. package/dist/terminal/headless/labels.js +5 -0
  296. package/dist/terminal/headless/store.d.ts +1 -1
  297. package/dist/terminal/headless/store.js +6 -3
  298. package/dist/workspace/LayoutBudget.d.ts +5 -1
  299. package/dist/workspace/LayoutBudget.js +14 -1
  300. package/dist/workspace/PanelContentView.d.ts +1 -1
  301. package/dist/workspace/PanelContentView.js +17 -6
  302. package/dist/workspace/WorkspaceProvider.js +4 -3
  303. package/dist/workspace/extension-tabs.js +1 -1
  304. package/dist/workspace/headless/index.js +1 -1
  305. package/dist/workspace/headless/labels.d.ts +1 -0
  306. package/dist/workspace/headless/labels.js +1 -0
  307. package/package.json +3 -3
  308. package/src/styles/motion.css +8 -0
  309. package/src/styles/primitives.css +7 -0
@@ -99,7 +99,7 @@ declare const DEFAULT_CHAT_LABELS: {
99
99
  authSignedInRetrying: string;
100
100
  authFixed: string;
101
101
  authTryAgain: string;
102
- authFailed: (message: string) => string;
102
+ authSignInFailed: string;
103
103
  sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string;
104
104
  clickToAnswer: string;
105
105
  openSession: string;
@@ -160,7 +160,7 @@ declare const DEFAULT_CHAT_LABELS: {
160
160
  /** Copy button of a diagram frame. */
161
161
  copyDiagramSource: string;
162
162
  /** Under a fence that could not be drawn; `at` is `line 3, column 7` or empty. */
163
- diagramError: (message: string, at: string) => string;
163
+ diagramNotDrawn: (at: string) => string;
164
164
  /** Where a diagram error is. */
165
165
  diagramErrorAt: (line: number, column: number) => string;
166
166
  stopCommand: string;
@@ -190,7 +190,7 @@ declare const DEFAULT_CHAT_LABELS: {
190
190
  /** The output kept only its end. */
191
191
  blockRunTruncated: string;
192
192
  /** The panel when the block could not run. */
193
- blockRunFailed: (reason: string) => string;
193
+ blockRunError: string;
194
194
  /** After a failed run: it may have wanted input, which a terminal gives. */
195
195
  blockRunNeedsTerminal: string;
196
196
  working: string;
@@ -221,6 +221,7 @@ declare const DEFAULT_CHAT_LABELS: {
221
221
  composerPlaceholderSteer: string;
222
222
  composerPlaceholderQueue: string;
223
223
  sendMessage: string;
224
+ composerSendFailed: string;
224
225
  sendHint: string;
225
226
  stopRun: string;
226
227
  stopHint: string;
@@ -265,7 +266,7 @@ declare const DEFAULT_CHAT_LABELS: {
265
266
  modelsJumpToProvider: string;
266
267
  modelsJumpHint: (provider: string, digit: number | null) => string;
267
268
  modelsLoading: string;
268
- modelsLoadFailed: (error: string) => string;
269
+ modelsLoadError: string;
269
270
  modelsNoProviders: string;
270
271
  modelsNoMatch: (query: string) => string;
271
272
  modelsTypeAnId: string;
@@ -322,6 +323,7 @@ declare const DEFAULT_CHAT_LABELS: {
322
323
  inboxRecent: string;
323
324
  inboxPreviousSession: string;
324
325
  unsupportedInteraction: (tool: string) => string;
326
+ answerSendFailed: string;
325
327
  planRejectNote: string;
326
328
  planReviseNote: string;
327
329
  planRejectPlaceholder: string;
@@ -386,6 +388,7 @@ declare const DEFAULT_CHAT_LABELS: {
386
388
  filterSorts: {
387
389
  recency: string;
388
390
  createdTime: string;
391
+ lastUserMessage: string;
389
392
  alphabetical: string;
390
393
  };
391
394
  filterAllProjects: string;
@@ -477,6 +480,7 @@ declare const DEFAULT_CHAT_LABELS: {
477
480
  interactionAnsweredBy: (who: string) => string;
478
481
  badgePathUnavailable: string;
479
482
  badgeNoComposer: string;
483
+ badgeActionFailed: string;
480
484
  badgeCopied: string;
481
485
  badgeOpenIn: (app: string) => string;
482
486
  badgeOpenInBrowserPane: string;
@@ -512,6 +516,9 @@ declare const DEFAULT_CHAT_LABELS: {
512
516
  previous: string;
513
517
  next: string;
514
518
  loading: string;
519
+ noticeDetails: string;
520
+ noticeStack: string;
521
+ noticeDismiss: string;
515
522
  filePath: (path: string) => string;
516
523
  rename: string;
517
524
  current: string;
@@ -529,6 +536,7 @@ declare const DEFAULT_CHAT_LABELS: {
529
536
  modalBack: string;
530
537
  screenBack: (screen: string) => string;
531
538
  screenBackKey: string;
539
+ screenNavBack: (screen: string) => string;
532
540
  paletteLabel: string;
533
541
  paletteFilter: string;
534
542
  paletteBack: string;
@@ -592,6 +600,7 @@ declare const DEFAULT_CHAT_LABELS: {
592
600
  openInNewTab: string;
593
601
  terminal: string;
594
602
  terminalLoadFailed: (message: string) => string;
603
+ terminalStartFailed: string;
595
604
  terminalExited: (code: number) => string;
596
605
  };
597
606
  /** The shape of the chat label dictionary: every key of {@link DEFAULT_CHAT_LABELS}. Some values are functions that build a string. */
@@ -133,7 +133,7 @@ const DEFAULT_CHAT_LABELS = {
133
133
  authSignedInRetrying: "Signed in · retrying",
134
134
  authFixed: "fixed",
135
135
  authTryAgain: "Try again",
136
- authFailed: (message) => `Sign-in failed: ${message}`,
136
+ authSignInFailed: "Sign-in didn't work.",
137
137
  sessionEventLabel: (title, verb, needsAttention) => `${title} ${verb}${needsAttention ? ". Click to answer" : ""}`,
138
138
  clickToAnswer: "Answer",
139
139
  openSession: "open →",
@@ -194,7 +194,7 @@ const DEFAULT_CHAT_LABELS = {
194
194
  /** Copy button of a diagram frame. */
195
195
  copyDiagramSource: "Copy diagram source",
196
196
  /** Under a fence that could not be drawn; `at` is `line 3, column 7` or empty. */
197
- diagramError: (message, at) => at ? `Diagram not drawn (${at}): ${message}` : `Diagram not drawn: ${message}`,
197
+ diagramNotDrawn: (at) => at ? `Diagram not drawn (${at}).` : "Diagram not drawn.",
198
198
  /** Where a diagram error is. */
199
199
  diagramErrorAt: (line, column) => column ? `line ${line}, column ${column}` : `line ${line}`,
200
200
  stopCommand: "Stop command",
@@ -224,7 +224,7 @@ const DEFAULT_CHAT_LABELS = {
224
224
  /** The output kept only its end. */
225
225
  blockRunTruncated: "Earlier output was cut.",
226
226
  /** The panel when the block could not run. */
227
- blockRunFailed: (reason) => `Could not run: ${reason}`,
227
+ blockRunError: "Couldn't run this block.",
228
228
  /** After a failed run: it may have wanted input, which a terminal gives. */
229
229
  blockRunNeedsTerminal: "Needs input? Run it in a terminal.",
230
230
  working: "Working",
@@ -255,6 +255,7 @@ const DEFAULT_CHAT_LABELS = {
255
255
  composerPlaceholderSteer: "Enter adds it to the run. Alt+Enter sends it when the run ends.",
256
256
  composerPlaceholderQueue: "Enter sends it when the run ends. Alt+Enter adds it to the run.",
257
257
  sendMessage: "Send message",
258
+ composerSendFailed: "Couldn't send your message.",
258
259
  sendHint: "Send (Enter)",
259
260
  stopRun: "Stop",
260
261
  stopHint: "Stop the run (Esc)",
@@ -299,7 +300,7 @@ const DEFAULT_CHAT_LABELS = {
299
300
  modelsJumpToProvider: "Jump to provider",
300
301
  modelsJumpHint: (provider, digit) => digit ? `${provider} (⌘${digit})` : provider,
301
302
  modelsLoading: "Loading…",
302
- modelsLoadFailed: (error) => `Failed to load models: ${error}`,
303
+ modelsLoadError: "Couldn't load the models.",
303
304
  modelsNoProviders: "No provider is signed in. Sign in under Settings → Accounts.",
304
305
  modelsNoMatch: (query) => `No model matches "${query}".`,
305
306
  modelsTypeAnId: "Type any model id to use it. Put a provider first to pick one, for example \"xai grok-9\".",
@@ -356,6 +357,7 @@ const DEFAULT_CHAT_LABELS = {
356
357
  inboxRecent: "Recent",
357
358
  inboxPreviousSession: "previous session",
358
359
  unsupportedInteraction: (tool) => `The agent is waiting on ${tool}, which this view cannot answer.`,
360
+ answerSendFailed: "Couldn't send your answer.",
359
361
  planRejectNote: "Rejecting stops the run. Add a note so the agent knows why.",
360
362
  planReviseNote: "Say what should change. The agent sends back a revised plan.",
361
363
  planRejectPlaceholder: "Why you reject this plan (optional)",
@@ -419,7 +421,8 @@ const DEFAULT_CHAT_LABELS = {
419
421
  },
420
422
  filterSorts: {
421
423
  recency: "Recency",
422
- createdTime: "Created time",
424
+ createdTime: "Creation time",
425
+ lastUserMessage: "Last user message",
423
426
  alphabetical: "Alphabetically"
424
427
  },
425
428
  filterAllProjects: "All",
@@ -13,11 +13,16 @@ interface ListableSession {
13
13
  createdAt: number;
14
14
  /** Epoch milliseconds of the last activity. Used by the `recency` sort and date grouping. */
15
15
  updatedAt?: number;
16
+ /** Epoch milliseconds of the user's last typed message. Used by the `lastUserMessage` sort. If absent, `createdAt` stands in. */
17
+ lastUserMessageAt?: number;
16
18
  }
17
19
  /** How the list groups sessions: `none` (flat), `date`, `state`, or `project`. */
18
20
  type SessionGroupBy = 'none' | 'date' | 'state' | 'project';
19
- /** How sessions are ordered inside a group: `recency` (last activity, newest first), `createdTime` (newest first), or `alphabetical` by title. */
20
- type SessionSortBy = 'recency' | 'createdTime' | 'alphabetical';
21
+ /**
22
+ * How sessions are ordered inside a group: `recency` (last activity, newest first), `createdTime` (newest first),
23
+ * `lastUserMessage` (the user's last typed message, newest first, else creation), or `alphabetical` by title.
24
+ */
25
+ type SessionSortBy = 'recency' | 'createdTime' | 'lastUserMessage' | 'alphabetical';
21
26
  /** One row of the flat list {@link buildSessionRows} returns: a group `header`, a `session`, or a `showMore` row that ends a capped group. */
22
27
  type SessionListRow<S> = {
23
28
  kind: 'header';
@@ -202,7 +207,7 @@ declare function dateBucket(at: number, now: number, labels?: {
202
207
  authSignedInRetrying: string;
203
208
  authFixed: string;
204
209
  authTryAgain: string;
205
- authFailed: (message: string) => string;
210
+ authSignInFailed: string;
206
211
  sessionEventLabel: (title: string, verb: string, needsAttention: boolean) => string;
207
212
  clickToAnswer: string;
208
213
  openSession: string;
@@ -245,7 +250,7 @@ declare function dateBucket(at: number, now: number, labels?: {
245
250
  zoomOutDiagram: string;
246
251
  fitDiagram: string;
247
252
  copyDiagramSource: string;
248
- diagramError: (message: string, at: string) => string;
253
+ diagramNotDrawn: (at: string) => string;
249
254
  diagramErrorAt: (line: number, column: number) => string;
250
255
  stopCommand: string;
251
256
  shellCancelled: string;
@@ -266,7 +271,7 @@ declare function dateBucket(at: number, now: number, labels?: {
266
271
  blockRunStopped: string;
267
272
  blockRunTimedOut: string;
268
273
  blockRunTruncated: string;
269
- blockRunFailed: (reason: string) => string;
274
+ blockRunError: string;
270
275
  blockRunNeedsTerminal: string;
271
276
  working: string;
272
277
  foldSteps: (count: number) => string;
@@ -296,6 +301,7 @@ declare function dateBucket(at: number, now: number, labels?: {
296
301
  composerPlaceholderSteer: string;
297
302
  composerPlaceholderQueue: string;
298
303
  sendMessage: string;
304
+ composerSendFailed: string;
299
305
  sendHint: string;
300
306
  stopRun: string;
301
307
  stopHint: string;
@@ -340,7 +346,7 @@ declare function dateBucket(at: number, now: number, labels?: {
340
346
  modelsJumpToProvider: string;
341
347
  modelsJumpHint: (provider: string, digit: number | null) => string;
342
348
  modelsLoading: string;
343
- modelsLoadFailed: (error: string) => string;
349
+ modelsLoadError: string;
344
350
  modelsNoProviders: string;
345
351
  modelsNoMatch: (query: string) => string;
346
352
  modelsTypeAnId: string;
@@ -397,6 +403,7 @@ declare function dateBucket(at: number, now: number, labels?: {
397
403
  inboxRecent: string;
398
404
  inboxPreviousSession: string;
399
405
  unsupportedInteraction: (tool: string) => string;
406
+ answerSendFailed: string;
400
407
  planRejectNote: string;
401
408
  planReviseNote: string;
402
409
  planRejectPlaceholder: string;
@@ -461,6 +468,7 @@ declare function dateBucket(at: number, now: number, labels?: {
461
468
  filterSorts: {
462
469
  recency: string;
463
470
  createdTime: string;
471
+ lastUserMessage: string;
464
472
  alphabetical: string;
465
473
  };
466
474
  filterAllProjects: string;
@@ -548,6 +556,7 @@ declare function dateBucket(at: number, now: number, labels?: {
548
556
  interactionAnsweredBy: (who: string) => string;
549
557
  badgePathUnavailable: string;
550
558
  badgeNoComposer: string;
559
+ badgeActionFailed: string;
551
560
  badgeCopied: string;
552
561
  badgeOpenIn: (app: string) => string;
553
562
  badgeOpenInBrowserPane: string;
@@ -583,6 +592,9 @@ declare function dateBucket(at: number, now: number, labels?: {
583
592
  previous: string;
584
593
  next: string;
585
594
  loading: string;
595
+ noticeDetails: string;
596
+ noticeStack: string;
597
+ noticeDismiss: string;
586
598
  filePath: (path: string) => string;
587
599
  rename: string;
588
600
  current: string;
@@ -600,6 +612,7 @@ declare function dateBucket(at: number, now: number, labels?: {
600
612
  modalBack: string;
601
613
  screenBack: (screen: string) => string;
602
614
  screenBackKey: string;
615
+ screenNavBack: (screen: string) => string;
603
616
  paletteLabel: string;
604
617
  paletteFilter: string;
605
618
  paletteBack: string;
@@ -663,6 +676,7 @@ declare function dateBucket(at: number, now: number, labels?: {
663
676
  openInNewTab: string;
664
677
  terminal: string;
665
678
  terminalLoadFailed: (message: string) => string;
679
+ terminalStartFailed: string;
666
680
  terminalExited: (code: number) => string;
667
681
  }, calendar?: CalendarOptions): string;
668
682
  /** From this many days {@link relativeTime} shows a date (`Mar 4`), not a duration: pass it to core `ageStep` to know whether the label takes "ago". */
@@ -125,6 +125,7 @@ function compareSessions(a, b, sort) {
125
125
  switch (sort) {
126
126
  case "alphabetical": return (a.title || "").localeCompare(b.title || "");
127
127
  case "createdTime": return b.createdAt - a.createdAt;
128
+ case "lastUserMessage": return (b.lastUserMessageAt ?? b.createdAt) - (a.lastUserMessageAt ?? a.createdAt);
128
129
  default: return (b.updatedAt ?? 0) - (a.updatedAt ?? 0);
129
130
  }
130
131
  }
@@ -15,6 +15,21 @@ interface ProjectInSpace {
15
15
  /** Its repository, when its group also lists the repository's sessions on other machines (`isProjectMember`). */
16
16
  repoKey?: string;
17
17
  }
18
+ /**
19
+ * One session's row changed on its host. It was created or updated, with the
20
+ * row the host lists now, or it was deleted. Create and update are applied
21
+ * alike. If `row` is absent, no list shows the session and the change is ignored.
22
+ */
23
+ type SessionRowChange<S extends {
24
+ id: string;
25
+ }> = {
26
+ op: 'create' | 'update';
27
+ sessionId: S['id'];
28
+ row?: S;
29
+ } | {
30
+ op: 'delete';
31
+ sessionId: S['id'];
32
+ };
18
33
  /** What deleting a session did with its environment. */
19
34
  type SessionRemoval = {
20
35
  kept: false;
@@ -41,8 +56,8 @@ interface SessionDirectorySource<S extends SidebarListSession, C = unknown> {
41
56
  setSpace?(sessionId: S['id'], spaceId: string): Promise<void>;
42
57
  /** Resolves to `{ kept: true }` when the session's environment stayed on disk. */
43
58
  remove?(sessionId: S['id']): Promise<void | SessionRemoval>;
44
- /** Fires (possibly in bursts) with a session whose row changed. */
45
- onChanged?(listener: (sessionId: S['id']) => void): () => void;
59
+ /** Fires with each session row change, its new row included. */
60
+ onChanged?(listener: (change: SessionRowChange<S>) => void): () => void;
46
61
  /**
47
62
  * Fires with a session's facets when the extensions computed new ones (`sessions:facets`): every
48
63
  * value, keyed `<extensionId>.<key>`. Absent: facets change only with a re-read.
@@ -65,6 +80,8 @@ interface SessionDirectoryStreams<K extends string, P> {
65
80
  hasEvents(sessionId: K): boolean;
66
81
  /** Cache a loaded transcript page. */
67
82
  setEventsPage(sessionId: K, page: P): void;
83
+ /** Bring a session's window back in step after its live signals may have gone missing (a reconnect). It reads the rows appended since its history position, else its tail. */
84
+ resync(sessionId: K): void;
68
85
  /** Drop every cached transcript except these. */
69
86
  evictExcept(keep: ReadonlySet<K>): void;
70
87
  /** Drop every stream (a runtime switch). */
@@ -72,6 +89,22 @@ interface SessionDirectoryStreams<K extends string, P> {
72
89
  /** Drop one session's stream (deleted). */
73
90
  reset(sessionId: K): void;
74
91
  }
92
+ /** What a transport knows of the runtime process behind a connection change (`signals.onRuntime`). */
93
+ interface RuntimeOrigin {
94
+ /** When connected, the runtime process the live signals come from (a daemon's `signalEpoch`). */
95
+ epoch?: string;
96
+ /** When down, whether the runtime is being reconnected. It is resumed if it comes back as the same process. */
97
+ resuming?: boolean;
98
+ /** When down, whether an attempt to reconnect is in flight. A down notice after one, with no comeback between, means the attempt failed. */
99
+ connecting?: boolean;
100
+ }
101
+ /** The runtime's connection as a transport knows it now (`signals.currentRuntime`). */
102
+ interface RuntimeNow {
103
+ /** Whether the transport reaches the runtime now. */
104
+ connected: boolean;
105
+ /** When connected, the runtime process the live signals come from. */
106
+ origin?: RuntimeOrigin;
107
+ }
75
108
  /** A remote host as the directory follows it. */
76
109
  interface DirectoryServer {
77
110
  /** The host id rows carry as `hostId`. */
@@ -112,8 +145,19 @@ interface SessionDirectoryOptions<S extends SidebarListSession, P, C = unknown>
112
145
  signals?: {
113
146
  /** A run ended. */
114
147
  onRunEnd?(listener: (sessionId: S['id'], ok: boolean) => void): () => void;
115
- /** The runtime connected or disconnected (a daemon, a server connection). */
116
- onRuntime?(listener: (connected: boolean) => void): () => void;
148
+ /**
149
+ * The runtime connected or disconnected (a daemon, a server connection). The transport passes `origin`
150
+ * when it knows it. When connected, it names the runtime process the signals come from (`epoch`). When
151
+ * down, it says whether the runtime is being reconnected and resumed (`resuming`). A reconnect to the
152
+ * same process keeps the windows, and what they missed is replayed. Any other change drops them.
153
+ */
154
+ onRuntime?(listener: (connected: boolean, origin?: RuntimeOrigin) => void): () => void;
155
+ /**
156
+ * The runtime's connection now, read once at start. A window that mounts after the last `onRuntime`
157
+ * (a second window, a reload) then knows which process its streams come from. A reconnect to that
158
+ * process keeps them. `null` means unknown.
159
+ */
160
+ currentRuntime?(): Promise<RuntimeNow | null>;
117
161
  /** A remote host was removed, with the sessions it held and the words to show. */
118
162
  onHostRemoved?(listener: (removed: {
119
163
  hostId: string;
@@ -132,9 +176,7 @@ interface SessionDirectoryOptions<S extends SidebarListSession, P, C = unknown>
132
176
  request(run: () => void): number;
133
177
  cancel(handle: number): void;
134
178
  };
135
- /** Debounce of change signals. Defaults to 300 ms. */
136
- changedDebounceMs?: number;
137
- /** A refresh is about to list these rows (an app's per-row bookkeeping, before they render). */
179
+ /** A refresh or a change is about to list these rows (an app's per-row bookkeeping, before they render). */
138
180
  onListed?(rows: readonly S[]): void;
139
181
  /** A session was deleted: drop what the app keeps for it (panels, layouts). */
140
182
  onRemoved?(sessionId: S['id']): void;
@@ -202,17 +244,17 @@ interface SessionDirectory<S extends SidebarListSession, C = unknown> {
202
244
  create(input: C & {
203
245
  spaceId?: string;
204
246
  }): Promise<S>;
205
- /** Renames a session, then re-reads. */
247
+ /** Renames a session (its row comes back as a change). */
206
248
  rename(sessionId: S['id'], title: string): Promise<void>;
207
249
  /** Stars or unstars a session at once; a failed write puts it back. */
208
250
  setFavorite(sessionId: S['id'], favorite: boolean): Promise<void>;
209
- /** Archives or restores a session, then re-reads. */
251
+ /** Archives or restores a session. */
210
252
  setArchived(sessionId: S['id'], archived: boolean): Promise<void>;
211
- /** Archives sessions, then re-reads once. */
253
+ /** Archives sessions. */
212
254
  archiveMany(sessionIds: readonly S['id'][]): Promise<void>;
213
- /** Delete one session without re-reading; the caller refreshes. */
255
+ /** Delete one session. */
214
256
  drop(sessionId: S['id']): Promise<SessionRemoval>;
215
- /** Delete sessions, then re-read; resolves to how many kept their environment. */
257
+ /** Delete sessions. Resolves to how many kept their environment. */
216
258
  removeMany(sessionIds: readonly S['id'][]): Promise<{
217
259
  kept: number;
218
260
  reason?: string;
@@ -224,7 +266,7 @@ interface SessionDirectory<S extends SidebarListSession, C = unknown> {
224
266
  setActiveSpace(spaceId: string): void;
225
267
  /** Step to the next or previous space, wrapping at either end; false with spaces off or only one space. */
226
268
  stepSpace(delta: 1 | -1): boolean;
227
- /** Moves a session to a space, then re-reads. */
269
+ /** Moves a session to a space. */
228
270
  setSessionSpace(sessionId: S['id'], spaceId: string): Promise<void>;
229
271
  /** Hides a space from the switcher or shows it again; hiding the shown space shows the default one. */
230
272
  setSpaceHidden(spaceId: string, hidden: boolean): void;
@@ -293,4 +335,4 @@ declare function filterDirectorySessions<S extends SidebarListSession>(sessions:
293
335
  now?: number;
294
336
  }): readonly S[];
295
337
  //#endregion
296
- export { DirectoryServer, DirectorySettings, ProjectInSpace, SessionDirectory, SessionDirectoryOptions, SessionDirectorySource, SessionDirectoryState, SessionDirectoryStreams, SessionRef, SessionRemoval, availableProjectsOf, createSessionDirectory, filterDirectorySessions, projectKeyOf, sessionRefsOf };
338
+ export { DirectoryServer, DirectorySettings, ProjectInSpace, RuntimeNow, RuntimeOrigin, SessionDirectory, SessionDirectoryOptions, SessionDirectorySource, SessionDirectoryState, SessionDirectoryStreams, SessionRef, SessionRemoval, SessionRowChange, availableProjectsOf, createSessionDirectory, filterDirectorySessions, projectKeyOf, sessionRefsOf };