@dexto/tui 1.14.6 → 1.15.0-beta.1

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 (570) hide show
  1. package/dist/InkCLIRefactored.cjs +30 -24
  2. package/dist/InkCLIRefactored.d.ts.map +1 -1
  3. package/dist/InkCLIRefactored.js +30 -24
  4. package/dist/components/ApprovalPrompt.cjs +128 -40
  5. package/dist/components/ApprovalPrompt.d.ts +2 -0
  6. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  7. package/dist/components/ApprovalPrompt.js +128 -41
  8. package/dist/components/CustomInput.cjs +4 -3
  9. package/dist/components/CustomInput.d.ts.map +1 -1
  10. package/dist/components/CustomInput.js +4 -3
  11. package/dist/components/DeckArea.cjs +43 -0
  12. package/dist/components/DeckArea.d.ts +14 -0
  13. package/dist/components/DeckArea.d.ts.map +1 -0
  14. package/dist/components/DeckArea.js +19 -0
  15. package/dist/components/EditableMultiLineInput.cjs +9 -8
  16. package/dist/components/EditableMultiLineInput.d.ts.map +1 -1
  17. package/dist/components/EditableMultiLineInput.js +9 -8
  18. package/dist/components/ElicitationForm.cjs +78 -18
  19. package/dist/components/ElicitationForm.d.ts.map +1 -1
  20. package/dist/components/ElicitationForm.js +78 -18
  21. package/dist/components/ErrorBoundary.cjs +15 -5
  22. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  23. package/dist/components/ErrorBoundary.js +15 -5
  24. package/dist/components/Footer.cjs +41 -86
  25. package/dist/components/Footer.d.ts +2 -2
  26. package/dist/components/Footer.d.ts.map +1 -1
  27. package/dist/components/Footer.js +44 -92
  28. package/dist/components/Footer.test.cjs +44 -0
  29. package/dist/components/Footer.test.js +44 -0
  30. package/dist/components/HistorySearchBar.cjs +6 -5
  31. package/dist/components/HistorySearchBar.d.ts.map +1 -1
  32. package/dist/components/HistorySearchBar.js +6 -5
  33. package/dist/components/MultiLineInput.cjs +6 -5
  34. package/dist/components/MultiLineInput.d.ts.map +1 -1
  35. package/dist/components/MultiLineInput.js +6 -5
  36. package/dist/components/ResourceAutocomplete.cjs +5 -4
  37. package/dist/components/ResourceAutocomplete.d.ts.map +1 -1
  38. package/dist/components/ResourceAutocomplete.js +5 -4
  39. package/dist/components/SignalGates.test.cjs +215 -0
  40. package/dist/components/SignalGates.test.d.ts +2 -0
  41. package/dist/components/SignalGates.test.d.ts.map +1 -0
  42. package/dist/components/SignalGates.test.js +217 -0
  43. package/dist/components/SlashCommandAutocomplete.cjs +4 -3
  44. package/dist/components/SlashCommandAutocomplete.d.ts.map +1 -1
  45. package/dist/components/SlashCommandAutocomplete.js +4 -3
  46. package/dist/components/StatusBar.cjs +13 -30
  47. package/dist/components/StatusBar.d.ts +1 -3
  48. package/dist/components/StatusBar.d.ts.map +1 -1
  49. package/dist/components/StatusBar.js +13 -30
  50. package/dist/components/TextBufferInput.cjs +13 -12
  51. package/dist/components/TextBufferInput.d.ts.map +1 -1
  52. package/dist/components/TextBufferInput.js +13 -12
  53. package/dist/components/TodoPanel.cjs +23 -16
  54. package/dist/components/TodoPanel.d.ts.map +1 -1
  55. package/dist/components/TodoPanel.js +23 -16
  56. package/dist/components/base/BaseAutocomplete.cjs +7 -6
  57. package/dist/components/base/BaseAutocomplete.d.ts.map +1 -1
  58. package/dist/components/base/BaseAutocomplete.js +7 -6
  59. package/dist/components/base/BaseSelector.cjs +5 -4
  60. package/dist/components/base/BaseSelector.d.ts.map +1 -1
  61. package/dist/components/base/BaseSelector.js +5 -4
  62. package/dist/components/chat/Footer.cjs +2 -1
  63. package/dist/components/chat/Footer.d.ts.map +1 -1
  64. package/dist/components/chat/Footer.js +2 -1
  65. package/dist/components/chat/Header.cjs +20 -16
  66. package/dist/components/chat/Header.d.ts.map +1 -1
  67. package/dist/components/chat/Header.js +20 -16
  68. package/dist/components/chat/MessageItem.cjs +47 -30
  69. package/dist/components/chat/MessageItem.d.ts.map +1 -1
  70. package/dist/components/chat/MessageItem.js +52 -29
  71. package/dist/components/chat/MessageList.cjs +3 -2
  72. package/dist/components/chat/MessageList.d.ts.map +1 -1
  73. package/dist/components/chat/MessageList.js +3 -2
  74. package/dist/components/chat/QueuedMessagesDisplay.cjs +17 -5
  75. package/dist/components/chat/QueuedMessagesDisplay.d.ts.map +1 -1
  76. package/dist/components/chat/QueuedMessagesDisplay.js +18 -6
  77. package/dist/components/chat/SignalMessage.cjs +116 -0
  78. package/dist/components/chat/SignalMessage.d.ts +18 -0
  79. package/dist/components/chat/SignalMessage.d.ts.map +1 -0
  80. package/dist/components/chat/SignalMessage.js +96 -0
  81. package/dist/components/chat/SignalMessage.test.cjs +112 -0
  82. package/dist/components/chat/SignalMessage.test.d.ts +2 -0
  83. package/dist/components/chat/SignalMessage.test.d.ts.map +1 -0
  84. package/dist/components/chat/SignalMessage.test.js +116 -0
  85. package/dist/components/chat/ToolIcon.cjs +6 -5
  86. package/dist/components/chat/ToolIcon.d.ts.map +1 -1
  87. package/dist/components/chat/ToolIcon.js +6 -5
  88. package/dist/components/chat/styled-boxes/ConfigBox.cjs +8 -7
  89. package/dist/components/chat/styled-boxes/ConfigBox.d.ts.map +1 -1
  90. package/dist/components/chat/styled-boxes/ConfigBox.js +8 -7
  91. package/dist/components/chat/styled-boxes/HelpBox.cjs +4 -3
  92. package/dist/components/chat/styled-boxes/HelpBox.d.ts.map +1 -1
  93. package/dist/components/chat/styled-boxes/HelpBox.js +4 -3
  94. package/dist/components/chat/styled-boxes/LogConfigBox.cjs +11 -3
  95. package/dist/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -1
  96. package/dist/components/chat/styled-boxes/LogConfigBox.js +11 -3
  97. package/dist/components/chat/styled-boxes/SessionHistoryBox.cjs +8 -7
  98. package/dist/components/chat/styled-boxes/SessionHistoryBox.d.ts.map +1 -1
  99. package/dist/components/chat/styled-boxes/SessionHistoryBox.js +8 -7
  100. package/dist/components/chat/styled-boxes/SessionListBox.cjs +19 -11
  101. package/dist/components/chat/styled-boxes/SessionListBox.d.ts.map +1 -1
  102. package/dist/components/chat/styled-boxes/SessionListBox.js +19 -11
  103. package/dist/components/chat/styled-boxes/ShortcutsBox.cjs +4 -3
  104. package/dist/components/chat/styled-boxes/ShortcutsBox.d.ts.map +1 -1
  105. package/dist/components/chat/styled-boxes/ShortcutsBox.js +4 -3
  106. package/dist/components/chat/styled-boxes/StatsBox.cjs +13 -5
  107. package/dist/components/chat/styled-boxes/StatsBox.d.ts.map +1 -1
  108. package/dist/components/chat/styled-boxes/StatsBox.js +13 -5
  109. package/dist/components/chat/styled-boxes/StyledBox.cjs +7 -6
  110. package/dist/components/chat/styled-boxes/StyledBox.d.ts.map +1 -1
  111. package/dist/components/chat/styled-boxes/StyledBox.js +7 -6
  112. package/dist/components/chat/styled-boxes/SyspromptBox.cjs +2 -1
  113. package/dist/components/chat/styled-boxes/SyspromptBox.d.ts.map +1 -1
  114. package/dist/components/chat/styled-boxes/SyspromptBox.js +2 -1
  115. package/dist/components/modes/AlternateBufferCLI.cjs +53 -43
  116. package/dist/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  117. package/dist/components/modes/AlternateBufferCLI.js +53 -43
  118. package/dist/components/modes/StaticCLI.cjs +53 -42
  119. package/dist/components/modes/StaticCLI.d.ts.map +1 -1
  120. package/dist/components/modes/StaticCLI.js +53 -42
  121. package/dist/components/overlays/ApiKeyInput.cjs +12 -11
  122. package/dist/components/overlays/ApiKeyInput.d.ts.map +1 -1
  123. package/dist/components/overlays/ApiKeyInput.js +12 -11
  124. package/dist/components/overlays/ChatGPTUsageCapOverlay.cjs +7 -6
  125. package/dist/components/overlays/ChatGPTUsageCapOverlay.d.ts.map +1 -1
  126. package/dist/components/overlays/ChatGPTUsageCapOverlay.js +7 -6
  127. package/dist/components/overlays/CommandOutputOverlay.cjs +2 -1
  128. package/dist/components/overlays/CommandOutputOverlay.d.ts.map +1 -1
  129. package/dist/components/overlays/CommandOutputOverlay.js +2 -1
  130. package/dist/components/overlays/ConnectOverlay.cjs +10 -9
  131. package/dist/components/overlays/ConnectOverlay.d.ts.map +1 -1
  132. package/dist/components/overlays/ConnectOverlay.js +10 -9
  133. package/dist/components/overlays/ContextStatsOverlay.cjs +48 -37
  134. package/dist/components/overlays/ContextStatsOverlay.d.ts.map +1 -1
  135. package/dist/components/overlays/ContextStatsOverlay.js +48 -37
  136. package/dist/components/overlays/CustomModelWizard.cjs +5 -4
  137. package/dist/components/overlays/CustomModelWizard.d.ts.map +1 -1
  138. package/dist/components/overlays/CustomModelWizard.js +5 -4
  139. package/dist/components/overlays/ExportWizard.cjs +28 -27
  140. package/dist/components/overlays/ExportWizard.d.ts.map +1 -1
  141. package/dist/components/overlays/ExportWizard.js +28 -27
  142. package/dist/components/overlays/InsufficientCreditsOverlay.cjs +25 -9
  143. package/dist/components/overlays/InsufficientCreditsOverlay.d.ts +2 -0
  144. package/dist/components/overlays/InsufficientCreditsOverlay.d.ts.map +1 -1
  145. package/dist/components/overlays/InsufficientCreditsOverlay.js +25 -9
  146. package/dist/components/overlays/LogLevelSelector.cjs +6 -5
  147. package/dist/components/overlays/LogLevelSelector.d.ts.map +1 -1
  148. package/dist/components/overlays/LogLevelSelector.js +6 -5
  149. package/dist/components/overlays/LoginOverlay.cjs +31 -66
  150. package/dist/components/overlays/LoginOverlay.d.ts +1 -3
  151. package/dist/components/overlays/LoginOverlay.d.ts.map +1 -1
  152. package/dist/components/overlays/LoginOverlay.js +32 -71
  153. package/dist/components/overlays/LogoutOverlay.cjs +16 -24
  154. package/dist/components/overlays/LogoutOverlay.d.ts +1 -0
  155. package/dist/components/overlays/LogoutOverlay.d.ts.map +1 -1
  156. package/dist/components/overlays/LogoutOverlay.js +18 -38
  157. package/dist/components/overlays/MarketplaceAddPrompt.cjs +12 -11
  158. package/dist/components/overlays/MarketplaceAddPrompt.d.ts.map +1 -1
  159. package/dist/components/overlays/MarketplaceAddPrompt.js +12 -11
  160. package/dist/components/overlays/MarketplaceBrowser.cjs +27 -26
  161. package/dist/components/overlays/MarketplaceBrowser.d.ts.map +1 -1
  162. package/dist/components/overlays/MarketplaceBrowser.js +27 -26
  163. package/dist/components/overlays/McpAddChoice.cjs +4 -3
  164. package/dist/components/overlays/McpAddChoice.d.ts.map +1 -1
  165. package/dist/components/overlays/McpAddChoice.js +4 -3
  166. package/dist/components/overlays/McpAddSelector.cjs +4 -3
  167. package/dist/components/overlays/McpAddSelector.d.ts.map +1 -1
  168. package/dist/components/overlays/McpAddSelector.js +4 -3
  169. package/dist/components/overlays/McpCustomTypeSelector.cjs +4 -3
  170. package/dist/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
  171. package/dist/components/overlays/McpCustomTypeSelector.js +4 -3
  172. package/dist/components/overlays/McpCustomWizard.cjs +9 -8
  173. package/dist/components/overlays/McpCustomWizard.d.ts.map +1 -1
  174. package/dist/components/overlays/McpCustomWizard.js +9 -8
  175. package/dist/components/overlays/McpRemoveSelector.cjs +5 -4
  176. package/dist/components/overlays/McpRemoveSelector.d.ts.map +1 -1
  177. package/dist/components/overlays/McpRemoveSelector.js +5 -4
  178. package/dist/components/overlays/McpSelector.cjs +4 -3
  179. package/dist/components/overlays/McpSelector.d.ts.map +1 -1
  180. package/dist/components/overlays/McpSelector.js +4 -3
  181. package/dist/components/overlays/McpServerActions.cjs +7 -6
  182. package/dist/components/overlays/McpServerActions.d.ts.map +1 -1
  183. package/dist/components/overlays/McpServerActions.js +7 -6
  184. package/dist/components/overlays/McpServerList.cjs +6 -5
  185. package/dist/components/overlays/McpServerList.d.ts.map +1 -1
  186. package/dist/components/overlays/McpServerList.js +6 -5
  187. package/dist/components/overlays/ModelSelectorRefactored.cjs +32 -17
  188. package/dist/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  189. package/dist/components/overlays/ModelSelectorRefactored.js +32 -17
  190. package/dist/components/overlays/PermissionsSelector.cjs +6 -5
  191. package/dist/components/overlays/PermissionsSelector.d.ts.map +1 -1
  192. package/dist/components/overlays/PermissionsSelector.js +6 -5
  193. package/dist/components/overlays/PluginActions.cjs +7 -6
  194. package/dist/components/overlays/PluginActions.d.ts.map +1 -1
  195. package/dist/components/overlays/PluginActions.js +7 -6
  196. package/dist/components/overlays/PluginList.cjs +12 -11
  197. package/dist/components/overlays/PluginList.d.ts.map +1 -1
  198. package/dist/components/overlays/PluginList.js +12 -11
  199. package/dist/components/overlays/PluginManager.cjs +13 -5
  200. package/dist/components/overlays/PluginManager.d.ts.map +1 -1
  201. package/dist/components/overlays/PluginManager.js +13 -5
  202. package/dist/components/overlays/PromptAddChoice.cjs +5 -4
  203. package/dist/components/overlays/PromptAddChoice.d.ts.map +1 -1
  204. package/dist/components/overlays/PromptAddChoice.js +5 -4
  205. package/dist/components/overlays/PromptAddWizard.cjs +10 -9
  206. package/dist/components/overlays/PromptAddWizard.d.ts.map +1 -1
  207. package/dist/components/overlays/PromptAddWizard.js +10 -9
  208. package/dist/components/overlays/PromptDeleteSelector.cjs +6 -5
  209. package/dist/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
  210. package/dist/components/overlays/PromptDeleteSelector.js +6 -5
  211. package/dist/components/overlays/PromptList.cjs +10 -9
  212. package/dist/components/overlays/PromptList.d.ts.map +1 -1
  213. package/dist/components/overlays/PromptList.js +10 -9
  214. package/dist/components/overlays/ReasoningOverlay.cjs +30 -23
  215. package/dist/components/overlays/ReasoningOverlay.d.ts.map +1 -1
  216. package/dist/components/overlays/ReasoningOverlay.js +30 -23
  217. package/dist/components/overlays/SearchOverlay.cjs +15 -14
  218. package/dist/components/overlays/SearchOverlay.d.ts.map +1 -1
  219. package/dist/components/overlays/SearchOverlay.js +15 -14
  220. package/dist/components/overlays/SessionRenameOverlay.cjs +9 -8
  221. package/dist/components/overlays/SessionRenameOverlay.d.ts.map +1 -1
  222. package/dist/components/overlays/SessionRenameOverlay.js +9 -8
  223. package/dist/components/overlays/SessionSelectorRefactored.cjs +4 -3
  224. package/dist/components/overlays/SessionSelectorRefactored.d.ts.map +1 -1
  225. package/dist/components/overlays/SessionSelectorRefactored.js +4 -3
  226. package/dist/components/overlays/SessionSubcommandSelector.cjs +4 -3
  227. package/dist/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
  228. package/dist/components/overlays/SessionSubcommandSelector.js +4 -3
  229. package/dist/components/overlays/SoundsSelector.cjs +15 -7
  230. package/dist/components/overlays/SoundsSelector.d.ts.map +1 -1
  231. package/dist/components/overlays/SoundsSelector.js +15 -7
  232. package/dist/components/overlays/StreamSelector.cjs +5 -4
  233. package/dist/components/overlays/StreamSelector.d.ts.map +1 -1
  234. package/dist/components/overlays/StreamSelector.js +5 -4
  235. package/dist/components/overlays/ToolBrowser.cjs +73 -56
  236. package/dist/components/overlays/ToolBrowser.d.ts.map +1 -1
  237. package/dist/components/overlays/ToolBrowser.js +73 -56
  238. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.cjs +103 -69
  239. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -1
  240. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.js +103 -69
  241. package/dist/components/overlays/custom-model-wizard/provider-config.cjs +4 -4
  242. package/dist/components/overlays/custom-model-wizard/provider-config.js +4 -4
  243. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.cjs +3 -2
  244. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -1
  245. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +3 -2
  246. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.cjs +5 -4
  247. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -1
  248. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.js +5 -4
  249. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.cjs +4 -3
  250. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -1
  251. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +4 -3
  252. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.cjs +7 -6
  253. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -1
  254. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.js +7 -6
  255. package/dist/components/renderers/DiffRenderer.cjs +5 -4
  256. package/dist/components/renderers/DiffRenderer.d.ts.map +1 -1
  257. package/dist/components/renderers/DiffRenderer.js +5 -4
  258. package/dist/components/renderers/FilePreviewRenderer.cjs +23 -13
  259. package/dist/components/renderers/FilePreviewRenderer.d.ts.map +1 -1
  260. package/dist/components/renderers/FilePreviewRenderer.js +23 -13
  261. package/dist/components/renderers/FileRenderer.cjs +9 -8
  262. package/dist/components/renderers/FileRenderer.d.ts.map +1 -1
  263. package/dist/components/renderers/FileRenderer.js +9 -8
  264. package/dist/components/renderers/GenericRenderer.cjs +5 -4
  265. package/dist/components/renderers/GenericRenderer.d.ts.map +1 -1
  266. package/dist/components/renderers/GenericRenderer.js +5 -4
  267. package/dist/components/renderers/SearchRenderer.cjs +4 -3
  268. package/dist/components/renderers/SearchRenderer.d.ts.map +1 -1
  269. package/dist/components/renderers/SearchRenderer.js +4 -3
  270. package/dist/components/renderers/ShellRenderer.cjs +6 -5
  271. package/dist/components/renderers/ShellRenderer.d.ts.map +1 -1
  272. package/dist/components/renderers/ShellRenderer.js +6 -5
  273. package/dist/components/renderers/SignalDiff.cjs +139 -0
  274. package/dist/components/renderers/SignalDiff.d.ts +21 -0
  275. package/dist/components/renderers/SignalDiff.d.ts.map +1 -0
  276. package/dist/components/renderers/SignalDiff.js +106 -0
  277. package/dist/components/renderers/SignalDiff.test.cjs +78 -0
  278. package/dist/components/renderers/SignalDiff.test.d.ts +2 -0
  279. package/dist/components/renderers/SignalDiff.test.d.ts.map +1 -0
  280. package/dist/components/renderers/SignalDiff.test.js +77 -0
  281. package/dist/components/renderers/diff-shared.cjs +13 -7
  282. package/dist/components/renderers/diff-shared.d.ts +5 -0
  283. package/dist/components/renderers/diff-shared.d.ts.map +1 -1
  284. package/dist/components/renderers/diff-shared.js +12 -7
  285. package/dist/components/shared/FocusOverlayFrame.cjs +3 -2
  286. package/dist/components/shared/FocusOverlayFrame.d.ts.map +1 -1
  287. package/dist/components/shared/FocusOverlayFrame.js +3 -2
  288. package/dist/components/shared/HintBar.cjs +2 -1
  289. package/dist/components/shared/HintBar.d.ts.map +1 -1
  290. package/dist/components/shared/HintBar.js +2 -1
  291. package/dist/components/shared/MarkdownText.cjs +36 -53
  292. package/dist/components/shared/MarkdownText.d.ts +2 -0
  293. package/dist/components/shared/MarkdownText.d.ts.map +1 -1
  294. package/dist/components/shared/MarkdownText.js +36 -54
  295. package/dist/components/shared/VirtualizedList.cjs +2 -1
  296. package/dist/components/shared/VirtualizedList.d.ts.map +1 -1
  297. package/dist/components/shared/VirtualizedList.js +2 -1
  298. package/dist/containers/OverlayContainer.cjs +32 -44
  299. package/dist/containers/OverlayContainer.d.ts.map +1 -1
  300. package/dist/containers/OverlayContainer.js +32 -44
  301. package/dist/contexts/KeypressContext.cjs +7 -1
  302. package/dist/contexts/KeypressContext.d.ts.map +1 -1
  303. package/dist/contexts/KeypressContext.js +7 -1
  304. package/dist/contexts/KeypressContext.test.cjs +82 -0
  305. package/dist/contexts/KeypressContext.test.d.ts +2 -0
  306. package/dist/contexts/KeypressContext.test.d.ts.map +1 -0
  307. package/dist/contexts/KeypressContext.test.js +81 -0
  308. package/dist/hooks/useAgentEvents.cjs +1 -74
  309. package/dist/hooks/useAgentEvents.d.ts.map +1 -1
  310. package/dist/hooks/useAgentEvents.js +1 -74
  311. package/dist/hooks/useCLIState.cjs +0 -3
  312. package/dist/hooks/useCLIState.d.ts.map +1 -1
  313. package/dist/hooks/useCLIState.js +0 -3
  314. package/dist/hooks/useContextStats.cjs +91 -0
  315. package/dist/hooks/useContextStats.d.ts +13 -0
  316. package/dist/hooks/useContextStats.d.ts.map +1 -0
  317. package/dist/hooks/useContextStats.js +67 -0
  318. package/dist/hooks/useDeckState.cjs +140 -0
  319. package/dist/hooks/useDeckState.d.ts +20 -0
  320. package/dist/hooks/useDeckState.d.ts.map +1 -0
  321. package/dist/hooks/useDeckState.js +123 -0
  322. package/dist/hooks/useDextoCredits.cjs +81 -0
  323. package/dist/hooks/useDextoCredits.d.ts +14 -0
  324. package/dist/hooks/useDextoCredits.d.ts.map +1 -0
  325. package/dist/hooks/useDextoCredits.js +56 -0
  326. package/dist/hooks/useDextoCredits.test.cjs +73 -0
  327. package/dist/hooks/useDextoCredits.test.d.ts +2 -0
  328. package/dist/hooks/useDextoCredits.test.d.ts.map +1 -0
  329. package/dist/hooks/useDextoCredits.test.js +72 -0
  330. package/dist/hooks/useElapsedTime.cjs +13 -24
  331. package/dist/hooks/useElapsedTime.d.ts +3 -1
  332. package/dist/hooks/useElapsedTime.d.ts.map +1 -1
  333. package/dist/hooks/useElapsedTime.js +13 -24
  334. package/dist/hooks/useElapsedTime.test.cjs +35 -0
  335. package/dist/hooks/useElapsedTime.test.d.ts +2 -0
  336. package/dist/hooks/useElapsedTime.test.d.ts.map +1 -0
  337. package/dist/hooks/useElapsedTime.test.js +34 -0
  338. package/dist/hooks/useGitDirtyFiles.cjs +59 -0
  339. package/dist/hooks/useGitDirtyFiles.d.ts +5 -0
  340. package/dist/hooks/useGitDirtyFiles.d.ts.map +1 -0
  341. package/dist/hooks/useGitDirtyFiles.js +34 -0
  342. package/dist/hooks/useGitDirtyFiles.test.cjs +9 -0
  343. package/dist/hooks/useGitDirtyFiles.test.d.ts +2 -0
  344. package/dist/hooks/useGitDirtyFiles.test.d.ts.map +1 -0
  345. package/dist/hooks/useGitDirtyFiles.test.js +8 -0
  346. package/dist/hooks/useHeldValue.cjs +33 -0
  347. package/dist/hooks/useHeldValue.d.ts +3 -0
  348. package/dist/hooks/useHeldValue.d.ts.map +1 -0
  349. package/dist/hooks/useHeldValue.js +9 -0
  350. package/dist/hooks/useHeldValue.test.cjs +31 -0
  351. package/dist/hooks/useHeldValue.test.d.ts +2 -0
  352. package/dist/hooks/useHeldValue.test.d.ts.map +1 -0
  353. package/dist/hooks/useHeldValue.test.js +30 -0
  354. package/dist/hooks/useInputOrchestrator.cjs +22 -30
  355. package/dist/hooks/useInputOrchestrator.d.ts +2 -0
  356. package/dist/hooks/useInputOrchestrator.d.ts.map +1 -1
  357. package/dist/hooks/useInputOrchestrator.js +21 -30
  358. package/dist/hooks/useInputOrchestrator.test.cjs +24 -0
  359. package/dist/hooks/useInputOrchestrator.test.d.ts +2 -0
  360. package/dist/hooks/useInputOrchestrator.test.d.ts.map +1 -0
  361. package/dist/hooks/useInputOrchestrator.test.js +23 -0
  362. package/dist/host/index.cjs +22 -49
  363. package/dist/host/index.d.ts +18 -72
  364. package/dist/host/index.d.ts.map +1 -1
  365. package/dist/host/index.js +18 -42
  366. package/dist/host/index.test.cjs +21 -35
  367. package/dist/host/index.test.js +22 -40
  368. package/dist/index.d.cts +13 -52
  369. package/dist/interactive-commands/command-parser.cjs +13 -21
  370. package/dist/interactive-commands/command-parser.d.ts.map +1 -1
  371. package/dist/interactive-commands/command-parser.js +13 -11
  372. package/dist/interactive-commands/general-commands.cjs +8 -7
  373. package/dist/interactive-commands/general-commands.d.ts.map +1 -1
  374. package/dist/interactive-commands/general-commands.js +8 -7
  375. package/dist/services/processStream.cjs +33 -21
  376. package/dist/services/processStream.d.ts.map +1 -1
  377. package/dist/services/processStream.js +34 -22
  378. package/dist/services/processStream.test.cjs +52 -4
  379. package/dist/services/processStream.test.js +52 -4
  380. package/dist/signal/background.cjs +154 -0
  381. package/dist/signal/background.d.ts +43 -0
  382. package/dist/signal/background.d.ts.map +1 -0
  383. package/dist/signal/background.js +124 -0
  384. package/dist/signal/background.test.cjs +186 -0
  385. package/dist/signal/background.test.d.ts +2 -0
  386. package/dist/signal/background.test.d.ts.map +1 -0
  387. package/dist/signal/background.test.js +192 -0
  388. package/dist/signal/caps.cjs +100 -0
  389. package/dist/signal/caps.d.ts +23 -0
  390. package/dist/signal/caps.d.ts.map +1 -0
  391. package/dist/signal/caps.js +73 -0
  392. package/dist/signal/caps.test.cjs +56 -0
  393. package/dist/signal/caps.test.d.ts +2 -0
  394. package/dist/signal/caps.test.d.ts.map +1 -0
  395. package/dist/signal/caps.test.js +55 -0
  396. package/dist/signal/components.cjs +257 -0
  397. package/dist/signal/components.d.ts +120 -0
  398. package/dist/signal/components.d.ts.map +1 -0
  399. package/dist/signal/components.js +226 -0
  400. package/dist/signal/components.test.cjs +156 -0
  401. package/dist/signal/components.test.d.ts +2 -0
  402. package/dist/signal/components.test.d.ts.map +1 -0
  403. package/dist/signal/components.test.js +133 -0
  404. package/dist/signal/cut.cjs +103 -0
  405. package/dist/signal/cut.d.ts +11 -0
  406. package/dist/signal/cut.d.ts.map +1 -0
  407. package/dist/signal/cut.js +77 -0
  408. package/dist/signal/cut.test.cjs +20 -0
  409. package/dist/signal/cut.test.d.ts +2 -0
  410. package/dist/signal/cut.test.d.ts.map +1 -0
  411. package/dist/signal/cut.test.js +19 -0
  412. package/dist/signal/deck-layout.cjs +57 -0
  413. package/dist/signal/deck-layout.d.ts +29 -0
  414. package/dist/signal/deck-layout.d.ts.map +1 -0
  415. package/dist/signal/deck-layout.js +30 -0
  416. package/dist/signal/deck-parts.cjs +243 -0
  417. package/dist/signal/deck-parts.d.ts +55 -0
  418. package/dist/signal/deck-parts.d.ts.map +1 -0
  419. package/dist/signal/deck-parts.js +205 -0
  420. package/dist/signal/deck.test.cjs +311 -0
  421. package/dist/signal/deck.test.d.ts +2 -0
  422. package/dist/signal/deck.test.d.ts.map +1 -0
  423. package/dist/signal/deck.test.js +288 -0
  424. package/dist/signal/glyphs.cjs +195 -0
  425. package/dist/signal/glyphs.d.ts +8 -0
  426. package/dist/signal/glyphs.d.ts.map +1 -0
  427. package/dist/signal/glyphs.js +171 -0
  428. package/dist/signal/glyphs.test.cjs +17 -0
  429. package/dist/signal/glyphs.test.d.ts +2 -0
  430. package/dist/signal/glyphs.test.d.ts.map +1 -0
  431. package/dist/signal/glyphs.test.js +16 -0
  432. package/dist/signal/harness.cjs +103 -0
  433. package/dist/signal/harness.d.ts +70 -0
  434. package/dist/signal/harness.d.ts.map +1 -0
  435. package/dist/signal/harness.js +67 -0
  436. package/dist/signal/harness.test.cjs +84 -0
  437. package/dist/signal/harness.test.d.ts +2 -0
  438. package/dist/signal/harness.test.d.ts.map +1 -0
  439. package/dist/signal/harness.test.js +61 -0
  440. package/dist/signal/index.cjs +76 -0
  441. package/dist/signal/index.d.ts +8 -0
  442. package/dist/signal/index.d.ts.map +1 -0
  443. package/dist/signal/index.js +45 -0
  444. package/dist/signal/kit.snapshot.test.cjs +56 -0
  445. package/dist/signal/kit.snapshot.test.d.ts +2 -0
  446. package/dist/signal/kit.snapshot.test.d.ts.map +1 -0
  447. package/dist/signal/kit.snapshot.test.js +55 -0
  448. package/dist/signal/no-raw-colours.test.cjs +32 -0
  449. package/dist/signal/no-raw-colours.test.d.ts +2 -0
  450. package/dist/signal/no-raw-colours.test.d.ts.map +1 -0
  451. package/dist/signal/no-raw-colours.test.js +30 -0
  452. package/dist/signal/paint.cjs +76 -0
  453. package/dist/signal/paint.d.ts +15 -0
  454. package/dist/signal/paint.d.ts.map +1 -0
  455. package/dist/signal/paint.js +41 -0
  456. package/dist/signal/paint.test.cjs +98 -0
  457. package/dist/signal/paint.test.d.ts +2 -0
  458. package/dist/signal/paint.test.d.ts.map +1 -0
  459. package/dist/signal/paint.test.js +75 -0
  460. package/dist/signal/tone.cjs +109 -0
  461. package/dist/signal/tone.d.ts +17 -0
  462. package/dist/signal/tone.d.ts.map +1 -0
  463. package/dist/signal/tone.js +83 -0
  464. package/dist/signal/tone.test.cjs +70 -0
  465. package/dist/signal/tone.test.d.ts +2 -0
  466. package/dist/signal/tone.test.d.ts.map +1 -0
  467. package/dist/signal/tone.test.js +69 -0
  468. package/dist/signal/trace.cjs +142 -0
  469. package/dist/signal/trace.d.ts +41 -0
  470. package/dist/signal/trace.d.ts.map +1 -0
  471. package/dist/signal/trace.js +113 -0
  472. package/dist/signal/trace.test.cjs +50 -0
  473. package/dist/signal/trace.test.d.ts +2 -0
  474. package/dist/signal/trace.test.d.ts.map +1 -0
  475. package/dist/signal/trace.test.js +49 -0
  476. package/dist/signal/use-trace.cjs +73 -0
  477. package/dist/signal/use-trace.d.ts +5 -0
  478. package/dist/signal/use-trace.d.ts.map +1 -0
  479. package/dist/signal/use-trace.js +48 -0
  480. package/dist/signal/wordmark-art.generated.cjs +375 -0
  481. package/dist/signal/wordmark-art.generated.d.ts +3 -0
  482. package/dist/signal/wordmark-art.generated.d.ts.map +1 -0
  483. package/dist/signal/wordmark-art.generated.js +351 -0
  484. package/dist/signal/wordmark.cjs +60 -0
  485. package/dist/signal/wordmark.d.ts +23 -0
  486. package/dist/signal/wordmark.d.ts.map +1 -0
  487. package/dist/signal/wordmark.js +34 -0
  488. package/dist/signal/wordmark.test.cjs +71 -0
  489. package/dist/signal/wordmark.test.d.ts +2 -0
  490. package/dist/signal/wordmark.test.d.ts.map +1 -0
  491. package/dist/signal/wordmark.test.js +70 -0
  492. package/dist/state/initialState.cjs +0 -3
  493. package/dist/state/initialState.d.ts.map +1 -1
  494. package/dist/state/initialState.js +0 -3
  495. package/dist/state/types.d.ts +13 -7
  496. package/dist/state/types.d.ts.map +1 -1
  497. package/dist/utils/approval-response.cjs +45 -0
  498. package/dist/utils/approval-response.d.ts +14 -0
  499. package/dist/utils/approval-response.d.ts.map +1 -0
  500. package/dist/utils/approval-response.js +21 -0
  501. package/dist/utils/approval-response.test.cjs +49 -0
  502. package/dist/utils/approval-response.test.d.ts +2 -0
  503. package/dist/utils/approval-response.test.d.ts.map +1 -0
  504. package/dist/utils/approval-response.test.js +55 -0
  505. package/dist/utils/approvalScope.cjs +12 -0
  506. package/dist/utils/approvalScope.d.ts.map +1 -1
  507. package/dist/utils/approvalScope.js +12 -0
  508. package/dist/utils/approvalScope.test.cjs +23 -0
  509. package/dist/utils/approvalScope.test.d.ts +2 -0
  510. package/dist/utils/approvalScope.test.d.ts.map +1 -0
  511. package/dist/utils/approvalScope.test.js +22 -0
  512. package/dist/utils/background-failure.cjs +51 -0
  513. package/dist/utils/background-failure.d.ts +12 -0
  514. package/dist/utils/background-failure.d.ts.map +1 -0
  515. package/dist/utils/background-failure.js +26 -0
  516. package/dist/utils/chatgpt-rate-limit.cjs +10 -0
  517. package/dist/utils/chatgpt-rate-limit.d.ts +9 -0
  518. package/dist/utils/chatgpt-rate-limit.d.ts.map +1 -1
  519. package/dist/utils/chatgpt-rate-limit.js +9 -0
  520. package/dist/utils/chatgpt-rate-limit.test.cjs +10 -0
  521. package/dist/utils/chatgpt-rate-limit.test.js +11 -0
  522. package/dist/utils/deck-state.cjs +107 -0
  523. package/dist/utils/deck-state.d.ts +79 -0
  524. package/dist/utils/deck-state.d.ts.map +1 -0
  525. package/dist/utils/deck-state.js +76 -0
  526. package/dist/utils/deck-state.test.cjs +208 -0
  527. package/dist/utils/deck-state.test.d.ts +2 -0
  528. package/dist/utils/deck-state.test.d.ts.map +1 -0
  529. package/dist/utils/deck-state.test.js +216 -0
  530. package/dist/utils/fault-block.cjs +37 -0
  531. package/dist/utils/fault-block.d.ts +13 -0
  532. package/dist/utils/fault-block.d.ts.map +1 -0
  533. package/dist/utils/fault-block.js +13 -0
  534. package/dist/utils/fault-block.test.cjs +23 -0
  535. package/dist/utils/fault-block.test.d.ts +2 -0
  536. package/dist/utils/fault-block.test.d.ts.map +1 -0
  537. package/dist/utils/fault-block.test.js +22 -0
  538. package/dist/utils/llm-provider-display.cjs +1 -1
  539. package/dist/utils/llm-provider-display.js +1 -1
  540. package/dist/utils/messageFormatting.cjs +26 -23
  541. package/dist/utils/messageFormatting.d.ts +5 -2
  542. package/dist/utils/messageFormatting.d.ts.map +1 -1
  543. package/dist/utils/messageFormatting.js +25 -21
  544. package/dist/utils/messageFormatting.test.cjs +34 -0
  545. package/dist/utils/messageFormatting.test.js +35 -1
  546. package/dist/utils/reasoning-variant.cjs +35 -0
  547. package/dist/utils/reasoning-variant.d.ts +13 -0
  548. package/dist/utils/reasoning-variant.d.ts.map +1 -0
  549. package/dist/utils/reasoning-variant.js +11 -0
  550. package/dist/utils/resize-reflow.cjs +119 -0
  551. package/dist/utils/resize-reflow.d.ts +18 -0
  552. package/dist/utils/resize-reflow.d.ts.map +1 -0
  553. package/dist/utils/resize-reflow.js +83 -0
  554. package/dist/utils/resize-reflow.test.cjs +100 -0
  555. package/dist/utils/resize-reflow.test.d.ts +2 -0
  556. package/dist/utils/resize-reflow.test.d.ts.map +1 -0
  557. package/dist/utils/resize-reflow.test.js +99 -0
  558. package/dist/utils/tool-step.cjs +183 -0
  559. package/dist/utils/tool-step.d.ts +28 -0
  560. package/dist/utils/tool-step.d.ts.map +1 -0
  561. package/dist/utils/tool-step.js +156 -0
  562. package/dist/utils/tool-step.test.cjs +263 -0
  563. package/dist/utils/tool-step.test.d.ts +2 -0
  564. package/dist/utils/tool-step.test.d.ts.map +1 -0
  565. package/dist/utils/tool-step.test.js +262 -0
  566. package/package.json +9 -5
  567. package/dist/components/BackgroundTasksPanel.cjs +0 -117
  568. package/dist/components/BackgroundTasksPanel.d.ts +0 -18
  569. package/dist/components/BackgroundTasksPanel.d.ts.map +0 -1
  570. package/dist/components/BackgroundTasksPanel.js +0 -93
