dexto 1.6.1 → 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 (552) hide show
  1. package/dist/analytics/wrapper.js +1 -1
  2. package/dist/cli/auth/dexto-api-key.d.ts +34 -0
  3. package/dist/cli/auth/dexto-api-key.d.ts.map +1 -0
  4. package/dist/cli/auth/dexto-api-key.js +161 -0
  5. package/dist/cli/auth/index.d.ts +2 -1
  6. package/dist/cli/auth/index.d.ts.map +1 -1
  7. package/dist/cli/auth/index.js +2 -1
  8. package/dist/cli/auth/oauth.d.ts +10 -0
  9. package/dist/cli/auth/oauth.d.ts.map +1 -1
  10. package/dist/cli/auth/oauth.js +113 -36
  11. package/dist/cli/auth/service.d.ts +1 -0
  12. package/dist/cli/auth/service.d.ts.map +1 -1
  13. package/dist/cli/auth/service.js +1 -0
  14. package/dist/cli/commands/auth/login.d.ts.map +1 -1
  15. package/dist/cli/commands/auth/login.js +40 -105
  16. package/dist/cli/commands/setup.d.ts.map +1 -1
  17. package/dist/cli/commands/setup.js +157 -120
  18. package/dist/cli/utils/config-validation.js +3 -3
  19. package/dist/cli/utils/options.d.ts.map +1 -1
  20. package/dist/cli/utils/options.js +6 -0
  21. package/dist/index-main.js +36 -2
  22. package/dist/webui/assets/index-BPlk2Wbt.css +1 -0
  23. package/dist/webui/assets/index-BZvrpxyh.js +2059 -0
  24. package/dist/webui/index.html +2 -2
  25. package/package.json +12 -22
  26. package/dist/cli/assets/sounds/SOURCES.md +0 -35
  27. package/dist/cli/assets/sounds/boot.wav +0 -0
  28. package/dist/cli/assets/sounds/chime.wav +0 -0
  29. package/dist/cli/assets/sounds/coin.wav +0 -0
  30. package/dist/cli/assets/sounds/confirm.wav +0 -0
  31. package/dist/cli/assets/sounds/levelup.wav +0 -0
  32. package/dist/cli/assets/sounds/ping.wav +0 -0
  33. package/dist/cli/assets/sounds/powerup.wav +0 -0
  34. package/dist/cli/assets/sounds/startup.wav +0 -0
  35. package/dist/cli/assets/sounds/success.wav +0 -0
  36. package/dist/cli/assets/sounds/treasure.wav +0 -0
  37. package/dist/cli/assets/sounds/win.wav +0 -0
  38. package/dist/cli/commands/interactive-commands/auth/index.d.ts +0 -12
  39. package/dist/cli/commands/interactive-commands/auth/index.d.ts.map +0 -1
  40. package/dist/cli/commands/interactive-commands/auth/index.js +0 -20
  41. package/dist/cli/commands/interactive-commands/command-parser.d.ts +0 -56
  42. package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +0 -1
  43. package/dist/cli/commands/interactive-commands/command-parser.js +0 -173
  44. package/dist/cli/commands/interactive-commands/commands.d.ts +0 -52
  45. package/dist/cli/commands/interactive-commands/commands.d.ts.map +0 -1
  46. package/dist/cli/commands/interactive-commands/commands.js +0 -142
  47. package/dist/cli/commands/interactive-commands/documentation-commands.d.ts +0 -15
  48. package/dist/cli/commands/interactive-commands/documentation-commands.d.ts.map +0 -1
  49. package/dist/cli/commands/interactive-commands/documentation-commands.js +0 -39
  50. package/dist/cli/commands/interactive-commands/exit-handler.d.ts +0 -12
  51. package/dist/cli/commands/interactive-commands/exit-handler.d.ts.map +0 -1
  52. package/dist/cli/commands/interactive-commands/exit-handler.js +0 -20
  53. package/dist/cli/commands/interactive-commands/exit-stats.d.ts +0 -24
  54. package/dist/cli/commands/interactive-commands/exit-stats.d.ts.map +0 -1
  55. package/dist/cli/commands/interactive-commands/exit-stats.js +0 -17
  56. package/dist/cli/commands/interactive-commands/export/index.d.ts +0 -13
  57. package/dist/cli/commands/interactive-commands/export/index.d.ts.map +0 -1
  58. package/dist/cli/commands/interactive-commands/export/index.js +0 -21
  59. package/dist/cli/commands/interactive-commands/general-commands.d.ts +0 -22
  60. package/dist/cli/commands/interactive-commands/general-commands.d.ts.map +0 -1
  61. package/dist/cli/commands/interactive-commands/general-commands.js +0 -508
  62. package/dist/cli/commands/interactive-commands/mcp/index.d.ts +0 -13
  63. package/dist/cli/commands/interactive-commands/mcp/index.d.ts.map +0 -1
  64. package/dist/cli/commands/interactive-commands/mcp/index.js +0 -18
  65. package/dist/cli/commands/interactive-commands/model/index.d.ts +0 -13
  66. package/dist/cli/commands/interactive-commands/model/index.d.ts.map +0 -1
  67. package/dist/cli/commands/interactive-commands/model/index.js +0 -19
  68. package/dist/cli/commands/interactive-commands/plugin/index.d.ts +0 -13
  69. package/dist/cli/commands/interactive-commands/plugin/index.d.ts.map +0 -1
  70. package/dist/cli/commands/interactive-commands/plugin/index.js +0 -18
  71. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts +0 -25
  72. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +0 -1
  73. package/dist/cli/commands/interactive-commands/prompt-commands.js +0 -284
  74. package/dist/cli/commands/interactive-commands/session/index.d.ts +0 -16
  75. package/dist/cli/commands/interactive-commands/session/index.d.ts.map +0 -1
  76. package/dist/cli/commands/interactive-commands/session/index.js +0 -15
  77. package/dist/cli/commands/interactive-commands/session/session-commands.d.ts +0 -32
  78. package/dist/cli/commands/interactive-commands/session/session-commands.d.ts.map +0 -1
  79. package/dist/cli/commands/interactive-commands/session/session-commands.js +0 -65
  80. package/dist/cli/commands/interactive-commands/system/index.d.ts +0 -13
  81. package/dist/cli/commands/interactive-commands/system/index.d.ts.map +0 -1
  82. package/dist/cli/commands/interactive-commands/system/index.js +0 -12
  83. package/dist/cli/commands/interactive-commands/system/system-commands.d.ts +0 -6
  84. package/dist/cli/commands/interactive-commands/system/system-commands.d.ts.map +0 -1
  85. package/dist/cli/commands/interactive-commands/system/system-commands.js +0 -188
  86. package/dist/cli/commands/interactive-commands/tool-commands.d.ts +0 -15
  87. package/dist/cli/commands/interactive-commands/tool-commands.d.ts.map +0 -1
  88. package/dist/cli/commands/interactive-commands/tool-commands.js +0 -24
  89. package/dist/cli/commands/interactive-commands/utils/arg-parser.d.ts +0 -57
  90. package/dist/cli/commands/interactive-commands/utils/arg-parser.d.ts.map +0 -1
  91. package/dist/cli/commands/interactive-commands/utils/arg-parser.js +0 -81
  92. package/dist/cli/commands/interactive-commands/utils/command-output.d.ts +0 -40
  93. package/dist/cli/commands/interactive-commands/utils/command-output.d.ts.map +0 -1
  94. package/dist/cli/commands/interactive-commands/utils/command-output.js +0 -56
  95. package/dist/cli/commands/interactive-commands/utils/format-output.d.ts +0 -14
  96. package/dist/cli/commands/interactive-commands/utils/format-output.d.ts.map +0 -1
  97. package/dist/cli/commands/interactive-commands/utils/format-output.js +0 -18
  98. package/dist/cli/ink-cli/InkCLIRefactored.d.ts +0 -52
  99. package/dist/cli/ink-cli/InkCLIRefactored.d.ts.map +0 -1
  100. package/dist/cli/ink-cli/InkCLIRefactored.js +0 -231
  101. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +0 -44
  102. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +0 -1
  103. package/dist/cli/ink-cli/components/ApprovalPrompt.js +0 -323
  104. package/dist/cli/ink-cli/components/BackgroundTasksPanel.d.ts +0 -18
  105. package/dist/cli/ink-cli/components/BackgroundTasksPanel.d.ts.map +0 -1
  106. package/dist/cli/ink-cli/components/BackgroundTasksPanel.js +0 -48
  107. package/dist/cli/ink-cli/components/CustomInput.d.ts +0 -17
  108. package/dist/cli/ink-cli/components/CustomInput.d.ts.map +0 -1
  109. package/dist/cli/ink-cli/components/CustomInput.js +0 -51
  110. package/dist/cli/ink-cli/components/CustomTextInput.d.ts +0 -16
  111. package/dist/cli/ink-cli/components/CustomTextInput.d.ts.map +0 -1
  112. package/dist/cli/ink-cli/components/CustomTextInput.js +0 -36
  113. package/dist/cli/ink-cli/components/EditableMultiLineInput.d.ts +0 -19
  114. package/dist/cli/ink-cli/components/EditableMultiLineInput.d.ts.map +0 -1
  115. package/dist/cli/ink-cli/components/EditableMultiLineInput.js +0 -120
  116. package/dist/cli/ink-cli/components/ElicitationForm.d.ts +0 -24
  117. package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +0 -1
  118. package/dist/cli/ink-cli/components/ElicitationForm.js +0 -592
  119. package/dist/cli/ink-cli/components/ErrorBoundary.d.ts +0 -20
  120. package/dist/cli/ink-cli/components/ErrorBoundary.d.ts.map +0 -1
  121. package/dist/cli/ink-cli/components/ErrorBoundary.js +0 -29
  122. package/dist/cli/ink-cli/components/Footer.d.ts +0 -22
  123. package/dist/cli/ink-cli/components/Footer.d.ts.map +0 -1
  124. package/dist/cli/ink-cli/components/Footer.js +0 -76
  125. package/dist/cli/ink-cli/components/HistorySearchBar.d.ts +0 -17
  126. package/dist/cli/ink-cli/components/HistorySearchBar.d.ts.map +0 -1
  127. package/dist/cli/ink-cli/components/HistorySearchBar.js +0 -8
  128. package/dist/cli/ink-cli/components/MultiLineInput.d.ts +0 -12
  129. package/dist/cli/ink-cli/components/MultiLineInput.d.ts.map +0 -1
  130. package/dist/cli/ink-cli/components/MultiLineInput.js +0 -27
  131. package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts +0 -26
  132. package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +0 -1
  133. package/dist/cli/ink-cli/components/ResourceAutocomplete.js +0 -385
  134. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.d.ts +0 -28
  135. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.d.ts.map +0 -1
  136. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +0 -412
  137. package/dist/cli/ink-cli/components/StatusBar.d.ts +0 -41
  138. package/dist/cli/ink-cli/components/StatusBar.d.ts.map +0 -1
  139. package/dist/cli/ink-cli/components/StatusBar.js +0 -116
  140. package/dist/cli/ink-cli/components/TextBufferInput.d.ts +0 -52
  141. package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +0 -1
  142. package/dist/cli/ink-cli/components/TextBufferInput.js +0 -490
  143. package/dist/cli/ink-cli/components/TodoPanel.d.ts +0 -26
  144. package/dist/cli/ink-cli/components/TodoPanel.d.ts.map +0 -1
  145. package/dist/cli/ink-cli/components/TodoPanel.js +0 -62
  146. package/dist/cli/ink-cli/components/base/BaseAutocomplete.d.ts +0 -29
  147. package/dist/cli/ink-cli/components/base/BaseAutocomplete.d.ts.map +0 -1
  148. package/dist/cli/ink-cli/components/base/BaseAutocomplete.js +0 -98
  149. package/dist/cli/ink-cli/components/base/BaseSelector.d.ts +0 -37
  150. package/dist/cli/ink-cli/components/base/BaseSelector.d.ts.map +0 -1
  151. package/dist/cli/ink-cli/components/base/BaseSelector.js +0 -128
  152. package/dist/cli/ink-cli/components/base/index.d.ts +0 -6
  153. package/dist/cli/ink-cli/components/base/index.d.ts.map +0 -1
  154. package/dist/cli/ink-cli/components/base/index.js +0 -5
  155. package/dist/cli/ink-cli/components/chat/ChatView.d.ts +0 -19
  156. package/dist/cli/ink-cli/components/chat/ChatView.d.ts.map +0 -1
  157. package/dist/cli/ink-cli/components/chat/ChatView.js +0 -11
  158. package/dist/cli/ink-cli/components/chat/Footer.d.ts +0 -9
  159. package/dist/cli/ink-cli/components/chat/Footer.d.ts.map +0 -1
  160. package/dist/cli/ink-cli/components/chat/Footer.js +0 -8
  161. package/dist/cli/ink-cli/components/chat/Header.d.ts +0 -18
  162. package/dist/cli/ink-cli/components/chat/Header.d.ts.map +0 -1
  163. package/dist/cli/ink-cli/components/chat/Header.js +0 -16
  164. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts +0 -21
  165. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +0 -1
  166. package/dist/cli/ink-cli/components/chat/MessageItem.js +0 -182
  167. package/dist/cli/ink-cli/components/chat/MessageList.d.ts +0 -16
  168. package/dist/cli/ink-cli/components/chat/MessageList.d.ts.map +0 -1
  169. package/dist/cli/ink-cli/components/chat/MessageList.js +0 -20
  170. package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.d.ts +0 -16
  171. package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.d.ts.map +0 -1
  172. package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.js +0 -27
  173. package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts +0 -18
  174. package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts.map +0 -1
  175. package/dist/cli/ink-cli/components/chat/ToolIcon.js +0 -36
  176. package/dist/cli/ink-cli/components/chat/index.d.ts +0 -10
  177. package/dist/cli/ink-cli/components/chat/index.d.ts.map +0 -1
  178. package/dist/cli/ink-cli/components/chat/index.js +0 -9
  179. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.d.ts +0 -10
  180. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.d.ts.map +0 -1
  181. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +0 -6
  182. package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.d.ts +0 -10
  183. package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.d.ts.map +0 -1
  184. package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.js +0 -15
  185. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.d.ts +0 -10
  186. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.d.ts.map +0 -1
  187. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +0 -9
  188. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.d.ts +0 -10
  189. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.d.ts.map +0 -1
  190. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.js +0 -37
  191. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.d.ts +0 -10
  192. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.d.ts.map +0 -1
  193. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.js +0 -9
  194. package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.d.ts +0 -10
  195. package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.d.ts.map +0 -1
  196. package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.js +0 -6
  197. package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.d.ts +0 -10
  198. package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.d.ts.map +0 -1
  199. package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.js +0 -29
  200. package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.d.ts +0 -45
  201. package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.d.ts.map +0 -1
  202. package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.js +0 -38
  203. package/dist/cli/ink-cli/components/chat/styled-boxes/SyspromptBox.d.ts +0 -10
  204. package/dist/cli/ink-cli/components/chat/styled-boxes/SyspromptBox.d.ts.map +0 -1
  205. package/dist/cli/ink-cli/components/chat/styled-boxes/SyspromptBox.js +0 -6
  206. package/dist/cli/ink-cli/components/chat/styled-boxes/index.d.ts +0 -13
  207. package/dist/cli/ink-cli/components/chat/styled-boxes/index.d.ts.map +0 -1
  208. package/dist/cli/ink-cli/components/chat/styled-boxes/index.js +0 -12
  209. package/dist/cli/ink-cli/components/input/InputArea.d.ts +0 -46
  210. package/dist/cli/ink-cli/components/input/InputArea.d.ts.map +0 -1
  211. package/dist/cli/ink-cli/components/input/InputArea.js +0 -6
  212. package/dist/cli/ink-cli/components/input/index.d.ts +0 -5
  213. package/dist/cli/ink-cli/components/input/index.d.ts.map +0 -1
  214. package/dist/cli/ink-cli/components/input/index.js +0 -4
  215. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts +0 -27
  216. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +0 -1
  217. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +0 -182
  218. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts +0 -29
  219. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +0 -1
  220. package/dist/cli/ink-cli/components/modes/StaticCLI.js +0 -114
  221. package/dist/cli/ink-cli/components/modes/index.d.ts +0 -10
  222. package/dist/cli/ink-cli/components/modes/index.d.ts.map +0 -1
  223. package/dist/cli/ink-cli/components/modes/index.js +0 -9
  224. package/dist/cli/ink-cli/components/overlays/ApiKeyInput.d.ts +0 -26
  225. package/dist/cli/ink-cli/components/overlays/ApiKeyInput.d.ts.map +0 -1
  226. package/dist/cli/ink-cli/components/overlays/ApiKeyInput.js +0 -92
  227. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts +0 -13
  228. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts.map +0 -1
  229. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.js +0 -60
  230. package/dist/cli/ink-cli/components/overlays/ContextStatsOverlay.d.ts +0 -26
  231. package/dist/cli/ink-cli/components/overlays/ContextStatsOverlay.d.ts.map +0 -1
  232. package/dist/cli/ink-cli/components/overlays/ContextStatsOverlay.js +0 -241
  233. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts +0 -29
  234. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +0 -1
  235. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +0 -301
  236. package/dist/cli/ink-cli/components/overlays/ExportWizard.d.ts +0 -22
  237. package/dist/cli/ink-cli/components/overlays/ExportWizard.d.ts.map +0 -1
  238. package/dist/cli/ink-cli/components/overlays/ExportWizard.js +0 -308
  239. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts +0 -23
  240. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +0 -1
  241. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +0 -70
  242. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.d.ts +0 -20
  243. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.d.ts.map +0 -1
  244. package/dist/cli/ink-cli/components/overlays/MarketplaceAddPrompt.js +0 -81
  245. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.d.ts +0 -31
  246. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.d.ts.map +0 -1
  247. package/dist/cli/ink-cli/components/overlays/MarketplaceBrowser.js +0 -297
  248. package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts +0 -22
  249. package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts.map +0 -1
  250. package/dist/cli/ink-cli/components/overlays/McpAddChoice.js +0 -59
  251. package/dist/cli/ink-cli/components/overlays/McpAddSelector.d.ts +0 -26
  252. package/dist/cli/ink-cli/components/overlays/McpAddSelector.d.ts.map +0 -1
  253. package/dist/cli/ink-cli/components/overlays/McpAddSelector.js +0 -73
  254. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts +0 -21
  255. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts.map +0 -1
  256. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.js +0 -51
  257. package/dist/cli/ink-cli/components/overlays/McpCustomWizard.d.ts +0 -29
  258. package/dist/cli/ink-cli/components/overlays/McpCustomWizard.d.ts.map +0 -1
  259. package/dist/cli/ink-cli/components/overlays/McpCustomWizard.js +0 -215
  260. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts +0 -22
  261. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +0 -1
  262. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +0 -80
  263. package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts +0 -21
  264. package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts.map +0 -1
  265. package/dist/cli/ink-cli/components/overlays/McpSelector.js +0 -52
  266. package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts +0 -28
  267. package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts.map +0 -1
  268. package/dist/cli/ink-cli/components/overlays/McpServerActions.js +0 -93
  269. package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts +0 -29
  270. package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +0 -1
  271. package/dist/cli/ink-cli/components/overlays/McpServerList.js +0 -116
  272. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +0 -28
  273. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +0 -1
  274. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +0 -743
  275. package/dist/cli/ink-cli/components/overlays/PluginActions.d.ts +0 -27
  276. package/dist/cli/ink-cli/components/overlays/PluginActions.d.ts.map +0 -1
  277. package/dist/cli/ink-cli/components/overlays/PluginActions.js +0 -66
  278. package/dist/cli/ink-cli/components/overlays/PluginList.d.ts +0 -21
  279. package/dist/cli/ink-cli/components/overlays/PluginList.d.ts.map +0 -1
  280. package/dist/cli/ink-cli/components/overlays/PluginList.js +0 -70
  281. package/dist/cli/ink-cli/components/overlays/PluginManager.d.ts +0 -21
  282. package/dist/cli/ink-cli/components/overlays/PluginManager.d.ts.map +0 -1
  283. package/dist/cli/ink-cli/components/overlays/PluginManager.js +0 -63
  284. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts +0 -22
  285. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts.map +0 -1
  286. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.js +0 -52
  287. package/dist/cli/ink-cli/components/overlays/PromptAddWizard.d.ts +0 -29
  288. package/dist/cli/ink-cli/components/overlays/PromptAddWizard.d.ts.map +0 -1
  289. package/dist/cli/ink-cli/components/overlays/PromptAddWizard.js +0 -166
  290. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts +0 -27
  291. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts.map +0 -1
  292. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.js +0 -119
  293. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts +0 -33
  294. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +0 -1
  295. package/dist/cli/ink-cli/components/overlays/PromptList.js +0 -143
  296. package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts +0 -23
  297. package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts.map +0 -1
  298. package/dist/cli/ink-cli/components/overlays/SearchOverlay.js +0 -189
  299. package/dist/cli/ink-cli/components/overlays/SessionRenameOverlay.d.ts +0 -21
  300. package/dist/cli/ink-cli/components/overlays/SessionRenameOverlay.d.ts.map +0 -1
  301. package/dist/cli/ink-cli/components/overlays/SessionRenameOverlay.js +0 -63
  302. package/dist/cli/ink-cli/components/overlays/SessionSelectorRefactored.d.ts +0 -26
  303. package/dist/cli/ink-cli/components/overlays/SessionSelectorRefactored.d.ts.map +0 -1
  304. package/dist/cli/ink-cli/components/overlays/SessionSelectorRefactored.js +0 -126
  305. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts +0 -21
  306. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts.map +0 -1
  307. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.js +0 -42
  308. package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts +0 -21
  309. package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts.map +0 -1
  310. package/dist/cli/ink-cli/components/overlays/SoundsSelector.js +0 -566
  311. package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts +0 -20
  312. package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts.map +0 -1
  313. package/dist/cli/ink-cli/components/overlays/StreamSelector.js +0 -58
  314. package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts +0 -26
  315. package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts.map +0 -1
  316. package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +0 -697
  317. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +0 -25
  318. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +0 -1
  319. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +0 -604
  320. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts +0 -15
  321. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts.map +0 -1
  322. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.js +0 -14
  323. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +0 -42
  324. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +0 -1
  325. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +0 -547
  326. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +0 -25
  327. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +0 -1
  328. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +0 -29
  329. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +0 -17
  330. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +0 -1
  331. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.js +0 -11
  332. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +0 -20
  333. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +0 -1
  334. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +0 -10
  335. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +0 -30
  336. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +0 -1
  337. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.js +0 -13
  338. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts +0 -8
  339. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts.map +0 -1
  340. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.js +0 -7
  341. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +0 -85
  342. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +0 -1
  343. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.js +0 -38
  344. package/dist/cli/ink-cli/components/renderers/DiffRenderer.d.ts +0 -21
  345. package/dist/cli/ink-cli/components/renderers/DiffRenderer.d.ts.map +0 -1
  346. package/dist/cli/ink-cli/components/renderers/DiffRenderer.js +0 -65
  347. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts +0 -30
  348. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts.map +0 -1
  349. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +0 -67
  350. package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts +0 -21
  351. package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts.map +0 -1
  352. package/dist/cli/ink-cli/components/renderers/FileRenderer.js +0 -37
  353. package/dist/cli/ink-cli/components/renderers/GenericRenderer.d.ts +0 -21
  354. package/dist/cli/ink-cli/components/renderers/GenericRenderer.d.ts.map +0 -1
  355. package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +0 -26
  356. package/dist/cli/ink-cli/components/renderers/SearchRenderer.d.ts +0 -20
  357. package/dist/cli/ink-cli/components/renderers/SearchRenderer.d.ts.map +0 -1
  358. package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +0 -26
  359. package/dist/cli/ink-cli/components/renderers/ShellRenderer.d.ts +0 -21
  360. package/dist/cli/ink-cli/components/renderers/ShellRenderer.d.ts.map +0 -1
  361. package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +0 -15
  362. package/dist/cli/ink-cli/components/renderers/diff-shared.d.ts +0 -61
  363. package/dist/cli/ink-cli/components/renderers/diff-shared.d.ts.map +0 -1
  364. package/dist/cli/ink-cli/components/renderers/diff-shared.js +0 -158
  365. package/dist/cli/ink-cli/components/renderers/index.d.ts +0 -28
  366. package/dist/cli/ink-cli/components/renderers/index.d.ts.map +0 -1
  367. package/dist/cli/ink-cli/components/renderers/index.js +0 -36
  368. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts +0 -7
  369. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts.map +0 -1
  370. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.js +0 -8
  371. package/dist/cli/ink-cli/components/shared/HintBar.d.ts +0 -6
  372. package/dist/cli/ink-cli/components/shared/HintBar.d.ts.map +0 -1
  373. package/dist/cli/ink-cli/components/shared/HintBar.js +0 -6
  374. package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts +0 -38
  375. package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +0 -1
  376. package/dist/cli/ink-cli/components/shared/MarkdownText.js +0 -389
  377. package/dist/cli/ink-cli/components/shared/VirtualizedList.d.ts +0 -44
  378. package/dist/cli/ink-cli/components/shared/VirtualizedList.d.ts.map +0 -1
  379. package/dist/cli/ink-cli/components/shared/VirtualizedList.js +0 -300
  380. package/dist/cli/ink-cli/components/shared/text-buffer.d.ts +0 -185
  381. package/dist/cli/ink-cli/components/shared/text-buffer.d.ts.map +0 -1
  382. package/dist/cli/ink-cli/components/shared/text-buffer.js +0 -1338
  383. package/dist/cli/ink-cli/constants/processingPhrases.d.ts +0 -10
  384. package/dist/cli/ink-cli/constants/processingPhrases.d.ts.map +0 -1
  385. package/dist/cli/ink-cli/constants/processingPhrases.js +0 -92
  386. package/dist/cli/ink-cli/constants/spinnerFrames.d.ts +0 -2
  387. package/dist/cli/ink-cli/constants/spinnerFrames.d.ts.map +0 -1
  388. package/dist/cli/ink-cli/constants/spinnerFrames.js +0 -1
  389. package/dist/cli/ink-cli/constants/tips.d.ts +0 -15
  390. package/dist/cli/ink-cli/constants/tips.d.ts.map +0 -1
  391. package/dist/cli/ink-cli/constants/tips.js +0 -58
  392. package/dist/cli/ink-cli/containers/InputContainer.d.ts +0 -62
  393. package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +0 -1
  394. package/dist/cli/ink-cli/containers/InputContainer.js +0 -643
  395. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts +0 -42
  396. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +0 -1
  397. package/dist/cli/ink-cli/containers/OverlayContainer.js +0 -1840
  398. package/dist/cli/ink-cli/containers/index.d.ts +0 -6
  399. package/dist/cli/ink-cli/containers/index.d.ts.map +0 -1
  400. package/dist/cli/ink-cli/containers/index.js +0 -5
  401. package/dist/cli/ink-cli/contexts/KeypressContext.d.ts +0 -36
  402. package/dist/cli/ink-cli/contexts/KeypressContext.d.ts.map +0 -1
  403. package/dist/cli/ink-cli/contexts/KeypressContext.js +0 -461
  404. package/dist/cli/ink-cli/contexts/MouseContext.d.ts +0 -27
  405. package/dist/cli/ink-cli/contexts/MouseContext.d.ts.map +0 -1
  406. package/dist/cli/ink-cli/contexts/MouseContext.js +0 -102
  407. package/dist/cli/ink-cli/contexts/ScrollProvider.d.ts +0 -33
  408. package/dist/cli/ink-cli/contexts/ScrollProvider.d.ts.map +0 -1
  409. package/dist/cli/ink-cli/contexts/ScrollProvider.js +0 -170
  410. package/dist/cli/ink-cli/contexts/SoundContext.d.ts +0 -23
  411. package/dist/cli/ink-cli/contexts/SoundContext.d.ts.map +0 -1
  412. package/dist/cli/ink-cli/contexts/SoundContext.js +0 -22
  413. package/dist/cli/ink-cli/contexts/index.d.ts +0 -8
  414. package/dist/cli/ink-cli/contexts/index.d.ts.map +0 -1
  415. package/dist/cli/ink-cli/contexts/index.js +0 -7
  416. package/dist/cli/ink-cli/hooks/index.d.ts +0 -12
  417. package/dist/cli/ink-cli/hooks/index.d.ts.map +0 -1
  418. package/dist/cli/ink-cli/hooks/index.js +0 -14
  419. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +0 -49
  420. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +0 -1
  421. package/dist/cli/ink-cli/hooks/useAgentEvents.js +0 -369
  422. package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts +0 -11
  423. package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts.map +0 -1
  424. package/dist/cli/ink-cli/hooks/useAnimationTick.js +0 -54
  425. package/dist/cli/ink-cli/hooks/useBatchedScroll.d.ts +0 -14
  426. package/dist/cli/ink-cli/hooks/useBatchedScroll.d.ts.map +0 -1
  427. package/dist/cli/ink-cli/hooks/useBatchedScroll.js +0 -25
  428. package/dist/cli/ink-cli/hooks/useCLIState.d.ts +0 -52
  429. package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +0 -1
  430. package/dist/cli/ink-cli/hooks/useCLIState.js +0 -224
  431. package/dist/cli/ink-cli/hooks/useElapsedTime.d.ts +0 -24
  432. package/dist/cli/ink-cli/hooks/useElapsedTime.d.ts.map +0 -1
  433. package/dist/cli/ink-cli/hooks/useElapsedTime.js +0 -69
  434. package/dist/cli/ink-cli/hooks/useGitBranch.d.ts +0 -13
  435. package/dist/cli/ink-cli/hooks/useGitBranch.d.ts.map +0 -1
  436. package/dist/cli/ink-cli/hooks/useGitBranch.js +0 -35
  437. package/dist/cli/ink-cli/hooks/useHistorySearch.d.ts +0 -61
  438. package/dist/cli/ink-cli/hooks/useHistorySearch.d.ts.map +0 -1
  439. package/dist/cli/ink-cli/hooks/useHistorySearch.js +0 -210
  440. package/dist/cli/ink-cli/hooks/useInputHistory.d.ts +0 -18
  441. package/dist/cli/ink-cli/hooks/useInputHistory.d.ts.map +0 -1
  442. package/dist/cli/ink-cli/hooks/useInputHistory.js +0 -26
  443. package/dist/cli/ink-cli/hooks/useInputOrchestrator.d.ts +0 -136
  444. package/dist/cli/ink-cli/hooks/useInputOrchestrator.d.ts.map +0 -1
  445. package/dist/cli/ink-cli/hooks/useInputOrchestrator.js +0 -715
  446. package/dist/cli/ink-cli/hooks/useKeyboardShortcuts.d.ts +0 -21
  447. package/dist/cli/ink-cli/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  448. package/dist/cli/ink-cli/hooks/useKeyboardShortcuts.js +0 -80
  449. package/dist/cli/ink-cli/hooks/useKeypress.d.ts +0 -18
  450. package/dist/cli/ink-cli/hooks/useKeypress.d.ts.map +0 -1
  451. package/dist/cli/ink-cli/hooks/useKeypress.js +0 -26
  452. package/dist/cli/ink-cli/hooks/usePhraseCycler.d.ts +0 -30
  453. package/dist/cli/ink-cli/hooks/usePhraseCycler.d.ts.map +0 -1
  454. package/dist/cli/ink-cli/hooks/usePhraseCycler.js +0 -68
  455. package/dist/cli/ink-cli/hooks/useStreaming.d.ts +0 -19
  456. package/dist/cli/ink-cli/hooks/useStreaming.d.ts.map +0 -1
  457. package/dist/cli/ink-cli/hooks/useStreaming.js +0 -26
  458. package/dist/cli/ink-cli/hooks/useTerminalSize.d.ts +0 -14
  459. package/dist/cli/ink-cli/hooks/useTerminalSize.d.ts.map +0 -1
  460. package/dist/cli/ink-cli/hooks/useTerminalSize.js +0 -31
  461. package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts +0 -46
  462. package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts.map +0 -1
  463. package/dist/cli/ink-cli/hooks/useTokenCounter.js +0 -122
  464. package/dist/cli/ink-cli/services/CommandService.d.ts +0 -58
  465. package/dist/cli/ink-cli/services/CommandService.d.ts.map +0 -1
  466. package/dist/cli/ink-cli/services/CommandService.js +0 -64
  467. package/dist/cli/ink-cli/services/InputService.d.ts +0 -40
  468. package/dist/cli/ink-cli/services/InputService.d.ts.map +0 -1
  469. package/dist/cli/ink-cli/services/InputService.js +0 -87
  470. package/dist/cli/ink-cli/services/MessageService.d.ts +0 -35
  471. package/dist/cli/ink-cli/services/MessageService.d.ts.map +0 -1
  472. package/dist/cli/ink-cli/services/MessageService.js +0 -49
  473. package/dist/cli/ink-cli/services/index.d.ts +0 -8
  474. package/dist/cli/ink-cli/services/index.d.ts.map +0 -1
  475. package/dist/cli/ink-cli/services/index.js +0 -7
  476. package/dist/cli/ink-cli/services/processStream.d.ts +0 -75
  477. package/dist/cli/ink-cli/services/processStream.d.ts.map +0 -1
  478. package/dist/cli/ink-cli/services/processStream.js +0 -951
  479. package/dist/cli/ink-cli/state/actions.d.ts +0 -124
  480. package/dist/cli/ink-cli/state/actions.d.ts.map +0 -1
  481. package/dist/cli/ink-cli/state/actions.js +0 -8
  482. package/dist/cli/ink-cli/state/index.d.ts +0 -10
  483. package/dist/cli/ink-cli/state/index.d.ts.map +0 -1
  484. package/dist/cli/ink-cli/state/index.js +0 -8
  485. package/dist/cli/ink-cli/state/initialState.d.ts +0 -12
  486. package/dist/cli/ink-cli/state/initialState.d.ts.map +0 -1
  487. package/dist/cli/ink-cli/state/initialState.js +0 -58
  488. package/dist/cli/ink-cli/state/reducer.d.ts +0 -15
  489. package/dist/cli/ink-cli/state/reducer.d.ts.map +0 -1
  490. package/dist/cli/ink-cli/state/reducer.js +0 -341
  491. package/dist/cli/ink-cli/state/streaming-state.d.ts +0 -27
  492. package/dist/cli/ink-cli/state/streaming-state.d.ts.map +0 -1
  493. package/dist/cli/ink-cli/state/streaming-state.js +0 -39
  494. package/dist/cli/ink-cli/state/types.d.ts +0 -378
  495. package/dist/cli/ink-cli/state/types.d.ts.map +0 -1
  496. package/dist/cli/ink-cli/state/types.js +0 -5
  497. package/dist/cli/ink-cli/utils/bracketedPaste.d.ts +0 -22
  498. package/dist/cli/ink-cli/utils/bracketedPaste.d.ts.map +0 -1
  499. package/dist/cli/ink-cli/utils/bracketedPaste.js +0 -27
  500. package/dist/cli/ink-cli/utils/clipboardUtils.d.ts +0 -49
  501. package/dist/cli/ink-cli/utils/clipboardUtils.d.ts.map +0 -1
  502. package/dist/cli/ink-cli/utils/clipboardUtils.js +0 -356
  503. package/dist/cli/ink-cli/utils/commandOverlays.d.ts +0 -33
  504. package/dist/cli/ink-cli/utils/commandOverlays.d.ts.map +0 -1
  505. package/dist/cli/ink-cli/utils/commandOverlays.js +0 -85
  506. package/dist/cli/ink-cli/utils/debugLog.d.ts +0 -38
  507. package/dist/cli/ink-cli/utils/debugLog.d.ts.map +0 -1
  508. package/dist/cli/ink-cli/utils/debugLog.js +0 -66
  509. package/dist/cli/ink-cli/utils/elicitationSchema.d.ts +0 -11
  510. package/dist/cli/ink-cli/utils/elicitationSchema.d.ts.map +0 -1
  511. package/dist/cli/ink-cli/utils/elicitationSchema.js +0 -80
  512. package/dist/cli/ink-cli/utils/idGenerator.d.ts +0 -10
  513. package/dist/cli/ink-cli/utils/idGenerator.d.ts.map +0 -1
  514. package/dist/cli/ink-cli/utils/idGenerator.js +0 -12
  515. package/dist/cli/ink-cli/utils/index.d.ts +0 -9
  516. package/dist/cli/ink-cli/utils/index.d.ts.map +0 -1
  517. package/dist/cli/ink-cli/utils/index.js +0 -13
  518. package/dist/cli/ink-cli/utils/input.d.ts +0 -25
  519. package/dist/cli/ink-cli/utils/input.d.ts.map +0 -1
  520. package/dist/cli/ink-cli/utils/input.js +0 -56
  521. package/dist/cli/ink-cli/utils/inputParsing.d.ts +0 -31
  522. package/dist/cli/ink-cli/utils/inputParsing.d.ts.map +0 -1
  523. package/dist/cli/ink-cli/utils/inputParsing.js +0 -70
  524. package/dist/cli/ink-cli/utils/llm-provider-display.d.ts +0 -3
  525. package/dist/cli/ink-cli/utils/llm-provider-display.d.ts.map +0 -1
  526. package/dist/cli/ink-cli/utils/llm-provider-display.js +0 -22
  527. package/dist/cli/ink-cli/utils/messageFormatting.d.ts +0 -125
  528. package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +0 -1
  529. package/dist/cli/ink-cli/utils/messageFormatting.js +0 -485
  530. package/dist/cli/ink-cli/utils/mouse.d.ts +0 -61
  531. package/dist/cli/ink-cli/utils/mouse.d.ts.map +0 -1
  532. package/dist/cli/ink-cli/utils/mouse.js +0 -209
  533. package/dist/cli/ink-cli/utils/overlayPresentation.d.ts +0 -19
  534. package/dist/cli/ink-cli/utils/overlayPresentation.d.ts.map +0 -1
  535. package/dist/cli/ink-cli/utils/overlayPresentation.js +0 -33
  536. package/dist/cli/ink-cli/utils/overlaySizing.d.ts +0 -19
  537. package/dist/cli/ink-cli/utils/overlaySizing.d.ts.map +0 -1
  538. package/dist/cli/ink-cli/utils/overlaySizing.js +0 -11
  539. package/dist/cli/ink-cli/utils/soundNotification.d.ts +0 -77
  540. package/dist/cli/ink-cli/utils/soundNotification.d.ts.map +0 -1
  541. package/dist/cli/ink-cli/utils/soundNotification.js +0 -226
  542. package/dist/cli/ink-cli/utils/streamSplitter.d.ts +0 -44
  543. package/dist/cli/ink-cli/utils/streamSplitter.d.ts.map +0 -1
  544. package/dist/cli/ink-cli/utils/streamSplitter.js +0 -154
  545. package/dist/cli/ink-cli/utils/textUtils.d.ts +0 -63
  546. package/dist/cli/ink-cli/utils/textUtils.d.ts.map +0 -1
  547. package/dist/cli/ink-cli/utils/textUtils.js +0 -248
  548. package/dist/cli/ink-cli/utils/toolUtils.d.ts +0 -20
  549. package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +0 -1
  550. package/dist/cli/ink-cli/utils/toolUtils.js +0 -25
  551. package/dist/webui/assets/index-C9JXwpvo.css +0 -1
  552. package/dist/webui/assets/index-CKhumsZA.js +0 -2059
