agentstudio 0.1.18 → 0.1.20

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 (602) hide show
  1. package/README.md +26 -505
  2. package/bin/agentstudio.js +305 -0
  3. package/bin/agentstudio.js.map +1 -0
  4. package/bin/serviceManager.d.ts +16 -0
  5. package/bin/serviceManager.d.ts.map +1 -0
  6. package/bin/serviceManager.js +434 -0
  7. package/bin/serviceManager.js.map +1 -0
  8. package/config/index.d.ts +74 -0
  9. package/config/index.d.ts.map +1 -0
  10. package/config/index.js +166 -0
  11. package/config/index.js.map +1 -0
  12. package/config/paths.d.ts +81 -0
  13. package/config/paths.d.ts.map +1 -0
  14. package/config/paths.js +98 -0
  15. package/config/paths.js.map +1 -0
  16. package/index.d.ts +4 -0
  17. package/index.d.ts.map +1 -0
  18. package/index.js +364 -0
  19. package/index.js.map +1 -0
  20. package/jobs/taskTimeoutMonitor.d.ts +25 -0
  21. package/jobs/taskTimeoutMonitor.d.ts.map +1 -0
  22. package/jobs/taskTimeoutMonitor.js +94 -0
  23. package/jobs/taskTimeoutMonitor.js.map +1 -0
  24. package/middleware/a2aAuth.d.ts +38 -0
  25. package/middleware/a2aAuth.d.ts.map +1 -0
  26. package/middleware/a2aAuth.js +134 -0
  27. package/middleware/a2aAuth.js.map +1 -0
  28. package/{backend/dist/middleware → middleware}/auth.d.ts +3 -1
  29. package/middleware/auth.d.ts.map +1 -0
  30. package/middleware/auth.js +35 -0
  31. package/middleware/auth.js.map +1 -0
  32. package/middleware/httpsOnly.d.ts +38 -0
  33. package/middleware/httpsOnly.d.ts.map +1 -0
  34. package/middleware/httpsOnly.js +105 -0
  35. package/middleware/httpsOnly.js.map +1 -0
  36. package/middleware/rateLimiting.d.ts +37 -0
  37. package/middleware/rateLimiting.d.ts.map +1 -0
  38. package/middleware/rateLimiting.js +118 -0
  39. package/middleware/rateLimiting.js.map +1 -0
  40. package/package.json +43 -38
  41. package/public/assets/AgentsPage-CKTz2ND6.js +10 -0
  42. package/public/assets/Button-Dg6ni5Yl.js +1 -0
  43. package/public/assets/ChatPage-DkO3kzY2.js +442 -0
  44. package/public/assets/CommandForm-CIfw9mVj.js +7 -0
  45. package/public/assets/CommandsPage-BgN0E41K.js +1 -0
  46. package/public/assets/DashboardPage-Duu6pBON.js +15 -0
  47. package/public/assets/FileBrowser-Bnm7ZyGT.js +6 -0
  48. package/public/assets/FileExplorer-Dy8ZFDtK.js +1 -0
  49. package/public/assets/GeneralSettingsPage-BJTiwSqP.js +1 -0
  50. package/public/assets/LandingPage-CCqtSDce.js +1 -0
  51. package/public/assets/LoginPage-DCI_RABC.js +16 -0
  52. package/public/assets/McpPage-Dj4bE6a2.js +40 -0
  53. package/public/assets/MemorySettingsPage-v7kI6DEB.js +1 -0
  54. package/public/assets/PluginsPage-CQ08px0h.js +1 -0
  55. package/public/assets/ProjectSelector-DKkhmVGz.js +1 -0
  56. package/public/assets/ProjectsPage-6nGz1v6U.js +21 -0
  57. package/public/assets/ScheduledTasksPage-Dv8qPeLY.js +1 -0
  58. package/public/assets/SettingsLayout-stXQCl6u.js +1 -0
  59. package/public/assets/SkillsPage-DlQPlwG5.js +18 -0
  60. package/{backend/dist/frontend/assets/SubagentForm-DXtTTIKg.js → public/assets/SubagentForm-iYJ0l9vh.js} +2 -2
  61. package/public/assets/SubagentsPage-ksh-LWAC.js +1 -0
  62. package/{backend/dist/frontend/assets/ToastTestPage-DT4wuN5C.js → public/assets/ToastTestPage-pxyInZeD.js} +1 -1
  63. package/public/assets/ToolsList-CWZLcBx2.js +1 -0
  64. package/public/assets/UnifiedToolSelector-A2UIt1Xn.js +1 -0
  65. package/public/assets/VersionSettingsPage-ClLBqAIC.js +5 -0
  66. package/public/assets/_basePickBy-Ce1_TuBk.js +1 -0
  67. package/public/assets/_baseUniq-Dt6C4BgZ.js +1 -0
  68. package/public/assets/agents-C4aCwcCz.js +1 -0
  69. package/public/assets/arc-c63c3GDw.js +1 -0
  70. package/public/assets/architectureDiagram-VXUJARFQ-rnurJGX4.js +36 -0
  71. package/public/assets/blockDiagram-VD42YOAC-CM33sjhb.js +122 -0
  72. package/public/assets/c4Diagram-YG6GDRKO-B1tJjciL.js +10 -0
  73. package/public/assets/channel-6fK1csbi.js +1 -0
  74. package/public/assets/chunk-4BX2VUAB-vbzk_8Ta.js +1 -0
  75. package/public/assets/chunk-55IACEB6-CNXjTgeK.js +1 -0
  76. package/public/assets/chunk-B4BG7PRW-CykotMKj.js +165 -0
  77. package/public/assets/chunk-DI55MBZ5-DbZodDrP.js +220 -0
  78. package/public/assets/chunk-FMBD7UC4-u0h-4JXb.js +15 -0
  79. package/public/assets/chunk-QN33PNHL-B7VLbRpC.js +1 -0
  80. package/public/assets/chunk-QZHKN3VN-DfcZEdwM.js +1 -0
  81. package/public/assets/chunk-TZMSLE5B-BP4O9iGm.js +1 -0
  82. package/public/assets/classDiagram-2ON5EDUG-PrDkNsdA.js +1 -0
  83. package/public/assets/classDiagram-v2-WZHVMYZB-PrDkNsdA.js +1 -0
  84. package/public/assets/clone-CXX9AxT7.js +1 -0
  85. package/public/assets/cose-bilkent-S5V4N54A-CSV8iDOr.js +1 -0
  86. package/public/assets/cytoscape.esm-DtBltrT8.js +331 -0
  87. package/public/assets/dagre-6UL2VRFP-S5vHkFwY.js +4 -0
  88. package/{backend/dist/frontend/assets/data-structures-DLJedtzx.js → public/assets/data-structures-C0h9Oap1.js} +1 -1
  89. package/public/assets/defaultLocale-C4B-KCzX.js +1 -0
  90. package/public/assets/diagram-PSM6KHXK-Bl4NbJsm.js +24 -0
  91. package/public/assets/diagram-QEK2KX5R-D-6ipdkt.js +43 -0
  92. package/public/assets/diagram-S2PKOQOG-DBuN3kfb.js +24 -0
  93. package/public/assets/erDiagram-Q2GNP2WA-DEhlyUw1.js +60 -0
  94. package/public/assets/flowDiagram-NV44I4VS-PsSk5-Xf.js +162 -0
  95. package/public/assets/ganttDiagram-LVOFAZNH-PfD-vtKp.js +267 -0
  96. package/public/assets/gitGraphDiagram-NY62KEGX-CUq51Mt1.js +65 -0
  97. package/public/assets/graph-Bc5M3bvZ.js +1 -0
  98. package/public/assets/index-ImPzdvfG.js +293 -0
  99. package/public/assets/index-TEVaBQiv.css +1 -0
  100. package/public/assets/infoDiagram-F6ZHWCRC-BTR1hJCm.js +2 -0
  101. package/public/assets/init-Gi6I4Gst.js +1 -0
  102. package/public/assets/journeyDiagram-XKPGCS4Q-CTyau8Sh.js +139 -0
  103. package/public/assets/kanban-definition-3W4ZIXB7-2R3dHQq1.js +89 -0
  104. package/public/assets/katex-qrhCpa0F.js +261 -0
  105. package/public/assets/layout-BCktuL_6.js +1 -0
  106. package/public/assets/linear-lHuinZOC.js +1 -0
  107. package/public/assets/mindmap-definition-VGOIOE7T-Dl8qR3zk.js +68 -0
  108. package/public/assets/monaco-editor-DHKm5-VF.js +19 -0
  109. package/public/assets/ordinal-Cboi1Yqb.js +1 -0
  110. package/public/assets/pieDiagram-ADFJNKIX-Bqcukh_c.js +30 -0
  111. package/public/assets/quadrantDiagram-AYHSOK5B-C_uML1JV.js +7 -0
  112. package/public/assets/requirementDiagram-UZGBJVZJ-QUbH9ShO.js +64 -0
  113. package/public/assets/sankeyDiagram-TZEHDZUN-CEomXpQ1.js +10 -0
  114. package/public/assets/sequenceDiagram-WL72ISMW-DNsDMjTd.js +145 -0
  115. package/public/assets/stateDiagram-FKZM4ZOC-BA_Narwp.js +1 -0
  116. package/public/assets/stateDiagram-v2-4FDKWEC3-Cy5am68v.js +1 -0
  117. package/{backend/dist/frontend/assets/syntax-highlighting-YWvMU4Hm.js → public/assets/syntax-highlighting-CnREyncB.js} +5 -5
  118. package/public/assets/tabManager-CkNKjP4G.js +30 -0
  119. package/{backend/dist/frontend/assets/table-D6q1rytw.js → public/assets/table-CSWCaVuS.js} +1 -1
  120. package/public/assets/timeline-definition-IT6M3QCI-DeEgHBeI.js +61 -0
  121. package/public/assets/tools-C7xmF_rB.js +1 -0
  122. package/public/assets/treemap-KMMF4GRG-5HQSTjk6.js +128 -0
  123. package/{backend/dist/frontend/assets/ui-components-Cw21Epuw.js → public/assets/ui-components-BNdpaz32.js} +221 -96
  124. package/public/assets/useAgents-C9aEFOWD.js +2 -0
  125. package/public/assets/useClaudeVersions-CcFqpR2o.js +1 -0
  126. package/public/assets/useCommands-BadxYHf2.js +1 -0
  127. package/public/assets/useProjects-Dgk7ldPq.js +1 -0
  128. package/public/assets/xychartDiagram-PRI3JC2R-C7BNHmgo.js +7 -0
  129. package/{backend/dist/frontend → public}/index.html +8 -8
  130. package/routes/__tests__/a2a.integration.test.d.ts +11 -0
  131. package/routes/__tests__/a2a.integration.test.d.ts.map +1 -0
  132. package/routes/__tests__/a2a.integration.test.js +314 -0
  133. package/routes/__tests__/a2a.integration.test.js.map +1 -0
  134. package/routes/__tests__/a2a.test.d.ts +6 -0
  135. package/routes/__tests__/a2a.test.d.ts.map +1 -0
  136. package/routes/__tests__/a2a.test.js +622 -0
  137. package/routes/__tests__/a2a.test.js.map +1 -0
  138. package/routes/__tests__/agents.test.d.ts +6 -0
  139. package/routes/__tests__/agents.test.d.ts.map +1 -0
  140. package/routes/__tests__/agents.test.js +315 -0
  141. package/routes/__tests__/agents.test.js.map +1 -0
  142. package/routes/__tests__/sessions.test.d.ts +7 -0
  143. package/routes/__tests__/sessions.test.d.ts.map +1 -0
  144. package/routes/__tests__/sessions.test.js +330 -0
  145. package/routes/__tests__/sessions.test.js.map +1 -0
  146. package/routes/a2a.d.ts +18 -0
  147. package/routes/a2a.d.ts.map +1 -0
  148. package/routes/a2a.js +649 -0
  149. package/routes/a2a.js.map +1 -0
  150. package/routes/a2a.streaming.test.d.ts +2 -0
  151. package/routes/a2a.streaming.test.d.ts.map +1 -0
  152. package/routes/a2a.streaming.test.js +167 -0
  153. package/routes/a2a.streaming.test.js.map +1 -0
  154. package/routes/a2aManagement.d.ts +21 -0
  155. package/routes/a2aManagement.d.ts.map +1 -0
  156. package/routes/a2aManagement.js +466 -0
  157. package/routes/a2aManagement.js.map +1 -0
  158. package/{backend/dist/routes → routes}/agents.d.ts.map +1 -1
  159. package/routes/agents.js +997 -0
  160. package/routes/agents.js.map +1 -0
  161. package/{backend/dist/routes → routes}/auth.d.ts.map +1 -1
  162. package/routes/auth.js +135 -0
  163. package/routes/auth.js.map +1 -0
  164. package/{backend/dist/routes → routes}/commands.d.ts.map +1 -1
  165. package/{backend/dist/routes → routes}/commands.js +115 -31
  166. package/routes/commands.js.map +1 -0
  167. package/routes/config.d.ts +4 -0
  168. package/routes/config.d.ts.map +1 -0
  169. package/routes/config.js +211 -0
  170. package/routes/config.js.map +1 -0
  171. package/{backend/dist/routes → routes}/files.d.ts.map +1 -1
  172. package/{backend/dist/routes → routes}/files.js +103 -43
  173. package/routes/files.js.map +1 -0
  174. package/{backend/dist/routes → routes}/mcp.d.ts.map +1 -1
  175. package/{backend/dist/routes → routes}/mcp.js +175 -88
  176. package/routes/mcp.js.map +1 -0
  177. package/routes/media.d.ts.map +1 -0
  178. package/{backend/dist/routes → routes}/media.js +52 -42
  179. package/routes/media.js.map +1 -0
  180. package/routes/mediaAuth.d.ts +8 -0
  181. package/routes/mediaAuth.d.ts.map +1 -0
  182. package/routes/mediaAuth.js +136 -0
  183. package/routes/mediaAuth.js.map +1 -0
  184. package/routes/plugins.d.ts +4 -0
  185. package/routes/plugins.d.ts.map +1 -0
  186. package/routes/plugins.js +339 -0
  187. package/routes/plugins.js.map +1 -0
  188. package/{backend/dist/routes → routes}/projects.d.ts.map +1 -1
  189. package/routes/projects.js +884 -0
  190. package/routes/projects.js.map +1 -0
  191. package/routes/scheduledTasks.d.ts +9 -0
  192. package/routes/scheduledTasks.d.ts.map +1 -0
  193. package/routes/scheduledTasks.js +320 -0
  194. package/routes/scheduledTasks.js.map +1 -0
  195. package/{backend/dist/routes → routes}/sessions.d.ts.map +1 -1
  196. package/{backend/dist/routes → routes}/sessions.js +258 -39
  197. package/routes/sessions.js.map +1 -0
  198. package/{backend/dist/routes → routes}/settings.d.ts.map +1 -1
  199. package/{backend/dist/routes → routes}/settings.js +82 -241
  200. package/routes/settings.js.map +1 -0
  201. package/routes/skills.d.ts +4 -0
  202. package/routes/skills.d.ts.map +1 -0
  203. package/routes/skills.js +272 -0
  204. package/routes/skills.js.map +1 -0
  205. package/routes/slack.d.ts +10 -0
  206. package/routes/slack.d.ts.map +1 -0
  207. package/routes/slack.js +189 -0
  208. package/routes/slack.js.map +1 -0
  209. package/{backend/dist/routes → routes}/slides.d.ts.map +1 -1
  210. package/{backend/dist/routes → routes}/slides.js +29 -27
  211. package/routes/slides.js.map +1 -0
  212. package/{backend/dist/routes → routes}/subagents.js +27 -22
  213. package/routes/subagents.js.map +1 -0
  214. package/schemas/a2a.d.ts +858 -0
  215. package/schemas/a2a.d.ts.map +1 -0
  216. package/schemas/a2a.js +300 -0
  217. package/schemas/a2a.js.map +1 -0
  218. package/scripts/postinstall.js +10 -0
  219. package/services/__tests__/pluginInstaller.test.d.ts +5 -0
  220. package/services/__tests__/pluginInstaller.test.d.ts.map +1 -0
  221. package/services/__tests__/pluginInstaller.test.js +290 -0
  222. package/services/__tests__/pluginInstaller.test.js.map +1 -0
  223. package/services/__tests__/pluginParser.test.d.ts +5 -0
  224. package/services/__tests__/pluginParser.test.d.ts.map +1 -0
  225. package/services/__tests__/pluginParser.test.js +272 -0
  226. package/services/__tests__/pluginParser.test.js.map +1 -0
  227. package/services/__tests__/pluginPaths.test.d.ts +5 -0
  228. package/services/__tests__/pluginPaths.test.d.ts.map +1 -0
  229. package/services/__tests__/pluginPaths.test.js +221 -0
  230. package/services/__tests__/pluginPaths.test.js.map +1 -0
  231. package/services/__tests__/pluginScanner.test.d.ts +5 -0
  232. package/services/__tests__/pluginScanner.test.d.ts.map +1 -0
  233. package/services/__tests__/pluginScanner.test.js +272 -0
  234. package/services/__tests__/pluginScanner.test.js.map +1 -0
  235. package/services/__tests__/pluginSymlink.test.d.ts +5 -0
  236. package/services/__tests__/pluginSymlink.test.d.ts.map +1 -0
  237. package/services/__tests__/pluginSymlink.test.js +318 -0
  238. package/services/__tests__/pluginSymlink.test.js.map +1 -0
  239. package/services/__tests__/slackAIService.test.d.ts +5 -0
  240. package/services/__tests__/slackAIService.test.d.ts.map +1 -0
  241. package/services/__tests__/slackAIService.test.js +477 -0
  242. package/services/__tests__/slackAIService.test.js.map +1 -0
  243. package/services/__tests__/slackThreadMapper.test.d.ts +5 -0
  244. package/services/__tests__/slackThreadMapper.test.d.ts.map +1 -0
  245. package/services/__tests__/slackThreadMapper.test.js +194 -0
  246. package/services/__tests__/slackThreadMapper.test.js.map +1 -0
  247. package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts +6 -0
  248. package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts.map +1 -0
  249. package/services/a2a/__tests__/a2aClientTool.integration.test.js +264 -0
  250. package/services/a2a/__tests__/a2aClientTool.integration.test.js.map +1 -0
  251. package/services/a2a/__tests__/a2aClientTool.test.d.ts +6 -0
  252. package/services/a2a/__tests__/a2aClientTool.test.d.ts.map +1 -0
  253. package/services/a2a/__tests__/a2aClientTool.test.js +418 -0
  254. package/services/a2a/__tests__/a2aClientTool.test.js.map +1 -0
  255. package/services/a2a/__tests__/a2aConfigService.test.d.ts +6 -0
  256. package/services/a2a/__tests__/a2aConfigService.test.d.ts.map +1 -0
  257. package/services/a2a/__tests__/a2aConfigService.test.js +431 -0
  258. package/services/a2a/__tests__/a2aConfigService.test.js.map +1 -0
  259. package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts +2 -0
  260. package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts.map +1 -0
  261. package/services/a2a/__tests__/a2aConfigServicePath.test.js +49 -0
  262. package/services/a2a/__tests__/a2aConfigServicePath.test.js.map +1 -0
  263. package/services/a2a/__tests__/a2aSdkMcp.test.d.ts +10 -0
  264. package/services/a2a/__tests__/a2aSdkMcp.test.d.ts.map +1 -0
  265. package/services/a2a/__tests__/a2aSdkMcp.test.js +239 -0
  266. package/services/a2a/__tests__/a2aSdkMcp.test.js.map +1 -0
  267. package/services/a2a/__tests__/agentCardService.test.d.ts +6 -0
  268. package/services/a2a/__tests__/agentCardService.test.d.ts.map +1 -0
  269. package/services/a2a/__tests__/agentCardService.test.js +292 -0
  270. package/services/a2a/__tests__/agentCardService.test.js.map +1 -0
  271. package/services/a2a/__tests__/apiKeyService.test.d.ts +6 -0
  272. package/services/a2a/__tests__/apiKeyService.test.d.ts.map +1 -0
  273. package/services/a2a/__tests__/apiKeyService.test.js +284 -0
  274. package/services/a2a/__tests__/apiKeyService.test.js.map +1 -0
  275. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts +2 -0
  276. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts.map +1 -0
  277. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js +70 -0
  278. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js.map +1 -0
  279. package/services/a2a/__tests__/dynamic_config_verification.test.d.ts +2 -0
  280. package/services/a2a/__tests__/dynamic_config_verification.test.d.ts.map +1 -0
  281. package/services/a2a/__tests__/dynamic_config_verification.test.js +67 -0
  282. package/services/a2a/__tests__/dynamic_config_verification.test.js.map +1 -0
  283. package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts +2 -0
  284. package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts.map +1 -0
  285. package/services/a2a/__tests__/integrateA2AMcpServer.test.js +112 -0
  286. package/services/a2a/__tests__/integrateA2AMcpServer.test.js.map +1 -0
  287. package/services/a2a/__tests__/taskManager.integration.test.d.ts +7 -0
  288. package/services/a2a/__tests__/taskManager.integration.test.d.ts.map +1 -0
  289. package/services/a2a/__tests__/taskManager.integration.test.js +346 -0
  290. package/services/a2a/__tests__/taskManager.integration.test.js.map +1 -0
  291. package/services/a2a/__tests__/taskManager.test.d.ts +7 -0
  292. package/services/a2a/__tests__/taskManager.test.d.ts.map +1 -0
  293. package/services/a2a/__tests__/taskManager.test.js +423 -0
  294. package/services/a2a/__tests__/taskManager.test.js.map +1 -0
  295. package/services/a2a/a2aClientTool.d.ts +73 -0
  296. package/services/a2a/a2aClientTool.d.ts.map +1 -0
  297. package/services/a2a/a2aClientTool.js +572 -0
  298. package/services/a2a/a2aClientTool.js.map +1 -0
  299. package/services/a2a/a2aConfigService.d.ts +50 -0
  300. package/services/a2a/a2aConfigService.d.ts.map +1 -0
  301. package/services/a2a/a2aConfigService.js +186 -0
  302. package/services/a2a/a2aConfigService.js.map +1 -0
  303. package/services/a2a/a2aHistoryService.d.ts +32 -0
  304. package/services/a2a/a2aHistoryService.d.ts.map +1 -0
  305. package/services/a2a/a2aHistoryService.js +108 -0
  306. package/services/a2a/a2aHistoryService.js.map +1 -0
  307. package/services/a2a/a2aIntegration.d.ts +9 -0
  308. package/services/a2a/a2aIntegration.d.ts.map +1 -0
  309. package/services/a2a/a2aIntegration.js +41 -0
  310. package/services/a2a/a2aIntegration.js.map +1 -0
  311. package/services/a2a/a2aQueryService.d.ts +71 -0
  312. package/services/a2a/a2aQueryService.d.ts.map +1 -0
  313. package/services/a2a/a2aQueryService.js +166 -0
  314. package/services/a2a/a2aQueryService.js.map +1 -0
  315. package/services/a2a/a2aSdkMcp.d.ts +51 -0
  316. package/services/a2a/a2aSdkMcp.d.ts.map +1 -0
  317. package/services/a2a/a2aSdkMcp.js +185 -0
  318. package/services/a2a/a2aSdkMcp.js.map +1 -0
  319. package/services/a2a/a2aStreamEvents.d.ts +94 -0
  320. package/services/a2a/a2aStreamEvents.d.ts.map +1 -0
  321. package/services/a2a/a2aStreamEvents.js +92 -0
  322. package/services/a2a/a2aStreamEvents.js.map +1 -0
  323. package/services/a2a/agentCardService.d.ts +34 -0
  324. package/services/a2a/agentCardService.d.ts.map +1 -0
  325. package/services/a2a/agentCardService.js +228 -0
  326. package/services/a2a/agentCardService.js.map +1 -0
  327. package/services/a2a/agentMappingService.d.ts +53 -0
  328. package/services/a2a/agentMappingService.d.ts.map +1 -0
  329. package/services/a2a/agentMappingService.js +185 -0
  330. package/services/a2a/agentMappingService.js.map +1 -0
  331. package/services/a2a/apiKeyService.d.ts +101 -0
  332. package/services/a2a/apiKeyService.d.ts.map +1 -0
  333. package/services/a2a/apiKeyService.js +314 -0
  334. package/services/a2a/apiKeyService.js.map +1 -0
  335. package/services/a2a/taskCleanup.d.ts +30 -0
  336. package/services/a2a/taskCleanup.d.ts.map +1 -0
  337. package/services/a2a/taskCleanup.js +184 -0
  338. package/services/a2a/taskCleanup.js.map +1 -0
  339. package/services/a2a/taskManager.d.ts +86 -0
  340. package/services/a2a/taskManager.d.ts.map +1 -0
  341. package/services/a2a/taskManager.js +263 -0
  342. package/services/a2a/taskManager.js.map +1 -0
  343. package/services/agentStorage.d.ts +27 -0
  344. package/services/agentStorage.d.ts.map +1 -0
  345. package/services/agentStorage.js +487 -0
  346. package/services/agentStorage.js.map +1 -0
  347. package/services/askUserQuestion/askUserQuestionIntegration.d.ts +24 -0
  348. package/services/askUserQuestion/askUserQuestionIntegration.d.ts.map +1 -0
  349. package/services/askUserQuestion/askUserQuestionIntegration.js +52 -0
  350. package/services/askUserQuestion/askUserQuestionIntegration.js.map +1 -0
  351. package/services/askUserQuestion/askUserQuestionMcp.d.ts +103 -0
  352. package/services/askUserQuestion/askUserQuestionMcp.d.ts.map +1 -0
  353. package/services/askUserQuestion/askUserQuestionMcp.js +129 -0
  354. package/services/askUserQuestion/askUserQuestionMcp.js.map +1 -0
  355. package/services/askUserQuestion/index.d.ts +13 -0
  356. package/services/askUserQuestion/index.d.ts.map +1 -0
  357. package/services/askUserQuestion/index.js +35 -0
  358. package/services/askUserQuestion/index.js.map +1 -0
  359. package/services/askUserQuestion/init.d.ts +17 -0
  360. package/services/askUserQuestion/init.d.ts.map +1 -0
  361. package/services/askUserQuestion/init.js +47 -0
  362. package/services/askUserQuestion/init.js.map +1 -0
  363. package/services/askUserQuestion/notificationChannel.d.ts +97 -0
  364. package/services/askUserQuestion/notificationChannel.d.ts.map +1 -0
  365. package/services/askUserQuestion/notificationChannel.js +147 -0
  366. package/services/askUserQuestion/notificationChannel.js.map +1 -0
  367. package/services/askUserQuestion/slackNotificationChannel.d.ts +35 -0
  368. package/services/askUserQuestion/slackNotificationChannel.d.ts.map +1 -0
  369. package/services/askUserQuestion/slackNotificationChannel.js +129 -0
  370. package/services/askUserQuestion/slackNotificationChannel.js.map +1 -0
  371. package/services/askUserQuestion/sseNotificationChannel.d.ts +36 -0
  372. package/services/askUserQuestion/sseNotificationChannel.d.ts.map +1 -0
  373. package/services/askUserQuestion/sseNotificationChannel.js +88 -0
  374. package/services/askUserQuestion/sseNotificationChannel.js.map +1 -0
  375. package/services/askUserQuestion/userInputRegistry.d.ts +107 -0
  376. package/services/askUserQuestion/userInputRegistry.d.ts.map +1 -0
  377. package/services/askUserQuestion/userInputRegistry.js +253 -0
  378. package/services/askUserQuestion/userInputRegistry.js.map +1 -0
  379. package/{backend/dist/services → services}/claudeSession.d.ts +20 -5
  380. package/services/claudeSession.d.ts.map +1 -0
  381. package/{backend/dist/services → services}/claudeSession.js +123 -41
  382. package/services/claudeSession.js.map +1 -0
  383. package/services/claudeVersionStorage.d.ts +20 -0
  384. package/services/claudeVersionStorage.d.ts.map +1 -0
  385. package/services/claudeVersionStorage.js +331 -0
  386. package/services/claudeVersionStorage.js.map +1 -0
  387. package/{backend/dist/services → services}/messageQueue.d.ts.map +1 -1
  388. package/{backend/dist/services → services}/messageQueue.js +16 -3
  389. package/services/messageQueue.js.map +1 -0
  390. package/services/pluginInstaller.d.ts +58 -0
  391. package/services/pluginInstaller.d.ts.map +1 -0
  392. package/services/pluginInstaller.js +321 -0
  393. package/services/pluginInstaller.js.map +1 -0
  394. package/services/pluginParser.d.ts +45 -0
  395. package/services/pluginParser.d.ts.map +1 -0
  396. package/services/pluginParser.js +437 -0
  397. package/services/pluginParser.js.map +1 -0
  398. package/services/pluginPaths.d.ts +80 -0
  399. package/services/pluginPaths.d.ts.map +1 -0
  400. package/services/pluginPaths.js +274 -0
  401. package/services/pluginPaths.js.map +1 -0
  402. package/services/pluginScanner.d.ts +36 -0
  403. package/services/pluginScanner.d.ts.map +1 -0
  404. package/services/pluginScanner.js +251 -0
  405. package/services/pluginScanner.js.map +1 -0
  406. package/services/pluginSymlink.d.ts +54 -0
  407. package/services/pluginSymlink.d.ts.map +1 -0
  408. package/services/pluginSymlink.js +223 -0
  409. package/services/pluginSymlink.js.map +1 -0
  410. package/services/projectMetadataStorage.d.ts +114 -0
  411. package/services/projectMetadataStorage.d.ts.map +1 -0
  412. package/services/projectMetadataStorage.js +711 -0
  413. package/services/projectMetadataStorage.js.map +1 -0
  414. package/services/scheduledTaskStorage.d.ts +52 -0
  415. package/services/scheduledTaskStorage.d.ts.map +1 -0
  416. package/services/scheduledTaskStorage.js +285 -0
  417. package/services/scheduledTaskStorage.js.map +1 -0
  418. package/services/schedulerService.d.ts +81 -0
  419. package/services/schedulerService.d.ts.map +1 -0
  420. package/services/schedulerService.js +743 -0
  421. package/services/schedulerService.js.map +1 -0
  422. package/{backend/dist/services → services}/sessionManager.d.ts +6 -4
  423. package/services/sessionManager.d.ts.map +1 -0
  424. package/{backend/dist/services → services}/sessionManager.js +77 -16
  425. package/services/sessionManager.js.map +1 -0
  426. package/services/skillStorage.d.ts +60 -0
  427. package/services/skillStorage.d.ts.map +1 -0
  428. package/services/skillStorage.js +398 -0
  429. package/services/skillStorage.js.map +1 -0
  430. package/services/slackAIService.d.ts +81 -0
  431. package/services/slackAIService.d.ts.map +1 -0
  432. package/services/slackAIService.js +1091 -0
  433. package/services/slackAIService.js.map +1 -0
  434. package/services/slackClient.d.ts +46 -0
  435. package/services/slackClient.d.ts.map +1 -0
  436. package/services/slackClient.js +85 -0
  437. package/services/slackClient.js.map +1 -0
  438. package/services/slackSessionLock.d.ts +79 -0
  439. package/services/slackSessionLock.d.ts.map +1 -0
  440. package/services/slackSessionLock.js +353 -0
  441. package/services/slackSessionLock.js.map +1 -0
  442. package/services/slackThreadMapper.d.ts +57 -0
  443. package/services/slackThreadMapper.d.ts.map +1 -0
  444. package/services/slackThreadMapper.js +140 -0
  445. package/services/slackThreadMapper.js.map +1 -0
  446. package/types/a2a.d.ts +275 -0
  447. package/types/a2a.d.ts.map +1 -0
  448. package/types/a2a.js +23 -0
  449. package/types/a2a.js.map +1 -0
  450. package/types/agents.d.ts +95 -0
  451. package/types/agents.d.ts.map +1 -0
  452. package/types/agents.js +46 -0
  453. package/types/agents.js.map +1 -0
  454. package/types/claude-history.d.ts +62 -0
  455. package/types/claude-history.d.ts.map +1 -0
  456. package/types/claude-history.js +4 -0
  457. package/types/claude-history.js.map +1 -0
  458. package/types/claude-versions.d.ts +36 -0
  459. package/types/claude-versions.d.ts.map +1 -0
  460. package/types/claude-versions.js +3 -0
  461. package/types/claude-versions.js.map +1 -0
  462. package/types/commands.d.ts +50 -0
  463. package/types/commands.d.ts.map +1 -0
  464. package/types/commands.js +23 -0
  465. package/types/commands.js.map +1 -0
  466. package/types/plugins.d.ts +144 -0
  467. package/types/plugins.d.ts.map +1 -0
  468. package/types/plugins.js +8 -0
  469. package/types/plugins.js.map +1 -0
  470. package/types/projects.d.ts +42 -0
  471. package/types/projects.d.ts.map +1 -0
  472. package/types/projects.js +4 -0
  473. package/types/projects.js.map +1 -0
  474. package/types/scheduledTasks.d.ts +164 -0
  475. package/types/scheduledTasks.d.ts.map +1 -0
  476. package/types/scheduledTasks.js +17 -0
  477. package/types/scheduledTasks.js.map +1 -0
  478. package/types/skills.d.ts +91 -0
  479. package/types/skills.d.ts.map +1 -0
  480. package/types/skills.js +6 -0
  481. package/types/skills.js.map +1 -0
  482. package/types/slack.d.ts +97 -0
  483. package/types/slack.d.ts.map +1 -0
  484. package/types/slack.js +8 -0
  485. package/types/slack.js.map +1 -0
  486. package/types/streaming.d.ts +12 -0
  487. package/types/streaming.d.ts.map +1 -0
  488. package/types/streaming.js +8 -0
  489. package/types/streaming.js.map +1 -0
  490. package/types/subagents.d.ts +26 -0
  491. package/types/subagents.d.ts.map +1 -0
  492. package/types/subagents.js +3 -0
  493. package/types/subagents.js.map +1 -0
  494. package/utils/__tests__/claudeUtils.test.d.ts +5 -0
  495. package/utils/__tests__/claudeUtils.test.d.ts.map +1 -0
  496. package/utils/__tests__/claudeUtils.test.js +282 -0
  497. package/utils/__tests__/claudeUtils.test.js.map +1 -0
  498. package/utils/__tests__/sessionUtils.test.d.ts +5 -0
  499. package/utils/__tests__/sessionUtils.test.d.ts.map +1 -0
  500. package/utils/__tests__/sessionUtils.test.js +295 -0
  501. package/utils/__tests__/sessionUtils.test.js.map +1 -0
  502. package/utils/agentCardCache.d.ts +93 -0
  503. package/utils/agentCardCache.d.ts.map +1 -0
  504. package/utils/agentCardCache.js +212 -0
  505. package/utils/agentCardCache.js.map +1 -0
  506. package/utils/claudeUtils.d.ts +54 -0
  507. package/utils/claudeUtils.d.ts.map +1 -0
  508. package/utils/claudeUtils.js +387 -0
  509. package/utils/claudeUtils.js.map +1 -0
  510. package/utils/fileUtils.d.ts +2 -0
  511. package/utils/fileUtils.d.ts.map +1 -0
  512. package/utils/fileUtils.js +11 -0
  513. package/utils/fileUtils.js.map +1 -0
  514. package/utils/jwt.d.ts +30 -0
  515. package/utils/jwt.d.ts.map +1 -0
  516. package/utils/jwt.js +95 -0
  517. package/utils/jwt.js.map +1 -0
  518. package/utils/sessionUtils.d.ts +64 -0
  519. package/utils/sessionUtils.d.ts.map +1 -0
  520. package/utils/sessionUtils.js +266 -0
  521. package/utils/sessionUtils.js.map +1 -0
  522. package/README.zh-CN.md +0 -525
  523. package/backend/dist/bin/agentstudio.js +0 -120
  524. package/backend/dist/bin/agentstudio.js.map +0 -1
  525. package/backend/dist/frontend/assets/AgentsPage-Dqb_aqAA.js +0 -1
  526. package/backend/dist/frontend/assets/ChatPage-L8Paywyc.js +0 -91
  527. package/backend/dist/frontend/assets/CommandForm-DLl7EIMS.js +0 -7
  528. package/backend/dist/frontend/assets/CommandsPage-Bzavq0Ec.js +0 -1
  529. package/backend/dist/frontend/assets/DashboardPage-B3o4AYFT.js +0 -15
  530. package/backend/dist/frontend/assets/FileBrowser-DL3ayaqb.js +0 -1
  531. package/backend/dist/frontend/assets/GeneralSettingsPage-CBN_de-V.js +0 -1
  532. package/backend/dist/frontend/assets/LandingPage-Dl4ioKos.js +0 -1
  533. package/backend/dist/frontend/assets/LoginPage-4QqRdiSi.js +0 -12
  534. package/backend/dist/frontend/assets/McpPage-CY3tYiqj.js +0 -39
  535. package/backend/dist/frontend/assets/MemorySettingsPage-DGxrok5K.js +0 -1
  536. package/backend/dist/frontend/assets/ProjectSelector-hgmGYVFh.js +0 -1
  537. package/backend/dist/frontend/assets/ProjectsPage-D399IM0c.js +0 -14
  538. package/backend/dist/frontend/assets/SettingsLayout-CL_K-lzJ.js +0 -1
  539. package/backend/dist/frontend/assets/SubagentsPage-Chbhj8p2.js +0 -1
  540. package/backend/dist/frontend/assets/UnifiedToolSelector-CsM9qBvs.js +0 -1
  541. package/backend/dist/frontend/assets/VersionSettingsPage-74Q-LVgA.js +0 -5
  542. package/backend/dist/frontend/assets/agents-ClAzIJTw.js +0 -1
  543. package/backend/dist/frontend/assets/authFetch-BATQyPG5.js +0 -1
  544. package/backend/dist/frontend/assets/index-B9YHa7XT.css +0 -1
  545. package/backend/dist/frontend/assets/index-B_CTNvca.js +0 -268
  546. package/backend/dist/frontend/assets/monaco-editor-C7Z4sOhS.js +0 -19
  547. package/backend/dist/frontend/assets/tabManager-DV8urRBM.js +0 -30
  548. package/backend/dist/frontend/assets/tools-C4EPanYi.js +0 -1
  549. package/backend/dist/frontend/assets/useAgents-DwnOE1_k.js +0 -2
  550. package/backend/dist/frontend/assets/useClaudeVersions-CQdGnCqv.js +0 -1
  551. package/backend/dist/frontend/assets/useCommands-CCVaurbt.js +0 -1
  552. package/backend/dist/index.d.ts +0 -3
  553. package/backend/dist/index.d.ts.map +0 -1
  554. package/backend/dist/index.js +0 -157
  555. package/backend/dist/index.js.map +0 -1
  556. package/backend/dist/middleware/auth.d.ts.map +0 -1
  557. package/backend/dist/middleware/auth.js +0 -21
  558. package/backend/dist/middleware/auth.js.map +0 -1
  559. package/backend/dist/routes/agents.js +0 -803
  560. package/backend/dist/routes/agents.js.map +0 -1
  561. package/backend/dist/routes/auth.js +0 -60
  562. package/backend/dist/routes/auth.js.map +0 -1
  563. package/backend/dist/routes/commands.js.map +0 -1
  564. package/backend/dist/routes/files.js.map +0 -1
  565. package/backend/dist/routes/mcp.js.map +0 -1
  566. package/backend/dist/routes/media.d.ts.map +0 -1
  567. package/backend/dist/routes/media.js.map +0 -1
  568. package/backend/dist/routes/projects.js +0 -528
  569. package/backend/dist/routes/projects.js.map +0 -1
  570. package/backend/dist/routes/sessions.js.map +0 -1
  571. package/backend/dist/routes/settings.js.map +0 -1
  572. package/backend/dist/routes/slides.js.map +0 -1
  573. package/backend/dist/routes/subagents.js.map +0 -1
  574. package/backend/dist/services/claudeSession.d.ts.map +0 -1
  575. package/backend/dist/services/claudeSession.js.map +0 -1
  576. package/backend/dist/services/messageQueue.js.map +0 -1
  577. package/backend/dist/services/sessionManager.d.ts.map +0 -1
  578. package/backend/dist/services/sessionManager.js.map +0 -1
  579. package/backend/dist/utils/jwt.d.ts +0 -15
  580. package/backend/dist/utils/jwt.d.ts.map +0 -1
  581. package/backend/dist/utils/jwt.js +0 -28
  582. package/backend/dist/utils/jwt.js.map +0 -1
  583. /package/{backend/dist/bin → bin}/agentstudio.d.ts +0 -0
  584. /package/{backend/dist/bin → bin}/agentstudio.d.ts.map +0 -0
  585. /package/{backend/dist/frontend → public}/assets/ChatPage-BvQmXfcP.css +0 -0
  586. /package/{backend/dist/frontend → public}/assets/agents-DwCY2K8p.css +0 -0
  587. /package/{backend/dist/frontend → public}/assets/dateFormat-CXa8VnEC.js +0 -0
  588. /package/{backend/dist/frontend → public}/cc-studio.png +0 -0
  589. /package/{backend/dist/frontend → public}/vite.svg +0 -0
  590. /package/{backend/dist/routes → routes}/agents.d.ts +0 -0
  591. /package/{backend/dist/routes → routes}/auth.d.ts +0 -0
  592. /package/{backend/dist/routes → routes}/commands.d.ts +0 -0
  593. /package/{backend/dist/routes → routes}/files.d.ts +0 -0
  594. /package/{backend/dist/routes → routes}/mcp.d.ts +0 -0
  595. /package/{backend/dist/routes → routes}/media.d.ts +0 -0
  596. /package/{backend/dist/routes → routes}/projects.d.ts +0 -0
  597. /package/{backend/dist/routes → routes}/sessions.d.ts +0 -0
  598. /package/{backend/dist/routes → routes}/settings.d.ts +0 -0
  599. /package/{backend/dist/routes → routes}/slides.d.ts +0 -0
  600. /package/{backend/dist/routes → routes}/subagents.d.ts +0 -0
  601. /package/{backend/dist/routes → routes}/subagents.d.ts.map +0 -0
  602. /package/{backend/dist/services → services}/messageQueue.d.ts +0 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * AskUserQuestion SDK MCP Server
