@1mcp/agent 0.32.2 → 0.33.0-beta1

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 (347) hide show
  1. package/build/auth/oauthAuthorizationFlow.d.ts +145 -0
  2. package/build/auth/oauthAuthorizationFlow.d.ts.map +1 -0
  3. package/build/auth/oauthAuthorizationFlow.js +257 -0
  4. package/build/auth/oauthAuthorizationFlow.js.map +1 -0
  5. package/build/auth/sdkOAuthServerProvider.d.ts +4 -0
  6. package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -1
  7. package/build/auth/sdkOAuthServerProvider.js +4 -0
  8. package/build/auth/sdkOAuthServerProvider.js.map +1 -1
  9. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  10. package/build/auth/storage/fileStorageService.js +9 -5
  11. package/build/auth/storage/fileStorageService.js.map +1 -1
  12. package/build/commands/cliSetup/setupFiles.d.ts +2 -4
  13. package/build/commands/cliSetup/setupFiles.d.ts.map +1 -1
  14. package/build/commands/cliSetup/setupFiles.js +8 -46
  15. package/build/commands/cliSetup/setupFiles.js.map +1 -1
  16. package/build/commands/inspect/inspect.d.ts +3 -0
  17. package/build/commands/inspect/inspect.d.ts.map +1 -1
  18. package/build/commands/inspect/inspect.js +90 -83
  19. package/build/commands/inspect/inspect.js.map +1 -1
  20. package/build/commands/instructions/instructions.d.ts.map +1 -1
  21. package/build/commands/instructions/instructions.js +11 -68
  22. package/build/commands/instructions/instructions.js.map +1 -1
  23. package/build/commands/mcp/install.d.ts.map +1 -1
  24. package/build/commands/mcp/install.js +62 -145
  25. package/build/commands/mcp/install.js.map +1 -1
  26. package/build/commands/mcp/installSource.d.ts +13 -0
  27. package/build/commands/mcp/installSource.d.ts.map +1 -0
  28. package/build/commands/mcp/installSource.js +69 -0
  29. package/build/commands/mcp/installSource.js.map +1 -0
  30. package/build/commands/mcp/uninstall.d.ts.map +1 -1
  31. package/build/commands/mcp/uninstall.js +20 -15
  32. package/build/commands/mcp/uninstall.js.map +1 -1
  33. package/build/commands/preset/edit.d.ts.map +1 -1
  34. package/build/commands/preset/edit.js +2 -0
  35. package/build/commands/preset/edit.js.map +1 -1
  36. package/build/commands/preset/interactive.d.ts.map +1 -1
  37. package/build/commands/preset/interactive.js +2 -0
  38. package/build/commands/preset/interactive.js.map +1 -1
  39. package/build/commands/preset/show.d.ts.map +1 -1
  40. package/build/commands/preset/show.js +2 -0
  41. package/build/commands/preset/show.js.map +1 -1
  42. package/build/commands/preset/test.d.ts.map +1 -1
  43. package/build/commands/preset/test.js +2 -0
  44. package/build/commands/preset/test.js.map +1 -1
  45. package/build/commands/proxy/proxy.d.ts.map +1 -1
  46. package/build/commands/proxy/proxy.js +11 -22
  47. package/build/commands/proxy/proxy.js.map +1 -1
  48. package/build/commands/registry/options.d.ts +14 -7
  49. package/build/commands/registry/options.d.ts.map +1 -1
  50. package/build/commands/registry/options.js +14 -7
  51. package/build/commands/registry/options.js.map +1 -1
  52. package/build/commands/run/run.d.ts +1 -0
  53. package/build/commands/run/run.d.ts.map +1 -1
  54. package/build/commands/run/run.js +124 -156
  55. package/build/commands/run/run.js.map +1 -1
  56. package/build/commands/serve/index.d.ts +5 -0
  57. package/build/commands/serve/index.d.ts.map +1 -1
  58. package/build/commands/serve/index.js +6 -1
  59. package/build/commands/serve/index.js.map +1 -1
  60. package/build/commands/serve/serve.d.ts +1 -0
  61. package/build/commands/serve/serve.d.ts.map +1 -1
  62. package/build/commands/serve/serve.js +5 -103
  63. package/build/commands/serve/serve.js.map +1 -1
  64. package/build/commands/serve/serveOptions.d.ts +6 -0
  65. package/build/commands/serve/serveOptions.d.ts.map +1 -0
  66. package/build/commands/serve/serveOptions.js +90 -0
  67. package/build/commands/serve/serveOptions.js.map +1 -0
  68. package/build/commands/shared/baseConfigUtils.d.ts +1 -25
  69. package/build/commands/shared/baseConfigUtils.d.ts.map +1 -1
  70. package/build/commands/shared/baseConfigUtils.js +3 -193
  71. package/build/commands/shared/baseConfigUtils.js.map +1 -1
  72. package/build/commands/shared/clientSurfaceAttachment.d.ts +131 -0
  73. package/build/commands/shared/clientSurfaceAttachment.d.ts.map +1 -0
  74. package/build/commands/shared/clientSurfaceAttachment.js +205 -0
  75. package/build/commands/shared/clientSurfaceAttachment.js.map +1 -0
  76. package/build/commands/shared/configParsingUtils.d.ts +9 -0
  77. package/build/commands/shared/configParsingUtils.d.ts.map +1 -0
  78. package/build/commands/shared/configParsingUtils.js +179 -0
  79. package/build/commands/shared/configParsingUtils.js.map +1 -0
  80. package/build/commands/shared/serveClient.d.ts.map +1 -1
  81. package/build/commands/shared/serveClient.js +35 -12
  82. package/build/commands/shared/serveClient.js.map +1 -1
  83. package/build/commands/shared/serveTargetResolver.d.ts.map +1 -1
  84. package/build/commands/shared/serveTargetResolver.js +42 -3
  85. package/build/commands/shared/serveTargetResolver.js.map +1 -1
  86. package/build/config/configLoader.d.ts +0 -1
  87. package/build/config/configLoader.d.ts.map +1 -1
  88. package/build/config/configLoader.js +12 -7
  89. package/build/config/configLoader.js.map +1 -1
  90. package/build/config/envProcessor.d.ts +3 -8
  91. package/build/config/envProcessor.d.ts.map +1 -1
  92. package/build/config/envProcessor.js +17 -34
  93. package/build/config/envProcessor.js.map +1 -1
  94. package/build/config/mcpConfigMerge.d.ts.map +1 -1
  95. package/build/config/mcpConfigMerge.js +15 -8
  96. package/build/config/mcpConfigMerge.js.map +1 -1
  97. package/build/constants/mcp.d.ts +1 -1
  98. package/build/constants/mcp.d.ts.map +1 -1
  99. package/build/constants/mcp.js +1 -1
  100. package/build/constants/mcp.js.map +1 -1
  101. package/build/core/capabilities/asyncLoadingOrchestrator.d.ts +2 -1
  102. package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -1
  103. package/build/core/capabilities/asyncLoadingOrchestrator.js +3 -1
  104. package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -1
  105. package/build/core/capabilities/capabilityCatalog.d.ts +88 -0
  106. package/build/core/capabilities/capabilityCatalog.d.ts.map +1 -0
  107. package/build/core/capabilities/capabilityCatalog.js +235 -0
  108. package/build/core/capabilities/capabilityCatalog.js.map +1 -0
  109. package/build/core/capabilities/capabilityNotificationFacts.d.ts +9 -0
  110. package/build/core/capabilities/capabilityNotificationFacts.d.ts.map +1 -0
  111. package/build/core/capabilities/capabilityNotificationFacts.js +11 -0
  112. package/build/core/capabilities/capabilityNotificationFacts.js.map +1 -0
  113. package/build/core/capabilities/metaToolProvider.d.ts +2 -0
  114. package/build/core/capabilities/metaToolProvider.d.ts.map +1 -1
  115. package/build/core/capabilities/metaToolProvider.js +37 -77
  116. package/build/core/capabilities/metaToolProvider.js.map +1 -1
  117. package/build/core/capabilities/toolRegistry.d.ts +2 -1
  118. package/build/core/capabilities/toolRegistry.d.ts.map +1 -1
  119. package/build/core/capabilities/toolRegistry.js +2 -0
  120. package/build/core/capabilities/toolRegistry.js.map +1 -1
  121. package/build/core/configChangeHandler.d.ts.map +1 -1
  122. package/build/core/configChangeHandler.js +33 -16
  123. package/build/core/configChangeHandler.js.map +1 -1
  124. package/build/core/filtering/filterSelection.d.ts +72 -0
  125. package/build/core/filtering/filterSelection.d.ts.map +1 -0
  126. package/build/core/filtering/filterSelection.js +262 -0
  127. package/build/core/filtering/filterSelection.js.map +1 -0
  128. package/build/core/instructions/instructionsDistribution.d.ts +52 -0
  129. package/build/core/instructions/instructionsDistribution.d.ts.map +1 -0
  130. package/build/core/instructions/instructionsDistribution.js +124 -0
  131. package/build/core/instructions/instructionsDistribution.js.map +1 -0
  132. package/build/core/protocol/notificationHandlers.js +2 -2
  133. package/build/core/protocol/notificationHandlers.js.map +1 -1
  134. package/build/core/protocol/promptRequestHandlers.d.ts +4 -0
  135. package/build/core/protocol/promptRequestHandlers.d.ts.map +1 -0
  136. package/build/core/protocol/promptRequestHandlers.js +64 -0
  137. package/build/core/protocol/promptRequestHandlers.js.map +1 -0
  138. package/build/core/protocol/requestHandlerUtils.d.ts +8 -0
  139. package/build/core/protocol/requestHandlerUtils.d.ts.map +1 -0
  140. package/build/core/protocol/requestHandlerUtils.js +48 -0
  141. package/build/core/protocol/requestHandlerUtils.js.map +1 -0
  142. package/build/core/protocol/requestHandlers.d.ts +2 -0
  143. package/build/core/protocol/requestHandlers.d.ts.map +1 -1
  144. package/build/core/protocol/requestHandlers.js +7 -391
  145. package/build/core/protocol/requestHandlers.js.map +1 -1
  146. package/build/core/protocol/resourceRequestHandlers.d.ts +3 -0
  147. package/build/core/protocol/resourceRequestHandlers.d.ts.map +1 -0
  148. package/build/core/protocol/resourceRequestHandlers.js +76 -0
  149. package/build/core/protocol/resourceRequestHandlers.js.map +1 -0
  150. package/build/core/protocol/toolRequestHandlers.d.ts +4 -0
  151. package/build/core/protocol/toolRequestHandlers.d.ts.map +1 -0
  152. package/build/core/protocol/toolRequestHandlers.js +132 -0
  153. package/build/core/protocol/toolRequestHandlers.js.map +1 -0
  154. package/build/core/server/adapters/TemplateServerAdapter.d.ts +0 -5
  155. package/build/core/server/adapters/TemplateServerAdapter.d.ts.map +1 -1
  156. package/build/core/server/adapters/TemplateServerAdapter.js +7 -30
  157. package/build/core/server/adapters/TemplateServerAdapter.js.map +1 -1
  158. package/build/core/server/clientInstanceFactory.d.ts +13 -0
  159. package/build/core/server/clientInstanceFactory.d.ts.map +1 -0
  160. package/build/core/server/clientInstanceFactory.js +32 -0
  161. package/build/core/server/clientInstanceFactory.js.map +1 -0
  162. package/build/core/server/clientInstancePool.d.ts +8 -49
  163. package/build/core/server/clientInstancePool.d.ts.map +1 -1
  164. package/build/core/server/clientInstancePool.js +61 -72
  165. package/build/core/server/clientInstancePool.js.map +1 -1
  166. package/build/core/server/clientInstancePoolTypes.d.ts +52 -0
  167. package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -0
  168. package/build/core/server/clientInstancePoolTypes.js +10 -0
  169. package/build/core/server/clientInstancePoolTypes.js.map +1 -0
  170. package/build/core/server/connectionResolver.d.ts.map +1 -1
  171. package/build/core/server/connectionResolver.js +34 -31
  172. package/build/core/server/connectionResolver.js.map +1 -1
  173. package/build/core/server/requestContextPreparation.d.ts +38 -0
  174. package/build/core/server/requestContextPreparation.d.ts.map +1 -0
  175. package/build/core/server/requestContextPreparation.js +49 -0
  176. package/build/core/server/requestContextPreparation.js.map +1 -0
  177. package/build/core/server/serverManager.js +1 -1
  178. package/build/core/server/serverManager.js.map +1 -1
  179. package/build/core/server/templateIdentity.d.ts +44 -0
  180. package/build/core/server/templateIdentity.d.ts.map +1 -0
  181. package/build/core/server/templateIdentity.js +95 -0
  182. package/build/core/server/templateIdentity.js.map +1 -0
  183. package/build/core/server/templateServerCleanup.d.ts +23 -0
  184. package/build/core/server/templateServerCleanup.d.ts.map +1 -0
  185. package/build/core/server/templateServerCleanup.js +155 -0
  186. package/build/core/server/templateServerCleanup.js.map +1 -0
  187. package/build/core/server/templateServerManager.d.ts +12 -3
  188. package/build/core/server/templateServerManager.d.ts.map +1 -1
  189. package/build/core/server/templateServerManager.js +82 -127
  190. package/build/core/server/templateServerManager.js.map +1 -1
  191. package/build/core/tools/internal/adapters/installation/types.d.ts +16 -11
  192. package/build/core/tools/internal/adapters/installation/types.d.ts.map +1 -1
  193. package/build/core/tools/internal/adapters/installationAdapter.d.ts +3 -13
  194. package/build/core/tools/internal/adapters/installationAdapter.d.ts.map +1 -1
  195. package/build/core/tools/internal/adapters/installationAdapter.js +85 -69
  196. package/build/core/tools/internal/adapters/installationAdapter.js.map +1 -1
  197. package/build/core/tools/internal/installationHandlers.d.ts.map +1 -1
  198. package/build/core/tools/internal/installationHandlers.js +10 -4
  199. package/build/core/tools/internal/installationHandlers.js.map +1 -1
  200. package/build/core/tools/internal/integration.domainMocks.testSetup.d.ts +2 -0
  201. package/build/core/tools/internal/integration.domainMocks.testSetup.d.ts.map +1 -0
  202. package/build/core/tools/internal/integration.domainMocks.testSetup.js +66 -0
  203. package/build/core/tools/internal/integration.domainMocks.testSetup.js.map +1 -0
  204. package/build/core/tools/internal/integration.testSetup.d.ts +2 -0
  205. package/build/core/tools/internal/integration.testSetup.d.ts.map +1 -0
  206. package/build/core/tools/internal/integration.testSetup.js +469 -0
  207. package/build/core/tools/internal/integration.testSetup.js.map +1 -0
  208. package/build/core/tools/internal/schemas/index.d.ts +6 -0
  209. package/build/core/tools/internal/schemas/index.d.ts.map +1 -1
  210. package/build/core/tools/internal/schemas/installation.d.ts +6 -0
  211. package/build/core/tools/internal/schemas/installation.d.ts.map +1 -1
  212. package/build/core/tools/internal/schemas/installation.js +13 -1
  213. package/build/core/tools/internal/schemas/installation.js.map +1 -1
  214. package/build/domains/config-change/backupRetention.d.ts +14 -0
  215. package/build/domains/config-change/backupRetention.d.ts.map +1 -0
  216. package/build/domains/config-change/backupRetention.js +36 -0
  217. package/build/domains/config-change/backupRetention.js.map +1 -0
  218. package/build/domains/config-change/configChange.d.ts +4 -0
  219. package/build/domains/config-change/configChange.d.ts.map +1 -0
  220. package/build/domains/config-change/configChange.js +346 -0
  221. package/build/domains/config-change/configChange.js.map +1 -0
  222. package/build/domains/config-change/configLock.d.ts +6 -0
  223. package/build/domains/config-change/configLock.d.ts.map +1 -0
  224. package/build/domains/config-change/configLock.js +62 -0
  225. package/build/domains/config-change/configLock.js.map +1 -0
  226. package/build/domains/config-change/types.d.ts +64 -0
  227. package/build/domains/config-change/types.d.ts.map +1 -0
  228. package/build/domains/config-change/types.js +2 -0
  229. package/build/domains/config-change/types.js.map +1 -0
  230. package/build/domains/installation/index.d.ts +4 -3
  231. package/build/domains/installation/index.d.ts.map +1 -1
  232. package/build/domains/installation/index.js +5 -3
  233. package/build/domains/installation/index.js.map +1 -1
  234. package/build/domains/installation/serverInstallationSourceResolution.d.ts +6 -0
  235. package/build/domains/installation/serverInstallationSourceResolution.d.ts.map +1 -0
  236. package/build/domains/installation/serverInstallationSourceResolution.js +210 -0
  237. package/build/domains/installation/serverInstallationSourceResolution.js.map +1 -0
  238. package/build/domains/installation/serverInstallationTypes.d.ts +105 -0
  239. package/build/domains/installation/serverInstallationTypes.d.ts.map +1 -0
  240. package/build/domains/installation/serverInstallationTypes.js +2 -0
  241. package/build/domains/installation/serverInstallationTypes.js.map +1 -0
  242. package/build/domains/installation/serverInstallationWorkflow.d.ts +4 -0
  243. package/build/domains/installation/serverInstallationWorkflow.d.ts.map +1 -0
  244. package/build/domains/installation/serverInstallationWorkflow.js +148 -0
  245. package/build/domains/installation/serverInstallationWorkflow.js.map +1 -0
  246. package/build/domains/preset/manager/presetManager.d.ts +0 -4
  247. package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
  248. package/build/domains/preset/manager/presetManager.js +19 -153
  249. package/build/domains/preset/manager/presetManager.js.map +1 -1
  250. package/build/domains/preset/manager/presetManagerCleanup.d.ts +15 -0
  251. package/build/domains/preset/manager/presetManagerCleanup.d.ts.map +1 -0
  252. package/build/domains/preset/manager/presetManagerCleanup.js +34 -0
  253. package/build/domains/preset/manager/presetManagerCleanup.js.map +1 -0
  254. package/build/domains/preset/manager/presetStorage.d.ts +4 -0
  255. package/build/domains/preset/manager/presetStorage.d.ts.map +1 -0
  256. package/build/domains/preset/manager/presetStorage.js +27 -0
  257. package/build/domains/preset/manager/presetStorage.js.map +1 -0
  258. package/build/domains/preset/manager/presetTesting.d.ts +8 -0
  259. package/build/domains/preset/manager/presetTesting.d.ts.map +1 -0
  260. package/build/domains/preset/manager/presetTesting.js +38 -0
  261. package/build/domains/preset/manager/presetTesting.js.map +1 -0
  262. package/build/domains/preset/manager/presetValidation.d.ts +3 -0
  263. package/build/domains/preset/manager/presetValidation.d.ts.map +1 -0
  264. package/build/domains/preset/manager/presetValidation.js +41 -0
  265. package/build/domains/preset/manager/presetValidation.js.map +1 -0
  266. package/build/domains/registry/cacheManager.d.ts.map +1 -1
  267. package/build/domains/registry/cacheManager.js +1 -0
  268. package/build/domains/registry/cacheManager.js.map +1 -1
  269. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
  270. package/build/domains/registry/mcpRegistryClient.js +2 -1
  271. package/build/domains/registry/mcpRegistryClient.js.map +1 -1
  272. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +3 -0
  273. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  274. package/build/transport/http/middlewares/scopeAuthMiddleware.js +18 -28
  275. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  276. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  277. package/build/transport/http/middlewares/tagsExtractor.js +46 -255
  278. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  279. package/build/transport/http/routes/cliTokenRoute.d.ts.map +1 -1
  280. package/build/transport/http/routes/cliTokenRoute.js +20 -14
  281. package/build/transport/http/routes/cliTokenRoute.js.map +1 -1
  282. package/build/transport/http/routes/inspectRequestContext.d.ts +5 -0
  283. package/build/transport/http/routes/inspectRequestContext.d.ts.map +1 -0
  284. package/build/transport/http/routes/inspectRequestContext.js +59 -0
  285. package/build/transport/http/routes/inspectRequestContext.js.map +1 -0
  286. package/build/transport/http/routes/inspectRoutes.d.ts +3 -3
  287. package/build/transport/http/routes/inspectRoutes.d.ts.map +1 -1
  288. package/build/transport/http/routes/inspectRoutes.js +60 -83
  289. package/build/transport/http/routes/inspectRoutes.js.map +1 -1
  290. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  291. package/build/transport/http/routes/oauthRoutes.js +99 -223
  292. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  293. package/build/transport/http/routes/streamableHttpRoutes.d.ts +2 -2
  294. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  295. package/build/transport/http/routes/streamableHttpRoutes.js +39 -84
  296. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  297. package/build/transport/http/routes/toolRoutes.d.ts.map +1 -1
  298. package/build/transport/http/routes/toolRoutes.js +138 -39
  299. package/build/transport/http/routes/toolRoutes.js.map +1 -1
  300. package/build/transport/http/server.d.ts.map +1 -1
  301. package/build/transport/http/server.js +93 -0
  302. package/build/transport/http/server.js.map +1 -1
  303. package/build/transport/http/streamableSessionLifecycle.d.ts +90 -0
  304. package/build/transport/http/streamableSessionLifecycle.d.ts.map +1 -0
  305. package/build/transport/http/streamableSessionLifecycle.js +348 -0
  306. package/build/transport/http/streamableSessionLifecycle.js.map +1 -0
  307. package/build/transport/http/utils/contextExtractor.d.ts +1 -1
  308. package/build/transport/http/utils/contextExtractor.d.ts.map +1 -1
  309. package/build/transport/http/utils/contextExtractor.js +1 -33
  310. package/build/transport/http/utils/contextExtractor.js.map +1 -1
  311. package/build/transport/stdioProxyTransport.d.ts +1 -0
  312. package/build/transport/stdioProxyTransport.d.ts.map +1 -1
  313. package/build/transport/stdioProxyTransport.js +3 -0
  314. package/build/transport/stdioProxyTransport.js.map +1 -1
  315. package/build/transport/transportFactory.d.ts +1 -2
  316. package/build/transport/transportFactory.d.ts.map +1 -1
  317. package/build/transport/transportFactory.js +54 -4
  318. package/build/transport/transportFactory.js.map +1 -1
  319. package/build/transport/transportFactory.testSetup.d.ts +2 -0
  320. package/build/transport/transportFactory.testSetup.d.ts.map +1 -0
  321. package/build/transport/transportFactory.testSetup.js +83 -0
  322. package/build/transport/transportFactory.testSetup.js.map +1 -0
  323. package/build/utils/context/sessionIdentity.d.ts +9 -0
  324. package/build/utils/context/sessionIdentity.d.ts.map +1 -0
  325. package/build/utils/context/sessionIdentity.js +39 -0
  326. package/build/utils/context/sessionIdentity.js.map +1 -0
  327. package/build/utils/ui/interactiveSelector.d.ts +0 -25
  328. package/build/utils/ui/interactiveSelector.d.ts.map +1 -1
  329. package/build/utils/ui/interactiveSelector.js +12 -329
  330. package/build/utils/ui/interactiveSelector.js.map +1 -1
  331. package/build/utils/ui/interactiveSelectorPrompts.d.ts +7 -0
  332. package/build/utils/ui/interactiveSelectorPrompts.d.ts.map +1 -0
  333. package/build/utils/ui/interactiveSelectorPrompts.js +60 -0
  334. package/build/utils/ui/interactiveSelectorPrompts.js.map +1 -0
  335. package/build/utils/ui/interactiveSelectorQuery.d.ts +5 -0
  336. package/build/utils/ui/interactiveSelectorQuery.d.ts.map +1 -0
  337. package/build/utils/ui/interactiveSelectorQuery.js +67 -0
  338. package/build/utils/ui/interactiveSelectorQuery.js.map +1 -0
  339. package/build/utils/ui/interactiveSelectorTagUi.d.ts +7 -0
  340. package/build/utils/ui/interactiveSelectorTagUi.d.ts.map +1 -0
  341. package/build/utils/ui/interactiveSelectorTagUi.js +129 -0
  342. package/build/utils/ui/interactiveSelectorTagUi.js.map +1 -0
  343. package/package.json +2 -2
  344. package/build/transport/http/utils/sessionService.d.ts +0 -106
  345. package/build/transport/http/utils/sessionService.d.ts.map +0 -1
  346. package/build/transport/http/utils/sessionService.js +0 -342
  347. package/build/transport/http/utils/sessionService.js.map +0 -1
