@umsai/ums-code 0.3.0-v1 → 0.5.0-v1

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 (294) hide show
  1. package/dist/package.json +4 -4
  2. package/dist/src/{zed-integration → acp-integration}/acp.d.ts +7 -0
  3. package/dist/src/{zed-integration → acp-integration}/acp.js +25 -0
  4. package/dist/src/acp-integration/acp.js.map +1 -0
  5. package/dist/src/acp-integration/acpAgent.d.ts +10 -0
  6. package/dist/src/acp-integration/acpAgent.js +238 -0
  7. package/dist/src/acp-integration/acpAgent.js.map +1 -0
  8. package/dist/src/{zed-integration → acp-integration}/schema.d.ts +1030 -43
  9. package/dist/src/{zed-integration → acp-integration}/schema.js +81 -2
  10. package/dist/src/acp-integration/schema.js.map +1 -0
  11. package/dist/src/{zed-integration/fileSystemService.d.ts → acp-integration/service/filesystem.d.ts} +1 -1
  12. package/dist/src/{zed-integration/fileSystemService.js → acp-integration/service/filesystem.js} +14 -1
  13. package/dist/src/acp-integration/service/filesystem.js.map +1 -0
  14. package/dist/src/acp-integration/service/filesystem.test.d.ts +6 -0
  15. package/dist/src/acp-integration/service/filesystem.test.js +39 -0
  16. package/dist/src/acp-integration/service/filesystem.test.js.map +1 -0
  17. package/dist/src/acp-integration/session/HistoryReplayer.d.ts +51 -0
  18. package/dist/src/acp-integration/session/HistoryReplayer.js +164 -0
  19. package/dist/src/acp-integration/session/HistoryReplayer.js.map +1 -0
  20. package/dist/src/acp-integration/session/HistoryReplayer.test.d.ts +6 -0
  21. package/dist/src/acp-integration/session/HistoryReplayer.test.js +374 -0
  22. package/dist/src/acp-integration/session/HistoryReplayer.test.js.map +1 -0
  23. package/dist/src/acp-integration/session/Session.d.ts +66 -0
  24. package/dist/src/acp-integration/session/Session.js +760 -0
  25. package/dist/src/acp-integration/session/Session.js.map +1 -0
  26. package/dist/src/acp-integration/session/SubAgentTracker.d.ts +51 -0
  27. package/dist/src/acp-integration/session/SubAgentTracker.js +257 -0
  28. package/dist/src/acp-integration/session/SubAgentTracker.js.map +1 -0
  29. package/dist/src/acp-integration/session/SubAgentTracker.test.d.ts +6 -0
  30. package/dist/src/acp-integration/session/SubAgentTracker.test.js +369 -0
  31. package/dist/src/acp-integration/session/SubAgentTracker.test.js.map +1 -0
  32. package/dist/src/acp-integration/session/emitters/BaseEmitter.d.ts +27 -0
  33. package/dist/src/acp-integration/session/emitters/BaseEmitter.js +34 -0
  34. package/dist/src/acp-integration/session/emitters/BaseEmitter.js.map +1 -0
  35. package/dist/src/acp-integration/session/emitters/MessageEmitter.d.ts +41 -0
  36. package/dist/src/acp-integration/session/emitters/MessageEmitter.js +77 -0
  37. package/dist/src/acp-integration/session/emitters/MessageEmitter.js.map +1 -0
  38. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.d.ts +6 -0
  39. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js +174 -0
  40. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js.map +1 -0
  41. package/dist/src/acp-integration/session/emitters/PlanEmitter.d.ts +39 -0
  42. package/dist/src/acp-integration/session/emitters/PlanEmitter.js +83 -0
  43. package/dist/src/acp-integration/session/emitters/PlanEmitter.js.map +1 -0
  44. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.d.ts +6 -0
  45. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js +176 -0
  46. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js.map +1 -0
  47. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.d.ts +80 -0
  48. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js +248 -0
  49. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js.map +1 -0
  50. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.d.ts +6 -0
  51. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js +561 -0
  52. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js.map +1 -0
  53. package/dist/src/acp-integration/session/emitters/index.d.ts +9 -0
  54. package/dist/src/acp-integration/session/emitters/index.js +10 -0
  55. package/dist/src/acp-integration/session/emitters/index.js.map +1 -0
  56. package/dist/src/acp-integration/session/index.d.ts +24 -0
  57. package/dist/src/acp-integration/session/index.js +16 -0
  58. package/dist/src/acp-integration/session/index.js.map +1 -0
  59. package/dist/src/acp-integration/session/types.d.ts +71 -0
  60. package/dist/src/acp-integration/session/types.js +7 -0
  61. package/dist/src/acp-integration/session/types.js.map +1 -0
  62. package/dist/src/config/auth.d.ts +1 -0
  63. package/dist/src/config/auth.js +3 -0
  64. package/dist/src/config/auth.js.map +1 -1
  65. package/dist/src/config/config.d.ts +11 -3
  66. package/dist/src/config/config.js +84 -8
  67. package/dist/src/config/config.js.map +1 -1
  68. package/dist/src/config/extension.js +0 -2
  69. package/dist/src/config/extension.js.map +1 -1
  70. package/dist/src/config/settingsSchema.d.ts +12 -0
  71. package/dist/src/config/settingsSchema.js +10 -0
  72. package/dist/src/config/settingsSchema.js.map +1 -1
  73. package/dist/src/core/auth.d.ts +1 -1
  74. package/dist/src/core/auth.js +3 -2
  75. package/dist/src/core/auth.js.map +1 -1
  76. package/dist/src/gemini.js +38 -18
  77. package/dist/src/gemini.js.map +1 -1
  78. package/dist/src/gemini.test.js +7 -0
  79. package/dist/src/gemini.test.js.map +1 -1
  80. package/dist/src/generated/git-commit.d.ts +2 -2
  81. package/dist/src/generated/git-commit.js +2 -2
  82. package/dist/src/i18n/index.d.ts +1 -1
  83. package/dist/src/i18n/index.js +4 -0
  84. package/dist/src/i18n/index.js.map +1 -1
  85. package/dist/src/i18n/locales/en.js +1 -13
  86. package/dist/src/i18n/locales/ru.js +1121 -0
  87. package/dist/src/i18n/locales/zh.js +1 -10
  88. package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +24 -1
  89. package/dist/src/nonInteractive/control/ControlDispatcher.js +46 -17
  90. package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -1
  91. package/dist/src/nonInteractive/control/ControlService.d.ts +2 -1
  92. package/dist/src/nonInteractive/control/ControlService.js +22 -37
  93. package/dist/src/nonInteractive/control/ControlService.js.map +1 -1
  94. package/dist/src/nonInteractive/control/controllers/baseController.d.ts +2 -1
  95. package/dist/src/nonInteractive/control/controllers/baseController.js +38 -5
  96. package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -1
  97. package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +1 -22
  98. package/dist/src/nonInteractive/control/controllers/permissionController.js +38 -38
  99. package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -1
  100. package/dist/src/nonInteractive/control/controllers/sdkMcpController.d.ts +54 -0
  101. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js +84 -0
  102. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js.map +1 -0
  103. package/dist/src/nonInteractive/control/controllers/systemController.d.ts +16 -6
  104. package/dist/src/nonInteractive/control/controllers/systemController.js +189 -44
  105. package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -1
  106. package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +1 -16
  107. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +11 -0
  108. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +54 -2
  109. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -1
  110. package/dist/src/nonInteractive/session.d.ts +0 -16
  111. package/dist/src/nonInteractive/session.js +317 -321
  112. package/dist/src/nonInteractive/session.js.map +1 -1
  113. package/dist/src/nonInteractive/session.test.js +6 -0
  114. package/dist/src/nonInteractive/session.test.js.map +1 -1
  115. package/dist/src/nonInteractive/types.d.ts +57 -3
  116. package/dist/src/nonInteractive/types.js +0 -1
  117. package/dist/src/nonInteractive/types.js.map +1 -1
  118. package/dist/src/nonInteractiveCli.js +25 -46
  119. package/dist/src/nonInteractiveCli.js.map +1 -1
  120. package/dist/src/services/BuiltinCommandLoader.js +5 -6
  121. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  122. package/dist/src/services/BuiltinCommandLoader.test.js +0 -3
  123. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  124. package/dist/src/test-utils/mockCommandContext.js +11 -2
  125. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  126. package/dist/src/ui/AppContainer.js +39 -36
  127. package/dist/src/ui/AppContainer.js.map +1 -1
  128. package/dist/src/ui/auth/useAuth.js +20 -1
  129. package/dist/src/ui/auth/useAuth.js.map +1 -1
  130. package/dist/src/ui/commands/clearCommand.js +22 -10
  131. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  132. package/dist/src/ui/commands/languageCommand.js +41 -8
  133. package/dist/src/ui/commands/languageCommand.js.map +1 -1
  134. package/dist/src/ui/commands/languageCommand.test.d.ts +6 -0
  135. package/dist/src/ui/commands/languageCommand.test.js +463 -0
  136. package/dist/src/ui/commands/languageCommand.test.js.map +1 -0
  137. package/dist/src/ui/commands/modelCommand.js +4 -2
  138. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  139. package/dist/src/ui/commands/quitCommand.d.ts +0 -1
  140. package/dist/src/ui/commands/quitCommand.js +0 -27
  141. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  142. package/dist/src/ui/commands/reviewCommand.d.ts +9 -0
  143. package/dist/src/ui/commands/reviewCommand.js +1267 -0
  144. package/dist/src/ui/commands/reviewCommand.js.map +1 -0
  145. package/dist/src/ui/commands/reviewCommand.test.d.ts +6 -0
  146. package/dist/src/ui/commands/reviewCommand.test.js +545 -0
  147. package/dist/src/ui/commands/reviewCommand.test.js.map +1 -0
  148. package/dist/src/ui/commands/setupGithubCommand.js +11 -10
  149. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  150. package/dist/src/ui/commands/setupGithubCommand.test.js +14 -14
  151. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  152. package/dist/src/ui/commands/types.d.ts +4 -9
  153. package/dist/src/ui/commands/types.js.map +1 -1
  154. package/dist/src/ui/commands/ums/unittestCommand.d.ts +9 -0
  155. package/dist/src/ui/commands/ums/unittestCommand.js +387 -0
  156. package/dist/src/ui/commands/ums/unittestCommand.js.map +1 -0
  157. package/dist/src/ui/components/Composer.test.js +1 -2
  158. package/dist/src/ui/components/Composer.test.js.map +1 -1
  159. package/dist/src/ui/components/ContextUsageDisplay.d.ts +3 -2
  160. package/dist/src/ui/components/ContextUsageDisplay.js +8 -2
  161. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  162. package/dist/src/ui/components/DialogManager.js +3 -19
  163. package/dist/src/ui/components/DialogManager.js.map +1 -1
  164. package/dist/src/ui/components/Footer.js +2 -3
  165. package/dist/src/ui/components/Footer.js.map +1 -1
  166. package/dist/src/ui/components/Help.js +13 -2
  167. package/dist/src/ui/components/Help.js.map +1 -1
  168. package/dist/src/ui/components/Help.test.js +6 -0
  169. package/dist/src/ui/components/Help.test.js.map +1 -1
  170. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  171. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  172. package/dist/src/ui/components/InputPrompt.js +6 -4
  173. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  174. package/dist/src/ui/components/ModelDialog.d.ts +3 -1
  175. package/dist/src/ui/components/ModelDialog.js +25 -5
  176. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  177. package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +3 -0
  178. package/dist/src/ui/components/OpenAIKeyPrompt.js +1 -0
  179. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  180. package/dist/src/ui/components/ResumeSessionPicker.d.ts +10 -0
  181. package/dist/src/ui/components/ResumeSessionPicker.js +249 -0
  182. package/dist/src/ui/components/ResumeSessionPicker.js.map +1 -0
  183. package/dist/src/ui/components/SessionSummaryDisplay.js +10 -2
  184. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  185. package/dist/src/ui/components/SettingsDialog.test.js +2 -2
  186. package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
  187. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  188. package/dist/src/ui/components/messages/GeminiThoughtMessage.d.ts +18 -0
  189. package/dist/src/ui/components/messages/GeminiThoughtMessage.js +14 -0
  190. package/dist/src/ui/components/messages/GeminiThoughtMessage.js.map +1 -0
  191. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.d.ts +18 -0
  192. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js +14 -0
  193. package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js.map +1 -0
  194. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +4 -1
  195. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  196. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +2 -2
  197. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  198. package/dist/src/ui/components/ums/UMSKeyPrompt.d.ts +1 -1
  199. package/dist/src/ui/components/ums/UMSKeyPrompt.js +23 -3
  200. package/dist/src/ui/components/ums/UMSKeyPrompt.js.map +1 -1
  201. package/dist/src/ui/components/ums/umsStartupWarnings.d.ts +6 -0
  202. package/dist/src/ui/components/ums/umsStartupWarnings.js +47 -0
  203. package/dist/src/ui/components/ums/umsStartupWarnings.js.map +1 -0
  204. package/dist/src/ui/contexts/SessionContext.d.ts +2 -0
  205. package/dist/src/ui/contexts/SessionContext.js +18 -10
  206. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  207. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -3
  208. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  209. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -8
  210. package/dist/src/ui/hooks/slashCommandProcessor.js +68 -101
  211. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  212. package/dist/src/ui/hooks/useAttentionNotifications.d.ts +3 -1
  213. package/dist/src/ui/hooks/useAttentionNotifications.js +10 -5
  214. package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -1
  215. package/dist/src/ui/hooks/useAttentionNotifications.test.js +39 -2
  216. package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -1
  217. package/dist/src/ui/hooks/useDialogClose.d.ts +0 -3
  218. package/dist/src/ui/hooks/useDialogClose.js +0 -2
  219. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  220. package/dist/src/ui/hooks/useGeminiStream.js +49 -9
  221. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  222. package/dist/src/ui/hooks/useLogger.d.ts +1 -1
  223. package/dist/src/ui/hooks/useLogger.js +6 -3
  224. package/dist/src/ui/hooks/useLogger.js.map +1 -1
  225. package/dist/src/ui/hooks/useReactToolScheduler.js +2 -2
  226. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  227. package/dist/src/ui/hooks/useSlashCompletion.js +9 -1
  228. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  229. package/dist/src/ui/hooks/useSlashCompletion.test.js +36 -31
  230. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  231. package/dist/src/ui/hooks/useToolScheduler.test.js +1 -0
  232. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  233. package/dist/src/ui/models/availableModels.d.ts +8 -2
  234. package/dist/src/ui/models/availableModels.js +24 -35
  235. package/dist/src/ui/models/availableModels.js.map +1 -1
  236. package/dist/src/ui/noninteractive/nonInteractiveUi.js +0 -1
  237. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  238. package/dist/src/ui/types.d.ts +9 -14
  239. package/dist/src/ui/types.js +0 -1
  240. package/dist/src/ui/types.js.map +1 -1
  241. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +1 -0
  242. package/dist/src/ui/utils/InlineMarkdownRenderer.js +2 -2
  243. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  244. package/dist/src/ui/utils/MarkdownDisplay.d.ts +1 -0
  245. package/dist/src/ui/utils/MarkdownDisplay.js +13 -13
  246. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  247. package/dist/src/ui/utils/formatters.d.ts +6 -0
  248. package/dist/src/ui/utils/formatters.js +31 -0
  249. package/dist/src/ui/utils/formatters.js.map +1 -1
  250. package/dist/src/ui/utils/formatters.test.js +51 -2
  251. package/dist/src/ui/utils/formatters.test.js.map +1 -1
  252. package/dist/src/ui/utils/resumeHistoryUtils.d.ts +19 -0
  253. package/dist/src/ui/utils/resumeHistoryUtils.js +263 -0
  254. package/dist/src/ui/utils/resumeHistoryUtils.js.map +1 -0
  255. package/dist/src/ui/utils/resumeHistoryUtils.test.d.ts +6 -0
  256. package/dist/src/ui/utils/resumeHistoryUtils.test.js +248 -0
  257. package/dist/src/ui/utils/resumeHistoryUtils.test.js.map +1 -0
  258. package/dist/src/utils/attentionNotification.d.ts +1 -0
  259. package/dist/src/utils/attentionNotification.js +4 -0
  260. package/dist/src/utils/attentionNotification.js.map +1 -1
  261. package/dist/src/utils/gitUtils.js +3 -3
  262. package/dist/src/utils/gitUtils.js.map +1 -1
  263. package/dist/src/utils/nonInteractiveHelpers.js +1 -1
  264. package/dist/src/utils/nonInteractiveHelpers.js.map +1 -1
  265. package/dist/src/utils/nonInteractiveHelpers.test.js +1 -1
  266. package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -1
  267. package/dist/src/validateNonInterActiveAuth.js +1 -1
  268. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  269. package/dist/tsconfig.tsbuildinfo +1 -1
  270. package/package.json +5 -5
  271. package/dist/src/nonInteractive/control/controllers/mcpController.d.ts +0 -42
  272. package/dist/src/nonInteractive/control/controllers/mcpController.js +0 -205
  273. package/dist/src/nonInteractive/control/controllers/mcpController.js.map +0 -1
  274. package/dist/src/ui/commands/chatCommand.d.ts +0 -9
  275. package/dist/src/ui/commands/chatCommand.js +0 -351
  276. package/dist/src/ui/commands/chatCommand.js.map +0 -1
  277. package/dist/src/ui/commands/corgiCommand.d.ts +0 -7
  278. package/dist/src/ui/commands/corgiCommand.js +0 -16
  279. package/dist/src/ui/commands/corgiCommand.js.map +0 -1
  280. package/dist/src/ui/components/QuitConfirmationDialog.d.ts +0 -17
  281. package/dist/src/ui/components/QuitConfirmationDialog.js +0 -49
  282. package/dist/src/ui/components/QuitConfirmationDialog.js.map +0 -1
  283. package/dist/src/ui/hooks/usePromptCompletion.d.ts +0 -23
  284. package/dist/src/ui/hooks/usePromptCompletion.js +0 -177
  285. package/dist/src/ui/hooks/usePromptCompletion.js.map +0 -1
  286. package/dist/src/ui/hooks/useQuitConfirmation.d.ts +0 -14
  287. package/dist/src/ui/hooks/useQuitConfirmation.js +0 -36
  288. package/dist/src/ui/hooks/useQuitConfirmation.js.map +0 -1
  289. package/dist/src/zed-integration/acp.js.map +0 -1
  290. package/dist/src/zed-integration/fileSystemService.js.map +0 -1
  291. package/dist/src/zed-integration/schema.js.map +0 -1
  292. package/dist/src/zed-integration/zedIntegration.d.ts +0 -17
  293. package/dist/src/zed-integration/zedIntegration.js +0 -1135
  294. package/dist/src/zed-integration/zedIntegration.js.map +0 -1
