@nanocollective/nanocoder 1.22.5 → 1.24.0

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 (590) hide show
  1. package/LICENSE.md +1 -15
  2. package/README.md +25 -821
  3. package/assets/nanocoder-vscode.vsix +0 -0
  4. package/dist/ai-sdk-client/ai-sdk-client.d.ts +3 -2
  5. package/dist/ai-sdk-client/ai-sdk-client.d.ts.map +1 -1
  6. package/dist/ai-sdk-client/ai-sdk-client.js +16 -2
  7. package/dist/ai-sdk-client/ai-sdk-client.js.map +1 -1
  8. package/dist/ai-sdk-client/chat/chat-handler.d.ts +2 -1
  9. package/dist/ai-sdk-client/chat/chat-handler.d.ts.map +1 -1
  10. package/dist/ai-sdk-client/chat/chat-handler.js +37 -70
  11. package/dist/ai-sdk-client/chat/chat-handler.js.map +1 -1
  12. package/dist/ai-sdk-client/chat/streaming-handler.d.ts +2 -2
  13. package/dist/ai-sdk-client/chat/streaming-handler.d.ts.map +1 -1
  14. package/dist/ai-sdk-client/chat/streaming-handler.js +4 -23
  15. package/dist/ai-sdk-client/chat/streaming-handler.js.map +1 -1
  16. package/dist/ai-sdk-client/error-handling/error-parser.d.ts.map +1 -1
  17. package/dist/ai-sdk-client/error-handling/error-parser.js +11 -3
  18. package/dist/ai-sdk-client/error-handling/error-parser.js.map +1 -1
  19. package/dist/ai-sdk-client/providers/provider-factory.d.ts +2 -1
  20. package/dist/ai-sdk-client/providers/provider-factory.d.ts.map +1 -1
  21. package/dist/ai-sdk-client/providers/provider-factory.js +55 -0
  22. package/dist/ai-sdk-client/providers/provider-factory.js.map +1 -1
  23. package/dist/app/App.d.ts +1 -1
  24. package/dist/app/App.d.ts.map +1 -1
  25. package/dist/app/App.js +148 -37
  26. package/dist/app/App.js.map +1 -1
  27. package/dist/app/components/chat-input.d.ts +9 -1
  28. package/dist/app/components/chat-input.d.ts.map +1 -1
  29. package/dist/app/components/chat-input.js +11 -8
  30. package/dist/app/components/chat-input.js.map +1 -1
  31. package/dist/app/components/modal-selectors.d.ts +6 -7
  32. package/dist/app/components/modal-selectors.d.ts.map +1 -1
  33. package/dist/app/components/modal-selectors.js +11 -7
  34. package/dist/app/components/modal-selectors.js.map +1 -1
  35. package/dist/app/components/settings-selector.d.ts.map +1 -1
  36. package/dist/app/components/settings-selector.js +3 -3
  37. package/dist/app/components/settings-selector.js.map +1 -1
  38. package/dist/app/helpers.d.ts.map +1 -1
  39. package/dist/app/helpers.js +2 -4
  40. package/dist/app/helpers.js.map +1 -1
  41. package/dist/app/index.d.ts +0 -1
  42. package/dist/app/index.d.ts.map +1 -1
  43. package/dist/app/index.js +0 -1
  44. package/dist/app/index.js.map +1 -1
  45. package/dist/app/types.d.ts +2 -0
  46. package/dist/app/types.d.ts.map +1 -1
  47. package/dist/app/utils/app-util.d.ts +1 -0
  48. package/dist/app/utils/app-util.d.ts.map +1 -1
  49. package/dist/app/utils/app-util.js +69 -204
  50. package/dist/app/utils/app-util.js.map +1 -1
  51. package/dist/app/utils/handlers/compact-handler.d.ts +6 -0
  52. package/dist/app/utils/handlers/compact-handler.d.ts.map +1 -0
  53. package/dist/app/utils/handlers/compact-handler.js +148 -0
  54. package/dist/app/utils/handlers/compact-handler.js.map +1 -0
  55. package/dist/app/utils/handlers/context-max-handler.d.ts +11 -0
  56. package/dist/app/utils/handlers/context-max-handler.d.ts.map +1 -0
  57. package/dist/app/utils/handlers/context-max-handler.js +102 -0
  58. package/dist/app/utils/handlers/context-max-handler.js.map +1 -0
  59. package/dist/app/utils/handlers/create-handler.d.ts +17 -0
  60. package/dist/app/utils/handlers/create-handler.d.ts.map +1 -0
  61. package/dist/app/utils/handlers/create-handler.js +112 -0
  62. package/dist/app/utils/handlers/create-handler.js.map +1 -0
  63. package/dist/app/utils/handlers/session-handler.d.ts +8 -0
  64. package/dist/app/utils/handlers/session-handler.d.ts.map +1 -0
  65. package/dist/app/utils/handlers/session-handler.js +99 -0
  66. package/dist/app/utils/handlers/session-handler.js.map +1 -0
  67. package/dist/auth/github-copilot.d.ts +44 -0
  68. package/dist/auth/github-copilot.d.ts.map +1 -0
  69. package/dist/auth/github-copilot.js +178 -0
  70. package/dist/auth/github-copilot.js.map +1 -0
  71. package/dist/cli.js +64 -3
  72. package/dist/cli.js.map +1 -1
  73. package/dist/client-factory.d.ts +1 -1
  74. package/dist/client-factory.d.ts.map +1 -1
  75. package/dist/client-factory.js +42 -10
  76. package/dist/client-factory.js.map +1 -1
  77. package/dist/commands/compact.d.ts +1 -6
  78. package/dist/commands/compact.d.ts.map +1 -1
  79. package/dist/commands/compact.js +2 -13
  80. package/dist/commands/compact.js.map +1 -1
  81. package/dist/commands/context-max.d.ts +14 -0
  82. package/dist/commands/context-max.d.ts.map +1 -0
  83. package/dist/commands/context-max.js +15 -0
  84. package/dist/commands/context-max.js.map +1 -0
  85. package/dist/commands/copilot-login-command.d.ts +3 -0
  86. package/dist/commands/copilot-login-command.d.ts.map +1 -0
  87. package/dist/commands/copilot-login-command.js +9 -0
  88. package/dist/commands/copilot-login-command.js.map +1 -0
  89. package/dist/commands/copilot-login.d.ts +9 -0
  90. package/dist/commands/copilot-login.d.ts.map +1 -0
  91. package/dist/commands/copilot-login.js +70 -0
  92. package/dist/commands/copilot-login.js.map +1 -0
  93. package/dist/commands/create-stub-command.d.ts +8 -0
  94. package/dist/commands/create-stub-command.d.ts.map +1 -0
  95. package/dist/commands/create-stub-command.js +14 -0
  96. package/dist/commands/create-stub-command.js.map +1 -0
  97. package/dist/commands/custom-commands.d.ts.map +1 -1
  98. package/dist/commands/custom-commands.js +88 -4
  99. package/dist/commands/custom-commands.js.map +1 -1
  100. package/dist/commands/exit.d.ts.map +1 -1
  101. package/dist/commands/exit.js +5 -8
  102. package/dist/commands/exit.js.map +1 -1
  103. package/dist/commands/explorer.d.ts +1 -2
  104. package/dist/commands/explorer.d.ts.map +1 -1
  105. package/dist/commands/explorer.js +2 -9
  106. package/dist/commands/explorer.js.map +1 -1
  107. package/dist/commands/help.d.ts.map +1 -1
  108. package/dist/commands/help.js +1 -1
  109. package/dist/commands/help.js.map +1 -1
  110. package/dist/commands/ide.d.ts +2 -0
  111. package/dist/commands/ide.d.ts.map +1 -0
  112. package/dist/commands/ide.js +3 -0
  113. package/dist/commands/ide.js.map +1 -0
  114. package/dist/commands/index.d.ts +5 -0
  115. package/dist/commands/index.d.ts.map +1 -1
  116. package/dist/commands/index.js +5 -0
  117. package/dist/commands/index.js.map +1 -1
  118. package/dist/commands/init.d.ts.map +1 -1
  119. package/dist/commands/init.js +2 -1
  120. package/dist/commands/init.js.map +1 -1
  121. package/dist/commands/model.d.ts +1 -2
  122. package/dist/commands/model.d.ts.map +1 -1
  123. package/dist/commands/model.js +2 -10
  124. package/dist/commands/model.js.map +1 -1
  125. package/dist/commands/provider.d.ts +1 -2
  126. package/dist/commands/provider.d.ts.map +1 -1
  127. package/dist/commands/provider.js +2 -10
  128. package/dist/commands/provider.js.map +1 -1
  129. package/dist/commands/resume.d.ts +8 -0
  130. package/dist/commands/resume.d.ts.map +1 -0
  131. package/dist/commands/resume.js +11 -0
  132. package/dist/commands/resume.js.map +1 -0
  133. package/dist/commands/schedule.d.ts +3 -0
  134. package/dist/commands/schedule.d.ts.map +1 -0
  135. package/dist/commands/schedule.js +177 -0
  136. package/dist/commands/schedule.js.map +1 -0
  137. package/dist/commands/settings.d.ts +1 -2
  138. package/dist/commands/settings.d.ts.map +1 -1
  139. package/dist/commands/settings.js +2 -10
  140. package/dist/commands/settings.js.map +1 -1
  141. package/dist/commands/status.d.ts +1 -2
  142. package/dist/commands/status.d.ts.map +1 -1
  143. package/dist/commands/status.js +2 -10
  144. package/dist/commands/status.js.map +1 -1
  145. package/dist/commands/usage.d.ts.map +1 -1
  146. package/dist/commands/usage.js +4 -3
  147. package/dist/commands/usage.js.map +1 -1
  148. package/dist/components/assistant-message.d.ts.map +1 -1
  149. package/dist/components/assistant-message.js +2 -27
  150. package/dist/components/assistant-message.js.map +1 -1
  151. package/dist/components/development-mode-indicator.d.ts +3 -2
  152. package/dist/components/development-mode-indicator.d.ts.map +1 -1
  153. package/dist/components/development-mode-indicator.js +23 -9
  154. package/dist/components/development-mode-indicator.js.map +1 -1
  155. package/dist/components/ide-selector.d.ts +7 -0
  156. package/dist/components/ide-selector.d.ts.map +1 -0
  157. package/dist/components/ide-selector.js +17 -0
  158. package/dist/components/ide-selector.js.map +1 -0
  159. package/dist/components/provider-selector.d.ts.map +1 -1
  160. package/dist/components/provider-selector.js +4 -3
  161. package/dist/components/provider-selector.js.map +1 -1
  162. package/dist/components/question-prompt.d.ts +8 -0
  163. package/dist/components/question-prompt.d.ts.map +1 -0
  164. package/dist/components/question-prompt.js +58 -0
  165. package/dist/components/question-prompt.js.map +1 -0
  166. package/dist/components/scheduler-view.d.ts +14 -0
  167. package/dist/components/scheduler-view.d.ts.map +1 -0
  168. package/dist/components/scheduler-view.js +17 -0
  169. package/dist/components/scheduler-view.js.map +1 -0
  170. package/dist/components/session-selector.d.ts +12 -0
  171. package/dist/components/session-selector.d.ts.map +1 -0
  172. package/dist/components/session-selector.js +108 -0
  173. package/dist/components/session-selector.js.map +1 -0
  174. package/dist/components/text-input.d.ts +13 -0
  175. package/dist/components/text-input.d.ts.map +1 -0
  176. package/dist/components/text-input.js +175 -0
  177. package/dist/components/text-input.js.map +1 -0
  178. package/dist/components/tool-confirmation.d.ts.map +1 -1
  179. package/dist/components/tool-confirmation.js +9 -6
  180. package/dist/components/tool-confirmation.js.map +1 -1
  181. package/dist/components/ui/styled-title.js +2 -2
  182. package/dist/components/ui/styled-title.js.map +1 -1
  183. package/dist/components/user-input.d.ts +4 -1
  184. package/dist/components/user-input.d.ts.map +1 -1
  185. package/dist/components/user-input.js +29 -24
  186. package/dist/components/user-input.js.map +1 -1
  187. package/dist/components/user-message.d.ts.map +1 -1
  188. package/dist/components/user-message.js +1 -23
  189. package/dist/components/user-message.js.map +1 -1
  190. package/dist/components/vscode-extension-prompt.d.ts +6 -1
  191. package/dist/components/vscode-extension-prompt.d.ts.map +1 -1
  192. package/dist/components/vscode-extension-prompt.js +80 -36
  193. package/dist/components/vscode-extension-prompt.js.map +1 -1
  194. package/dist/config/copilot-credentials.d.ts +27 -0
  195. package/dist/config/copilot-credentials.d.ts.map +1 -0
  196. package/dist/config/copilot-credentials.js +81 -0
  197. package/dist/config/copilot-credentials.js.map +1 -0
  198. package/dist/config/index.d.ts +0 -2
  199. package/dist/config/index.d.ts.map +1 -1
  200. package/dist/config/index.js +63 -27
  201. package/dist/config/index.js.map +1 -1
  202. package/dist/config/mcp-config-loader.d.ts +2 -3
  203. package/dist/config/mcp-config-loader.d.ts.map +1 -1
  204. package/dist/config/mcp-config-loader.js +136 -181
  205. package/dist/config/mcp-config-loader.js.map +1 -1
  206. package/dist/config/nanocoder-tools-config.js +2 -2
  207. package/dist/config/nanocoder-tools-config.js.map +1 -1
  208. package/dist/config/themes.d.ts.map +1 -1
  209. package/dist/config/themes.js +9 -746
  210. package/dist/config/themes.js.map +1 -1
  211. package/dist/config/validation.d.ts.map +1 -1
  212. package/dist/config/validation.js +0 -19
  213. package/dist/config/validation.js.map +1 -1
  214. package/dist/custom-commands/command-integration.d.ts +24 -0
  215. package/dist/custom-commands/command-integration.d.ts.map +1 -0
  216. package/dist/custom-commands/command-integration.js +68 -0
  217. package/dist/custom-commands/command-integration.js.map +1 -0
  218. package/dist/custom-commands/executor.d.ts.map +1 -1
  219. package/dist/custom-commands/executor.js +12 -2
  220. package/dist/custom-commands/executor.js.map +1 -1
  221. package/dist/custom-commands/loader.d.ts +33 -5
  222. package/dist/custom-commands/loader.d.ts.map +1 -1
  223. package/dist/custom-commands/loader.js +191 -18
  224. package/dist/custom-commands/loader.js.map +1 -1
  225. package/dist/custom-commands/parser.d.ts.map +1 -1
  226. package/dist/custom-commands/parser.js +106 -48
  227. package/dist/custom-commands/parser.js.map +1 -1
  228. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts +6 -1
  229. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts.map +1 -1
  230. package/dist/hooks/chat-handler/conversation/conversation-loop.js +89 -76
  231. package/dist/hooks/chat-handler/conversation/conversation-loop.js.map +1 -1
  232. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts +7 -2
  233. package/dist/hooks/chat-handler/conversation/tool-executor.d.ts.map +1 -1
  234. package/dist/hooks/chat-handler/conversation/tool-executor.js +109 -41
  235. package/dist/hooks/chat-handler/conversation/tool-executor.js.map +1 -1
  236. package/dist/hooks/chat-handler/types.d.ts +6 -1
  237. package/dist/hooks/chat-handler/types.d.ts.map +1 -1
  238. package/dist/hooks/chat-handler/useChatHandler.d.ts +1 -1
  239. package/dist/hooks/chat-handler/useChatHandler.d.ts.map +1 -1
  240. package/dist/hooks/chat-handler/useChatHandler.js +19 -5
  241. package/dist/hooks/chat-handler/useChatHandler.js.map +1 -1
  242. package/dist/hooks/useAppHandlers.d.ts +10 -1
  243. package/dist/hooks/useAppHandlers.d.ts.map +1 -1
  244. package/dist/hooks/useAppHandlers.js +124 -13
  245. package/dist/hooks/useAppHandlers.js.map +1 -1
  246. package/dist/hooks/useAppInitialization.d.ts +5 -3
  247. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  248. package/dist/hooks/useAppInitialization.js +54 -30
  249. package/dist/hooks/useAppInitialization.js.map +1 -1
  250. package/dist/hooks/useAppState.d.ts +27 -7
  251. package/dist/hooks/useAppState.d.ts.map +1 -1
  252. package/dist/hooks/useAppState.js +54 -22
  253. package/dist/hooks/useAppState.js.map +1 -1
  254. package/dist/hooks/useContextPercentage.d.ts +17 -0
  255. package/dist/hooks/useContextPercentage.d.ts.map +1 -0
  256. package/dist/hooks/useContextPercentage.js +71 -0
  257. package/dist/hooks/useContextPercentage.js.map +1 -0
  258. package/dist/hooks/useModeHandlers.d.ts +9 -12
  259. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  260. package/dist/hooks/useModeHandlers.js +31 -91
  261. package/dist/hooks/useModeHandlers.js.map +1 -1
  262. package/dist/hooks/useNonInteractiveMode.d.ts +7 -0
  263. package/dist/hooks/useNonInteractiveMode.d.ts.map +1 -1
  264. package/dist/hooks/useNonInteractiveMode.js +42 -3
  265. package/dist/hooks/useNonInteractiveMode.js.map +1 -1
  266. package/dist/hooks/useSchedulerMode.d.ts +30 -0
  267. package/dist/hooks/useSchedulerMode.d.ts.map +1 -0
  268. package/dist/hooks/useSchedulerMode.js +99 -0
  269. package/dist/hooks/useSchedulerMode.js.map +1 -0
  270. package/dist/hooks/useSessionAutosave.d.ts +16 -0
  271. package/dist/hooks/useSessionAutosave.d.ts.map +1 -0
  272. package/dist/hooks/useSessionAutosave.js +133 -0
  273. package/dist/hooks/useSessionAutosave.js.map +1 -0
  274. package/dist/hooks/useToolHandler.d.ts +2 -1
  275. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  276. package/dist/hooks/useToolHandler.js +9 -3
  277. package/dist/hooks/useToolHandler.js.map +1 -1
  278. package/dist/lsp/lsp-manager.d.ts.map +1 -1
  279. package/dist/lsp/lsp-manager.js +10 -0
  280. package/dist/lsp/lsp-manager.js.map +1 -1
  281. package/dist/mcp/mcp-client.d.ts.map +1 -1
  282. package/dist/mcp/mcp-client.js +23 -3
  283. package/dist/mcp/mcp-client.js.map +1 -1
  284. package/dist/mcp/transport-factory.d.ts.map +1 -1
  285. package/dist/mcp/transport-factory.js +4 -36
  286. package/dist/mcp/transport-factory.js.map +1 -1
  287. package/dist/models/index.d.ts +1 -1
  288. package/dist/models/index.d.ts.map +1 -1
  289. package/dist/models/index.js +1 -1
  290. package/dist/models/index.js.map +1 -1
  291. package/dist/models/models-dev-client.d.ts +8 -1
  292. package/dist/models/models-dev-client.d.ts.map +1 -1
  293. package/dist/models/models-dev-client.js +71 -15
  294. package/dist/models/models-dev-client.js.map +1 -1
  295. package/dist/schedule/cron.d.ts +14 -0
  296. package/dist/schedule/cron.d.ts.map +1 -0
  297. package/dist/schedule/cron.js +107 -0
  298. package/dist/schedule/cron.js.map +1 -0
  299. package/dist/schedule/index.d.ts +4 -0
  300. package/dist/schedule/index.d.ts.map +1 -0
  301. package/dist/schedule/index.js +4 -0
  302. package/dist/schedule/index.js.map +1 -0
  303. package/dist/schedule/runner.d.ts +42 -0
  304. package/dist/schedule/runner.d.ts.map +1 -0
  305. package/dist/schedule/runner.js +136 -0
  306. package/dist/schedule/runner.js.map +1 -0
  307. package/dist/schedule/storage.d.ts +9 -0
  308. package/dist/schedule/storage.d.ts.map +1 -0
  309. package/dist/schedule/storage.js +68 -0
  310. package/dist/schedule/storage.js.map +1 -0
  311. package/dist/schedule/types.d.ts +24 -0
  312. package/dist/schedule/types.d.ts.map +1 -0
  313. package/dist/schedule/types.js +2 -0
  314. package/dist/schedule/types.js.map +1 -0
  315. package/dist/services/bash-executor.d.ts.map +1 -1
  316. package/dist/services/bash-executor.js +5 -0
  317. package/dist/services/bash-executor.js.map +1 -1
  318. package/dist/session/session-manager.d.ts +57 -0
  319. package/dist/session/session-manager.d.ts.map +1 -0
  320. package/dist/session/session-manager.js +361 -0
  321. package/dist/session/session-manager.js.map +1 -0
  322. package/dist/test-utils/render-with-theme.d.ts.map +1 -1
  323. package/dist/test-utils/render-with-theme.js +2 -1
  324. package/dist/test-utils/render-with-theme.js.map +1 -1
  325. package/dist/tool-calling/tool-parser.d.ts +4 -3
  326. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  327. package/dist/tool-calling/tool-parser.js +17 -34
  328. package/dist/tool-calling/tool-parser.js.map +1 -1
  329. package/dist/tool-calling/xml-parser.d.ts +8 -4
  330. package/dist/tool-calling/xml-parser.d.ts.map +1 -1
  331. package/dist/tool-calling/xml-parser.js +15 -5
  332. package/dist/tool-calling/xml-parser.js.map +1 -1
  333. package/dist/tools/ask-question.d.ts +3 -0
  334. package/dist/tools/ask-question.d.ts.map +1 -0
  335. package/dist/tools/ask-question.js +66 -0
  336. package/dist/tools/ask-question.js.map +1 -0
  337. package/dist/tools/execute-bash.d.ts.map +1 -1
  338. package/dist/tools/execute-bash.js +6 -1
  339. package/dist/tools/execute-bash.js.map +1 -1
  340. package/dist/tools/fetch-url.d.ts.map +1 -1
  341. package/dist/tools/fetch-url.js +11 -2
  342. package/dist/tools/fetch-url.js.map +1 -1
  343. package/dist/tools/file-ops/copy-file.d.ts +3 -0
  344. package/dist/tools/file-ops/copy-file.d.ts.map +1 -0
  345. package/dist/tools/file-ops/copy-file.js +96 -0
  346. package/dist/tools/file-ops/copy-file.js.map +1 -0
  347. package/dist/tools/file-ops/create-directory.d.ts +3 -0
  348. package/dist/tools/file-ops/create-directory.d.ts.map +1 -0
  349. package/dist/tools/file-ops/create-directory.js +59 -0
  350. package/dist/tools/file-ops/create-directory.js.map +1 -0
  351. package/dist/tools/file-ops/delete-file.d.ts +3 -0
  352. package/dist/tools/file-ops/delete-file.d.ts.map +1 -0
  353. package/dist/tools/file-ops/delete-file.js +74 -0
  354. package/dist/tools/file-ops/delete-file.js.map +1 -0
  355. package/dist/tools/file-ops/index.d.ts +3 -0
  356. package/dist/tools/file-ops/index.d.ts.map +1 -0
  357. package/dist/tools/file-ops/index.js +8 -0
  358. package/dist/tools/file-ops/index.js.map +1 -0
  359. package/dist/tools/file-ops/move-file.d.ts +3 -0
  360. package/dist/tools/file-ops/move-file.d.ts.map +1 -0
  361. package/dist/tools/file-ops/move-file.js +96 -0
  362. package/dist/tools/file-ops/move-file.js.map +1 -0
  363. package/dist/tools/file-ops/string-replace-preview.d.ts +10 -0
  364. package/dist/tools/file-ops/string-replace-preview.d.ts.map +1 -0
  365. package/dist/tools/file-ops/string-replace-preview.js +171 -0
  366. package/dist/tools/file-ops/string-replace-preview.js.map +1 -0
  367. package/dist/tools/file-ops/string-replace.d.ts +3 -0
  368. package/dist/tools/file-ops/string-replace.d.ts.map +1 -0
  369. package/dist/tools/file-ops/string-replace.js +178 -0
  370. package/dist/tools/file-ops/string-replace.js.map +1 -0
  371. package/dist/tools/file-ops/write-file.d.ts +3 -0
  372. package/dist/tools/file-ops/write-file.d.ts.map +1 -0
  373. package/dist/tools/{write-file.js → file-ops/write-file.js} +34 -79
  374. package/dist/tools/file-ops/write-file.js.map +1 -0
  375. package/dist/tools/find-files.d.ts.map +1 -1
  376. package/dist/tools/find-files.js +1 -0
  377. package/dist/tools/find-files.js.map +1 -1
  378. package/dist/tools/git/git-diff.d.ts.map +1 -1
  379. package/dist/tools/git/git-diff.js +1 -0
  380. package/dist/tools/git/git-diff.js.map +1 -1
  381. package/dist/tools/git/git-log.d.ts.map +1 -1
  382. package/dist/tools/git/git-log.js +1 -0
  383. package/dist/tools/git/git-log.js.map +1 -1
  384. package/dist/tools/git/git-reset.js +1 -1
  385. package/dist/tools/git/git-reset.js.map +1 -1
  386. package/dist/tools/git/git-status.d.ts.map +1 -1
  387. package/dist/tools/git/git-status.js +1 -0
  388. package/dist/tools/git/git-status.js.map +1 -1
  389. package/dist/tools/git/index.js +3 -3
  390. package/dist/tools/git/index.js.map +1 -1
  391. package/dist/tools/git/utils.d.ts +4 -0
  392. package/dist/tools/git/utils.d.ts.map +1 -1
  393. package/dist/tools/git/utils.js +12 -0
  394. package/dist/tools/git/utils.js.map +1 -1
  395. package/dist/tools/index.d.ts +1 -0
  396. package/dist/tools/index.d.ts.map +1 -1
  397. package/dist/tools/index.js +15 -2
  398. package/dist/tools/index.js.map +1 -1
  399. package/dist/tools/list-directory.d.ts.map +1 -1
  400. package/dist/tools/list-directory.js +2 -1
  401. package/dist/tools/list-directory.js.map +1 -1
  402. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  403. package/dist/tools/lsp-get-diagnostics.js +1 -5
  404. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  405. package/dist/tools/read-file.d.ts.map +1 -1
  406. package/dist/tools/read-file.js +1 -0
  407. package/dist/tools/read-file.js.map +1 -1
  408. package/dist/tools/search-file-contents.d.ts.map +1 -1
  409. package/dist/tools/search-file-contents.js +60 -10
  410. package/dist/tools/search-file-contents.js.map +1 -1
  411. package/dist/tools/tasks/list-tasks.d.ts.map +1 -1
  412. package/dist/tools/tasks/list-tasks.js +1 -0
  413. package/dist/tools/tasks/list-tasks.js.map +1 -1
  414. package/dist/tools/tool-manager.d.ts +10 -0
  415. package/dist/tools/tool-manager.d.ts.map +1 -1
  416. package/dist/tools/tool-manager.js +25 -2
  417. package/dist/tools/tool-manager.js.map +1 -1
  418. package/dist/tools/tool-registry.d.ts +9 -1
  419. package/dist/tools/tool-registry.d.ts.map +1 -1
  420. package/dist/tools/tool-registry.js +17 -1
  421. package/dist/tools/tool-registry.js.map +1 -1
  422. package/dist/tools/web-search.d.ts.map +1 -1
  423. package/dist/tools/web-search.js +1 -0
  424. package/dist/tools/web-search.js.map +1 -1
  425. package/dist/types/app.d.ts +5 -0
  426. package/dist/types/app.d.ts.map +1 -1
  427. package/dist/types/commands.d.ts +20 -1
  428. package/dist/types/commands.d.ts.map +1 -1
  429. package/dist/types/config.d.ts +11 -15
  430. package/dist/types/config.d.ts.map +1 -1
  431. package/dist/types/core.d.ts +15 -4
  432. package/dist/types/core.d.ts.map +1 -1
  433. package/dist/types/core.js +7 -0
  434. package/dist/types/core.js.map +1 -1
  435. package/dist/types/markdown-parser.d.ts +2 -10
  436. package/dist/types/markdown-parser.d.ts.map +1 -1
  437. package/dist/types/mcp.d.ts +2 -28
  438. package/dist/types/mcp.d.ts.map +1 -1
  439. package/dist/types/ui.d.ts +1 -1
  440. package/dist/types/ui.d.ts.map +1 -1
  441. package/dist/utils/ansi-truncate.d.ts +6 -0
  442. package/dist/utils/ansi-truncate.d.ts.map +1 -0
  443. package/dist/utils/ansi-truncate.js +39 -0
  444. package/dist/utils/ansi-truncate.js.map +1 -0
  445. package/dist/utils/auto-compact.d.ts.map +1 -1
  446. package/dist/utils/auto-compact.js +13 -7
  447. package/dist/utils/auto-compact.js.map +1 -1
  448. package/dist/utils/installation-detector.d.ts +6 -0
  449. package/dist/utils/installation-detector.d.ts.map +1 -1
  450. package/dist/utils/installation-detector.js +33 -19
  451. package/dist/utils/installation-detector.js.map +1 -1
  452. package/dist/utils/logging/health-monitor/checks/memory-check.d.ts.map +1 -1
  453. package/dist/utils/logging/health-monitor/checks/memory-check.js +2 -1
  454. package/dist/utils/logging/health-monitor/checks/memory-check.js.map +1 -1
  455. package/dist/utils/logging/health-monitor/core/health-monitor.d.ts.map +1 -1
  456. package/dist/utils/logging/health-monitor/core/health-monitor.js +3 -2
  457. package/dist/utils/logging/health-monitor/core/health-monitor.js.map +1 -1
  458. package/dist/utils/logging/index.d.ts.map +1 -1
  459. package/dist/utils/logging/index.js +18 -30
  460. package/dist/utils/logging/index.js.map +1 -1
  461. package/dist/utils/logging/performance.d.ts.map +1 -1
  462. package/dist/utils/logging/performance.js +21 -17
  463. package/dist/utils/logging/performance.js.map +1 -1
  464. package/dist/utils/logging/pino-logger.d.ts.map +1 -1
  465. package/dist/utils/logging/pino-logger.js +7 -8
  466. package/dist/utils/logging/pino-logger.js.map +1 -1
  467. package/dist/utils/logging/redaction.d.ts.map +1 -1
  468. package/dist/utils/logging/redaction.js +2 -0
  469. package/dist/utils/logging/redaction.js.map +1 -1
  470. package/dist/utils/logging/request-tracker.d.ts.map +1 -1
  471. package/dist/utils/logging/request-tracker.js +6 -5
  472. package/dist/utils/logging/request-tracker.js.map +1 -1
  473. package/dist/utils/logging/safe-process.d.ts +16 -0
  474. package/dist/utils/logging/safe-process.d.ts.map +1 -0
  475. package/dist/utils/logging/safe-process.js +37 -0
  476. package/dist/utils/logging/safe-process.js.map +1 -0
  477. package/dist/utils/logging/types.d.ts +0 -3
  478. package/dist/utils/logging/types.d.ts.map +1 -1
  479. package/dist/utils/message-builder.d.ts +0 -5
  480. package/dist/utils/message-builder.d.ts.map +1 -1
  481. package/dist/utils/message-builder.js +0 -8
  482. package/dist/utils/message-builder.js.map +1 -1
  483. package/dist/utils/path-validation.d.ts.map +1 -1
  484. package/dist/utils/path-validation.js +3 -1
  485. package/dist/utils/path-validation.js.map +1 -1
  486. package/dist/utils/path-validators.d.ts +16 -0
  487. package/dist/utils/path-validators.d.ts.map +1 -0
  488. package/dist/utils/path-validators.js +55 -0
  489. package/dist/utils/path-validators.js.map +1 -0
  490. package/dist/utils/question-queue.d.ts +15 -0
  491. package/dist/utils/question-queue.d.ts.map +1 -0
  492. package/dist/utils/question-queue.js +25 -0
  493. package/dist/utils/question-queue.js.map +1 -0
  494. package/dist/utils/response-formatter.d.ts +108 -0
  495. package/dist/utils/response-formatter.d.ts.map +1 -0
  496. package/dist/utils/response-formatter.js +372 -0
  497. package/dist/utils/response-formatter.js.map +1 -0
  498. package/dist/utils/shutdown/index.d.ts +7 -0
  499. package/dist/utils/shutdown/index.d.ts.map +1 -0
  500. package/dist/utils/shutdown/index.js +6 -0
  501. package/dist/utils/shutdown/index.js.map +1 -0
  502. package/dist/utils/shutdown/shutdown-manager.d.ts +19 -0
  503. package/dist/utils/shutdown/shutdown-manager.d.ts.map +1 -0
  504. package/dist/utils/shutdown/shutdown-manager.js +100 -0
  505. package/dist/utils/shutdown/shutdown-manager.js.map +1 -0
  506. package/dist/utils/shutdown/types.d.ts +9 -0
  507. package/dist/utils/shutdown/types.d.ts.map +1 -0
  508. package/dist/utils/shutdown/types.js +2 -0
  509. package/dist/utils/shutdown/types.js.map +1 -0
  510. package/dist/utils/text-wrapping.d.ts +8 -0
  511. package/dist/utils/text-wrapping.d.ts.map +1 -0
  512. package/dist/utils/text-wrapping.js +29 -0
  513. package/dist/utils/text-wrapping.js.map +1 -0
  514. package/dist/utils/tool-approval.d.ts +6 -0
  515. package/dist/utils/tool-approval.d.ts.map +1 -0
  516. package/dist/utils/tool-approval.js +15 -0
  517. package/dist/utils/tool-approval.js.map +1 -0
  518. package/dist/utils/tool-result-display.d.ts +15 -1
  519. package/dist/utils/tool-result-display.d.ts.map +1 -1
  520. package/dist/utils/tool-result-display.js +93 -3
  521. package/dist/utils/tool-result-display.js.map +1 -1
  522. package/dist/utils/type-helpers.d.ts +140 -0
  523. package/dist/utils/type-helpers.d.ts.map +1 -0
  524. package/dist/utils/type-helpers.js +220 -0
  525. package/dist/utils/type-helpers.js.map +1 -0
  526. package/dist/utils/url-utils.d.ts +6 -0
  527. package/dist/utils/url-utils.d.ts.map +1 -0
  528. package/dist/utils/url-utils.js +22 -0
  529. package/dist/utils/url-utils.js.map +1 -0
  530. package/dist/vscode/extension-installer.d.ts +34 -7
  531. package/dist/vscode/extension-installer.d.ts.map +1 -1
  532. package/dist/vscode/extension-installer.js +151 -64
  533. package/dist/vscode/extension-installer.js.map +1 -1
  534. package/dist/vscode/index.d.ts +1 -1
  535. package/dist/vscode/index.d.ts.map +1 -1
  536. package/dist/vscode/index.js +1 -1
  537. package/dist/vscode/index.js.map +1 -1
  538. package/dist/vscode/vscode-server.d.ts.map +1 -1
  539. package/dist/vscode/vscode-server.js +10 -0
  540. package/dist/vscode/vscode-server.js.map +1 -1
  541. package/dist/wizards/mcp-wizard.d.ts.map +1 -1
  542. package/dist/wizards/mcp-wizard.js +2 -1
  543. package/dist/wizards/mcp-wizard.js.map +1 -1
  544. package/dist/wizards/provider-wizard.d.ts.map +1 -1
  545. package/dist/wizards/provider-wizard.js +4 -2
  546. package/dist/wizards/provider-wizard.js.map +1 -1
  547. package/dist/wizards/steps/location-step.d.ts.map +1 -1
  548. package/dist/wizards/steps/location-step.js +2 -1
  549. package/dist/wizards/steps/location-step.js.map +1 -1
  550. package/dist/wizards/steps/mcp-step.d.ts.map +1 -1
  551. package/dist/wizards/steps/mcp-step.js +3 -2
  552. package/dist/wizards/steps/mcp-step.js.map +1 -1
  553. package/dist/wizards/steps/provider-step.d.ts.map +1 -1
  554. package/dist/wizards/steps/provider-step.js +5 -2
  555. package/dist/wizards/steps/provider-step.js.map +1 -1
  556. package/dist/wizards/steps/summary-step.d.ts.map +1 -1
  557. package/dist/wizards/steps/summary-step.js +2 -1
  558. package/dist/wizards/steps/summary-step.js.map +1 -1
  559. package/dist/wizards/templates/mcp-templates.d.ts +0 -8
  560. package/dist/wizards/templates/mcp-templates.d.ts.map +1 -1
  561. package/dist/wizards/templates/mcp-templates.js +8 -6
  562. package/dist/wizards/templates/mcp-templates.js.map +1 -1
  563. package/dist/wizards/templates/provider-templates.d.ts.map +1 -1
  564. package/dist/wizards/templates/provider-templates.js +59 -0
  565. package/dist/wizards/templates/provider-templates.js.map +1 -1
  566. package/dist/wizards/validation.d.ts.map +1 -1
  567. package/dist/wizards/validation.js +2 -4
  568. package/dist/wizards/validation.js.map +1 -1
  569. package/package.json +22 -23
  570. package/source/app/prompts/main-prompt.md +21 -3
  571. package/source/config/themes.json +787 -0
  572. package/dist/ai-sdk-client/chat/tool-processor.d.ts +0 -10
  573. package/dist/ai-sdk-client/chat/tool-processor.d.ts.map +0 -1
  574. package/dist/ai-sdk-client/chat/tool-processor.js +0 -53
  575. package/dist/ai-sdk-client/chat/tool-processor.js.map +0 -1
  576. package/dist/hooks/chat-handler/utils/context-checker.d.ts +0 -15
  577. package/dist/hooks/chat-handler/utils/context-checker.d.ts.map +0 -1
  578. package/dist/hooks/chat-handler/utils/context-checker.js +0 -68
  579. package/dist/hooks/chat-handler/utils/context-checker.js.map +0 -1
  580. package/dist/tool-calling/json-parser.d.ts +0 -24
  581. package/dist/tool-calling/json-parser.d.ts.map +0 -1
  582. package/dist/tool-calling/json-parser.js +0 -202
  583. package/dist/tool-calling/json-parser.js.map +0 -1
  584. package/dist/tools/string-replace.d.ts +0 -3
  585. package/dist/tools/string-replace.d.ts.map +0 -1
  586. package/dist/tools/string-replace.js +0 -461
  587. package/dist/tools/string-replace.js.map +0 -1
  588. package/dist/tools/write-file.d.ts +0 -3
  589. package/dist/tools/write-file.d.ts.map +0 -1
  590. package/dist/tools/write-file.js.map +0 -1
