@umsai/ums-code 0.1.4-v2 → 0.3.0-v2

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 (382) hide show
  1. package/dist/package.json +11 -3
  2. package/dist/src/config/config.d.ts +6 -0
  3. package/dist/src/config/config.js +102 -11
  4. package/dist/src/config/config.js.map +1 -1
  5. package/dist/src/config/settings.d.ts +5 -0
  6. package/dist/src/config/settings.js +15 -1
  7. package/dist/src/config/settings.js.map +1 -1
  8. package/dist/src/config/settingsSchema.d.ts +75 -17
  9. package/dist/src/config/settingsSchema.js +57 -17
  10. package/dist/src/config/settingsSchema.js.map +1 -1
  11. package/dist/src/config/webSearch.d.ts +35 -0
  12. package/dist/src/config/webSearch.js +87 -0
  13. package/dist/src/config/webSearch.js.map +1 -0
  14. package/dist/src/core/auth.d.ts +1 -1
  15. package/dist/src/core/auth.js +19 -3
  16. package/dist/src/core/auth.js.map +1 -1
  17. package/dist/src/core/initializer.js +13 -2
  18. package/dist/src/core/initializer.js.map +1 -1
  19. package/dist/src/core/theme.js +4 -1
  20. package/dist/src/core/theme.js.map +1 -1
  21. package/dist/src/gemini.d.ts +1 -1
  22. package/dist/src/gemini.js +53 -44
  23. package/dist/src/gemini.js.map +1 -1
  24. package/dist/src/gemini.test.js +117 -0
  25. package/dist/src/gemini.test.js.map +1 -1
  26. package/dist/src/generated/git-commit.d.ts +2 -2
  27. package/dist/src/generated/git-commit.js +2 -2
  28. package/dist/src/i18n/index.d.ts +18 -0
  29. package/dist/src/i18n/index.js +184 -0
  30. package/dist/src/i18n/index.js.map +1 -0
  31. package/dist/src/i18n/locales/en.js +1129 -0
  32. package/dist/src/i18n/locales/zh.js +1052 -0
  33. package/dist/src/nonInteractive/control/ControlContext.d.ts +63 -0
  34. package/dist/src/nonInteractive/control/ControlContext.js +31 -0
  35. package/dist/src/nonInteractive/control/ControlContext.js.map +1 -0
  36. package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +86 -0
  37. package/dist/src/nonInteractive/control/ControlDispatcher.js +238 -0
  38. package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -0
  39. package/dist/src/nonInteractive/control/ControlDispatcher.test.d.ts +6 -0
  40. package/dist/src/nonInteractive/control/ControlDispatcher.test.js +549 -0
  41. package/dist/src/nonInteractive/control/ControlDispatcher.test.js.map +1 -0
  42. package/dist/src/nonInteractive/control/ControlService.d.ts +78 -0
  43. package/dist/src/nonInteractive/control/ControlService.js +154 -0
  44. package/dist/src/nonInteractive/control/ControlService.js.map +1 -0
  45. package/dist/src/nonInteractive/control/controllers/baseController.d.ts +50 -0
  46. package/dist/src/nonInteractive/control/controllers/baseController.js +102 -0
  47. package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -0
  48. package/dist/src/nonInteractive/control/controllers/hookController.d.ts +25 -0
  49. package/dist/src/nonInteractive/control/controllers/hookController.js +42 -0
  50. package/dist/src/nonInteractive/control/controllers/hookController.js.map +1 -0
  51. package/dist/src/nonInteractive/control/controllers/mcpController.d.ts +42 -0
  52. package/dist/src/nonInteractive/control/controllers/mcpController.js +205 -0
  53. package/dist/src/nonInteractive/control/controllers/mcpController.js.map +1 -0
  54. package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +78 -0
  55. package/dist/src/nonInteractive/control/controllers/permissionController.js +358 -0
  56. package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -0
  57. package/dist/src/nonInteractive/control/controllers/systemController.d.ts +56 -0
  58. package/dist/src/nonInteractive/control/controllers/systemController.js +166 -0
  59. package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -0
  60. package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +120 -0
  61. package/dist/src/nonInteractive/control/types/serviceAPIs.js +7 -0
  62. package/dist/src/nonInteractive/control/types/serviceAPIs.js.map +1 -0
  63. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +446 -0
  64. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +891 -0
  65. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -0
  66. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.d.ts +6 -0
  67. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js +1197 -0
  68. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js.map +1 -0
  69. package/dist/src/nonInteractive/io/JsonOutputAdapter.d.ts +29 -0
  70. package/dist/src/nonInteractive/io/JsonOutputAdapter.js +56 -0
  71. package/dist/src/nonInteractive/io/JsonOutputAdapter.js.map +1 -0
  72. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.d.ts +6 -0
  73. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.js +624 -0
  74. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.js.map +1 -0
  75. package/dist/src/nonInteractive/io/StreamJsonInputReader.d.ts +16 -0
  76. package/dist/src/nonInteractive/io/StreamJsonInputReader.js +54 -0
  77. package/dist/src/nonInteractive/io/StreamJsonInputReader.js.map +1 -0
  78. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.d.ts +6 -0
  79. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.js +178 -0
  80. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.js.map +1 -0
  81. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.d.ts +69 -0
  82. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.js +185 -0
  83. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.js.map +1 -0
  84. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.d.ts +6 -0
  85. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js +808 -0
  86. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js.map +1 -0
  87. package/dist/src/nonInteractive/session.d.ts +23 -0
  88. package/dist/src/nonInteractive/session.js +549 -0
  89. package/dist/src/nonInteractive/session.js.map +1 -0
  90. package/dist/src/nonInteractive/session.test.d.ts +6 -0
  91. package/dist/src/nonInteractive/session.test.js +407 -0
  92. package/dist/src/nonInteractive/session.test.js.map +1 -0
  93. package/dist/src/nonInteractive/types.d.ts +344 -0
  94. package/dist/src/nonInteractive/types.js +78 -0
  95. package/dist/src/nonInteractive/types.js.map +1 -0
  96. package/dist/src/nonInteractiveCli.d.ts +21 -1
  97. package/dist/src/nonInteractiveCli.js +204 -57
  98. package/dist/src/nonInteractiveCli.js.map +1 -1
  99. package/dist/src/nonInteractiveCliCommands.d.ts +19 -1
  100. package/dist/src/nonInteractiveCliCommands.js +69 -4
  101. package/dist/src/nonInteractiveCliCommands.js.map +1 -1
  102. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  103. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  104. package/dist/src/services/FileCommandLoader.js +4 -1
  105. package/dist/src/services/FileCommandLoader.js.map +1 -1
  106. package/dist/src/ui/AppContainer.js +41 -38
  107. package/dist/src/ui/AppContainer.js.map +1 -1
  108. package/dist/src/ui/auth/AuthDialog.d.ts +1 -13
  109. package/dist/src/ui/auth/AuthDialog.js +41 -111
  110. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  111. package/dist/src/ui/auth/AuthDialog.test.js +49 -19
  112. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  113. package/dist/src/ui/auth/AuthInProgress.js +2 -1
  114. package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
  115. package/dist/src/ui/auth/useAuth.d.ts +9 -8
  116. package/dist/src/ui/auth/useAuth.js +135 -63
  117. package/dist/src/ui/auth/useAuth.js.map +1 -1
  118. package/dist/src/ui/commands/aboutCommand.js +7 -31
  119. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  120. package/dist/src/ui/commands/agentsCommand.js +10 -3
  121. package/dist/src/ui/commands/agentsCommand.js.map +1 -1
  122. package/dist/src/ui/commands/approvalModeCommand.js +8 -329
  123. package/dist/src/ui/commands/approvalModeCommand.js.map +1 -1
  124. package/dist/src/ui/commands/approvalModeCommand.test.js +19 -263
  125. package/dist/src/ui/commands/approvalModeCommand.test.js.map +1 -1
  126. package/dist/src/ui/commands/authCommand.js +4 -1
  127. package/dist/src/ui/commands/authCommand.js.map +1 -1
  128. package/dist/src/ui/commands/bugCommand.js +13 -47
  129. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  130. package/dist/src/ui/commands/chatCommand.js +51 -25
  131. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  132. package/dist/src/ui/commands/clearCommand.js +6 -3
  133. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  134. package/dist/src/ui/commands/compressCommand.js +9 -4
  135. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  136. package/dist/src/ui/commands/copyCommand.js +4 -1
  137. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  138. package/dist/src/ui/commands/directoryCommand.js +30 -12
  139. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  140. package/dist/src/ui/commands/docsCommand.js +9 -3
  141. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  142. package/dist/src/ui/commands/editorCommand.js +4 -1
  143. package/dist/src/ui/commands/editorCommand.js.map +1 -1
  144. package/dist/src/ui/commands/extensionsCommand.js +10 -3
  145. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  146. package/dist/src/ui/commands/helpCommand.js +4 -1
  147. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  148. package/dist/src/ui/commands/ideCommand.js +23 -7
  149. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  150. package/dist/src/ui/commands/initCommand.js +5 -3
  151. package/dist/src/ui/commands/initCommand.js.map +1 -1
  152. package/dist/src/ui/commands/languageCommand.d.ts +7 -0
  153. package/dist/src/ui/commands/languageCommand.js +386 -0
  154. package/dist/src/ui/commands/languageCommand.js.map +1 -0
  155. package/dist/src/ui/commands/mcpCommand.js +38 -18
  156. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  157. package/dist/src/ui/commands/memoryCommand.js +54 -25
  158. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  159. package/dist/src/ui/commands/modelCommand.js +9 -4
  160. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  161. package/dist/src/ui/commands/permissionsCommand.js +4 -1
  162. package/dist/src/ui/commands/permissionsCommand.js.map +1 -1
  163. package/dist/src/ui/commands/quitCommand.js +7 -2
  164. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  165. package/dist/src/ui/commands/settingsCommand.js +4 -1
  166. package/dist/src/ui/commands/settingsCommand.js.map +1 -1
  167. package/dist/src/ui/commands/setupGithubCommand.js +4 -1
  168. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  169. package/dist/src/ui/commands/statsCommand.js +11 -4
  170. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  171. package/dist/src/ui/commands/summaryCommand.js +15 -8
  172. package/dist/src/ui/commands/summaryCommand.js.map +1 -1
  173. package/dist/src/ui/commands/terminalSetupCommand.js +9 -3
  174. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -1
  175. package/dist/src/ui/commands/themeCommand.js +4 -1
  176. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  177. package/dist/src/ui/commands/toolsCommand.js +5 -2
  178. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  179. package/dist/src/ui/commands/types.d.ts +1 -1
  180. package/dist/src/ui/commands/types.js.map +1 -1
  181. package/dist/src/ui/commands/vimCommand.js +4 -1
  182. package/dist/src/ui/commands/vimCommand.js.map +1 -1
  183. package/dist/src/ui/components/AboutBox.d.ts +2 -9
  184. package/dist/src/ui/components/AboutBox.js +6 -2
  185. package/dist/src/ui/components/AboutBox.js.map +1 -1
  186. package/dist/src/ui/components/ApprovalModeDialog.d.ts +21 -0
  187. package/dist/src/ui/components/ApprovalModeDialog.js +68 -0
  188. package/dist/src/ui/components/ApprovalModeDialog.js.map +1 -0
  189. package/dist/src/ui/components/AutoAcceptIndicator.js +7 -6
  190. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -1
  191. package/dist/src/ui/components/Composer.js +4 -3
  192. package/dist/src/ui/components/Composer.js.map +1 -1
  193. package/dist/src/ui/components/ConfigInitDisplay.js +7 -3
  194. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  195. package/dist/src/ui/components/ContextSummaryDisplay.js +33 -9
  196. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  197. package/dist/src/ui/components/DialogManager.js +60 -13
  198. package/dist/src/ui/components/DialogManager.js.map +1 -1
  199. package/dist/src/ui/components/EditorSettingsDialog.js +8 -3
  200. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  201. package/dist/src/ui/components/Help.js +14 -4
  202. package/dist/src/ui/components/Help.js.map +1 -1
  203. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  204. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  205. package/dist/src/ui/components/HistoryItemDisplay.test.js +17 -8
  206. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  207. package/dist/src/ui/components/InputPrompt.js +10 -136
  208. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  209. package/dist/src/ui/components/LoadingIndicator.js +6 -1
  210. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  211. package/dist/src/ui/components/ModelDialog.js +2 -1
  212. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  213. package/dist/src/ui/components/ModelStatsDisplay.js +6 -5
  214. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  215. package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +19 -1
  216. package/dist/src/ui/components/OpenAIKeyPrompt.js +38 -6
  217. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  218. package/dist/src/ui/components/ProQuotaDialog.js +5 -4
  219. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  220. package/dist/src/ui/components/QuitConfirmationDialog.js +6 -5
  221. package/dist/src/ui/components/QuitConfirmationDialog.js.map +1 -1
  222. package/dist/src/ui/components/QwenOAuthProgress.d.ts +2 -2
  223. package/dist/src/ui/components/QwenOAuthProgress.js +14 -7
  224. package/dist/src/ui/components/QwenOAuthProgress.js.map +1 -1
  225. package/dist/src/ui/components/QwenOAuthProgress.test.js +1 -0
  226. package/dist/src/ui/components/QwenOAuthProgress.test.js.map +1 -1
  227. package/dist/src/ui/components/SessionSummaryDisplay.js +2 -1
  228. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  229. package/dist/src/ui/components/SettingsDialog.d.ts +3 -1
  230. package/dist/src/ui/components/SettingsDialog.js +35 -12
  231. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  232. package/dist/src/ui/components/SettingsDialog.test.js +5 -4
  233. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  234. package/dist/src/ui/components/ShellConfirmationDialog.js +5 -4
  235. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  236. package/dist/src/ui/components/StatsDisplay.js +5 -4
  237. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  238. package/dist/src/ui/components/ThemeDialog.js +5 -2
  239. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  240. package/dist/src/ui/components/ToolStatsDisplay.js +3 -2
  241. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
  242. package/dist/src/ui/components/WelcomeBackDialog.js +13 -4
  243. package/dist/src/ui/components/WelcomeBackDialog.js.map +1 -1
  244. package/dist/src/ui/components/messages/CompressionMessage.js +10 -6
  245. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  246. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +40 -29
  247. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  248. package/dist/src/ui/components/shared/BaseSelectionList.test.js +1 -1
  249. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
  250. package/dist/src/ui/components/shared/ScopeSelector.js +3 -1
  251. package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -1
  252. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js +39 -26
  253. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js.map +1 -1
  254. package/dist/src/ui/components/subagents/create/CreationSummary.js +20 -10
  255. package/dist/src/ui/components/subagents/create/CreationSummary.js.map +1 -1
  256. package/dist/src/ui/components/subagents/create/DescriptionInput.js +6 -3
  257. package/dist/src/ui/components/subagents/create/DescriptionInput.js.map +1 -1
  258. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js +7 -2
  259. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js.map +1 -1
  260. package/dist/src/ui/components/subagents/create/LocationSelector.js +7 -2
  261. package/dist/src/ui/components/subagents/create/LocationSelector.js.map +1 -1
  262. package/dist/src/ui/components/subagents/create/ToolSelector.js +8 -7
  263. package/dist/src/ui/components/subagents/create/ToolSelector.js.map +1 -1
  264. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js +29 -4
  265. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js.map +1 -1
  266. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js +6 -3
  267. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js.map +1 -1
  268. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +14 -5
  269. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  270. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +13 -6
  271. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  272. package/dist/src/ui/components/subagents/manage/AgentViewerStep.js +3 -2
  273. package/dist/src/ui/components/subagents/manage/AgentViewerStep.js.map +1 -1
  274. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js +14 -13
  275. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js.map +1 -1
  276. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +8 -8
  277. package/dist/src/ui/components/views/McpStatus.js +28 -15
  278. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  279. package/dist/src/ui/components/views/ToolsList.js +2 -1
  280. package/dist/src/ui/components/views/ToolsList.js.map +1 -1
  281. package/dist/src/ui/contexts/UIActionsContext.d.ts +5 -4
  282. package/dist/src/ui/contexts/UIActionsContext.js +1 -0
  283. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  284. package/dist/src/ui/contexts/UIStateContext.d.ts +5 -7
  285. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  286. package/dist/src/ui/editors/editorSettingsManager.js +1 -0
  287. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  288. package/dist/src/ui/hooks/atCommandProcessor.test.js +2 -0
  289. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  290. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -0
  291. package/dist/src/ui/hooks/slashCommandProcessor.js +4 -7
  292. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  293. package/dist/src/ui/hooks/useApprovalModeCommand.d.ts +14 -0
  294. package/dist/src/ui/hooks/useApprovalModeCommand.js +33 -0
  295. package/dist/src/ui/hooks/useApprovalModeCommand.js.map +1 -0
  296. package/dist/src/ui/hooks/useAttentionNotifications.d.ts +14 -0
  297. package/dist/src/ui/hooks/useAttentionNotifications.js +41 -0
  298. package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -0
  299. package/dist/src/ui/hooks/useAttentionNotifications.test.d.ts +6 -0
  300. package/dist/src/ui/hooks/useAttentionNotifications.test.js +113 -0
  301. package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -0
  302. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -4
  303. package/dist/src/ui/hooks/useCommandCompletion.js +1 -23
  304. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  305. package/dist/src/ui/hooks/useDialogClose.d.ts +6 -3
  306. package/dist/src/ui/hooks/useDialogClose.js +5 -0
  307. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  308. package/dist/src/ui/hooks/useGitBranchName.js +6 -3
  309. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  310. package/dist/src/ui/hooks/useGitBranchName.test.js +39 -21
  311. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  312. package/dist/src/ui/hooks/useInitializationAuthError.d.ts +22 -0
  313. package/dist/src/ui/hooks/useInitializationAuthError.js +40 -0
  314. package/dist/src/ui/hooks/useInitializationAuthError.js.map +1 -0
  315. package/dist/src/ui/hooks/usePhraseCycler.js +6 -4
  316. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  317. package/dist/src/ui/hooks/useQwenAuth.d.ts +7 -12
  318. package/dist/src/ui/hooks/useQwenAuth.js +4 -8
  319. package/dist/src/ui/hooks/useQwenAuth.js.map +1 -1
  320. package/dist/src/ui/hooks/useQwenAuth.test.js +72 -98
  321. package/dist/src/ui/hooks/useQwenAuth.test.js.map +1 -1
  322. package/dist/src/ui/hooks/useThemeCommand.js +8 -3
  323. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  324. package/dist/src/ui/models/availableModels.js +7 -2
  325. package/dist/src/ui/models/availableModels.js.map +1 -1
  326. package/dist/src/ui/types.d.ts +32 -14
  327. package/dist/src/ui/types.js.map +1 -1
  328. package/dist/src/ui/utils/clipboardUtils.js +3 -3
  329. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  330. package/dist/src/ui/utils/commandUtils.d.ts +16 -0
  331. package/dist/src/ui/utils/commandUtils.js +16 -1
  332. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  333. package/dist/src/ui/utils/commandUtils.test.js +5 -2
  334. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  335. package/dist/src/ui/utils/terminalSetup.js +45 -18
  336. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  337. package/dist/src/utils/attentionNotification.d.ts +20 -0
  338. package/dist/src/utils/attentionNotification.js +34 -0
  339. package/dist/src/utils/attentionNotification.js.map +1 -0
  340. package/dist/src/utils/attentionNotification.test.d.ts +6 -0
  341. package/dist/src/utils/attentionNotification.test.js +46 -0
  342. package/dist/src/utils/attentionNotification.test.js.map +1 -0
  343. package/dist/src/utils/dialogScopeUtils.d.ts +0 -4
  344. package/dist/src/utils/dialogScopeUtils.js +5 -2
  345. package/dist/src/utils/dialogScopeUtils.js.map +1 -1
  346. package/dist/src/utils/errors.d.ts +10 -2
  347. package/dist/src/utils/errors.js +14 -13
  348. package/dist/src/utils/errors.js.map +1 -1
  349. package/dist/src/utils/errors.test.js +91 -54
  350. package/dist/src/utils/errors.test.js.map +1 -1
  351. package/dist/src/utils/nonInteractiveHelpers.d.ts +88 -0
  352. package/dist/src/utils/nonInteractiveHelpers.js +470 -0
  353. package/dist/src/utils/nonInteractiveHelpers.js.map +1 -0
  354. package/dist/src/utils/nonInteractiveHelpers.test.d.ts +6 -0
  355. package/dist/src/utils/nonInteractiveHelpers.test.js +945 -0
  356. package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -0
  357. package/dist/src/utils/sandbox.js +1 -1
  358. package/dist/src/utils/sandbox.js.map +1 -1
  359. package/dist/src/utils/settingsUtils.js +7 -1
  360. package/dist/src/utils/settingsUtils.js.map +1 -1
  361. package/dist/src/utils/systemInfo.d.ts +66 -0
  362. package/dist/src/utils/systemInfo.js +125 -0
  363. package/dist/src/utils/systemInfo.js.map +1 -0
  364. package/dist/src/utils/systemInfo.test.d.ts +6 -0
  365. package/dist/src/utils/systemInfo.test.js +259 -0
  366. package/dist/src/utils/systemInfo.test.js.map +1 -0
  367. package/dist/src/utils/systemInfoFields.d.ts +22 -0
  368. package/dist/src/utils/systemInfoFields.js +96 -0
  369. package/dist/src/utils/systemInfoFields.js.map +1 -0
  370. package/dist/src/utils/userStartupWarnings.js +9 -4
  371. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  372. package/dist/src/validateNonInterActiveAuth.js +27 -6
  373. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  374. package/dist/src/zed-integration/acp.js +1 -2
  375. package/dist/src/zed-integration/acp.js.map +1 -1
  376. package/dist/src/zed-integration/schema.d.ts +506 -264
  377. package/dist/src/zed-integration/schema.js +13 -0
  378. package/dist/src/zed-integration/schema.js.map +1 -1
  379. package/dist/src/zed-integration/zedIntegration.js +376 -32
  380. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  381. package/dist/tsconfig.tsbuildinfo +1 -1
  382. package/package.json +12 -4
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Control Service
8
+ *
9
+ * Facade layer providing domain-grouped APIs for control plane operations.
10
+ * Shares controller instances with ControlDispatcher to ensure single source
11
+ * of truth and state consistency.
12
+ */
13
+ export class ControlService {
14
+ dispatcher;
15
+ /**
16
+ * Construct ControlService
17
+ *
18
+ * @param context - Control context (unused directly, passed to dispatcher)
19
+ * @param dispatcher - Control dispatcher that owns the controller instances
20
+ */
21
+ constructor(context, dispatcher) {
22
+ this.dispatcher = dispatcher;
23
+ }
24
+ /**
25
+ * Permission Domain API
26
+ *
27
+ * Handles tool execution permissions, approval checks, and callbacks.
28
+ * Delegates to the shared PermissionController instance.
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
+ // }
67
+ /**
68
+ * System Domain API
69
+ *
70
+ * Handles system-level operations and session management.
71
+ * Delegates to the shared SystemController instance.
72
+ */
73
+ get system() {
74
+ const controller = this.dispatcher.systemController;
75
+ return {
76
+ /**
77
+ * Get control capabilities
78
+ *
79
+ * Returns the control capabilities object indicating what control
80
+ * features are available. Used exclusively for the initialize
81
+ * control response. System messages do not include capabilities.
82
+ *
83
+ * @returns Control capabilities object
84
+ */
85
+ getControlCapabilities: () => controller.buildControlCapabilities(),
86
+ };
87
+ }
88
+ /**
89
+ * MCP Domain API
90
+ *
91
+ * Handles Model Context Protocol server interactions.
92
+ * Delegates to the shared MCPController instance.
93
+ */
94
+ // get mcp(): McpServiceAPI {
95
+ // return {
96
+ // /**
97
+ // * Get or create MCP client for a server (lazy initialization)
98
+ // *
99
+ // * Returns existing client or creates new connection.
100
+ // *
101
+ // * @param serverName - Name of the MCP server
102
+ // * @returns Promise with client and config
103
+ // */
104
+ // getMcpClient: async (serverName: string) => {
105
+ // // MCPController has a private method getOrCreateMcpClient
106
+ // // We need to expose it via the API
107
+ // // For now, throw error as placeholder
108
+ // // The actual implementation will be added when we update MCPController
109
+ // throw new Error(
110
+ // `getMcpClient not yet implemented in ControlService. Server: ${serverName}`,
111
+ // );
112
+ // },
113
+ //
114
+ // /**
115
+ // * List all available MCP servers
116
+ // *
117
+ // * Returns names of configured/connected MCP servers.
118
+ // *
119
+ // * @returns Array of server names
120
+ // */
121
+ // listServers: () => {
122
+ // // Get servers from context
123
+ // const sdkServers = Array.from(
124
+ // this.dispatcher.mcpController['context'].sdkMcpServers,
125
+ // );
126
+ // const cliServers = Array.from(
127
+ // this.dispatcher.mcpController['context'].mcpClients.keys(),
128
+ // );
129
+ // return [...new Set([...sdkServers, ...cliServers])];
130
+ // },
131
+ // };
132
+ // }
133
+ /**
134
+ * Hook Domain API
135
+ *
136
+ * Handles hook callback processing (placeholder for future expansion).
137
+ * Delegates to the shared HookController instance.
138
+ */
139
+ // get hook(): HookServiceAPI {
140
+ // // HookController has no public methods yet - controller access reserved for future use
141
+ // return {};
142
+ // }
143
+ /**
144
+ * Cleanup all controllers
145
+ *
146
+ * Should be called on session shutdown. Delegates to dispatcher's shutdown
147
+ * method to ensure all controllers are properly cleaned up.
148
+ */
149
+ cleanup() {
150
+ // Delegate to dispatcher which manages controller cleanup
151
+ this.dispatcher.shutdown();
152
+ }
153
+ }
154
+ //# sourceMappingURL=ControlService.js.map
@@ -0,0 +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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { IControlContext } from '../ControlContext.js';
7
+ import type { ControlRequestPayload, ControlResponse } from '../../types.js';
8
+ /**
9
+ * Registry interface for controllers to register/deregister pending requests
10
+ */
11
+ export interface IPendingRequestRegistry {
12
+ registerIncomingRequest(requestId: string, controller: string, abortController: AbortController, timeoutId: NodeJS.Timeout): void;
13
+ deregisterIncomingRequest(requestId: string): void;
14
+ registerOutgoingRequest(requestId: string, controller: string, resolve: (response: ControlResponse) => void, reject: (error: Error) => void, timeoutId: NodeJS.Timeout): void;
15
+ deregisterOutgoingRequest(requestId: string): void;
16
+ }
17
+ /**
18
+ * Abstract base controller class
19
+ *
20
+ * Subclasses should implement handleRequestPayload() to process specific
21
+ * control request types.
22
+ */
23
+ export declare abstract class BaseController {
24
+ protected context: IControlContext;
25
+ protected registry: IPendingRequestRegistry;
26
+ protected controllerName: string;
27
+ constructor(context: IControlContext, registry: IPendingRequestRegistry, controllerName: string);
28
+ /**
29
+ * Handle an incoming control request
30
+ *
31
+ * Manages lifecycle: register -> process -> deregister
32
+ */
33
+ handleRequest(payload: ControlRequestPayload, requestId: string): Promise<Record<string, unknown>>;
34
+ /**
35
+ * Send an outgoing control request to SDK
36
+ *
37
+ * Manages lifecycle: register -> send -> wait for response -> deregister
38
+ */
39
+ sendControlRequest(payload: ControlRequestPayload, timeoutMs?: number): Promise<ControlResponse>;
40
+ /**
41
+ * Abstract method: Handle specific request payload
42
+ *
43
+ * Subclasses must implement this to process their domain-specific requests.
44
+ */
45
+ protected abstract handleRequestPayload(payload: ControlRequestPayload, signal: AbortSignal): Promise<Record<string, unknown>>;
46
+ /**
47
+ * Cleanup resources
48
+ */
49
+ cleanup(): void;
50
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Base Controller
8
+ *
9
+ * Abstract base class for domain-specific control plane controllers.
10
+ * Provides common functionality for:
11
+ * - Handling incoming control requests (SDK -> CLI)
12
+ * - Sending outgoing control requests (CLI -> SDK)
13
+ * - Request lifecycle management with timeout and cancellation
14
+ * - Integration with central pending request registry
15
+ */
16
+ import { randomUUID } from 'node:crypto';
17
+ const DEFAULT_REQUEST_TIMEOUT_MS = 30000; // 30 seconds
18
+ /**
19
+ * Abstract base controller class
20
+ *
21
+ * Subclasses should implement handleRequestPayload() to process specific
22
+ * control request types.
23
+ */
24
+ export class BaseController {
25
+ context;
26
+ registry;
27
+ controllerName;
28
+ constructor(context, registry, controllerName) {
29
+ this.context = context;
30
+ this.registry = registry;
31
+ this.controllerName = controllerName;
32
+ }
33
+ /**
34
+ * Handle an incoming control request
35
+ *
36
+ * Manages lifecycle: register -> process -> deregister
37
+ */
38
+ async handleRequest(payload, requestId) {
39
+ const requestAbortController = new AbortController();
40
+ // Setup timeout
41
+ const timeoutId = setTimeout(() => {
42
+ requestAbortController.abort();
43
+ this.registry.deregisterIncomingRequest(requestId);
44
+ if (this.context.debugMode) {
45
+ console.error(`[${this.controllerName}] Request timeout: ${requestId}`);
46
+ }
47
+ }, DEFAULT_REQUEST_TIMEOUT_MS);
48
+ // Register with central registry
49
+ this.registry.registerIncomingRequest(requestId, this.controllerName, requestAbortController, timeoutId);
50
+ try {
51
+ const response = await this.handleRequestPayload(payload, requestAbortController.signal);
52
+ // Success - deregister
53
+ this.registry.deregisterIncomingRequest(requestId);
54
+ return response;
55
+ }
56
+ catch (error) {
57
+ // Error - deregister
58
+ this.registry.deregisterIncomingRequest(requestId);
59
+ throw error;
60
+ }
61
+ }
62
+ /**
63
+ * Send an outgoing control request to SDK
64
+ *
65
+ * Manages lifecycle: register -> send -> wait for response -> deregister
66
+ */
67
+ async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
68
+ const requestId = randomUUID();
69
+ return new Promise((resolve, reject) => {
70
+ // Setup timeout
71
+ const timeoutId = setTimeout(() => {
72
+ this.registry.deregisterOutgoingRequest(requestId);
73
+ reject(new Error('Control request timeout'));
74
+ if (this.context.debugMode) {
75
+ console.error(`[${this.controllerName}] Outgoing request timeout: ${requestId}`);
76
+ }
77
+ }, timeoutMs);
78
+ // Register with central registry
79
+ this.registry.registerOutgoingRequest(requestId, this.controllerName, resolve, reject, timeoutId);
80
+ // Send control request
81
+ const request = {
82
+ type: 'control_request',
83
+ request_id: requestId,
84
+ request: payload,
85
+ };
86
+ try {
87
+ this.context.streamJson.send(request);
88
+ }
89
+ catch (error) {
90
+ this.registry.deregisterOutgoingRequest(requestId);
91
+ reject(error);
92
+ }
93
+ });
94
+ }
95
+ /**
96
+ * Cleanup resources
97
+ */
98
+ cleanup() {
99
+ // Subclasses can override to add cleanup logic
100
+ }
101
+ }
102
+ //# sourceMappingURL=baseController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/baseController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Hook Controller
8
+ *
9
+ * Handles hook-related control requests:
10
+ * - hook_callback: Process hook callbacks (placeholder for future)
11
+ */
12
+ import { BaseController } from './baseController.js';
13
+ import type { ControlRequestPayload } from '../../types.js';
14
+ export declare class HookController extends BaseController {
15
+ /**
16
+ * Handle hook control requests
17
+ */
18
+ protected handleRequestPayload(payload: ControlRequestPayload, _signal: AbortSignal): Promise<Record<string, unknown>>;
19
+ /**
20
+ * Handle hook_callback request
21
+ *
22
+ * Processes hook callbacks (placeholder implementation)
23
+ */
24
+ private handleHookCallback;
25
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Hook Controller
8
+ *
9
+ * Handles hook-related control requests:
10
+ * - hook_callback: Process hook callbacks (placeholder for future)
11
+ */
12
+ import { BaseController } from './baseController.js';
13
+ export class HookController extends BaseController {
14
+ /**
15
+ * Handle hook control requests
16
+ */
17
+ async handleRequestPayload(payload, _signal) {
18
+ switch (payload.subtype) {
19
+ case 'hook_callback':
20
+ return this.handleHookCallback(payload);
21
+ default:
22
+ throw new Error(`Unsupported request subtype in HookController`);
23
+ }
24
+ }
25
+ /**
26
+ * Handle hook_callback request
27
+ *
28
+ * Processes hook callbacks (placeholder implementation)
29
+ */
30
+ async handleHookCallback(payload) {
31
+ if (this.context.debugMode) {
32
+ console.error(`[HookController] Hook callback: ${payload.callback_id}`);
33
+ }
34
+ // Hook callback processing not yet implemented
35
+ return {
36
+ result: 'Hook callback processing not yet implemented',
37
+ callback_id: payload.callback_id,
38
+ tool_use_id: payload.tool_use_id,
39
+ };
40
+ }
41
+ }
42
+ //# sourceMappingURL=hookController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/hookController.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD;;OAEG;IACO,KAAK,CAAC,oBAAoB,CAClC,OAA8B,EAC9B,OAAoB;QAEpB,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAiC,CAAC,CAAC;YAEpE;gBACE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAC9B,OAA+B;QAE/B,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,+CAA+C;QAC/C,OAAO;YACL,MAAM,EAAE,8CAA8C;YACtD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * MCP Controller
8
+ *
9
+ * Handles MCP-related control requests:
10
+ * - mcp_message: Route MCP messages
11
+ * - mcp_server_status: Return MCP server status
12
+ */
13
+ import { BaseController } from './baseController.js';
14
+ import type { ControlRequestPayload } from '../../types.js';
15
+ export declare class MCPController extends BaseController {
16
+ /**
17
+ * Handle MCP control requests
18
+ */
19
+ protected handleRequestPayload(payload: ControlRequestPayload, _signal: AbortSignal): Promise<Record<string, unknown>>;
20
+ /**
21
+ * Handle mcp_message request
22
+ *
23
+ * Routes JSON-RPC messages to MCP servers
24
+ */
25
+ private handleMcpMessage;
26
+ /**
27
+ * Handle mcp_server_status request
28
+ *
29
+ * Returns status of registered MCP servers
30
+ */
31
+ private handleMcpStatus;
32
+ /**
33
+ * Get or create MCP client for a server
34
+ *
35
+ * Implements lazy connection and caching
36
+ */
37
+ private getOrCreateMcpClient;
38
+ /**
39
+ * Cleanup MCP clients
40
+ */
41
+ cleanup(): void;
42
+ }
@@ -0,0 +1,205 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * MCP Controller
8
+ *
9
+ * Handles MCP-related control requests:
10
+ * - mcp_message: Route MCP messages
11
+ * - mcp_server_status: Return MCP server status
12
+ */
13
+ import { BaseController } from './baseController.js';
14
+ import { ResultSchema } from '@modelcontextprotocol/sdk/types.js';
15
+ import { connectToMcpServer, MCP_DEFAULT_TIMEOUT_MSEC, } from '@umsai/ums-code-core';
16
+ export class MCPController extends BaseController {
17
+ /**
18
+ * Handle MCP control requests
19
+ */
20
+ async handleRequestPayload(payload, _signal) {
21
+ switch (payload.subtype) {
22
+ case 'mcp_message':
23
+ return this.handleMcpMessage(payload);
24
+ case 'mcp_server_status':
25
+ return this.handleMcpStatus();
26
+ default:
27
+ throw new Error(`Unsupported request subtype in MCPController`);
28
+ }
29
+ }
30
+ /**
31
+ * Handle mcp_message request
32
+ *
33
+ * Routes JSON-RPC messages to MCP servers
34
+ */
35
+ async handleMcpMessage(payload) {
36
+ const serverNameRaw = payload.server_name;
37
+ if (typeof serverNameRaw !== 'string' ||
38
+ serverNameRaw.trim().length === 0) {
39
+ throw new Error('Missing server_name in mcp_message request');
40
+ }
41
+ const message = payload.message;
42
+ if (!message || typeof message !== 'object') {
43
+ throw new Error('Missing or invalid message payload for mcp_message request');
44
+ }
45
+ // Get or create MCP client
46
+ let clientEntry;
47
+ try {
48
+ clientEntry = await this.getOrCreateMcpClient(serverNameRaw.trim());
49
+ }
50
+ catch (error) {
51
+ throw new Error(error instanceof Error
52
+ ? error.message
53
+ : 'Failed to connect to MCP server');
54
+ }
55
+ const method = message.method;
56
+ if (typeof method !== 'string' || method.trim().length === 0) {
57
+ throw new Error('Invalid MCP message: missing method');
58
+ }
59
+ const jsonrpcVersion = typeof message.jsonrpc === 'string' ? message.jsonrpc : '2.0';
60
+ const messageId = message.id;
61
+ const params = message.params;
62
+ const timeout = typeof clientEntry.config.timeout === 'number'
63
+ ? clientEntry.config.timeout
64
+ : MCP_DEFAULT_TIMEOUT_MSEC;
65
+ try {
66
+ // Handle notification (no id)
67
+ if (messageId === undefined) {
68
+ await clientEntry.client.notification({
69
+ method,
70
+ params,
71
+ });
72
+ return {
73
+ subtype: 'mcp_message',
74
+ mcp_response: {
75
+ jsonrpc: jsonrpcVersion,
76
+ id: null,
77
+ result: { success: true, acknowledged: true },
78
+ },
79
+ };
80
+ }
81
+ // Handle request (with id)
82
+ const result = await clientEntry.client.request({
83
+ method,
84
+ params,
85
+ }, ResultSchema, { timeout });
86
+ return {
87
+ subtype: 'mcp_message',
88
+ mcp_response: {
89
+ jsonrpc: jsonrpcVersion,
90
+ id: messageId,
91
+ result,
92
+ },
93
+ };
94
+ }
95
+ catch (error) {
96
+ // If connection closed, remove from cache
97
+ if (error instanceof Error && /closed/i.test(error.message)) {
98
+ this.context.mcpClients.delete(serverNameRaw.trim());
99
+ }
100
+ const errorCode = typeof error?.code === 'number'
101
+ ? error.code
102
+ : -32603;
103
+ const errorMessage = error instanceof Error
104
+ ? error.message
105
+ : 'Failed to execute MCP request';
106
+ const errorData = error?.data;
107
+ const errorBody = {
108
+ code: errorCode,
109
+ message: errorMessage,
110
+ };
111
+ if (errorData !== undefined) {
112
+ errorBody['data'] = errorData;
113
+ }
114
+ return {
115
+ subtype: 'mcp_message',
116
+ mcp_response: {
117
+ jsonrpc: jsonrpcVersion,
118
+ id: messageId ?? null,
119
+ error: errorBody,
120
+ },
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * Handle mcp_server_status request
126
+ *
127
+ * Returns status of registered MCP servers
128
+ */
129
+ async handleMcpStatus() {
130
+ const status = {};
131
+ // Include SDK MCP servers
132
+ for (const serverName of this.context.sdkMcpServers) {
133
+ status[serverName] = 'connected';
134
+ }
135
+ // Include CLI-managed MCP clients
136
+ for (const serverName of this.context.mcpClients.keys()) {
137
+ status[serverName] = 'connected';
138
+ }
139
+ if (this.context.debugMode) {
140
+ console.error(`[MCPController] MCP status: ${Object.keys(status).length} servers`);
141
+ }
142
+ return status;
143
+ }
144
+ /**
145
+ * Get or create MCP client for a server
146
+ *
147
+ * Implements lazy connection and caching
148
+ */
149
+ async getOrCreateMcpClient(serverName) {
150
+ // Check cache first
151
+ const cached = this.context.mcpClients.get(serverName);
152
+ if (cached) {
153
+ return cached;
154
+ }
155
+ // Get server configuration
156
+ const provider = this.context.config;
157
+ if (typeof provider.getMcpServers !== 'function') {
158
+ throw new Error(`MCP server "${serverName}" is not configured`);
159
+ }
160
+ const servers = provider.getMcpServers() ?? {};
161
+ const serverConfig = servers[serverName];
162
+ if (!serverConfig) {
163
+ throw new Error(`MCP server "${serverName}" is not configured`);
164
+ }
165
+ const debugMode = typeof provider.getDebugMode === 'function'
166
+ ? provider.getDebugMode()
167
+ : false;
168
+ const workspaceContext = typeof provider.getWorkspaceContext === 'function'
169
+ ? provider.getWorkspaceContext()
170
+ : undefined;
171
+ if (!workspaceContext) {
172
+ throw new Error('Workspace context is not available for MCP connection');
173
+ }
174
+ // Connect to MCP server
175
+ const client = await connectToMcpServer(serverName, serverConfig, debugMode, workspaceContext);
176
+ // Cache the client
177
+ const entry = { client, config: serverConfig };
178
+ this.context.mcpClients.set(serverName, entry);
179
+ if (this.context.debugMode) {
180
+ console.error(`[MCPController] Connected to MCP server: ${serverName}`);
181
+ }
182
+ return entry;
183
+ }
184
+ /**
185
+ * Cleanup MCP clients
186
+ */
187
+ cleanup() {
188
+ if (this.context.debugMode) {
189
+ console.error(`[MCPController] Cleaning up ${this.context.mcpClients.size} MCP clients`);
190
+ }
191
+ // Close all MCP clients
192
+ for (const [serverName, { client }] of this.context.mcpClients.entries()) {
193
+ try {
194
+ client.close();
195
+ }
196
+ catch (error) {
197
+ if (this.context.debugMode) {
198
+ console.error(`[MCPController] Failed to close MCP client ${serverName}:`, error);
199
+ }
200
+ }
201
+ }
202
+ this.context.mcpClients.clear();
203
+ }
204
+ }
205
+ //# sourceMappingURL=mcpController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/mcpController.ts"],"names":[],"mappings":"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"}