@1mcp/agent 0.28.1 → 0.29.0-beta2

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 (399) hide show
  1. package/build/auth/sessionTypes.d.ts +19 -0
  2. package/build/auth/sessionTypes.d.ts.map +1 -1
  3. package/build/commands/app/backups.d.ts.map +1 -1
  4. package/build/commands/app/backups.js +52 -42
  5. package/build/commands/app/backups.js.map +1 -1
  6. package/build/commands/app/consolidate.d.ts.map +1 -1
  7. package/build/commands/app/consolidate.js +66 -55
  8. package/build/commands/app/consolidate.js.map +1 -1
  9. package/build/commands/app/discover.d.ts.map +1 -1
  10. package/build/commands/app/discover.js +32 -25
  11. package/build/commands/app/discover.js.map +1 -1
  12. package/build/commands/app/index.d.ts.map +1 -1
  13. package/build/commands/app/index.js +2 -1
  14. package/build/commands/app/index.js.map +1 -1
  15. package/build/commands/app/list.d.ts.map +1 -1
  16. package/build/commands/app/list.js +35 -28
  17. package/build/commands/app/list.js.map +1 -1
  18. package/build/commands/app/restore.d.ts.map +1 -1
  19. package/build/commands/app/restore.js +74 -63
  20. package/build/commands/app/restore.js.map +1 -1
  21. package/build/commands/app/status.d.ts.map +1 -1
  22. package/build/commands/app/status.js +51 -43
  23. package/build/commands/app/status.js.map +1 -1
  24. package/build/commands/mcp/add.d.ts.map +1 -1
  25. package/build/commands/mcp/add.js +29 -23
  26. package/build/commands/mcp/add.js.map +1 -1
  27. package/build/commands/mcp/enable.d.ts.map +1 -1
  28. package/build/commands/mcp/enable.js +16 -15
  29. package/build/commands/mcp/enable.js.map +1 -1
  30. package/build/commands/mcp/index.d.ts.map +1 -1
  31. package/build/commands/mcp/index.js +2 -1
  32. package/build/commands/mcp/index.js.map +1 -1
  33. package/build/commands/mcp/install.d.ts.map +1 -1
  34. package/build/commands/mcp/install.js +44 -46
  35. package/build/commands/mcp/install.js.map +1 -1
  36. package/build/commands/mcp/list.d.ts.map +1 -1
  37. package/build/commands/mcp/list.js +51 -37
  38. package/build/commands/mcp/list.js.map +1 -1
  39. package/build/commands/mcp/remove.d.ts.map +1 -1
  40. package/build/commands/mcp/remove.js +23 -16
  41. package/build/commands/mcp/remove.js.map +1 -1
  42. package/build/commands/mcp/status.d.ts.map +1 -1
  43. package/build/commands/mcp/status.js +81 -73
  44. package/build/commands/mcp/status.js.map +1 -1
  45. package/build/commands/mcp/tokens.d.ts.map +1 -1
  46. package/build/commands/mcp/tokens.js +46 -47
  47. package/build/commands/mcp/tokens.js.map +1 -1
  48. package/build/commands/mcp/uninstall.d.ts.map +1 -1
  49. package/build/commands/mcp/uninstall.js +8 -6
  50. package/build/commands/mcp/uninstall.js.map +1 -1
  51. package/build/commands/mcp/update.d.ts.map +1 -1
  52. package/build/commands/mcp/update.js +11 -8
  53. package/build/commands/mcp/update.js.map +1 -1
  54. package/build/commands/mcp/utils/installWizard.d.ts.map +1 -1
  55. package/build/commands/mcp/utils/installWizard.js +3 -2
  56. package/build/commands/mcp/utils/installWizard.js.map +1 -1
  57. package/build/commands/mcp/utils/serverUtils.d.ts +8 -4
  58. package/build/commands/mcp/utils/serverUtils.d.ts.map +1 -1
  59. package/build/commands/mcp/utils/serverUtils.js +0 -3
  60. package/build/commands/mcp/utils/serverUtils.js.map +1 -1
  61. package/build/commands/mcp/wizard/components/serverDetailsDisplay.d.ts.map +1 -1
  62. package/build/commands/mcp/wizard/components/serverDetailsDisplay.js +4 -3
  63. package/build/commands/mcp/wizard/components/serverDetailsDisplay.js.map +1 -1
  64. package/build/commands/mcp/wizard/components/stepIndicator.d.ts.map +1 -1
  65. package/build/commands/mcp/wizard/components/stepIndicator.js +3 -2
  66. package/build/commands/mcp/wizard/components/stepIndicator.js.map +1 -1
  67. package/build/commands/mcp/wizard/components/welcomeScreen.d.ts.map +1 -1
  68. package/build/commands/mcp/wizard/components/welcomeScreen.js +2 -1
  69. package/build/commands/mcp/wizard/components/welcomeScreen.js.map +1 -1
  70. package/build/commands/mcp/wizard/configuration.d.ts.map +1 -1
  71. package/build/commands/mcp/wizard/configuration.js +10 -9
  72. package/build/commands/mcp/wizard/configuration.js.map +1 -1
  73. package/build/commands/mcp/wizard/display.d.ts.map +1 -1
  74. package/build/commands/mcp/wizard/display.js +9 -8
  75. package/build/commands/mcp/wizard/display.js.map +1 -1
  76. package/build/commands/mcp/wizard/search.d.ts.map +1 -1
  77. package/build/commands/mcp/wizard/search.js +4 -3
  78. package/build/commands/mcp/wizard/search.js.map +1 -1
  79. package/build/commands/preset/create.d.ts.map +1 -1
  80. package/build/commands/preset/create.js +7 -6
  81. package/build/commands/preset/create.js.map +1 -1
  82. package/build/commands/preset/delete.d.ts.map +1 -1
  83. package/build/commands/preset/delete.js +4 -2
  84. package/build/commands/preset/delete.js.map +1 -1
  85. package/build/commands/preset/edit.d.ts.map +1 -1
  86. package/build/commands/preset/edit.js +8 -5
  87. package/build/commands/preset/edit.js.map +1 -1
  88. package/build/commands/preset/interactive.d.ts.map +1 -1
  89. package/build/commands/preset/interactive.js +24 -15
  90. package/build/commands/preset/interactive.js.map +1 -1
  91. package/build/commands/preset/list.d.ts.map +1 -1
  92. package/build/commands/preset/list.js +12 -10
  93. package/build/commands/preset/list.js.map +1 -1
  94. package/build/commands/preset/show.d.ts.map +1 -1
  95. package/build/commands/preset/show.js +3 -2
  96. package/build/commands/preset/show.js.map +1 -1
  97. package/build/commands/preset/test.d.ts.map +1 -1
  98. package/build/commands/preset/test.js +2 -1
  99. package/build/commands/preset/test.js.map +1 -1
  100. package/build/commands/preset/url.d.ts.map +1 -1
  101. package/build/commands/preset/url.js +2 -1
  102. package/build/commands/preset/url.js.map +1 -1
  103. package/build/commands/proxy/index.d.ts.map +1 -1
  104. package/build/commands/proxy/index.js +5 -0
  105. package/build/commands/proxy/index.js.map +1 -1
  106. package/build/commands/proxy/proxy.d.ts.map +1 -1
  107. package/build/commands/proxy/proxy.js +1 -0
  108. package/build/commands/proxy/proxy.js.map +1 -1
  109. package/build/commands/registry/index.d.ts.map +1 -1
  110. package/build/commands/registry/index.js +2 -1
  111. package/build/commands/registry/index.js.map +1 -1
  112. package/build/commands/registry/search.d.ts.map +1 -1
  113. package/build/commands/registry/search.js +42 -37
  114. package/build/commands/registry/search.js.map +1 -1
  115. package/build/commands/registry/show.d.ts.map +1 -1
  116. package/build/commands/registry/show.js +8 -7
  117. package/build/commands/registry/show.js.map +1 -1
  118. package/build/commands/registry/status.d.ts.map +1 -1
  119. package/build/commands/registry/status.js +26 -16
  120. package/build/commands/registry/status.js.map +1 -1
  121. package/build/commands/registry/versions.d.ts.map +1 -1
  122. package/build/commands/registry/versions.js +8 -7
  123. package/build/commands/registry/versions.js.map +1 -1
  124. package/build/config/configChangeDetector.d.ts +8 -0
  125. package/build/config/configChangeDetector.d.ts.map +1 -0
  126. package/build/config/configChangeDetector.js +49 -0
  127. package/build/config/configChangeDetector.js.map +1 -0
  128. package/build/config/configLoader.d.ts +16 -0
  129. package/build/config/configLoader.d.ts.map +1 -0
  130. package/build/config/configLoader.js +155 -0
  131. package/build/config/configLoader.js.map +1 -0
  132. package/build/config/configManager.d.ts +49 -86
  133. package/build/config/configManager.d.ts.map +1 -1
  134. package/build/config/configManager.js +188 -301
  135. package/build/config/configManager.js.map +1 -1
  136. package/build/config/configWatcher.d.ts +18 -0
  137. package/build/config/configWatcher.d.ts.map +1 -0
  138. package/build/config/configWatcher.js +78 -0
  139. package/build/config/configWatcher.js.map +1 -0
  140. package/build/config/projectConfigTypes.d.ts +40 -0
  141. package/build/config/projectConfigTypes.d.ts.map +1 -1
  142. package/build/config/projectConfigTypes.js +21 -0
  143. package/build/config/projectConfigTypes.js.map +1 -1
  144. package/build/config/templateProcessor.d.ts +14 -0
  145. package/build/config/templateProcessor.d.ts.map +1 -0
  146. package/build/config/templateProcessor.js +102 -0
  147. package/build/config/templateProcessor.js.map +1 -0
  148. package/build/config/types.d.ts +36 -0
  149. package/build/config/types.d.ts.map +1 -0
  150. package/build/config/types.js +14 -0
  151. package/build/config/types.js.map +1 -0
  152. package/build/constants/mcp.d.ts +1 -1
  153. package/build/constants/mcp.d.ts.map +1 -1
  154. package/build/constants/mcp.js +1 -1
  155. package/build/constants/mcp.js.map +1 -1
  156. package/build/core/client/clientFactory.d.ts +7 -0
  157. package/build/core/client/clientFactory.d.ts.map +1 -0
  158. package/build/core/client/clientFactory.js +36 -0
  159. package/build/core/client/clientFactory.js.map +1 -0
  160. package/build/core/client/clientManager.d.ts +13 -101
  161. package/build/core/client/clientManager.d.ts.map +1 -1
  162. package/build/core/client/clientManager.js +115 -418
  163. package/build/core/client/clientManager.js.map +1 -1
  164. package/build/core/client/connectionHandler.d.ts +8 -0
  165. package/build/core/client/connectionHandler.d.ts.map +1 -0
  166. package/build/core/client/connectionHandler.js +80 -0
  167. package/build/core/client/connectionHandler.js.map +1 -0
  168. package/build/core/client/oauthFlowHandler.d.ts +10 -0
  169. package/build/core/client/oauthFlowHandler.d.ts.map +1 -0
  170. package/build/core/client/oauthFlowHandler.js +81 -0
  171. package/build/core/client/oauthFlowHandler.js.map +1 -0
  172. package/build/core/client/transportRecreator.d.ts +5 -0
  173. package/build/core/client/transportRecreator.d.ts.map +1 -0
  174. package/build/core/client/transportRecreator.js +23 -0
  175. package/build/core/client/transportRecreator.js.map +1 -0
  176. package/build/core/client/types.d.ts +7 -0
  177. package/build/core/client/types.d.ts.map +1 -0
  178. package/build/core/client/types.js +11 -0
  179. package/build/core/client/types.js.map +1 -0
  180. package/build/core/configChangeHandler.d.ts.map +1 -1
  181. package/build/core/configChangeHandler.js +11 -5
  182. package/build/core/configChangeHandler.js.map +1 -1
  183. package/build/core/context/globalContextManager.d.ts +58 -0
  184. package/build/core/context/globalContextManager.d.ts.map +1 -0
  185. package/build/core/context/globalContextManager.js +190 -0
  186. package/build/core/context/globalContextManager.js.map +1 -0
  187. package/build/core/filtering/clientFiltering.d.ts +1 -2
  188. package/build/core/filtering/clientFiltering.d.ts.map +1 -1
  189. package/build/core/filtering/clientTemplateTracker.d.ts +116 -0
  190. package/build/core/filtering/clientTemplateTracker.d.ts.map +1 -0
  191. package/build/core/filtering/clientTemplateTracker.js +286 -0
  192. package/build/core/filtering/clientTemplateTracker.js.map +1 -0
  193. package/build/core/filtering/filterCache.d.ts +121 -0
  194. package/build/core/filtering/filterCache.d.ts.map +1 -0
  195. package/build/core/filtering/filterCache.js +359 -0
  196. package/build/core/filtering/filterCache.js.map +1 -0
  197. package/build/core/filtering/index.d.ts +16 -0
  198. package/build/core/filtering/index.d.ts.map +1 -0
  199. package/build/core/filtering/index.js +16 -0
  200. package/build/core/filtering/index.js.map +1 -0
  201. package/build/core/filtering/templateFilteringService.d.ts +72 -0
  202. package/build/core/filtering/templateFilteringService.d.ts.map +1 -0
  203. package/build/core/filtering/templateFilteringService.js +293 -0
  204. package/build/core/filtering/templateFilteringService.js.map +1 -0
  205. package/build/core/filtering/templateIndex.d.ts +132 -0
  206. package/build/core/filtering/templateIndex.d.ts.map +1 -0
  207. package/build/core/filtering/templateIndex.js +368 -0
  208. package/build/core/filtering/templateIndex.js.map +1 -0
  209. package/build/core/flags/flagManager.d.ts +8 -4
  210. package/build/core/flags/flagManager.d.ts.map +1 -1
  211. package/build/core/flags/flagManager.js.map +1 -1
  212. package/build/core/protocol/requestHandlers.d.ts.map +1 -1
  213. package/build/core/protocol/requestHandlers.js +208 -46
  214. package/build/core/protocol/requestHandlers.js.map +1 -1
  215. package/build/core/server/clientInstancePool.d.ts +146 -0
  216. package/build/core/server/clientInstancePool.d.ts.map +1 -0
  217. package/build/core/server/clientInstancePool.js +407 -0
  218. package/build/core/server/clientInstancePool.js.map +1 -0
  219. package/build/core/server/connectionManager.d.ts +70 -0
  220. package/build/core/server/connectionManager.d.ts.map +1 -0
  221. package/build/core/server/connectionManager.js +240 -0
  222. package/build/core/server/connectionManager.js.map +1 -0
  223. package/build/core/server/mcpServerLifecycleManager.d.ts +55 -0
  224. package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -0
  225. package/build/core/server/mcpServerLifecycleManager.js +272 -0
  226. package/build/core/server/mcpServerLifecycleManager.js.map +1 -0
  227. package/build/core/server/serverManager.d.ts +56 -56
  228. package/build/core/server/serverManager.d.ts.map +1 -1
  229. package/build/core/server/serverManager.js +160 -431
  230. package/build/core/server/serverManager.js.map +1 -1
  231. package/build/core/server/templateConfigurationManager.d.ts +51 -0
  232. package/build/core/server/templateConfigurationManager.d.ts.map +1 -0
  233. package/build/core/server/templateConfigurationManager.js +160 -0
  234. package/build/core/server/templateConfigurationManager.js.map +1 -0
  235. package/build/core/server/templateServerManager.d.ts +92 -0
  236. package/build/core/server/templateServerManager.d.ts.map +1 -0
  237. package/build/core/server/templateServerManager.js +367 -0
  238. package/build/core/server/templateServerManager.js.map +1 -0
  239. package/build/core/tools/handlers/serverManagementHandler.d.ts +51 -1
  240. package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
  241. package/build/core/tools/handlers/serverManagementHandler.js +42 -0
  242. package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
  243. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +11 -1
  244. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -1
  245. package/build/core/tools/internal/adapters/installation/types.d.ts +2 -4
  246. package/build/core/tools/internal/adapters/installation/types.d.ts.map +1 -1
  247. package/build/core/tools/internal/adapters/installationAdapter.d.ts +2 -4
  248. package/build/core/tools/internal/adapters/installationAdapter.d.ts.map +1 -1
  249. package/build/core/tools/internal/adapters/installationAdapter.js.map +1 -1
  250. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +2 -5
  251. package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -1
  252. package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -1
  253. package/build/core/tools/internal/adapters/management/types.d.ts +8 -4
  254. package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -1
  255. package/build/core/tools/internal/index.d.ts +0 -31
  256. package/build/core/tools/internal/index.d.ts.map +1 -1
  257. package/build/core/tools/internal/index.js +4 -3
  258. package/build/core/tools/internal/index.js.map +1 -1
  259. package/build/core/tools/internal/schemas/index.d.ts +3 -3
  260. package/build/core/tools/internal/schemas/management.d.ts +3 -3
  261. package/build/core/types/server.d.ts +19 -0
  262. package/build/core/types/server.d.ts.map +1 -1
  263. package/build/core/types/server.js.map +1 -1
  264. package/build/core/types/transport.d.ts +178 -0
  265. package/build/core/types/transport.d.ts.map +1 -1
  266. package/build/core/types/transport.js +34 -0
  267. package/build/core/types/transport.js.map +1 -1
  268. package/build/core/validation/CustomJsonSchemaValidator.d.ts.map +1 -1
  269. package/build/core/validation/CustomJsonSchemaValidator.js +4 -3
  270. package/build/core/validation/CustomJsonSchemaValidator.js.map +1 -1
  271. package/build/domains/discovery/appPresets.d.ts.map +1 -1
  272. package/build/domains/discovery/appPresets.js +9 -7
  273. package/build/domains/discovery/appPresets.js.map +1 -1
  274. package/build/domains/installation/configurators/cliArgsConfigurator.d.ts.map +1 -1
  275. package/build/domains/installation/configurators/cliArgsConfigurator.js +8 -4
  276. package/build/domains/installation/configurators/cliArgsConfigurator.js.map +1 -1
  277. package/build/domains/installation/configurators/envVarConfigurator.d.ts.map +1 -1
  278. package/build/domains/installation/configurators/envVarConfigurator.js +8 -4
  279. package/build/domains/installation/configurators/envVarConfigurator.js.map +1 -1
  280. package/build/domains/installation/configurators/tagsConfigurator.d.ts +2 -4
  281. package/build/domains/installation/configurators/tagsConfigurator.d.ts.map +1 -1
  282. package/build/domains/installation/configurators/tagsConfigurator.js +4 -7
  283. package/build/domains/installation/configurators/tagsConfigurator.js.map +1 -1
  284. package/build/domains/installation/validators/conflictDetector.d.ts +6 -4
  285. package/build/domains/installation/validators/conflictDetector.d.ts.map +1 -1
  286. package/build/domains/installation/validators/conflictDetector.js +0 -3
  287. package/build/domains/installation/validators/conflictDetector.js.map +1 -1
  288. package/build/domains/preset/manager/presetManager.js +1 -1
  289. package/build/domains/preset/manager/presetManager.js.map +1 -1
  290. package/build/domains/preset/parsers/tagQueryEvaluator.d.ts +8 -4
  291. package/build/domains/preset/parsers/tagQueryEvaluator.d.ts.map +1 -1
  292. package/build/domains/preset/parsers/tagQueryEvaluator.js.map +1 -1
  293. package/build/domains/preset/services/presetErrorHandler.d.ts +0 -7
  294. package/build/domains/preset/services/presetErrorHandler.d.ts.map +1 -1
  295. package/build/domains/preset/services/presetErrorHandler.js +10 -37
  296. package/build/domains/preset/services/presetErrorHandler.js.map +1 -1
  297. package/build/domains/registry/cacheManager.d.ts +11 -1
  298. package/build/domains/registry/cacheManager.d.ts.map +1 -1
  299. package/build/domains/registry/cacheManager.js +21 -3
  300. package/build/domains/registry/cacheManager.js.map +1 -1
  301. package/build/domains/registry/formatters/serverDetailFormatter.d.ts.map +1 -1
  302. package/build/domains/registry/formatters/serverDetailFormatter.js +57 -8
  303. package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -1
  304. package/build/domains/registry/formatters/versionsFormatter.d.ts.map +1 -1
  305. package/build/domains/registry/formatters/versionsFormatter.js +8 -3
  306. package/build/domains/registry/formatters/versionsFormatter.js.map +1 -1
  307. package/build/logger/logger.d.ts +8 -4
  308. package/build/logger/logger.d.ts.map +1 -1
  309. package/build/logger/logger.js.map +1 -1
  310. package/build/server.d.ts +2 -1
  311. package/build/server.d.ts.map +1 -1
  312. package/build/server.js +16 -7
  313. package/build/server.js.map +1 -1
  314. package/build/template/handlebarsTemplateRenderer.d.ts +34 -0
  315. package/build/template/handlebarsTemplateRenderer.d.ts.map +1 -0
  316. package/build/template/handlebarsTemplateRenderer.js +92 -0
  317. package/build/template/handlebarsTemplateRenderer.js.map +1 -0
  318. package/build/template/index.d.ts +2 -0
  319. package/build/template/index.d.ts.map +1 -0
  320. package/build/template/index.js +3 -0
  321. package/build/template/index.js.map +1 -0
  322. package/build/transport/http/middlewares/securityMiddleware.js +1 -1
  323. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
  324. package/build/transport/http/restorableStreamableTransport.d.ts +8 -4
  325. package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -1
  326. package/build/transport/http/restorableStreamableTransport.js.map +1 -1
  327. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  328. package/build/transport/http/routes/sseRoutes.js +15 -0
  329. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  330. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  331. package/build/transport/http/routes/streamableHttpRoutes.js +88 -12
  332. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  333. package/build/transport/http/server.d.ts +1 -0
  334. package/build/transport/http/server.d.ts.map +1 -1
  335. package/build/transport/http/server.js +1 -0
  336. package/build/transport/http/server.js.map +1 -1
  337. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
  338. package/build/transport/http/storage/streamableSessionRepository.js +2 -0
  339. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
  340. package/build/transport/http/utils/contextExtractor.d.ts +23 -0
  341. package/build/transport/http/utils/contextExtractor.d.ts.map +1 -0
  342. package/build/transport/http/utils/contextExtractor.js +58 -0
  343. package/build/transport/http/utils/contextExtractor.js.map +1 -0
  344. package/build/transport/restartableStdioTransport.d.ts +8 -4
  345. package/build/transport/restartableStdioTransport.d.ts.map +1 -1
  346. package/build/transport/restartableStdioTransport.js.map +1 -1
  347. package/build/transport/stdioProxyTransport.d.ts +29 -0
  348. package/build/transport/stdioProxyTransport.d.ts.map +1 -1
  349. package/build/transport/stdioProxyTransport.js +236 -53
  350. package/build/transport/stdioProxyTransport.js.map +1 -1
  351. package/build/transport/transportFactory.d.ts +8 -0
  352. package/build/transport/transportFactory.d.ts.map +1 -1
  353. package/build/transport/transportFactory.js +47 -0
  354. package/build/transport/transportFactory.js.map +1 -1
  355. package/build/types/context.d.ts +120 -0
  356. package/build/types/context.d.ts.map +1 -0
  357. package/build/types/context.js +4 -0
  358. package/build/types/context.js.map +1 -0
  359. package/build/types/validation.d.ts +30 -0
  360. package/build/types/validation.d.ts.map +1 -0
  361. package/build/types/validation.js +5 -0
  362. package/build/types/validation.js.map +1 -0
  363. package/build/utils/client/clientInfoExtractor.d.ts +26 -0
  364. package/build/utils/client/clientInfoExtractor.d.ts.map +1 -0
  365. package/build/utils/client/clientInfoExtractor.js +65 -0
  366. package/build/utils/client/clientInfoExtractor.js.map +1 -0
  367. package/build/utils/core/errorHandling.d.ts +9 -5
  368. package/build/utils/core/errorHandling.d.ts.map +1 -1
  369. package/build/utils/core/errorHandling.js.map +1 -1
  370. package/build/utils/core/parsing.d.ts +8 -4
  371. package/build/utils/core/parsing.d.ts.map +1 -1
  372. package/build/utils/core/parsing.js.map +1 -1
  373. package/build/utils/crypto.d.ts +10 -0
  374. package/build/utils/crypto.d.ts.map +1 -0
  375. package/build/utils/crypto.js +20 -0
  376. package/build/utils/crypto.js.map +1 -0
  377. package/build/utils/ui/interactiveSelector.d.ts +16 -6
  378. package/build/utils/ui/interactiveSelector.d.ts.map +1 -1
  379. package/build/utils/ui/interactiveSelector.js +7 -31
  380. package/build/utils/ui/interactiveSelector.js.map +1 -1
  381. package/build/utils/ui/pagination.d.ts +6 -2
  382. package/build/utils/ui/pagination.d.ts.map +1 -1
  383. package/build/utils/ui/pagination.js.map +1 -1
  384. package/build/utils/ui/printer.d.ts +76 -0
  385. package/build/utils/ui/printer.d.ts.map +1 -0
  386. package/build/utils/ui/printer.js +172 -0
  387. package/build/utils/ui/printer.js.map +1 -0
  388. package/build/utils/ui/spinner.d.ts +19 -0
  389. package/build/utils/ui/spinner.d.ts.map +1 -0
  390. package/build/utils/ui/spinner.js +51 -0
  391. package/build/utils/ui/spinner.js.map +1 -0
  392. package/build/utils/ui/table.d.ts +16 -0
  393. package/build/utils/ui/table.d.ts.map +1 -0
  394. package/build/utils/ui/table.js +70 -0
  395. package/build/utils/ui/table.js.map +1 -0
  396. package/build/utils/validation/validationHelpers.d.ts +7 -3
  397. package/build/utils/validation/validationHelpers.d.ts.map +1 -1
  398. package/build/utils/validation/validationHelpers.js.map +1 -1
  399. package/package.json +2 -1