@@ -1,49 +1,61 @@
1
1
  import { readFileSync } from 'fs';
2
2
  import { logError } from '../utils/message-queue.js';
3
3
  /**
4
- * Enhanced YAML frontmatter parser with support for multi-line strings and nested objects
4
+ * Set of frontmatter keys that are always parsed as arrays
5
+ */
6
+ const ARRAY_KEYS = new Set([
7
+ 'aliases',
8
+ 'parameters',
9
+ 'tags',
10
+ 'triggers',
11
+ 'examples',
12
+ 'references',
13
+ 'dependencies',
14
+ ]);
15
+ /**
16
+ * Set of frontmatter keys that are parsed as numbers
17
+ */
18
+ const NUMBER_KEYS = new Set(['estimated-tokens']);
19
+ /**
20
+ * Parse a value that may be a JSON-style array or a single item.
21
+ * Returns an array of strings.
22
+ */
23
+ function parseArrayValue(value) {
24
+ const trimmed = value.trim();
25
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
26
+ const content = trimmed.slice(1, -1);
27
+ return content
28
+ .split(',')
29
+ .map(s => s.trim().replace(/^["']|["']$/g, ''))
30
+ .filter(s => s.length > 0);
31
+ }
32
+ const cleaned = trimmed.replace(/^["']|["']$/g, '');
33
+ return cleaned ? [cleaned] : [];
34
+ }
35
+ /**
36
+ * Enhanced YAML frontmatter parser with support for multi-line strings,
37
+ * arrays, and all command/skill metadata fields.
5
38
  */
6
39
  function parseEnhancedFrontmatter(frontmatter) {
7
- const metadata = {};
40
+ const raw = {};
8
41
  const lines = frontmatter.split('\n');
9
42
  let currentKey = null;
10
43
  let currentValue = [];
11
44
  let isMultiline = false;
12
45
  let indentLevel = 0;
13
- const processKeyValue = (key, value) => {
46
+ const storeValue = (key, value) => {
14
47
  const trimmedValue = value.trim();
15
- if (key === 'description') {
16
- metadata.description = trimmedValue.replace(/^["']|["']$/g, '');
48
+ if (ARRAY_KEYS.has(key)) {
49
+ raw[key] = parseArrayValue(trimmedValue);
17
50
  }
18
- else if (key === 'aliases') {
19
- // Support both array syntax and YAML dash syntax
20
- if (trimmedValue.startsWith('[') && trimmedValue.endsWith(']')) {
21
- // JSON-style array: [alias1, alias2]
22
- const content = trimmedValue.slice(1, -1);
23
- metadata.aliases = content
24
- .split(',')
25
- .map(s => s.trim().replace(/^["']|["']$/g, ''))
26
- .filter(s => s.length > 0);
27
- }
28
- else {
29
- // Single value or will be handled by dash parsing below
30
- metadata.aliases = [trimmedValue.replace(/^["']|["']$/g, '')];
51
+ else if (NUMBER_KEYS.has(key)) {
52
+ const num = Number(trimmedValue);
53
+ if (!Number.isNaN(num)) {
54
+ raw[key] = num;
31
55
  }
32
56
  }
33
- else if (key === 'parameters') {
34
- // Support both array syntax and YAML dash syntax
35
- if (trimmedValue.startsWith('[') && trimmedValue.endsWith(']')) {
36
- // JSON-style array: [param1, param2]
37
- const content = trimmedValue.slice(1, -1);
38
- metadata.parameters = content
39
- .split(',')
40
- .map(s => s.trim().replace(/^["']|["']$/g, ''))
41
- .filter(s => s.length > 0);
42
- }
43
- else {
44
- // Single value or will be handled by dash parsing below
45
- metadata.parameters = [trimmedValue.replace(/^["']|["']$/g, '')];
46
- }
57
+ else {
58
+ raw[key] = trimmedValue.replace(/^["']|["']$/g, '');
47
59
  }
48
60
  };
49
61
  for (let i = 0; i < lines.length; i++) {
@@ -56,21 +68,16 @@ function parseEnhancedFrontmatter(frontmatter) {
56
68
  continue;
57
69
  }
58
70
  // Check for YAML dash syntax (array items)
59
- if (trimmedLine.startsWith('- ') && currentKey) {
71
+ if (trimmedLine.startsWith('- ') &&
72
+ currentKey &&
73
+ ARRAY_KEYS.has(currentKey)) {
60
74
  const arrayItem = trimmedLine
61
75
  .slice(2)
62
76
  .trim()
63
77
  .replace(/^["']|["']$/g, '');
64
- if (currentKey === 'aliases') {
65
- if (!metadata.aliases)
66
- metadata.aliases = [];
67
- metadata.aliases.push(arrayItem);
68
- }
69
- else if (currentKey === 'parameters') {
70
- if (!metadata.parameters)
71
- metadata.parameters = [];
72
- metadata.parameters.push(arrayItem);
73
- }
78
+ const arr = raw[currentKey] ?? [];
79
+ arr.push(arrayItem);
80
+ raw[currentKey] = arr;
74
81
  continue;
75
82
  }
76
83
  // Check for multi-line string indicators
@@ -96,7 +103,7 @@ function parseEnhancedFrontmatter(frontmatter) {
96
103
  else if (trimmedLine && lineIndent < indentLevel) {
97
104
  // End of multi-line block
98
105
  const multilineContent = currentValue.join('\n').trim();
99
- processKeyValue(currentKey, multilineContent);
106
+ storeValue(currentKey, multilineContent);
100
107
  isMultiline = false;
101
108
  currentKey = null;
102
109
  currentValue = [];
@@ -111,24 +118,75 @@ function parseEnhancedFrontmatter(frontmatter) {
111
118
  // If this is the last line, process the accumulated multi-line value
112
119
  if (i === lines.length - 1 && currentValue.length > 0) {
113
120
  const multilineContent = currentValue.join('\n').trim();
114
- processKeyValue(currentKey, multilineContent);
121
+ storeValue(currentKey, multilineContent);
115
122
  }
116
123
  continue;
117
124
  }
118
- // Handle regular key-value pairs
119
- const colonIndex = line.indexOf(':');
125
+ // Handle regular key-value pairs — find colon outside quotes
126
+ const colonIndex = findColonOutsideQuotes(line);
120
127
  if (colonIndex === -1)
121
128
  continue;
122
129
  const key = line.slice(0, colonIndex).trim();
123
130
  const value = line.slice(colonIndex + 1).trim();
124
131
  if (value) {
125
- processKeyValue(key, value);
132
+ storeValue(key, value);
126
133
  currentKey = key; // For potential array items following
127
134
  }
128
135
  else {
129
136
  currentKey = key; // Key with no immediate value, might have array items below
130
137
  }
131
138
  }
139
+ return mapRawToMetadata(raw);
140
+ }
141
+ /**
142
+ * Find the first colon that is not inside single or double quotes.
143
+ */
144
+ function findColonOutsideQuotes(line) {
145
+ let inSingleQuote = false;
146
+ let inDoubleQuote = false;
147
+ for (let i = 0; i < line.length; i++) {
148
+ const char = line[i];
149
+ if (char === "'" && !inDoubleQuote) {
150
+ inSingleQuote = !inSingleQuote;
151
+ }
152
+ else if (char === '"' && !inSingleQuote) {
153
+ inDoubleQuote = !inDoubleQuote;
154
+ }
155
+ else if (char === ':' && !inSingleQuote && !inDoubleQuote) {
156
+ return i;
157
+ }
158
+ }
159
+ return -1;
160
+ }
161
+ /**
162
+ * Map raw parsed key-value pairs to typed CustomCommandMetadata.
163
+ */
164
+ function mapRawToMetadata(raw) {
165
+ const metadata = {};
166
+ if (raw.description)
167
+ metadata.description = raw.description;
168
+ if (raw.aliases)
169
+ metadata.aliases = raw.aliases;
170
+ if (raw.parameters)
171
+ metadata.parameters = raw.parameters;
172
+ if (raw.tags)
173
+ metadata.tags = raw.tags;
174
+ if (raw.triggers)
175
+ metadata.triggers = raw.triggers;
176
+ if (typeof raw['estimated-tokens'] === 'number')
177
+ metadata.estimatedTokens = raw['estimated-tokens'];
178
+ if (raw.category)
179
+ metadata.category = raw.category;
180
+ if (raw.version)
181
+ metadata.version = raw.version;
182
+ if (raw.author)
183
+ metadata.author = raw.author;
184
+ if (raw.examples)
185
+ metadata.examples = raw.examples;
186
+ if (raw.references)
187
+ metadata.references = raw.references;
188
+ if (raw.dependencies)
189
+ metadata.dependencies = raw.dependencies;
132
190
  return metadata;
133
191
  }
134
192
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../source/custom-commands/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../source/custom-commands/parser.ts"],"names":[],"mappings":"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"}
@@ -17,13 +17,18 @@ interface ProcessAssistantResponseParams {
17
17
  getNextComponentKey: () => number;
18
18
  currentProvider: string;
19
19
  currentModel: string;
20
- developmentMode: 'normal' | 'auto-accept' | 'plan';
20
+ developmentMode: 'normal' | 'auto-accept' | 'plan' | 'scheduler';
21
21
  nonInteractiveMode: boolean;
22
22
  conversationStateManager: React.MutableRefObject<ConversationStateManager>;
23
23
  onStartToolConfirmationFlow: (toolCalls: ToolCall[], updatedMessages: Message[], assistantMsg: Message, systemMessage: Message) => void;
24
24
  onConversationComplete?: () => void;
25
25
  conversationStartTime?: number;
26
+ compactToolDisplayRef?: React.RefObject<boolean>;
27
+ onSetCompactToolCounts?: (counts: Record<string, number> | null) => void;
28
+ compactToolCountsRef?: React.MutableRefObject<Record<string, number>>;
26
29
  }
30
+ /** Reset the fallback notice flag (for testing). */
31
+ export declare const resetFallbackNotice: () => void;
27
32
  /**
28
33
  * Main conversation loop that processes assistant responses and handles tool calls.
29
34
  * This function orchestrates the entire conversation flow including:
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-loop.d.ts","sourceRoot":"","sources":["../../../../source/hooks/chat-handler/conversation/conversation-loop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAC;AAM7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAa,MAAM,cAAc,CAAC;AAS3E,UAAU,8BAA8B;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IACnD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,KAAK,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC3E,2BAA2B,EAAE,CAC5B,SAAS,EAAE,QAAQ,EAAE,EACrB,eAAe,EAAE,OAAO,EAAE,EAC1B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,KAClB,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACpC,QAAQ,8BAA8B,KACpC,OAAO,CAAC,IAAI,CA4ed,CAAC"}
1
+ {"version":3,"file":"conversation-loop.d.ts","sourceRoot":"","sources":["../../../../source/hooks/chat-handler/conversation/conversation-loop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,gCAAgC,CAAC;AAM7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACX,SAAS,EACT,OAAO,EAEP,QAAQ,EAER,MAAM,cAAc,CAAC;AAStB,UAAU,8BAA8B;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;IACjE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,KAAK,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAC3E,2BAA2B,EAAE,CAC5B,SAAS,EAAE,QAAQ,EAAE,EACrB,eAAe,EAAE,OAAO,EAAE,EAC1B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,KAClB,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjD,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACzE,oBAAoB,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtE;AAKD,oDAAoD;AACpD,eAAO,MAAM,mBAAmB,YAE/B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACpC,QAAQ,8BAA8B,KACpC,OAAO,CAAC,IAAI,CAwfd,CAAC"}
@@ -3,15 +3,21 @@ import React from 'react';
3
3
  import AssistantMessage from '../../../components/assistant-message.js';
4
4
  import { ErrorMessage, InfoMessage } from '../../../components/message-box.js';
5
5
  import UserMessage from '../../../components/user-message.js';
6
- import { appConfig, getAppConfig } from '../../../config/index.js';
6
+ import { getAppConfig } from '../../../config/index.js';
7
7
  import { parseToolCalls } from '../../../tool-calling/index.js';
8
8
  import { performAutoCompact } from '../../../utils/auto-compact.js';
9
9
  import { formatElapsedTime, getRandomAdjective } from '../../../utils/completion-note.js';
10
10
  import { MessageBuilder } from '../../../utils/message-builder.js';
11
11
  import { parseToolArguments } from '../../../utils/tool-args-parser.js';
12
- import { displayToolResult } from '../../../utils/tool-result-display.js';
12
+ import { displayCompactCountsSummary } from '../../../utils/tool-result-display.js';
13
13
  import { filterValidToolCalls } from '../utils/tool-filters.js';
14
14
  import { executeToolsDirectly } from './tool-executor.js';
15
+ // Module-level flag: show XML fallback notice only once per process lifetime.
16
+ let hasShownFallbackNotice = false;
17
+ /** Reset the fallback notice flag (for testing). */
18
+ export const resetFallbackNotice = () => {
19
+ hasShownFallbackNotice = false;
20
+ };
15
21
  /**
16
22
  * Main conversation loop that processes assistant responses and handles tool calls.
17
23
  * This function orchestrates the entire conversation flow including:
@@ -22,8 +28,19 @@ import { executeToolsDirectly } from './tool-executor.js';
22
28
  * - Managing the conversation state
23
29
  */
24
30
  export const processAssistantResponse = async (params) => {
25
- const { systemMessage, messages, client, toolManager, abortController, setAbortController, setIsGenerating, setStreamingContent, setTokenCount, setMessages, addToChatQueue, getNextComponentKey, currentProvider, currentModel, developmentMode, nonInteractiveMode, conversationStateManager, onStartToolConfirmationFlow, onConversationComplete, conversationStartTime, } = params;
31
+ const { systemMessage, messages, client, toolManager, abortController, setAbortController, setIsGenerating, setStreamingContent, setTokenCount, setMessages, addToChatQueue, getNextComponentKey, currentProvider, currentModel, nonInteractiveMode, conversationStateManager, onStartToolConfirmationFlow, onConversationComplete, conversationStartTime, compactToolDisplayRef, onSetCompactToolCounts, compactToolCountsRef, } = params;
26
32
  const startTime = conversationStartTime ?? Date.now();
33
+ // Helper to flush accumulated compact counts to the static chat queue and clear live display
34
+ const flushCompactCounts = () => {
35
+ if (compactToolCountsRef) {
36
+ const counts = compactToolCountsRef.current;
37
+ if (Object.keys(counts).length > 0) {
38
+ displayCompactCountsSummary(counts, addToChatQueue, getNextComponentKey);
39
+ compactToolCountsRef.current = {};
40
+ }
41
+ }
42
+ onSetCompactToolCounts?.(null);
43
+ };
27
44
  // Ensure we have an abort controller for this request
28
45
  let controller = abortController;
29
46
  if (!controller) {
@@ -34,32 +51,32 @@ export const processAssistantResponse = async (params) => {
34
51
  setIsGenerating(true);
35
52
  setStreamingContent('');
36
53
  setTokenCount(0);
37
- const result = await client.chat([systemMessage, ...messages], toolManager?.getAllTools() || {}, {
38
- onToolExecuted: (toolCall, result) => {
39
- // Display formatter for auto-executed tools (after execution with results)
40
- void (async () => {
41
- const toolResult = {
42
- tool_call_id: toolCall.id,
43
- role: 'tool',
44
- name: toolCall.function.name,
45
- content: result,
46
- };
47
- await displayToolResult(toolCall, toolResult, toolManager, addToChatQueue, getNextComponentKey);
48
- })();
49
- },
50
- onFinish: () => {
51
- setIsGenerating(false);
52
- },
53
- }, controller.signal);
54
+ // Build mode overrides for non-interactive mode
55
+ const modeOverrides = nonInteractiveMode
56
+ ? {
57
+ nonInteractiveMode: true,
58
+ nonInteractiveAlwaysAllow: getAppConfig().alwaysAllow ?? [],
59
+ }
60
+ : undefined;
61
+ const result = await client.chat([systemMessage, ...messages], toolManager?.getAllToolsWithoutExecute() || {}, {}, controller.signal, modeOverrides);
54
62
  if (!result || !result.choices || result.choices.length === 0) {
55
63
  throw new Error('No response received from model');
56
64
  }
57
65
  const message = result.choices[0].message;
58
66
  const toolCalls = message.tool_calls || null;
59
67
  const fullContent = message.content || '';
60
- // Parse any tool calls from content for non-tool-calling models
61
- const parseResult = parseToolCalls(fullContent);
68
+ // Only parse text for XML tool calls on the fallback path (non-tool-calling models).
69
+ // On the native path, response text is just text - no tool calls are embedded in it.
70
+ const parseResult = result.toolsDisabled
71
+ ? parseToolCalls(fullContent)
72
+ : { success: true, toolCalls: [], cleanedContent: fullContent };
73
+ // Notify the user once per session when the XML fallback path is active
74
+ if (result.toolsDisabled && !hasShownFallbackNotice) {
75
+ hasShownFallbackNotice = true;
76
+ addToChatQueue(_jsx(InfoMessage, { message: "Model does not support native tool calling. Using XML fallback.", hideBox: true }, `xml-fallback-notice-${getNextComponentKey()}`));
77
+ }
62
78
  // Check for malformed tool calls and send error back to model for self-correction
79
+ // (only happens on the XML fallback path)
63
80
  if (!parseResult.success) {
64
81
  const errorContent = `${parseResult.error}\n\n${parseResult.examples}`;
65
82
  // Display error to user
@@ -81,9 +98,6 @@ export const processAssistantResponse = async (params) => {
81
98
  .addMessage(errorFeedbackMessage);
82
99
  const updatedMessagesWithError = malformedBuilder.build();
83
100
  setMessages(updatedMessagesWithError);
84
- // Clear streaming state before recursing
85
- setIsGenerating(false);
86
- setStreamingContent('');
87
101
  // Continue the main conversation loop with error message as context
88
102
  await processAssistantResponse({
89
103
  ...params,
@@ -94,12 +108,19 @@ export const processAssistantResponse = async (params) => {
94
108
  }
95
109
  const parsedToolCalls = parseResult.toolCalls;
96
110
  const cleanedContent = parseResult.cleanedContent;
111
+ // Combine native tool calls with any parsed from content (XML fallback path)
112
+ // Native and parsed are mutually exclusive: native comes from tool-calling models,
113
+ // parsed comes from non-tool-calling models using XML in text
114
+ const allToolCalls = [...(toolCalls || []), ...parsedToolCalls];
115
+ // If this is the final response (no tool calls), flush compact counts
116
+ // BEFORE the assistant message so the summary appears above it
117
+ if (allToolCalls.length === 0) {
118
+ flushCompactCounts();
119
+ }
97
120
  // Display the assistant response (cleaned of any tool calls)
98
121
  if (cleanedContent.trim()) {
99
122
  addToChatQueue(_jsx(AssistantMessage, { message: cleanedContent, model: currentModel }, `assistant-${getNextComponentKey()}`));
100
123
  }
101
- // Merge structured tool calls from AI SDK with content-parsed tool calls
102
- const allToolCalls = [...(toolCalls || []), ...parsedToolCalls];
103
124
  const { validToolCalls, errorResults } = filterValidToolCalls(allToolCalls, toolManager);
104
125
  // Add assistant message to conversation history only if it has content or tool_calls
105
126
  // Empty assistant messages cause API errors: "Assistant message must have either content or tool_calls"
@@ -111,11 +132,6 @@ export const processAssistantResponse = async (params) => {
111
132
  const hasValidAssistantMessage = cleanedContent.trim() || validToolCalls.length > 0;
112
133
  // Build updated messages array using MessageBuilder
113
134
  const builder = new MessageBuilder(messages);
114
- // Add auto-executed messages (assistant + tool results) from AI SDK multi-step execution
115
- // This ensures they're counted in usage tracking and included in context
116
- if (result.autoExecutedMessages && result.autoExecutedMessages.length > 0) {
117
- builder.addAutoExecutedMessages(result.autoExecutedMessages);
118
- }
119
135
  // Add the final assistant message if it has content or tool calls
120
136
  if (hasValidAssistantMessage) {
121
137
  builder.addAssistantMessage(assistantMsg);
@@ -125,8 +141,7 @@ export const processAssistantResponse = async (params) => {
125
141
  // Build the final messages array
126
142
  const updatedMessages = builder.build();
127
143
  // Update messages state once with all changes
128
- if ((result.autoExecutedMessages && result.autoExecutedMessages.length > 0) ||
129
- hasValidAssistantMessage) {
144
+ if (hasValidAssistantMessage) {
130
145
  setMessages(updatedMessages);
131
146
  }
132
147
  // Check for auto-compact after messages are updated
@@ -153,8 +168,8 @@ export const processAssistantResponse = async (params) => {
153
168
  catch (_error) {
154
169
  // Silently fail auto-compact, don't interrupt the conversation
155
170
  }
156
- // Clear streaming state after response is complete
157
- setIsGenerating(false);
171
+ // Clear streaming content (but don't set isGenerating=false yet —
172
+ // we may still need to execute tools and recurse)
158
173
  setStreamingContent('');
159
174
  // Handle error results for non-existent tools
160
175
  if (errorResults.length > 0) {
@@ -162,9 +177,20 @@ export const processAssistantResponse = async (params) => {
162
177
  for (const error of errorResults) {
163
178
  addToChatQueue(_jsx(ErrorMessage, { message: error.content, hideBox: true }, `unknown-tool-${error.tool_call_id}-${Date.now()}`));
164
179
  }
180
+ // FIX: Satisfy the AI SDK's strict 1:1 Tool Call/Result mapping.
181
+ // If we are aborting this turn to self-correct the bad tools,
182
+ // we MUST provide a cancellation result for the valid tools we are skipping.
183
+ const abortedResults = validToolCalls.map(tc => ({
184
+ tool_call_id: tc.id,
185
+ role: 'tool',
186
+ name: tc.function.name,
187
+ content: 'Execution aborted because another tool call in this request was invalid. Please fix the invalid tool call and try again.',
188
+ }));
189
+ // Combine the actual errors with the aborted placeholders
190
+ const allResultsForThisTurn = [...errorResults, ...abortedResults];
165
191
  // Send error results back to model for self-correction
166
192
  const errorBuilder = new MessageBuilder(updatedMessages);
167
- errorBuilder.addToolResults(errorResults);
193
+ errorBuilder.addToolResults(allResultsForThisTurn);
168
194
  const updatedMessagesWithError = errorBuilder.build();
169
195
  setMessages(updatedMessagesWithError);
170
196
  // Continue the main conversation loop with error messages as context
@@ -177,20 +203,14 @@ export const processAssistantResponse = async (params) => {
177
203
  }
178
204
  // Handle tool calls if present - this continues the loop
179
205
  if (validToolCalls && validToolCalls.length > 0) {
180
- // Note: Plan mode tool blocking was removed - the referenced tools
181
- // (create_file, delete_lines, insert_lines, replace_lines) no longer exist.
182
- // Plan mode restrictions are handled via needsApproval in tool definitions.
183
- // TODO: Implement registry-based blocking for plan mode (track as separate issue).
184
- // Separate tools that need confirmation vs those that don't
185
- // Check tool's needsApproval property to determine if confirmation is needed
206
+ // Both native and XML fallback paths now use the same logic:
207
+ // the SDK never auto-executes tools (execute is stripped), so we
208
+ // evaluate needsApproval ourselves and split into direct vs confirmation.
186
209
  const toolsNeedingConfirmation = [];
187
210
  const toolsToExecuteDirectly = [];
188
- // Tools that are permitted to auto-run in non-interactive mode
189
- const nonInteractiveAllowList = new Set(appConfig.alwaysAllow ?? []);
190
211
  for (const toolCall of validToolCalls) {
191
- // Check if tool has a validator
212
+ // Run validators (for XML fallback path, catches parse errors)
192
213
  let validationFailed = false;
193
- // XML validation errors are treated as validation failures
194
214
  if (toolCall.function.name === '__xml_validation_error__') {
195
215
  validationFailed = true;
196
216
  }
@@ -205,13 +225,12 @@ export const processAssistantResponse = async (params) => {
205
225
  }
206
226
  }
207
227
  catch {
208
- // Validation threw an error - treat as validation failure
209
228
  validationFailed = true;
210
229
  }
211
230
  }
212
231
  }
213
- // Check tool's needsApproval property from the tool definition
214
- let toolNeedsApproval = true; // Default to requiring approval for safety
232
+ // Evaluate needsApproval from tool definition
233
+ let toolNeedsApproval = true;
215
234
  if (toolManager) {
216
235
  const toolEntry = toolManager.getToolEntry(toolCall.function.name);
217
236
  if (toolEntry?.tool) {
@@ -220,43 +239,35 @@ export const processAssistantResponse = async (params) => {
220
239
  toolNeedsApproval = needsApprovalProp;
221
240
  }
222
241
  else if (typeof needsApprovalProp === 'function') {
223
- // Evaluate function - our tools use getCurrentMode() internally
224
- // and don't actually need the args parameter
225
242
  try {
226
243
  const parsedArgs = parseToolArguments(toolCall.function.arguments);
227
- // Cast to any to handle AI SDK type signature mismatch
228
- // Our tool implementations don't use the second parameter
229
244
  toolNeedsApproval = await needsApprovalProp(parsedArgs);
230
245
  }
231
246
  catch {
232
- // If evaluation fails, require approval for safety
233
247
  toolNeedsApproval = true;
234
248
  }
235
249
  }
236
250
  }
237
251
  }
238
- // Execute directly if:
239
- // 1. Validation failed (need to send error back to model)
240
- // 2. Tool has needsApproval: false
241
- // 3. Explicitly allowed in non-interactive mode
242
- // 4. In auto-accept mode (except bash which always needs approval)
243
- const isBashTool = toolCall.function.name === 'execute_bash';
244
- const isNonInteractiveAllowed = nonInteractiveMode &&
245
- nonInteractiveAllowList.has(toolCall.function.name);
246
- const shouldExecuteDirectly = validationFailed ||
247
- !toolNeedsApproval ||
248
- isNonInteractiveAllowed ||
249
- (developmentMode === 'auto-accept' && !isBashTool);
250
- if (shouldExecuteDirectly) {
252
+ if (validationFailed || !toolNeedsApproval) {
251
253
  toolsToExecuteDirectly.push(toolCall);
252
254
  }
253
255
  else {
254
256
  toolsNeedingConfirmation.push(toolCall);
255
257
  }
256
258
  }
257
- // Execute non-confirmation tools directly
259
+ // Execute tools that don't need confirmation (parallel via Promise.all)
258
260
  if (toolsToExecuteDirectly.length > 0) {
259
- const directResults = await executeToolsDirectly(toolsToExecuteDirectly, toolManager, conversationStateManager, addToChatQueue, getNextComponentKey);
261
+ const directResults = await executeToolsDirectly(toolsToExecuteDirectly, toolManager, conversationStateManager, addToChatQueue, getNextComponentKey, {
262
+ compactDisplay: compactToolDisplayRef?.current,
263
+ onCompactToolCount: (toolName) => {
264
+ if (compactToolCountsRef) {
265
+ const counts = compactToolCountsRef.current;
266
+ counts[toolName] = (counts[toolName] ?? 0) + 1;
267
+ onSetCompactToolCounts?.({ ...counts });
268
+ }
269
+ },
270
+ });
260
271
  if (directResults.length > 0) {
261
272
  // Add tool results to messages
262
273
  const directBuilder = new MessageBuilder(updatedMessages);
@@ -264,10 +275,8 @@ export const processAssistantResponse = async (params) => {
264
275
  const updatedMessagesWithTools = directBuilder.build();
265
276
  setMessages(updatedMessagesWithTools);
266
277
  // If there are also tools needing confirmation, start that flow
267
- // instead of recursing. Recursing would send messages to the API
268
- // with the assistant's tool_calls for ALL tools but only results
269
- // for the direct ones, causing "Tool result is missing" errors.
270
278
  if (toolsNeedingConfirmation.length > 0) {
279
+ flushCompactCounts();
271
280
  onStartToolConfirmationFlow(toolsNeedingConfirmation, updatedMessagesWithTools, assistantMsg, systemMessage);
272
281
  return;
273
282
  }
@@ -282,6 +291,8 @@ export const processAssistantResponse = async (params) => {
282
291
  }
283
292
  // Start confirmation flow only for tools that need it
284
293
  if (toolsNeedingConfirmation.length > 0) {
294
+ // Flush compact counts before entering confirmation or exiting
295
+ flushCompactCounts();
285
296
  // In non-interactive mode, exit when tool approval is required
286
297
  if (nonInteractiveMode) {
287
298
  const toolNames = toolsNeedingConfirmation
@@ -300,13 +311,14 @@ export const processAssistantResponse = async (params) => {
300
311
  errorBuilder.addMessage(errorMessage);
301
312
  setMessages(errorBuilder.build());
302
313
  // Signal completion to trigger exit
314
+ setIsGenerating(false);
303
315
  if (onConversationComplete) {
304
316
  onConversationComplete();
305
317
  }
306
318
  return;
307
319
  }
308
- // Pass complete messages including assistant msg
309
- // useToolHandler will add tool results
320
+ // Hand off to confirmation flow — it manages its own generating state
321
+ setIsGenerating(false);
310
322
  onStartToolConfirmationFlow(toolsNeedingConfirmation, updatedMessages, // Includes assistant message
311
323
  assistantMsg, systemMessage);
312
324
  }
@@ -327,7 +339,7 @@ export const processAssistantResponse = async (params) => {
327
339
  role: 'user',
328
340
  content: nudgeContent,
329
341
  };
330
- // Display a "continue" message in chat so user knows what happened
342
+ // Display a "continue" message when the model produced empty text
331
343
  addToChatQueue(_jsx(UserMessage, { message: "continue" }, `auto-continue-${getNextComponentKey()}`));
332
344
  // Don't include the empty assistantMsg - it would cause API error
333
345
  // "Assistant message must have either content or tool_calls"
@@ -344,6 +356,7 @@ export const processAssistantResponse = async (params) => {
344
356
  return;
345
357
  }
346
358
  if (validToolCalls.length === 0 && cleanedContent.trim()) {
359
+ setIsGenerating(false);
347
360
  const adjective = getRandomAdjective();
348
361
  const elapsed = formatElapsedTime(startTime);
349
362
  addToChatQueue(_jsx(InfoMessage, { message: `Worked for a ${adjective} ${elapsed}.`, hideBox: true, marginBottom: 2 }, `completion-time-${getNextComponentKey()}`));