@@ -0,0 +1,248 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BaseEmitter } from './BaseEmitter.js';
7
+ import { PlanEmitter } from './PlanEmitter.js';
8
+ import { TodoWriteTool, Kind, ExitPlanModeTool, } from '@umsai/ums-code-core';
9
+ /**
10
+ * Unified tool call event emitter.
11
+ *
12
+ * Handles tool_call and tool_call_update for ALL flows:
13
+ * - Normal tool execution in runTool()
14
+ * - History replay in HistoryReplayer
15
+ * - SubAgent tool tracking in SubAgentTracker
16
+ *
17
+ * This ensures consistent behavior across all tool event sources,
18
+ * including special handling for tools like TodoWriteTool.
19
+ */
20
+ export class ToolCallEmitter extends BaseEmitter {
21
+ planEmitter;
22
+ constructor(ctx) {
23
+ super(ctx);
24
+ this.planEmitter = new PlanEmitter(ctx);
25
+ }
26
+ /**
27
+ * Emits a tool call start event.
28
+ *
29
+ * @param params - Tool call start parameters
30
+ * @returns true if event was emitted, false if skipped (e.g., TodoWriteTool)
31
+ */
32
+ async emitStart(params) {
33
+ // Skip tool_call for TodoWriteTool - plan updates sent on result
34
+ if (this.isTodoWriteTool(params.toolName)) {
35
+ return false;
36
+ }
37
+ const { title, locations, kind } = this.resolveToolMetadata(params.toolName, params.args);
38
+ await this.sendUpdate({
39
+ sessionUpdate: 'tool_call',
40
+ toolCallId: params.callId,
41
+ status: params.status || 'pending',
42
+ title,
43
+ content: [],
44
+ locations,
45
+ kind,
46
+ rawInput: params.args ?? {},
47
+ });
48
+ return true;
49
+ }
50
+ /**
51
+ * Emits a tool call result event.
52
+ * Handles TodoWriteTool specially by routing to plan updates.
53
+ *
54
+ * @param params - Tool call result parameters
55
+ */
56
+ async emitResult(params) {
57
+ // Handle TodoWriteTool specially - send plan update instead
58
+ if (this.isTodoWriteTool(params.toolName)) {
59
+ const todos = this.planEmitter.extractTodos(params.resultDisplay, params.args);
60
+ // Match original behavior: send plan even if empty when args['todos'] exists
61
+ // This ensures the UI is updated even when all todos are removed
62
+ if (todos && todos.length > 0) {
63
+ await this.planEmitter.emitPlan(todos);
64
+ }
65
+ else if (params.args && Array.isArray(params.args['todos'])) {
66
+ // Send empty plan when args had todos but result has none
67
+ await this.planEmitter.emitPlan([]);
68
+ }
69
+ return; // Skip tool_call_update for TodoWriteTool
70
+ }
71
+ // Determine content for the update
72
+ let contentArray = [];
73
+ // Special case: diff result from edit tools (format from resultDisplay)
74
+ const diffContent = this.extractDiffContent(params.resultDisplay);
75
+ if (diffContent) {
76
+ contentArray = [diffContent];
77
+ }
78
+ else if (params.error) {
79
+ // Error case: show error message
80
+ contentArray = [
81
+ {
82
+ type: 'content',
83
+ content: { type: 'text', text: params.error.message },
84
+ },
85
+ ];
86
+ }
87
+ else {
88
+ // Normal case: transform message parts to ToolCallContent[]
89
+ contentArray = this.transformPartsToToolCallContent(params.message);
90
+ }
91
+ // Build the update
92
+ const update = {
93
+ sessionUpdate: 'tool_call_update',
94
+ toolCallId: params.callId,
95
+ status: params.success ? 'completed' : 'failed',
96
+ content: contentArray,
97
+ };
98
+ // Add rawOutput from resultDisplay
99
+ if (params.resultDisplay !== undefined) {
100
+ update['rawOutput'] = params.resultDisplay;
101
+ }
102
+ await this.sendUpdate(update);
103
+ }
104
+ /**
105
+ * Emits a tool call error event.
106
+ * Use this for explicit error handling when not using emitResult.
107
+ *
108
+ * @param callId - The tool call ID
109
+ * @param error - The error that occurred
110
+ */
111
+ async emitError(callId, error) {
112
+ await this.sendUpdate({
113
+ sessionUpdate: 'tool_call_update',
114
+ toolCallId: callId,
115
+ status: 'failed',
116
+ content: [
117
+ { type: 'content', content: { type: 'text', text: error.message } },
118
+ ],
119
+ });
120
+ }
121
+ // ==================== Public Utilities ====================
122
+ /**
123
+ * Checks if a tool name is the TodoWriteTool.
124
+ * Exposed for external use in components that need to check this.
125
+ */
126
+ isTodoWriteTool(toolName) {
127
+ return toolName === TodoWriteTool.Name;
128
+ }
129
+ /**
130
+ * Checks if a tool name is the ExitPlanModeTool.
131
+ */
132
+ isExitPlanModeTool(toolName) {
133
+ return toolName === ExitPlanModeTool.Name;
134
+ }
135
+ /**
136
+ * Resolves tool metadata from the registry.
137
+ * Falls back to defaults if tool not found or build fails.
138
+ *
139
+ * @param toolName - Name of the tool
140
+ * @param args - Tool call arguments (used to build invocation)
141
+ */
142
+ resolveToolMetadata(toolName, args) {
143
+ const toolRegistry = this.config.getToolRegistry();
144
+ const tool = toolRegistry.getTool(toolName);
145
+ let title = tool?.displayName ?? toolName;
146
+ let locations = [];
147
+ let kind = 'other';
148
+ if (tool && args) {
149
+ try {
150
+ const invocation = tool.build(args);
151
+ title = `${title}: ${invocation.getDescription()}`;
152
+ // Map locations to ensure line is null instead of undefined (for ACP consistency)
153
+ locations = invocation.toolLocations().map((loc) => ({
154
+ path: loc.path,
155
+ line: loc.line ?? null,
156
+ }));
157
+ // Pass tool name to handle special cases like exit_plan_mode -> switch_mode
158
+ kind = this.mapToolKind(tool.kind, toolName);
159
+ }
160
+ catch {
161
+ // Use defaults on build failure
162
+ }
163
+ }
164
+ return { title, locations, kind };
165
+ }
166
+ /**
167
+ * Maps core Tool Kind enum to ACP ToolKind string literals.
168
+ *
169
+ * @param kind - The core Kind enum value
170
+ * @param toolName - Optional tool name to handle special cases like exit_plan_mode
171
+ */
172
+ mapToolKind(kind, toolName) {
173
+ // Special case: exit_plan_mode uses 'switch_mode' kind per ACP spec
174
+ if (toolName && this.isExitPlanModeTool(toolName)) {
175
+ return 'switch_mode';
176
+ }
177
+ const kindMap = {
178
+ [Kind.Read]: 'read',
179
+ [Kind.Edit]: 'edit',
180
+ [Kind.Delete]: 'delete',
181
+ [Kind.Move]: 'move',
182
+ [Kind.Search]: 'search',
183
+ [Kind.Execute]: 'execute',
184
+ [Kind.Think]: 'think',
185
+ [Kind.Fetch]: 'fetch',
186
+ [Kind.Other]: 'other',
187
+ };
188
+ return kindMap[kind] ?? 'other';
189
+ }
190
+ // ==================== Private Helpers ====================
191
+ /**
192
+ * Extracts diff content from resultDisplay if it's a diff type (edit tool result).
193
+ * Returns null if not a diff.
194
+ */
195
+ extractDiffContent(resultDisplay) {
196
+ if (!resultDisplay || typeof resultDisplay !== 'object')
197
+ return null;
198
+ const obj = resultDisplay;
199
+ // Check if this is a diff display (edit tool result)
200
+ if ('fileName' in obj && 'newContent' in obj) {
201
+ return {
202
+ type: 'diff',
203
+ path: obj['fileName'],
204
+ oldText: obj['originalContent'] ?? '',
205
+ newText: obj['newContent'],
206
+ };
207
+ }
208
+ return null;
209
+ }
210
+ /**
211
+ * Transforms Part[] to ToolCallContent[].
212
+ * Extracts text from functionResponse parts and text parts.
213
+ */
214
+ transformPartsToToolCallContent(parts) {
215
+ const result = [];
216
+ for (const part of parts) {
217
+ // Handle text parts
218
+ if ('text' in part && part.text) {
219
+ result.push({
220
+ type: 'content',
221
+ content: { type: 'text', text: part.text },
222
+ });
223
+ }
224
+ // Handle functionResponse parts - stringify the response
225
+ if ('functionResponse' in part && part.functionResponse) {
226
+ try {
227
+ const resp = part.functionResponse.response;
228
+ const outputField = resp['output'];
229
+ const errorField = resp['error'];
230
+ const responseText = typeof outputField === 'string'
231
+ ? outputField
232
+ : typeof errorField === 'string'
233
+ ? errorField
234
+ : JSON.stringify(resp);
235
+ result.push({
236
+ type: 'content',
237
+ content: { type: 'text', text: responseText },
238
+ });
239
+ }
240
+ catch {
241
+ // Ignore serialization errors
242
+ }
243
+ }
244
+ }
245
+ return result;
246
+ }
247
+ }
248
+ //# sourceMappingURL=ToolCallEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCallEmitter.js","sourceRoot":"","sources":["../../../../../src/acp-integration/session/emitters/ToolCallEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};