@@ -1,1840 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * OverlayContainer Component
4
- * Smart container for managing all overlays (selectors, autocomplete, approval)
5
- */
6
- import React, { useCallback, useRef, useImperativeHandle, forwardRef, useState } from 'react';
7
- import { Box } from 'ink';
8
- import path from 'path';
9
- import { ApprovalStatus, DenialReason, isUserMessage } from '@dexto/core';
10
- import { ApprovalPrompt, } from '../components/ApprovalPrompt.js';
11
- import { SlashCommandAutocomplete, } from '../components/SlashCommandAutocomplete.js';
12
- import ResourceAutocomplete from '../components/ResourceAutocomplete.js';
13
- import ModelSelectorRefactored from '../components/overlays/ModelSelectorRefactored.js';
14
- import SessionSelectorRefactored from '../components/overlays/SessionSelectorRefactored.js';
15
- import LogLevelSelector from '../components/overlays/LogLevelSelector.js';
16
- import StreamSelector from '../components/overlays/StreamSelector.js';
17
- import SoundsSelector from '../components/overlays/SoundsSelector.js';
18
- import ToolBrowser from '../components/overlays/ToolBrowser.js';
19
- import { CommandOutputOverlay, } from '../components/overlays/CommandOutputOverlay.js';
20
- import McpServerList from '../components/overlays/McpServerList.js';
21
- import McpServerActions from '../components/overlays/McpServerActions.js';
22
- import McpAddChoice from '../components/overlays/McpAddChoice.js';
23
- import McpAddSelector from '../components/overlays/McpAddSelector.js';
24
- import SessionSubcommandSelector from '../components/overlays/SessionSubcommandSelector.js';
25
- import McpCustomTypeSelector from '../components/overlays/McpCustomTypeSelector.js';
26
- import McpCustomWizard from '../components/overlays/McpCustomWizard.js';
27
- import CustomModelWizard from '../components/overlays/CustomModelWizard.js';
28
- import { getProviderKeyStatus, loadGlobalPreferences, updateGlobalPreferences, } from '@dexto/agent-management';
29
- import ApiKeyInput from '../components/overlays/ApiKeyInput.js';
30
- import SearchOverlay from '../components/overlays/SearchOverlay.js';
31
- import PromptList from '../components/overlays/PromptList.js';
32
- import PromptAddChoice from '../components/overlays/PromptAddChoice.js';
33
- import PromptAddWizard from '../components/overlays/PromptAddWizard.js';
34
- import PromptDeleteSelector from '../components/overlays/PromptDeleteSelector.js';
35
- import SessionRenameOverlay from '../components/overlays/SessionRenameOverlay.js';
36
- import ContextStatsOverlay from '../components/overlays/ContextStatsOverlay.js';
37
- import ExportWizard from '../components/overlays/ExportWizard.js';
38
- import PluginManager from '../components/overlays/PluginManager.js';
39
- import PluginList from '../components/overlays/PluginList.js';
40
- import PluginActions from '../components/overlays/PluginActions.js';
41
- import MarketplaceBrowser from '../components/overlays/MarketplaceBrowser.js';
42
- import MarketplaceAddPrompt from '../components/overlays/MarketplaceAddPrompt.js';
43
- import { DextoValidationError, LLMErrorCode, getModelDisplayName } from '@dexto/core';
44
- import { createUserMessage, convertHistoryToUIMessages } from '../utils/messageFormatting.js';
45
- import { generateMessageId } from '../utils/idGenerator.js';
46
- import { capture } from '../../../analytics/index.js';
47
- import { FocusOverlayFrame } from '../components/shared/FocusOverlayFrame.js';
48
- import { shouldHideCliChrome } from '../utils/overlayPresentation.js';
49
- /**
50
- * Smart container for managing overlays
51
- * Handles all modal interactions (selectors, autocomplete, approval)
52
- */
53
- export const OverlayContainer = forwardRef(function OverlayContainer({ ui, input, session, approval, setInput, setUi, setSession, setMessages, setApproval, setApprovalQueue, agent, inputService, buffer, configFilePath, refreshStatic, onSubmitPromptCommand, }, ref) {
54
- // Refs to overlay components for input handling
55
- const approvalRef = useRef(null);
56
- const slashAutocompleteRef = useRef(null);
57
- const resourceAutocompleteRef = useRef(null);
58
- const modelSelectorRef = useRef(null);
59
- const sessionSelectorRef = useRef(null);
60
- const logLevelSelectorRef = useRef(null);
61
- const streamSelectorRef = useRef(null);
62
- const soundsSelectorRef = useRef(null);
63
- const toolBrowserRef = useRef(null);
64
- const commandOutputRef = useRef(null);
65
- const mcpServerListRef = useRef(null);
66
- const mcpServerActionsRef = useRef(null);
67
- const mcpAddChoiceRef = useRef(null);
68
- const mcpAddSelectorRef = useRef(null);
69
- const mcpCustomTypeSelectorRef = useRef(null);
70
- const mcpCustomWizardRef = useRef(null);
71
- const customModelWizardRef = useRef(null);
72
- const sessionSubcommandSelectorRef = useRef(null);
73
- const apiKeyInputRef = useRef(null);
74
- const searchOverlayRef = useRef(null);
75
- const promptListRef = useRef(null);
76
- const promptAddChoiceRef = useRef(null);
77
- const promptAddWizardRef = useRef(null);
78
- const promptDeleteSelectorRef = useRef(null);
79
- const sessionRenameRef = useRef(null);
80
- const contextStatsRef = useRef(null);
81
- const exportWizardRef = useRef(null);
82
- const pluginManagerRef = useRef(null);
83
- const pluginListRef = useRef(null);
84
- const pluginActionsRef = useRef(null);
85
- const marketplaceBrowserRef = useRef(null);
86
- // State for selected plugin (for plugin-actions overlay)
87
- const [selectedPlugin, setSelectedPlugin] = useState(null);
88
- const marketplaceAddPromptRef = useRef(null);
89
- const getConfigFilePathOrWarn = useCallback((action) => {
90
- if (configFilePath) {
91
- return configFilePath;
92
- }
93
- setMessages((prev) => [
94
- ...prev,
95
- {
96
- id: generateMessageId('system'),
97
- role: 'system',
98
- content: `⚠️ Cannot ${action}: this agent is not file-backed (no config path).`,
99
- timestamp: new Date(),
100
- },
101
- ]);
102
- return null;
103
- }, [configFilePath, setMessages]);
104
- // Expose handleInput method via ref - routes to appropriate overlay
105
- useImperativeHandle(ref, () => ({
106
- handleInput: (inputStr, key) => {
107
- // Route to approval first (highest priority)
108
- if (approval && approvalRef.current) {
109
- return approvalRef.current.handleInput(inputStr, key);
110
- }
111
- // Route to active overlay based on type
112
- switch (ui.activeOverlay) {
113
- case 'slash-autocomplete':
114
- return (slashAutocompleteRef.current?.handleInput(inputStr, key) ?? false);
115
- case 'resource-autocomplete':
116
- return (resourceAutocompleteRef.current?.handleInput(inputStr, key) ?? false);
117
- case 'model-selector':
118
- return modelSelectorRef.current?.handleInput(inputStr, key) ?? false;
119
- case 'session-selector':
120
- return sessionSelectorRef.current?.handleInput(inputStr, key) ?? false;
121
- case 'log-level-selector':
122
- return logLevelSelectorRef.current?.handleInput(inputStr, key) ?? false;
123
- case 'stream-selector':
124
- return streamSelectorRef.current?.handleInput(inputStr, key) ?? false;
125
- case 'sounds-selector':
126
- return soundsSelectorRef.current?.handleInput(inputStr, key) ?? false;
127
- case 'tool-browser':
128
- return toolBrowserRef.current?.handleInput(inputStr, key) ?? false;
129
- case 'command-output':
130
- return commandOutputRef.current?.handleInput(inputStr, key) ?? false;
131
- case 'mcp-server-list':
132
- return mcpServerListRef.current?.handleInput(inputStr, key) ?? false;
133
- case 'mcp-server-actions':
134
- return mcpServerActionsRef.current?.handleInput(inputStr, key) ?? false;
135
- case 'mcp-add-choice':
136
- return mcpAddChoiceRef.current?.handleInput(inputStr, key) ?? false;
137
- case 'mcp-add-selector':
138
- return mcpAddSelectorRef.current?.handleInput(inputStr, key) ?? false;
139
- case 'mcp-custom-type-selector':
140
- return (mcpCustomTypeSelectorRef.current?.handleInput(inputStr, key) ??
141
- false);
142
- case 'mcp-custom-wizard':
143
- return mcpCustomWizardRef.current?.handleInput(inputStr, key) ?? false;
144
- case 'custom-model-wizard':
145
- return (customModelWizardRef.current?.handleInput(inputStr, key) ?? false);
146
- case 'session-subcommand-selector':
147
- return (sessionSubcommandSelectorRef.current?.handleInput(inputStr, key) ??
148
- false);
149
- case 'api-key-input':
150
- return apiKeyInputRef.current?.handleInput(inputStr, key) ?? false;
151
- case 'search':
152
- return searchOverlayRef.current?.handleInput(inputStr, key) ?? false;
153
- case 'prompt-list':
154
- return promptListRef.current?.handleInput(inputStr, key) ?? false;
155
- case 'prompt-add-choice':
156
- return promptAddChoiceRef.current?.handleInput(inputStr, key) ?? false;
157
- case 'prompt-add-wizard':
158
- return promptAddWizardRef.current?.handleInput(inputStr, key) ?? false;
159
- case 'prompt-delete-selector':
160
- return (promptDeleteSelectorRef.current?.handleInput(inputStr, key) ?? false);
161
- case 'session-rename':
162
- return sessionRenameRef.current?.handleInput(inputStr, key) ?? false;
163
- case 'context-stats':
164
- return contextStatsRef.current?.handleInput(inputStr, key) ?? false;
165
- case 'export-wizard':
166
- return exportWizardRef.current?.handleInput(inputStr, key) ?? false;
167
- case 'plugin-manager':
168
- return pluginManagerRef.current?.handleInput(inputStr, key) ?? false;
169
- case 'plugin-list':
170
- return pluginListRef.current?.handleInput(inputStr, key) ?? false;
171
- case 'plugin-actions':
172
- return pluginActionsRef.current?.handleInput(inputStr, key) ?? false;
173
- case 'marketplace-browser':
174
- return (marketplaceBrowserRef.current?.handleInput(inputStr, key) ?? false);
175
- case 'marketplace-add':
176
- return (marketplaceAddPromptRef.current?.handleInput(inputStr, key) ?? false);
177
- default:
178
- return false;
179
- }
180
- },
181
- }), [approval, ui.activeOverlay]);
182
- // NOTE: Automatic overlay detection removed to prevent infinite loop
183
- // Overlays are now shown explicitly via setUi from InputContainer
184
- // or from the main component's input detection logic
185
- // Helper: Complete approval and process queue
186
- const completeApproval = useCallback(() => {
187
- setApprovalQueue((queue) => {
188
- if (queue.length > 0) {
189
- // Show next approval from queue
190
- const [next, ...rest] = queue;
191
- setApproval(next);
192
- setUi((prev) => ({ ...prev, activeOverlay: 'approval' }));
193
- return rest;
194
- }
195
- else {
196
- // No more approvals
197
- setApproval(null);
198
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
199
- return [];
200
- }
201
- });
202
- }, [setApproval, setApprovalQueue, setUi]);
203
- // Handle approval responses
204
- const handleApprove = useCallback((options) => {
205
- if (!approval)
206
- return;
207
- // Enable "accept all edits" mode if requested
208
- if (options.enableAcceptEditsMode) {
209
- setUi((prev) => ({ ...prev, autoApproveEdits: true }));
210
- }
211
- // Auto-disable plan mode when plan_create or plan_review is approved
212
- // This signals the transition from planning phase to execution phase
213
- const toolName = approval.metadata.toolName;
214
- if (toolName === 'plan_create' || toolName === 'plan_review') {
215
- setUi((prev) => ({
216
- ...prev,
217
- planModeActive: false,
218
- planModeInitialized: false,
219
- }));
220
- }
221
- agent.emit('approval:response', {
222
- approvalId: approval.approvalId,
223
- status: ApprovalStatus.APPROVED,
224
- sessionId: approval.sessionId,
225
- data: {
226
- rememberChoice: options.rememberChoice,
227
- rememberPattern: options.rememberPattern,
228
- formData: options.formData,
229
- rememberDirectory: options.rememberDirectory,
230
- },
231
- });
232
- completeApproval();
233
- }, [approval, agent, completeApproval, setUi]);
234
- const handleDeny = useCallback((feedback) => {
235
- if (!approval)
236
- return;
237
- // Include user feedback in the denial message if provided
238
- const message = feedback
239
- ? `User requested changes: ${feedback}`
240
- : 'User denied the tool execution';
241
- agent.emit('approval:response', {
242
- approvalId: approval.approvalId,
243
- status: ApprovalStatus.DENIED,
244
- sessionId: approval.sessionId,
245
- reason: DenialReason.USER_DENIED,
246
- message,
247
- });
248
- completeApproval();
249
- }, [approval, agent, completeApproval]);
250
- const handleCancelApproval = useCallback(() => {
251
- if (!approval)
252
- return;
253
- agent.emit('approval:response', {
254
- approvalId: approval.approvalId,
255
- status: ApprovalStatus.CANCELLED,
256
- sessionId: approval.sessionId,
257
- reason: DenialReason.USER_CANCELLED,
258
- message: 'User cancelled the approval request',
259
- });
260
- completeApproval();
261
- }, [approval, agent, completeApproval]);
262
- // Helper: Check if error is due to missing API key
263
- const isApiKeyMissingError = (error) => {
264
- if (error instanceof DextoValidationError) {
265
- const apiKeyIssue = error.issues.find((issue) => issue.code === LLMErrorCode.API_KEY_MISSING);
266
- if (apiKeyIssue && apiKeyIssue.context) {
267
- // Extract provider from context
268
- const context = apiKeyIssue.context;
269
- if (context.provider) {
270
- return context.provider;
271
- }
272
- }
273
- }
274
- return null;
275
- };
276
- // Handle model selection (session-only)
277
- const handleModelSelect = useCallback(async (provider, model, displayName, baseURL, reasoningEffort) => {
278
- // Session-only switch (default is set via explicit action)
279
- // Pre-check: Dexto Nova provider requires OAuth login AND API key
280
- // Check BEFORE closing the overlay so user can pick a different model
281
- if (provider === 'dexto-nova') {
282
- try {
283
- const { canUseDextoProvider } = await import('../../utils/dexto-setup.js');
284
- const canUse = await canUseDextoProvider();
285
- if (!canUse) {
286
- setMessages((prev) => [
287
- ...prev,
288
- {
289
- id: generateMessageId('system'),
290
- role: 'system',
291
- content: 'Cannot switch to Dexto Nova model - authentication required. Run /login to authenticate.',
292
- timestamp: new Date(),
293
- },
294
- ]);
295
- // Don't close the overlay - let user pick a different model
296
- return;
297
- }
298
- }
299
- catch (error) {
300
- setMessages((prev) => [
301
- ...prev,
302
- {
303
- id: generateMessageId('error'),
304
- role: 'system',
305
- content: `Failed to verify Dexto Nova auth: ${error instanceof Error ? error.message : String(error)}`,
306
- timestamp: new Date(),
307
- },
308
- ]);
309
- // Don't close the overlay - let user pick a different model
310
- return;
311
- }
312
- }
313
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
314
- buffer.setText('');
315
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
316
- try {
317
- setMessages((prev) => [
318
- ...prev,
319
- {
320
- id: generateMessageId('system'),
321
- role: 'system',
322
- content: `🔄 Switching to ${displayName || model} (${provider})...`,
323
- timestamp: new Date(),
324
- },
325
- ]);
326
- await agent.switchLLM({ provider: provider, model, baseURL, reasoningEffort }, session.id || undefined);
327
- // Update session state with display name (fallback to model ID)
328
- setSession((prev) => ({ ...prev, modelName: displayName || model }));
329
- setMessages((prev) => [
330
- ...prev,
331
- {
332
- id: generateMessageId('system'),
333
- role: 'system',
334
- content: `✅ Successfully switched to ${displayName || model} (${provider})`,
335
- timestamp: new Date(),
336
- },
337
- ]);
338
- }
339
- catch (error) {
340
- // Check if error is due to missing API key
341
- const missingProvider = isApiKeyMissingError(error);
342
- if (missingProvider) {
343
- // Store pending model switch and show API key input
344
- // Use missingProvider (from error) as the authoritative source
345
- setUi((prev) => ({
346
- ...prev,
347
- activeOverlay: 'api-key-input',
348
- pendingModelSwitch: {
349
- provider: missingProvider,
350
- model,
351
- ...(displayName && { displayName }),
352
- ...(baseURL && { baseURL }),
353
- ...(reasoningEffort && { reasoningEffort }),
354
- },
355
- }));
356
- setMessages((prev) => [
357
- ...prev,
358
- {
359
- id: generateMessageId('system'),
360
- role: 'system',
361
- content: `🔑 API key required for ${provider}`,
362
- timestamp: new Date(),
363
- },
364
- ]);
365
- return;
366
- }
367
- setMessages((prev) => [
368
- ...prev,
369
- {
370
- id: generateMessageId('error'),
371
- role: 'system',
372
- content: `Failed to switch model: ${error instanceof Error ? error.message : String(error)}`,
373
- timestamp: new Date(),
374
- },
375
- ]);
376
- }
377
- }, [setUi, setInput, setMessages, setSession, agent, session.id, buffer]);
378
- const handleSetDefaultModel = useCallback(async (provider, model, displayName, baseURL, reasoningEffort) => {
379
- try {
380
- const preferencesUpdate = {
381
- provider,
382
- model,
383
- ...(baseURL ? { baseURL } : {}),
384
- ...(reasoningEffort ? { reasoningEffort } : {}),
385
- };
386
- let providerEnvVar;
387
- try {
388
- const providerKeyStatus = await getProviderKeyStatus(provider);
389
- providerEnvVar = providerKeyStatus?.envVar;
390
- }
391
- catch (error) {
392
- agent.logger.debug(`Failed to resolve provider API key env var: ${error instanceof Error ? error.message : String(error)}`);
393
- }
394
- let existing = null;
395
- try {
396
- existing = await loadGlobalPreferences();
397
- }
398
- catch {
399
- existing = null;
400
- }
401
- // Only preserve the API key if the provider hasn't changed
402
- // If provider changed, use the new provider's env var
403
- if (existing?.llm.provider === provider && existing?.llm.apiKey) {
404
- preferencesUpdate.apiKey = existing.llm.apiKey;
405
- }
406
- else if (providerEnvVar) {
407
- preferencesUpdate.apiKey = '$' + providerEnvVar;
408
- }
409
- await updateGlobalPreferences({
410
- llm: preferencesUpdate,
411
- });
412
- try {
413
- await agent.switchLLM({ provider: provider, model, baseURL, reasoningEffort }, session.id || undefined);
414
- setSession((prev) => ({ ...prev, modelName: displayName || model }));
415
- setMessages((prev) => [
416
- ...prev,
417
- {
418
- id: generateMessageId('system'),
419
- role: 'system',
420
- content: `✅ Default model set to ${displayName || model} (${provider})`,
421
- timestamp: new Date(),
422
- },
423
- ]);
424
- }
425
- catch (error) {
426
- const missingProvider = isApiKeyMissingError(error);
427
- if (missingProvider) {
428
- setUi((prev) => ({
429
- ...prev,
430
- activeOverlay: 'api-key-input',
431
- pendingModelSwitch: {
432
- provider: missingProvider,
433
- model,
434
- ...(displayName && { displayName }),
435
- ...(baseURL && { baseURL }),
436
- ...(reasoningEffort && { reasoningEffort }),
437
- },
438
- }));
439
- setMessages((prev) => [
440
- ...prev,
441
- {
442
- id: generateMessageId('system'),
443
- role: 'system',
444
- content: `🔑 API key required for ${provider}`,
445
- timestamp: new Date(),
446
- },
447
- ]);
448
- return;
449
- }
450
- throw error;
451
- }
452
- }
453
- catch (error) {
454
- setMessages((prev) => [
455
- ...prev,
456
- {
457
- id: generateMessageId('error'),
458
- role: 'system',
459
- content: `Failed to set default model: ${error instanceof Error ? error.message : String(error)}`,
460
- timestamp: new Date(),
461
- },
462
- ]);
463
- }
464
- }, [agent, setMessages, setSession, setUi, session.id]);
465
- // State for editing custom model
466
- const [editingModel, setEditingModel] = useState(null);
467
- // Handle "Add custom model" from model selector
468
- const handleAddCustomModel = useCallback(() => {
469
- setEditingModel(null);
470
- setUi((prev) => ({ ...prev, activeOverlay: 'custom-model-wizard' }));
471
- }, [setUi]);
472
- // Handle "Edit custom model" from model selector
473
- const handleEditCustomModel = useCallback((model) => {
474
- setEditingModel(model);
475
- setUi((prev) => ({ ...prev, activeOverlay: 'custom-model-wizard' }));
476
- }, [setUi]);
477
- // Handle custom model wizard completion
478
- const handleCustomModelComplete = useCallback(async (model) => {
479
- const wasEditing = editingModel !== null;
480
- setEditingModel(null);
481
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
482
- buffer.setText('');
483
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
484
- if (wasEditing) {
485
- // For edits, just show confirmation message
486
- setMessages((prev) => [
487
- ...prev,
488
- {
489
- id: generateMessageId('system'),
490
- role: 'system',
491
- content: `✅ Custom model "${model.displayName || model.name}" updated`,
492
- timestamp: new Date(),
493
- },
494
- ]);
495
- }
496
- else {
497
- // For new models, auto-switch to the newly created model
498
- setMessages((prev) => [
499
- ...prev,
500
- {
501
- id: generateMessageId('system'),
502
- role: 'system',
503
- content: `✅ Custom model "${model.displayName || model.name}" saved`,
504
- timestamp: new Date(),
505
- },
506
- ]);
507
- // Switch to the new model
508
- await handleModelSelect(model.provider, model.name, model.displayName, model.baseURL);
509
- }
510
- }, [setUi, setInput, setMessages, buffer, editingModel, handleModelSelect]);
511
- // Handle API key saved - retry the model switch
512
- const handleApiKeySaved = useCallback(async (meta) => {
513
- const pending = ui.pendingModelSwitch;
514
- if (!pending) {
515
- // No pending switch, just close
516
- setUi((prev) => ({
517
- ...prev,
518
- activeOverlay: 'none',
519
- pendingModelSwitch: null,
520
- }));
521
- return;
522
- }
523
- setUi((prev) => ({
524
- ...prev,
525
- activeOverlay: 'none',
526
- pendingModelSwitch: null,
527
- }));
528
- setMessages((prev) => [
529
- ...prev,
530
- {
531
- id: generateMessageId('system'),
532
- role: 'system',
533
- content: `✅ API key saved for ${meta.provider}`,
534
- timestamp: new Date(),
535
- },
536
- ]);
537
- // Retry the model switch
538
- try {
539
- const pendingDisplayName = pending.displayName || pending.model;
540
- setMessages((prev) => [
541
- ...prev,
542
- {
543
- id: generateMessageId('system'),
544
- role: 'system',
545
- content: `🔄 Retrying switch to ${pendingDisplayName} (${pending.provider})...`,
546
- timestamp: new Date(),
547
- },
548
- ]);
549
- await agent.switchLLM({
550
- provider: pending.provider,
551
- model: pending.model,
552
- ...(pending.baseURL && { baseURL: pending.baseURL }),
553
- ...(pending.reasoningEffort && {
554
- reasoningEffort: pending.reasoningEffort,
555
- }),
556
- }, session.id || undefined);
557
- // Update session state with display name (fallback to model ID)
558
- setSession((prev) => ({ ...prev, modelName: pendingDisplayName }));
559
- setMessages((prev) => [
560
- ...prev,
561
- {
562
- id: generateMessageId('system'),
563
- role: 'system',
564
- content: `✅ Successfully switched to ${pendingDisplayName} (${pending.provider})`,
565
- timestamp: new Date(),
566
- },
567
- ]);
568
- }
569
- catch (error) {
570
- setMessages((prev) => [
571
- ...prev,
572
- {
573
- id: generateMessageId('error'),
574
- role: 'system',
575
- content: `Failed to switch model: ${error instanceof Error ? error.message : String(error)}`,
576
- timestamp: new Date(),
577
- },
578
- ]);
579
- }
580
- }, [ui.pendingModelSwitch, setUi, setMessages, setSession, agent, session.id]);
581
- // Handle API key input close (without saving)
582
- const handleApiKeyClose = useCallback(() => {
583
- setUi((prev) => ({
584
- ...prev,
585
- activeOverlay: 'none',
586
- pendingModelSwitch: null,
587
- }));
588
- }, [setUi]);
589
- // Handle search result selection - display the result context
590
- const handleSearchResultSelect = useCallback((result) => {
591
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
592
- buffer.setText('');
593
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
594
- // Display the selected search result as a system message
595
- const roleLabel = result.message.role === 'user'
596
- ? '👤 User'
597
- : result.message.role === 'assistant'
598
- ? '🤖 Assistant'
599
- : `📋 ${result.message.role}`;
600
- setMessages((prev) => [
601
- ...prev,
602
- {
603
- id: generateMessageId('system'),
604
- role: 'system',
605
- content: `🔍 Search Result from session ${result.sessionId.slice(0, 8)}:\n\n${roleLabel}:\n${result.context}`,
606
- timestamp: new Date(),
607
- },
608
- ]);
609
- }, [setUi, setInput, setMessages, buffer]);
610
- // Handle session selection
611
- const handleSessionSelect = useCallback(async (newSessionId) => {
612
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
613
- buffer.setText('');
614
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
615
- try {
616
- // Check if already on this session
617
- if (newSessionId === session.id) {
618
- setMessages((prev) => [
619
- ...prev,
620
- {
621
- id: generateMessageId('system'),
622
- role: 'system',
623
- content: `ℹ️ Already using session ${newSessionId.slice(0, 8)}`,
624
- timestamp: new Date(),
625
- },
626
- ]);
627
- return;
628
- }
629
- // Track session switch analytics
630
- capture('dexto_session_switched', {
631
- source: 'cli',
632
- fromSessionId: session.id || null,
633
- toSessionId: newSessionId,
634
- });
635
- // Clear messages and session state before switching
636
- setMessages([]);
637
- setApproval(null);
638
- setApprovalQueue([]);
639
- // Verify session exists first
640
- const sessionData = await agent.getSession(newSessionId);
641
- if (!sessionData) {
642
- throw new Error(`Session ${newSessionId} not found`);
643
- }
644
- // Get the actual model being used for this session (respects llmOverride)
645
- const newSessionConfig = agent.getCurrentLLMConfig(newSessionId);
646
- const newSessionModelName = getModelDisplayName(newSessionConfig.model, newSessionConfig.provider);
647
- setSession({
648
- id: newSessionId,
649
- hasActiveSession: true,
650
- modelName: newSessionModelName,
651
- });
652
- // Load session history
653
- const history = await agent.getSessionHistory(newSessionId);
654
- if (history && history.length > 0) {
655
- const historyMessages = convertHistoryToUIMessages(history, newSessionId);
656
- setMessages(historyMessages);
657
- // Extract user messages for input history (arrow up navigation)
658
- const userInputHistory = history
659
- .filter(isUserMessage)
660
- .map((msg) => {
661
- // Extract text content from user message
662
- if (typeof msg.content === 'string') {
663
- return msg.content;
664
- }
665
- // Handle array content (text parts)
666
- if (Array.isArray(msg.content)) {
667
- return msg.content
668
- .filter((part) => typeof part === 'object' && part.type === 'text')
669
- .map((part) => part.text)
670
- .join('\n');
671
- }
672
- return '';
673
- })
674
- .filter((text) => text.trim().length > 0);
675
- setInput((prev) => ({
676
- ...prev,
677
- history: userInputHistory,
678
- historyIndex: -1,
679
- }));
680
- }
681
- setMessages((prev) => [
682
- ...prev,
683
- {
684
- id: generateMessageId('system'),
685
- role: 'system',
686
- content: `✅ Switched to session ${newSessionId.slice(0, 8)}`,
687
- timestamp: new Date(),
688
- },
689
- ]);
690
- // Force Static component to re-render with the new history
691
- refreshStatic?.();
692
- }
693
- catch (error) {
694
- setMessages((prev) => [
695
- ...prev,
696
- {
697
- id: generateMessageId('error'),
698
- role: 'system',
699
- content: `Failed to switch session: ${error instanceof Error ? error.message : String(error)}`,
700
- timestamp: new Date(),
701
- },
702
- ]);
703
- }
704
- }, [
705
- setUi,
706
- setInput,
707
- setMessages,
708
- setApproval,
709
- setApprovalQueue,
710
- setSession,
711
- agent,
712
- session.id,
713
- session.modelName,
714
- buffer,
715
- refreshStatic,
716
- ]);
717
- // Handle slash command/prompt selection
718
- const handlePromptSelect = useCallback(async (prompt) => {
719
- // Use displayName for command text (user-friendly name without prefix)
720
- const commandName = prompt.displayName || prompt.name;
721
- const commandText = `/${commandName}`;
722
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
723
- buffer.setText('');
724
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
725
- // Route prompts through InputContainer for streaming pipeline
726
- if (onSubmitPromptCommand) {
727
- await onSubmitPromptCommand(commandText);
728
- return;
729
- }
730
- // Fallback when callback not provided (shouldn't happen in normal usage)
731
- // Show user message for the executed command
732
- const userMessage = createUserMessage(commandText);
733
- setMessages((prev) => [...prev, userMessage]);
734
- setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
735
- const { CommandService } = await import('../services/CommandService.js');
736
- const commandService = new CommandService();
737
- try {
738
- // Use displayName to match the registered command name
739
- const result = await commandService.executeCommand(commandName, [], agent, session.id || undefined);
740
- if (result.type === 'output' && result.output) {
741
- const output = result.output;
742
- setMessages((prev) => [
743
- ...prev,
744
- {
745
- id: generateMessageId('command'),
746
- role: 'system',
747
- content: output,
748
- timestamp: new Date(),
749
- },
750
- ]);
751
- }
752
- if (result.type === 'styled' && result.styled) {
753
- const { fallbackText, styledType, styledData } = result.styled;
754
- setMessages((prev) => [
755
- ...prev,
756
- {
757
- id: generateMessageId('command'),
758
- role: 'system',
759
- content: fallbackText,
760
- timestamp: new Date(),
761
- styledType,
762
- styledData,
763
- },
764
- ]);
765
- }
766
- setUi((prev) => ({
767
- ...prev,
768
- isProcessing: false,
769
- isCancelling: false,
770
- isThinking: false,
771
- }));
772
- }
773
- catch (error) {
774
- setMessages((prev) => [
775
- ...prev,
776
- {
777
- id: generateMessageId('error'),
778
- role: 'system',
779
- content: `${error instanceof Error ? error.message : String(error)}`,
780
- timestamp: new Date(),
781
- },
782
- ]);
783
- setUi((prev) => ({
784
- ...prev,
785
- isProcessing: false,
786
- isCancelling: false,
787
- isThinking: false,
788
- }));
789
- }
790
- }, [setUi, setInput, setMessages, agent, session.id, buffer, onSubmitPromptCommand]);
791
- // Handle loading command/prompt into input for editing (Tab key)
792
- const handleSystemCommandSelect = useCallback(async (command) => {
793
- // Check if this command has an interactive overlay
794
- const { getCommandOverlayForSelect } = await import('../utils/commandOverlays.js');
795
- const overlay = getCommandOverlayForSelect(command);
796
- if (overlay) {
797
- buffer.setText('');
798
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
799
- setUi((prev) => ({
800
- ...prev,
801
- activeOverlay: overlay,
802
- mcpWizardServerType: null,
803
- }));
804
- return;
805
- }
806
- const commandText = `/${command}`;
807
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
808
- buffer.setText('');
809
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
810
- // Show user message for the executed command
811
- const userMessage = createUserMessage(commandText);
812
- setMessages((prev) => [...prev, userMessage]);
813
- setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
814
- const { CommandService } = await import('../services/CommandService.js');
815
- const commandService = new CommandService();
816
- try {
817
- const result = await commandService.executeCommand(command, [], agent, session.id || undefined);
818
- if (result.type === 'output' && result.output) {
819
- const output = result.output;
820
- setMessages((prev) => [
821
- ...prev,
822
- {
823
- id: generateMessageId('command'),
824
- role: 'system',
825
- content: output,
826
- timestamp: new Date(),
827
- },
828
- ]);
829
- }
830
- if (result.type === 'styled' && result.styled) {
831
- const { fallbackText, styledType, styledData } = result.styled;
832
- setMessages((prev) => [
833
- ...prev,
834
- {
835
- id: generateMessageId('command'),
836
- role: 'system',
837
- content: fallbackText,
838
- timestamp: new Date(),
839
- styledType,
840
- styledData,
841
- },
842
- ]);
843
- }
844
- setUi((prev) => ({
845
- ...prev,
846
- isProcessing: false,
847
- isCancelling: false,
848
- isThinking: false,
849
- }));
850
- }
851
- catch (error) {
852
- setMessages((prev) => [
853
- ...prev,
854
- {
855
- id: generateMessageId('error'),
856
- role: 'system',
857
- content: `${error instanceof Error ? error.message : String(error)}`,
858
- timestamp: new Date(),
859
- },
860
- ]);
861
- setUi((prev) => ({
862
- ...prev,
863
- isProcessing: false,
864
- isCancelling: false,
865
- isThinking: false,
866
- }));
867
- }
868
- }, [setInput, setUi, setMessages, agent, session.id, buffer]);
869
- const handleLoadIntoInput = useCallback((text) => {
870
- // Update both buffer (source of truth) and state
871
- buffer.setText(text);
872
- setInput((prev) => ({ ...prev, value: text }));
873
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
874
- }, [buffer, setInput, setUi]);
875
- // Handle resource selection
876
- const handleResourceSelect = useCallback((resource) => {
877
- // Insert resource reference into input
878
- const atIndex = input.value.lastIndexOf('@');
879
- if (atIndex >= 0) {
880
- const before = input.value.slice(0, atIndex + 1);
881
- const uriParts = resource.uri.split(/[\\/]/);
882
- let reference = resource.name || uriParts[uriParts.length - 1] || resource.uri;
883
- // If it's an absolute path, use relative path as reference to be more descriptive and less bulky
884
- const rawUri = resource.uri.replace(/^(fs|file):\/\//, ''); // Stripped prefix
885
- if (path.isAbsolute(rawUri)) {
886
- try {
887
- const relativePath = path.relative(process.cwd(), rawUri);
888
- // Prioritize relative path for local files to avoid ambiguity
889
- reference = relativePath;
890
- }
891
- catch {
892
- // Keep fallback if relative fails
893
- }
894
- }
895
- const newValue = `${before}${reference} `;
896
- buffer.setText(newValue);
897
- setInput((prev) => ({ ...prev, value: newValue }));
898
- }
899
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
900
- }, [input.value, buffer, setInput, setUi]);
901
- const handleClose = useCallback(() => {
902
- setUi((prev) => ({
903
- ...prev,
904
- activeOverlay: 'none',
905
- mcpWizardServerType: null,
906
- commandOutput: null,
907
- }));
908
- }, [setUi]);
909
- // Handle log level selection
910
- const handleLogLevelSelect = useCallback((level) => {
911
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
912
- buffer.setText('');
913
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
914
- void agent.setLogLevel(level, session.id ? { sessionId: session.id } : undefined);
915
- setMessages((prev) => [
916
- ...prev,
917
- {
918
- id: generateMessageId('system'),
919
- role: 'system',
920
- content: `📊 Log level set to: ${level}`,
921
- timestamp: new Date(),
922
- },
923
- ]);
924
- }, [setUi, setInput, setMessages, agent, buffer, getConfigFilePathOrWarn, session.id]);
925
- // Handle stream mode selection
926
- const handleStreamSelect = useCallback((enabled) => {
927
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
928
- buffer.setText('');
929
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
930
- setMessages((prev) => [
931
- ...prev,
932
- {
933
- id: generateMessageId('system'),
934
- role: 'system',
935
- content: enabled
936
- ? '▶️ Streaming enabled - responses will appear as they are generated'
937
- : '⏸️ Streaming disabled - responses will appear when complete',
938
- timestamp: new Date(),
939
- },
940
- ]);
941
- }, [setUi, setInput, setMessages, buffer]);
942
- // Handle MCP server list actions (select server or add new)
943
- const handleMcpServerListAction = useCallback((action) => {
944
- if (action.type === 'select-server') {
945
- // Show server actions overlay
946
- setUi((prev) => ({
947
- ...prev,
948
- activeOverlay: 'mcp-server-actions',
949
- selectedMcpServer: action.server,
950
- }));
951
- }
952
- else if (action.type === 'add-new') {
953
- // Show add choice overlay
954
- setUi((prev) => ({
955
- ...prev,
956
- activeOverlay: 'mcp-add-choice',
957
- }));
958
- }
959
- }, [setUi]);
960
- // Handle MCP server actions (enable/disable/delete/back)
961
- const handleMcpServerAction = useCallback(async (action) => {
962
- const { server } = action;
963
- if (action.type === 'back') {
964
- // Go back to server list
965
- setUi((prev) => ({
966
- ...prev,
967
- activeOverlay: 'mcp-server-list',
968
- selectedMcpServer: null,
969
- }));
970
- return;
971
- }
972
- // Close overlay and reset input for actual actions
973
- setUi((prev) => ({
974
- ...prev,
975
- activeOverlay: 'none',
976
- selectedMcpServer: null,
977
- mcpWizardServerType: null,
978
- isProcessing: true,
979
- isCancelling: false,
980
- }));
981
- buffer.setText('');
982
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
983
- if (action.type === 'enable' || action.type === 'disable') {
984
- const newEnabled = action.type === 'enable';
985
- setMessages((prev) => [
986
- ...prev,
987
- {
988
- id: generateMessageId('system'),
989
- role: 'system',
990
- content: `${newEnabled ? '▶️' : '⏸️'} ${newEnabled ? 'Enabling' : 'Disabling'} ${server.name}...`,
991
- timestamp: new Date(),
992
- },
993
- ]);
994
- try {
995
- // Enable or disable the server FIRST (before persisting)
996
- // This ensures config only reflects successful state changes
997
- if (newEnabled) {
998
- try {
999
- await agent.enableMcpServer(server.name);
1000
- }
1001
- catch (connectError) {
1002
- // Connection failed - don't persist to config
1003
- setMessages((prev) => [
1004
- ...prev,
1005
- {
1006
- id: generateMessageId('system'),
1007
- role: 'system',
1008
- content: `⚠️ Failed to enable server: ${connectError instanceof Error ? connectError.message : String(connectError)}`,
1009
- timestamp: new Date(),
1010
- },
1011
- ]);
1012
- setUi((prev) => ({
1013
- ...prev,
1014
- isProcessing: false,
1015
- isCancelling: false,
1016
- isThinking: false,
1017
- }));
1018
- return;
1019
- }
1020
- }
1021
- else {
1022
- await agent.disableMcpServer(server.name);
1023
- }
1024
- // Import persistence utilities
1025
- const { updateMcpServerField } = await import('@dexto/agent-management');
1026
- // Persist to config file AFTER successful enable/disable
1027
- const agentPath = getConfigFilePathOrWarn('persist MCP server settings');
1028
- if (!agentPath) {
1029
- return;
1030
- }
1031
- await updateMcpServerField(agentPath, server.name, 'enabled', newEnabled);
1032
- setMessages((prev) => [
1033
- ...prev,
1034
- {
1035
- id: generateMessageId('system'),
1036
- role: 'system',
1037
- content: `✅ ${server.name} ${newEnabled ? 'enabled' : 'disabled'}`,
1038
- timestamp: new Date(),
1039
- },
1040
- ]);
1041
- }
1042
- catch (error) {
1043
- // Format error message with details if available
1044
- let errorMessage = error instanceof Error ? error.message : String(error);
1045
- if (error instanceof DextoValidationError && error.issues.length > 0) {
1046
- const issueDetails = error.issues
1047
- .map((i) => {
1048
- const path = i.path?.length ? `[${i.path.join('.')}] ` : '';
1049
- return ` - ${path}${i.message}`;
1050
- })
1051
- .join('\n');
1052
- errorMessage = `Validation failed:\n${issueDetails}`;
1053
- }
1054
- setMessages((prev) => [
1055
- ...prev,
1056
- {
1057
- id: generateMessageId('error'),
1058
- role: 'system',
1059
- content: `Failed to ${action.type} server: ${errorMessage}`,
1060
- timestamp: new Date(),
1061
- },
1062
- ]);
1063
- }
1064
- }
1065
- else if (action.type === 'authenticate') {
1066
- setMessages((prev) => [
1067
- ...prev,
1068
- {
1069
- id: generateMessageId('system'),
1070
- role: 'system',
1071
- content: `🔐 Authenticating ${server.name}...`,
1072
- timestamp: new Date(),
1073
- },
1074
- ]);
1075
- try {
1076
- await agent.restartMcpServer(server.name);
1077
- setMessages((prev) => [
1078
- ...prev,
1079
- {
1080
- id: generateMessageId('system'),
1081
- role: 'system',
1082
- content: `✅ Authenticated ${server.name}`,
1083
- timestamp: new Date(),
1084
- },
1085
- ]);
1086
- }
1087
- catch (error) {
1088
- setMessages((prev) => [
1089
- ...prev,
1090
- {
1091
- id: generateMessageId('error'),
1092
- role: 'system',
1093
- content: `Failed to authenticate server: ${error instanceof Error ? error.message : String(error)}`,
1094
- timestamp: new Date(),
1095
- },
1096
- ]);
1097
- }
1098
- }
1099
- else if (action.type === 'delete') {
1100
- setMessages((prev) => [
1101
- ...prev,
1102
- {
1103
- id: generateMessageId('system'),
1104
- role: 'system',
1105
- content: `🗑️ Deleting ${server.name}...`,
1106
- timestamp: new Date(),
1107
- },
1108
- ]);
1109
- try {
1110
- // Import persistence utilities
1111
- const { removeMcpServerFromConfig } = await import('@dexto/agent-management');
1112
- // Persist to config file using surgical removal
1113
- const agentPath = getConfigFilePathOrWarn('persist MCP server deletion');
1114
- if (agentPath) {
1115
- await removeMcpServerFromConfig(agentPath, server.name);
1116
- }
1117
- // Also disconnect if connected
1118
- try {
1119
- await agent.removeMcpServer(server.name);
1120
- }
1121
- catch {
1122
- // Ignore - server might not be connected
1123
- }
1124
- setMessages((prev) => [
1125
- ...prev,
1126
- {
1127
- id: generateMessageId('system'),
1128
- role: 'system',
1129
- content: `✅ Deleted ${server.name}`,
1130
- timestamp: new Date(),
1131
- },
1132
- ]);
1133
- }
1134
- catch (error) {
1135
- setMessages((prev) => [
1136
- ...prev,
1137
- {
1138
- id: generateMessageId('error'),
1139
- role: 'system',
1140
- content: `Failed to delete server: ${error instanceof Error ? error.message : String(error)}`,
1141
- timestamp: new Date(),
1142
- },
1143
- ]);
1144
- }
1145
- }
1146
- setUi((prev) => ({
1147
- ...prev,
1148
- isProcessing: false,
1149
- isCancelling: false,
1150
- isThinking: false,
1151
- }));
1152
- }, [setUi, setInput, setMessages, agent, buffer]);
1153
- // Handle MCP add choice (registry/custom/back)
1154
- const handleMcpAddChoice = useCallback((choice) => {
1155
- if (choice === 'back') {
1156
- // Go back to server list
1157
- setUi((prev) => ({
1158
- ...prev,
1159
- activeOverlay: 'mcp-server-list',
1160
- }));
1161
- }
1162
- else if (choice === 'registry') {
1163
- // Show registry selector (McpAddSelector)
1164
- setUi((prev) => ({
1165
- ...prev,
1166
- activeOverlay: 'mcp-add-selector',
1167
- }));
1168
- }
1169
- else if (choice === 'custom') {
1170
- // Show custom type selector
1171
- setUi((prev) => ({
1172
- ...prev,
1173
- activeOverlay: 'mcp-custom-type-selector',
1174
- }));
1175
- }
1176
- }, [setUi]);
1177
- // Handle MCP add selection (presets only)
1178
- const handleMcpAddSelect = useCallback(async (result) => {
1179
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
1180
- buffer.setText('');
1181
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1182
- setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1183
- setMessages((prev) => [
1184
- ...prev,
1185
- {
1186
- id: generateMessageId('system'),
1187
- role: 'system',
1188
- content: `🔌 Connecting to ${result.entry.name}...`,
1189
- timestamp: new Date(),
1190
- },
1191
- ]);
1192
- try {
1193
- const mcpConfig = result.entry.config;
1194
- await agent.addMcpServer(result.entry.id, mcpConfig);
1195
- // Track MCP server connected analytics
1196
- capture('dexto_mcp_server_connected', {
1197
- source: 'cli',
1198
- serverName: result.entry.name,
1199
- transportType: mcpConfig.type,
1200
- });
1201
- setMessages((prev) => [
1202
- ...prev,
1203
- {
1204
- id: generateMessageId('system'),
1205
- role: 'system',
1206
- content: `✅ Connected to ${result.entry.name}`,
1207
- timestamp: new Date(),
1208
- },
1209
- ]);
1210
- }
1211
- catch (error) {
1212
- setMessages((prev) => [
1213
- ...prev,
1214
- {
1215
- id: generateMessageId('system'),
1216
- role: 'system',
1217
- content: `Failed to connect: ${error instanceof Error ? error.message : String(error)}`,
1218
- timestamp: new Date(),
1219
- },
1220
- ]);
1221
- }
1222
- setUi((prev) => ({
1223
- ...prev,
1224
- isProcessing: false,
1225
- isCancelling: false,
1226
- isThinking: false,
1227
- }));
1228
- }, [setUi, setInput, setMessages, agent, buffer]);
1229
- // Handle MCP custom type selection
1230
- const handleMcpCustomTypeSelect = useCallback((serverType) => {
1231
- setUi((prev) => ({
1232
- ...prev,
1233
- mcpWizardServerType: serverType,
1234
- activeOverlay: 'mcp-custom-wizard',
1235
- }));
1236
- }, [setUi]);
1237
- // Handle MCP custom wizard completion
1238
- const handleMcpCustomWizardComplete = useCallback(async (config) => {
1239
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
1240
- buffer.setText('');
1241
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1242
- setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1243
- setMessages((prev) => [
1244
- ...prev,
1245
- {
1246
- id: generateMessageId('system'),
1247
- role: 'system',
1248
- content: `🔌 Connecting to ${config.name}...`,
1249
- timestamp: new Date(),
1250
- },
1251
- ]);
1252
- try {
1253
- // Build the appropriate config based on server type
1254
- let serverConfig;
1255
- if (config.serverType === 'stdio') {
1256
- serverConfig = {
1257
- type: 'stdio',
1258
- command: config.command,
1259
- args: config.args || [],
1260
- };
1261
- }
1262
- else if (config.serverType === 'http') {
1263
- serverConfig = {
1264
- type: 'http',
1265
- url: config.url,
1266
- };
1267
- }
1268
- else {
1269
- // sse
1270
- serverConfig = {
1271
- type: 'sse',
1272
- url: config.url,
1273
- };
1274
- }
1275
- await agent.addMcpServer(config.name, serverConfig);
1276
- // Track MCP server connected analytics
1277
- capture('dexto_mcp_server_connected', {
1278
- source: 'cli',
1279
- serverName: config.name,
1280
- transportType: serverConfig.type,
1281
- });
1282
- setMessages((prev) => [
1283
- ...prev,
1284
- {
1285
- id: generateMessageId('system'),
1286
- role: 'system',
1287
- content: `✅ Connected to ${config.name}`,
1288
- timestamp: new Date(),
1289
- },
1290
- ]);
1291
- }
1292
- catch (error) {
1293
- setMessages((prev) => [
1294
- ...prev,
1295
- {
1296
- id: generateMessageId('system'),
1297
- role: 'system',
1298
- content: `Failed to connect: ${error instanceof Error ? error.message : String(error)}`,
1299
- timestamp: new Date(),
1300
- },
1301
- ]);
1302
- }
1303
- setUi((prev) => ({
1304
- ...prev,
1305
- isProcessing: false,
1306
- isCancelling: false,
1307
- isThinking: false,
1308
- }));
1309
- }, [setUi, setInput, setMessages, agent, buffer]);
1310
- // Handle plugin manager actions
1311
- const handlePluginManagerAction = useCallback((action) => {
1312
- if (action === 'list') {
1313
- setUi((prev) => ({
1314
- ...prev,
1315
- activeOverlay: 'plugin-list',
1316
- }));
1317
- }
1318
- else if (action === 'marketplace') {
1319
- setUi((prev) => ({
1320
- ...prev,
1321
- activeOverlay: 'marketplace-browser',
1322
- }));
1323
- }
1324
- }, [setUi]);
1325
- // Handle plugin selection from plugin list
1326
- const handlePluginSelect = useCallback((plugin) => {
1327
- setSelectedPlugin(plugin);
1328
- setUi((prev) => ({
1329
- ...prev,
1330
- activeOverlay: 'plugin-actions',
1331
- }));
1332
- }, [setUi]);
1333
- // Handle plugin actions (uninstall, back)
1334
- const handlePluginAction = useCallback(async (action) => {
1335
- if (action.type === 'back') {
1336
- setSelectedPlugin(null);
1337
- setUi((prev) => ({
1338
- ...prev,
1339
- activeOverlay: 'plugin-list',
1340
- }));
1341
- return;
1342
- }
1343
- if (action.type === 'uninstall') {
1344
- setUi((prev) => ({ ...prev, activeOverlay: 'none', isProcessing: true }));
1345
- try {
1346
- const { uninstallPlugin, reloadAgentConfigFromFile, enrichAgentConfig } = await import('@dexto/agent-management');
1347
- await uninstallPlugin(action.plugin.name);
1348
- setMessages((prev) => [
1349
- ...prev,
1350
- {
1351
- id: generateMessageId('system'),
1352
- role: 'system',
1353
- content: `Plugin '${action.plugin.name}' has been uninstalled.`,
1354
- timestamp: new Date(),
1355
- },
1356
- ]);
1357
- // Refresh prompts to remove uninstalled plugin skills
1358
- try {
1359
- const agentPath = getConfigFilePathOrWarn('refresh prompts after plugin uninstall');
1360
- if (!agentPath) {
1361
- return;
1362
- }
1363
- const newConfig = await reloadAgentConfigFromFile(agentPath);
1364
- const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1365
- await agent.refreshPrompts(enrichedConfig.prompts);
1366
- }
1367
- catch {
1368
- // Non-critical: prompts will refresh on next agent restart
1369
- }
1370
- }
1371
- catch (error) {
1372
- setMessages((prev) => [
1373
- ...prev,
1374
- {
1375
- id: generateMessageId('error'),
1376
- role: 'system',
1377
- content: `Failed to uninstall plugin: ${error instanceof Error ? error.message : String(error)}`,
1378
- timestamp: new Date(),
1379
- },
1380
- ]);
1381
- }
1382
- setSelectedPlugin(null);
1383
- setUi((prev) => ({ ...prev, isProcessing: false }));
1384
- }
1385
- }, [setUi, setMessages, agent, getConfigFilePathOrWarn]);
1386
- // Handle marketplace browser actions
1387
- const handleMarketplaceBrowserAction = useCallback(async (action) => {
1388
- if (action.type === 'add-marketplace') {
1389
- setUi((prev) => ({ ...prev, activeOverlay: 'marketplace-add' }));
1390
- }
1391
- else if (action.type === 'plugin-installed') {
1392
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
1393
- setMessages((prev) => [
1394
- ...prev,
1395
- {
1396
- id: generateMessageId('system'),
1397
- role: 'system',
1398
- content: `✅ Plugin '${action.pluginName}' installed from ${action.marketplace}`,
1399
- timestamp: new Date(),
1400
- },
1401
- ]);
1402
- // Refresh prompts to include new plugin skills
1403
- try {
1404
- const { reloadAgentConfigFromFile, enrichAgentConfig } = await import('@dexto/agent-management');
1405
- const agentPath = getConfigFilePathOrWarn('refresh prompts after plugin install');
1406
- if (!agentPath) {
1407
- return;
1408
- }
1409
- const newConfig = await reloadAgentConfigFromFile(agentPath);
1410
- const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1411
- await agent.refreshPrompts(enrichedConfig.prompts);
1412
- }
1413
- catch (error) {
1414
- // Non-critical: prompts will refresh on next agent restart
1415
- // Log but don't show error to user
1416
- }
1417
- }
1418
- }, [setUi, setMessages, agent, getConfigFilePathOrWarn]);
1419
- // Handle marketplace add completion
1420
- const handleMarketplaceAddComplete = useCallback((name, pluginCount) => {
1421
- setUi((prev) => ({ ...prev, activeOverlay: 'marketplace-browser' }));
1422
- setMessages((prev) => [
1423
- ...prev,
1424
- {
1425
- id: generateMessageId('system'),
1426
- role: 'system',
1427
- content: `✅ Marketplace '${name}' added (${pluginCount} plugins found)`,
1428
- timestamp: new Date(),
1429
- },
1430
- ]);
1431
- }, [setUi, setMessages]);
1432
- // Handle session subcommand selection
1433
- const handleSessionSubcommandSelect = useCallback(async (action) => {
1434
- if (action === 'switch') {
1435
- setInput((prev) => ({ ...prev, value: '/session switch' }));
1436
- setUi((prev) => ({ ...prev, activeOverlay: 'session-selector' }));
1437
- return;
1438
- }
1439
- setUi((prev) => ({ ...prev, activeOverlay: 'none', mcpWizardServerType: null }));
1440
- buffer.setText('');
1441
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1442
- setUi((prev) => ({ ...prev, isProcessing: true, isCancelling: false }));
1443
- try {
1444
- const { CommandService } = await import('../services/CommandService.js');
1445
- const commandService = new CommandService();
1446
- const result = await commandService.executeCommand('session', [action], agent, session.id || undefined);
1447
- if (result.type === 'output' && result.output) {
1448
- const output = result.output;
1449
- setMessages((prev) => [
1450
- ...prev,
1451
- {
1452
- id: generateMessageId('command'),
1453
- role: 'system',
1454
- content: output,
1455
- timestamp: new Date(),
1456
- },
1457
- ]);
1458
- }
1459
- if (result.type === 'styled' && result.styled) {
1460
- const { fallbackText, styledType, styledData } = result.styled;
1461
- setMessages((prev) => [
1462
- ...prev,
1463
- {
1464
- id: generateMessageId('command'),
1465
- role: 'system',
1466
- content: fallbackText,
1467
- timestamp: new Date(),
1468
- styledType,
1469
- styledData,
1470
- },
1471
- ]);
1472
- }
1473
- setUi((prev) => ({
1474
- ...prev,
1475
- isProcessing: false,
1476
- isCancelling: false,
1477
- isThinking: false,
1478
- }));
1479
- }
1480
- catch (error) {
1481
- setMessages((prev) => [
1482
- ...prev,
1483
- {
1484
- id: generateMessageId('error'),
1485
- role: 'system',
1486
- content: `${error instanceof Error ? error.message : String(error)}`,
1487
- timestamp: new Date(),
1488
- },
1489
- ]);
1490
- setUi((prev) => ({
1491
- ...prev,
1492
- isProcessing: false,
1493
- isCancelling: false,
1494
- isThinking: false,
1495
- }));
1496
- }
1497
- }, [setInput, setUi, setMessages, agent, session.id, buffer]);
1498
- // Handle prompt list actions (select/add/delete)
1499
- const handlePromptListAction = useCallback(async (action) => {
1500
- if (action.type === 'add-prompt') {
1501
- setUi((prev) => ({
1502
- ...prev,
1503
- activeOverlay: 'prompt-add-choice',
1504
- }));
1505
- }
1506
- else if (action.type === 'delete-prompt') {
1507
- setUi((prev) => ({
1508
- ...prev,
1509
- activeOverlay: 'prompt-delete-selector',
1510
- }));
1511
- }
1512
- else if (action.type === 'select-prompt') {
1513
- // Execute the prompt
1514
- const displayName = action.prompt.displayName || action.prompt.name;
1515
- const commandText = `/${displayName}`;
1516
- setUi((prev) => ({
1517
- ...prev,
1518
- activeOverlay: 'none',
1519
- promptAddWizard: null,
1520
- }));
1521
- buffer.setText('');
1522
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1523
- // Route through streaming pipeline
1524
- if (onSubmitPromptCommand) {
1525
- await onSubmitPromptCommand(commandText);
1526
- }
1527
- }
1528
- }, [setUi, setInput, buffer, onSubmitPromptCommand]);
1529
- // Handle prompt list load into input
1530
- const handlePromptLoadIntoInput = useCallback((text) => {
1531
- buffer.setText(text);
1532
- setInput((prev) => ({ ...prev, value: text }));
1533
- setUi((prev) => ({
1534
- ...prev,
1535
- activeOverlay: 'none',
1536
- promptAddWizard: null,
1537
- }));
1538
- }, [buffer, setInput, setUi]);
1539
- // Handle prompt add choice (agent vs shared)
1540
- const handlePromptAddChoice = useCallback((choice) => {
1541
- if (choice === 'back') {
1542
- setUi((prev) => ({
1543
- ...prev,
1544
- activeOverlay: 'prompt-list',
1545
- }));
1546
- }
1547
- else {
1548
- setUi((prev) => ({
1549
- ...prev,
1550
- activeOverlay: 'prompt-add-wizard',
1551
- promptAddWizard: {
1552
- scope: choice,
1553
- step: 'name',
1554
- name: '',
1555
- title: '',
1556
- description: '',
1557
- content: '',
1558
- },
1559
- }));
1560
- }
1561
- }, [setUi]);
1562
- // Handle prompt add wizard completion
1563
- const handlePromptAddComplete = useCallback(async (data) => {
1564
- const scope = ui.promptAddWizard?.scope || 'agent';
1565
- setUi((prev) => ({
1566
- ...prev,
1567
- activeOverlay: 'none',
1568
- promptAddWizard: null,
1569
- }));
1570
- buffer.setText('');
1571
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1572
- setMessages((prev) => [
1573
- ...prev,
1574
- {
1575
- id: generateMessageId('system'),
1576
- role: 'system',
1577
- content: `📝 Creating ${scope === 'shared' ? 'shared' : 'agent'} prompt "${data.name}"...`,
1578
- timestamp: new Date(),
1579
- },
1580
- ]);
1581
- try {
1582
- const { mkdir, writeFile } = await import('fs/promises');
1583
- const { dirname, join } = await import('path');
1584
- // Validate prompt name to prevent path traversal
1585
- const SAFE_NAME_PATTERN = /^[a-z0-9][a-z0-9-_]*$/i;
1586
- if (!SAFE_NAME_PATTERN.test(data.name)) {
1587
- throw new Error(`Invalid prompt name "${data.name}". Names must start with a letter or number and contain only letters, numbers, hyphens, and underscores.`);
1588
- }
1589
- // Build frontmatter
1590
- const frontmatterLines = [
1591
- '---',
1592
- `id: ${data.name}`,
1593
- data.title ? `title: "${data.title}"` : null,
1594
- data.description ? `description: "${data.description}"` : null,
1595
- data.argumentHint ? `argument-hint: ${data.argumentHint}` : null,
1596
- '---',
1597
- ].filter(Boolean);
1598
- const fileContent = `${frontmatterLines.join('\n')}\n\n${data.content}\n`;
1599
- let filePath;
1600
- if (scope === 'shared') {
1601
- // Create in commands directory based on execution context
1602
- // Matches discovery logic in discoverCommandPrompts()
1603
- const { getExecutionContext, findDextoSourceRoot, findDextoProjectRoot, getDextoGlobalPath, } = await import('@dexto/agent-management');
1604
- const context = getExecutionContext();
1605
- let commandsDir;
1606
- if (context === 'dexto-source') {
1607
- const isDevMode = process.env.DEXTO_DEV_MODE === 'true';
1608
- if (isDevMode) {
1609
- const sourceRoot = findDextoSourceRoot();
1610
- commandsDir = sourceRoot
1611
- ? join(sourceRoot, 'commands')
1612
- : getDextoGlobalPath('commands');
1613
- }
1614
- else {
1615
- commandsDir = getDextoGlobalPath('commands');
1616
- }
1617
- }
1618
- else if (context === 'dexto-project') {
1619
- const projectRoot = findDextoProjectRoot();
1620
- commandsDir = projectRoot
1621
- ? join(projectRoot, 'commands')
1622
- : getDextoGlobalPath('commands');
1623
- }
1624
- else {
1625
- // global-cli
1626
- commandsDir = getDextoGlobalPath('commands');
1627
- }
1628
- filePath = join(commandsDir, `${data.name}.md`);
1629
- await mkdir(commandsDir, { recursive: true });
1630
- await writeFile(filePath, fileContent, 'utf-8');
1631
- // Re-discover commands and refresh with enriched prompts
1632
- const { reloadAgentConfigFromFile, enrichAgentConfig } = await import('@dexto/agent-management');
1633
- const agentPath = getConfigFilePathOrWarn('refresh prompts after creating shared prompt');
1634
- if (!agentPath) {
1635
- return;
1636
- }
1637
- const newConfig = await reloadAgentConfigFromFile(agentPath);
1638
- const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1639
- await agent.refreshPrompts(enrichedConfig.prompts);
1640
- }
1641
- else {
1642
- // Create in agent's prompts directory
1643
- const agentPath = getConfigFilePathOrWarn('create prompt in agent prompts directory');
1644
- if (!agentPath) {
1645
- return;
1646
- }
1647
- const agentDir = dirname(agentPath);
1648
- const promptsDir = join(agentDir, 'prompts');
1649
- filePath = join(promptsDir, `${data.name}.md`);
1650
- await mkdir(promptsDir, { recursive: true });
1651
- await writeFile(filePath, fileContent, 'utf-8');
1652
- // Add file reference to agent config using surgical helper
1653
- const { addPromptToAgentConfig, reloadAgentConfigFromFile, enrichAgentConfig, } = await import('@dexto/agent-management');
1654
- await addPromptToAgentConfig(agentPath, {
1655
- type: 'file',
1656
- file: `\${{dexto.agent_dir}}/prompts/${data.name}.md`,
1657
- });
1658
- // Reload config from disk, enrich to include discovered commands, then refresh
1659
- const newConfig = await reloadAgentConfigFromFile(agentPath);
1660
- const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1661
- await agent.refreshPrompts(enrichedConfig.prompts);
1662
- }
1663
- setMessages((prev) => [
1664
- ...prev,
1665
- {
1666
- id: generateMessageId('system'),
1667
- role: 'system',
1668
- content: `✅ Created prompt "${data.name}"\n📄 File: ${filePath}\n\nUse /${data.name} to run it.`,
1669
- timestamp: new Date(),
1670
- },
1671
- ]);
1672
- }
1673
- catch (error) {
1674
- setMessages((prev) => [
1675
- ...prev,
1676
- {
1677
- id: generateMessageId('error'),
1678
- role: 'system',
1679
- content: `Failed to create prompt: ${error instanceof Error ? error.message : String(error)}`,
1680
- timestamp: new Date(),
1681
- },
1682
- ]);
1683
- }
1684
- }, [
1685
- ui.promptAddWizard?.scope,
1686
- setUi,
1687
- setInput,
1688
- setMessages,
1689
- buffer,
1690
- agent,
1691
- getConfigFilePathOrWarn,
1692
- ]);
1693
- // Handle prompt delete
1694
- const handlePromptDelete = useCallback(async (deletable) => {
1695
- const displayName = deletable.prompt.displayName || deletable.prompt.name;
1696
- setMessages((prev) => [
1697
- ...prev,
1698
- {
1699
- id: generateMessageId('system'),
1700
- role: 'system',
1701
- content: `🗑️ Deleting prompt "${displayName}"...`,
1702
- timestamp: new Date(),
1703
- },
1704
- ]);
1705
- try {
1706
- const { deletePromptByMetadata, reloadAgentConfigFromFile, enrichAgentConfig } = await import('@dexto/agent-management');
1707
- const agentPath = getConfigFilePathOrWarn('delete prompt');
1708
- if (!agentPath) {
1709
- return;
1710
- }
1711
- // Use the higher-level delete function that handles file + config
1712
- // Pass full metadata including originalId for inline prompt deletion
1713
- const promptMetadata = deletable.prompt.metadata;
1714
- const result = await deletePromptByMetadata(agentPath, {
1715
- name: deletable.prompt.name,
1716
- metadata: {
1717
- filePath: deletable.filePath,
1718
- originalId: promptMetadata?.originalId,
1719
- },
1720
- }, { deleteFile: true });
1721
- if (!result.success) {
1722
- throw new Error(result.error || 'Failed to delete prompt');
1723
- }
1724
- // Reload config from disk, enrich to include discovered commands, then refresh
1725
- const newConfig = await reloadAgentConfigFromFile(agentPath);
1726
- const enrichedConfig = enrichAgentConfig(newConfig, agentPath);
1727
- await agent.refreshPrompts(enrichedConfig.prompts);
1728
- setMessages((prev) => [
1729
- ...prev,
1730
- {
1731
- id: generateMessageId('system'),
1732
- role: 'system',
1733
- content: `✅ Deleted prompt "${displayName}"`,
1734
- timestamp: new Date(),
1735
- },
1736
- ]);
1737
- // Return to prompt list and refresh
1738
- setUi((prev) => ({
1739
- ...prev,
1740
- activeOverlay: 'prompt-list',
1741
- }));
1742
- promptListRef.current?.refresh();
1743
- }
1744
- catch (error) {
1745
- setMessages((prev) => [
1746
- ...prev,
1747
- {
1748
- id: generateMessageId('error'),
1749
- role: 'system',
1750
- content: `Failed to delete prompt: ${error instanceof Error ? error.message : String(error)}`,
1751
- timestamp: new Date(),
1752
- },
1753
- ]);
1754
- // Return to prompt list even on error
1755
- setUi((prev) => ({
1756
- ...prev,
1757
- activeOverlay: 'prompt-list',
1758
- }));
1759
- }
1760
- }, [setUi, setMessages, agent, getConfigFilePathOrWarn]);
1761
- // Handle prompt add wizard close
1762
- const handlePromptAddWizardClose = useCallback(() => {
1763
- setUi((prev) => ({
1764
- ...prev,
1765
- activeOverlay: 'prompt-add-choice',
1766
- promptAddWizard: null,
1767
- }));
1768
- }, [setUi]);
1769
- // Handle prompt delete selector close
1770
- const handlePromptDeleteClose = useCallback(() => {
1771
- setUi((prev) => ({
1772
- ...prev,
1773
- activeOverlay: 'prompt-list',
1774
- }));
1775
- // Refresh prompt list to show updated list
1776
- promptListRef.current?.refresh();
1777
- }, [setUi]);
1778
- // Handle prompt add choice close
1779
- const handlePromptAddChoiceClose = useCallback(() => {
1780
- setUi((prev) => ({
1781
- ...prev,
1782
- activeOverlay: 'prompt-list',
1783
- }));
1784
- }, [setUi]);
1785
- // State for current session title (for rename overlay)
1786
- const [currentSessionTitle, setCurrentSessionTitle] = useState(undefined);
1787
- // Fetch current session title when rename overlay opens
1788
- React.useEffect(() => {
1789
- if (ui.activeOverlay === 'session-rename' && session.id) {
1790
- void agent.getSessionTitle(session.id).then(setCurrentSessionTitle);
1791
- }
1792
- }, [ui.activeOverlay, session.id, agent]);
1793
- // Handle session rename
1794
- const handleSessionRename = useCallback(async (newTitle) => {
1795
- if (!session.id)
1796
- return;
1797
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
1798
- buffer.setText('');
1799
- setInput((prev) => ({ ...prev, historyIndex: -1 }));
1800
- try {
1801
- await agent.setSessionTitle(session.id, newTitle);
1802
- setMessages((prev) => [
1803
- ...prev,
1804
- {
1805
- id: generateMessageId('system'),
1806
- role: 'system',
1807
- content: `✅ Session renamed to: ${newTitle}`,
1808
- timestamp: new Date(),
1809
- },
1810
- ]);
1811
- }
1812
- catch (error) {
1813
- setMessages((prev) => [
1814
- ...prev,
1815
- {
1816
- id: generateMessageId('error'),
1817
- role: 'system',
1818
- content: `Failed to rename session: ${error instanceof Error ? error.message : String(error)}`,
1819
- timestamp: new Date(),
1820
- },
1821
- ]);
1822
- }
1823
- }, [session.id, setUi, setInput, setMessages, agent, buffer]);
1824
- // Handle session rename close
1825
- const handleSessionRenameClose = useCallback(() => {
1826
- setUi((prev) => ({ ...prev, activeOverlay: 'none' }));
1827
- }, [setUi]);
1828
- const hideCliChrome = shouldHideCliChrome(ui.activeOverlay, approval);
1829
- const overlayContent = (_jsxs(_Fragment, { children: [approval && (_jsx(ApprovalPrompt, { ref: approvalRef, approval: approval, onApprove: handleApprove, onDeny: handleDeny, onCancel: handleCancelApproval })), ui.activeOverlay === 'slash-autocomplete' && (_jsx(Box, { marginTop: 1, children: _jsx(SlashCommandAutocomplete, { ref: slashAutocompleteRef, isVisible: true, searchQuery: input.value, onSelectPrompt: handlePromptSelect, onSelectSystemCommand: handleSystemCommandSelect, onLoadIntoInput: handleLoadIntoInput, onSubmitRaw: onSubmitPromptCommand, onClose: handleClose, agent: agent }) })), ui.activeOverlay === 'resource-autocomplete' && (_jsx(Box, { marginTop: 1, children: _jsx(ResourceAutocomplete, { ref: resourceAutocompleteRef, isVisible: true, searchQuery: input.value, onSelectResource: handleResourceSelect, onLoadIntoInput: handleLoadIntoInput, onClose: handleClose, agent: agent }) })), ui.activeOverlay === 'model-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(ModelSelectorRefactored, { ref: modelSelectorRef, isVisible: true, onSelectModel: handleModelSelect, onSetDefaultModel: handleSetDefaultModel, onClose: handleClose, onAddCustomModel: handleAddCustomModel, onEditCustomModel: handleEditCustomModel, agent: agent }) })), ui.activeOverlay === 'session-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(SessionSelectorRefactored, { ref: sessionSelectorRef, isVisible: true, onSelectSession: handleSessionSelect, onClose: handleClose, agent: agent, currentSessionId: session.id || undefined }) })), ui.activeOverlay === 'log-level-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(LogLevelSelector, { ref: logLevelSelectorRef, isVisible: true, onSelect: handleLogLevelSelect, onClose: handleClose, agent: agent, sessionId: session.id }) })), ui.activeOverlay === 'stream-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(StreamSelector, { ref: streamSelectorRef, isVisible: true, onSelect: handleStreamSelect, onClose: handleClose }) })), ui.activeOverlay === 'sounds-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(SoundsSelector, { ref: soundsSelectorRef, isVisible: true, onClose: handleClose }) })), ui.activeOverlay === 'tool-browser' && (_jsx(Box, { marginTop: 1, children: _jsx(ToolBrowser, { ref: toolBrowserRef, isVisible: true, onClose: handleClose, agent: agent, sessionId: session.id }) })), ui.activeOverlay === 'command-output' && ui.commandOutput && (_jsx(Box, { marginTop: 1, children: _jsx(CommandOutputOverlay, { ref: commandOutputRef, isVisible: true, title: ui.commandOutput.title, content: ui.commandOutput.content, onClose: handleClose }) })), ui.activeOverlay === 'mcp-server-list' && (_jsx(Box, { marginTop: 1, children: _jsx(McpServerList, { ref: mcpServerListRef, isVisible: true, onAction: handleMcpServerListAction, onClose: handleClose, agent: agent }) })), ui.activeOverlay === 'mcp-server-actions' && ui.selectedMcpServer && (_jsx(Box, { marginTop: 1, children: _jsx(McpServerActions, { ref: mcpServerActionsRef, isVisible: true, server: ui.selectedMcpServer, onAction: handleMcpServerAction, onClose: handleClose }) })), ui.activeOverlay === 'mcp-add-choice' && (_jsx(Box, { marginTop: 1, children: _jsx(McpAddChoice, { ref: mcpAddChoiceRef, isVisible: true, onSelect: handleMcpAddChoice, onClose: handleClose }) })), ui.activeOverlay === 'mcp-add-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(McpAddSelector, { ref: mcpAddSelectorRef, isVisible: true, onSelect: handleMcpAddSelect, onClose: handleClose }) })), ui.activeOverlay === 'mcp-custom-type-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(McpCustomTypeSelector, { ref: mcpCustomTypeSelectorRef, isVisible: true, onSelect: handleMcpCustomTypeSelect, onClose: handleClose }) })), ui.activeOverlay === 'mcp-custom-wizard' && ui.mcpWizardServerType && (_jsx(McpCustomWizard, { ref: mcpCustomWizardRef, isVisible: true, serverType: ui.mcpWizardServerType, onComplete: handleMcpCustomWizardComplete, onClose: handleClose })), ui.activeOverlay === 'custom-model-wizard' && (_jsx(CustomModelWizard, { ref: customModelWizardRef, isVisible: true, onComplete: handleCustomModelComplete, onClose: () => {
1830
- setEditingModel(null);
1831
- handleClose();
1832
- }, initialModel: editingModel })), ui.activeOverlay === 'plugin-manager' && (_jsx(Box, { marginTop: 1, children: _jsx(PluginManager, { ref: pluginManagerRef, isVisible: true, onAction: handlePluginManagerAction, onClose: handleClose }) })), ui.activeOverlay === 'plugin-list' && (_jsx(Box, { marginTop: 1, children: _jsx(PluginList, { ref: pluginListRef, isVisible: true, onPluginSelect: handlePluginSelect, onClose: handleClose }) })), ui.activeOverlay === 'plugin-actions' && (_jsx(Box, { marginTop: 1, children: _jsx(PluginActions, { ref: pluginActionsRef, isVisible: true, plugin: selectedPlugin, onAction: handlePluginAction, onClose: () => {
1833
- setSelectedPlugin(null);
1834
- setUi((prev) => ({
1835
- ...prev,
1836
- activeOverlay: 'plugin-list',
1837
- }));
1838
- } }) })), ui.activeOverlay === 'marketplace-browser' && (_jsx(Box, { marginTop: 1, children: _jsx(MarketplaceBrowser, { ref: marketplaceBrowserRef, isVisible: true, onAction: handleMarketplaceBrowserAction, onClose: handleClose }) })), ui.activeOverlay === 'marketplace-add' && (_jsx(Box, { marginTop: 1, children: _jsx(MarketplaceAddPrompt, { ref: marketplaceAddPromptRef, isVisible: true, onComplete: handleMarketplaceAddComplete, onClose: () => setUi((prev) => ({ ...prev, activeOverlay: 'marketplace-browser' })) }) })), ui.activeOverlay === 'session-subcommand-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(SessionSubcommandSelector, { ref: sessionSubcommandSelectorRef, isVisible: true, onSelect: handleSessionSubcommandSelect, onClose: handleClose }) })), ui.activeOverlay === 'api-key-input' && ui.pendingModelSwitch && (_jsx(ApiKeyInput, { ref: apiKeyInputRef, isVisible: true, provider: ui.pendingModelSwitch.provider, onSaved: handleApiKeySaved, onClose: handleApiKeyClose })), ui.activeOverlay === 'search' && (_jsx(SearchOverlay, { ref: searchOverlayRef, isVisible: true, agent: agent, onClose: handleClose, onSelectResult: handleSearchResultSelect })), ui.activeOverlay === 'prompt-list' && (_jsx(Box, { marginTop: 1, children: _jsx(PromptList, { ref: promptListRef, isVisible: true, onAction: handlePromptListAction, onLoadIntoInput: handlePromptLoadIntoInput, onClose: handleClose, agent: agent }) })), ui.activeOverlay === 'prompt-add-choice' && (_jsx(Box, { marginTop: 1, children: _jsx(PromptAddChoice, { ref: promptAddChoiceRef, isVisible: true, onSelect: handlePromptAddChoice, onClose: handlePromptAddChoiceClose }) })), ui.activeOverlay === 'prompt-add-wizard' && ui.promptAddWizard && (_jsx(PromptAddWizard, { ref: promptAddWizardRef, isVisible: true, scope: ui.promptAddWizard.scope, onComplete: handlePromptAddComplete, onClose: handlePromptAddWizardClose })), ui.activeOverlay === 'prompt-delete-selector' && (_jsx(Box, { marginTop: 1, children: _jsx(PromptDeleteSelector, { ref: promptDeleteSelectorRef, isVisible: true, onDelete: handlePromptDelete, onClose: handlePromptDeleteClose, agent: agent }) })), ui.activeOverlay === 'session-rename' && (_jsx(SessionRenameOverlay, { ref: sessionRenameRef, isVisible: true, currentTitle: currentSessionTitle, onRename: handleSessionRename, onClose: handleSessionRenameClose })), ui.activeOverlay === 'context-stats' && session.id && (_jsx(Box, { marginTop: 1, children: _jsx(ContextStatsOverlay, { ref: contextStatsRef, isVisible: true, onClose: handleClose, agent: agent, sessionId: session.id ?? '' }) })), ui.activeOverlay === 'export-wizard' && (_jsx(ExportWizard, { ref: exportWizardRef, isVisible: true, agent: agent, sessionId: session.id, onClose: handleClose }))] }));
1839
- return hideCliChrome ? (_jsx(FocusOverlayFrame, { children: overlayContent })) : (overlayContent);
1840
- });