@@ -1,22 +1,29 @@
1
- import { UnauthorizedError } from '@modelcontextprotocol/sdk/client/auth.js';
2
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
3
- import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
4
- import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
5
- import { CONNECTION_RETRY, MCP_CLIENT_CAPABILITIES, MCP_SERVER_NAME, MCP_SERVER_VERSION } from '../../constants.js';
6
- import { AgentConfigManager } from '../../core/server/agentConfig.js';
7
1
  import { ClientStatus, } from '../../core/types/index.js';
8
- import { CustomJsonSchemaValidator } from '../../core/validation/CustomJsonSchemaValidator.js';
9
2
  import logger, { debugIf } from '../../logger/logger.js';
10
3
  import { CapabilityError, ClientConnectionError, ClientNotFoundError } from '../../utils/core/errorTypes.js';
11
4
  import { executeOperation } from '../../utils/core/operationExecution.js';
12
- import { getConnectionTimeout } from '../../utils/core/timeoutUtils.js';
5
+ import { ClientFactory } from './clientFactory.js';
6
+ import { ConnectionHandler } from './connectionHandler.js';
7
+ import { OAuthFlowHandler } from './oauthFlowHandler.js';
8
+ import { TransportRecreator } from './transportRecreator.js';
9
+ import { OAuthRequiredError } from './types.js';
10
+ export { OAuthRequiredError };
13
11
  export class ClientManager {
14
12
  static instance;
15
13
  outboundConns = new Map();
16
14
  transports = {};
17
15
  connectionSemaphore = new Map();
18
16
  instructionAggregator;
19
- constructor() { }
17
+ clientFactory;
18
+ connectionHandler;
19
+ oauthFlowHandler;
20
+ transportRecreator;
21
+ constructor() {
22
+ this.clientFactory = new ClientFactory();
23
+ this.connectionHandler = new ConnectionHandler();
24
+ this.oauthFlowHandler = new OAuthFlowHandler();
25
+ this.transportRecreator = new TransportRecreator();
26
+ }
20
27
  static getOrCreateInstance() {
21
28
  if (!ClientManager.instance) {
22
29
  ClientManager.instance = new ClientManager();
@@ -26,31 +33,19 @@ export class ClientManager {
26
33
  static get current() {
27
34
  return ClientManager.instance;
28
35
  }
29
- // Test utility method to reset singleton state
30
36
  static resetInstance() {
31
37
  ClientManager.instance = undefined;
32
38
  }
33
- /**
34
- * Set the instruction aggregator instance
35
- * @param aggregator The instruction aggregator to use
36
- */
37
39
  setInstructionAggregator(aggregator) {
38
40
  this.instructionAggregator = aggregator;
39
41
  }
40
- /**
41
- * Extract and cache instructions from a connected client
42
- * @param name The client name
43
- * @param client The connected client instance
44
- */
45
42
  extractAndCacheInstructions(name, client) {
46
43
  try {
47
44
  const instructions = client.getInstructions();
48
- // Update the connection info with instructions
49
45
  const connectionInfo = this.outboundConns.get(name);
50
46
  if (connectionInfo) {
51
47
  connectionInfo.instructions = instructions;
52
48
  }
53
- // Update the instruction aggregator if available
54
49
  if (this.instructionAggregator) {
55
50
  this.instructionAggregator.setInstructions(name, instructions);
56
51
  }
@@ -68,207 +63,71 @@ export class ClientManager {
68
63
  logger.warn(`Failed to extract instructions from ${name}: ${error}`);
69
64
  }
70
65
  }
71
- /**
72
- * Creates a new MCP client instance
73
- * @returns A new Client instance
74
- */
75
- createClient() {
76
- // Create custom validator instance for each client
77
- const customValidator = new CustomJsonSchemaValidator();
78
- return new Client({
79
- name: MCP_SERVER_NAME,
80
- version: MCP_SERVER_VERSION,
81
- }, {
82
- capabilities: MCP_CLIENT_CAPABILITIES,
83
- jsonSchemaValidator: customValidator,
84
- debouncedNotificationMethods: [
85
- 'notifications/tools/list_changed',
86
- 'notifications/resources/list_changed',
87
- 'notifications/prompts/list_changed',
88
- ],
89
- });
90
- }
91
- /**
92
- * Creates a new MCP client instance for external use (e.g., OAuth testing)
93
- * @returns A new Client instance
94
- */
95
- createClientInstance() {
96
- return this.createClient();
66
+ setupConnectionHandlers(name, client) {
67
+ client.onclose = () => {
68
+ const clientInfo = this.outboundConns.get(name);
69
+ if (clientInfo) {
70
+ clientInfo.status = ClientStatus.Disconnected;
71
+ }
72
+ this.instructionAggregator?.removeServer(name);
73
+ logger.info(`Client ${name} disconnected`);
74
+ };
75
+ client.onerror = (error) => {
76
+ logger.error(`Client ${name} error: ${error}`);
77
+ };
97
78
  }
98
- /**
99
- * Creates client instances for all transports with retry logic
100
- * @param transports Record of transport instances
101
- * @returns Record of client instances
102
- */
103
79
  async createClients(transports) {
104
80
  this.transports = transports;
105
81
  this.outboundConns.clear();
106
82
  for (const [name, transport] of Object.entries(transports)) {
107
- logger.info(`Creating client for ${name}`);
108
- try {
109
- const client = this.createClient();
110
- // Connect with retry logic
111
- const connectedClient = await this.connectWithRetry(client, transport, name);
112
- this.outboundConns.set(name, {
113
- name,
114
- transport,
115
- client: connectedClient,
116
- status: ClientStatus.Connected,
117
- lastConnected: new Date(),
118
- });
119
- logger.info(`Client created for ${name}`);
120
- // Extract and cache instructions after successful connection
121
- this.extractAndCacheInstructions(name, connectedClient);
122
- connectedClient.onclose = () => {
123
- const clientInfo = this.outboundConns.get(name);
124
- if (clientInfo) {
125
- clientInfo.status = ClientStatus.Disconnected;
126
- }
127
- // Remove instructions from aggregator when client disconnects
128
- if (this.instructionAggregator) {
129
- this.instructionAggregator.removeServer(name);
130
- }
131
- logger.info(`Client ${name} disconnected`);
132
- };
133
- connectedClient.onerror = (error) => {
134
- logger.error(`Client ${name} error: ${error}`);
135
- };
136
- }
137
- catch (error) {
138
- if (error instanceof OAuthRequiredError) {
139
- // Handle OAuth required - set client to AwaitingOAuth status
140
- logger.info(`OAuth authorization required for ${name}`);
141
- // Try to get authorization URL from OAuth provider
142
- let authorizationUrl;
143
- try {
144
- // Extract OAuth provider from transport if available
145
- const oauthProvider = transport.oauthProvider;
146
- if (oauthProvider && typeof oauthProvider.getAuthorizationUrl === 'function') {
147
- authorizationUrl = oauthProvider.getAuthorizationUrl();
148
- }
149
- }
150
- catch (urlError) {
151
- logger.warn(`Could not extract authorization URL for ${name}:`, urlError);
152
- }
153
- this.outboundConns.set(name, {
154
- name,
155
- transport,
156
- client: error.client,
157
- status: ClientStatus.AwaitingOAuth,
158
- authorizationUrl,
159
- oauthStartTime: new Date(),
160
- });
161
- }
162
- else {
163
- logger.error(`Failed to create client for ${name}: ${error}`);
164
- this.outboundConns.set(name, {
165
- name,
166
- transport,
167
- client: this.createClient(),
168
- status: ClientStatus.Error,
169
- lastError: error instanceof Error ? error : new Error(String(error)),
170
- });
171
- }
172
- }
83
+ await this.createClient(name, transport);
173
84
  }
174
85
  return this.outboundConns;
175
86
  }
176
- /**
177
- * Connects a client to its transport with retry logic and OAuth support
178
- * @param client The client to connect
179
- * @param transport The transport to connect to
180
- * @param name The name of the client for logging
181
- * @param abortSignal Optional abort signal to cancel the operation
182
- * @returns The connected client (may be a new instance after retries)
183
- */
184
- async connectWithRetry(client, transport, name, abortSignal) {
185
- let retryDelay = CONNECTION_RETRY.INITIAL_DELAY_MS;
186
- let currentClient = client;
187
- let currentTransport = transport;
188
- for (let i = 0; i < CONNECTION_RETRY.MAX_ATTEMPTS; i++) {
189
- try {
190
- // Check if operation was aborted before each attempt
191
- if (abortSignal?.aborted) {
192
- throw new Error(`Connection aborted: ${abortSignal.reason || 'Request cancelled'}`);
193
- }
194
- // Connect with timeout from transport config
195
- // Priority: connectionTimeout > timeout (deprecated fallback)
196
- const authTransport = currentTransport;
197
- const timeout = getConnectionTimeout(authTransport);
198
- await currentClient.connect(currentTransport, timeout ? { timeout } : undefined);
199
- const sv = await currentClient.getServerVersion();
200
- if (sv?.name === MCP_SERVER_NAME) {
201
- throw new ClientConnectionError(name, new Error('Aborted to prevent circular dependency'));
202
- }
203
- logger.info(`Successfully connected to ${name} with server ${sv?.name} version ${sv?.version}`);
204
- return currentClient;
205
- }
206
- catch (error) {
207
- // Handle OAuth authorization flow (managed by SDK)
208
- if (error instanceof UnauthorizedError) {
209
- const configManager = AgentConfigManager.getInstance();
210
- logger.info(`OAuth authorization required for ${name}. Visit ${configManager.getUrl()}/oauth to authorize`);
211
- // Throw special error that includes OAuth info
212
- throw new OAuthRequiredError(name, currentClient);
213
- }
214
- // Handle other connection errors
215
- else {
216
- const errorMessage = error instanceof Error ? error.message : String(error);
217
- logger.error(`Failed to connect to ${name}: ${errorMessage}`);
218
- if (i < CONNECTION_RETRY.MAX_ATTEMPTS - 1) {
219
- logger.info(`Retrying in ${retryDelay}ms...`);
220
- // Clean up failed transport
221
- try {
222
- await currentTransport.close();
223
- }
224
- catch (closeError) {
225
- debugIf(() => ({ message: `Error closing transport during retry: ${closeError}` }));
226
- }
227
- // Implement cancellable delay
228
- await new Promise((resolve, reject) => {
229
- const timeoutId = setTimeout(resolve, retryDelay);
230
- if (abortSignal) {
231
- const abortHandler = () => {
232
- clearTimeout(timeoutId);
233
- reject(new Error(`Connection retry aborted: ${abortSignal.reason || 'Request cancelled'}`));
234
- };
235
- if (abortSignal.aborted) {
236
- clearTimeout(timeoutId);
237
- reject(new Error(`Connection retry aborted: ${abortSignal.reason || 'Request cancelled'}`));
238
- }
239
- else {
240
- abortSignal.addEventListener('abort', abortHandler, { once: true });
241
- }
242
- }
243
- });
244
- retryDelay *= 2; // Exponential backoff
245
- // For HTTP/SSE transports, we need to recreate both client and transport
246
- // because these transports cannot be restarted once started
247
- if (currentTransport instanceof StreamableHTTPClientTransport ||
248
- currentTransport instanceof SSEClientTransport) {
249
- currentTransport = this.recreateHttpTransport(currentTransport);
250
- currentClient = this.createClient();
251
- }
252
- else {
253
- // For STDIO transports, we can reuse the transport but need a new client
254
- currentClient = this.createClient();
255
- }
256
- }
257
- else {
258
- throw new ClientConnectionError(name, error instanceof Error ? error : new Error(String(error)));
259
- }
260
- }
261
- }
87
+ async createClient(name, transport) {
88
+ logger.info(`Creating client for ${name}`);
89
+ try {
90
+ const client = this.clientFactory.createClient();
91
+ const connectedClient = await this.connectionHandler.connectWithRetry(client, transport, name, undefined, (t) => this.transportRecreator.recreateHttpTransport(t));
92
+ this.outboundConns.set(name, {
93
+ name,
94
+ transport,
95
+ client: connectedClient,
96
+ status: ClientStatus.Connected,
97
+ lastConnected: new Date(),
98
+ });
99
+ logger.info(`Client created for ${name}`);
100
+ this.extractAndCacheInstructions(name, connectedClient);
101
+ this.setupConnectionHandlers(name, connectedClient);
102
+ }
103
+ catch (error) {
104
+ this.handleClientCreationError(name, transport, error);
105
+ }
106
+ }
107
+ handleClientCreationError(name, transport, error) {
108
+ if (error instanceof OAuthRequiredError) {
109
+ logger.info(`OAuth authorization required for ${name}`);
110
+ const authorizationUrl = this.oauthFlowHandler.extractAuthorizationUrl(transport);
111
+ this.outboundConns.set(name, {
112
+ name,
113
+ transport,
114
+ client: error.client,
115
+ status: ClientStatus.AwaitingOAuth,
116
+ authorizationUrl,
117
+ oauthStartTime: new Date(),
118
+ });
119
+ }
120
+ else {
121
+ logger.error(`Failed to create client for ${name}: ${error}`);
122
+ this.outboundConns.set(name, {
123
+ name,
124
+ transport,
125
+ client: this.clientFactory.createClient(),
126
+ status: ClientStatus.Error,
127
+ lastError: error instanceof Error ? error : new Error(String(error)),
128
+ });
262
129
  }
263
- // This should never be reached due to the throw in the else block above
264
- throw new ClientConnectionError(name, new Error('Max retries exceeded'));
265
130
  }
266
- /**
267
- * Gets a client by name with error handling
268
- * @param clientName The name of the client to get
269
- * @returns The client instance
270
- * @throws ClientNotFoundError if the client is not found
271
- */
272
131
  getClient(clientName) {
273
132
  const client = this.outboundConns.get(clientName);
274
133
  if (!client) {
@@ -276,32 +135,18 @@ export class ClientManager {
276
135
  }
277
136
  return client;
278
137
  }
279
- /**
280
- * Gets all outbound connections
281
- * @returns Map of all outbound connections
282
- */
283
138
  getClients() {
284
139
  return this.outboundConns;
285
140
  }
286
- /**
287
- * Creates a single client for async loading (used by McpLoadingManager)
288
- * @param name The name of the client
289
- * @param transport The transport to connect to
290
- * @param abortSignal Optional AbortSignal to cancel the operation
291
- * @returns Promise that resolves when client is connected
292
- */
293
141
  async createSingleClient(name, transport, abortSignal) {
294
- // Prevent concurrent creation of the same client
295
142
  const existingPromise = this.connectionSemaphore.get(name);
296
143
  if (existingPromise) {
297
144
  await existingPromise;
298
145
  return;
299
146
  }
300
- // Check if operation was aborted before starting
301
147
  if (abortSignal?.aborted) {
302
148
  throw new Error(`Operation aborted: ${abortSignal.reason || 'Request cancelled'}`);
303
149
  }
304
- // Create connection promise
305
150
  const connectionPromise = this.createSingleClientInternal(name, transport, abortSignal);
306
151
  this.connectionSemaphore.set(name, connectionPromise);
307
152
  try {
@@ -311,21 +156,15 @@ export class ClientManager {
311
156
  this.connectionSemaphore.delete(name);
312
157
  }
313
158
  }
314
- /**
315
- * Internal method to create and connect a single client
316
- */
317
159
  async createSingleClientInternal(name, transport, abortSignal) {
318
160
  logger.info(`Creating client for ${name}`);
319
- // Store transport reference
320
161
  this.transports[name] = transport;
321
162
  try {
322
- // Check if operation was aborted
323
163
  if (abortSignal?.aborted) {
324
164
  throw new Error(`Operation aborted: ${abortSignal.reason || 'Request cancelled'}`);
325
165
  }
326
- const client = this.createClient();
327
- // Connect with retry logic
328
- const connectedClient = await this.connectWithRetry(client, transport, name, abortSignal);
166
+ const client = this.clientFactory.createClient();
167
+ const connectedClient = await this.connectionHandler.connectWithRetry(client, transport, name, abortSignal, (t) => this.transportRecreator.recreateHttpTransport(t));
329
168
  this.outboundConns.set(name, {
330
169
  name,
331
170
  transport,
@@ -334,190 +173,63 @@ export class ClientManager {
334
173
  lastConnected: new Date(),
335
174
  });
336
175
  logger.info(`Client created for ${name}`);
337
- // Extract and cache instructions after successful connection
338
176
  this.extractAndCacheInstructions(name, connectedClient);
339
- connectedClient.onclose = () => {
340
- const clientInfo = this.outboundConns.get(name);
341
- if (clientInfo) {
342
- clientInfo.status = ClientStatus.Disconnected;
343
- }
344
- // Remove instructions from aggregator when client disconnects
345
- if (this.instructionAggregator) {
346
- this.instructionAggregator.removeServer(name);
347
- }
348
- logger.info(`Client ${name} disconnected`);
349
- };
350
- connectedClient.onerror = (error) => {
351
- logger.error(`Client ${name} error: ${error}`);
352
- };
177
+ this.setupConnectionHandlers(name, connectedClient);
353
178
  }
354
179
  catch (error) {
355
- if (error instanceof OAuthRequiredError) {
356
- // Handle OAuth required - set client to AwaitingOAuth status
357
- logger.info(`OAuth authorization required for ${name}`);
358
- // Try to get authorization URL from OAuth provider
359
- let authorizationUrl;
360
- try {
361
- // Extract OAuth provider from transport if available
362
- const oauthProvider = transport.oauthProvider;
363
- if (oauthProvider && typeof oauthProvider.getAuthorizationUrl === 'function') {
364
- authorizationUrl = oauthProvider.getAuthorizationUrl();
365
- }
366
- }
367
- catch (urlError) {
368
- logger.warn(`Could not extract authorization URL for ${name}:`, urlError);
369
- }
370
- this.outboundConns.set(name, {
371
- name,
372
- transport,
373
- client: error.client,
374
- status: ClientStatus.AwaitingOAuth,
375
- authorizationUrl,
376
- oauthStartTime: new Date(),
377
- });
378
- // Re-throw OAuth error for loading manager to handle
379
- throw error;
380
- }
381
- else {
382
- logger.error(`Failed to create client for ${name}: ${error}`);
383
- this.outboundConns.set(name, {
384
- name,
385
- transport,
386
- client: this.createClient(),
387
- status: ClientStatus.Error,
388
- lastError: error instanceof Error ? error : new Error(String(error)),
389
- });
390
- // Re-throw error for loading manager to handle
391
- throw error;
392
- }
180
+ this.handleSingleClientError(name, transport, error);
181
+ throw error;
182
+ }
183
+ }
184
+ handleSingleClientError(name, transport, error) {
185
+ if (error instanceof OAuthRequiredError) {
186
+ logger.info(`OAuth authorization required for ${name}`);
187
+ const authorizationUrl = this.oauthFlowHandler.extractAuthorizationUrl(transport);
188
+ this.outboundConns.set(name, {
189
+ name,
190
+ transport,
191
+ client: error.client,
192
+ status: ClientStatus.AwaitingOAuth,
193
+ authorizationUrl,
194
+ oauthStartTime: new Date(),
195
+ });
196
+ }
197
+ else {
198
+ logger.error(`Failed to create client for ${name}: ${error}`);
199
+ this.outboundConns.set(name, {
200
+ name,
201
+ transport,
202
+ client: this.clientFactory.createClient(),
203
+ status: ClientStatus.Error,
204
+ lastError: error instanceof Error ? error : new Error(String(error)),
205
+ });
393
206
  }
394
207
  }
395
- /**
396
- * Initialize clients storage without connecting (for async loading)
397
- * @param transports Record of transport instances
398
- * @returns Empty connections map (to be populated by async loading)
399
- */
400
208
  initializeClientsAsync(transports) {
401
209
  this.transports = transports;
402
210
  this.outboundConns.clear();
403
211
  logger.info(`Initialized client storage for ${Object.keys(transports).length} transports`);
404
212
  return this.outboundConns;
405
213
  }
406
- /**
407
- * Get transport by name (used by loading manager for retries)
408
- * @param name The transport name
409
- * @returns The transport instance or undefined
410
- */
411
214
  getTransport(name) {
412
215
  return this.transports[name];
413
216
  }
414
- /**
415
- * Get all transport names
416
- * @returns Array of transport names
417
- */
418
217
  getTransportNames() {
419
218
  return Object.keys(this.transports);
420
219
  }
421
- /**
422
- * Recreates an HTTP or SSE transport with the same configuration
423
- * This is necessary because HTTP transports cannot be restarted once started
424
- * @param transport The original transport to recreate
425
- * @returns A new transport instance with the same configuration
426
- */
427
- recreateHttpTransport(transport) {
428
- // Type guard for HTTP-based transports
429
- if (!(transport instanceof StreamableHTTPClientTransport) && !(transport instanceof SSEClientTransport)) {
430
- throw new Error('Transport recreation only supported for HTTP and SSE transports');
431
- }
432
- const transportUrl = transport._url;
433
- // Get OAuth provider from AuthProviderTransport
434
- const authTransport = transport;
435
- const oauthProvider = authTransport.oauthProvider;
436
- // Create new transport based on original type
437
- let newTransport;
438
- if (transport instanceof StreamableHTTPClientTransport) {
439
- const httpTransport = new StreamableHTTPClientTransport(transportUrl, {
440
- authProvider: oauthProvider,
441
- });
442
- newTransport = httpTransport;
443
- }
444
- else {
445
- const sseTransport = new SSEClientTransport(transportUrl, {
446
- authProvider: oauthProvider,
447
- });
448
- newTransport = sseTransport;
449
- }
450
- // Copy transport properties from AuthProviderTransport
451
- newTransport.oauthProvider = oauthProvider;
452
- newTransport.connectionTimeout = authTransport.connectionTimeout;
453
- newTransport.requestTimeout = authTransport.requestTimeout;
454
- newTransport.timeout = authTransport.timeout; // Keep for backward compatibility
455
- newTransport.tags = authTransport.tags;
456
- return newTransport;
457
- }
458
- /**
459
- * Complete OAuth flow and reconnect client with fresh transport
460
- * This recreates both transport and client since HTTP transports cannot be restarted
461
- * @param serverName The name of the server to reconnect
462
- * @param authorizationCode The OAuth authorization code from the callback
463
- * @throws ClientNotFoundError if the client is not found
464
- * @throws Error if transport does not support OAuth or reconnection fails
465
- */
466
220
  async completeOAuthAndReconnect(serverName, authorizationCode) {
467
221
  const clientInfo = this.outboundConns.get(serverName);
468
222
  if (!clientInfo) {
469
223
  throw new ClientNotFoundError(serverName);
470
224
  }
471
- // Type guard for OAuth-capable transports
472
- const transport = clientInfo.transport;
473
- if (!(transport instanceof StreamableHTTPClientTransport) && !(transport instanceof SSEClientTransport)) {
474
- throw new Error(`Transport for ${serverName} does not support OAuth (requires HTTP or SSE transport)`);
475
- }
476
- logger.info(`Completing OAuth and reconnecting ${serverName}...`);
477
- try {
478
- // 1. Complete OAuth flow
479
- await transport.finishAuth(authorizationCode);
480
- // 2. Close old transport
481
- await transport.close();
482
- // 3. Create new transport using helper
483
- const newTransport = this.recreateHttpTransport(transport);
484
- // 4. Create and connect new client with timeout
485
- // Priority: connectionTimeout > timeout (deprecated fallback)
486
- const newClient = this.createClient();
487
- const timeout = getConnectionTimeout(newTransport);
488
- await newClient.connect(newTransport, timeout ? { timeout } : undefined);
489
- // 5. Discover capabilities
490
- const capabilities = newClient.getServerCapabilities();
491
- // 6. Cache instructions
492
- this.extractAndCacheInstructions(serverName, newClient);
493
- // 7. Update connection info (create new object to handle readonly properties)
494
- const updatedInfo = {
495
- name: serverName,
496
- transport: newTransport,
497
- client: newClient,
498
- status: ClientStatus.Connected,
499
- lastConnected: new Date(),
500
- capabilities,
501
- instructions: clientInfo.instructions, // Preserve existing instructions if any
502
- lastError: undefined,
503
- };
504
- this.outboundConns.set(serverName, updatedInfo);
505
- // 8. Update transports map
506
- this.transports[serverName] = newTransport;
507
- logger.info(`OAuth reconnection completed successfully for ${serverName}`);
508
- }
509
- catch (error) {
510
- logger.error(`OAuth reconnection failed for ${serverName}:`, error);
511
- throw error;
512
- }
225
+ const oldTransport = clientInfo.transport;
226
+ const newTransport = this.transportRecreator.recreateHttpTransport(oldTransport, serverName);
227
+ const updatedInfo = await this.oauthFlowHandler.completeOAuthAndReconnect(serverName, oldTransport, newTransport, authorizationCode, clientInfo);
228
+ this.outboundConns.set(serverName, updatedInfo);
229
+ this.transports[serverName] = newTransport;
230
+ this.extractAndCacheInstructions(serverName, updatedInfo.client);
231
+ this.setupConnectionHandlers(serverName, updatedInfo.client);
513
232
  }
514
- /**
515
- * Executes a client operation with error handling and retry logic
516
- * @param clientName The name of the client to use
517
- * @param operation The operation to execute
518
- * @param options Operation options including timeout and retry settings
519
- * @param requiredCapability The capability required for this operation
520
- */
521
233
  async executeClientOperation(clientName, operation, options = {}, requiredCapability) {
522
234
  const outboundConn = this.getClient(clientName);
523
235
  if (outboundConn.status !== ClientStatus.Connected || !outboundConn.client.transport) {
@@ -528,10 +240,12 @@ export class ClientManager {
528
240
  }
529
241
  return executeOperation(() => operation(outboundConn), `client ${clientName}`, options);
530
242
  }
531
- /**
532
- * Remove a client and close its transport
533
- * @param name The name of the client to remove
534
- */
243
+ createClientInstance() {
244
+ return this.clientFactory.createClientInstance();
245
+ }
246
+ createPooledClientInstance() {
247
+ return this.clientFactory.createPooledClientInstance();
248
+ }
535
249
  async removeClient(name) {
536
250
  const clientInfo = this.outboundConns.get(name);
537
251
  if (!clientInfo) {
@@ -539,7 +253,6 @@ export class ClientManager {
539
253
  }
540
254
  logger.info(`Removing client ${name}...`);
541
255
  try {
542
- // Close transport if connected
543
256
  if (clientInfo.transport) {
544
257
  try {
545
258
  await clientInfo.transport.close();
@@ -548,13 +261,9 @@ export class ClientManager {
548
261
  logger.warn(`Error closing transport for ${name}: ${error}`);
549
262
  }
550
263
  }
551
- // Remove from collections
552
264
  this.outboundConns.delete(name);
553
265
  delete this.transports[name];
554
- // Remove from instruction aggregator
555
- if (this.instructionAggregator) {
556
- this.instructionAggregator.removeServer(name);
557
- }
266
+ this.instructionAggregator?.removeServer(name);
558
267
  logger.info(`Client ${name} removed successfully`);
559
268
  }
560
269
  catch (error) {
@@ -563,17 +272,5 @@ export class ClientManager {
563
272
  }
564
273
  }
565
274
  }
566
- /**
567
- * Custom error class for OAuth authorization required
568
- */
569
- export class OAuthRequiredError extends Error {
570
- serverName;
571
- client;
572
- constructor(serverName, client) {
573
- super(`OAuth authorization required for ${serverName}`);
574
- this.serverName = serverName;
575
- this.client = client;
576
- this.name = 'OAuthRequiredError';
577
- }
578
- }
275
+ export default ClientManager;
579
276
  //# sourceMappingURL=clientManager.js.map