@dexto/tui 1.6.2

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 (739) hide show
  1. package/LICENSE +44 -0
  2. package/dist/InkCLIRefactored.cjs +319 -0
  3. package/dist/InkCLIRefactored.d.ts +55 -0
  4. package/dist/InkCLIRefactored.d.ts.map +1 -0
  5. package/dist/InkCLIRefactored.js +289 -0
  6. package/dist/assets/sounds/SOURCES.md +35 -0
  7. package/dist/assets/sounds/boot.wav +0 -0
  8. package/dist/assets/sounds/chime.wav +0 -0
  9. package/dist/assets/sounds/coin.wav +0 -0
  10. package/dist/assets/sounds/confirm.wav +0 -0
  11. package/dist/assets/sounds/levelup.wav +0 -0
  12. package/dist/assets/sounds/ping.wav +0 -0
  13. package/dist/assets/sounds/powerup.wav +0 -0
  14. package/dist/assets/sounds/startup.wav +0 -0
  15. package/dist/assets/sounds/success.wav +0 -0
  16. package/dist/assets/sounds/treasure.wav +0 -0
  17. package/dist/assets/sounds/win.wav +0 -0
  18. package/dist/components/ApprovalPrompt.cjs +353 -0
  19. package/dist/components/ApprovalPrompt.d.ts +44 -0
  20. package/dist/components/ApprovalPrompt.d.ts.map +1 -0
  21. package/dist/components/ApprovalPrompt.js +336 -0
  22. package/dist/components/BackgroundTasksPanel.cjs +117 -0
  23. package/dist/components/BackgroundTasksPanel.d.ts +18 -0
  24. package/dist/components/BackgroundTasksPanel.d.ts.map +1 -0
  25. package/dist/components/BackgroundTasksPanel.js +93 -0
  26. package/dist/components/CustomInput.cjs +77 -0
  27. package/dist/components/CustomInput.d.ts +17 -0
  28. package/dist/components/CustomInput.d.ts.map +1 -0
  29. package/dist/components/CustomInput.js +57 -0
  30. package/dist/components/CustomTextInput.cjs +76 -0
  31. package/dist/components/CustomTextInput.d.ts +16 -0
  32. package/dist/components/CustomTextInput.d.ts.map +1 -0
  33. package/dist/components/CustomTextInput.js +46 -0
  34. package/dist/components/EditableMultiLineInput.cjs +151 -0
  35. package/dist/components/EditableMultiLineInput.d.ts +19 -0
  36. package/dist/components/EditableMultiLineInput.d.ts.map +1 -0
  37. package/dist/components/EditableMultiLineInput.js +131 -0
  38. package/dist/components/ElicitationForm.cjs +622 -0
  39. package/dist/components/ElicitationForm.d.ts +24 -0
  40. package/dist/components/ElicitationForm.d.ts.map +1 -0
  41. package/dist/components/ElicitationForm.js +588 -0
  42. package/dist/components/ErrorBoundary.cjs +66 -0
  43. package/dist/components/ErrorBoundary.d.ts +20 -0
  44. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  45. package/dist/components/ErrorBoundary.js +32 -0
  46. package/dist/components/Footer.cjs +165 -0
  47. package/dist/components/Footer.d.ts +23 -0
  48. package/dist/components/Footer.d.ts.map +1 -0
  49. package/dist/components/Footer.js +131 -0
  50. package/dist/components/HistorySearchBar.cjs +40 -0
  51. package/dist/components/HistorySearchBar.d.ts +17 -0
  52. package/dist/components/HistorySearchBar.d.ts.map +1 -0
  53. package/dist/components/HistorySearchBar.js +16 -0
  54. package/dist/components/MultiLineInput.cjs +56 -0
  55. package/dist/components/MultiLineInput.d.ts +12 -0
  56. package/dist/components/MultiLineInput.d.ts.map +1 -0
  57. package/dist/components/MultiLineInput.js +36 -0
  58. package/dist/components/ResourceAutocomplete.cjs +344 -0
  59. package/dist/components/ResourceAutocomplete.d.ts +26 -0
  60. package/dist/components/ResourceAutocomplete.d.ts.map +1 -0
  61. package/dist/components/ResourceAutocomplete.js +322 -0
  62. package/dist/components/SlashCommandAutocomplete.cjs +389 -0
  63. package/dist/components/SlashCommandAutocomplete.d.ts +28 -0
  64. package/dist/components/SlashCommandAutocomplete.d.ts.map +1 -0
  65. package/dist/components/SlashCommandAutocomplete.js +363 -0
  66. package/dist/components/StatusBar.cjs +142 -0
  67. package/dist/components/StatusBar.d.ts +41 -0
  68. package/dist/components/StatusBar.d.ts.map +1 -0
  69. package/dist/components/StatusBar.js +118 -0
  70. package/dist/components/TextBufferInput.cjs +531 -0
  71. package/dist/components/TextBufferInput.d.ts +54 -0
  72. package/dist/components/TextBufferInput.d.ts.map +1 -0
  73. package/dist/components/TextBufferInput.js +507 -0
  74. package/dist/components/TodoPanel.cjs +129 -0
  75. package/dist/components/TodoPanel.d.ts +26 -0
  76. package/dist/components/TodoPanel.d.ts.map +1 -0
  77. package/dist/components/TodoPanel.js +105 -0
  78. package/dist/components/base/BaseAutocomplete.cjs +153 -0
  79. package/dist/components/base/BaseAutocomplete.d.ts +29 -0
  80. package/dist/components/base/BaseAutocomplete.d.ts.map +1 -0
  81. package/dist/components/base/BaseAutocomplete.js +129 -0
  82. package/dist/components/base/BaseSelector.cjs +167 -0
  83. package/dist/components/base/BaseSelector.d.ts +37 -0
  84. package/dist/components/base/BaseSelector.d.ts.map +1 -0
  85. package/dist/components/base/BaseSelector.js +151 -0
  86. package/dist/components/base/index.cjs +31 -0
  87. package/dist/components/base/index.d.ts +6 -0
  88. package/dist/components/base/index.d.ts.map +1 -0
  89. package/dist/components/base/index.js +6 -0
  90. package/dist/components/chat/ChatView.cjs +51 -0
  91. package/dist/components/chat/ChatView.d.ts +19 -0
  92. package/dist/components/chat/ChatView.d.ts.map +1 -0
  93. package/dist/components/chat/ChatView.js +27 -0
  94. package/dist/components/chat/Footer.cjs +32 -0
  95. package/dist/components/chat/Footer.d.ts +9 -0
  96. package/dist/components/chat/Footer.d.ts.map +1 -0
  97. package/dist/components/chat/Footer.js +8 -0
  98. package/dist/components/chat/Header.cjs +86 -0
  99. package/dist/components/chat/Header.d.ts +18 -0
  100. package/dist/components/chat/Header.d.ts.map +1 -0
  101. package/dist/components/chat/Header.js +62 -0
  102. package/dist/components/chat/MessageItem.cjs +269 -0
  103. package/dist/components/chat/MessageItem.d.ts +23 -0
  104. package/dist/components/chat/MessageItem.d.ts.map +1 -0
  105. package/dist/components/chat/MessageItem.js +247 -0
  106. package/dist/components/chat/MessageList.cjs +46 -0
  107. package/dist/components/chat/MessageList.d.ts +16 -0
  108. package/dist/components/chat/MessageList.d.ts.map +1 -0
  109. package/dist/components/chat/MessageList.js +22 -0
  110. package/dist/components/chat/QueuedMessagesDisplay.cjs +59 -0
  111. package/dist/components/chat/QueuedMessagesDisplay.d.ts +16 -0
  112. package/dist/components/chat/QueuedMessagesDisplay.d.ts.map +1 -0
  113. package/dist/components/chat/QueuedMessagesDisplay.js +35 -0
  114. package/dist/components/chat/ToolIcon.cjs +60 -0
  115. package/dist/components/chat/ToolIcon.d.ts +18 -0
  116. package/dist/components/chat/ToolIcon.d.ts.map +1 -0
  117. package/dist/components/chat/ToolIcon.js +36 -0
  118. package/dist/components/chat/index.cjs +43 -0
  119. package/dist/components/chat/index.d.ts +10 -0
  120. package/dist/components/chat/index.d.ts.map +1 -0
  121. package/dist/components/chat/index.js +14 -0
  122. package/dist/components/chat/styled-boxes/ConfigBox.cjs +56 -0
  123. package/dist/components/chat/styled-boxes/ConfigBox.d.ts +10 -0
  124. package/dist/components/chat/styled-boxes/ConfigBox.d.ts.map +1 -0
  125. package/dist/components/chat/styled-boxes/ConfigBox.js +32 -0
  126. package/dist/components/chat/styled-boxes/HelpBox.cjs +53 -0
  127. package/dist/components/chat/styled-boxes/HelpBox.d.ts +10 -0
  128. package/dist/components/chat/styled-boxes/HelpBox.d.ts.map +1 -0
  129. package/dist/components/chat/styled-boxes/HelpBox.js +29 -0
  130. package/dist/components/chat/styled-boxes/LogConfigBox.cjs +54 -0
  131. package/dist/components/chat/styled-boxes/LogConfigBox.d.ts +10 -0
  132. package/dist/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -0
  133. package/dist/components/chat/styled-boxes/LogConfigBox.js +30 -0
  134. package/dist/components/chat/styled-boxes/SessionHistoryBox.cjs +81 -0
  135. package/dist/components/chat/styled-boxes/SessionHistoryBox.d.ts +10 -0
  136. package/dist/components/chat/styled-boxes/SessionHistoryBox.d.ts.map +1 -0
  137. package/dist/components/chat/styled-boxes/SessionHistoryBox.js +57 -0
  138. package/dist/components/chat/styled-boxes/SessionListBox.cjs +58 -0
  139. package/dist/components/chat/styled-boxes/SessionListBox.d.ts +10 -0
  140. package/dist/components/chat/styled-boxes/SessionListBox.d.ts.map +1 -0
  141. package/dist/components/chat/styled-boxes/SessionListBox.js +34 -0
  142. package/dist/components/chat/styled-boxes/ShortcutsBox.cjs +39 -0
  143. package/dist/components/chat/styled-boxes/ShortcutsBox.d.ts +10 -0
  144. package/dist/components/chat/styled-boxes/ShortcutsBox.d.ts.map +1 -0
  145. package/dist/components/chat/styled-boxes/ShortcutsBox.js +15 -0
  146. package/dist/components/chat/styled-boxes/StatsBox.cjs +123 -0
  147. package/dist/components/chat/styled-boxes/StatsBox.d.ts +10 -0
  148. package/dist/components/chat/styled-boxes/StatsBox.d.ts.map +1 -0
  149. package/dist/components/chat/styled-boxes/StatsBox.js +99 -0
  150. package/dist/components/chat/styled-boxes/StyledBox.cjs +88 -0
  151. package/dist/components/chat/styled-boxes/StyledBox.d.ts +45 -0
  152. package/dist/components/chat/styled-boxes/StyledBox.d.ts.map +1 -0
  153. package/dist/components/chat/styled-boxes/StyledBox.js +61 -0
  154. package/dist/components/chat/styled-boxes/SyspromptBox.cjs +33 -0
  155. package/dist/components/chat/styled-boxes/SyspromptBox.d.ts +10 -0
  156. package/dist/components/chat/styled-boxes/SyspromptBox.d.ts.map +1 -0
  157. package/dist/components/chat/styled-boxes/SyspromptBox.js +9 -0
  158. package/dist/components/chat/styled-boxes/index.cjs +58 -0
  159. package/dist/components/chat/styled-boxes/index.d.ts +13 -0
  160. package/dist/components/chat/styled-boxes/index.d.ts.map +1 -0
  161. package/dist/components/chat/styled-boxes/index.js +23 -0
  162. package/dist/components/input/InputArea.cjs +74 -0
  163. package/dist/components/input/InputArea.d.ts +48 -0
  164. package/dist/components/input/InputArea.d.ts.map +1 -0
  165. package/dist/components/input/InputArea.js +50 -0
  166. package/dist/components/input/index.cjs +28 -0
  167. package/dist/components/input/index.d.ts +5 -0
  168. package/dist/components/input/index.d.ts.map +1 -0
  169. package/dist/components/input/index.js +4 -0
  170. package/dist/components/modes/AlternateBufferCLI.cjs +360 -0
  171. package/dist/components/modes/AlternateBufferCLI.d.ts +28 -0
  172. package/dist/components/modes/AlternateBufferCLI.d.ts.map +1 -0
  173. package/dist/components/modes/AlternateBufferCLI.js +339 -0
  174. package/dist/components/modes/StaticCLI.cjs +303 -0
  175. package/dist/components/modes/StaticCLI.d.ts +30 -0
  176. package/dist/components/modes/StaticCLI.d.ts.map +1 -0
  177. package/dist/components/modes/StaticCLI.js +279 -0
  178. package/dist/components/modes/index.cjs +31 -0
  179. package/dist/components/modes/index.d.ts +10 -0
  180. package/dist/components/modes/index.d.ts.map +1 -0
  181. package/dist/components/modes/index.js +6 -0
  182. package/dist/components/overlays/ApiKeyInput.cjs +131 -0
  183. package/dist/components/overlays/ApiKeyInput.d.ts +26 -0
  184. package/dist/components/overlays/ApiKeyInput.d.ts.map +1 -0
  185. package/dist/components/overlays/ApiKeyInput.js +115 -0
  186. package/dist/components/overlays/CommandOutputOverlay.cjs +103 -0
  187. package/dist/components/overlays/CommandOutputOverlay.d.ts +13 -0
  188. package/dist/components/overlays/CommandOutputOverlay.d.ts.map +1 -0
  189. package/dist/components/overlays/CommandOutputOverlay.js +69 -0
  190. package/dist/components/overlays/ContextStatsOverlay.cjs +354 -0
  191. package/dist/components/overlays/ContextStatsOverlay.d.ts +26 -0
  192. package/dist/components/overlays/ContextStatsOverlay.d.ts.map +1 -0
  193. package/dist/components/overlays/ContextStatsOverlay.js +334 -0
  194. package/dist/components/overlays/CustomModelWizard.cjs +362 -0
  195. package/dist/components/overlays/CustomModelWizard.d.ts +29 -0
  196. package/dist/components/overlays/CustomModelWizard.d.ts.map +1 -0
  197. package/dist/components/overlays/CustomModelWizard.js +356 -0
  198. package/dist/components/overlays/ExportWizard.cjs +382 -0
  199. package/dist/components/overlays/ExportWizard.d.ts +22 -0
  200. package/dist/components/overlays/ExportWizard.d.ts.map +1 -0
  201. package/dist/components/overlays/ExportWizard.js +352 -0
  202. package/dist/components/overlays/LogLevelSelector.cjs +120 -0
  203. package/dist/components/overlays/LogLevelSelector.d.ts +23 -0
  204. package/dist/components/overlays/LogLevelSelector.d.ts.map +1 -0
  205. package/dist/components/overlays/LogLevelSelector.js +100 -0
  206. package/dist/components/overlays/LoginOverlay.cjs +211 -0
  207. package/dist/components/overlays/LoginOverlay.d.ts +22 -0
  208. package/dist/components/overlays/LoginOverlay.d.ts.map +1 -0
  209. package/dist/components/overlays/LoginOverlay.js +194 -0
  210. package/dist/components/overlays/LogoutOverlay.cjs +138 -0
  211. package/dist/components/overlays/LogoutOverlay.d.ts +20 -0
  212. package/dist/components/overlays/LogoutOverlay.d.ts.map +1 -0
  213. package/dist/components/overlays/LogoutOverlay.js +130 -0
  214. package/dist/components/overlays/MarketplaceAddPrompt.cjs +119 -0
  215. package/dist/components/overlays/MarketplaceAddPrompt.d.ts +20 -0
  216. package/dist/components/overlays/MarketplaceAddPrompt.d.ts.map +1 -0
  217. package/dist/components/overlays/MarketplaceAddPrompt.js +99 -0
  218. package/dist/components/overlays/MarketplaceBrowser.cjs +364 -0
  219. package/dist/components/overlays/MarketplaceBrowser.d.ts +31 -0
  220. package/dist/components/overlays/MarketplaceBrowser.d.ts.map +1 -0
  221. package/dist/components/overlays/MarketplaceBrowser.js +358 -0
  222. package/dist/components/overlays/McpAddChoice.cjs +100 -0
  223. package/dist/components/overlays/McpAddChoice.d.ts +22 -0
  224. package/dist/components/overlays/McpAddChoice.d.ts.map +1 -0
  225. package/dist/components/overlays/McpAddChoice.js +80 -0
  226. package/dist/components/overlays/McpAddSelector.cjs +113 -0
  227. package/dist/components/overlays/McpAddSelector.d.ts +26 -0
  228. package/dist/components/overlays/McpAddSelector.d.ts.map +1 -0
  229. package/dist/components/overlays/McpAddSelector.js +93 -0
  230. package/dist/components/overlays/McpCustomTypeSelector.cjs +99 -0
  231. package/dist/components/overlays/McpCustomTypeSelector.d.ts +21 -0
  232. package/dist/components/overlays/McpCustomTypeSelector.d.ts.map +1 -0
  233. package/dist/components/overlays/McpCustomTypeSelector.js +79 -0
  234. package/dist/components/overlays/McpCustomWizard.cjs +258 -0
  235. package/dist/components/overlays/McpCustomWizard.d.ts +29 -0
  236. package/dist/components/overlays/McpCustomWizard.d.ts.map +1 -0
  237. package/dist/components/overlays/McpCustomWizard.js +238 -0
  238. package/dist/components/overlays/McpRemoveSelector.cjs +127 -0
  239. package/dist/components/overlays/McpRemoveSelector.d.ts +22 -0
  240. package/dist/components/overlays/McpRemoveSelector.d.ts.map +1 -0
  241. package/dist/components/overlays/McpRemoveSelector.js +107 -0
  242. package/dist/components/overlays/McpSelector.cjs +94 -0
  243. package/dist/components/overlays/McpSelector.d.ts +21 -0
  244. package/dist/components/overlays/McpSelector.d.ts.map +1 -0
  245. package/dist/components/overlays/McpSelector.js +74 -0
  246. package/dist/components/overlays/McpServerActions.cjs +124 -0
  247. package/dist/components/overlays/McpServerActions.d.ts +28 -0
  248. package/dist/components/overlays/McpServerActions.d.ts.map +1 -0
  249. package/dist/components/overlays/McpServerActions.js +111 -0
  250. package/dist/components/overlays/McpServerList.cjs +152 -0
  251. package/dist/components/overlays/McpServerList.d.ts +29 -0
  252. package/dist/components/overlays/McpServerList.d.ts.map +1 -0
  253. package/dist/components/overlays/McpServerList.js +139 -0
  254. package/dist/components/overlays/ModelSelectorRefactored.cjs +869 -0
  255. package/dist/components/overlays/ModelSelectorRefactored.d.ts +27 -0
  256. package/dist/components/overlays/ModelSelectorRefactored.d.ts.map +1 -0
  257. package/dist/components/overlays/ModelSelectorRefactored.js +870 -0
  258. package/dist/components/overlays/PluginActions.cjs +108 -0
  259. package/dist/components/overlays/PluginActions.d.ts +27 -0
  260. package/dist/components/overlays/PluginActions.d.ts.map +1 -0
  261. package/dist/components/overlays/PluginActions.js +95 -0
  262. package/dist/components/overlays/PluginList.cjs +115 -0
  263. package/dist/components/overlays/PluginList.d.ts +21 -0
  264. package/dist/components/overlays/PluginList.d.ts.map +1 -0
  265. package/dist/components/overlays/PluginList.js +102 -0
  266. package/dist/components/overlays/PluginManager.cjs +106 -0
  267. package/dist/components/overlays/PluginManager.d.ts +21 -0
  268. package/dist/components/overlays/PluginManager.d.ts.map +1 -0
  269. package/dist/components/overlays/PluginManager.js +86 -0
  270. package/dist/components/overlays/PromptAddChoice.cjs +92 -0
  271. package/dist/components/overlays/PromptAddChoice.d.ts +22 -0
  272. package/dist/components/overlays/PromptAddChoice.d.ts.map +1 -0
  273. package/dist/components/overlays/PromptAddChoice.js +72 -0
  274. package/dist/components/overlays/PromptAddWizard.cjs +215 -0
  275. package/dist/components/overlays/PromptAddWizard.d.ts +29 -0
  276. package/dist/components/overlays/PromptAddWizard.d.ts.map +1 -0
  277. package/dist/components/overlays/PromptAddWizard.js +195 -0
  278. package/dist/components/overlays/PromptDeleteSelector.cjs +148 -0
  279. package/dist/components/overlays/PromptDeleteSelector.d.ts +27 -0
  280. package/dist/components/overlays/PromptDeleteSelector.d.ts.map +1 -0
  281. package/dist/components/overlays/PromptDeleteSelector.js +135 -0
  282. package/dist/components/overlays/PromptList.cjs +169 -0
  283. package/dist/components/overlays/PromptList.d.ts +33 -0
  284. package/dist/components/overlays/PromptList.d.ts.map +1 -0
  285. package/dist/components/overlays/PromptList.js +157 -0
  286. package/dist/components/overlays/ReasoningOverlay.cjs +305 -0
  287. package/dist/components/overlays/ReasoningOverlay.d.ts +28 -0
  288. package/dist/components/overlays/ReasoningOverlay.d.ts.map +1 -0
  289. package/dist/components/overlays/ReasoningOverlay.js +278 -0
  290. package/dist/components/overlays/SearchOverlay.cjs +249 -0
  291. package/dist/components/overlays/SearchOverlay.d.ts +23 -0
  292. package/dist/components/overlays/SearchOverlay.d.ts.map +1 -0
  293. package/dist/components/overlays/SearchOverlay.js +236 -0
  294. package/dist/components/overlays/SessionRenameOverlay.cjs +101 -0
  295. package/dist/components/overlays/SessionRenameOverlay.d.ts +21 -0
  296. package/dist/components/overlays/SessionRenameOverlay.d.ts.map +1 -0
  297. package/dist/components/overlays/SessionRenameOverlay.js +81 -0
  298. package/dist/components/overlays/SessionSelectorRefactored.cjs +153 -0
  299. package/dist/components/overlays/SessionSelectorRefactored.d.ts +26 -0
  300. package/dist/components/overlays/SessionSelectorRefactored.d.ts.map +1 -0
  301. package/dist/components/overlays/SessionSelectorRefactored.js +133 -0
  302. package/dist/components/overlays/SessionSubcommandSelector.cjs +84 -0
  303. package/dist/components/overlays/SessionSubcommandSelector.d.ts +21 -0
  304. package/dist/components/overlays/SessionSubcommandSelector.d.ts.map +1 -0
  305. package/dist/components/overlays/SessionSubcommandSelector.js +64 -0
  306. package/dist/components/overlays/SoundsSelector.cjs +632 -0
  307. package/dist/components/overlays/SoundsSelector.d.ts +21 -0
  308. package/dist/components/overlays/SoundsSelector.d.ts.map +1 -0
  309. package/dist/components/overlays/SoundsSelector.js +619 -0
  310. package/dist/components/overlays/StreamSelector.cjs +104 -0
  311. package/dist/components/overlays/StreamSelector.d.ts +20 -0
  312. package/dist/components/overlays/StreamSelector.d.ts.map +1 -0
  313. package/dist/components/overlays/StreamSelector.js +84 -0
  314. package/dist/components/overlays/ToolBrowser.cjs +854 -0
  315. package/dist/components/overlays/ToolBrowser.d.ts +26 -0
  316. package/dist/components/overlays/ToolBrowser.d.ts.map +1 -0
  317. package/dist/components/overlays/ToolBrowser.js +831 -0
  318. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.cjs +784 -0
  319. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +25 -0
  320. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -0
  321. package/dist/components/overlays/custom-model-wizard/LocalModelWizard.js +768 -0
  322. package/dist/components/overlays/custom-model-wizard/index.cjs +26 -0
  323. package/dist/components/overlays/custom-model-wizard/index.d.ts +15 -0
  324. package/dist/components/overlays/custom-model-wizard/index.d.ts.map +1 -0
  325. package/dist/components/overlays/custom-model-wizard/index.js +3 -0
  326. package/dist/components/overlays/custom-model-wizard/provider-config.cjs +549 -0
  327. package/dist/components/overlays/custom-model-wizard/provider-config.d.ts +42 -0
  328. package/dist/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -0
  329. package/dist/components/overlays/custom-model-wizard/provider-config.js +516 -0
  330. package/dist/components/overlays/custom-model-wizard/provider-config.test.cjs +31 -0
  331. package/dist/components/overlays/custom-model-wizard/provider-config.test.d.ts +2 -0
  332. package/dist/components/overlays/custom-model-wizard/provider-config.test.d.ts.map +1 -0
  333. package/dist/components/overlays/custom-model-wizard/provider-config.test.js +30 -0
  334. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.cjs +59 -0
  335. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +25 -0
  336. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -0
  337. package/dist/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +33 -0
  338. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.cjs +64 -0
  339. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +17 -0
  340. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -0
  341. package/dist/components/overlays/custom-model-wizard/shared/ProviderSelector.js +40 -0
  342. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.cjs +48 -0
  343. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +20 -0
  344. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -0
  345. package/dist/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +24 -0
  346. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.cjs +58 -0
  347. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +30 -0
  348. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -0
  349. package/dist/components/overlays/custom-model-wizard/shared/WizardStepInput.js +34 -0
  350. package/dist/components/overlays/custom-model-wizard/shared/index.cjs +41 -0
  351. package/dist/components/overlays/custom-model-wizard/shared/index.d.ts +8 -0
  352. package/dist/components/overlays/custom-model-wizard/shared/index.d.ts.map +1 -0
  353. package/dist/components/overlays/custom-model-wizard/shared/index.js +12 -0
  354. package/dist/components/overlays/custom-model-wizard/types.cjs +53 -0
  355. package/dist/components/overlays/custom-model-wizard/types.d.ts +85 -0
  356. package/dist/components/overlays/custom-model-wizard/types.d.ts.map +1 -0
  357. package/dist/components/overlays/custom-model-wizard/types.js +29 -0
  358. package/dist/components/renderers/DiffRenderer.cjs +145 -0
  359. package/dist/components/renderers/DiffRenderer.d.ts +21 -0
  360. package/dist/components/renderers/DiffRenderer.d.ts.map +1 -0
  361. package/dist/components/renderers/DiffRenderer.js +118 -0
  362. package/dist/components/renderers/FilePreviewRenderer.cjs +146 -0
  363. package/dist/components/renderers/FilePreviewRenderer.d.ts +30 -0
  364. package/dist/components/renderers/FilePreviewRenderer.d.ts.map +1 -0
  365. package/dist/components/renderers/FilePreviewRenderer.js +119 -0
  366. package/dist/components/renderers/FileRenderer.cjs +95 -0
  367. package/dist/components/renderers/FileRenderer.d.ts +21 -0
  368. package/dist/components/renderers/FileRenderer.d.ts.map +1 -0
  369. package/dist/components/renderers/FileRenderer.js +71 -0
  370. package/dist/components/renderers/GenericRenderer.cjs +63 -0
  371. package/dist/components/renderers/GenericRenderer.d.ts +21 -0
  372. package/dist/components/renderers/GenericRenderer.d.ts.map +1 -0
  373. package/dist/components/renderers/GenericRenderer.js +39 -0
  374. package/dist/components/renderers/SearchRenderer.cjs +77 -0
  375. package/dist/components/renderers/SearchRenderer.d.ts +20 -0
  376. package/dist/components/renderers/SearchRenderer.d.ts.map +1 -0
  377. package/dist/components/renderers/SearchRenderer.js +43 -0
  378. package/dist/components/renderers/ShellRenderer.cjs +61 -0
  379. package/dist/components/renderers/ShellRenderer.d.ts +21 -0
  380. package/dist/components/renderers/ShellRenderer.d.ts.map +1 -0
  381. package/dist/components/renderers/ShellRenderer.js +37 -0
  382. package/dist/components/renderers/diff-shared.cjs +172 -0
  383. package/dist/components/renderers/diff-shared.d.ts +61 -0
  384. package/dist/components/renderers/diff-shared.d.ts.map +1 -0
  385. package/dist/components/renderers/diff-shared.js +142 -0
  386. package/dist/components/renderers/index.cjs +75 -0
  387. package/dist/components/renderers/index.d.ts +28 -0
  388. package/dist/components/renderers/index.d.ts.map +1 -0
  389. package/dist/components/renderers/index.js +44 -0
  390. package/dist/components/shared/FocusOverlayFrame.cjs +39 -0
  391. package/dist/components/shared/FocusOverlayFrame.d.ts +7 -0
  392. package/dist/components/shared/FocusOverlayFrame.d.ts.map +1 -0
  393. package/dist/components/shared/FocusOverlayFrame.js +15 -0
  394. package/dist/components/shared/HintBar.cjs +33 -0
  395. package/dist/components/shared/HintBar.d.ts +6 -0
  396. package/dist/components/shared/HintBar.d.ts.map +1 -0
  397. package/dist/components/shared/HintBar.js +9 -0
  398. package/dist/components/shared/MarkdownText.cjs +409 -0
  399. package/dist/components/shared/MarkdownText.d.ts +38 -0
  400. package/dist/components/shared/MarkdownText.d.ts.map +1 -0
  401. package/dist/components/shared/MarkdownText.js +373 -0
  402. package/dist/components/shared/VirtualizedList.cjs +365 -0
  403. package/dist/components/shared/VirtualizedList.d.ts +44 -0
  404. package/dist/components/shared/VirtualizedList.d.ts.map +1 -0
  405. package/dist/components/shared/VirtualizedList.js +349 -0
  406. package/dist/components/shared/text-buffer.cjs +1220 -0
  407. package/dist/components/shared/text-buffer.d.ts +185 -0
  408. package/dist/components/shared/text-buffer.d.ts.map +1 -0
  409. package/dist/components/shared/text-buffer.js +1194 -0
  410. package/dist/constants/processingPhrases.cjs +114 -0
  411. package/dist/constants/processingPhrases.d.ts +10 -0
  412. package/dist/constants/processingPhrases.d.ts.map +1 -0
  413. package/dist/constants/processingPhrases.js +89 -0
  414. package/dist/constants/spinnerFrames.cjs +28 -0
  415. package/dist/constants/spinnerFrames.d.ts +2 -0
  416. package/dist/constants/spinnerFrames.d.ts.map +1 -0
  417. package/dist/constants/spinnerFrames.js +4 -0
  418. package/dist/constants/tips.cjs +76 -0
  419. package/dist/constants/tips.d.ts +15 -0
  420. package/dist/constants/tips.d.ts.map +1 -0
  421. package/dist/constants/tips.js +51 -0
  422. package/dist/containers/InputContainer.cjs +706 -0
  423. package/dist/containers/InputContainer.d.ts +62 -0
  424. package/dist/containers/InputContainer.d.ts.map +1 -0
  425. package/dist/containers/InputContainer.js +672 -0
  426. package/dist/containers/OverlayContainer.cjs +2372 -0
  427. package/dist/containers/OverlayContainer.d.ts +42 -0
  428. package/dist/containers/OverlayContainer.d.ts.map +1 -0
  429. package/dist/containers/OverlayContainer.js +2356 -0
  430. package/dist/containers/index.cjs +31 -0
  431. package/dist/containers/index.d.ts +6 -0
  432. package/dist/containers/index.d.ts.map +1 -0
  433. package/dist/containers/index.js +6 -0
  434. package/dist/contexts/KeypressContext.cjs +436 -0
  435. package/dist/contexts/KeypressContext.d.ts +36 -0
  436. package/dist/contexts/KeypressContext.d.ts.map +1 -0
  437. package/dist/contexts/KeypressContext.js +408 -0
  438. package/dist/contexts/MouseContext.cjs +122 -0
  439. package/dist/contexts/MouseContext.d.ts +27 -0
  440. package/dist/contexts/MouseContext.d.ts.map +1 -0
  441. package/dist/contexts/MouseContext.js +101 -0
  442. package/dist/contexts/ScrollProvider.cjs +180 -0
  443. package/dist/contexts/ScrollProvider.d.ts +33 -0
  444. package/dist/contexts/ScrollProvider.d.ts.map +1 -0
  445. package/dist/contexts/ScrollProvider.js +163 -0
  446. package/dist/contexts/SoundContext.cjs +38 -0
  447. package/dist/contexts/SoundContext.d.ts +23 -0
  448. package/dist/contexts/SoundContext.d.ts.map +1 -0
  449. package/dist/contexts/SoundContext.js +13 -0
  450. package/dist/contexts/index.cjs +47 -0
  451. package/dist/contexts/index.d.ts +8 -0
  452. package/dist/contexts/index.d.ts.map +1 -0
  453. package/dist/contexts/index.js +25 -0
  454. package/dist/hooks/index.cjs +54 -0
  455. package/dist/hooks/index.d.ts +12 -0
  456. package/dist/hooks/index.d.ts.map +1 -0
  457. package/dist/hooks/index.js +28 -0
  458. package/dist/hooks/useAgentEvents.cjs +382 -0
  459. package/dist/hooks/useAgentEvents.d.ts +49 -0
  460. package/dist/hooks/useAgentEvents.d.ts.map +1 -0
  461. package/dist/hooks/useAgentEvents.js +360 -0
  462. package/dist/hooks/useAnimationTick.cjs +71 -0
  463. package/dist/hooks/useAnimationTick.d.ts +11 -0
  464. package/dist/hooks/useAnimationTick.d.ts.map +1 -0
  465. package/dist/hooks/useAnimationTick.js +47 -0
  466. package/dist/hooks/useBatchedScroll.cjs +44 -0
  467. package/dist/hooks/useBatchedScroll.d.ts +14 -0
  468. package/dist/hooks/useBatchedScroll.d.ts.map +1 -0
  469. package/dist/hooks/useBatchedScroll.js +20 -0
  470. package/dist/hooks/useCLIState.cjs +222 -0
  471. package/dist/hooks/useCLIState.d.ts +53 -0
  472. package/dist/hooks/useCLIState.d.ts.map +1 -0
  473. package/dist/hooks/useCLIState.js +201 -0
  474. package/dist/hooks/useElapsedTime.cjs +79 -0
  475. package/dist/hooks/useElapsedTime.d.ts +24 -0
  476. package/dist/hooks/useElapsedTime.d.ts.map +1 -0
  477. package/dist/hooks/useElapsedTime.js +55 -0
  478. package/dist/hooks/useGitBranch.cjs +47 -0
  479. package/dist/hooks/useGitBranch.d.ts +13 -0
  480. package/dist/hooks/useGitBranch.d.ts.map +1 -0
  481. package/dist/hooks/useGitBranch.js +23 -0
  482. package/dist/hooks/useHistorySearch.cjs +219 -0
  483. package/dist/hooks/useHistorySearch.d.ts +61 -0
  484. package/dist/hooks/useHistorySearch.d.ts.map +1 -0
  485. package/dist/hooks/useHistorySearch.js +195 -0
  486. package/dist/hooks/useInputHistory.cjs +47 -0
  487. package/dist/hooks/useInputHistory.d.ts +18 -0
  488. package/dist/hooks/useInputHistory.d.ts.map +1 -0
  489. package/dist/hooks/useInputHistory.js +23 -0
  490. package/dist/hooks/useInputOrchestrator.cjs +663 -0
  491. package/dist/hooks/useInputOrchestrator.d.ts +136 -0
  492. package/dist/hooks/useInputOrchestrator.d.ts.map +1 -0
  493. package/dist/hooks/useInputOrchestrator.js +635 -0
  494. package/dist/hooks/useKeyboardShortcuts.cjs +87 -0
  495. package/dist/hooks/useKeyboardShortcuts.d.ts +21 -0
  496. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  497. package/dist/hooks/useKeyboardShortcuts.js +63 -0
  498. package/dist/hooks/useKeypress.cjs +41 -0
  499. package/dist/hooks/useKeypress.d.ts +18 -0
  500. package/dist/hooks/useKeypress.d.ts.map +1 -0
  501. package/dist/hooks/useKeypress.js +17 -0
  502. package/dist/hooks/usePhraseCycler.cjs +74 -0
  503. package/dist/hooks/usePhraseCycler.d.ts +30 -0
  504. package/dist/hooks/usePhraseCycler.d.ts.map +1 -0
  505. package/dist/hooks/usePhraseCycler.js +50 -0
  506. package/dist/hooks/useStreaming.cjs +43 -0
  507. package/dist/hooks/useStreaming.d.ts +19 -0
  508. package/dist/hooks/useStreaming.d.ts.map +1 -0
  509. package/dist/hooks/useStreaming.js +24 -0
  510. package/dist/hooks/useTerminalSize.cjs +48 -0
  511. package/dist/hooks/useTerminalSize.d.ts +14 -0
  512. package/dist/hooks/useTerminalSize.d.ts.map +1 -0
  513. package/dist/hooks/useTerminalSize.js +24 -0
  514. package/dist/hooks/useTokenCounter.cjs +105 -0
  515. package/dist/hooks/useTokenCounter.d.ts +46 -0
  516. package/dist/hooks/useTokenCounter.d.ts.map +1 -0
  517. package/dist/hooks/useTokenCounter.js +81 -0
  518. package/dist/host/index.cjs +144 -0
  519. package/dist/host/index.d.ts +108 -0
  520. package/dist/host/index.d.ts.map +1 -0
  521. package/dist/host/index.js +104 -0
  522. package/dist/index.cjs +33 -0
  523. package/dist/index.d.cts +195 -0
  524. package/dist/index.d.ts +3 -0
  525. package/dist/index.d.ts.map +1 -0
  526. package/dist/index.js +7 -0
  527. package/dist/interactive-commands/auth/index.cjs +44 -0
  528. package/dist/interactive-commands/auth/index.d.ts +13 -0
  529. package/dist/interactive-commands/auth/index.d.ts.map +1 -0
  530. package/dist/interactive-commands/auth/index.js +19 -0
  531. package/dist/interactive-commands/command-parser.cjs +184 -0
  532. package/dist/interactive-commands/command-parser.d.ts +56 -0
  533. package/dist/interactive-commands/command-parser.d.ts.map +1 -0
  534. package/dist/interactive-commands/command-parser.js +146 -0
  535. package/dist/interactive-commands/commands.cjs +135 -0
  536. package/dist/interactive-commands/commands.d.ts +52 -0
  537. package/dist/interactive-commands/commands.d.ts.map +1 -0
  538. package/dist/interactive-commands/commands.js +99 -0
  539. package/dist/interactive-commands/documentation-commands.cjs +61 -0
  540. package/dist/interactive-commands/documentation-commands.d.ts +15 -0
  541. package/dist/interactive-commands/documentation-commands.d.ts.map +1 -0
  542. package/dist/interactive-commands/documentation-commands.js +27 -0
  543. package/dist/interactive-commands/exit-handler.cjs +40 -0
  544. package/dist/interactive-commands/exit-handler.d.ts +12 -0
  545. package/dist/interactive-commands/exit-handler.d.ts.map +1 -0
  546. package/dist/interactive-commands/exit-handler.js +15 -0
  547. package/dist/interactive-commands/exit-stats.cjs +41 -0
  548. package/dist/interactive-commands/exit-stats.d.ts +24 -0
  549. package/dist/interactive-commands/exit-stats.d.ts.map +1 -0
  550. package/dist/interactive-commands/exit-stats.js +15 -0
  551. package/dist/interactive-commands/export/index.cjs +36 -0
  552. package/dist/interactive-commands/export/index.d.ts +13 -0
  553. package/dist/interactive-commands/export/index.d.ts.map +1 -0
  554. package/dist/interactive-commands/export/index.js +12 -0
  555. package/dist/interactive-commands/general-commands.cjs +478 -0
  556. package/dist/interactive-commands/general-commands.d.ts +22 -0
  557. package/dist/interactive-commands/general-commands.d.ts.map +1 -0
  558. package/dist/interactive-commands/general-commands.js +443 -0
  559. package/dist/interactive-commands/mcp/index.cjs +35 -0
  560. package/dist/interactive-commands/mcp/index.d.ts +13 -0
  561. package/dist/interactive-commands/mcp/index.d.ts.map +1 -0
  562. package/dist/interactive-commands/mcp/index.js +11 -0
  563. package/dist/interactive-commands/model/index.cjs +36 -0
  564. package/dist/interactive-commands/model/index.d.ts +13 -0
  565. package/dist/interactive-commands/model/index.d.ts.map +1 -0
  566. package/dist/interactive-commands/model/index.js +12 -0
  567. package/dist/interactive-commands/plugin/index.cjs +35 -0
  568. package/dist/interactive-commands/plugin/index.d.ts +13 -0
  569. package/dist/interactive-commands/plugin/index.d.ts.map +1 -0
  570. package/dist/interactive-commands/plugin/index.js +11 -0
  571. package/dist/interactive-commands/prompt-commands.cjs +269 -0
  572. package/dist/interactive-commands/prompt-commands.d.ts +25 -0
  573. package/dist/interactive-commands/prompt-commands.d.ts.map +1 -0
  574. package/dist/interactive-commands/prompt-commands.js +244 -0
  575. package/dist/interactive-commands/session/index.cjs +32 -0
  576. package/dist/interactive-commands/session/index.d.ts +16 -0
  577. package/dist/interactive-commands/session/index.d.ts.map +1 -0
  578. package/dist/interactive-commands/session/index.js +6 -0
  579. package/dist/interactive-commands/session/session-commands.cjs +64 -0
  580. package/dist/interactive-commands/session/session-commands.d.ts +32 -0
  581. package/dist/interactive-commands/session/session-commands.d.ts.map +1 -0
  582. package/dist/interactive-commands/session/session-commands.js +38 -0
  583. package/dist/interactive-commands/system/index.cjs +28 -0
  584. package/dist/interactive-commands/system/index.d.ts +13 -0
  585. package/dist/interactive-commands/system/index.d.ts.map +1 -0
  586. package/dist/interactive-commands/system/index.js +4 -0
  587. package/dist/interactive-commands/system/system-commands.cjs +217 -0
  588. package/dist/interactive-commands/system/system-commands.d.ts +6 -0
  589. package/dist/interactive-commands/system/system-commands.d.ts.map +1 -0
  590. package/dist/interactive-commands/system/system-commands.js +195 -0
  591. package/dist/interactive-commands/tool-commands.cjs +38 -0
  592. package/dist/interactive-commands/tool-commands.d.ts +15 -0
  593. package/dist/interactive-commands/tool-commands.d.ts.map +1 -0
  594. package/dist/interactive-commands/tool-commands.js +14 -0
  595. package/dist/interactive-commands/utils/arg-parser.cjs +59 -0
  596. package/dist/interactive-commands/utils/arg-parser.d.ts +57 -0
  597. package/dist/interactive-commands/utils/arg-parser.d.ts.map +1 -0
  598. package/dist/interactive-commands/utils/arg-parser.js +34 -0
  599. package/dist/interactive-commands/utils/command-output.cjs +75 -0
  600. package/dist/interactive-commands/utils/command-output.d.ts +40 -0
  601. package/dist/interactive-commands/utils/command-output.d.ts.map +1 -0
  602. package/dist/interactive-commands/utils/command-output.js +51 -0
  603. package/dist/interactive-commands/utils/format-output.cjs +36 -0
  604. package/dist/interactive-commands/utils/format-output.d.ts +14 -0
  605. package/dist/interactive-commands/utils/format-output.d.ts.map +1 -0
  606. package/dist/interactive-commands/utils/format-output.js +11 -0
  607. package/dist/services/CommandService.cjs +68 -0
  608. package/dist/services/CommandService.d.ts +58 -0
  609. package/dist/services/CommandService.d.ts.map +1 -0
  610. package/dist/services/CommandService.js +41 -0
  611. package/dist/services/InputService.cjs +97 -0
  612. package/dist/services/InputService.d.ts +40 -0
  613. package/dist/services/InputService.d.ts.map +1 -0
  614. package/dist/services/InputService.js +78 -0
  615. package/dist/services/MessageService.cjs +69 -0
  616. package/dist/services/MessageService.d.ts +35 -0
  617. package/dist/services/MessageService.d.ts.map +1 -0
  618. package/dist/services/MessageService.js +51 -0
  619. package/dist/services/index.cjs +39 -0
  620. package/dist/services/index.d.ts +8 -0
  621. package/dist/services/index.d.ts.map +1 -0
  622. package/dist/services/index.js +16 -0
  623. package/dist/services/processStream.cjs +877 -0
  624. package/dist/services/processStream.d.ts +79 -0
  625. package/dist/services/processStream.d.ts.map +1 -0
  626. package/dist/services/processStream.js +843 -0
  627. package/dist/services/processStream.test.cjs +255 -0
  628. package/dist/services/processStream.test.d.ts +2 -0
  629. package/dist/services/processStream.test.d.ts.map +1 -0
  630. package/dist/services/processStream.test.js +254 -0
  631. package/dist/state/actions.cjs +16 -0
  632. package/dist/state/actions.d.ts +124 -0
  633. package/dist/state/actions.d.ts.map +1 -0
  634. package/dist/state/actions.js +0 -0
  635. package/dist/state/index.cjs +28 -0
  636. package/dist/state/index.d.ts +10 -0
  637. package/dist/state/index.d.ts.map +1 -0
  638. package/dist/state/index.js +4 -0
  639. package/dist/state/initialState.cjs +78 -0
  640. package/dist/state/initialState.d.ts +12 -0
  641. package/dist/state/initialState.d.ts.map +1 -0
  642. package/dist/state/initialState.js +54 -0
  643. package/dist/state/reducer.cjs +340 -0
  644. package/dist/state/reducer.d.ts +15 -0
  645. package/dist/state/reducer.d.ts.map +1 -0
  646. package/dist/state/reducer.js +316 -0
  647. package/dist/state/streaming-state.cjs +52 -0
  648. package/dist/state/streaming-state.d.ts +27 -0
  649. package/dist/state/streaming-state.d.ts.map +1 -0
  650. package/dist/state/streaming-state.js +25 -0
  651. package/dist/state/types.cjs +16 -0
  652. package/dist/state/types.d.ts +388 -0
  653. package/dist/state/types.d.ts.map +1 -0
  654. package/dist/state/types.js +0 -0
  655. package/dist/utils/bracketedPaste.cjs +37 -0
  656. package/dist/utils/bracketedPaste.d.ts +22 -0
  657. package/dist/utils/bracketedPaste.d.ts.map +1 -0
  658. package/dist/utils/bracketedPaste.js +12 -0
  659. package/dist/utils/clipboardUtils.cjs +297 -0
  660. package/dist/utils/clipboardUtils.d.ts +49 -0
  661. package/dist/utils/clipboardUtils.d.ts.map +1 -0
  662. package/dist/utils/clipboardUtils.js +261 -0
  663. package/dist/utils/commandOverlays.cjs +69 -0
  664. package/dist/utils/commandOverlays.d.ts +22 -0
  665. package/dist/utils/commandOverlays.d.ts.map +1 -0
  666. package/dist/utils/commandOverlays.js +44 -0
  667. package/dist/utils/debugLog.cjs +63 -0
  668. package/dist/utils/debugLog.d.ts +38 -0
  669. package/dist/utils/debugLog.d.ts.map +1 -0
  670. package/dist/utils/debugLog.js +39 -0
  671. package/dist/utils/elicitationSchema.cjs +85 -0
  672. package/dist/utils/elicitationSchema.d.ts +11 -0
  673. package/dist/utils/elicitationSchema.d.ts.map +1 -0
  674. package/dist/utils/elicitationSchema.js +61 -0
  675. package/dist/utils/elicitationSchema.test.cjs +78 -0
  676. package/dist/utils/elicitationSchema.test.d.ts +2 -0
  677. package/dist/utils/elicitationSchema.test.d.ts.map +1 -0
  678. package/dist/utils/elicitationSchema.test.js +77 -0
  679. package/dist/utils/idGenerator.cjs +31 -0
  680. package/dist/utils/idGenerator.d.ts +10 -0
  681. package/dist/utils/idGenerator.d.ts.map +1 -0
  682. package/dist/utils/idGenerator.js +7 -0
  683. package/dist/utils/index.cjs +62 -0
  684. package/dist/utils/index.d.ts +9 -0
  685. package/dist/utils/index.d.ts.map +1 -0
  686. package/dist/utils/index.js +39 -0
  687. package/dist/utils/input.cjs +72 -0
  688. package/dist/utils/input.d.ts +25 -0
  689. package/dist/utils/input.d.ts.map +1 -0
  690. package/dist/utils/input.js +39 -0
  691. package/dist/utils/inputParsing.cjs +76 -0
  692. package/dist/utils/inputParsing.d.ts +31 -0
  693. package/dist/utils/inputParsing.d.ts.map +1 -0
  694. package/dist/utils/inputParsing.js +48 -0
  695. package/dist/utils/llm-provider-display.cjs +49 -0
  696. package/dist/utils/llm-provider-display.d.ts +3 -0
  697. package/dist/utils/llm-provider-display.d.ts.map +1 -0
  698. package/dist/utils/llm-provider-display.js +25 -0
  699. package/dist/utils/messageFormatting.cjs +447 -0
  700. package/dist/utils/messageFormatting.d.ts +131 -0
  701. package/dist/utils/messageFormatting.d.ts.map +1 -0
  702. package/dist/utils/messageFormatting.js +393 -0
  703. package/dist/utils/messageFormatting.test.cjs +16 -0
  704. package/dist/utils/messageFormatting.test.d.ts +2 -0
  705. package/dist/utils/messageFormatting.test.d.ts.map +1 -0
  706. package/dist/utils/messageFormatting.test.js +15 -0
  707. package/dist/utils/mouse.cjs +196 -0
  708. package/dist/utils/mouse.d.ts +61 -0
  709. package/dist/utils/mouse.d.ts.map +1 -0
  710. package/dist/utils/mouse.js +172 -0
  711. package/dist/utils/overlayPresentation.cjs +48 -0
  712. package/dist/utils/overlayPresentation.d.ts +19 -0
  713. package/dist/utils/overlayPresentation.d.ts.map +1 -0
  714. package/dist/utils/overlayPresentation.js +22 -0
  715. package/dist/utils/overlaySizing.cjs +39 -0
  716. package/dist/utils/overlaySizing.d.ts +19 -0
  717. package/dist/utils/overlaySizing.d.ts.map +1 -0
  718. package/dist/utils/overlaySizing.js +15 -0
  719. package/dist/utils/soundNotification.cjs +217 -0
  720. package/dist/utils/soundNotification.d.ts +77 -0
  721. package/dist/utils/soundNotification.d.ts.map +1 -0
  722. package/dist/utils/soundNotification.js +188 -0
  723. package/dist/utils/soundNotification.test.cjs +126 -0
  724. package/dist/utils/soundNotification.test.d.ts +2 -0
  725. package/dist/utils/soundNotification.test.d.ts.map +1 -0
  726. package/dist/utils/soundNotification.test.js +125 -0
  727. package/dist/utils/streamSplitter.cjs +126 -0
  728. package/dist/utils/streamSplitter.d.ts +44 -0
  729. package/dist/utils/streamSplitter.d.ts.map +1 -0
  730. package/dist/utils/streamSplitter.js +100 -0
  731. package/dist/utils/textUtils.cjs +223 -0
  732. package/dist/utils/textUtils.d.ts +63 -0
  733. package/dist/utils/textUtils.d.ts.map +1 -0
  734. package/dist/utils/textUtils.js +174 -0
  735. package/dist/utils/toolUtils.cjs +40 -0
  736. package/dist/utils/toolUtils.d.ts +20 -0
  737. package/dist/utils/toolUtils.d.ts.map +1 -0
  738. package/dist/utils/toolUtils.js +14 -0
  739. package/package.json +51 -0
