@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,561 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { ToolCallEmitter } from './ToolCallEmitter.js';
8
+ import { Kind, TodoWriteTool } from '@umsai/ums-code-core';
9
+ // Helper to create mock message parts for tests
10
+ const createMockMessage = (text) => text
11
+ ? [{ functionResponse: { name: 'test', response: { output: text } } }]
12
+ : [];
13
+ describe('ToolCallEmitter', () => {
14
+ let mockContext;
15
+ let sendUpdateSpy;
16
+ let mockToolRegistry;
17
+ let emitter;
18
+ // Helper to create mock tool
19
+ const createMockTool = (overrides = {}) => ({
20
+ name: 'test_tool',
21
+ kind: Kind.Other,
22
+ build: vi.fn().mockReturnValue({
23
+ getDescription: () => 'Test tool description',
24
+ toolLocations: () => [{ path: '/test/file.ts', line: 10 }],
25
+ }),
26
+ ...overrides,
27
+ });
28
+ beforeEach(() => {
29
+ sendUpdateSpy = vi.fn().mockResolvedValue(undefined);
30
+ mockToolRegistry = {
31
+ getTool: vi.fn().mockReturnValue(null),
32
+ };
33
+ mockContext = {
34
+ sessionId: 'test-session-id',
35
+ config: {
36
+ getToolRegistry: () => mockToolRegistry,
37
+ },
38
+ sendUpdate: sendUpdateSpy,
39
+ };
40
+ emitter = new ToolCallEmitter(mockContext);
41
+ });
42
+ describe('emitStart', () => {
43
+ it('should emit tool_call update with basic params when tool not in registry', async () => {
44
+ const result = await emitter.emitStart({
45
+ toolName: 'unknown_tool',
46
+ callId: 'call-123',
47
+ args: { arg1: 'value1' },
48
+ });
49
+ expect(result).toBe(true);
50
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
51
+ sessionUpdate: 'tool_call',
52
+ toolCallId: 'call-123',
53
+ status: 'pending',
54
+ title: 'unknown_tool', // Falls back to tool name
55
+ content: [],
56
+ locations: [],
57
+ kind: 'other',
58
+ rawInput: { arg1: 'value1' },
59
+ });
60
+ });
61
+ it('should emit tool_call with resolved metadata when tool is in registry', async () => {
62
+ const mockTool = createMockTool({ kind: Kind.Edit });
63
+ vi.mocked(mockToolRegistry.getTool).mockReturnValue(mockTool);
64
+ const result = await emitter.emitStart({
65
+ toolName: 'edit_file',
66
+ callId: 'call-456',
67
+ args: { path: '/test.ts' },
68
+ });
69
+ expect(result).toBe(true);
70
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
71
+ sessionUpdate: 'tool_call',
72
+ toolCallId: 'call-456',
73
+ status: 'pending',
74
+ title: 'edit_file: Test tool description',
75
+ content: [],
76
+ locations: [{ path: '/test/file.ts', line: 10 }],
77
+ kind: 'edit',
78
+ rawInput: { path: '/test.ts' },
79
+ });
80
+ });
81
+ it('should skip emit for TodoWriteTool and return false', async () => {
82
+ const result = await emitter.emitStart({
83
+ toolName: TodoWriteTool.Name,
84
+ callId: 'call-todo',
85
+ args: { todos: [] },
86
+ });
87
+ expect(result).toBe(false);
88
+ expect(sendUpdateSpy).not.toHaveBeenCalled();
89
+ });
90
+ it('should handle empty args', async () => {
91
+ await emitter.emitStart({
92
+ toolName: 'test_tool',
93
+ callId: 'call-empty',
94
+ });
95
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
96
+ rawInput: {},
97
+ }));
98
+ });
99
+ it('should fall back gracefully when tool build fails', async () => {
100
+ const mockTool = createMockTool();
101
+ vi.mocked(mockTool.build).mockImplementation(() => {
102
+ throw new Error('Build failed');
103
+ });
104
+ vi.mocked(mockToolRegistry.getTool).mockReturnValue(mockTool);
105
+ await emitter.emitStart({
106
+ toolName: 'failing_tool',
107
+ callId: 'call-fail',
108
+ args: { invalid: true },
109
+ });
110
+ // Should use fallback values
111
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
112
+ sessionUpdate: 'tool_call',
113
+ toolCallId: 'call-fail',
114
+ status: 'pending',
115
+ title: 'failing_tool', // Fallback to tool name
116
+ content: [],
117
+ locations: [], // Fallback to empty
118
+ kind: 'other', // Fallback to other
119
+ rawInput: { invalid: true },
120
+ });
121
+ });
122
+ });
123
+ describe('emitResult', () => {
124
+ it('should emit tool_call_update with completed status on success', async () => {
125
+ await emitter.emitResult({
126
+ toolName: 'test_tool',
127
+ callId: 'call-123',
128
+ success: true,
129
+ message: createMockMessage('Tool completed successfully'),
130
+ resultDisplay: 'Tool completed successfully',
131
+ });
132
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
133
+ sessionUpdate: 'tool_call_update',
134
+ toolCallId: 'call-123',
135
+ status: 'completed',
136
+ rawOutput: 'Tool completed successfully',
137
+ }));
138
+ });
139
+ it('should emit tool_call_update with failed status on failure', async () => {
140
+ await emitter.emitResult({
141
+ toolName: 'test_tool',
142
+ callId: 'call-123',
143
+ success: false,
144
+ message: [],
145
+ error: new Error('Something went wrong'),
146
+ });
147
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
148
+ sessionUpdate: 'tool_call_update',
149
+ toolCallId: 'call-123',
150
+ status: 'failed',
151
+ content: [
152
+ {
153
+ type: 'content',
154
+ content: { type: 'text', text: 'Something went wrong' },
155
+ },
156
+ ],
157
+ });
158
+ });
159
+ it('should handle diff display format', async () => {
160
+ await emitter.emitResult({
161
+ toolName: 'edit_file',
162
+ callId: 'call-edit',
163
+ success: true,
164
+ message: [],
165
+ resultDisplay: {
166
+ fileName: '/test/file.ts',
167
+ originalContent: 'old content',
168
+ newContent: 'new content',
169
+ },
170
+ });
171
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
172
+ sessionUpdate: 'tool_call_update',
173
+ toolCallId: 'call-edit',
174
+ status: 'completed',
175
+ content: [
176
+ {
177
+ type: 'diff',
178
+ path: '/test/file.ts',
179
+ oldText: 'old content',
180
+ newText: 'new content',
181
+ },
182
+ ],
183
+ }));
184
+ });
185
+ it('should transform message parts to content', async () => {
186
+ await emitter.emitResult({
187
+ toolName: 'test_tool',
188
+ callId: 'call-123',
189
+ success: true,
190
+ message: [{ text: 'Some text output' }],
191
+ resultDisplay: 'raw output',
192
+ });
193
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
194
+ sessionUpdate: 'tool_call_update',
195
+ toolCallId: 'call-123',
196
+ status: 'completed',
197
+ content: [
198
+ {
199
+ type: 'content',
200
+ content: { type: 'text', text: 'Some text output' },
201
+ },
202
+ ],
203
+ rawOutput: 'raw output',
204
+ }));
205
+ });
206
+ it('should handle empty message parts', async () => {
207
+ await emitter.emitResult({
208
+ toolName: 'test_tool',
209
+ callId: 'call-empty',
210
+ success: true,
211
+ message: [],
212
+ });
213
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
214
+ sessionUpdate: 'tool_call_update',
215
+ toolCallId: 'call-empty',
216
+ status: 'completed',
217
+ content: [],
218
+ });
219
+ });
220
+ describe('TodoWriteTool handling', () => {
221
+ it('should emit plan update instead of tool_call_update for TodoWriteTool', async () => {
222
+ await emitter.emitResult({
223
+ toolName: TodoWriteTool.Name,
224
+ callId: 'call-todo',
225
+ success: true,
226
+ message: [],
227
+ resultDisplay: {
228
+ type: 'todo_list',
229
+ todos: [
230
+ { id: '1', content: 'Task 1', status: 'pending' },
231
+ { id: '2', content: 'Task 2', status: 'in_progress' },
232
+ ],
233
+ },
234
+ });
235
+ expect(sendUpdateSpy).toHaveBeenCalledTimes(1);
236
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
237
+ sessionUpdate: 'plan',
238
+ entries: [
239
+ { content: 'Task 1', priority: 'medium', status: 'pending' },
240
+ { content: 'Task 2', priority: 'medium', status: 'in_progress' },
241
+ ],
242
+ });
243
+ });
244
+ it('should use args as fallback for TodoWriteTool todos', async () => {
245
+ await emitter.emitResult({
246
+ toolName: TodoWriteTool.Name,
247
+ callId: 'call-todo',
248
+ success: true,
249
+ message: [],
250
+ resultDisplay: null,
251
+ args: {
252
+ todos: [{ id: '1', content: 'From args', status: 'completed' }],
253
+ },
254
+ });
255
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
256
+ sessionUpdate: 'plan',
257
+ entries: [
258
+ { content: 'From args', priority: 'medium', status: 'completed' },
259
+ ],
260
+ });
261
+ });
262
+ it('should not emit anything for TodoWriteTool with empty todos', async () => {
263
+ await emitter.emitResult({
264
+ toolName: TodoWriteTool.Name,
265
+ callId: 'call-todo',
266
+ success: true,
267
+ message: [],
268
+ resultDisplay: { type: 'todo_list', todos: [] },
269
+ });
270
+ expect(sendUpdateSpy).not.toHaveBeenCalled();
271
+ });
272
+ it('should not emit anything for TodoWriteTool with no extractable todos', async () => {
273
+ await emitter.emitResult({
274
+ toolName: TodoWriteTool.Name,
275
+ callId: 'call-todo',
276
+ success: true,
277
+ message: [],
278
+ resultDisplay: 'Some string result',
279
+ });
280
+ expect(sendUpdateSpy).not.toHaveBeenCalled();
281
+ });
282
+ });
283
+ });
284
+ describe('emitError', () => {
285
+ it('should emit tool_call_update with failed status and error message', async () => {
286
+ const error = new Error('Connection timeout');
287
+ await emitter.emitError('call-123', error);
288
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
289
+ sessionUpdate: 'tool_call_update',
290
+ toolCallId: 'call-123',
291
+ status: 'failed',
292
+ content: [
293
+ {
294
+ type: 'content',
295
+ content: { type: 'text', text: 'Connection timeout' },
296
+ },
297
+ ],
298
+ });
299
+ });
300
+ });
301
+ describe('isTodoWriteTool', () => {
302
+ it('should return true for TodoWriteTool.Name', () => {
303
+ expect(emitter.isTodoWriteTool(TodoWriteTool.Name)).toBe(true);
304
+ });
305
+ it('should return false for other tool names', () => {
306
+ expect(emitter.isTodoWriteTool('read_file')).toBe(false);
307
+ expect(emitter.isTodoWriteTool('edit_file')).toBe(false);
308
+ expect(emitter.isTodoWriteTool('')).toBe(false);
309
+ });
310
+ });
311
+ describe('mapToolKind', () => {
312
+ it('should map all Kind values correctly', () => {
313
+ expect(emitter.mapToolKind(Kind.Read)).toBe('read');
314
+ expect(emitter.mapToolKind(Kind.Edit)).toBe('edit');
315
+ expect(emitter.mapToolKind(Kind.Delete)).toBe('delete');
316
+ expect(emitter.mapToolKind(Kind.Move)).toBe('move');
317
+ expect(emitter.mapToolKind(Kind.Search)).toBe('search');
318
+ expect(emitter.mapToolKind(Kind.Execute)).toBe('execute');
319
+ expect(emitter.mapToolKind(Kind.Think)).toBe('think');
320
+ expect(emitter.mapToolKind(Kind.Fetch)).toBe('fetch');
321
+ expect(emitter.mapToolKind(Kind.Other)).toBe('other');
322
+ });
323
+ it('should map exit_plan_mode tool to switch_mode kind', () => {
324
+ // exit_plan_mode uses Kind.Think internally, but should map to switch_mode per ACP spec
325
+ expect(emitter.mapToolKind(Kind.Think, 'exit_plan_mode')).toBe('switch_mode');
326
+ });
327
+ it('should not affect other tools with Kind.Think', () => {
328
+ // Other tools with Kind.Think should still map to think
329
+ expect(emitter.mapToolKind(Kind.Think, 'todo_write')).toBe('think');
330
+ expect(emitter.mapToolKind(Kind.Think, 'some_other_tool')).toBe('think');
331
+ });
332
+ });
333
+ describe('isExitPlanModeTool', () => {
334
+ it('should return true for exit_plan_mode tool name', () => {
335
+ expect(emitter.isExitPlanModeTool('exit_plan_mode')).toBe(true);
336
+ });
337
+ it('should return false for other tool names', () => {
338
+ expect(emitter.isExitPlanModeTool('read_file')).toBe(false);
339
+ expect(emitter.isExitPlanModeTool('edit_file')).toBe(false);
340
+ expect(emitter.isExitPlanModeTool('todo_write')).toBe(false);
341
+ expect(emitter.isExitPlanModeTool('')).toBe(false);
342
+ });
343
+ });
344
+ describe('resolveToolMetadata', () => {
345
+ it('should return defaults when tool not found', () => {
346
+ const metadata = emitter.resolveToolMetadata('unknown_tool', {
347
+ arg: 'value',
348
+ });
349
+ expect(metadata).toEqual({
350
+ title: 'unknown_tool',
351
+ locations: [],
352
+ kind: 'other',
353
+ });
354
+ });
355
+ it('should return tool metadata when tool found and built successfully', () => {
356
+ const mockTool = createMockTool({ kind: Kind.Search });
357
+ vi.mocked(mockToolRegistry.getTool).mockReturnValue(mockTool);
358
+ const metadata = emitter.resolveToolMetadata('search_tool', {
359
+ query: 'test',
360
+ });
361
+ expect(metadata).toEqual({
362
+ title: 'search_tool: Test tool description',
363
+ locations: [{ path: '/test/file.ts', line: 10 }],
364
+ kind: 'search',
365
+ });
366
+ });
367
+ });
368
+ describe('integration: consistent behavior across flows', () => {
369
+ it('should handle the same params consistently regardless of source', async () => {
370
+ // This test verifies that the emitter produces consistent output
371
+ // whether called from normal flow, replay, or subagent
372
+ const params = {
373
+ toolName: 'read_file',
374
+ callId: 'consistent-call',
375
+ args: { path: '/test.ts' },
376
+ };
377
+ // First call (e.g., from normal flow)
378
+ await emitter.emitStart(params);
379
+ const firstCall = sendUpdateSpy.mock.calls[0][0];
380
+ // Reset and call again (e.g., from replay)
381
+ sendUpdateSpy.mockClear();
382
+ await emitter.emitStart(params);
383
+ const secondCall = sendUpdateSpy.mock.calls[0][0];
384
+ // Both should produce identical output
385
+ expect(firstCall).toEqual(secondCall);
386
+ });
387
+ });
388
+ describe('fixes verification', () => {
389
+ describe('Fix 2: functionResponse parts are stringified', () => {
390
+ it('should stringify functionResponse parts in message', async () => {
391
+ await emitter.emitResult({
392
+ toolName: 'test_tool',
393
+ callId: 'call-func',
394
+ success: true,
395
+ message: [
396
+ {
397
+ functionResponse: {
398
+ name: 'test',
399
+ response: { output: 'test output' },
400
+ },
401
+ },
402
+ ],
403
+ resultDisplay: { unknownField: 'value', nested: { data: 123 } },
404
+ });
405
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
406
+ sessionUpdate: 'tool_call_update',
407
+ toolCallId: 'call-func',
408
+ status: 'completed',
409
+ content: [
410
+ {
411
+ type: 'content',
412
+ content: {
413
+ type: 'text',
414
+ text: 'test output',
415
+ },
416
+ },
417
+ ],
418
+ rawOutput: { unknownField: 'value', nested: { data: 123 } },
419
+ }));
420
+ });
421
+ });
422
+ describe('Fix 3: rawOutput is included in emitResult', () => {
423
+ it('should include rawOutput when resultDisplay is provided', async () => {
424
+ await emitter.emitResult({
425
+ toolName: 'test_tool',
426
+ callId: 'call-extra',
427
+ success: true,
428
+ message: [{ text: 'Result text' }],
429
+ resultDisplay: 'Result text',
430
+ });
431
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
432
+ sessionUpdate: 'tool_call_update',
433
+ toolCallId: 'call-extra',
434
+ status: 'completed',
435
+ rawOutput: 'Result text',
436
+ }));
437
+ });
438
+ it('should not include rawOutput when resultDisplay is undefined', async () => {
439
+ await emitter.emitResult({
440
+ toolName: 'test_tool',
441
+ callId: 'call-null',
442
+ success: true,
443
+ message: [],
444
+ });
445
+ const call = sendUpdateSpy.mock.calls[0][0];
446
+ expect(call.rawOutput).toBeUndefined();
447
+ });
448
+ });
449
+ describe('Fix 5: Line null mapping in resolveToolMetadata', () => {
450
+ it('should map undefined line to null in locations', () => {
451
+ const mockTool = createMockTool();
452
+ // Override toolLocations to return undefined line
453
+ vi.mocked(mockTool.build).mockReturnValue({
454
+ getDescription: () => 'Description',
455
+ toolLocations: () => [
456
+ { path: '/file1.ts', line: 10 },
457
+ { path: '/file2.ts', line: undefined },
458
+ { path: '/file3.ts' }, // no line property
459
+ ],
460
+ });
461
+ vi.mocked(mockToolRegistry.getTool).mockReturnValue(mockTool);
462
+ const metadata = emitter.resolveToolMetadata('test_tool', {
463
+ arg: 'value',
464
+ });
465
+ expect(metadata.locations).toEqual([
466
+ { path: '/file1.ts', line: 10 },
467
+ { path: '/file2.ts', line: null },
468
+ { path: '/file3.ts', line: null },
469
+ ]);
470
+ });
471
+ });
472
+ describe('Fix 6: Empty plan emission when args has todos', () => {
473
+ it('should emit empty plan when args had todos but result has none', async () => {
474
+ await emitter.emitResult({
475
+ toolName: TodoWriteTool.Name,
476
+ callId: 'call-todo-empty',
477
+ success: true,
478
+ message: [],
479
+ resultDisplay: null, // No result display
480
+ args: {
481
+ todos: [], // Empty array in args
482
+ },
483
+ });
484
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
485
+ sessionUpdate: 'plan',
486
+ entries: [],
487
+ });
488
+ });
489
+ it('should emit empty plan when result todos is empty but args had todos', async () => {
490
+ await emitter.emitResult({
491
+ toolName: TodoWriteTool.Name,
492
+ callId: 'call-todo-cleared',
493
+ success: true,
494
+ message: [],
495
+ resultDisplay: {
496
+ type: 'todo_list',
497
+ todos: [], // Empty result
498
+ },
499
+ args: {
500
+ todos: [{ id: '1', content: 'Was here', status: 'pending' }],
501
+ },
502
+ });
503
+ // Should still emit empty plan (result takes precedence but we emit empty)
504
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
505
+ sessionUpdate: 'plan',
506
+ entries: [],
507
+ });
508
+ });
509
+ });
510
+ describe('Message transformation', () => {
511
+ it('should transform text parts from message', async () => {
512
+ await emitter.emitResult({
513
+ toolName: 'test_tool',
514
+ callId: 'call-text',
515
+ success: true,
516
+ message: [{ text: 'Text content from message' }],
517
+ });
518
+ expect(sendUpdateSpy).toHaveBeenCalledWith({
519
+ sessionUpdate: 'tool_call_update',
520
+ toolCallId: 'call-text',
521
+ status: 'completed',
522
+ content: [
523
+ {
524
+ type: 'content',
525
+ content: { type: 'text', text: 'Text content from message' },
526
+ },
527
+ ],
528
+ });
529
+ });
530
+ it('should transform functionResponse parts from message', async () => {
531
+ await emitter.emitResult({
532
+ toolName: 'test_tool',
533
+ callId: 'call-func-resp',
534
+ success: true,
535
+ message: [
536
+ {
537
+ functionResponse: {
538
+ name: 'test_tool',
539
+ response: { output: 'Function output' },
540
+ },
541
+ },
542
+ ],
543
+ resultDisplay: 'raw result',
544
+ });
545
+ expect(sendUpdateSpy).toHaveBeenCalledWith(expect.objectContaining({
546
+ sessionUpdate: 'tool_call_update',
547
+ toolCallId: 'call-func-resp',
548
+ status: 'completed',
549
+ content: [
550
+ {
551
+ type: 'content',
552
+ content: { type: 'text', text: 'Function output' },
553
+ },
554
+ ],
555
+ rawOutput: 'raw result',
556
+ }));
557
+ });
558
+ });
559
+ });
560
+ });
561
+ //# sourceMappingURL=ToolCallEmitter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCallEmitter.test.js","sourceRoot":"","sources":["../../../../../src/acp-integration/session/emitters/ToolCallEmitter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export { BaseEmitter } from './BaseEmitter.js';
7
+ export { MessageEmitter } from './MessageEmitter.js';
8
+ export { PlanEmitter } from './PlanEmitter.js';
9
+ export { ToolCallEmitter } from './ToolCallEmitter.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export { BaseEmitter } from './BaseEmitter.js';
7
+ export { MessageEmitter } from './MessageEmitter.js';
8
+ export { PlanEmitter } from './PlanEmitter.js';
9
+ export { ToolCallEmitter } from './ToolCallEmitter.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/acp-integration/session/emitters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Session module for ACP/Zed integration.
8
+ *
9
+ * This module provides a modular architecture for handling session events:
10
+ * - **Emitters**: Unified event emission (MessageEmitter, ToolCallEmitter, PlanEmitter)
11
+ * - **HistoryReplayer**: Replays session history using unified emitters
12
+ * - **SubAgentTracker**: Tracks sub-agent tool events using unified emitters
13
+ *
14
+ * The key benefit is that all event emission goes through the same emitters,
15
+ * ensuring consistency between normal flow, history replay, and sub-agent events.
16
+ */
17
+ export type { SessionContext, SessionUpdateSender, ToolCallStartParams, ToolCallResultParams, TodoItem, ResolvedToolMetadata, } from './types.js';
18
+ export { BaseEmitter } from './emitters/BaseEmitter.js';
19
+ export { MessageEmitter } from './emitters/MessageEmitter.js';
20
+ export { PlanEmitter } from './emitters/PlanEmitter.js';
21
+ export { ToolCallEmitter } from './emitters/ToolCallEmitter.js';
22
+ export { HistoryReplayer } from './HistoryReplayer.js';
23
+ export { SubAgentTracker } from './SubAgentTracker.js';
24
+ export { Session } from './Session.js';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ // Emitters
7
+ export { BaseEmitter } from './emitters/BaseEmitter.js';
8
+ export { MessageEmitter } from './emitters/MessageEmitter.js';
9
+ export { PlanEmitter } from './emitters/PlanEmitter.js';
10
+ export { ToolCallEmitter } from './emitters/ToolCallEmitter.js';
11
+ // Components
12
+ export { HistoryReplayer } from './HistoryReplayer.js';
13
+ export { SubAgentTracker } from './SubAgentTracker.js';
14
+ // Main Session class
15
+ export { Session } from './Session.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/acp-integration/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAqB;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}