@@ -0,0 +1,216 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import {
3
+ deckCollapsed,
4
+ deckCredits,
5
+ deckMode,
6
+ deckModelId,
7
+ deckReadout,
8
+ keepsTurnSpend,
9
+ nextTurnBaseline,
10
+ permissionLabel
11
+ } from "./deck-state.js";
12
+ const idle = {
13
+ isProcessing: false,
14
+ isCancelling: false,
15
+ isThinking: false,
16
+ isCompacting: false,
17
+ awaitingUser: false,
18
+ toolRunning: false,
19
+ steerCount: 0,
20
+ lastRunFailed: false
21
+ };
22
+ describe("deckMode", () => {
23
+ it("is READY when nothing runs", () => {
24
+ expect(deckMode(idle)).toBe("idle");
25
+ });
26
+ it("is FAULT after a run that failed, until the next one starts", () => {
27
+ expect(deckMode({ ...idle, lastRunFailed: true })).toBe("fault");
28
+ expect(deckMode({ ...idle, lastRunFailed: true, isProcessing: true })).toBe("stream");
29
+ });
30
+ it("puts waiting on you above everything the agent is doing", () => {
31
+ const busy = { ...idle, isProcessing: true, isThinking: true, toolRunning: true };
32
+ expect(deckMode({ ...busy, awaitingUser: true })).toBe("wait");
33
+ });
34
+ it("shows STOPPED while a cancel lands", () => {
35
+ expect(deckMode({ ...idle, isCancelling: true })).toBe("stop");
36
+ expect(deckMode({ ...idle, isCancelling: true, lastRunFailed: true })).toBe("stop");
37
+ });
38
+ it("shows STEERING while a steer waits for the current step", () => {
39
+ expect(deckMode({ ...idle, isProcessing: true, toolRunning: true, steerCount: 1 })).toBe(
40
+ "steer"
41
+ );
42
+ });
43
+ it("tells thinking, tools and streaming apart", () => {
44
+ const run = { ...idle, isProcessing: true };
45
+ expect(deckMode({ ...run, isThinking: true })).toBe("think");
46
+ expect(deckMode({ ...run, toolRunning: true })).toBe("tool");
47
+ expect(deckMode({ ...run, isCompacting: true })).toBe("tool");
48
+ expect(deckMode(run)).toBe("stream");
49
+ });
50
+ });
51
+ describe("deckReadout", () => {
52
+ const base = {
53
+ elapsed: "12s",
54
+ tokens: "1.9K tokens",
55
+ compacting: false,
56
+ steerCount: 0,
57
+ permission: null,
58
+ reasoning: null,
59
+ rateLimitHint: null
60
+ };
61
+ it("reads tokens and time while the agent works", () => {
62
+ expect(deckReadout("stream", base)).toBe("1.9K tokens \xB7 12s");
63
+ expect(deckReadout("think", { ...base, tokens: "" })).toBe("12s");
64
+ });
65
+ it("says what it is doing when it compacts", () => {
66
+ expect(deckReadout("tool", { ...base, compacting: true })).toBe("compacting \xB7 12s");
67
+ });
68
+ it("counts queued steers", () => {
69
+ expect(deckReadout("steer", { ...base, steerCount: 2 })).toBe("2 steers queued");
70
+ });
71
+ it("leads with the permission mode during a run, since Shift+Tab still changes it", () => {
72
+ const auto = { ...base, permission: "auto-approve" };
73
+ expect(deckReadout("stream", auto)).toBe("auto-approve \xB7 1.9K tokens \xB7 12s");
74
+ expect(deckReadout("tool", { ...auto, compacting: true })).toBe(
75
+ "auto-approve \xB7 compacting \xB7 12s"
76
+ );
77
+ expect(deckReadout("steer", { ...auto, steerCount: 1 })).toBe(
78
+ "auto-approve \xB7 1 steer queued"
79
+ );
80
+ });
81
+ it("shows how long it has waited on you", () => {
82
+ expect(deckReadout("wait", base)).toBe("paused 12s");
83
+ });
84
+ it("shows the permission mode, then a rate-limit hint, when idle", () => {
85
+ expect(deckReadout("idle", base)).toBeNull();
86
+ expect(deckReadout("idle", { ...base, permission: "plan mode" })).toBe("plan mode");
87
+ expect(
88
+ deckReadout("idle", { ...base, permission: "plan mode", rateLimitHint: "91% used" })
89
+ ).toBe("plan mode \xB7 91% used");
90
+ });
91
+ it("puts the usage warning before the reasoning variant, since the end truncates first", () => {
92
+ expect(
93
+ deckReadout("idle", {
94
+ ...base,
95
+ permission: "auto-approve",
96
+ reasoning: "medium",
97
+ rateLimitHint: "cap 95%"
98
+ })
99
+ ).toBe("auto-approve \xB7 cap 95% \xB7 r:medium");
100
+ });
101
+ it("shows the reasoning variant when idle, so Tab has visible feedback", () => {
102
+ expect(deckReadout("idle", { ...base, reasoning: "high" })).toBe("r:high");
103
+ expect(deckReadout("idle", { ...base, permission: "plan mode", reasoning: "low" })).toBe(
104
+ "plan mode \xB7 r:low"
105
+ );
106
+ });
107
+ });
108
+ describe("deckModelId", () => {
109
+ it("names Dexto models dexto/\u2026 and own-key models by provider", () => {
110
+ expect(deckModelId("dexto-nova", "anthropic/claude-sonnet-4.5")).toBe(
111
+ "dexto/anthropic/claude-sonnet-4.5"
112
+ );
113
+ expect(deckModelId("openai", "gpt-5")).toBe("openai/gpt-5");
114
+ expect(deckModelId(null, "gpt-5")).toBe("gpt-5");
115
+ });
116
+ });
117
+ describe("deckCredits", () => {
118
+ it("is signed out without an account", () => {
119
+ expect(deckCredits({ signedIn: false, balance: null, turnStartBalance: null })).toEqual({
120
+ kind: "signed-out"
121
+ });
122
+ });
123
+ it("is out at or below zero", () => {
124
+ expect(deckCredits({ signedIn: true, balance: 0, turnStartBalance: null })).toEqual({
125
+ kind: "out"
126
+ });
127
+ });
128
+ it("reports what this turn spent", () => {
129
+ expect(deckCredits({ signedIn: true, balance: 12.5, turnStartBalance: 12.81 })).toEqual({
130
+ kind: "balance",
131
+ balance: 12.5,
132
+ spend: 0.31
133
+ });
134
+ expect(deckCredits({ signedIn: true, balance: 12.5, turnStartBalance: 12.5 })).toEqual({
135
+ kind: "balance",
136
+ balance: 12.5,
137
+ spend: null
138
+ });
139
+ });
140
+ });
141
+ describe("permissionLabel", () => {
142
+ const none = {
143
+ isShellMode: false,
144
+ planModeActive: false,
145
+ autoApproveEdits: false,
146
+ bypassPermissions: false,
147
+ configuredMode: "manual"
148
+ };
149
+ it("is null for manual approvals", () => {
150
+ expect(permissionLabel(none)).toBeNull();
151
+ });
152
+ it("shows an agent configured to auto-approve, with no session override", () => {
153
+ expect(permissionLabel({ ...none, configuredMode: "auto-approve" })).toBe("auto-approve");
154
+ });
155
+ it("names the session mode first and keeps configured auto-approval beside it", () => {
156
+ const configured = { ...none, configuredMode: "auto-approve" };
157
+ expect(permissionLabel({ ...configured, planModeActive: true })).toBe(
158
+ "plan mode \xB7 auto-approve"
159
+ );
160
+ expect(permissionLabel({ ...configured, autoApproveEdits: true })).toBe(
161
+ "accept edits \xB7 auto-approve"
162
+ );
163
+ expect(permissionLabel({ ...none, autoApproveEdits: true })).toBe("accept edits");
164
+ expect(permissionLabel({ ...none, bypassPermissions: true })).toBe("auto-approve");
165
+ expect(permissionLabel({ ...configured, isShellMode: true })).toBe(
166
+ "shell mode \xB7 auto-approve"
167
+ );
168
+ });
169
+ });
170
+ describe("keepsTurnSpend", () => {
171
+ it("keeps the spend when the first turn creates its session", () => {
172
+ expect(keepsTurnSpend(null, "s1")).toBe(true);
173
+ });
174
+ it("clears the spend on a switch to another session", () => {
175
+ expect(keepsTurnSpend("s1", "s2")).toBe(false);
176
+ expect(keepsTurnSpend("s1", null)).toBe(false);
177
+ });
178
+ });
179
+ describe("nextTurnBaseline", () => {
180
+ const before = { sessionId: "s1", account: "ada", isProcessing: false, balance: 12.84 };
181
+ const now = { sessionId: "s1", account: "ada", isProcessing: false, balance: 12.5 };
182
+ it("takes the balance when a turn starts and holds it through the turn", () => {
183
+ const started = nextTurnBaseline(before, { ...now, isProcessing: true });
184
+ expect(started.balance).toBe(12.5);
185
+ const later = nextTurnBaseline(started, { ...now, isProcessing: true, balance: 12.1 });
186
+ expect(later.balance).toBe(12.5);
187
+ });
188
+ it("keeps the baseline while the first turn creates its session", () => {
189
+ const prev = { sessionId: null, account: "ada", isProcessing: true, balance: 12.84 };
190
+ const next = nextTurnBaseline(prev, { ...now, isProcessing: true });
191
+ expect(next).toEqual({
192
+ sessionId: "s1",
193
+ account: "ada",
194
+ isProcessing: true,
195
+ balance: 12.84
196
+ });
197
+ });
198
+ it("clears the baseline on a session switch", () => {
199
+ expect(nextTurnBaseline(before, { ...now, sessionId: "s2" }).balance).toBeNull();
200
+ });
201
+ it("clears the baseline on sign-out, so it never carries to another account", () => {
202
+ expect(nextTurnBaseline(before, { ...now, account: null }).balance).toBeNull();
203
+ });
204
+ it("clears the baseline when another account signs in without a sign-out", () => {
205
+ expect(nextTurnBaseline(before, { ...now, account: "grace" }).balance).toBeNull();
206
+ });
207
+ });
208
+ describe("deckCollapsed", () => {
209
+ it("collapses under focused overlays, which budget for the whole screen", () => {
210
+ expect(deckCollapsed("model-selector")).toBe(true);
211
+ });
212
+ it("stays up with no overlay and under inline ones", () => {
213
+ expect(deckCollapsed("none")).toBe(false);
214
+ expect(deckCollapsed("slash-autocomplete")).toBe(false);
215
+ });
216
+ });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var fault_block_exports = {};
20
+ __export(fault_block_exports, {
21
+ faultBlock: () => faultBlock
22
+ });
23
+ module.exports = __toCommonJS(fault_block_exports);
24
+ const RECOVERY = /^💡\s*/u;
25
+ function faultBlock(content) {
26
+ const lines = content.replace(/^Error:\s*/, "").split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
27
+ const rest = lines.slice(1);
28
+ return {
29
+ title: lines[0] ?? "Something went wrong",
30
+ body: rest.filter((line) => !RECOVERY.test(line)),
31
+ next: rest.filter((line) => RECOVERY.test(line)).map((line) => line.replace(RECOVERY, ""))
32
+ };
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ faultBlock
37
+ });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Splits an error message's text into what the Signal FAULT block shows. Errors reach the
3
+ * transcript as one string: "Error: what happened", then any detail, then "💡 what to try".
4
+ */
5
+ export interface FaultBlock {
6
+ title: string;
7
+ /** Further lines of the error. */
8
+ body: string[];
9
+ /** Recovery steps. */
10
+ next: string[];
11
+ }
12
+ export declare function faultBlock(content: string): FaultBlock;
13
+ //# sourceMappingURL=fault-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fault-block.d.ts","sourceRoot":"","sources":["../../src/utils/fault-block.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAID,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAYtD"}
@@ -0,0 +1,13 @@
1
+ const RECOVERY = /^💡\s*/u;
2
+ function faultBlock(content) {
3
+ const lines = content.replace(/^Error:\s*/, "").split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
4
+ const rest = lines.slice(1);
5
+ return {
6
+ title: lines[0] ?? "Something went wrong",
7
+ body: rest.filter((line) => !RECOVERY.test(line)),
8
+ next: rest.filter((line) => RECOVERY.test(line)).map((line) => line.replace(RECOVERY, ""))
9
+ };
10
+ }
11
+ export {
12
+ faultBlock
13
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_fault_block = require("./fault-block.js");
4
+ (0, import_vitest.describe)("faultBlock", () => {
5
+ (0, import_vitest.it)('takes the title without its "Error:" prefix', () => {
6
+ (0, import_vitest.expect)((0, import_fault_block.faultBlock)("Error: Model rate limit")).toEqual({
7
+ title: "Model rate limit",
8
+ body: [],
9
+ next: []
10
+ });
11
+ });
12
+ (0, import_vitest.it)("separates further lines from recovery steps", () => {
13
+ const block = (0, import_fault_block.faultBlock)(
14
+ "Error: Cloud unreachable\ntimed out\n\n\u{1F4A1} Check your connection\n\u{1F4A1} Try /status"
15
+ );
16
+ (0, import_vitest.expect)(block.title).toBe("Cloud unreachable");
17
+ (0, import_vitest.expect)(block.body).toEqual(["timed out"]);
18
+ (0, import_vitest.expect)(block.next).toEqual(["Check your connection", "Try /status"]);
19
+ });
20
+ (0, import_vitest.it)("still has a title when the error is empty", () => {
21
+ (0, import_vitest.expect)((0, import_fault_block.faultBlock)("Error: ").title).toBe("Something went wrong");
22
+ });
23
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fault-block.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fault-block.test.d.ts","sourceRoot":"","sources":["../../src/utils/fault-block.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { faultBlock } from "./fault-block.js";
3
+ describe("faultBlock", () => {
4
+ it('takes the title without its "Error:" prefix', () => {
5
+ expect(faultBlock("Error: Model rate limit")).toEqual({
6
+ title: "Model rate limit",
7
+ body: [],
8
+ next: []
9
+ });
10
+ });
11
+ it("separates further lines from recovery steps", () => {
12
+ const block = faultBlock(
13
+ "Error: Cloud unreachable\ntimed out\n\n\u{1F4A1} Check your connection\n\u{1F4A1} Try /status"
14
+ );
15
+ expect(block.title).toBe("Cloud unreachable");
16
+ expect(block.body).toEqual(["timed out"]);
17
+ expect(block.next).toEqual(["Check your connection", "Try /status"]);
18
+ });
19
+ it("still has a title when the error is empty", () => {
20
+ expect(faultBlock("Error: ").title).toBe("Something went wrong");
21
+ });
22
+ });
@@ -39,7 +39,7 @@ const LLM_PROVIDER_DISPLAY_NAMES = {
39
39
  bedrock: "Bedrock",
40
40
  local: "Local",
41
41
  ollama: "Ollama",
42
- "dexto-nova": "Dexto Nova"
42
+ "dexto-nova": "Dexto"
43
43
  };
44
44
  function getLLMProviderDisplayName(provider, baseURL) {
45
45
  if (provider === "openai-compatible") {
@@ -16,7 +16,7 @@ const LLM_PROVIDER_DISPLAY_NAMES = {
16
16
  bedrock: "Bedrock",
17
17
  local: "Local",
18
18
  ollama: "Ollama",
19
- "dexto-nova": "Dexto Nova"
19
+ "dexto-nova": "Dexto"
20
20
  };
21
21
  function getLLMProviderDisplayName(provider, baseURL) {
22
22
  if (provider === "openai-compatible") {
@@ -37,6 +37,7 @@ __export(messageFormatting_exports, {
37
37
  createToolMessage: () => createToolMessage,
38
38
  createUserMessage: () => createUserMessage,
39
39
  extractAutomationTriggerInfo: () => extractAutomationTriggerInfo,
40
+ formatDuration: () => formatDuration,
40
41
  formatPathForDisplay: () => formatPathForDisplay,
41
42
  formatToolHeader: () => formatToolHeader,
42
43
  formatToolResultPreview: () => formatToolResultPreview,
@@ -44,8 +45,6 @@ __export(messageFormatting_exports, {
44
45
  getToolDisplayName: () => getToolDisplayName,
45
46
  getToolTypeBadge: () => getToolTypeBadge,
46
47
  makeRelativePath: () => makeRelativePath,
47
- normalizeToolName: () => normalizeToolName,
48
- shouldHideTool: () => shouldHideTool,
49
48
  stripAutomationTriggerTags: () => stripAutomationTriggerTags
50
49
  });
51
50
  module.exports = __toCommonJS(messageFormatting_exports);
@@ -53,22 +52,8 @@ var import_path = __toESM(require("path"), 1);
53
52
  var import_os = __toESM(require("os"), 1);
54
53
  var import_core = require("@dexto/core");
55
54
  var import_agent_backend = require("../agent-backend.js");
55
+ var import_background_failure = require("./background-failure.js");
56
56
  var import_idGenerator = require("./idGenerator.js");
57
- const HIDDEN_TOOL_NAMES = /* @__PURE__ */ new Set(["wait_for"]);
58
- function normalizeToolName(toolName) {
59
- if (toolName.startsWith("mcp--")) {
60
- const trimmed = toolName.substring("mcp--".length);
61
- const parts = trimmed.split("--");
62
- return parts.length >= 2 ? parts.slice(1).join("--") : trimmed;
63
- }
64
- return toolName;
65
- }
66
- function shouldHideTool(toolName) {
67
- if (!toolName) {
68
- return false;
69
- }
70
- return HIDDEN_TOOL_NAMES.has(normalizeToolName(toolName));
71
- }
72
57
  const backgroundCompletionRegex = /<background-task-completion>[\s\S]*?<\/background-task-completion>/g;
73
58
  const stripBackgroundCompletion = (text) => text.replace(backgroundCompletionRegex, "").replace("<background-task-completion>", "").trim();
74
59
  const AUTOMATION_TRIGGER_REGEX = /<scheduled_automation_trigger>[\s\S]*?<\/scheduled_automation_trigger>/;
@@ -216,7 +201,8 @@ function createErrorMessage(error) {
216
201
  id: (0, import_idGenerator.generateMessageId)("error"),
217
202
  role: "system",
218
203
  content: `Error: ${content}`,
219
- timestamp: /* @__PURE__ */ new Date()
204
+ timestamp: /* @__PURE__ */ new Date(),
205
+ systemKind: "fault"
220
206
  };
221
207
  }
222
208
  function createToolMessage(toolName) {
@@ -242,6 +228,21 @@ function extractTextContent(content) {
242
228
  }
243
229
  return content.filter(import_core.isTextPart).map((part) => part.text).join("\n");
244
230
  }
231
+ function formatDuration(ms) {
232
+ const seconds = Math.floor(ms / 1e3);
233
+ const tenths = Math.floor(ms % 1e3 / 100);
234
+ if (seconds < 60) {
235
+ return `${seconds}.${tenths}s`;
236
+ }
237
+ const minutes = Math.floor(seconds / 60);
238
+ const remainingSeconds = seconds % 60;
239
+ if (minutes < 60) {
240
+ return `${minutes}m ${remainingSeconds}s`;
241
+ }
242
+ const hours = Math.floor(minutes / 60);
243
+ const remainingMinutes = minutes % 60;
244
+ return `${hours}h ${remainingMinutes}m`;
245
+ }
245
246
  function formatToolResultPreview(result) {
246
247
  try {
247
248
  const parsed = JSON.parse(result);
@@ -303,15 +304,14 @@ function convertHistoryToUIMessages(history, sessionId) {
303
304
  history.forEach((msg, index) => {
304
305
  const timestamp = new Date(msg.timestamp ?? Date.now() - (history.length - index) * 1e3);
305
306
  if ((0, import_core.isToolMessage)(msg)) {
306
- if (shouldHideTool(msg.name)) {
307
- return;
308
- }
309
307
  const toolCall = toolCallMap.get(msg.toolCallId);
310
308
  const displayName = msg.presentationSnapshot?.header?.title ?? getToolDisplayName(msg.name);
311
309
  let toolContent = displayName;
310
+ let toolArgs = "";
312
311
  const snapshotArgsText = msg.presentationSnapshot?.header?.argsText;
313
312
  if (typeof snapshotArgsText === "string" && snapshotArgsText.length > 0) {
314
313
  toolContent = `${displayName}(${snapshotArgsText})`;
314
+ toolArgs = snapshotArgsText;
315
315
  }
316
316
  if (!snapshotArgsText && toolCall) {
317
317
  try {
@@ -319,6 +319,7 @@ function convertHistoryToUIMessages(history, sessionId) {
319
319
  const argsFormatted = formatArgsFallback(args);
320
320
  if (argsFormatted) {
321
321
  toolContent = `${displayName}(${argsFormatted})`;
322
+ toolArgs = argsFormatted;
322
323
  }
323
324
  } catch {
324
325
  }
@@ -333,9 +334,12 @@ function convertHistoryToUIMessages(history, sessionId) {
333
334
  role: "tool",
334
335
  content: toolContent,
335
336
  timestamp,
337
+ toolName: msg.name,
338
+ toolArgs,
336
339
  toolStatus: "finished",
337
340
  toolResult: resultPreview,
338
341
  isError: msg.success === false,
342
+ ...(0, import_background_failure.storedBackgroundFailure)(msg.name, extractTextContent(msg.content)),
339
343
  // Store content parts for potential rich rendering
340
344
  toolContent: msg.content,
341
345
  // Restore structured display data for rich rendering (diffs, shell output, etc.)
@@ -423,6 +427,7 @@ async function getStartupInfo(agent, sessionId) {
423
427
  createToolMessage,
424
428
  createUserMessage,
425
429
  extractAutomationTriggerInfo,
430
+ formatDuration,
426
431
  formatPathForDisplay,
427
432
  formatToolHeader,
428
433
  formatToolResultPreview,
@@ -430,7 +435,5 @@ async function getStartupInfo(agent, sessionId) {
430
435
  getToolDisplayName,
431
436
  getToolTypeBadge,
432
437
  makeRelativePath,
433
- normalizeToolName,
434
- shouldHideTool,
435
438
  stripAutomationTriggerTags
436
439
  });
@@ -5,8 +5,6 @@
5
5
  import type { InternalMessage, ToolPresentationSnapshotV1 } from '@dexto/core';
6
6
  import type { Message, ExternalTriggerStyledData } from '../state/types.js';
7
7
  import { type TuiAgentBackend } from '../agent-backend.js';
8
- export declare function normalizeToolName(toolName: string): string;
9
- export declare function shouldHideTool(toolName: string | undefined): boolean;
10
8
  export declare function extractAutomationTriggerInfo(content: string): {
11
9
  label: string;
12
10
  timestamp: string | null;
@@ -96,6 +94,11 @@ export declare function createToolMessage(toolName: string): Message;
96
94
  * Formats a streaming placeholder message
97
95
  */
98
96
  export declare function createStreamingMessage(): Message;
97
+ /**
98
+ * Format milliseconds into a compact human-readable string
99
+ * Examples: "1.2s", "1m 23s", "1h 2m"
100
+ */
101
+ export declare function formatDuration(ms: number): string;
99
102
  /**
100
103
  * Generates a preview of tool result content for display
101
104
  */
@@ -1 +1 @@
1
- {"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../src/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACR,eAAe,EAGf,0BAA0B,EAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIhF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAMpE;AAYD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;CAC/C,GAAG,IAAI,CAiBP;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAW,EACrB,GAAG,GAAE,MAAsB,GAC5B,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7E;AAgBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACrD,GAAG,mBAAmB,CAuBtB;AAqBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAQjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAgBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkC9D;AA+CD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,MAAM,GAClB,OAAO,EAAE,CA+HX;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;;;;;;;;GA+BpF"}
1
+ {"version":3,"file":"messageFormatting.d.ts","sourceRoot":"","sources":["../../src/utils/messageFormatting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACR,eAAe,EAGf,0BAA0B,EAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAahF,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;CAC/C,GAAG,IAAI,CAiBP;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAmB1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,MAAW,EACrB,GAAG,GAAE,MAAsB,GAC5B,MAAM,CAWR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC7E;AAgBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACrD,GAAG,mBAAmB,CAuBtB;AAqBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CASvF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CASjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAO3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAgBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAkBjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkC9D;AA+CD;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,MAAM,GAClB,OAAO,EAAE,CAiIX;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;;;;;;;;GA+BpF"}
@@ -2,23 +2,9 @@ import path from "path";
2
2
  import os from "os";
3
3
  import { isTextPart, isAssistantMessage, isToolMessage } from "@dexto/core";
4
4
  import { supportsStartupInfo } from "../agent-backend.js";
5
- const HIDDEN_TOOL_NAMES = /* @__PURE__ */ new Set(["wait_for"]);
6
- function normalizeToolName(toolName) {
7
- if (toolName.startsWith("mcp--")) {
8
- const trimmed = toolName.substring("mcp--".length);
9
- const parts = trimmed.split("--");
10
- return parts.length >= 2 ? parts.slice(1).join("--") : trimmed;
11
- }
12
- return toolName;
13
- }
14
- function shouldHideTool(toolName) {
15
- if (!toolName) {
16
- return false;
17
- }
18
- return HIDDEN_TOOL_NAMES.has(normalizeToolName(toolName));
19
- }
20
5
  const backgroundCompletionRegex = /<background-task-completion>[\s\S]*?<\/background-task-completion>/g;
21
6
  const stripBackgroundCompletion = (text) => text.replace(backgroundCompletionRegex, "").replace("<background-task-completion>", "").trim();
7
+ import { storedBackgroundFailure } from "./background-failure.js";
22
8
  import { generateMessageId } from "./idGenerator.js";
23
9
  const AUTOMATION_TRIGGER_REGEX = /<scheduled_automation_trigger>[\s\S]*?<\/scheduled_automation_trigger>/;
24
10
  function extractAutomationTriggerInfo(content) {
@@ -165,7 +151,8 @@ function createErrorMessage(error) {
165
151
  id: generateMessageId("error"),
166
152
  role: "system",
167
153
  content: `Error: ${content}`,
168
- timestamp: /* @__PURE__ */ new Date()
154
+ timestamp: /* @__PURE__ */ new Date(),
155
+ systemKind: "fault"
169
156
  };
170
157
  }
171
158
  function createToolMessage(toolName) {
@@ -191,6 +178,21 @@ function extractTextContent(content) {
191
178
  }
192
179
  return content.filter(isTextPart).map((part) => part.text).join("\n");
193
180
  }
181
+ function formatDuration(ms) {
182
+ const seconds = Math.floor(ms / 1e3);
183
+ const tenths = Math.floor(ms % 1e3 / 100);
184
+ if (seconds < 60) {
185
+ return `${seconds}.${tenths}s`;
186
+ }
187
+ const minutes = Math.floor(seconds / 60);
188
+ const remainingSeconds = seconds % 60;
189
+ if (minutes < 60) {
190
+ return `${minutes}m ${remainingSeconds}s`;
191
+ }
192
+ const hours = Math.floor(minutes / 60);
193
+ const remainingMinutes = minutes % 60;
194
+ return `${hours}h ${remainingMinutes}m`;
195
+ }
194
196
  function formatToolResultPreview(result) {
195
197
  try {
196
198
  const parsed = JSON.parse(result);
@@ -252,15 +254,14 @@ function convertHistoryToUIMessages(history, sessionId) {
252
254
  history.forEach((msg, index) => {
253
255
  const timestamp = new Date(msg.timestamp ?? Date.now() - (history.length - index) * 1e3);
254
256
  if (isToolMessage(msg)) {
255
- if (shouldHideTool(msg.name)) {
256
- return;
257
- }
258
257
  const toolCall = toolCallMap.get(msg.toolCallId);
259
258
  const displayName = msg.presentationSnapshot?.header?.title ?? getToolDisplayName(msg.name);
260
259
  let toolContent = displayName;
260
+ let toolArgs = "";
261
261
  const snapshotArgsText = msg.presentationSnapshot?.header?.argsText;
262
262
  if (typeof snapshotArgsText === "string" && snapshotArgsText.length > 0) {
263
263
  toolContent = `${displayName}(${snapshotArgsText})`;
264
+ toolArgs = snapshotArgsText;
264
265
  }
265
266
  if (!snapshotArgsText && toolCall) {
266
267
  try {
@@ -268,6 +269,7 @@ function convertHistoryToUIMessages(history, sessionId) {
268
269
  const argsFormatted = formatArgsFallback(args);
269
270
  if (argsFormatted) {
270
271
  toolContent = `${displayName}(${argsFormatted})`;
272
+ toolArgs = argsFormatted;
271
273
  }
272
274
  } catch {
273
275
  }
@@ -282,9 +284,12 @@ function convertHistoryToUIMessages(history, sessionId) {
282
284
  role: "tool",
283
285
  content: toolContent,
284
286
  timestamp,
287
+ toolName: msg.name,
288
+ toolArgs,
285
289
  toolStatus: "finished",
286
290
  toolResult: resultPreview,
287
291
  isError: msg.success === false,
292
+ ...storedBackgroundFailure(msg.name, extractTextContent(msg.content)),
288
293
  // Store content parts for potential rich rendering
289
294
  toolContent: msg.content,
290
295
  // Restore structured display data for rich rendering (diffs, shell output, etc.)
@@ -371,6 +376,7 @@ export {
371
376
  createToolMessage,
372
377
  createUserMessage,
373
378
  extractAutomationTriggerInfo,
379
+ formatDuration,
374
380
  formatPathForDisplay,
375
381
  formatToolHeader,
376
382
  formatToolResultPreview,
@@ -378,7 +384,5 @@ export {
378
384
  getToolDisplayName,
379
385
  getToolTypeBadge,
380
386
  makeRelativePath,
381
- normalizeToolName,
382
- shouldHideTool,
383
387
  stripAutomationTriggerTags
384
388
  };