3
+ *
4
+ * 实现一个进程内 MCP server,使 agent 能够向用户提问并等待回答
5
+ *
6
+ * 新架构(事件驱动):
7
+ * 1. MCP 工具调用 userInputRegistry.waitForUserInput()
8
+ * 2. UserInputRegistry 发出 'awaiting_input' 事件
9
+ * 3. NotificationChannelManager 监听事件,通过活跃渠道发送通知
10
+ * 4. 用户提交答案后,通过 HTTP API 触发 Promise resolve
11
+ * 5. MCP 工具返回用户的答案,Claude 继续执行
12
+ *
13
+ * 优势:
14
+ * - MCP 工具不需要知道通知渠道
15
+ * - 支持多种通知渠道(SSE、Slack、企业微信等)
16
+ * - 连接断开重连不会影响等待中的请求
17
+ */
18
+ import { z } from 'zod';
19
+ export type AskUserQuestionInput = {
20
+ questions: Array<{
21
+ question: string;
22
+ header: string;
23
+ options: Array<{
24
+ label: string;
25
+ description: string;
26
+ }>;
27
+ multiSelect: boolean;
28
+ }>;
29
+ };
30
+ /**
31
+ * Session reference object - allows dynamic session ID updates
32
+ */
33
+ export interface SessionRef {
34
+ current: string;
35
+ }
36
+ /**
37
+ * Create SDK MCP server for AskUserQuestion tool
38
+ *
39
+ * @param sessionRef - 可更新的会话 ID 引用,用于路由用户通知
40
+ * @param agentId - Agent ID
41
+ * @returns SDK MCP server instance and session reference
42
+ */
43
+ export declare function createAskUserQuestionMcpServer(sessionRef: SessionRef, agentId: string): Promise<{
44
+ server: import("@anthropic-ai/claude-agent-sdk").McpSdkServerConfigWithInstance;
45
+ tool: {
46
+ name: string;
47
+ description: string;
48
+ inputSchema: {
49
+ questions: z.ZodArray<z.ZodObject<{
50
+ question: z.ZodString;
51
+ header: z.ZodString;
52
+ options: z.ZodArray<z.ZodObject<{
53
+ label: z.ZodString;
54
+ description: z.ZodString;
55
+ }, "strip", z.ZodTypeAny, {
56
+ description: string;
57
+ label: string;
58
+ }, {
59
+ description: string;
60
+ label: string;
61
+ }>, "many">;
62
+ multiSelect: z.ZodBoolean;
63
+ }, "strip", z.ZodTypeAny, {
64
+ options: {
65
+ description: string;
66
+ label: string;
67
+ }[];
68
+ header: string;
69
+ question: string;
70
+ multiSelect: boolean;
71
+ }, {
72
+ options: {
73
+ description: string;
74
+ label: string;
75
+ }[];
76
+ header: string;
77
+ question: string;
78
+ multiSelect: boolean;
79
+ }>, "many">;
80
+ };
81
+ handler: (args: {
82
+ questions: {
83
+ options: {
84
+ description: string;
85
+ label: string;
86
+ }[];
87
+ header: string;
88
+ question: string;
89
+ multiSelect: boolean;
90
+ }[];
91
+ }, extra: unknown) => Promise<CallToolResult>;
92
+ };
93
+ sessionRef: SessionRef;
94
+ }>;
95
+ /**
96
+ * Get tool name as it appears to Claude
97
+ */
98
+ export declare function getAskUserQuestionToolName(): string;
99
+ /**
100
+ * Check if a tool name is the AskUserQuestion tool
101
+ */
102
+ export declare function isAskUserQuestionTool(toolName: string): boolean;
103
+ //# sourceMappingURL=askUserQuestionMcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askUserQuestionMcp.d.ts","sourceRoot":"","sources":["../../../src/services/askUserQuestion/askUserQuestionMcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACJ,CAAC;AAmBF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6F3F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * AskUserQuestion SDK MCP Server
4
+ *
5
+ * 实现一个进程内 MCP server,使 agent 能够向用户提问并等待回答
6
+ *
7
+ * 新架构(事件驱动):
8
+ * 1. MCP 工具调用 userInputRegistry.waitForUserInput()
9
+ * 2. UserInputRegistry 发出 'awaiting_input' 事件
10
+ * 3. NotificationChannelManager 监听事件,通过活跃渠道发送通知
11
+ * 4. 用户提交答案后,通过 HTTP API 触发 Promise resolve
12
+ * 5. MCP 工具返回用户的答案,Claude 继续执行
13
+ *
14
+ * 优势:
15
+ * - MCP 工具不需要知道通知渠道
16
+ * - 支持多种通知渠道(SSE、Slack、企业微信等)
17
+ * - 连接断开重连不会影响等待中的请求
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.createAskUserQuestionMcpServer = createAskUserQuestionMcpServer;
21
+ exports.getAskUserQuestionToolName = getAskUserQuestionToolName;
22
+ exports.isAskUserQuestionTool = isAskUserQuestionTool;
23
+ const claude_agent_sdk_1 = require("@anthropic-ai/claude-agent-sdk");
24
+ const zod_1 = require("zod");
25
+ const userInputRegistry_js_1 = require("./userInputRegistry.js");
26
+ /**
27
+ * Tool description for AskUserQuestion
28
+ */
29
+ const TOOL_DESCRIPTION = `Use this tool when you need to ask the user questions during execution. This allows you to:
30
+ 1. Gather user preferences or requirements
31
+ 2. Clarify ambiguous instructions
32
+ 3. Get decisions on implementation choices as you work
33
+ 4. Offer choices to the user about what direction to take.
34
+
35
+ Usage notes:
36
+ - Users will always be able to select "Other" to provide custom text input
37
+ - Use multiSelect: true to allow multiple answers to be selected for a question
38
+ - The tool will pause execution until the user provides their answers
39
+ - This tool supports multiple notification channels (Web, Slack, WeChat, etc.)
40
+
41
+ IMPORTANT: This tool will block until the user responds. Do not call it in situations where immediate response is needed.`;
42
+ /**
43
+ * Create SDK MCP server for AskUserQuestion tool
44
+ *
45
+ * @param sessionRef - 可更新的会话 ID 引用,用于路由用户通知
46
+ * @param agentId - Agent ID
47
+ * @returns SDK MCP server instance and session reference
48
+ */
49
+ async function createAskUserQuestionMcpServer(sessionRef, agentId) {
50
+ // Define the tool with session context
51
+ const askUserQuestionTool = (0, claude_agent_sdk_1.tool)('ask_user_question', TOOL_DESCRIPTION, {
52
+ questions: zod_1.z
53
+ .array(zod_1.z.object({
54
+ question: zod_1.z.string().describe('The complete question to ask the user. Should be clear, specific, and end with a question mark.'),
55
+ header: zod_1.z.string().max(12).describe('Very short label displayed as a chip/tag (max 12 chars). Examples: "Auth method", "Library", "Approach".'),
56
+ options: zod_1.z
57
+ .array(zod_1.z.object({
58
+ label: zod_1.z.string().describe('The display text for this option.'),
59
+ description: zod_1.z.string().describe('Explanation of what this option means.'),
60
+ }))
61
+ .min(2)
62
+ .max(4)
63
+ .describe('The available choices (2-4 options). No need for "Other" option, it will be added automatically.'),
64
+ multiSelect: zod_1.z.boolean().describe('Set to true to allow multiple options to be selected.'),
65
+ }))
66
+ .min(1)
67
+ .max(4)
68
+ .describe('Questions to ask the user (1-4 questions)'),
69
+ }, async (args, context) => {
70
+ // 获取工具调用 ID(从 context 或生成一个)
71
+ const toolUseId = context?.toolUseId || `ask_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
72
+ // 使用动态 session ID(可能已从临时 ID 更新为真实 ID)
73
+ const currentSessionId = sessionRef.current;
74
+ console.log(`🎤 [AskUserQuestion MCP] Tool called with ${args.questions.length} questions`);
75
+ console.log(`🎤 [AskUserQuestion MCP] Session: ${currentSessionId}, Agent: ${agentId}, ToolUseId: ${toolUseId}`);
76
+ try {
77
+ // 注册等待用户输入(无超时限制,允许一直等待)
78
+ // UserInputRegistry 会发出事件,NotificationChannelManager 会处理通知
79
+ const userResponse = await userInputRegistry_js_1.userInputRegistry.waitForUserInput(currentSessionId, agentId, toolUseId, args.questions);
80
+ console.log(`✅ [AskUserQuestion MCP] Received user response for tool: ${toolUseId}`);
81
+ // 返回用户的回答
82
+ return {
83
+ content: [
84
+ {
85
+ type: 'text',
86
+ text: `User response:\n\n${userResponse}`,
87
+ },
88
+ ],
89
+ };
90
+ }
91
+ catch (error) {
92
+ const errorMessage = error instanceof Error ? error.message : String(error);
93
+ console.error(`❌ [AskUserQuestion MCP] Error:`, error);
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: `Failed to get user input: ${errorMessage}`,
99
+ },
100
+ ],
101
+ isError: true,
102
+ };
103
+ }
104
+ });
105
+ // Create SDK MCP server with the tool
106
+ const server = (0, claude_agent_sdk_1.createSdkMcpServer)({
107
+ name: 'ask-user-question',
108
+ version: '1.0.0',
109
+ tools: [askUserQuestionTool],
110
+ });
111
+ return {
112
+ server,
113
+ tool: askUserQuestionTool,
114
+ sessionRef, // 返回 session 引用,供外部更新
115
+ };
116
+ }
117
+ /**
118
+ * Get tool name as it appears to Claude
119
+ */
120
+ function getAskUserQuestionToolName() {
121
+ return 'mcp__ask-user-question__ask_user_question';
122
+ }
123
+ /**
124
+ * Check if a tool name is the AskUserQuestion tool
125
+ */
126
+ function isAskUserQuestionTool(toolName) {
127
+ return toolName === getAskUserQuestionToolName() || toolName === 'ask_user_question';
128
+ }
129
+ //# sourceMappingURL=askUserQuestionMcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askUserQuestionMcp.js","sourceRoot":"","sources":["../../../src/services/askUserQuestion/askUserQuestionMcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * AskUserQuestion Module
3
+ *
4
+ * 提供 MCP 实现的用户问题功能,支持多种通知渠道
5
+ */
6
+ export { createAskUserQuestionMcpServer, getAskUserQuestionToolName, isAskUserQuestionTool, type AskUserQuestionInput } from './askUserQuestionMcp.js';
7
+ export { integrateAskUserQuestionMcpServer } from './askUserQuestionIntegration.js';
8
+ export { userInputRegistry, type UserInputRequest, type PendingUserInput } from './userInputRegistry.js';
9
+ export { notificationChannelManager, type NotificationChannel, type ChannelType } from './notificationChannel.js';
10
+ export { SSENotificationChannel, generateSSEChannelId } from './sseNotificationChannel.js';
11
+ export { SlackNotificationChannel, generateSlackChannelId } from './slackNotificationChannel.js';
12
+ export { initAskUserQuestionModule, isAskUserQuestionModuleInitialized } from './init.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/askUserQuestion/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACH,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,oBAAoB,EAC5B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAGpF,OAAO,EACH,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACH,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACH,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACH,wBAAwB,EACxB,sBAAsB,EACzB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACH,yBAAyB,EACzB,kCAAkC,EACrC,MAAM,WAAW,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * AskUserQuestion Module
4
+ *
5
+ * 提供 MCP 实现的用户问题功能,支持多种通知渠道
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.isAskUserQuestionModuleInitialized = exports.initAskUserQuestionModule = exports.generateSlackChannelId = exports.SlackNotificationChannel = exports.generateSSEChannelId = exports.SSENotificationChannel = exports.notificationChannelManager = exports.userInputRegistry = exports.integrateAskUserQuestionMcpServer = exports.isAskUserQuestionTool = exports.getAskUserQuestionToolName = exports.createAskUserQuestionMcpServer = void 0;
9
+ // MCP 工具
10
+ var askUserQuestionMcp_js_1 = require("./askUserQuestionMcp.js");
11
+ Object.defineProperty(exports, "createAskUserQuestionMcpServer", { enumerable: true, get: function () { return askUserQuestionMcp_js_1.createAskUserQuestionMcpServer; } });
12
+ Object.defineProperty(exports, "getAskUserQuestionToolName", { enumerable: true, get: function () { return askUserQuestionMcp_js_1.getAskUserQuestionToolName; } });
13
+ Object.defineProperty(exports, "isAskUserQuestionTool", { enumerable: true, get: function () { return askUserQuestionMcp_js_1.isAskUserQuestionTool; } });
14
+ // 集成函数
15
+ var askUserQuestionIntegration_js_1 = require("./askUserQuestionIntegration.js");
16
+ Object.defineProperty(exports, "integrateAskUserQuestionMcpServer", { enumerable: true, get: function () { return askUserQuestionIntegration_js_1.integrateAskUserQuestionMcpServer; } });
17
+ // 用户输入注册表
18
+ var userInputRegistry_js_1 = require("./userInputRegistry.js");
19
+ Object.defineProperty(exports, "userInputRegistry", { enumerable: true, get: function () { return userInputRegistry_js_1.userInputRegistry; } });
20
+ // 通知渠道管理
21
+ var notificationChannel_js_1 = require("./notificationChannel.js");
22
+ Object.defineProperty(exports, "notificationChannelManager", { enumerable: true, get: function () { return notificationChannel_js_1.notificationChannelManager; } });
23
+ // SSE 通知渠道
24
+ var sseNotificationChannel_js_1 = require("./sseNotificationChannel.js");
25
+ Object.defineProperty(exports, "SSENotificationChannel", { enumerable: true, get: function () { return sseNotificationChannel_js_1.SSENotificationChannel; } });
26
+ Object.defineProperty(exports, "generateSSEChannelId", { enumerable: true, get: function () { return sseNotificationChannel_js_1.generateSSEChannelId; } });
27
+ // Slack 通知渠道
28
+ var slackNotificationChannel_js_1 = require("./slackNotificationChannel.js");
29
+ Object.defineProperty(exports, "SlackNotificationChannel", { enumerable: true, get: function () { return slackNotificationChannel_js_1.SlackNotificationChannel; } });
30
+ Object.defineProperty(exports, "generateSlackChannelId", { enumerable: true, get: function () { return slackNotificationChannel_js_1.generateSlackChannelId; } });
31
+ // 模块初始化
32
+ var init_js_1 = require("./init.js");
33
+ Object.defineProperty(exports, "initAskUserQuestionModule", { enumerable: true, get: function () { return init_js_1.initAskUserQuestionModule; } });
34
+ Object.defineProperty(exports, "isAskUserQuestionModuleInitialized", { enumerable: true, get: function () { return init_js_1.isAskUserQuestionModuleInitialized; } });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/askUserQuestion/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,SAAS;AACT,iEAKiC;AAJ7B,uIAAA,8BAA8B,OAAA;AAC9B,mIAAA,0BAA0B,OAAA;AAC1B,8HAAA,qBAAqB,OAAA;AAIzB,OAAO;AACP,iFAAoF;AAA3E,kJAAA,iCAAiC,OAAA;AAE1C,UAAU;AACV,+DAIgC;AAH5B,yHAAA,iBAAiB,OAAA;AAKrB,SAAS;AACT,mEAIkC;AAH9B,oIAAA,0BAA0B,OAAA;AAK9B,WAAW;AACX,yEAGqC;AAFjC,mIAAA,sBAAsB,OAAA;AACtB,iIAAA,oBAAoB,OAAA;AAGxB,aAAa;AACb,6EAGuC;AAFnC,uIAAA,wBAAwB,OAAA;AACxB,qIAAA,sBAAsB,OAAA;AAG1B,QAAQ;AACR,qCAGmB;AAFf,oHAAA,yBAAyB,OAAA;AACzB,6HAAA,kCAAkC,OAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AskUserQuestion Module Initialization
3
+ *
4
+ * 设置 UserInputRegistry 和 NotificationChannelManager 之间的事件连接
5
+ * 这是事件驱动架构的关键:MCP 工具不直接发送通知,而是通过事件系统
6
+ */
7
+ /**
8
+ * 初始化 AskUserQuestion 模块
9
+ * 建立 UserInputRegistry 和 NotificationChannelManager 之间的事件连接
10
+ * 启动定期清理任务
11
+ */
12
+ export declare function initAskUserQuestionModule(): void;
13
+ /**
14
+ * 检查模块是否已初始化
15
+ */
16
+ export declare function isAskUserQuestionModuleInitialized(): boolean;
17
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/services/askUserQuestion/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CA0BhD;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,OAAO,CAE5D"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * AskUserQuestion Module Initialization
4
+ *
5
+ * 设置 UserInputRegistry 和 NotificationChannelManager 之间的事件连接
6
+ * 这是事件驱动架构的关键:MCP 工具不直接发送通知,而是通过事件系统
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.initAskUserQuestionModule = initAskUserQuestionModule;
10
+ exports.isAskUserQuestionModuleInitialized = isAskUserQuestionModuleInitialized;
11
+ const userInputRegistry_js_1 = require("./userInputRegistry.js");
12
+ const notificationChannel_js_1 = require("./notificationChannel.js");
13
+ let initialized = false;
14
+ /**
15
+ * 初始化 AskUserQuestion 模块
16
+ * 建立 UserInputRegistry 和 NotificationChannelManager 之间的事件连接
17
+ * 启动定期清理任务
18
+ */
19
+ function initAskUserQuestionModule() {
20
+ if (initialized) {
21
+ console.log('⚠️ [AskUserQuestion] Module already initialized');
22
+ return;
23
+ }
24
+ // 监听 awaiting_input 事件,通过 NotificationChannelManager 发送通知
25
+ userInputRegistry_js_1.userInputRegistry.on('awaiting_input', async (request) => {
26
+ console.log(`📡 [AskUserQuestion] Received awaiting_input event for tool: ${request.toolUseId}`);
27
+ const sent = await notificationChannel_js_1.notificationChannelManager.sendAwaitingInput(request);
28
+ if (!sent) {
29
+ console.warn(`⚠️ [AskUserQuestion] Failed to send notification for tool: ${request.toolUseId}`);
30
+ // 注意:这里不取消 Promise,因为:
31
+ // 1. 用户可能稍后重新连接
32
+ // 2. 可能有其他渠道(如 Slack)可以通知用户
33
+ }
34
+ });
35
+ // 启动定期清理任务,清理超过 24 小时的过期请求
36
+ // 清理间隔:1 小时,最大存活时间:24 小时
37
+ userInputRegistry_js_1.userInputRegistry.startCleanupJob();
38
+ initialized = true;
39
+ console.log('✅ [AskUserQuestion] Module initialized - event connection established, cleanup job started');
40
+ }
41
+ /**
42
+ * 检查模块是否已初始化
43
+ */
44
+ function isAskUserQuestionModuleInitialized() {
45
+ return initialized;
46
+ }
47
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/services/askUserQuestion/init.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,8DA0BC;AAKD,gFAEC;AA3CD,iEAA2D;AAC3D,qEAA6F;AAE7F,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;;GAIG;AACH,SAAgB,yBAAyB;IACvC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,0DAA0D;IAC1D,wCAAiB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;QACzE,OAAO,CAAC,GAAG,CAAC,gEAAgE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAEjG,MAAM,IAAI,GAAG,MAAM,mDAA0B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEzE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,8DAA8D,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAChG,uBAAuB;YACvB,gBAAgB;YAChB,4BAA4B;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,yBAAyB;IACzB,wCAAiB,CAAC,eAAe,EAAE,CAAC;IAEpC,WAAW,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC;AAC5G,CAAC;AAED;;GAEG;AACH,SAAgB,kCAAkC;IAChD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Notification Channel Abstraction
3
+ *
4
+ * 定义用户通知渠道的接口,支持多种通知方式:
5
+ * - SSE (Web 浏览器)
6
+ * - Slack
7
+ * - 企业微信
8
+ * - 邮件
9
+ * - etc.
10
+ */
11
+ import { EventEmitter } from 'events';
12
+ /**
13
+ * 用户输入请求
14
+ */
15
+ export interface UserInputRequest {
16
+ toolUseId: string;
17
+ sessionId: string;
18
+ agentId: string;
19
+ questions: Array<{
20
+ question: string;
21
+ header: string;
22
+ options: Array<{
23
+ label: string;
24
+ description: string;
25
+ }>;
26
+ multiSelect: boolean;
27
+ }>;
28
+ createdAt: number;
29
+ }
30
+ /**
31
+ * 通知渠道类型
32
+ */
33
+ export type ChannelType = 'sse' | 'slack' | 'wechat' | 'email';
34
+ /**
35
+ * 通知渠道接口
36
+ */
37
+ export interface NotificationChannel {
38
+ /** 渠道类型 */
39
+ type: ChannelType;
40
+ /** 渠道标识符(如 SSE connectionId、Slack channel ID 等) */
41
+ channelId: string;
42
+ /** 关联的 session ID */
43
+ sessionId: string;
44
+ /** 关联的 agent ID */
45
+ agentId: string;
46
+ /** 创建时间 */
47
+ createdAt: number;
48
+ /** 检查渠道是否仍然活跃 */
49
+ isActive(): boolean;
50
+ /** 发送等待用户输入的通知 */
51
+ sendAwaitingInput(request: UserInputRequest): Promise<boolean>;
52
+ /** 关闭渠道 */
53
+ close(): void;
54
+ }
55
+ /**
56
+ * 通知渠道管理器
57
+ *
58
+ * 管理所有活跃的通知渠道,根据 sessionId 路由通知
59
+ */
60
+ declare class NotificationChannelManager extends EventEmitter {
61
+ private channels;
62
+ /**
63
+ * 注册一个通知渠道
64
+ */
65
+ registerChannel(channel: NotificationChannel): void;
66
+ /**
67
+ * 注销一个通知渠道
68
+ */
69
+ unregisterChannel(channelId: string): void;
70
+ /**
71
+ * 更新渠道的 sessionId(当 Claude SDK 返回真实 sessionId 时)
72
+ */
73
+ updateChannelSession(channelId: string, newSessionId: string): void;
74
+ /**
75
+ * 发送等待用户输入的通知
76
+ * 会尝试通过所有活跃渠道发送
77
+ */
78
+ sendAwaitingInput(request: UserInputRequest): Promise<boolean>;
79
+ /**
80
+ * 获取 session 的所有活跃渠道
81
+ */
82
+ getChannelsForSession(sessionId: string): NotificationChannel[];
83
+ /**
84
+ * 检查 session 是否有活跃渠道
85
+ */
86
+ hasActiveChannel(sessionId: string): boolean;
87
+ /**
88
+ * 获取统计信息
89
+ */
90
+ getStats(): {
91
+ totalSessions: number;
92
+ totalChannels: number;
93
+ };
94
+ }
95
+ export declare const notificationChannelManager: NotificationChannelManager;
96
+ export {};
97
+ //# sourceMappingURL=notificationChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notificationChannel.d.ts","sourceRoot":"","sources":["../../../src/services/askUserQuestion/notificationChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW;IACX,IAAI,EAAE,WAAW,CAAC;IAElB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAElB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,QAAQ,IAAI,OAAO,CAAC;IAEpB,kBAAkB;IAClB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,WAAW;IACX,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,cAAM,0BAA2B,SAAQ,YAAY;IAGnD,OAAO,CAAC,QAAQ,CAAiD;IAEjE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAiBnD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAgB1C;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IA0BnE;;;OAGG;IACG,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqCpE;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAI/D;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK5C;;OAEG;IACH,QAAQ,IAAI;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAU7D;AAGD,eAAO,MAAM,0BAA0B,4BAAmC,CAAC"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Notification Channel Abstraction
4
+ *
5
+ * 定义用户通知渠道的接口,支持多种通知方式:
6
+ * - SSE (Web 浏览器)
7
+ * - Slack
8
+ * - 企业微信
9
+ * - 邮件
10
+ * - etc.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.notificationChannelManager = void 0;
14
+ const events_1 = require("events");
15
+ /**
16
+ * 通知渠道管理器
17
+ *
18
+ * 管理所有活跃的通知渠道,根据 sessionId 路由通知
19
+ */
20
+ class NotificationChannelManager extends events_1.EventEmitter {
21
+ // sessionId -> NotificationChannel[]
22
+ // 一个 session 可以有多个活跃渠道(如浏览器 + Slack 同时在线)
23
+ channels = new Map();
24
+ /**
25
+ * 注册一个通知渠道
26
+ */
27
+ registerChannel(channel) {
28
+ const { sessionId } = channel;
29
+ if (!this.channels.has(sessionId)) {
30
+ this.channels.set(sessionId, []);
31
+ }
32
+ const sessionChannels = this.channels.get(sessionId);
33
+ // 避免重复注册
34
+ const existing = sessionChannels.find(c => c.channelId === channel.channelId);
35
+ if (!existing) {
36
+ sessionChannels.push(channel);
37
+ console.log(`📡 [NotificationManager] Registered ${channel.type} channel for session: ${sessionId}`);
38
+ }
39
+ }
40
+ /**
41
+ * 注销一个通知渠道
42
+ */
43
+ unregisterChannel(channelId) {
44
+ for (const [sessionId, channels] of this.channels.entries()) {
45
+ const index = channels.findIndex(c => c.channelId === channelId);
46
+ if (index !== -1) {
47
+ channels.splice(index, 1);
48
+ console.log(`📡 [NotificationManager] Unregistered channel: ${channelId} from session: ${sessionId}`);
49
+ // 如果 session 没有活跃渠道了,清理
50
+ if (channels.length === 0) {
51
+ this.channels.delete(sessionId);
52
+ }
53
+ return;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * 更新渠道的 sessionId(当 Claude SDK 返回真实 sessionId 时)
59
+ */
60
+ updateChannelSession(channelId, newSessionId) {
61
+ for (const [sessionId, channels] of this.channels.entries()) {
62
+ const channel = channels.find(c => c.channelId === channelId);
63
+ if (channel) {
64
+ // 从旧 session 移除
65
+ const index = channels.indexOf(channel);
66
+ channels.splice(index, 1);
67
+ if (channels.length === 0) {
68
+ this.channels.delete(sessionId);
69
+ }
70
+ // 更新 channel 的 sessionId
71
+ channel.sessionId = newSessionId;
72
+ // 添加到新 session
73
+ if (!this.channels.has(newSessionId)) {
74
+ this.channels.set(newSessionId, []);
75
+ }
76
+ this.channels.get(newSessionId).push(channel);
77
+ console.log(`📡 [NotificationManager] Moved channel ${channelId} from session ${sessionId} to ${newSessionId}`);
78
+ return;
79
+ }
80
+ }
81
+ }
82
+ /**
83
+ * 发送等待用户输入的通知
84
+ * 会尝试通过所有活跃渠道发送
85
+ */
86
+ async sendAwaitingInput(request) {
87
+ const { sessionId } = request;
88
+ const channels = this.channels.get(sessionId);
89
+ if (!channels || channels.length === 0) {
90
+ console.warn(`⚠️ [NotificationManager] No active channels for session: ${sessionId}`);
91
+ return false;
92
+ }
93
+ // 清理不活跃的渠道
94
+ const activeChannels = channels.filter(c => c.isActive());
95
+ if (activeChannels.length !== channels.length) {
96
+ this.channels.set(sessionId, activeChannels);
97
+ }
98
+ if (activeChannels.length === 0) {
99
+ console.warn(`⚠️ [NotificationManager] All channels inactive for session: ${sessionId}`);
100
+ return false;
101
+ }
102
+ // 尝试通过所有活跃渠道发送
103
+ let anySuccess = false;
104
+ for (const channel of activeChannels) {
105
+ try {
106
+ const success = await channel.sendAwaitingInput(request);
107
+ if (success) {
108
+ anySuccess = true;
109
+ console.log(`✅ [NotificationManager] Sent notification via ${channel.type} for session: ${sessionId}`);
110
+ }
111
+ }
112
+ catch (error) {
113
+ console.error(`❌ [NotificationManager] Failed to send via ${channel.type}:`, error);
114
+ }
115
+ }
116
+ return anySuccess;
117
+ }
118
+ /**
119
+ * 获取 session 的所有活跃渠道
120
+ */
121
+ getChannelsForSession(sessionId) {
122
+ return this.channels.get(sessionId) || [];
123
+ }
124
+ /**
125
+ * 检查 session 是否有活跃渠道
126
+ */
127
+ hasActiveChannel(sessionId) {
128
+ const channels = this.channels.get(sessionId);
129
+ return !!channels && channels.some(c => c.isActive());
130
+ }
131
+ /**
132
+ * 获取统计信息
133
+ */
134
+ getStats() {
135
+ let totalChannels = 0;
136
+ for (const channels of this.channels.values()) {
137
+ totalChannels += channels.length;
138
+ }
139
+ return {
140
+ totalSessions: this.channels.size,
141
+ totalChannels
142
+ };
143
+ }
144
+ }
145
+ // 单例实例
146
+ exports.notificationChannelManager = new NotificationChannelManager();
147
+ //# sourceMappingURL=notificationChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notificationChannel.js","sourceRoot":"","sources":["../../../src/services/askUserQuestion/notificationChannel.ts"],"names":[],"mappings":"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"}