@umsai/ums-code 0.3.0-v2 → 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
@@ -108,7 +108,6 @@ export default {
108
108
  '在浏览器中打开完整的 UMS Code 文档',
109
109
  'Configuration not available.': '配置不可用',
110
110
  'change the auth method': '更改认证方法',
111
- 'Show quit confirmation dialog': '显示退出确认对话框',
112
111
  'Copy the last result or code snippet to clipboard':
113
112
  '将最后的结果或代码片段复制到剪贴板',
114
113
 
@@ -655,15 +654,6 @@ export default {
655
654
  'A custom command wants to run the following shell commands:':
656
655
  '自定义命令想要运行以下 shell 命令:',
657
656
 
658
- // ============================================================================
659
- // Dialogs - Quit Confirmation
660
- // ============================================================================
661
- 'What would you like to do before exiting?': '退出前您想要做什么?',
662
- 'Quit immediately (/quit)': '立即退出 (/quit)',
663
- 'Generate summary and quit (/summary)': '生成摘要并退出 (/summary)',
664
- 'Save conversation and quit (/chat save)': '保存对话并退出 (/chat save)',
665
- 'Cancel (stay in application)': '取消(留在应用程序中)',
666
-
667
657
  // ============================================================================
668
658
  // Dialogs - Pro Quota
669
659
  // ============================================================================
@@ -830,6 +820,7 @@ export default {
830
820
  // Exit Screen / Stats
831
821
  // ============================================================================
832
822
  'Agent powering down. Goodbye!': 'UMS Code 正在关闭,再见!',
823
+ 'To continue this session, run': '要继续此会话,请运行',
833
824
  'Interaction Summary': '交互摘要',
834
825
  'Session ID:': '会话 ID:',
835
826
  'Tool Calls:': '工具调用:',
@@ -15,15 +15,20 @@
15
15
  * Controllers:
16
16
  * - SystemController: initialize, interrupt, set_model, supported_commands
17
17
  * - PermissionController: can_use_tool, set_permission_mode
18
- * - MCPController: mcp_message, mcp_server_status
18
+ * - SdkMcpController: mcp_server_status (mcp_message handled via callback)
19
19
  * - HookController: hook_callback
20
20
  *
21
+ * Note: mcp_message requests are NOT routed through the dispatcher. CLI MCP
22
+ * clients send messages via SdkMcpController.createSendSdkMcpMessage() callback.
23
+ *
21
24
  * Note: Control request types are centrally defined in the ControlRequestType
22
25
  * enum in packages/sdk/typescript/src/types/controlRequests.ts
23
26
  */
24
27
  import type { IControlContext } from './ControlContext.js';
25
28
  import type { IPendingRequestRegistry } from './controllers/baseController.js';
26
29
  import { SystemController } from './controllers/systemController.js';
30
+ import { PermissionController } from './controllers/permissionController.js';
31
+ import { SdkMcpController } from './controllers/sdkMcpController.js';
27
32
  import type { CLIControlRequest, CLIControlResponse, ControlResponse, ControlRequestPayload } from '../types.js';
28
33
  /**
29
34
  * Central coordinator for control plane communication.
@@ -32,6 +37,8 @@ import type { CLIControlRequest, CLIControlResponse, ControlResponse, ControlReq
32
37
  export declare class ControlDispatcher implements IPendingRequestRegistry {
33
38
  private context;
34
39
  readonly systemController: SystemController;
40
+ readonly permissionController: PermissionController;
41
+ readonly sdkMcpController: SdkMcpController;
35
42
  private pendingIncomingRequests;
36
43
  private pendingOutgoingRequests;
37
44
  constructor(context: IControlContext);
@@ -71,6 +78,22 @@ export declare class ControlDispatcher implements IPendingRequestRegistry {
71
78
  * Removes an outgoing request from the pending registry
72
79
  */
73
80
  deregisterOutgoingRequest(requestId: string): void;
81
+ /**
82
+ * Get count of pending incoming requests (for debugging)
83
+ */
84
+ getPendingIncomingRequestCount(): number;
85
+ /**
86
+ * Wait for all incoming request handlers to complete.
87
+ *
88
+ * Uses polling since we don't have direct Promise references to handlers.
89
+ * The pendingIncomingRequests map is managed by BaseController:
90
+ * - Registered when handler starts (in handleRequest)
91
+ * - Deregistered when handler completes (success or error)
92
+ *
93
+ * @param pollIntervalMs - How often to check (default 50ms)
94
+ * @param timeoutMs - Maximum wait time (default 30s)
95
+ */
96
+ waitForPendingIncomingRequests(pollIntervalMs?: number, timeoutMs?: number): Promise<void>;
74
97
  /**
75
98
  * Returns the controller that handles the given request subtype
76
99
  */
@@ -4,6 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { SystemController } from './controllers/systemController.js';
7
+ import { PermissionController } from './controllers/permissionController.js';
8
+ import { SdkMcpController } from './controllers/sdkMcpController.js';
7
9
  /**
8
10
  * Central coordinator for control plane communication.
9
11
  * Routes requests to controllers and manages request lifecycle.
@@ -12,8 +14,8 @@ export class ControlDispatcher {
12
14
  context;
13
15
  // Make controllers publicly accessible
14
16
  systemController;
15
- // readonly permissionController: PermissionController;
16
- // readonly mcpController: MCPController;
17
+ permissionController;
18
+ sdkMcpController;
17
19
  // readonly hookController: HookController;
18
20
  // Central pending request registries
19
21
  pendingIncomingRequests = new Map();
@@ -22,12 +24,8 @@ export class ControlDispatcher {
22
24
  this.context = context;
23
25
  // Create domain controllers with context and registry
24
26
  this.systemController = new SystemController(context, this, 'SystemController');
25
- // this.permissionController = new PermissionController(
26
- // context,
27
- // this,
28
- // 'PermissionController',
29
- // );
30
- // this.mcpController = new MCPController(context, this, 'MCPController');
27
+ this.permissionController = new PermissionController(context, this, 'PermissionController');
28
+ this.sdkMcpController = new SdkMcpController(context, this, 'SdkMcpController');
31
29
  // this.hookController = new HookController(context, this, 'HookController');
32
30
  // Listen for main abort signal
33
31
  this.context.abortSignal.addEventListener('abort', () => {
@@ -137,10 +135,10 @@ export class ControlDispatcher {
137
135
  pending.reject(new Error('Dispatcher shutdown'));
138
136
  }
139
137
  this.pendingOutgoingRequests.clear();
140
- // Cleanup controllers (MCP controller will close all clients)
138
+ // Cleanup controllers
141
139
  this.systemController.cleanup();
142
- // this.permissionController.cleanup();
143
- // this.mcpController.cleanup();
140
+ this.permissionController.cleanup();
141
+ this.sdkMcpController.cleanup();
144
142
  // this.hookController.cleanup();
145
143
  }
146
144
  /**
@@ -184,6 +182,38 @@ export class ControlDispatcher {
184
182
  this.pendingOutgoingRequests.delete(requestId);
185
183
  }
186
184
  }
185
+ /**
186
+ * Get count of pending incoming requests (for debugging)
187
+ */
188
+ getPendingIncomingRequestCount() {
189
+ return this.pendingIncomingRequests.size;
190
+ }
191
+ /**
192
+ * Wait for all incoming request handlers to complete.
193
+ *
194
+ * Uses polling since we don't have direct Promise references to handlers.
195
+ * The pendingIncomingRequests map is managed by BaseController:
196
+ * - Registered when handler starts (in handleRequest)
197
+ * - Deregistered when handler completes (success or error)
198
+ *
199
+ * @param pollIntervalMs - How often to check (default 50ms)
200
+ * @param timeoutMs - Maximum wait time (default 30s)
201
+ */
202
+ async waitForPendingIncomingRequests(pollIntervalMs = 50, timeoutMs = 30000) {
203
+ const startTime = Date.now();
204
+ while (this.pendingIncomingRequests.size > 0) {
205
+ if (Date.now() - startTime > timeoutMs) {
206
+ if (this.context.debugMode) {
207
+ console.error(`[ControlDispatcher] Timeout waiting for ${this.pendingIncomingRequests.size} pending incoming requests`);
208
+ }
209
+ break;
210
+ }
211
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
212
+ }
213
+ if (this.context.debugMode && this.pendingIncomingRequests.size === 0) {
214
+ console.error('[ControlDispatcher] All incoming requests completed');
215
+ }
216
+ }
187
217
  /**
188
218
  * Returns the controller that handles the given request subtype
189
219
  */
@@ -194,12 +224,11 @@ export class ControlDispatcher {
194
224
  case 'set_model':
195
225
  case 'supported_commands':
196
226
  return this.systemController;
197
- // case 'can_use_tool':
198
- // case 'set_permission_mode':
199
- // return this.permissionController;
200
- // case 'mcp_message':
201
- // case 'mcp_server_status':
202
- // return this.mcpController;
227
+ case 'can_use_tool':
228
+ case 'set_permission_mode':
229
+ return this.permissionController;
230
+ case 'mcp_server_status':
231
+ return this.sdkMcpController;
203
232
  // case 'hook_callback':
204
233
  // return this.hookController;
205
234
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"ControlDispatcher.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ControlDispatcher.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlDispatcher.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@
26
26
  */
27
27
  import type { IControlContext } from './ControlContext.js';
28
28
  import type { ControlDispatcher } from './ControlDispatcher.js';
29
- import type { SystemServiceAPI } from './types/serviceAPIs.js';
29
+ import type { PermissionServiceAPI, SystemServiceAPI } from './types/serviceAPIs.js';
30
30
  /**
31
31
  * Control Service
32
32
  *
@@ -49,6 +49,7 @@ export declare class ControlService {
49
49
  * Handles tool execution permissions, approval checks, and callbacks.
50
50
  * Delegates to the shared PermissionController instance.
51
51
  */
52
+ get permission(): PermissionServiceAPI;
52
53
  /**
53
54
  * System Domain API
54
55
  *
@@ -27,43 +27,28 @@ export class ControlService {
27
27
  * Handles tool execution permissions, approval checks, and callbacks.
28
28
  * Delegates to the shared PermissionController instance.
29
29
  */
30
- // get permission(): PermissionServiceAPI {
31
- // const controller = this.dispatcher.permissionController;
32
- // return {
33
- // /**
34
- // * Check if a tool should be allowed based on current permission settings
35
- // *
36
- // * Evaluates permission mode and tool registry to determine if execution
37
- // * should proceed. Can optionally modify tool arguments based on confirmation details.
38
- // *
39
- // * @param toolRequest - Tool call request information
40
- // * @param confirmationDetails - Optional confirmation details for UI
41
- // * @returns Permission decision with optional updated arguments
42
- // */
43
- // shouldAllowTool: controller.shouldAllowTool.bind(controller),
44
- //
45
- // /**
46
- // * Build UI suggestions for tool confirmation dialogs
47
- // *
48
- // * Creates actionable permission suggestions based on tool confirmation details.
49
- // *
50
- // * @param confirmationDetails - Tool confirmation details
51
- // * @returns Array of permission suggestions or null
52
- // */
53
- // buildPermissionSuggestions:
54
- // controller.buildPermissionSuggestions.bind(controller),
55
- //
56
- // /**
57
- // * Get callback for monitoring tool call status updates
58
- // *
59
- // * Returns callback function for integration with CoreToolScheduler.
60
- // *
61
- // * @returns Callback function for tool call updates
62
- // */
63
- // getToolCallUpdateCallback:
64
- // controller.getToolCallUpdateCallback.bind(controller),
65
- // };
66
- // }
30
+ get permission() {
31
+ const controller = this.dispatcher.permissionController;
32
+ return {
33
+ /**
34
+ * Build UI suggestions for tool confirmation dialogs
35
+ *
36
+ * Creates actionable permission suggestions based on tool confirmation details.
37
+ *
38
+ * @param confirmationDetails - Tool confirmation details
39
+ * @returns Array of permission suggestions or null
40
+ */
41
+ buildPermissionSuggestions: controller.buildPermissionSuggestions.bind(controller),
42
+ /**
43
+ * Get callback for monitoring tool call status updates
44
+ *
45
+ * Returns callback function for integration with CoreToolScheduler.
46
+ *
47
+ * @returns Callback function for tool call updates
48
+ */
49
+ getToolCallUpdateCallback: controller.getToolCallUpdateCallback.bind(controller),
50
+ };
51
+ }
67
52
  /**
68
53
  * System Domain API
69
54
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ControlService.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACjB,UAAU,CAAoB;IAEtC;;;;;OAKG;IACH,YAAY,OAAwB,EAAE,UAA6B;QACjE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,2CAA2C;IAC3C,6DAA6D;IAC7D,aAAa;IACb,UAAU;IACV,gFAAgF;IAChF,SAAS;IACT,+EAA+E;IAC/E,6FAA6F;IAC7F,SAAS;IACT,4DAA4D;IAC5D,2EAA2E;IAC3E,sEAAsE;IACtE,UAAU;IACV,oEAAoE;IACpE,EAAE;IACF,UAAU;IACV,4DAA4D;IAC5D,SAAS;IACT,uFAAuF;IACvF,SAAS;IACT,gEAAgE;IAChE,0DAA0D;IAC1D,UAAU;IACV,kCAAkC;IAClC,gEAAgE;IAChE,EAAE;IACF,UAAU;IACV,8DAA8D;IAC9D,SAAS;IACT,2EAA2E;IAC3E,SAAS;IACT,0DAA0D;IAC1D,UAAU;IACV,iCAAiC;IACjC,+DAA+D;IAC/D,OAAO;IACP,IAAI;IAEJ;;;;;OAKG;IACH,IAAI,MAAM;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpD,OAAO;YACL;;;;;;;;eAQG;YACH,sBAAsB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE;SACpE,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,6BAA6B;IAC7B,aAAa;IACb,UAAU;IACV,qEAAqE;IACrE,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,oDAAoD;IACpD,iDAAiD;IACjD,UAAU;IACV,oDAAoD;IACpD,mEAAmE;IACnE,4CAA4C;IAC5C,+CAA+C;IAC/C,gFAAgF;IAChF,yBAAyB;IACzB,uFAAuF;IACvF,WAAW;IACX,SAAS;IACT,EAAE;IACF,UAAU;IACV,wCAAwC;IACxC,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,wCAAwC;IACxC,UAAU;IACV,2BAA2B;IAC3B,oCAAoC;IACpC,uCAAuC;IACvC,kEAAkE;IAClE,WAAW;IACX,uCAAuC;IACvC,sEAAsE;IACtE,WAAW;IACX,6DAA6D;IAC7D,SAAS;IACT,OAAO;IACP,IAAI;IAEJ;;;;;OAKG;IACH,+BAA+B;IAC/B,4FAA4F;IAC5F,eAAe;IACf,IAAI;IAEJ;;;;;OAKG;IACH,OAAO;QACL,0DAA0D;QAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACF"}
1
+ {"version":3,"file":"ControlService.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACjB,UAAU,CAAoB;IAEtC;;;;;OAKG;IACH,YAAY,OAAwB,EAAE,UAA6B;QACjE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,IAAI,UAAU;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxD,OAAO;YACL;;;;;;;eAOG;YACH,0BAA0B,EACxB,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC;YAExD;;;;;;eAMG;YACH,yBAAyB,EACvB,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC;SACxD,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,IAAI,MAAM;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpD,OAAO;YACL;;;;;;;;eAQG;YACH,sBAAsB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE;SACpE,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,6BAA6B;IAC7B,aAAa;IACb,UAAU;IACV,qEAAqE;IACrE,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,oDAAoD;IACpD,iDAAiD;IACjD,UAAU;IACV,oDAAoD;IACpD,mEAAmE;IACnE,4CAA4C;IAC5C,+CAA+C;IAC/C,gFAAgF;IAChF,yBAAyB;IACzB,uFAAuF;IACvF,WAAW;IACX,SAAS;IACT,EAAE;IACF,UAAU;IACV,wCAAwC;IACxC,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,wCAAwC;IACxC,UAAU;IACV,2BAA2B;IAC3B,oCAAoC;IACpC,uCAAuC;IACvC,kEAAkE;IAClE,WAAW;IACX,uCAAuC;IACvC,sEAAsE;IACtE,WAAW;IACX,6DAA6D;IAC7D,SAAS;IACT,OAAO;IACP,IAAI;IAEJ;;;;;OAKG;IACH,+BAA+B;IAC/B,4FAA4F;IAC5F,eAAe;IACf,IAAI;IAEJ;;;;;OAKG;IACH,OAAO;QACL,0DAA0D;QAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -35,8 +35,9 @@ export declare abstract class BaseController {
35
35
  * Send an outgoing control request to SDK
36
36
  *
37
37
  * Manages lifecycle: register -> send -> wait for response -> deregister
38
+ * Respects the provided AbortSignal for cancellation.
38
39
  */
39
- sendControlRequest(payload: ControlRequestPayload, timeoutMs?: number): Promise<ControlResponse>;
40
+ sendControlRequest(payload: ControlRequestPayload, timeoutMs?: number, signal?: AbortSignal): Promise<ControlResponse>;
40
41
  /**
41
42
  * Abstract method: Handle specific request payload
42
43
  *
@@ -63,20 +63,52 @@ export class BaseController {
63
63
  * Send an outgoing control request to SDK
64
64
  *
65
65
  * Manages lifecycle: register -> send -> wait for response -> deregister
66
+ * Respects the provided AbortSignal for cancellation.
66
67
  */
67
- async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
68
+ async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS, signal) {
69
+ // Check if already aborted
70
+ if (signal?.aborted) {
71
+ throw new Error('Request aborted');
72
+ }
68
73
  const requestId = randomUUID();
69
74
  return new Promise((resolve, reject) => {
75
+ // Setup abort handler
76
+ const abortHandler = () => {
77
+ this.registry.deregisterOutgoingRequest(requestId);
78
+ reject(new Error('Request aborted'));
79
+ if (this.context.debugMode) {
80
+ console.error(`[${this.controllerName}] Outgoing request aborted: ${requestId}`);
81
+ }
82
+ };
83
+ if (signal) {
84
+ signal.addEventListener('abort', abortHandler, { once: true });
85
+ }
70
86
  // Setup timeout
71
87
  const timeoutId = setTimeout(() => {
88
+ if (signal) {
89
+ signal.removeEventListener('abort', abortHandler);
90
+ }
72
91
  this.registry.deregisterOutgoingRequest(requestId);
73
92
  reject(new Error('Control request timeout'));
74
93
  if (this.context.debugMode) {
75
94
  console.error(`[${this.controllerName}] Outgoing request timeout: ${requestId}`);
76
95
  }
77
96
  }, timeoutMs);
97
+ // Wrap resolve/reject to clean up abort listener
98
+ const wrappedResolve = (response) => {
99
+ if (signal) {
100
+ signal.removeEventListener('abort', abortHandler);
101
+ }
102
+ resolve(response);
103
+ };
104
+ const wrappedReject = (error) => {
105
+ if (signal) {
106
+ signal.removeEventListener('abort', abortHandler);
107
+ }
108
+ reject(error);
109
+ };
78
110
  // Register with central registry
79
- this.registry.registerOutgoingRequest(requestId, this.controllerName, resolve, reject, timeoutId);
111
+ this.registry.registerOutgoingRequest(requestId, this.controllerName, wrappedResolve, wrappedReject, timeoutId);
80
112
  // Send control request
81
113
  const request = {
82
114
  type: 'control_request',
@@ -87,6 +119,9 @@ export class BaseController {
87
119
  this.context.streamJson.send(request);
88
120
  }
89
121
  catch (error) {
122
+ if (signal) {
123
+ signal.removeEventListener('abort', abortHandler);
124
+ }
90
125
  this.registry.deregisterOutgoingRequest(requestId);
91
126
  reject(error);
92
127
  }
@@ -95,8 +130,6 @@ export class BaseController {
95
130
  /**
96
131
  * Cleanup resources
97
132
  */
98
- cleanup() {
99
- // Subclasses can override to add cleanup logic
100
- }
133
+ cleanup() { }
101
134
  }
102
135
  //# sourceMappingURL=baseController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/baseController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/baseController.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,6 @@
3
3
  * Copyright 2025 Qwen Team
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- /**
7
- * Permission Controller
8
- *
9
- * Handles permission-related control requests:
10
- * - can_use_tool: Check if tool usage is allowed
11
- * - set_permission_mode: Change permission mode at runtime
12
- *
13
- * Abstracts all permission logic from the session manager to keep it clean.
14
- */
15
- import type { ToolCallRequestInfo } from '@umsai/ums-code-core';
16
6
  import type { ControlRequestPayload, PermissionSuggestion } from '../../types.js';
17
7
  import { BaseController } from './baseController.js';
18
8
  export declare class PermissionController extends BaseController {
@@ -20,7 +10,7 @@ export declare class PermissionController extends BaseController {
20
10
  /**
21
11
  * Handle permission control requests
22
12
  */
23
- protected handleRequestPayload(payload: ControlRequestPayload, _signal: AbortSignal): Promise<Record<string, unknown>>;
13
+ protected handleRequestPayload(payload: ControlRequestPayload, signal: AbortSignal): Promise<Record<string, unknown>>;
24
14
  /**
25
15
  * Handle can_use_tool request
26
16
  *
@@ -51,17 +41,6 @@ export declare class PermissionController extends BaseController {
51
41
  * helping the host application present appropriate permission options.
52
42
  */
53
43
  buildPermissionSuggestions(confirmationDetails: unknown): PermissionSuggestion[] | null;
54
- /**
55
- * Check if a tool should be executed based on current permission settings
56
- *
57
- * This is a convenience method for direct tool execution checks without
58
- * going through the control request flow.
59
- */
60
- shouldAllowTool(toolRequest: ToolCallRequestInfo, confirmationDetails?: unknown): Promise<{
61
- allowed: boolean;
62
- message?: string;
63
- updatedArgs?: Record<string, unknown>;
64
- }>;
65
44
  /**
66
45
  * Get callback for monitoring tool calls and handling outgoing permission requests
67
46
  * This is passed to executeToolCall to hook into CoreToolScheduler updates
@@ -10,12 +10,15 @@ export class PermissionController extends BaseController {
10
10
  /**
11
11
  * Handle permission control requests
12
12
  */
13
- async handleRequestPayload(payload, _signal) {
13
+ async handleRequestPayload(payload, signal) {
14
+ if (signal.aborted) {
15
+ throw new Error('Request aborted');
16
+ }
14
17
  switch (payload.subtype) {
15
18
  case 'can_use_tool':
16
- return this.handleCanUseTool(payload);
19
+ return this.handleCanUseTool(payload, signal);
17
20
  case 'set_permission_mode':
18
- return this.handleSetPermissionMode(payload);
21
+ return this.handleSetPermissionMode(payload, signal);
19
22
  default:
20
23
  throw new Error(`Unsupported request subtype in PermissionController`);
21
24
  }
@@ -28,7 +31,10 @@ export class PermissionController extends BaseController {
28
31
  * - Tool registry validation
29
32
  * - Error handling with safe defaults
30
33
  */
31
- async handleCanUseTool(payload) {
34
+ async handleCanUseTool(payload, signal) {
35
+ if (signal.aborted) {
36
+ throw new Error('Request aborted');
37
+ }
32
38
  const toolName = payload.tool_name;
33
39
  if (!toolName ||
34
40
  typeof toolName !== 'string' ||
@@ -125,7 +131,10 @@ export class PermissionController extends BaseController {
125
131
  *
126
132
  * Updates the permission mode in the context
127
133
  */
128
- async handleSetPermissionMode(payload) {
134
+ async handleSetPermissionMode(payload, signal) {
135
+ if (signal.aborted) {
136
+ throw new Error('Request aborted');
137
+ }
129
138
  const mode = payload.mode;
130
139
  const validModes = [
131
140
  'default',
@@ -137,6 +146,7 @@ export class PermissionController extends BaseController {
137
146
  throw new Error(`Invalid permission mode: ${mode}. Valid values are: ${validModes.join(', ')}`);
138
147
  }
139
148
  this.context.permissionMode = mode;
149
+ this.context.config.setApprovalMode(mode);
140
150
  if (this.context.debugMode) {
141
151
  console.error(`[PermissionController] Permission mode updated to: ${mode}`);
142
152
  }
@@ -246,36 +256,6 @@ export class PermissionController extends BaseController {
246
256
  ];
247
257
  }
248
258
  }
249
- /**
250
- * Check if a tool should be executed based on current permission settings
251
- *
252
- * This is a convenience method for direct tool execution checks without
253
- * going through the control request flow.
254
- */
255
- async shouldAllowTool(toolRequest, confirmationDetails) {
256
- // Check permission mode
257
- const modeResult = this.checkPermissionMode();
258
- if (!modeResult.allowed) {
259
- return {
260
- allowed: false,
261
- message: modeResult.message,
262
- };
263
- }
264
- // Check tool registry
265
- const registryResult = this.checkToolRegistry(toolRequest.name);
266
- if (!registryResult.allowed) {
267
- return {
268
- allowed: false,
269
- message: registryResult.message,
270
- };
271
- }
272
- // If we have confirmation details, we could potentially modify args
273
- // This is a hook for future enhancement
274
- if (confirmationDetails) {
275
- // Future: handle argument modifications based on confirmation details
276
- }
277
- return { allowed: true };
278
- }
279
259
  /**
280
260
  * Get callback for monitoring tool calls and handling outgoing permission requests
281
261
  * This is passed to executeToolCall to hook into CoreToolScheduler updates
@@ -305,6 +285,11 @@ export class PermissionController extends BaseController {
305
285
  */
306
286
  async handleOutgoingPermissionRequest(toolCall) {
307
287
  try {
288
+ // Check if already aborted
289
+ if (this.context.abortSignal?.aborted) {
290
+ await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
291
+ return;
292
+ }
308
293
  const inputFormat = this.context.config.getInputFormat?.();
309
294
  const isStreamJsonMode = inputFormat === InputFormat.STREAM_JSON;
310
295
  if (!isStreamJsonMode) {
@@ -325,7 +310,8 @@ export class PermissionController extends BaseController {
325
310
  input: toolCall.request.args,
326
311
  permission_suggestions: permissionSuggestions,
327
312
  blocked_path: null,
328
- }, 30000);
313
+ }, undefined, // use default timeout
314
+ this.context.abortSignal);
329
315
  if (response.subtype !== 'success') {
330
316
  await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
331
317
  return;
@@ -341,14 +327,28 @@ export class PermissionController extends BaseController {
341
327
  await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
342
328
  }
343
329
  else {
344
- await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
330
+ // Extract cancel message from response if available
331
+ const cancelMessage = typeof payload['message'] === 'string'
332
+ ? payload['message']
333
+ : undefined;
334
+ await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel, cancelMessage ? { cancelMessage } : undefined);
345
335
  }
346
336
  }
347
337
  catch (error) {
348
338
  if (this.context.debugMode) {
349
339
  console.error('[PermissionController] Outgoing permission failed:', error);
350
340
  }
351
- await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
341
+ // On error, use default cancel message
342
+ // Only pass payload for exec and mcp types that support it
343
+ const confirmationType = toolCall.confirmationDetails.type;
344
+ if (['edit', 'exec', 'mcp'].includes(confirmationType)) {
345
+ const execOrMcpDetails = toolCall.confirmationDetails;
346
+ await execOrMcpDetails.onConfirm(ToolConfirmationOutcome.Cancel, undefined);
347
+ }
348
+ else {
349
+ // For other types, don't pass payload (backward compatible)
350
+ await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
351
+ }
352
352
  }
353
353
  finally {
354
354
  this.pendingOutgoingRequests.delete(toolCall.request.callId);