@@ -0,0 +1,132 @@
1
+ import { CallToolRequestSchema, CallToolResultSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
2
+ import { McpConfigManager } from '../../config/mcpConfigManager.js';
3
+ import { MCP_URI_SEPARATOR } from '../../constants.js';
4
+ import { InternalCapabilitiesProvider } from '../../core/capabilities/internalCapabilitiesProvider.js';
5
+ import { byCapabilities } from '../../core/filtering/clientFiltering.js';
6
+ import { FilteringService } from '../../core/filtering/filteringService.js';
7
+ import { getDisabledToolError } from '../../core/server/disabledTools.js';
8
+ import logger, { infoIf } from '../../logger/logger.js';
9
+ import { withErrorHandling } from '../../utils/core/errorHandling.js';
10
+ import { buildUri, parseUri } from '../../utils/core/parsing.js';
11
+ import { getRequestTimeout } from '../../utils/core/timeoutUtils.js';
12
+ import { createCapabilityCatalogFromConnections, filterConnectionsForSession, getRequestSession, resolveOutboundConnection, } from './requestHandlerUtils.js';
13
+ export function registerToolHandlers(outboundConns, inboundConn, lazyLoadingOrchestrator) {
14
+ const sessionId = getRequestSession(inboundConn);
15
+ const lazyLoadingEnabled = lazyLoadingOrchestrator?.isEnabled();
16
+ const getServerConfigs = () => McpConfigManager.getInstance().getTransportConfig();
17
+ inboundConn.server.setRequestHandler(ListToolsRequestSchema, withErrorHandling(async (request) => {
18
+ if (lazyLoadingEnabled && lazyLoadingOrchestrator) {
19
+ const sessionFilteredConns = filterConnectionsForSession(outboundConns, sessionId);
20
+ const capabilityFilteredClients = byCapabilities({ tools: {} })(sessionFilteredConns);
21
+ const filteredClients = FilteringService.getFilteredConnections(capabilityFilteredClients, inboundConn);
22
+ const filteredServerNames = new Set(Array.from(filteredClients.values()).map((conn) => conn.name));
23
+ infoIf(() => ({
24
+ message: 'Lazy loading: filtered servers',
25
+ meta: {
26
+ totalOutbound: outboundConns.size,
27
+ sessionFiltered: sessionFilteredConns.size,
28
+ capabilityFiltered: capabilityFilteredClients.size,
29
+ finalFiltered: filteredClients.size,
30
+ filteredServerNames: Array.from(filteredServerNames),
31
+ inboundConfig: {
32
+ tagFilterMode: inboundConn.tagFilterMode,
33
+ tags: inboundConn.tags,
34
+ tagExpression: inboundConn.tagExpression,
35
+ },
36
+ },
37
+ }));
38
+ const capabilities = await lazyLoadingOrchestrator.getCapabilitiesForFilteredServers(filteredServerNames, sessionId);
39
+ const internalProvider = InternalCapabilitiesProvider.getInstance();
40
+ await internalProvider.initialize();
41
+ const internalTools = internalProvider.getAvailableTools();
42
+ const lazyToolNames = ['tool_list', 'tool_schema', 'tool_invoke'];
43
+ const nonLazyTools = internalTools.filter((tool) => !lazyToolNames.includes(tool.name));
44
+ const internalToolsWithPrefix = nonLazyTools.map((tool) => ({
45
+ ...tool,
46
+ name: buildUri('1mcp', tool.name, MCP_URI_SEPARATOR),
47
+ }));
48
+ return {
49
+ tools: [...capabilities.tools, ...internalToolsWithPrefix],
50
+ };
51
+ }
52
+ const sessionFilteredConns = filterConnectionsForSession(outboundConns, sessionId);
53
+ const capabilityFilteredClients = byCapabilities({ tools: {} })(sessionFilteredConns);
54
+ const filteredClients = FilteringService.getFilteredConnections(capabilityFilteredClients, inboundConn);
55
+ const catalog = await createCapabilityCatalogFromConnections(filteredClients, getServerConfigs);
56
+ const result = await catalog.listVisibleTools(request.params || {}, sessionId);
57
+ const internalProvider = InternalCapabilitiesProvider.getInstance();
58
+ await internalProvider.initialize();
59
+ const internalTools = internalProvider.getAvailableTools();
60
+ const internalToolsWithPrefix = internalTools.map((tool) => ({
61
+ ...tool,
62
+ name: buildUri('1mcp', tool.name, MCP_URI_SEPARATOR),
63
+ }));
64
+ const externalTools = result.tools.map((tool) => ({
65
+ ...tool,
66
+ name: buildUri(tool.server, tool.name, MCP_URI_SEPARATOR),
67
+ inputSchema: tool.inputSchema ?? { type: 'object' },
68
+ }));
69
+ return {
70
+ tools: [...externalTools, ...internalToolsWithPrefix],
71
+ nextCursor: result.nextCursor,
72
+ };
73
+ }, 'Error listing tools'));
74
+ inboundConn.server.setRequestHandler(CallToolRequestSchema, withErrorHandling(async (request) => {
75
+ const toolName = request.params.name;
76
+ const isUnprefixedMetaTool = lazyLoadingEnabled && lazyLoadingOrchestrator && lazyLoadingOrchestrator.isMetaTool(toolName);
77
+ if (isUnprefixedMetaTool && lazyLoadingOrchestrator) {
78
+ let result;
79
+ try {
80
+ result = await lazyLoadingOrchestrator.callMetaTool(toolName, request.params.arguments, sessionId);
81
+ }
82
+ catch (metaToolError) {
83
+ logger.error(`Meta-tool ${toolName} execution failed: ${metaToolError}`);
84
+ throw new Error(`Meta-tool ${toolName} failed: ${metaToolError instanceof Error ? metaToolError.message : String(metaToolError)}`);
85
+ }
86
+ return structuredToolResult(result);
87
+ }
88
+ if (lazyLoadingEnabled && !toolName.includes(MCP_URI_SEPARATOR)) {
89
+ return structuredToolResult({
90
+ error: {
91
+ type: 'not_found',
92
+ message: `Unknown tool: ${toolName}. In lazy loading mode, use meta-tools (tool_list, tool_schema, tool_invoke) to discover and call tools.`,
93
+ },
94
+ });
95
+ }
96
+ const { clientName, resourceName: extractedToolName } = parseUri(toolName, MCP_URI_SEPARATOR);
97
+ if (clientName === '1mcp') {
98
+ const internalProvider = InternalCapabilitiesProvider.getInstance();
99
+ await internalProvider.initialize();
100
+ const result = await internalProvider.executeTool(extractedToolName, request.params.arguments, sessionId);
101
+ return structuredToolResult(result);
102
+ }
103
+ const outboundConn = resolveOutboundConnection(clientName, sessionId, outboundConns, inboundConn);
104
+ if (!outboundConn) {
105
+ throw new Error(`Unknown client: ${clientName}`);
106
+ }
107
+ const disabledError = getDisabledToolError(getServerConfigs(), clientName, extractedToolName);
108
+ if (disabledError) {
109
+ return structuredToolResult({
110
+ error: {
111
+ type: disabledError.type,
112
+ message: disabledError.message,
113
+ },
114
+ });
115
+ }
116
+ return outboundConn.client.callTool({ ...request.params, name: extractedToolName }, CallToolResultSchema, {
117
+ timeout: getRequestTimeout(outboundConn.transport),
118
+ });
119
+ }, 'Error calling tool'));
120
+ }
121
+ function structuredToolResult(result) {
122
+ return {
123
+ content: [
124
+ {
125
+ type: 'text',
126
+ text: JSON.stringify(result, null, 2),
127
+ },
128
+ ],
129
+ structuredContent: result,
130
+ };
131
+ }
132
+ //# sourceMappingURL=toolRequestHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRequestHandlers.js","sourceRoot":"","sources":["../../../src/core/protocol/toolRequestHandlers.ts"],"names":[],"mappings":"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"}
@@ -20,11 +20,6 @@ export declare class TemplateServerAdapter implements ServerAdapter {
20
20
  private readonly templateManager;
21
21
  readonly type = ServerType.Template;
22
22
  constructor(name: string, config: MCPServerParams, outboundConns: OutboundConnections, templateManager: TemplateServerManager);
23
- /**
24
- * Build the possible connection keys for a session.
25
- * Returns keys in priority order: session-scoped first, then hash-based.
26
- */
27
- private buildConnectionKeys;
28
23
  /**
29
24
  * Resolve the outbound connection for this template server.
30
25
  * Uses session-based resolution with hash lookup for shareable servers.
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/core/server/adapters/TemplateServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAiC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnH;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IAIvD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,QAAQ,CAAC,IAAI,uBAAuB;gBAGzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACf,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,qBAAqB;IAGzD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;OAGG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,kBAAkB,GAAG,SAAS;IA2B1E;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY;IAKhD;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO;IAK7C;;;OAGG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS;CAQ9D"}
1
+ {"version":3,"file":"TemplateServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/core/server/adapters/TemplateServerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,OAAO,EAAiC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnH;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IAIvD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,QAAQ,CAAC,IAAI,uBAAuB;gBAGzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACf,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,qBAAqB;IAGzD;;;OAGG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,kBAAkB,GAAG,SAAS;IA0B1E;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY;IAKhD;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO;IAK7C;;;OAGG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS;CAQ9D"}
@@ -1,4 +1,5 @@
1
- import { debugIf, errorIf } from '../../../logger/logger.js';
1
+ import { debugIf } from '../../../logger/logger.js';
2
+ import { ConnectionResolver } from '../connectionResolver.js';
2
3
  import { mapClientStatusToServerStatus, ServerStatus, ServerType } from './types.js';
3
4
  /**
4
5
  * TemplateServerAdapter handles template-based MCP servers with dynamic connections.
@@ -23,27 +24,6 @@ export class TemplateServerAdapter {
23
24
  this.outboundConns = outboundConns;
24
25
  this.templateManager = templateManager;
25
26
  }
26
- /**
27
- * Build the possible connection keys for a session.
28
- * Returns keys in priority order: session-scoped first, then hash-based.
29
- */
30
- buildConnectionKeys(sessionId) {
31
- const keys = [`${this.name}:${sessionId}`];
32
- try {
33
- const renderedHash = this.templateManager.getRenderedHashForSession(sessionId, this.name);
34
- if (renderedHash) {
35
- keys.push(`${this.name}:${renderedHash}`);
36
- }
37
- }
38
- catch (error) {
39
- const errorMessage = error instanceof Error ? error.message : String(error);
40
- errorIf(() => ({
41
- message: `Failed to get rendered hash for template server`,
42
- meta: { serverName: this.name, sessionId, error: errorMessage },
43
- }));
44
- }
45
- return keys;
46
- }
47
27
  /**
48
28
  * Resolve the outbound connection for this template server.
49
29
  * Uses session-based resolution with hash lookup for shareable servers.
@@ -57,16 +37,13 @@ export class TemplateServerAdapter {
57
37
  }));
58
38
  return undefined;
59
39
  }
60
- const keys = this.buildConnectionKeys(sessionId);
61
- for (const key of keys) {
62
- const conn = this.outboundConns.get(key);
63
- if (conn) {
64
- return conn;
65
- }
40
+ const resolved = new ConnectionResolver(this.outboundConns, this.templateManager).resolveWithKey(this.name, sessionId);
41
+ if (resolved) {
42
+ return resolved.connection;
66
43
  }
67
44
  debugIf(() => ({
68
45
  message: 'TemplateServerAdapter: No connection found for template server',
69
- meta: { serverName: this.name, sessionId, attemptedKeys: keys },
46
+ meta: { serverName: this.name, sessionId },
70
47
  }));
71
48
  return undefined;
72
49
  }
@@ -93,7 +70,7 @@ export class TemplateServerAdapter {
93
70
  if (!sessionId) {
94
71
  return undefined;
95
72
  }
96
- return this.buildConnectionKeys(sessionId).find((key) => this.outboundConns.has(key));
73
+ return new ConnectionResolver(this.outboundConns, this.templateManager).resolveWithKey(this.name, sessionId)?.key;
97
74
  }
98
75
  }
99
76
  //# sourceMappingURL=TemplateServerAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateServerAdapter.js","sourceRoot":"","sources":["../../../../src/core/server/adapters/TemplateServerAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,6BAA6B,EAAgC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnH;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IAIrB;IACA;IACQ;IACA;IANV,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IAEpC,YACW,IAAY,EACZ,MAAuB,EACf,aAAkC,EAClC,eAAsC;QAH9C,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAiB;QACf,kBAAa,GAAb,aAAa,CAAqB;QAClC,oBAAe,GAAf,eAAe,CAAuB;IACtD,CAAC;IAEJ;;;OAGG;IACK,mBAAmB,CAAC,SAAiB;QAC3C,MAAM,IAAI,GAAa,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1F,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACb,OAAO,EAAE,iDAAiD;gBAC1D,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE;aAChE,CAAC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,OAAuB;QACvC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACb,OAAO,EAAE,yDAAyD;gBAClE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE;aAChC,CAAC,CAAC,CAAC;YACJ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAEjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACb,OAAO,EAAE,gEAAgE;YACzE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE;SAChE,CAAC,CAAC,CAAC;QAEJ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAuB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,MAAM,KAAK,YAAY,CAAC,SAAS,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAuB;QACtC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,CAAC;CACF"}
1
+ {"version":3,"file":"TemplateServerAdapter.js","sourceRoot":"","sources":["../../../../src/core/server/adapters/TemplateServerAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAgC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnH;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAqB;IAIrB;IACA;IACQ;IACA;IANV,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IAEpC,YACW,IAAY,EACZ,MAAuB,EACf,aAAkC,EAClC,eAAsC;QAH9C,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAiB;QACf,kBAAa,GAAb,aAAa,CAAqB;QAClC,oBAAe,GAAf,eAAe,CAAuB;IACtD,CAAC;IAEJ;;;OAGG;IACH,iBAAiB,CAAC,OAAuB;QACvC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACb,OAAO,EAAE,yDAAyD;gBAClE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE;aAChC,CAAC,CAAC,CAAC;YACJ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,cAAc,CAC9F,IAAI,CAAC,IAAI,EACT,SAAS,CACV,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,UAAU,CAAC;QAC7B,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACb,OAAO,EAAE,gEAAgE;YACzE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE;SAC3C,CAAC,CAAC,CAAC;QAEJ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAuB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAuB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,MAAM,KAAK,YAAY,CAAC,SAAS,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAuB;QACtC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC;IACpH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { MCPServerParams } from '../../core/types/transport.js';
2
+ import type { PooledClientInstance } from './clientInstancePoolTypes.js';
3
+ export interface CreatePooledInstanceParams {
4
+ instanceId: string;
5
+ instanceKey: string;
6
+ templateName: string;
7
+ processedConfig: MCPServerParams;
8
+ renderedHash: string;
9
+ clientId: string;
10
+ idleTimeout: number;
11
+ }
12
+ export declare function createPooledClientInstance({ instanceId, instanceKey, templateName, processedConfig, renderedHash, clientId, idleTimeout, }: CreatePooledInstanceParams): Promise<PooledClientInstance>;
13
+ //# sourceMappingURL=clientInstanceFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientInstanceFactory.d.ts","sourceRoot":"","sources":["../../../src/core/server/clientInstanceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,0BAA0B,CAAC,EAC/C,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,GACZ,EAAE,0BAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmC5D"}
@@ -0,0 +1,32 @@
1
+ import { createTransportsWithContext } from '../../transport/transportFactory.js';
2
+ import { getConnectionTimeout } from '../../utils/core/timeoutUtils.js';
3
+ export async function createPooledClientInstance({ instanceId, instanceKey, templateName, processedConfig, renderedHash, clientId, idleTimeout, }) {
4
+ const transports = await createTransportsWithContext({
5
+ [templateName]: processedConfig,
6
+ }, undefined);
7
+ const transport = transports[templateName];
8
+ if (!transport) {
9
+ throw new Error(`Failed to create transport for template ${templateName}`);
10
+ }
11
+ const { ClientManager } = await import('../../core/client/clientManager.js');
12
+ const clientManager = ClientManager.getOrCreateInstance();
13
+ const client = clientManager.createPooledClientInstance();
14
+ const connectionTimeout = getConnectionTimeout(transport);
15
+ await client.connect(transport, connectionTimeout ? { timeout: connectionTimeout } : undefined);
16
+ return {
17
+ id: instanceId,
18
+ instanceKey,
19
+ templateName,
20
+ client,
21
+ transport,
22
+ renderedHash,
23
+ processedConfig,
24
+ referenceCount: 1,
25
+ createdAt: new Date(),
26
+ lastUsedAt: new Date(),
27
+ status: 'active',
28
+ clientIds: new Set([clientId]),
29
+ idleTimeout,
30
+ };
31
+ }
32
+ //# sourceMappingURL=clientInstanceFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientInstanceFactory.js","sourceRoot":"","sources":["../../../src/core/server/clientInstanceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAcvE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,GACgB;IAC3B,MAAM,UAAU,GAAG,MAAM,2BAA2B,CAClD;QACE,CAAC,YAAY,CAAC,EAAE,eAAe;KAChC,EACD,SAAS,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,0BAA0B,EAAE,CAAC;IAE1D,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEhG,OAAO;QACL,EAAE,EAAE,UAAU;QACd,WAAW;QACX,YAAY;QACZ,MAAM;QACN,SAAS;QACT,YAAY;QACZ,eAAe;QACf,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9B,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -1,49 +1,7 @@
1
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
- import { AuthProviderTransport } from '../../core/types/index.js';
3
1
  import type { MCPServerParams } from '../../core/types/transport.js';
4
2
  import type { ContextData } from '../../types/context.js';
5
- /**
6
- * Configuration options for client instance pool
7
- */
8
- export interface ClientPoolOptions {
9
- /** Maximum number of instances per template (0 = unlimited) */
10
- maxInstances?: number;
11
- /** Time in milliseconds to wait before terminating idle instances */
12
- idleTimeout?: number;
13
- /** Interval in milliseconds to run cleanup checks */
14
- cleanupInterval?: number;
15
- /** Maximum total instances across all templates (0 = unlimited) */
16
- maxTotalInstances?: number;
17
- }
18
- /**
19
- * Represents a pooled client instance connected to an upstream MCP server
20
- */
21
- export interface PooledClientInstance {
22
- /** Unique identifier for this instance */
23
- id: string;
24
- /** Name of the template this instance was created from */
25
- templateName: string;
26
- /** MCP client instance */
27
- client: Client;
28
- /** Transport connected to upstream server */
29
- transport: AuthProviderTransport;
30
- /** Hash of the rendered configuration used to create this instance */
31
- renderedHash: string;
32
- /** Processed server configuration */
33
- processedConfig: MCPServerParams;
34
- /** Number of clients currently connected to this instance */
35
- referenceCount: number;
36
- /** Timestamp when this instance was created */
37
- createdAt: Date;
38
- /** Timestamp of last client activity */
39
- lastUsedAt: Date;
40
- /** Current status of the instance */
41
- status: 'active' | 'idle' | 'terminating';
42
- /** Set of client IDs connected to this instance */
43
- clientIds: Set<string>;
44
- /** Template-specific idle timeout */
45
- idleTimeout: number;
46
- }
3
+ import { ClientPoolOptions, PooledClientInstance } from './clientInstancePoolTypes.js';
4
+ export type { ClientPoolOptions, PooledClientInstance };
47
5
  /**
48
6
  * Manages a pool of MCP client instances created from templates
49
7
  *
@@ -59,6 +17,7 @@ export declare class ClientInstancePool {
59
17
  private options;
60
18
  private cleanupTimer?;
61
19
  private instanceCounter;
20
+ private pendingCreations;
62
21
  constructor(options?: Partial<ClientPoolOptions>);
63
22
  /**
64
23
  * Creates or retrieves a client instance for the given template and variables
@@ -75,11 +34,15 @@ export declare class ClientInstancePool {
75
34
  /**
76
35
  * Removes a client from an instance
77
36
  */
78
- removeClientFromInstance(instanceKey: string, clientId: string): void;
37
+ removeClientFromInstance(instanceKey: string, clientId: string, idleSince?: Date): void;
79
38
  /**
80
39
  * Gets an instance by its key
81
40
  */
82
41
  getInstance(instanceKey: string): PooledClientInstance | undefined;
42
+ /**
43
+ * Gets an instance key by its generated instance ID
44
+ */
45
+ getInstanceKeyById(instanceId: string): string | undefined;
83
46
  /**
84
47
  * Gets all instances for a specific template
85
48
  */
@@ -110,10 +73,6 @@ export declare class ClientInstancePool {
110
73
  templateCount: number;
111
74
  totalClients: number;
112
75
  };
113
- /**
114
- * Creates a new client instance and connects to upstream server
115
- */
116
- private createNewInstance;
117
76
  /**
118
77
  * Gets template configuration with proper defaults
119
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"clientInstancePool.d.ts","sourceRoot":"","sources":["../../../src/core/server/clientInstancePool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clientInstancePool.d.ts","sourceRoot":"","sources":["../../../src/core/server/clientInstancePool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAwB,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAE7G,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;AAExD;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAoD;gBAEhE,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAUpD;;OAEG;IACG,yBAAyB,CAC7B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,eAAe,EAC/B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,oBAAoB,CAAC;IAgGhC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IAoB3F;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,IAAiB,GAAG,IAAI;IAiCnG;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIlE;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAU1D;;OAEG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAWlE;;OAEG;IACH,eAAe,IAAI,oBAAoB,EAAE;IAIzC;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BxD;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC3C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC/B;;OAEG;IACH,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB;IAeD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAc1B"}
@@ -1,17 +1,8 @@
1
+ import { serializePoolIdentity, templateRenderedHash } from '../../core/server/templateIdentity.js';
1
2
  import logger, { debugIf, infoIf } from '../../logger/logger.js';
2
3
  import { HandlebarsTemplateRenderer } from '../../template/handlebarsTemplateRenderer.js';
3
- import { createTransportsWithContext } from '../../transport/transportFactory.js';
4
- import { getConnectionTimeout } from '../../utils/core/timeoutUtils.js';
5
- import { createHash } from '../../utils/crypto.js';
6
- /**
7
- * Default pool configuration
8
- */
9
- const DEFAULT_POOL_OPTIONS = {
10
- maxInstances: 10,
11
- idleTimeout: 5 * 60 * 1000, // 5 minutes
12
- cleanupInterval: 60 * 1000, // 1 minute
13
- maxTotalInstances: 100,
14
- };
4
+ import { createPooledClientInstance } from './clientInstanceFactory.js';
5
+ import { DEFAULT_POOL_OPTIONS } from './clientInstancePoolTypes.js';
15
6
  /**
16
7
  * Manages a pool of MCP client instances created from templates
17
8
  *
@@ -27,6 +18,7 @@ export class ClientInstancePool {
27
18
  options;
28
19
  cleanupTimer;
29
20
  instanceCounter = 0;
21
+ pendingCreations = new Map();
30
22
  constructor(options = {}) {
31
23
  this.options = { ...DEFAULT_POOL_OPTIONS, ...options };
32
24
  this.startCleanupTimer();
@@ -42,7 +34,7 @@ export class ClientInstancePool {
42
34
  // Render template with context data
43
35
  const renderer = new HandlebarsTemplateRenderer();
44
36
  const renderedConfig = renderer.renderTemplate(templateConfig, context);
45
- const renderedHash = createHash(JSON.stringify(renderedConfig));
37
+ const renderedHash = templateRenderedHash(renderedConfig);
46
38
  // Debug logging to verify template rendering
47
39
  debugIf(() => ({
48
40
  message: 'Template rendering details',
@@ -66,35 +58,57 @@ export class ClientInstancePool {
66
58
  }));
67
59
  // Get template configuration with proper defaults
68
60
  const templateSettings = this.getTemplateSettings(templateConfig, options);
69
- const instanceKey = this.createInstanceKey(templateName, renderedHash, templateSettings.perClient ? clientId : undefined);
61
+ const instanceKey = this.createInstanceKey(templateName, renderedHash, templateSettings.perClient || !templateSettings.shareable ? clientId : undefined);
70
62
  logger.info(`Template ${templateName}, renderedHash: ${renderedHash}, Instance key: ${instanceKey}`);
71
63
  // Check for existing instance
72
64
  const existingInstance = this.instances.get(instanceKey);
73
65
  if (existingInstance && existingInstance.status !== 'terminating') {
74
66
  // Check if this template is shareable
75
- if (templateSettings.shareable) {
67
+ if (templateSettings.shareable || existingInstance.clientIds.has(clientId)) {
76
68
  return this.addClientToInstance(existingInstance, clientId);
77
69
  }
78
70
  }
79
- // Check instance limits before creating new
80
- this.checkInstanceLimits(templateName);
81
- // Create new client instance
82
- const instance = await this.createNewInstance(templateName, templateConfig, renderedConfig, // Use rendered config directly
83
- renderedHash, // Use rendered hash
84
- clientId, templateSettings.idleTimeout);
85
- this.instances.set(instanceKey, instance);
86
- this.addToTemplateIndex(templateName, instanceKey);
87
- infoIf(() => ({
88
- message: 'Created new client instance from template',
89
- meta: {
90
- instanceId: instance.id,
71
+ const pendingCreation = this.pendingCreations.get(instanceKey);
72
+ if (pendingCreation) {
73
+ const instance = await pendingCreation;
74
+ if (instance.status !== 'terminating') {
75
+ return this.addClientToInstance(instance, clientId);
76
+ }
77
+ }
78
+ const instancePromise = (async () => {
79
+ // Check instance limits before creating new
80
+ this.checkInstanceLimits(templateName);
81
+ // Create new client instance
82
+ const instance = await createPooledClientInstance({
83
+ instanceId: this.generateInstanceId(),
84
+ instanceKey,
91
85
  templateName,
92
- renderedHash: renderedHash.substring(0, 8) + '...',
86
+ processedConfig: renderedConfig,
87
+ renderedHash,
93
88
  clientId,
94
- shareable: templateSettings.shareable,
95
- },
96
- }));
97
- return instance;
89
+ idleTimeout: templateSettings.idleTimeout,
90
+ });
91
+ this.instances.set(instanceKey, instance);
92
+ this.addToTemplateIndex(templateName, instanceKey);
93
+ infoIf(() => ({
94
+ message: 'Created new client instance from template',
95
+ meta: {
96
+ instanceId: instance.id,
97
+ templateName,
98
+ renderedHash: renderedHash.substring(0, 8) + '...',
99
+ clientId,
100
+ shareable: templateSettings.shareable,
101
+ },
102
+ }));
103
+ return instance;
104
+ })();
105
+ this.pendingCreations.set(instanceKey, instancePromise);
106
+ try {
107
+ return await instancePromise;
108
+ }
109
+ finally {
110
+ this.pendingCreations.delete(instanceKey);
111
+ }
98
112
  }
99
113
  /**
100
114
  * Adds a client to an existing instance
@@ -119,7 +133,7 @@ export class ClientInstancePool {
119
133
  /**
120
134
  * Removes a client from an instance
121
135
  */
122
- removeClientFromInstance(instanceKey, clientId) {
136
+ removeClientFromInstance(instanceKey, clientId, idleSince = new Date()) {
123
137
  const instance = this.instances.get(instanceKey);
124
138
  if (!instance) {
125
139
  return;
@@ -137,7 +151,7 @@ export class ClientInstancePool {
137
151
  // Mark as idle if no more clients
138
152
  if (instance.referenceCount === 0) {
139
153
  instance.status = 'idle';
140
- instance.lastUsedAt = new Date(); // Set lastUsedAt to when it became idle
154
+ instance.lastUsedAt = idleSince; // Set lastUsedAt to when it became idle
141
155
  infoIf(() => ({
142
156
  message: 'Client instance marked as idle',
143
157
  meta: {
@@ -153,6 +167,17 @@ export class ClientInstancePool {
153
167
  getInstance(instanceKey) {
154
168
  return this.instances.get(instanceKey);
155
169
  }
170
+ /**
171
+ * Gets an instance key by its generated instance ID
172
+ */
173
+ getInstanceKeyById(instanceId) {
174
+ for (const [instanceKey, instance] of this.instances) {
175
+ if (instance.id === instanceId) {
176
+ return instanceKey;
177
+ }
178
+ }
179
+ return undefined;
180
+ }
156
181
  /**
157
182
  * Gets all instances for a specific template
158
183
  */
@@ -256,6 +281,7 @@ export class ClientInstancePool {
256
281
  }));
257
282
  this.instances.clear();
258
283
  this.templateToInstances.clear();
284
+ this.pendingCreations.clear();
259
285
  debugIf(() => ({
260
286
  message: 'ClientInstancePool shutdown complete',
261
287
  meta: {
@@ -279,40 +305,6 @@ export class ClientInstancePool {
279
305
  totalClients,
280
306
  };
281
307
  }
282
- /**
283
- * Creates a new client instance and connects to upstream server
284
- */
285
- async createNewInstance(templateName, templateConfig, processedConfig, renderedHash, clientId, idleTimeout) {
286
- // Create transport for the upstream server
287
- const transports = await createTransportsWithContext({
288
- [templateName]: processedConfig,
289
- }, undefined);
290
- const transport = transports[templateName];
291
- if (!transport) {
292
- throw new Error(`Failed to create transport for template ${templateName}`);
293
- }
294
- // Create client instance
295
- const { ClientManager } = await import('../../core/client/clientManager.js');
296
- const clientManager = ClientManager.getOrCreateInstance();
297
- const client = clientManager.createPooledClientInstance();
298
- // Connect client to the upstream server, respecting connectionTimeout from transport config
299
- const connectionTimeout = getConnectionTimeout(transport);
300
- await client.connect(transport, connectionTimeout ? { timeout: connectionTimeout } : undefined);
301
- return {
302
- id: this.generateInstanceId(),
303
- templateName,
304
- client,
305
- transport,
306
- renderedHash,
307
- processedConfig,
308
- referenceCount: 1,
309
- createdAt: new Date(),
310
- lastUsedAt: new Date(),
311
- status: 'active',
312
- clientIds: new Set([clientId]),
313
- idleTimeout,
314
- };
315
- }
316
308
  /**
317
309
  * Gets template configuration with proper defaults
318
310
  */
@@ -337,10 +329,7 @@ export class ClientInstancePool {
337
329
  * Creates a unique instance key from template name and variable hash
338
330
  */
339
331
  createInstanceKey(templateName, variableHash, clientId) {
340
- if (clientId) {
341
- return `${templateName}:${variableHash}:${clientId}`;
342
- }
343
- return `${templateName}:${variableHash}`;
332
+ return serializePoolIdentity({ templateName, renderedHash: variableHash, sessionId: clientId });
344
333
  }
345
334
  /**
346
335
  * Generates a unique instance ID