@@ -0,0 +1,2372 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var OverlayContainer_exports = {};
30
+ __export(OverlayContainer_exports, {
31
+ OverlayContainer: () => OverlayContainer
32
+ });
33
+ module.exports = __toCommonJS(OverlayContainer_exports);
34
+ var import_jsx_runtime = require("react/jsx-runtime");
35
+ var import_react = __toESM(require("react"), 1);
36
+ var import_ink = require("ink");
37
+ var import_path = __toESM(require("path"), 1);
38
+ var import_core = require("@dexto/core");
39
+ var import_ApprovalPrompt = require("../components/ApprovalPrompt.js");
40
+ var import_SlashCommandAutocomplete = require("../components/SlashCommandAutocomplete.js");
41
+ var import_ResourceAutocomplete = __toESM(require("../components/ResourceAutocomplete.js"), 1);
42
+ var import_ModelSelectorRefactored = __toESM(require("../components/overlays/ModelSelectorRefactored.js"), 1);
43
+ var import_ReasoningOverlay = require("../components/overlays/ReasoningOverlay.js");
44
+ var import_SessionSelectorRefactored = __toESM(require("../components/overlays/SessionSelectorRefactored.js"), 1);
45
+ var import_LogLevelSelector = __toESM(require("../components/overlays/LogLevelSelector.js"), 1);
46
+ var import_StreamSelector = __toESM(require("../components/overlays/StreamSelector.js"), 1);
47
+ var import_SoundsSelector = __toESM(require("../components/overlays/SoundsSelector.js"), 1);
48
+ var import_ToolBrowser = __toESM(require("../components/overlays/ToolBrowser.js"), 1);
49
+ var import_CommandOutputOverlay = require("../components/overlays/CommandOutputOverlay.js");
50
+ var import_McpServerList = __toESM(require("../components/overlays/McpServerList.js"), 1);
51
+ var import_McpServerActions = __toESM(require("../components/overlays/McpServerActions.js"), 1);
52
+ var import_McpAddChoice = __toESM(require("../components/overlays/McpAddChoice.js"), 1);
53
+ var import_McpAddSelector = __toESM(require("../components/overlays/McpAddSelector.js"), 1);
54
+ var import_SessionSubcommandSelector = __toESM(require("../components/overlays/SessionSubcommandSelector.js"), 1);
55
+ var import_McpCustomTypeSelector = __toESM(require("../components/overlays/McpCustomTypeSelector.js"), 1);
56
+ var import_McpCustomWizard = __toESM(require("../components/overlays/McpCustomWizard.js"), 1);
57
+ var import_CustomModelWizard = __toESM(require("../components/overlays/CustomModelWizard.js"), 1);
58
+ var import_agent_management = require("@dexto/agent-management");
59
+ var import_ApiKeyInput = __toESM(require("../components/overlays/ApiKeyInput.js"), 1);
60
+ var import_SearchOverlay = __toESM(require("../components/overlays/SearchOverlay.js"), 1);
61
+ var import_PromptList = __toESM(require("../components/overlays/PromptList.js"), 1);
62
+ var import_PromptAddChoice = __toESM(require("../components/overlays/PromptAddChoice.js"), 1);
63
+ var import_PromptAddWizard = __toESM(require("../components/overlays/PromptAddWizard.js"), 1);
64
+ var import_PromptDeleteSelector = __toESM(require("../components/overlays/PromptDeleteSelector.js"), 1);
65
+ var import_SessionRenameOverlay = __toESM(require("../components/overlays/SessionRenameOverlay.js"), 1);
66
+ var import_ContextStatsOverlay = __toESM(require("../components/overlays/ContextStatsOverlay.js"), 1);
67
+ var import_ExportWizard = __toESM(require("../components/overlays/ExportWizard.js"), 1);
68
+ var import_PluginManager = __toESM(require("../components/overlays/PluginManager.js"), 1);
69
+ var import_PluginList = __toESM(require("../components/overlays/PluginList.js"), 1);
70
+ var import_PluginActions = __toESM(require("../components/overlays/PluginActions.js"), 1);
71
+ var import_MarketplaceBrowser = __toESM(require("../components/overlays/MarketplaceBrowser.js"), 1);
72
+ var import_MarketplaceAddPrompt = __toESM(require("../components/overlays/MarketplaceAddPrompt.js"), 1);
73
+ var import_LoginOverlay = __toESM(require("../components/overlays/LoginOverlay.js"), 1);
74
+ var import_LogoutOverlay = __toESM(require("../components/overlays/LogoutOverlay.js"), 1);
75
+ var import_core2 = require("@dexto/core");
76
+ var import_messageFormatting = require("../utils/messageFormatting.js");
77
+ var import_idGenerator = require("../utils/idGenerator.js");
78
+ var import_host = require("../host/index.js");
79
+ var import_FocusOverlayFrame = require("../components/shared/FocusOverlayFrame.js");
80
+ var import_overlayPresentation = require("../utils/overlayPresentation.js");
81
+ function isLLMProvider(value) {
82
+ if (typeof value !== "string") return false;
83
+ for (const provider of import_core2.LLM_PROVIDERS) {
84
+ if (provider === value) return true;
85
+ }
86
+ return false;
87
+ }
88
+ function getProviderFromIssueContext(context) {
89
+ if (typeof context !== "object" || context === null) return null;
90
+ const provider = Reflect.get(context, "provider");
91
+ return isLLMProvider(provider) ? provider : null;
92
+ }
93
+ function buildReasoningSwitchUpdate(provider, model, reasoningVariant) {
94
+ if (reasoningVariant === void 0) {
95
+ return {};
96
+ }
97
+ const defaultVariant = (0, import_core2.getReasoningProfile)(provider, model).defaultVariant;
98
+ if (defaultVariant !== void 0 && reasoningVariant === defaultVariant) {
99
+ return { reasoning: null };
100
+ }
101
+ return { reasoning: { variant: reasoningVariant } };
102
+ }
103
+ const OverlayContainer = (0, import_react.forwardRef)(
104
+ function OverlayContainer2({
105
+ ui,
106
+ input,
107
+ session,
108
+ approval,
109
+ setInput,
110
+ setUi,
111
+ setSession,
112
+ setMessages,
113
+ setApproval,
114
+ setApprovalQueue,
115
+ agent,
116
+ inputService,
117
+ buffer,
118
+ configFilePath,
119
+ refreshStatic,
120
+ onSubmitPromptCommand
121
+ }, ref) {
122
+ const approvalRef = (0, import_react.useRef)(null);
123
+ const slashAutocompleteRef = (0, import_react.useRef)(null);
124
+ const resourceAutocompleteRef = (0, import_react.useRef)(null);
125
+ const modelSelectorRef = (0, import_react.useRef)(null);
126
+ const reasoningOverlayRef = (0, import_react.useRef)(null);
127
+ const sessionSelectorRef = (0, import_react.useRef)(null);
128
+ const logLevelSelectorRef = (0, import_react.useRef)(null);
129
+ const streamSelectorRef = (0, import_react.useRef)(null);
130
+ const soundsSelectorRef = (0, import_react.useRef)(null);
131
+ const toolBrowserRef = (0, import_react.useRef)(null);
132
+ const commandOutputRef = (0, import_react.useRef)(null);
133
+ const mcpServerListRef = (0, import_react.useRef)(null);
134
+ const mcpServerActionsRef = (0, import_react.useRef)(null);
135
+ const mcpAddChoiceRef = (0, import_react.useRef)(null);
136
+ const mcpAddSelectorRef = (0, import_react.useRef)(null);
137
+ const mcpCustomTypeSelectorRef = (0, import_react.useRef)(null);
138
+ const mcpCustomWizardRef = (0, import_react.useRef)(null);
139
+ const customModelWizardRef = (0, import_react.useRef)(null);
140
+ const sessionSubcommandSelectorRef = (0, import_react.useRef)(null);
141
+ const apiKeyInputRef = (0, import_react.useRef)(null);
142
+ const loginOverlayRef = (0, import_react.useRef)(null);
143
+ const logoutOverlayRef = (0, import_react.useRef)(null);
144
+ const searchOverlayRef = (0, import_react.useRef)(null);
145
+ const promptListRef = (0, import_react.useRef)(null);
146
+ const promptAddChoiceRef = (0, import_react.useRef)(null);
147
+ const promptAddWizardRef = (0, import_react.useRef)(null);
148
+ const promptDeleteSelectorRef = (0, import_react.useRef)(null);
149
+ const sessionRenameRef = (0, import_react.useRef)(null);
150
+ const contextStatsRef = (0, import_react.useRef)(null);
151
+ const exportWizardRef = (0, import_react.useRef)(null);
152
+ const pluginManagerRef = (0, import_react.useRef)(null);
153
+ const pluginListRef = (0, import_react.useRef)(null);
154
+ const pluginActionsRef = (0, import_react.useRef)(null);
155
+ const marketplaceBrowserRef = (0, import_react.useRef)(null);
156
+ const [selectedPlugin, setSelectedPlugin] = (0, import_react.useState)(null);
157
+ const marketplaceAddPromptRef = (0, import_react.useRef)(null);
158
+ const getConfigFilePathOrWarn = (0, import_react.useCallback)(
159
+ (action) => {
160
+ if (configFilePath) {
161
+ return configFilePath;
162
+ }
163
+ setMessages((prev) => [
164
+ ...prev,
165
+ {
166
+ id: (0, import_idGenerator.generateMessageId)("system"),
167
+ role: "system",
168
+ content: `\u26A0\uFE0F Cannot ${action}: this agent is not file-backed (no config path).`,
169
+ timestamp: /* @__PURE__ */ new Date()
170
+ }
171
+ ]);
172
+ return null;
173
+ },
174
+ [configFilePath, setMessages]
175
+ );
176
+ (0, import_react.useImperativeHandle)(
177
+ ref,
178
+ () => ({
179
+ handleInput: (inputStr, key) => {
180
+ if (approval && approvalRef.current) {
181
+ return approvalRef.current.handleInput(inputStr, key);
182
+ }
183
+ switch (ui.activeOverlay) {
184
+ case "slash-autocomplete":
185
+ return slashAutocompleteRef.current?.handleInput(inputStr, key) ?? false;
186
+ case "resource-autocomplete":
187
+ return resourceAutocompleteRef.current?.handleInput(inputStr, key) ?? false;
188
+ case "model-selector":
189
+ return modelSelectorRef.current?.handleInput(inputStr, key) ?? false;
190
+ case "reasoning":
191
+ return reasoningOverlayRef.current?.handleInput(inputStr, key) ?? false;
192
+ case "session-selector":
193
+ return sessionSelectorRef.current?.handleInput(inputStr, key) ?? false;
194
+ case "log-level-selector":
195
+ return logLevelSelectorRef.current?.handleInput(inputStr, key) ?? false;
196
+ case "stream-selector":
197
+ return streamSelectorRef.current?.handleInput(inputStr, key) ?? false;
198
+ case "sounds-selector":
199
+ return soundsSelectorRef.current?.handleInput(inputStr, key) ?? false;
200
+ case "tool-browser":
201
+ return toolBrowserRef.current?.handleInput(inputStr, key) ?? false;
202
+ case "command-output":
203
+ return commandOutputRef.current?.handleInput(inputStr, key) ?? false;
204
+ case "mcp-server-list":
205
+ return mcpServerListRef.current?.handleInput(inputStr, key) ?? false;
206
+ case "mcp-server-actions":
207
+ return mcpServerActionsRef.current?.handleInput(inputStr, key) ?? false;
208
+ case "mcp-add-choice":
209
+ return mcpAddChoiceRef.current?.handleInput(inputStr, key) ?? false;
210
+ case "mcp-add-selector":
211
+ return mcpAddSelectorRef.current?.handleInput(inputStr, key) ?? false;
212
+ case "mcp-custom-type-selector":
213
+ return mcpCustomTypeSelectorRef.current?.handleInput(inputStr, key) ?? false;
214
+ case "mcp-custom-wizard":
215
+ return mcpCustomWizardRef.current?.handleInput(inputStr, key) ?? false;
216
+ case "custom-model-wizard":
217
+ return customModelWizardRef.current?.handleInput(inputStr, key) ?? false;
218
+ case "session-subcommand-selector":
219
+ return sessionSubcommandSelectorRef.current?.handleInput(inputStr, key) ?? false;
220
+ case "api-key-input":
221
+ return apiKeyInputRef.current?.handleInput(inputStr, key) ?? false;
222
+ case "login":
223
+ return loginOverlayRef.current?.handleInput(inputStr, key) ?? false;
224
+ case "logout":
225
+ return logoutOverlayRef.current?.handleInput(inputStr, key) ?? false;
226
+ case "search":
227
+ return searchOverlayRef.current?.handleInput(inputStr, key) ?? false;
228
+ case "prompt-list":
229
+ return promptListRef.current?.handleInput(inputStr, key) ?? false;
230
+ case "prompt-add-choice":
231
+ return promptAddChoiceRef.current?.handleInput(inputStr, key) ?? false;
232
+ case "prompt-add-wizard":
233
+ return promptAddWizardRef.current?.handleInput(inputStr, key) ?? false;
234
+ case "prompt-delete-selector":
235
+ return promptDeleteSelectorRef.current?.handleInput(inputStr, key) ?? false;
236
+ case "session-rename":
237
+ return sessionRenameRef.current?.handleInput(inputStr, key) ?? false;
238
+ case "context-stats":
239
+ return contextStatsRef.current?.handleInput(inputStr, key) ?? false;
240
+ case "export-wizard":
241
+ return exportWizardRef.current?.handleInput(inputStr, key) ?? false;
242
+ case "plugin-manager":
243
+ return pluginManagerRef.current?.handleInput(inputStr, key) ?? false;
244
+ case "plugin-list":
245
+ return pluginListRef.current?.handleInput(inputStr, key) ?? false;
246
+ case "plugin-actions":
247
+ return pluginActionsRef.current?.handleInput(inputStr, key) ?? false;
248
+ case "marketplace-browser":
249
+ return marketplaceBrowserRef.current?.handleInput(inputStr, key) ?? false;
250
+ case "marketplace-add":
251
+ return marketplaceAddPromptRef.current?.handleInput(inputStr, key) ?? false;
252
+ default:
253
+ return false;
254
+ }
255
+ }
256
+ }),
257
+ [approval, ui.activeOverlay]
258
+ );
259
+ const completeApproval = (0, import_react.useCallback)(() => {
260
+ setApprovalQueue((queue) => {
261
+ if (queue.length > 0) {
262
+ const [next, ...rest] = queue;
263
+ setApproval(next);
264
+ setUi((prev) => ({ ...prev, activeOverlay: "approval" }));
265
+ return rest;
266
+ } else {
267
+ setApproval(null);
268
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
269
+ return [];
270
+ }
271
+ });
272
+ }, [setApproval, setApprovalQueue, setUi]);
273
+ const handleApprove = (0, import_react.useCallback)(
274
+ (options) => {
275
+ if (!approval) return;
276
+ if (options.enableAcceptEditsMode) {
277
+ setUi((prev) => ({ ...prev, autoApproveEdits: true }));
278
+ }
279
+ const toolName = approval.metadata.toolName;
280
+ if (toolName === "plan_create" || toolName === "plan_review") {
281
+ setUi((prev) => ({
282
+ ...prev,
283
+ planModeActive: false,
284
+ planModeInitialized: false
285
+ }));
286
+ }
287
+ agent.emit("approval:response", {
288
+ approvalId: approval.approvalId,
289
+ status: import_core.ApprovalStatus.APPROVED,
290
+ sessionId: approval.sessionId,
291
+ data: {
292
+ rememberChoice: options.rememberChoice,
293
+ rememberPattern: options.rememberPattern,
294
+ formData: options.formData,
295
+ rememberDirectory: options.rememberDirectory
296
+ }
297
+ });
298
+ completeApproval();
299
+ },
300
+ [approval, agent, completeApproval, setUi]
301
+ );
302
+ const handleDeny = (0, import_react.useCallback)(
303
+ (feedback) => {
304
+ if (!approval) return;
305
+ const message = feedback ? `User requested changes: ${feedback}` : "User denied the tool execution";
306
+ agent.emit("approval:response", {
307
+ approvalId: approval.approvalId,
308
+ status: import_core.ApprovalStatus.DENIED,
309
+ sessionId: approval.sessionId,
310
+ reason: import_core.DenialReason.USER_DENIED,
311
+ message
312
+ });
313
+ completeApproval();
314
+ },
315
+ [approval, agent, completeApproval]
316
+ );
317
+ const handleCancelApproval = (0, import_react.useCallback)(() => {
318
+ if (!approval) return;
319
+ agent.emit("approval:response", {
320
+ approvalId: approval.approvalId,
321
+ status: import_core.ApprovalStatus.CANCELLED,
322
+ sessionId: approval.sessionId,
323
+ reason: import_core.DenialReason.USER_CANCELLED,
324
+ message: "User cancelled the approval request"
325
+ });
326
+ completeApproval();
327
+ }, [approval, agent, completeApproval]);
328
+ const isApiKeyMissingError = (error) => {
329
+ if (error instanceof import_core2.DextoValidationError) {
330
+ const apiKeyIssue = error.issues.find(
331
+ (issue) => issue.code === import_core2.LLMErrorCode.API_KEY_MISSING
332
+ );
333
+ if (apiKeyIssue && apiKeyIssue.context) {
334
+ return getProviderFromIssueContext(apiKeyIssue.context);
335
+ }
336
+ }
337
+ return null;
338
+ };
339
+ const handleModelSelect = (0, import_react.useCallback)(
340
+ async (provider, model, displayName, baseURL, reasoningVariant) => {
341
+ if (provider === "dexto-nova") {
342
+ try {
343
+ const canUse = await (0, import_host.canUseDextoProvider)();
344
+ if (!canUse) {
345
+ setMessages((prev) => [
346
+ ...prev,
347
+ {
348
+ id: (0, import_idGenerator.generateMessageId)("system"),
349
+ role: "system",
350
+ content: "Cannot switch to Dexto Nova model - authentication required. Run /login to authenticate.",
351
+ timestamp: /* @__PURE__ */ new Date()
352
+ }
353
+ ]);
354
+ return;
355
+ }
356
+ } catch (error) {
357
+ setMessages((prev) => [
358
+ ...prev,
359
+ {
360
+ id: (0, import_idGenerator.generateMessageId)("error"),
361
+ role: "system",
362
+ content: `Failed to verify Dexto Nova auth: ${error instanceof Error ? error.message : String(error)}`,
363
+ timestamp: /* @__PURE__ */ new Date()
364
+ }
365
+ ]);
366
+ return;
367
+ }
368
+ }
369
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
370
+ buffer.setText("");
371
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
372
+ try {
373
+ setMessages((prev) => [
374
+ ...prev,
375
+ {
376
+ id: (0, import_idGenerator.generateMessageId)("system"),
377
+ role: "system",
378
+ content: `\u{1F504} Switching to ${displayName || model} (${provider})...`,
379
+ timestamp: /* @__PURE__ */ new Date()
380
+ }
381
+ ]);
382
+ await agent.switchLLM(
383
+ {
384
+ provider,
385
+ model,
386
+ baseURL,
387
+ ...buildReasoningSwitchUpdate(provider, model, reasoningVariant)
388
+ },
389
+ session.id || void 0
390
+ );
391
+ setSession((prev) => ({ ...prev, modelName: displayName || model }));
392
+ setMessages((prev) => [
393
+ ...prev,
394
+ {
395
+ id: (0, import_idGenerator.generateMessageId)("system"),
396
+ role: "system",
397
+ content: `\u2705 Successfully switched to ${displayName || model} (${provider})`,
398
+ timestamp: /* @__PURE__ */ new Date()
399
+ }
400
+ ]);
401
+ } catch (error) {
402
+ const missingProvider = isApiKeyMissingError(error);
403
+ if (missingProvider) {
404
+ setUi((prev) => ({
405
+ ...prev,
406
+ activeOverlay: "api-key-input",
407
+ pendingModelSwitch: {
408
+ provider: missingProvider,
409
+ model,
410
+ ...displayName && { displayName },
411
+ ...baseURL && { baseURL },
412
+ ...reasoningVariant !== void 0 && { reasoningVariant }
413
+ }
414
+ }));
415
+ setMessages((prev) => [
416
+ ...prev,
417
+ {
418
+ id: (0, import_idGenerator.generateMessageId)("system"),
419
+ role: "system",
420
+ content: `\u{1F511} API key required for ${provider}`,
421
+ timestamp: /* @__PURE__ */ new Date()
422
+ }
423
+ ]);
424
+ return;
425
+ }
426
+ setMessages((prev) => [
427
+ ...prev,
428
+ {
429
+ id: (0, import_idGenerator.generateMessageId)("error"),
430
+ role: "system",
431
+ content: `Failed to switch model: ${error instanceof Error ? error.message : String(error)}`,
432
+ timestamp: /* @__PURE__ */ new Date()
433
+ }
434
+ ]);
435
+ }
436
+ },
437
+ [setUi, setInput, setMessages, setSession, agent, session.id, buffer]
438
+ );
439
+ const handleSetDefaultModel = (0, import_react.useCallback)(
440
+ async (provider, model, displayName, baseURL, reasoningVariant) => {
441
+ try {
442
+ let providerEnvVar;
443
+ try {
444
+ const providerKeyStatus = await (0, import_agent_management.getProviderKeyStatus)(provider);
445
+ providerEnvVar = providerKeyStatus?.envVar;
446
+ } catch (error) {
447
+ agent.logger.debug(
448
+ `Failed to resolve provider API key env var: ${error instanceof Error ? error.message : String(error)}`
449
+ );
450
+ }
451
+ let existing = null;
452
+ try {
453
+ existing = await (0, import_agent_management.loadGlobalPreferences)();
454
+ } catch {
455
+ existing = null;
456
+ }
457
+ const existingReasoning = existing?.llm.reasoning;
458
+ const defaultReasoningVariant = (0, import_core2.getReasoningProfile)(
459
+ provider,
460
+ model
461
+ ).defaultVariant;
462
+ const nextReasoning = reasoningVariant === void 0 ? existingReasoning : defaultReasoningVariant !== void 0 && reasoningVariant === defaultReasoningVariant ? void 0 : { variant: reasoningVariant };
463
+ const preferencesUpdate = {
464
+ provider,
465
+ model,
466
+ ...baseURL ? { baseURL } : {},
467
+ ...nextReasoning ? { reasoning: nextReasoning } : {}
468
+ };
469
+ const switchReasoningUpdate = buildReasoningSwitchUpdate(
470
+ provider,
471
+ model,
472
+ reasoningVariant
473
+ );
474
+ if (existing?.llm.provider === provider && existing?.llm.apiKey) {
475
+ preferencesUpdate.apiKey = existing.llm.apiKey;
476
+ } else if (providerEnvVar) {
477
+ preferencesUpdate.apiKey = "$" + providerEnvVar;
478
+ }
479
+ await (0, import_agent_management.updateGlobalPreferences)({
480
+ llm: preferencesUpdate
481
+ });
482
+ try {
483
+ await agent.switchLLM(
484
+ {
485
+ provider,
486
+ model,
487
+ ...baseURL ? { baseURL } : {},
488
+ ...switchReasoningUpdate
489
+ },
490
+ session.id || void 0
491
+ );
492
+ setSession((prev) => ({ ...prev, modelName: displayName || model }));
493
+ setMessages((prev) => [
494
+ ...prev,
495
+ {
496
+ id: (0, import_idGenerator.generateMessageId)("system"),
497
+ role: "system",
498
+ content: `\u2705 Default model set to ${displayName || model} (${provider})`,
499
+ timestamp: /* @__PURE__ */ new Date()
500
+ }
501
+ ]);
502
+ } catch (error) {
503
+ const missingProvider = isApiKeyMissingError(error);
504
+ if (missingProvider) {
505
+ setUi((prev) => ({
506
+ ...prev,
507
+ activeOverlay: "api-key-input",
508
+ pendingModelSwitch: {
509
+ provider: missingProvider,
510
+ model,
511
+ ...displayName && { displayName },
512
+ ...baseURL && { baseURL },
513
+ ...reasoningVariant !== void 0 && { reasoningVariant }
514
+ }
515
+ }));
516
+ setMessages((prev) => [
517
+ ...prev,
518
+ {
519
+ id: (0, import_idGenerator.generateMessageId)("system"),
520
+ role: "system",
521
+ content: `\u{1F511} API key required for ${provider}`,
522
+ timestamp: /* @__PURE__ */ new Date()
523
+ }
524
+ ]);
525
+ return;
526
+ }
527
+ throw error;
528
+ }
529
+ } catch (error) {
530
+ setMessages((prev) => [
531
+ ...prev,
532
+ {
533
+ id: (0, import_idGenerator.generateMessageId)("error"),
534
+ role: "system",
535
+ content: `Failed to set default model: ${error instanceof Error ? error.message : String(error)}`,
536
+ timestamp: /* @__PURE__ */ new Date()
537
+ }
538
+ ]);
539
+ }
540
+ },
541
+ [agent, setMessages, setSession, setUi, session.id]
542
+ );
543
+ const [editingModel, setEditingModel] = (0, import_react.useState)(null);
544
+ const handleAddCustomModel = (0, import_react.useCallback)(() => {
545
+ setEditingModel(null);
546
+ setUi((prev) => ({ ...prev, activeOverlay: "custom-model-wizard" }));
547
+ }, [setUi]);
548
+ const handleEditCustomModel = (0, import_react.useCallback)(
549
+ (model) => {
550
+ setEditingModel(model);
551
+ setUi((prev) => ({ ...prev, activeOverlay: "custom-model-wizard" }));
552
+ },
553
+ [setUi]
554
+ );
555
+ const handleCustomModelComplete = (0, import_react.useCallback)(
556
+ async (model) => {
557
+ const wasEditing = editingModel !== null;
558
+ setEditingModel(null);
559
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
560
+ buffer.setText("");
561
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
562
+ if (wasEditing) {
563
+ setMessages((prev) => [
564
+ ...prev,
565
+ {
566
+ id: (0, import_idGenerator.generateMessageId)("system"),
567
+ role: "system",
568
+ content: `\u2705 Custom model "${model.displayName || model.name}" updated`,
569
+ timestamp: /* @__PURE__ */ new Date()
570
+ }
571
+ ]);
572
+ } else {
573
+ setMessages((prev) => [
574
+ ...prev,
575
+ {
576
+ id: (0, import_idGenerator.generateMessageId)("system"),
577
+ role: "system",
578
+ content: `\u2705 Custom model "${model.displayName || model.name}" saved`,
579
+ timestamp: /* @__PURE__ */ new Date()
580
+ }
581
+ ]);
582
+ await handleModelSelect(
583
+ model.provider,
584
+ model.name,
585
+ model.displayName,
586
+ model.baseURL
587
+ );
588
+ }
589
+ },
590
+ [setUi, setInput, setMessages, buffer, editingModel, handleModelSelect]
591
+ );
592
+ const handleApiKeySaved = (0, import_react.useCallback)(
593
+ async (meta) => {
594
+ const pending = ui.pendingModelSwitch;
595
+ if (!pending) {
596
+ setUi((prev) => ({
597
+ ...prev,
598
+ activeOverlay: "none",
599
+ pendingModelSwitch: null
600
+ }));
601
+ return;
602
+ }
603
+ setUi((prev) => ({
604
+ ...prev,
605
+ activeOverlay: "none",
606
+ pendingModelSwitch: null
607
+ }));
608
+ setMessages((prev) => [
609
+ ...prev,
610
+ {
611
+ id: (0, import_idGenerator.generateMessageId)("system"),
612
+ role: "system",
613
+ content: `\u2705 API key saved for ${meta.provider}`,
614
+ timestamp: /* @__PURE__ */ new Date()
615
+ }
616
+ ]);
617
+ try {
618
+ const pendingDisplayName = pending.displayName || pending.model;
619
+ setMessages((prev) => [
620
+ ...prev,
621
+ {
622
+ id: (0, import_idGenerator.generateMessageId)("system"),
623
+ role: "system",
624
+ content: `\u{1F504} Retrying switch to ${pendingDisplayName} (${pending.provider})...`,
625
+ timestamp: /* @__PURE__ */ new Date()
626
+ }
627
+ ]);
628
+ await agent.switchLLM(
629
+ {
630
+ provider: pending.provider,
631
+ model: pending.model,
632
+ ...pending.baseURL && { baseURL: pending.baseURL },
633
+ ...buildReasoningSwitchUpdate(
634
+ pending.provider,
635
+ pending.model,
636
+ pending.reasoningVariant
637
+ )
638
+ },
639
+ session.id || void 0
640
+ );
641
+ setSession((prev) => ({ ...prev, modelName: pendingDisplayName }));
642
+ setMessages((prev) => [
643
+ ...prev,
644
+ {
645
+ id: (0, import_idGenerator.generateMessageId)("system"),
646
+ role: "system",
647
+ content: `\u2705 Successfully switched to ${pendingDisplayName} (${pending.provider})`,
648
+ timestamp: /* @__PURE__ */ new Date()
649
+ }
650
+ ]);
651
+ } catch (error) {
652
+ setMessages((prev) => [
653
+ ...prev,
654
+ {
655
+ id: (0, import_idGenerator.generateMessageId)("error"),
656
+ role: "system",
657
+ content: `Failed to switch model: ${error instanceof Error ? error.message : String(error)}`,
658
+ timestamp: /* @__PURE__ */ new Date()
659
+ }
660
+ ]);
661
+ }
662
+ },
663
+ [ui.pendingModelSwitch, setUi, setMessages, setSession, agent, session.id]
664
+ );
665
+ const handleApiKeyClose = (0, import_react.useCallback)(() => {
666
+ setUi((prev) => ({
667
+ ...prev,
668
+ activeOverlay: "none",
669
+ pendingModelSwitch: null
670
+ }));
671
+ }, [setUi]);
672
+ const handleSearchResultSelect = (0, import_react.useCallback)(
673
+ (result) => {
674
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
675
+ buffer.setText("");
676
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
677
+ const roleLabel = result.message.role === "user" ? "\u{1F464} User" : result.message.role === "assistant" ? "\u{1F916} Assistant" : `\u{1F4CB} ${result.message.role}`;
678
+ setMessages((prev) => [
679
+ ...prev,
680
+ {
681
+ id: (0, import_idGenerator.generateMessageId)("system"),
682
+ role: "system",
683
+ content: `\u{1F50D} Search Result from session ${result.sessionId.slice(0, 8)}:
684
+
685
+ ${roleLabel}:
686
+ ${result.context}`,
687
+ timestamp: /* @__PURE__ */ new Date()
688
+ }
689
+ ]);
690
+ },
691
+ [setUi, setInput, setMessages, buffer]
692
+ );
693
+ const handleSessionSelect = (0, import_react.useCallback)(
694
+ async (newSessionId) => {
695
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
696
+ buffer.setText("");
697
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
698
+ try {
699
+ if (newSessionId === session.id) {
700
+ setMessages((prev) => [
701
+ ...prev,
702
+ {
703
+ id: (0, import_idGenerator.generateMessageId)("system"),
704
+ role: "system",
705
+ content: `\u2139\uFE0F Already using session ${newSessionId.slice(0, 8)}`,
706
+ timestamp: /* @__PURE__ */ new Date()
707
+ }
708
+ ]);
709
+ return;
710
+ }
711
+ (0, import_host.captureAnalytics)("dexto_session_switched", {
712
+ source: "cli",
713
+ fromSessionId: session.id || null,
714
+ toSessionId: newSessionId
715
+ });
716
+ setMessages([]);
717
+ setApproval(null);
718
+ setApprovalQueue([]);
719
+ const sessionData = await agent.getSession(newSessionId);
720
+ if (!sessionData) {
721
+ throw new Error(`Session ${newSessionId} not found`);
722
+ }
723
+ const newSessionConfig = agent.getCurrentLLMConfig(newSessionId);
724
+ const newSessionModelName = (0, import_core2.getModelDisplayName)(
725
+ newSessionConfig.model,
726
+ newSessionConfig.provider
727
+ );
728
+ setSession({
729
+ id: newSessionId,
730
+ hasActiveSession: true,
731
+ modelName: newSessionModelName
732
+ });
733
+ const history = await agent.getSessionHistory(newSessionId);
734
+ if (history && history.length > 0) {
735
+ const historyMessages = (0, import_messageFormatting.convertHistoryToUIMessages)(history, newSessionId);
736
+ setMessages(historyMessages);
737
+ const userInputHistory = history.filter(import_core.isUserMessage).map((msg) => {
738
+ if (typeof msg.content === "string") {
739
+ return msg.content;
740
+ }
741
+ if (Array.isArray(msg.content)) {
742
+ return msg.content.filter(
743
+ (part) => typeof part === "object" && part.type === "text"
744
+ ).map((part) => part.text).join("\n");
745
+ }
746
+ return "";
747
+ }).filter((text) => text.trim().length > 0);
748
+ setInput((prev) => ({
749
+ ...prev,
750
+ history: userInputHistory,
751
+ historyIndex: -1
752
+ }));
753
+ }
754
+ setMessages((prev) => [
755
+ ...prev,
756
+ {
757
+ id: (0, import_idGenerator.generateMessageId)("system"),
758
+ role: "system",
759
+ content: `\u2705 Switched to session ${newSessionId.slice(0, 8)}`,
760
+ timestamp: /* @__PURE__ */ new Date()
761
+ }
762
+ ]);
763
+ refreshStatic?.();
764
+ } catch (error) {
765
+ setMessages((prev) => [
766
+ ...prev,
767
+ {
768
+ id: (0, import_idGenerator.generateMessageId)("error"),
769
+ role: "system",
770
+ content: `Failed to switch session: ${error instanceof Error ? error.message : String(error)}`,
771
+ timestamp: /* @__PURE__ */ new Date()
772
+ }
773
+ ]);
774
+ }
775
+ },
776
+ [
777
+ setUi,
778
+ setInput,
779
+ setMessages,
780
+ setApproval,
781
+ setApprovalQueue,
782
+ setSession,
783
+ agent,
784
+ session.id,
785
+ session.modelName,
786
+ buffer,
787
+ refreshStatic
788
+ ]
789
+ );
790
+ const handlePromptSelect = (0, import_react.useCallback)(
791
+ async (prompt) => {
792
+ const commandName = prompt.displayName || prompt.name;
793
+ const commandText = `/${commandName}`;
794
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
795
+ buffer.setText("");
796
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
797
+ if (onSubmitPromptCommand) {
798
+ await onSubmitPromptCommand(commandText);
799
+ return;
800
+ }
801
+ const userMessage = (0, import_messageFormatting.createUserMessage)(commandText);
802
+ setMessages((prev) => [...prev, userMessage]);
803
+ setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
804
+ const { CommandService } = await import("../services/CommandService.js");
805
+ const commandService = new CommandService();
806
+ try {
807
+ const result = await commandService.executeCommand(
808
+ commandName,
809
+ [],
810
+ agent,
811
+ session.id || void 0
812
+ );
813
+ if (result.type === "output" && result.output) {
814
+ const output = result.output;
815
+ setMessages((prev) => [
816
+ ...prev,
817
+ {
818
+ id: (0, import_idGenerator.generateMessageId)("command"),
819
+ role: "system",
820
+ content: output,
821
+ timestamp: /* @__PURE__ */ new Date()
822
+ }
823
+ ]);
824
+ }
825
+ if (result.type === "styled" && result.styled) {
826
+ const { fallbackText, styledType, styledData } = result.styled;
827
+ setMessages((prev) => [
828
+ ...prev,
829
+ {
830
+ id: (0, import_idGenerator.generateMessageId)("command"),
831
+ role: "system",
832
+ content: fallbackText,
833
+ timestamp: /* @__PURE__ */ new Date(),
834
+ styledType,
835
+ styledData
836
+ }
837
+ ]);
838
+ }
839
+ setUi((prev) => ({
840
+ ...prev,
841
+ isProcessing: false,
842
+ isCancelling: false,
843
+ isThinking: false
844
+ }));
845
+ } catch (error) {
846
+ setMessages((prev) => [
847
+ ...prev,
848
+ {
849
+ id: (0, import_idGenerator.generateMessageId)("error"),
850
+ role: "system",
851
+ content: `${error instanceof Error ? error.message : String(error)}`,
852
+ timestamp: /* @__PURE__ */ new Date()
853
+ }
854
+ ]);
855
+ setUi((prev) => ({
856
+ ...prev,
857
+ isProcessing: false,
858
+ isCancelling: false,
859
+ isThinking: false
860
+ }));
861
+ }
862
+ },
863
+ [setUi, setInput, setMessages, agent, session.id, buffer, onSubmitPromptCommand]
864
+ );
865
+ const handleSystemCommandSelect = (0, import_react.useCallback)(
866
+ async (command) => {
867
+ const { getCommandOverlay } = await import("../utils/commandOverlays.js");
868
+ const overlay = getCommandOverlay(command, []);
869
+ if (overlay) {
870
+ buffer.setText("");
871
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
872
+ setUi((prev) => ({
873
+ ...prev,
874
+ activeOverlay: overlay,
875
+ mcpWizardServerType: null
876
+ }));
877
+ return;
878
+ }
879
+ const commandText = `/${command}`;
880
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
881
+ buffer.setText("");
882
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
883
+ const userMessage = (0, import_messageFormatting.createUserMessage)(commandText);
884
+ setMessages((prev) => [...prev, userMessage]);
885
+ setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
886
+ const { CommandService } = await import("../services/CommandService.js");
887
+ const commandService = new CommandService();
888
+ try {
889
+ const result = await commandService.executeCommand(
890
+ command,
891
+ [],
892
+ agent,
893
+ session.id || void 0
894
+ );
895
+ if (result.type === "output" && result.output) {
896
+ const output = result.output;
897
+ setMessages((prev) => [
898
+ ...prev,
899
+ {
900
+ id: (0, import_idGenerator.generateMessageId)("command"),
901
+ role: "system",
902
+ content: output,
903
+ timestamp: /* @__PURE__ */ new Date()
904
+ }
905
+ ]);
906
+ }
907
+ if (result.type === "styled" && result.styled) {
908
+ const { fallbackText, styledType, styledData } = result.styled;
909
+ setMessages((prev) => [
910
+ ...prev,
911
+ {
912
+ id: (0, import_idGenerator.generateMessageId)("command"),
913
+ role: "system",
914
+ content: fallbackText,
915
+ timestamp: /* @__PURE__ */ new Date(),
916
+ styledType,
917
+ styledData
918
+ }
919
+ ]);
920
+ }
921
+ setUi((prev) => ({
922
+ ...prev,
923
+ isProcessing: false,
924
+ isCancelling: false,
925
+ isThinking: false
926
+ }));
927
+ } catch (error) {
928
+ setMessages((prev) => [
929
+ ...prev,
930
+ {
931
+ id: (0, import_idGenerator.generateMessageId)("error"),
932
+ role: "system",
933
+ content: `${error instanceof Error ? error.message : String(error)}`,
934
+ timestamp: /* @__PURE__ */ new Date()
935
+ }
936
+ ]);
937
+ setUi((prev) => ({
938
+ ...prev,
939
+ isProcessing: false,
940
+ isCancelling: false,
941
+ isThinking: false
942
+ }));
943
+ }
944
+ },
945
+ [setInput, setUi, setMessages, agent, session.id, buffer]
946
+ );
947
+ const handleLoadIntoInput = (0, import_react.useCallback)(
948
+ (text) => {
949
+ buffer.setText(text);
950
+ setInput((prev) => ({ ...prev, value: text }));
951
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
952
+ },
953
+ [buffer, setInput, setUi]
954
+ );
955
+ const handleResourceSelect = (0, import_react.useCallback)(
956
+ (resource) => {
957
+ const atIndex = input.value.lastIndexOf("@");
958
+ if (atIndex >= 0) {
959
+ const before = input.value.slice(0, atIndex + 1);
960
+ const uriParts = resource.uri.split(/[\\/]/);
961
+ let reference = resource.name || uriParts[uriParts.length - 1] || resource.uri;
962
+ const rawUri = resource.uri.replace(/^(fs|file):\/\//, "");
963
+ if (import_path.default.isAbsolute(rawUri)) {
964
+ try {
965
+ const relativePath = import_path.default.relative(process.cwd(), rawUri);
966
+ reference = relativePath;
967
+ } catch {
968
+ }
969
+ }
970
+ const newValue = `${before}${reference} `;
971
+ buffer.setText(newValue);
972
+ setInput((prev) => ({ ...prev, value: newValue }));
973
+ }
974
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
975
+ },
976
+ [input.value, buffer, setInput, setUi]
977
+ );
978
+ const handleClose = (0, import_react.useCallback)(() => {
979
+ setUi((prev) => ({
980
+ ...prev,
981
+ activeOverlay: "none",
982
+ mcpWizardServerType: null,
983
+ commandOutput: null
984
+ }));
985
+ }, [setUi]);
986
+ const handleLoginDone = (0, import_react.useCallback)(
987
+ (outcome) => {
988
+ handleClose();
989
+ if (outcome.outcome === "closed") {
990
+ return;
991
+ }
992
+ if (outcome.outcome === "cancelled") {
993
+ setMessages((prev) => [
994
+ ...prev,
995
+ {
996
+ id: (0, import_idGenerator.generateMessageId)("system"),
997
+ role: "system",
998
+ content: "Login cancelled.",
999
+ timestamp: /* @__PURE__ */ new Date()
1000
+ }
1001
+ ]);
1002
+ return;
1003
+ }
1004
+ const userLabel = outcome.email ? ` as ${outcome.email}` : "";
1005
+ const keyLine = outcome.hasDextoApiKey ? `\u{1F511} DEXTO_API_KEY ready${outcome.keyId ? ` (Key ID: ${outcome.keyId})` : ""}` : "\u26A0\uFE0F Failed to provision DEXTO_API_KEY (you can still use your own API keys)";
1006
+ setMessages((prev) => [
1007
+ ...prev,
1008
+ {
1009
+ id: (0, import_idGenerator.generateMessageId)("system"),
1010
+ role: "system",
1011
+ content: `\u2705 Logged in${userLabel}
1012
+ ${keyLine}`,
1013
+ timestamp: /* @__PURE__ */ new Date()
1014
+ }
1015
+ ]);
1016
+ },
1017
+ [handleClose, setMessages]
1018
+ );
1019
+ const handleLogoutDone = (0, import_react.useCallback)(
1020
+ (outcome) => {
1021
+ handleClose();
1022
+ if (outcome.outcome === "closed") {
1023
+ return;
1024
+ }
1025
+ if (outcome.outcome === "cancelled") {
1026
+ setMessages((prev) => [
1027
+ ...prev,
1028
+ {
1029
+ id: (0, import_idGenerator.generateMessageId)("system"),
1030
+ role: "system",
1031
+ content: "Logout cancelled.",
1032
+ timestamp: /* @__PURE__ */ new Date()
1033
+ }
1034
+ ]);
1035
+ return;
1036
+ }
1037
+ const warning = outcome.wasUsingDextoCredits ? "\n\nNext steps:\n\u2022 Run `/login` to log back in\n\u2022 Or run `dexto setup` to configure a different provider" : "";
1038
+ setMessages((prev) => [
1039
+ ...prev,
1040
+ {
1041
+ id: (0, import_idGenerator.generateMessageId)("system"),
1042
+ role: "system",
1043
+ content: `\u2705 Successfully logged out${warning}`,
1044
+ timestamp: /* @__PURE__ */ new Date()
1045
+ }
1046
+ ]);
1047
+ },
1048
+ [handleClose, setMessages]
1049
+ );
1050
+ const handleLogLevelSelect = (0, import_react.useCallback)(
1051
+ (level) => {
1052
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
1053
+ buffer.setText("");
1054
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1055
+ void agent.setLogLevel(
1056
+ level,
1057
+ session.id ? { sessionId: session.id } : void 0
1058
+ );
1059
+ setMessages((prev) => [
1060
+ ...prev,
1061
+ {
1062
+ id: (0, import_idGenerator.generateMessageId)("system"),
1063
+ role: "system",
1064
+ content: `\u{1F4CA} Log level set to: ${level}`,
1065
+ timestamp: /* @__PURE__ */ new Date()
1066
+ }
1067
+ ]);
1068
+ },
1069
+ [setUi, setInput, setMessages, agent, buffer, getConfigFilePathOrWarn, session.id]
1070
+ );
1071
+ const handleStreamSelect = (0, import_react.useCallback)(
1072
+ (enabled) => {
1073
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
1074
+ buffer.setText("");
1075
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1076
+ setMessages((prev) => [
1077
+ ...prev,
1078
+ {
1079
+ id: (0, import_idGenerator.generateMessageId)("system"),
1080
+ role: "system",
1081
+ content: enabled ? "\u25B6\uFE0F Streaming enabled - responses will appear as they are generated" : "\u23F8\uFE0F Streaming disabled - responses will appear when complete",
1082
+ timestamp: /* @__PURE__ */ new Date()
1083
+ }
1084
+ ]);
1085
+ },
1086
+ [setUi, setInput, setMessages, buffer]
1087
+ );
1088
+ const handleToggleShowReasoning = (0, import_react.useCallback)(() => {
1089
+ setUi((prev) => ({ ...prev, showReasoning: !prev.showReasoning }));
1090
+ }, [setUi]);
1091
+ const handleReasoningNotify = (0, import_react.useCallback)(
1092
+ (message) => {
1093
+ setMessages((prev) => [
1094
+ ...prev,
1095
+ {
1096
+ id: (0, import_idGenerator.generateMessageId)("system"),
1097
+ role: "system",
1098
+ content: `\u{1F9E0} ${message}`,
1099
+ timestamp: /* @__PURE__ */ new Date()
1100
+ }
1101
+ ]);
1102
+ },
1103
+ [setMessages]
1104
+ );
1105
+ const handleSetReasoningBudgetTokens = (0, import_react.useCallback)(
1106
+ async (budgetTokens) => {
1107
+ const sessionId = session.id || void 0;
1108
+ const current = agent.getCurrentLLMConfig(sessionId);
1109
+ const profile = (0, import_core2.getReasoningProfile)(current.provider, current.model);
1110
+ const defaultVariant = profile.defaultVariant;
1111
+ const variant = current.reasoning?.variant ?? defaultVariant ?? profile.supportedVariants[0];
1112
+ if (variant === void 0) {
1113
+ return;
1114
+ }
1115
+ const reasoningUpdate = budgetTokens === void 0 && defaultVariant !== void 0 && variant === defaultVariant ? { reasoning: null } : {
1116
+ reasoning: {
1117
+ variant,
1118
+ ...typeof budgetTokens === "number" ? { budgetTokens } : {}
1119
+ }
1120
+ };
1121
+ await agent.switchLLM(
1122
+ {
1123
+ provider: current.provider,
1124
+ model: current.model,
1125
+ ...reasoningUpdate
1126
+ },
1127
+ sessionId
1128
+ );
1129
+ },
1130
+ [agent, session.id]
1131
+ );
1132
+ const handleMcpServerListAction = (0, import_react.useCallback)(
1133
+ (action) => {
1134
+ if (action.type === "select-server") {
1135
+ setUi((prev) => ({
1136
+ ...prev,
1137
+ activeOverlay: "mcp-server-actions",
1138
+ selectedMcpServer: action.server
1139
+ }));
1140
+ } else if (action.type === "add-new") {
1141
+ setUi((prev) => ({
1142
+ ...prev,
1143
+ activeOverlay: "mcp-add-choice"
1144
+ }));
1145
+ }
1146
+ },
1147
+ [setUi]
1148
+ );
1149
+ const handleMcpServerAction = (0, import_react.useCallback)(
1150
+ async (action) => {
1151
+ const { server } = action;
1152
+ if (action.type === "back") {
1153
+ setUi((prev) => ({
1154
+ ...prev,
1155
+ activeOverlay: "mcp-server-list",
1156
+ selectedMcpServer: null
1157
+ }));
1158
+ return;
1159
+ }
1160
+ setUi((prev) => ({
1161
+ ...prev,
1162
+ activeOverlay: "none",
1163
+ selectedMcpServer: null,
1164
+ mcpWizardServerType: null,
1165
+ isProcessing: true,
1166
+ isCancelling: false
1167
+ }));
1168
+ buffer.setText("");
1169
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1170
+ if (action.type === "enable" || action.type === "disable") {
1171
+ const newEnabled = action.type === "enable";
1172
+ setMessages((prev) => [
1173
+ ...prev,
1174
+ {
1175
+ id: (0, import_idGenerator.generateMessageId)("system"),
1176
+ role: "system",
1177
+ content: `${newEnabled ? "\u25B6\uFE0F" : "\u23F8\uFE0F"} ${newEnabled ? "Enabling" : "Disabling"} ${server.name}...`,
1178
+ timestamp: /* @__PURE__ */ new Date()
1179
+ }
1180
+ ]);
1181
+ try {
1182
+ if (newEnabled) {
1183
+ try {
1184
+ await agent.enableMcpServer(server.name);
1185
+ } catch (connectError) {
1186
+ setMessages((prev) => [
1187
+ ...prev,
1188
+ {
1189
+ id: (0, import_idGenerator.generateMessageId)("system"),
1190
+ role: "system",
1191
+ content: `\u26A0\uFE0F Failed to enable server: ${connectError instanceof Error ? connectError.message : String(connectError)}`,
1192
+ timestamp: /* @__PURE__ */ new Date()
1193
+ }
1194
+ ]);
1195
+ setUi((prev) => ({
1196
+ ...prev,
1197
+ isProcessing: false,
1198
+ isCancelling: false,
1199
+ isThinking: false
1200
+ }));
1201
+ return;
1202
+ }
1203
+ } else {
1204
+ await agent.disableMcpServer(server.name);
1205
+ }
1206
+ const { updateMcpServerField } = await import("@dexto/agent-management");
1207
+ const agentPath = getConfigFilePathOrWarn("persist MCP server settings");
1208
+ if (!agentPath) {
1209
+ return;
1210
+ }
1211
+ await updateMcpServerField(agentPath, server.name, "enabled", newEnabled);
1212
+ setMessages((prev) => [
1213
+ ...prev,
1214
+ {
1215
+ id: (0, import_idGenerator.generateMessageId)("system"),
1216
+ role: "system",
1217
+ content: `\u2705 ${server.name} ${newEnabled ? "enabled" : "disabled"}`,
1218
+ timestamp: /* @__PURE__ */ new Date()
1219
+ }
1220
+ ]);
1221
+ } catch (error) {
1222
+ let errorMessage = error instanceof Error ? error.message : String(error);
1223
+ if (error instanceof import_core2.DextoValidationError && error.issues.length > 0) {
1224
+ const issueDetails = error.issues.map((i) => {
1225
+ const path2 = i.path?.length ? `[${i.path.join(".")}] ` : "";
1226
+ return ` - ${path2}${i.message}`;
1227
+ }).join("\n");
1228
+ errorMessage = `Validation failed:
1229
+ ${issueDetails}`;
1230
+ }
1231
+ setMessages((prev) => [
1232
+ ...prev,
1233
+ {
1234
+ id: (0, import_idGenerator.generateMessageId)("error"),
1235
+ role: "system",
1236
+ content: `Failed to ${action.type} server: ${errorMessage}`,
1237
+ timestamp: /* @__PURE__ */ new Date()
1238
+ }
1239
+ ]);
1240
+ }
1241
+ } else if (action.type === "authenticate") {
1242
+ setMessages((prev) => [
1243
+ ...prev,
1244
+ {
1245
+ id: (0, import_idGenerator.generateMessageId)("system"),
1246
+ role: "system",
1247
+ content: `\u{1F510} Authenticating ${server.name}...`,
1248
+ timestamp: /* @__PURE__ */ new Date()
1249
+ }
1250
+ ]);
1251
+ try {
1252
+ await agent.restartMcpServer(server.name);
1253
+ setMessages((prev) => [
1254
+ ...prev,
1255
+ {
1256
+ id: (0, import_idGenerator.generateMessageId)("system"),
1257
+ role: "system",
1258
+ content: `\u2705 Authenticated ${server.name}`,
1259
+ timestamp: /* @__PURE__ */ new Date()
1260
+ }
1261
+ ]);
1262
+ } catch (error) {
1263
+ setMessages((prev) => [
1264
+ ...prev,
1265
+ {
1266
+ id: (0, import_idGenerator.generateMessageId)("error"),
1267
+ role: "system",
1268
+ content: `Failed to authenticate server: ${error instanceof Error ? error.message : String(error)}`,
1269
+ timestamp: /* @__PURE__ */ new Date()
1270
+ }
1271
+ ]);
1272
+ }
1273
+ } else if (action.type === "delete") {
1274
+ setMessages((prev) => [
1275
+ ...prev,
1276
+ {
1277
+ id: (0, import_idGenerator.generateMessageId)("system"),
1278
+ role: "system",
1279
+ content: `\u{1F5D1}\uFE0F Deleting ${server.name}...`,
1280
+ timestamp: /* @__PURE__ */ new Date()
1281
+ }
1282
+ ]);
1283
+ try {
1284
+ const { removeMcpServerFromConfig } = await import("@dexto/agent-management");
1285
+ const agentPath = getConfigFilePathOrWarn("persist MCP server deletion");
1286
+ if (agentPath) {
1287
+ await removeMcpServerFromConfig(agentPath, server.name);
1288
+ }
1289
+ try {
1290
+ await agent.removeMcpServer(server.name);
1291
+ } catch {
1292
+ }
1293
+ setMessages((prev) => [
1294
+ ...prev,
1295
+ {
1296
+ id: (0, import_idGenerator.generateMessageId)("system"),
1297
+ role: "system",
1298
+ content: `\u2705 Deleted ${server.name}`,
1299
+ timestamp: /* @__PURE__ */ new Date()
1300
+ }
1301
+ ]);
1302
+ } catch (error) {
1303
+ setMessages((prev) => [
1304
+ ...prev,
1305
+ {
1306
+ id: (0, import_idGenerator.generateMessageId)("error"),
1307
+ role: "system",
1308
+ content: `Failed to delete server: ${error instanceof Error ? error.message : String(error)}`,
1309
+ timestamp: /* @__PURE__ */ new Date()
1310
+ }
1311
+ ]);
1312
+ }
1313
+ }
1314
+ setUi((prev) => ({
1315
+ ...prev,
1316
+ isProcessing: false,
1317
+ isCancelling: false,
1318
+ isThinking: false
1319
+ }));
1320
+ },
1321
+ [setUi, setInput, setMessages, agent, buffer]
1322
+ );
1323
+ const handleMcpAddChoice = (0, import_react.useCallback)(
1324
+ (choice) => {
1325
+ if (choice === "back") {
1326
+ setUi((prev) => ({
1327
+ ...prev,
1328
+ activeOverlay: "mcp-server-list"
1329
+ }));
1330
+ } else if (choice === "registry") {
1331
+ setUi((prev) => ({
1332
+ ...prev,
1333
+ activeOverlay: "mcp-add-selector"
1334
+ }));
1335
+ } else if (choice === "custom") {
1336
+ setUi((prev) => ({
1337
+ ...prev,
1338
+ activeOverlay: "mcp-custom-type-selector"
1339
+ }));
1340
+ }
1341
+ },
1342
+ [setUi]
1343
+ );
1344
+ const handleMcpAddSelect = (0, import_react.useCallback)(
1345
+ async (result) => {
1346
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
1347
+ buffer.setText("");
1348
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1349
+ setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1350
+ setMessages((prev) => [
1351
+ ...prev,
1352
+ {
1353
+ id: (0, import_idGenerator.generateMessageId)("system"),
1354
+ role: "system",
1355
+ content: `\u{1F50C} Connecting to ${result.entry.name}...`,
1356
+ timestamp: /* @__PURE__ */ new Date()
1357
+ }
1358
+ ]);
1359
+ try {
1360
+ const mcpConfig = result.entry.config;
1361
+ await agent.addMcpServer(result.entry.id, mcpConfig);
1362
+ (0, import_host.captureAnalytics)("dexto_mcp_server_connected", {
1363
+ source: "cli",
1364
+ serverName: result.entry.name,
1365
+ transportType: mcpConfig.type
1366
+ });
1367
+ setMessages((prev) => [
1368
+ ...prev,
1369
+ {
1370
+ id: (0, import_idGenerator.generateMessageId)("system"),
1371
+ role: "system",
1372
+ content: `\u2705 Connected to ${result.entry.name}`,
1373
+ timestamp: /* @__PURE__ */ new Date()
1374
+ }
1375
+ ]);
1376
+ } catch (error) {
1377
+ setMessages((prev) => [
1378
+ ...prev,
1379
+ {
1380
+ id: (0, import_idGenerator.generateMessageId)("system"),
1381
+ role: "system",
1382
+ content: `Failed to connect: ${error instanceof Error ? error.message : String(error)}`,
1383
+ timestamp: /* @__PURE__ */ new Date()
1384
+ }
1385
+ ]);
1386
+ }
1387
+ setUi((prev) => ({
1388
+ ...prev,
1389
+ isProcessing: false,
1390
+ isCancelling: false,
1391
+ isThinking: false
1392
+ }));
1393
+ },
1394
+ [setUi, setInput, setMessages, agent, buffer]
1395
+ );
1396
+ const handleMcpCustomTypeSelect = (0, import_react.useCallback)(
1397
+ (serverType) => {
1398
+ setUi((prev) => ({
1399
+ ...prev,
1400
+ mcpWizardServerType: serverType,
1401
+ activeOverlay: "mcp-custom-wizard"
1402
+ }));
1403
+ },
1404
+ [setUi]
1405
+ );
1406
+ const handleMcpCustomWizardComplete = (0, import_react.useCallback)(
1407
+ async (config) => {
1408
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
1409
+ buffer.setText("");
1410
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1411
+ setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1412
+ setMessages((prev) => [
1413
+ ...prev,
1414
+ {
1415
+ id: (0, import_idGenerator.generateMessageId)("system"),
1416
+ role: "system",
1417
+ content: `\u{1F50C} Connecting to ${config.name}...`,
1418
+ timestamp: /* @__PURE__ */ new Date()
1419
+ }
1420
+ ]);
1421
+ try {
1422
+ let serverConfig;
1423
+ if (config.serverType === "stdio") {
1424
+ serverConfig = {
1425
+ type: "stdio",
1426
+ command: config.command,
1427
+ args: config.args || []
1428
+ };
1429
+ } else if (config.serverType === "http") {
1430
+ serverConfig = {
1431
+ type: "http",
1432
+ url: config.url
1433
+ };
1434
+ } else {
1435
+ serverConfig = {
1436
+ type: "sse",
1437
+ url: config.url
1438
+ };
1439
+ }
1440
+ await agent.addMcpServer(config.name, serverConfig);
1441
+ (0, import_host.captureAnalytics)("dexto_mcp_server_connected", {
1442
+ source: "cli",
1443
+ serverName: config.name,
1444
+ transportType: serverConfig.type
1445
+ });
1446
+ setMessages((prev) => [
1447
+ ...prev,
1448
+ {
1449
+ id: (0, import_idGenerator.generateMessageId)("system"),
1450
+ role: "system",
1451
+ content: `\u2705 Connected to ${config.name}`,
1452
+ timestamp: /* @__PURE__ */ new Date()
1453
+ }
1454
+ ]);
1455
+ } catch (error) {
1456
+ setMessages((prev) => [
1457
+ ...prev,
1458
+ {
1459
+ id: (0, import_idGenerator.generateMessageId)("system"),
1460
+ role: "system",
1461
+ content: `Failed to connect: ${error instanceof Error ? error.message : String(error)}`,
1462
+ timestamp: /* @__PURE__ */ new Date()
1463
+ }
1464
+ ]);
1465
+ }
1466
+ setUi((prev) => ({
1467
+ ...prev,
1468
+ isProcessing: false,
1469
+ isCancelling: false,
1470
+ isThinking: false
1471
+ }));
1472
+ },
1473
+ [setUi, setInput, setMessages, agent, buffer]
1474
+ );
1475
+ const handlePluginManagerAction = (0, import_react.useCallback)(
1476
+ (action) => {
1477
+ if (action === "list") {
1478
+ setUi((prev) => ({
1479
+ ...prev,
1480
+ activeOverlay: "plugin-list"
1481
+ }));
1482
+ } else if (action === "marketplace") {
1483
+ setUi((prev) => ({
1484
+ ...prev,
1485
+ activeOverlay: "marketplace-browser"
1486
+ }));
1487
+ }
1488
+ },
1489
+ [setUi]
1490
+ );
1491
+ const handlePluginSelect = (0, import_react.useCallback)(
1492
+ (plugin) => {
1493
+ setSelectedPlugin(plugin);
1494
+ setUi((prev) => ({
1495
+ ...prev,
1496
+ activeOverlay: "plugin-actions"
1497
+ }));
1498
+ },
1499
+ [setUi]
1500
+ );
1501
+ const handlePluginAction = (0, import_react.useCallback)(
1502
+ async (action) => {
1503
+ if (action.type === "back") {
1504
+ setSelectedPlugin(null);
1505
+ setUi((prev) => ({
1506
+ ...prev,
1507
+ activeOverlay: "plugin-list"
1508
+ }));
1509
+ return;
1510
+ }
1511
+ if (action.type === "uninstall") {
1512
+ setUi((prev) => ({ ...prev, activeOverlay: "none", isProcessing: true }));
1513
+ try {
1514
+ const { uninstallPlugin, reloadAgentConfigFromFile, enrichAgentConfig } = await import("@dexto/agent-management");
1515
+ await uninstallPlugin(action.plugin.name);
1516
+ setMessages((prev) => [
1517
+ ...prev,
1518
+ {
1519
+ id: (0, import_idGenerator.generateMessageId)("system"),
1520
+ role: "system",
1521
+ content: `Plugin '${action.plugin.name}' has been uninstalled.`,
1522
+ timestamp: /* @__PURE__ */ new Date()
1523
+ }
1524
+ ]);
1525
+ try {
1526
+ const agentPath = getConfigFilePathOrWarn(
1527
+ "refresh prompts after plugin uninstall"
1528
+ );
1529
+ if (!agentPath) {
1530
+ return;
1531
+ }
1532
+ const newConfig = await reloadAgentConfigFromFile(agentPath);
1533
+ const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1534
+ await agent.refreshPrompts(enrichedConfig.prompts);
1535
+ } catch {
1536
+ }
1537
+ } catch (error) {
1538
+ setMessages((prev) => [
1539
+ ...prev,
1540
+ {
1541
+ id: (0, import_idGenerator.generateMessageId)("error"),
1542
+ role: "system",
1543
+ content: `Failed to uninstall plugin: ${error instanceof Error ? error.message : String(error)}`,
1544
+ timestamp: /* @__PURE__ */ new Date()
1545
+ }
1546
+ ]);
1547
+ }
1548
+ setSelectedPlugin(null);
1549
+ setUi((prev) => ({ ...prev, isProcessing: false }));
1550
+ }
1551
+ },
1552
+ [setUi, setMessages, agent, getConfigFilePathOrWarn]
1553
+ );
1554
+ const handleMarketplaceBrowserAction = (0, import_react.useCallback)(
1555
+ async (action) => {
1556
+ if (action.type === "add-marketplace") {
1557
+ setUi((prev) => ({ ...prev, activeOverlay: "marketplace-add" }));
1558
+ } else if (action.type === "plugin-installed") {
1559
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
1560
+ setMessages((prev) => [
1561
+ ...prev,
1562
+ {
1563
+ id: (0, import_idGenerator.generateMessageId)("system"),
1564
+ role: "system",
1565
+ content: `\u2705 Plugin '${action.pluginName}' installed from ${action.marketplace}`,
1566
+ timestamp: /* @__PURE__ */ new Date()
1567
+ }
1568
+ ]);
1569
+ try {
1570
+ const { reloadAgentConfigFromFile, enrichAgentConfig } = await import("@dexto/agent-management");
1571
+ const agentPath = getConfigFilePathOrWarn(
1572
+ "refresh prompts after plugin install"
1573
+ );
1574
+ if (!agentPath) {
1575
+ return;
1576
+ }
1577
+ const newConfig = await reloadAgentConfigFromFile(agentPath);
1578
+ const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1579
+ await agent.refreshPrompts(enrichedConfig.prompts);
1580
+ } catch (error) {
1581
+ }
1582
+ }
1583
+ },
1584
+ [setUi, setMessages, agent, getConfigFilePathOrWarn]
1585
+ );
1586
+ const handleMarketplaceAddComplete = (0, import_react.useCallback)(
1587
+ (name, pluginCount) => {
1588
+ setUi((prev) => ({ ...prev, activeOverlay: "marketplace-browser" }));
1589
+ setMessages((prev) => [
1590
+ ...prev,
1591
+ {
1592
+ id: (0, import_idGenerator.generateMessageId)("system"),
1593
+ role: "system",
1594
+ content: `\u2705 Marketplace '${name}' added (${pluginCount} plugins found)`,
1595
+ timestamp: /* @__PURE__ */ new Date()
1596
+ }
1597
+ ]);
1598
+ },
1599
+ [setUi, setMessages]
1600
+ );
1601
+ const handleSessionSubcommandSelect = (0, import_react.useCallback)(
1602
+ async (action) => {
1603
+ if (action === "switch") {
1604
+ setInput((prev) => ({ ...prev, value: "/session switch" }));
1605
+ setUi((prev) => ({ ...prev, activeOverlay: "session-selector" }));
1606
+ return;
1607
+ }
1608
+ setUi((prev) => ({ ...prev, activeOverlay: "none", mcpWizardServerType: null }));
1609
+ buffer.setText("");
1610
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1611
+ setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1612
+ try {
1613
+ const { CommandService } = await import("../services/CommandService.js");
1614
+ const commandService = new CommandService();
1615
+ const result = await commandService.executeCommand(
1616
+ "session",
1617
+ [action],
1618
+ agent,
1619
+ session.id || void 0
1620
+ );
1621
+ if (result.type === "output" && result.output) {
1622
+ const output = result.output;
1623
+ setMessages((prev) => [
1624
+ ...prev,
1625
+ {
1626
+ id: (0, import_idGenerator.generateMessageId)("command"),
1627
+ role: "system",
1628
+ content: output,
1629
+ timestamp: /* @__PURE__ */ new Date()
1630
+ }
1631
+ ]);
1632
+ }
1633
+ if (result.type === "styled" && result.styled) {
1634
+ const { fallbackText, styledType, styledData } = result.styled;
1635
+ setMessages((prev) => [
1636
+ ...prev,
1637
+ {
1638
+ id: (0, import_idGenerator.generateMessageId)("command"),
1639
+ role: "system",
1640
+ content: fallbackText,
1641
+ timestamp: /* @__PURE__ */ new Date(),
1642
+ styledType,
1643
+ styledData
1644
+ }
1645
+ ]);
1646
+ }
1647
+ setUi((prev) => ({
1648
+ ...prev,
1649
+ isProcessing: false,
1650
+ isCancelling: false,
1651
+ isThinking: false
1652
+ }));
1653
+ } catch (error) {
1654
+ setMessages((prev) => [
1655
+ ...prev,
1656
+ {
1657
+ id: (0, import_idGenerator.generateMessageId)("error"),
1658
+ role: "system",
1659
+ content: `${error instanceof Error ? error.message : String(error)}`,
1660
+ timestamp: /* @__PURE__ */ new Date()
1661
+ }
1662
+ ]);
1663
+ setUi((prev) => ({
1664
+ ...prev,
1665
+ isProcessing: false,
1666
+ isCancelling: false,
1667
+ isThinking: false
1668
+ }));
1669
+ }
1670
+ },
1671
+ [setInput, setUi, setMessages, agent, session.id, buffer]
1672
+ );
1673
+ const handlePromptListAction = (0, import_react.useCallback)(
1674
+ async (action) => {
1675
+ if (action.type === "add-prompt") {
1676
+ setUi((prev) => ({
1677
+ ...prev,
1678
+ activeOverlay: "prompt-add-choice"
1679
+ }));
1680
+ } else if (action.type === "delete-prompt") {
1681
+ setUi((prev) => ({
1682
+ ...prev,
1683
+ activeOverlay: "prompt-delete-selector"
1684
+ }));
1685
+ } else if (action.type === "select-prompt") {
1686
+ const displayName = action.prompt.displayName || action.prompt.name;
1687
+ const commandText = `/${displayName}`;
1688
+ setUi((prev) => ({
1689
+ ...prev,
1690
+ activeOverlay: "none",
1691
+ promptAddWizard: null
1692
+ }));
1693
+ buffer.setText("");
1694
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1695
+ if (onSubmitPromptCommand) {
1696
+ await onSubmitPromptCommand(commandText);
1697
+ }
1698
+ }
1699
+ },
1700
+ [setUi, setInput, buffer, onSubmitPromptCommand]
1701
+ );
1702
+ const handlePromptLoadIntoInput = (0, import_react.useCallback)(
1703
+ (text) => {
1704
+ buffer.setText(text);
1705
+ setInput((prev) => ({ ...prev, value: text }));
1706
+ setUi((prev) => ({
1707
+ ...prev,
1708
+ activeOverlay: "none",
1709
+ promptAddWizard: null
1710
+ }));
1711
+ },
1712
+ [buffer, setInput, setUi]
1713
+ );
1714
+ const handlePromptAddChoice = (0, import_react.useCallback)(
1715
+ (choice) => {
1716
+ if (choice === "back") {
1717
+ setUi((prev) => ({
1718
+ ...prev,
1719
+ activeOverlay: "prompt-list"
1720
+ }));
1721
+ } else {
1722
+ setUi((prev) => ({
1723
+ ...prev,
1724
+ activeOverlay: "prompt-add-wizard",
1725
+ promptAddWizard: {
1726
+ scope: choice,
1727
+ step: "name",
1728
+ name: "",
1729
+ title: "",
1730
+ description: "",
1731
+ content: ""
1732
+ }
1733
+ }));
1734
+ }
1735
+ },
1736
+ [setUi]
1737
+ );
1738
+ const handlePromptAddComplete = (0, import_react.useCallback)(
1739
+ async (data) => {
1740
+ const scope = ui.promptAddWizard?.scope || "agent";
1741
+ setUi((prev) => ({
1742
+ ...prev,
1743
+ activeOverlay: "none",
1744
+ promptAddWizard: null
1745
+ }));
1746
+ buffer.setText("");
1747
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1748
+ setMessages((prev) => [
1749
+ ...prev,
1750
+ {
1751
+ id: (0, import_idGenerator.generateMessageId)("system"),
1752
+ role: "system",
1753
+ content: `\u{1F4DD} Creating ${scope === "shared" ? "shared" : "agent"} prompt "${data.name}"...`,
1754
+ timestamp: /* @__PURE__ */ new Date()
1755
+ }
1756
+ ]);
1757
+ try {
1758
+ const { mkdir, writeFile } = await import("fs/promises");
1759
+ const { dirname, join } = await import("path");
1760
+ const SAFE_NAME_PATTERN = /^[a-z0-9][a-z0-9-_]*$/i;
1761
+ if (!SAFE_NAME_PATTERN.test(data.name)) {
1762
+ throw new Error(
1763
+ `Invalid prompt name "${data.name}". Names must start with a letter or number and contain only letters, numbers, hyphens, and underscores.`
1764
+ );
1765
+ }
1766
+ const frontmatterLines = [
1767
+ "---",
1768
+ `id: ${data.name}`,
1769
+ data.title ? `title: "${data.title}"` : null,
1770
+ data.description ? `description: "${data.description}"` : null,
1771
+ data.argumentHint ? `argument-hint: ${data.argumentHint}` : null,
1772
+ "---"
1773
+ ].filter(Boolean);
1774
+ const fileContent = `${frontmatterLines.join("\n")}
1775
+
1776
+ ${data.content}
1777
+ `;
1778
+ let filePath;
1779
+ if (scope === "shared") {
1780
+ const {
1781
+ getExecutionContext,
1782
+ findDextoSourceRoot,
1783
+ findDextoProjectRoot,
1784
+ getDextoGlobalPath
1785
+ } = await import("@dexto/agent-management");
1786
+ const context = getExecutionContext();
1787
+ let commandsDir;
1788
+ if (context === "dexto-source") {
1789
+ const isDevMode = process.env.DEXTO_DEV_MODE === "true";
1790
+ if (isDevMode) {
1791
+ const sourceRoot = findDextoSourceRoot();
1792
+ commandsDir = sourceRoot ? join(sourceRoot, "commands") : getDextoGlobalPath("commands");
1793
+ } else {
1794
+ commandsDir = getDextoGlobalPath("commands");
1795
+ }
1796
+ } else if (context === "dexto-project") {
1797
+ const projectRoot = findDextoProjectRoot();
1798
+ commandsDir = projectRoot ? join(projectRoot, "commands") : getDextoGlobalPath("commands");
1799
+ } else {
1800
+ commandsDir = getDextoGlobalPath("commands");
1801
+ }
1802
+ filePath = join(commandsDir, `${data.name}.md`);
1803
+ await mkdir(commandsDir, { recursive: true });
1804
+ await writeFile(filePath, fileContent, "utf-8");
1805
+ const { reloadAgentConfigFromFile, enrichAgentConfig } = await import("@dexto/agent-management");
1806
+ const agentPath = getConfigFilePathOrWarn(
1807
+ "refresh prompts after creating shared prompt"
1808
+ );
1809
+ if (!agentPath) {
1810
+ return;
1811
+ }
1812
+ const newConfig = await reloadAgentConfigFromFile(agentPath);
1813
+ const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1814
+ await agent.refreshPrompts(enrichedConfig.prompts);
1815
+ } else {
1816
+ const agentPath = getConfigFilePathOrWarn(
1817
+ "create prompt in agent prompts directory"
1818
+ );
1819
+ if (!agentPath) {
1820
+ return;
1821
+ }
1822
+ const agentDir = dirname(agentPath);
1823
+ const promptsDir = join(agentDir, "prompts");
1824
+ filePath = join(promptsDir, `${data.name}.md`);
1825
+ await mkdir(promptsDir, { recursive: true });
1826
+ await writeFile(filePath, fileContent, "utf-8");
1827
+ const {
1828
+ addPromptToAgentConfig,
1829
+ reloadAgentConfigFromFile,
1830
+ enrichAgentConfig
1831
+ } = await import("@dexto/agent-management");
1832
+ await addPromptToAgentConfig(agentPath, {
1833
+ type: "file",
1834
+ file: `\${{dexto.agent_dir}}/prompts/${data.name}.md`
1835
+ });
1836
+ const newConfig = await reloadAgentConfigFromFile(agentPath);
1837
+ const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1838
+ await agent.refreshPrompts(enrichedConfig.prompts);
1839
+ }
1840
+ setMessages((prev) => [
1841
+ ...prev,
1842
+ {
1843
+ id: (0, import_idGenerator.generateMessageId)("system"),
1844
+ role: "system",
1845
+ content: `\u2705 Created prompt "${data.name}"
1846
+ \u{1F4C4} File: ${filePath}
1847
+
1848
+ Use /${data.name} to run it.`,
1849
+ timestamp: /* @__PURE__ */ new Date()
1850
+ }
1851
+ ]);
1852
+ } catch (error) {
1853
+ setMessages((prev) => [
1854
+ ...prev,
1855
+ {
1856
+ id: (0, import_idGenerator.generateMessageId)("error"),
1857
+ role: "system",
1858
+ content: `Failed to create prompt: ${error instanceof Error ? error.message : String(error)}`,
1859
+ timestamp: /* @__PURE__ */ new Date()
1860
+ }
1861
+ ]);
1862
+ }
1863
+ },
1864
+ [
1865
+ ui.promptAddWizard?.scope,
1866
+ setUi,
1867
+ setInput,
1868
+ setMessages,
1869
+ buffer,
1870
+ agent,
1871
+ getConfigFilePathOrWarn
1872
+ ]
1873
+ );
1874
+ const handlePromptDelete = (0, import_react.useCallback)(
1875
+ async (deletable) => {
1876
+ const displayName = deletable.prompt.displayName || deletable.prompt.name;
1877
+ setMessages((prev) => [
1878
+ ...prev,
1879
+ {
1880
+ id: (0, import_idGenerator.generateMessageId)("system"),
1881
+ role: "system",
1882
+ content: `\u{1F5D1}\uFE0F Deleting prompt "${displayName}"...`,
1883
+ timestamp: /* @__PURE__ */ new Date()
1884
+ }
1885
+ ]);
1886
+ try {
1887
+ const { deletePromptByMetadata, reloadAgentConfigFromFile, enrichAgentConfig } = await import("@dexto/agent-management");
1888
+ const agentPath = getConfigFilePathOrWarn("delete prompt");
1889
+ if (!agentPath) {
1890
+ return;
1891
+ }
1892
+ const promptMetadata = deletable.prompt.metadata;
1893
+ const result = await deletePromptByMetadata(
1894
+ agentPath,
1895
+ {
1896
+ name: deletable.prompt.name,
1897
+ metadata: {
1898
+ filePath: deletable.filePath,
1899
+ originalId: promptMetadata?.originalId
1900
+ }
1901
+ },
1902
+ { deleteFile: true }
1903
+ );
1904
+ if (!result.success) {
1905
+ throw new Error(result.error || "Failed to delete prompt");
1906
+ }
1907
+ const newConfig = await reloadAgentConfigFromFile(agentPath);
1908
+ const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1909
+ await agent.refreshPrompts(enrichedConfig.prompts);
1910
+ setMessages((prev) => [
1911
+ ...prev,
1912
+ {
1913
+ id: (0, import_idGenerator.generateMessageId)("system"),
1914
+ role: "system",
1915
+ content: `\u2705 Deleted prompt "${displayName}"`,
1916
+ timestamp: /* @__PURE__ */ new Date()
1917
+ }
1918
+ ]);
1919
+ setUi((prev) => ({
1920
+ ...prev,
1921
+ activeOverlay: "prompt-list"
1922
+ }));
1923
+ promptListRef.current?.refresh();
1924
+ } catch (error) {
1925
+ setMessages((prev) => [
1926
+ ...prev,
1927
+ {
1928
+ id: (0, import_idGenerator.generateMessageId)("error"),
1929
+ role: "system",
1930
+ content: `Failed to delete prompt: ${error instanceof Error ? error.message : String(error)}`,
1931
+ timestamp: /* @__PURE__ */ new Date()
1932
+ }
1933
+ ]);
1934
+ setUi((prev) => ({
1935
+ ...prev,
1936
+ activeOverlay: "prompt-list"
1937
+ }));
1938
+ }
1939
+ },
1940
+ [setUi, setMessages, agent, getConfigFilePathOrWarn]
1941
+ );
1942
+ const handlePromptAddWizardClose = (0, import_react.useCallback)(() => {
1943
+ setUi((prev) => ({
1944
+ ...prev,
1945
+ activeOverlay: "prompt-add-choice",
1946
+ promptAddWizard: null
1947
+ }));
1948
+ }, [setUi]);
1949
+ const handlePromptDeleteClose = (0, import_react.useCallback)(() => {
1950
+ setUi((prev) => ({
1951
+ ...prev,
1952
+ activeOverlay: "prompt-list"
1953
+ }));
1954
+ promptListRef.current?.refresh();
1955
+ }, [setUi]);
1956
+ const handlePromptAddChoiceClose = (0, import_react.useCallback)(() => {
1957
+ setUi((prev) => ({
1958
+ ...prev,
1959
+ activeOverlay: "prompt-list"
1960
+ }));
1961
+ }, [setUi]);
1962
+ const [currentSessionTitle, setCurrentSessionTitle] = (0, import_react.useState)(
1963
+ void 0
1964
+ );
1965
+ import_react.default.useEffect(() => {
1966
+ if (ui.activeOverlay === "session-rename" && session.id) {
1967
+ void agent.getSessionTitle(session.id).then(setCurrentSessionTitle);
1968
+ }
1969
+ }, [ui.activeOverlay, session.id, agent]);
1970
+ const handleSessionRename = (0, import_react.useCallback)(
1971
+ async (newTitle) => {
1972
+ if (!session.id) return;
1973
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
1974
+ buffer.setText("");
1975
+ setInput((prev) => ({ ...prev, historyIndex: -1 }));
1976
+ try {
1977
+ await agent.setSessionTitle(session.id, newTitle);
1978
+ setMessages((prev) => [
1979
+ ...prev,
1980
+ {
1981
+ id: (0, import_idGenerator.generateMessageId)("system"),
1982
+ role: "system",
1983
+ content: `\u2705 Session renamed to: ${newTitle}`,
1984
+ timestamp: /* @__PURE__ */ new Date()
1985
+ }
1986
+ ]);
1987
+ } catch (error) {
1988
+ setMessages((prev) => [
1989
+ ...prev,
1990
+ {
1991
+ id: (0, import_idGenerator.generateMessageId)("error"),
1992
+ role: "system",
1993
+ content: `Failed to rename session: ${error instanceof Error ? error.message : String(error)}`,
1994
+ timestamp: /* @__PURE__ */ new Date()
1995
+ }
1996
+ ]);
1997
+ }
1998
+ },
1999
+ [session.id, setUi, setInput, setMessages, agent, buffer]
2000
+ );
2001
+ const handleSessionRenameClose = (0, import_react.useCallback)(() => {
2002
+ setUi((prev) => ({ ...prev, activeOverlay: "none" }));
2003
+ }, [setUi]);
2004
+ const hideCliChrome = (0, import_overlayPresentation.shouldHideCliChrome)(ui.activeOverlay, approval);
2005
+ const overlayContent = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
2006
+ approval && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2007
+ import_ApprovalPrompt.ApprovalPrompt,
2008
+ {
2009
+ ref: approvalRef,
2010
+ approval,
2011
+ onApprove: handleApprove,
2012
+ onDeny: handleDeny,
2013
+ onCancel: handleCancelApproval
2014
+ }
2015
+ ),
2016
+ ui.activeOverlay === "slash-autocomplete" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2017
+ import_SlashCommandAutocomplete.SlashCommandAutocomplete,
2018
+ {
2019
+ ref: slashAutocompleteRef,
2020
+ isVisible: true,
2021
+ searchQuery: input.value,
2022
+ onSelectPrompt: handlePromptSelect,
2023
+ onSelectSystemCommand: handleSystemCommandSelect,
2024
+ onLoadIntoInput: handleLoadIntoInput,
2025
+ onSubmitRaw: onSubmitPromptCommand,
2026
+ onClose: handleClose,
2027
+ agent
2028
+ }
2029
+ ) }),
2030
+ ui.activeOverlay === "resource-autocomplete" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2031
+ import_ResourceAutocomplete.default,
2032
+ {
2033
+ ref: resourceAutocompleteRef,
2034
+ isVisible: true,
2035
+ searchQuery: input.value,
2036
+ onSelectResource: handleResourceSelect,
2037
+ onLoadIntoInput: handleLoadIntoInput,
2038
+ onClose: handleClose,
2039
+ agent
2040
+ }
2041
+ ) }),
2042
+ ui.activeOverlay === "model-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2043
+ import_ModelSelectorRefactored.default,
2044
+ {
2045
+ ref: modelSelectorRef,
2046
+ isVisible: true,
2047
+ onSelectModel: handleModelSelect,
2048
+ onSetDefaultModel: handleSetDefaultModel,
2049
+ onClose: handleClose,
2050
+ onAddCustomModel: handleAddCustomModel,
2051
+ onEditCustomModel: handleEditCustomModel,
2052
+ agent
2053
+ }
2054
+ ) }),
2055
+ ui.activeOverlay === "reasoning" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2056
+ import_ReasoningOverlay.ReasoningOverlay,
2057
+ {
2058
+ ref: reasoningOverlayRef,
2059
+ isVisible: true,
2060
+ agent,
2061
+ sessionId: session.id,
2062
+ showReasoning: ui.showReasoning,
2063
+ onToggleShowReasoning: handleToggleShowReasoning,
2064
+ onSetBudgetTokens: handleSetReasoningBudgetTokens,
2065
+ onNotify: handleReasoningNotify,
2066
+ onClose: handleClose
2067
+ }
2068
+ ) }),
2069
+ ui.activeOverlay === "session-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2070
+ import_SessionSelectorRefactored.default,
2071
+ {
2072
+ ref: sessionSelectorRef,
2073
+ isVisible: true,
2074
+ onSelectSession: handleSessionSelect,
2075
+ onClose: handleClose,
2076
+ agent,
2077
+ currentSessionId: session.id || void 0
2078
+ }
2079
+ ) }),
2080
+ ui.activeOverlay === "log-level-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2081
+ import_LogLevelSelector.default,
2082
+ {
2083
+ ref: logLevelSelectorRef,
2084
+ isVisible: true,
2085
+ onSelect: handleLogLevelSelect,
2086
+ onClose: handleClose,
2087
+ agent,
2088
+ sessionId: session.id
2089
+ }
2090
+ ) }),
2091
+ ui.activeOverlay === "stream-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2092
+ import_StreamSelector.default,
2093
+ {
2094
+ ref: streamSelectorRef,
2095
+ isVisible: true,
2096
+ onSelect: handleStreamSelect,
2097
+ onClose: handleClose
2098
+ }
2099
+ ) }),
2100
+ ui.activeOverlay === "sounds-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2101
+ import_SoundsSelector.default,
2102
+ {
2103
+ ref: soundsSelectorRef,
2104
+ isVisible: true,
2105
+ onClose: handleClose
2106
+ }
2107
+ ) }),
2108
+ ui.activeOverlay === "tool-browser" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2109
+ import_ToolBrowser.default,
2110
+ {
2111
+ ref: toolBrowserRef,
2112
+ isVisible: true,
2113
+ onClose: handleClose,
2114
+ agent,
2115
+ sessionId: session.id
2116
+ }
2117
+ ) }),
2118
+ ui.activeOverlay === "command-output" && ui.commandOutput && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2119
+ import_CommandOutputOverlay.CommandOutputOverlay,
2120
+ {
2121
+ ref: commandOutputRef,
2122
+ isVisible: true,
2123
+ title: ui.commandOutput.title,
2124
+ content: ui.commandOutput.content,
2125
+ onClose: handleClose
2126
+ }
2127
+ ) }),
2128
+ ui.activeOverlay === "mcp-server-list" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2129
+ import_McpServerList.default,
2130
+ {
2131
+ ref: mcpServerListRef,
2132
+ isVisible: true,
2133
+ onAction: handleMcpServerListAction,
2134
+ onClose: handleClose,
2135
+ agent
2136
+ }
2137
+ ) }),
2138
+ ui.activeOverlay === "mcp-server-actions" && ui.selectedMcpServer && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2139
+ import_McpServerActions.default,
2140
+ {
2141
+ ref: mcpServerActionsRef,
2142
+ isVisible: true,
2143
+ server: ui.selectedMcpServer,
2144
+ onAction: handleMcpServerAction,
2145
+ onClose: handleClose
2146
+ }
2147
+ ) }),
2148
+ ui.activeOverlay === "mcp-add-choice" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2149
+ import_McpAddChoice.default,
2150
+ {
2151
+ ref: mcpAddChoiceRef,
2152
+ isVisible: true,
2153
+ onSelect: handleMcpAddChoice,
2154
+ onClose: handleClose
2155
+ }
2156
+ ) }),
2157
+ ui.activeOverlay === "mcp-add-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2158
+ import_McpAddSelector.default,
2159
+ {
2160
+ ref: mcpAddSelectorRef,
2161
+ isVisible: true,
2162
+ onSelect: handleMcpAddSelect,
2163
+ onClose: handleClose
2164
+ }
2165
+ ) }),
2166
+ ui.activeOverlay === "mcp-custom-type-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2167
+ import_McpCustomTypeSelector.default,
2168
+ {
2169
+ ref: mcpCustomTypeSelectorRef,
2170
+ isVisible: true,
2171
+ onSelect: handleMcpCustomTypeSelect,
2172
+ onClose: handleClose
2173
+ }
2174
+ ) }),
2175
+ ui.activeOverlay === "mcp-custom-wizard" && ui.mcpWizardServerType && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2176
+ import_McpCustomWizard.default,
2177
+ {
2178
+ ref: mcpCustomWizardRef,
2179
+ isVisible: true,
2180
+ serverType: ui.mcpWizardServerType,
2181
+ onComplete: handleMcpCustomWizardComplete,
2182
+ onClose: handleClose
2183
+ }
2184
+ ),
2185
+ ui.activeOverlay === "custom-model-wizard" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2186
+ import_CustomModelWizard.default,
2187
+ {
2188
+ ref: customModelWizardRef,
2189
+ isVisible: true,
2190
+ onComplete: handleCustomModelComplete,
2191
+ onClose: () => {
2192
+ setEditingModel(null);
2193
+ handleClose();
2194
+ },
2195
+ initialModel: editingModel
2196
+ }
2197
+ ),
2198
+ ui.activeOverlay === "plugin-manager" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2199
+ import_PluginManager.default,
2200
+ {
2201
+ ref: pluginManagerRef,
2202
+ isVisible: true,
2203
+ onAction: handlePluginManagerAction,
2204
+ onClose: handleClose
2205
+ }
2206
+ ) }),
2207
+ ui.activeOverlay === "plugin-list" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2208
+ import_PluginList.default,
2209
+ {
2210
+ ref: pluginListRef,
2211
+ isVisible: true,
2212
+ onPluginSelect: handlePluginSelect,
2213
+ onClose: handleClose
2214
+ }
2215
+ ) }),
2216
+ ui.activeOverlay === "plugin-actions" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2217
+ import_PluginActions.default,
2218
+ {
2219
+ ref: pluginActionsRef,
2220
+ isVisible: true,
2221
+ plugin: selectedPlugin,
2222
+ onAction: handlePluginAction,
2223
+ onClose: () => {
2224
+ setSelectedPlugin(null);
2225
+ setUi((prev) => ({
2226
+ ...prev,
2227
+ activeOverlay: "plugin-list"
2228
+ }));
2229
+ }
2230
+ }
2231
+ ) }),
2232
+ ui.activeOverlay === "marketplace-browser" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2233
+ import_MarketplaceBrowser.default,
2234
+ {
2235
+ ref: marketplaceBrowserRef,
2236
+ isVisible: true,
2237
+ onAction: handleMarketplaceBrowserAction,
2238
+ onClose: handleClose
2239
+ }
2240
+ ) }),
2241
+ ui.activeOverlay === "marketplace-add" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2242
+ import_MarketplaceAddPrompt.default,
2243
+ {
2244
+ ref: marketplaceAddPromptRef,
2245
+ isVisible: true,
2246
+ onComplete: handleMarketplaceAddComplete,
2247
+ onClose: () => setUi((prev) => ({ ...prev, activeOverlay: "marketplace-browser" }))
2248
+ }
2249
+ ) }),
2250
+ ui.activeOverlay === "session-subcommand-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2251
+ import_SessionSubcommandSelector.default,
2252
+ {
2253
+ ref: sessionSubcommandSelectorRef,
2254
+ isVisible: true,
2255
+ onSelect: handleSessionSubcommandSelect,
2256
+ onClose: handleClose
2257
+ }
2258
+ ) }),
2259
+ ui.activeOverlay === "login" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2260
+ import_LoginOverlay.default,
2261
+ {
2262
+ ref: loginOverlayRef,
2263
+ isVisible: true,
2264
+ onDone: handleLoginDone
2265
+ }
2266
+ ) }),
2267
+ ui.activeOverlay === "logout" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2268
+ import_LogoutOverlay.default,
2269
+ {
2270
+ ref: logoutOverlayRef,
2271
+ isVisible: true,
2272
+ onDone: handleLogoutDone
2273
+ }
2274
+ ) }),
2275
+ ui.activeOverlay === "api-key-input" && ui.pendingModelSwitch && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2276
+ import_ApiKeyInput.default,
2277
+ {
2278
+ ref: apiKeyInputRef,
2279
+ isVisible: true,
2280
+ provider: ui.pendingModelSwitch.provider,
2281
+ onSaved: handleApiKeySaved,
2282
+ onClose: handleApiKeyClose
2283
+ }
2284
+ ),
2285
+ ui.activeOverlay === "search" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2286
+ import_SearchOverlay.default,
2287
+ {
2288
+ ref: searchOverlayRef,
2289
+ isVisible: true,
2290
+ agent,
2291
+ onClose: handleClose,
2292
+ onSelectResult: handleSearchResultSelect
2293
+ }
2294
+ ),
2295
+ ui.activeOverlay === "prompt-list" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2296
+ import_PromptList.default,
2297
+ {
2298
+ ref: promptListRef,
2299
+ isVisible: true,
2300
+ onAction: handlePromptListAction,
2301
+ onLoadIntoInput: handlePromptLoadIntoInput,
2302
+ onClose: handleClose,
2303
+ agent
2304
+ }
2305
+ ) }),
2306
+ ui.activeOverlay === "prompt-add-choice" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2307
+ import_PromptAddChoice.default,
2308
+ {
2309
+ ref: promptAddChoiceRef,
2310
+ isVisible: true,
2311
+ onSelect: handlePromptAddChoice,
2312
+ onClose: handlePromptAddChoiceClose
2313
+ }
2314
+ ) }),
2315
+ ui.activeOverlay === "prompt-add-wizard" && ui.promptAddWizard && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2316
+ import_PromptAddWizard.default,
2317
+ {
2318
+ ref: promptAddWizardRef,
2319
+ isVisible: true,
2320
+ scope: ui.promptAddWizard.scope,
2321
+ onComplete: handlePromptAddComplete,
2322
+ onClose: handlePromptAddWizardClose
2323
+ }
2324
+ ),
2325
+ ui.activeOverlay === "prompt-delete-selector" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2326
+ import_PromptDeleteSelector.default,
2327
+ {
2328
+ ref: promptDeleteSelectorRef,
2329
+ isVisible: true,
2330
+ onDelete: handlePromptDelete,
2331
+ onClose: handlePromptDeleteClose,
2332
+ agent
2333
+ }
2334
+ ) }),
2335
+ ui.activeOverlay === "session-rename" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2336
+ import_SessionRenameOverlay.default,
2337
+ {
2338
+ ref: sessionRenameRef,
2339
+ isVisible: true,
2340
+ currentTitle: currentSessionTitle,
2341
+ onRename: handleSessionRename,
2342
+ onClose: handleSessionRenameClose
2343
+ }
2344
+ ),
2345
+ ui.activeOverlay === "context-stats" && session.id && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ink.Box, { marginTop: 1, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2346
+ import_ContextStatsOverlay.default,
2347
+ {
2348
+ ref: contextStatsRef,
2349
+ isVisible: true,
2350
+ onClose: handleClose,
2351
+ agent,
2352
+ sessionId: session.id ?? ""
2353
+ }
2354
+ ) }),
2355
+ ui.activeOverlay === "export-wizard" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
2356
+ import_ExportWizard.default,
2357
+ {
2358
+ ref: exportWizardRef,
2359
+ isVisible: true,
2360
+ agent,
2361
+ sessionId: session.id,
2362
+ onClose: handleClose
2363
+ }
2364
+ )
2365
+ ] });
2366
+ return hideCliChrome ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FocusOverlayFrame.FocusOverlayFrame, { children: overlayContent }) : overlayContent;
2367
+ }
2368
+ );
2369
+ // Annotate the CommonJS export names for ESM import in node:
2370
+ 0 && (module.exports = {
2371
+ OverlayContainer
2372
+ });