@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.0

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 (374) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/omit-CqPQN3XP.js +1 -0
  39. package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +363 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +2 -56
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +2 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/client.types.d.ts +4 -32
  53. package/dist/server/shared/types/client.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/client.types.js +3 -2
  55. package/dist/server/shared/types/index.d.ts +3 -3
  56. package/dist/server/shared/types/index.d.ts.map +1 -1
  57. package/dist/server/shared/types/index.js +3 -3
  58. package/dist/server/shared/types/session-context.types.d.ts +35 -0
  59. package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
  60. package/dist/server/shared/types/session-context.types.js +5 -0
  61. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  62. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  63. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
  64. package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
  65. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  66. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  67. package/dist/server/src/api/mcp/gateway.js +34 -61
  68. package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
  69. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  70. package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
  71. package/dist/server/src/api/web/clients.js +2 -2
  72. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  73. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  74. package/dist/server/src/api/web/hub-tools.js +3 -54
  75. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  76. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  77. package/dist/server/src/api/web/mcp-status.js +71 -30
  78. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  79. package/dist/server/src/api/web/resources.js +28 -22
  80. package/dist/server/src/api/web/search.d.ts +2 -16
  81. package/dist/server/src/api/web/search.d.ts.map +1 -1
  82. package/dist/server/src/api/web/search.js +24 -45
  83. package/dist/server/src/api/web/servers.d.ts +3 -3
  84. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  85. package/dist/server/src/api/web/servers.js +70 -25
  86. package/dist/server/src/api/web/sessions.js +1 -1
  87. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  88. package/dist/server/src/api/ws/ws-handler.js +4 -2
  89. package/dist/server/src/app.d.ts.map +1 -1
  90. package/dist/server/src/app.js +0 -4
  91. package/dist/server/src/cli/commands/list.js +2 -2
  92. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  93. package/dist/server/src/cli/commands/status.js +41 -30
  94. package/dist/server/src/cli/index.d.ts.map +1 -1
  95. package/dist/server/src/cli/index.js +2 -1
  96. package/dist/server/src/cli/server.d.ts +11 -2
  97. package/dist/server/src/cli/server.d.ts.map +1 -1
  98. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  99. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  100. package/dist/server/src/config/config-change-logger.js +135 -11
  101. package/dist/server/src/config/config-loader.d.ts +6 -5
  102. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  103. package/dist/server/src/config/config-loader.js +54 -16
  104. package/dist/server/src/config/config-manager.d.ts +51 -43
  105. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  106. package/dist/server/src/config/config-manager.js +84 -66
  107. package/dist/server/src/config/config-migrator.d.ts +82 -0
  108. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  109. package/dist/server/src/config/config-migrator.js +348 -0
  110. package/dist/server/src/config/config-saver.d.ts +2 -0
  111. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  112. package/dist/server/src/config/config-saver.js +8 -2
  113. package/dist/server/src/config/config.schema.d.ts +10 -102
  114. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  115. package/dist/server/src/config/config.schema.js +15 -98
  116. package/dist/server/src/config/path-validator.d.ts +27 -0
  117. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  118. package/dist/server/src/config/path-validator.js +53 -0
  119. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  120. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  121. package/dist/server/src/config/server-config-manager.js +222 -66
  122. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  123. package/dist/server/src/config/type-converter.js +3 -2
  124. package/dist/server/src/index.js +1 -1
  125. package/dist/server/src/models/event.model.d.ts +17 -10
  126. package/dist/server/src/models/event.model.d.ts.map +1 -1
  127. package/dist/server/src/models/server.model.d.ts +17 -3
  128. package/dist/server/src/models/server.model.d.ts.map +1 -1
  129. package/dist/server/src/models/server.model.js +2 -1
  130. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  131. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  132. package/dist/server/src/models/system-tools.constants.js +4 -8
  133. package/dist/server/src/pid/manager.d.ts.map +1 -1
  134. package/dist/server/src/pid/manager.js +2 -1
  135. package/dist/server/src/server/dev-server.js +34 -20
  136. package/dist/server/src/server/runner.d.ts.map +1 -1
  137. package/dist/server/src/server/runner.js +41 -26
  138. package/dist/server/src/services/client-tracker.service.d.ts +3 -128
  139. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
  140. package/dist/server/src/services/client-tracker.service.js +4 -200
  141. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  142. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  143. package/dist/server/src/services/connection/connection-manager.js +286 -241
  144. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  145. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  146. package/dist/server/src/services/connection/tool-cache.js +50 -55
  147. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  148. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  150. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  151. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  152. package/dist/server/src/services/gateway/global-transport.js +42 -0
  153. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  155. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  156. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  157. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  158. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  159. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  160. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
  161. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  162. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  163. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  164. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  165. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  166. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  167. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  168. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  169. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  170. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  171. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  172. package/dist/server/src/services/gateway/types.d.ts +2 -1
  173. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  174. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  175. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-manager.service.js +89 -267
  177. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  178. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/index.js +1 -2
  180. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  181. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  182. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  183. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  184. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  185. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  186. package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
  187. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  188. package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
  189. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  190. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  191. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  192. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  193. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  194. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  195. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  196. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  197. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  198. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  199. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  200. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  201. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  202. package/dist/server/src/services/hub-tools.service.js +185 -110
  203. package/dist/server/src/services/search/search-cache.d.ts +0 -19
  204. package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
  205. package/dist/server/src/services/search/search-cache.js +0 -24
  206. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  207. package/dist/server/src/services/search/search-core.service.js +11 -11
  208. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  209. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  210. package/dist/server/src/services/session/session-manager.js +23 -583
  211. package/dist/server/src/services/session-tracker.service.d.ts +124 -0
  212. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/session-tracker.service.js +176 -0
  214. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  215. package/dist/server/src/services/system-tool-handler.js +7 -17
  216. package/dist/server/src/utils/composite-key.d.ts +29 -0
  217. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  218. package/dist/server/src/utils/composite-key.js +39 -0
  219. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  220. package/dist/server/src/utils/error-handler.js +3 -2
  221. package/dist/server/src/utils/index.d.ts +2 -0
  222. package/dist/server/src/utils/index.d.ts.map +1 -1
  223. package/dist/server/src/utils/index.js +2 -0
  224. package/dist/server/src/utils/instance-id.d.ts +22 -0
  225. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  226. package/dist/server/src/utils/instance-id.js +59 -0
  227. package/dist/server/src/utils/json-utils.d.ts +4 -4
  228. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  229. package/dist/server/src/utils/json-utils.js +10 -4
  230. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  231. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  232. package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
  233. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
  234. package/dist/server/src/utils/logger/log-colors.js +2 -1
  235. package/dist/server/src/utils/logger/log-context.d.ts +1 -0
  236. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
  237. package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
  238. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  239. package/dist/server/src/utils/logger/log-formatter.js +287 -5
  240. package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
  241. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  242. package/dist/server/src/utils/logger/log-modules.js +8 -8
  243. package/dist/server/src/utils/logger/log-output.d.ts +2 -2
  244. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
  245. package/dist/server/src/utils/logger/log-output.js +27 -6
  246. package/dist/server/src/utils/logger/logger.d.ts +13 -0
  247. package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
  248. package/dist/server/src/utils/logger/logger.js +42 -7
  249. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  250. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  251. package/dist/server/src/utils/parameter-validator.js +53 -0
  252. package/dist/server/src/utils/process-tree.d.ts +49 -0
  253. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  254. package/dist/server/src/utils/process-tree.js +285 -0
  255. package/dist/server/src/utils/request-context.d.ts +12 -30
  256. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  257. package/dist/server/src/utils/request-context.js +10 -30
  258. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  259. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  260. package/dist/server/src/utils/sort-utils.js +131 -0
  261. package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
  262. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
  263. package/dist/server/src/utils/tool-args-parser.js +0 -7
  264. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  265. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  266. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  267. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  268. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  269. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  270. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  271. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  272. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  273. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  274. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  275. package/dist/server/src/utils/transports/transport-factory.js +33 -13
  276. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  277. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  278. package/dist/server/src/utils/version.d.ts +11 -0
  279. package/dist/server/src/utils/version.d.ts.map +1 -0
  280. package/dist/server/src/utils/version.js +57 -0
  281. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  282. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  283. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  284. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  285. package/dist/server/tests/integration/api/gateway.test.js +24 -39
  286. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  287. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  288. package/dist/server/tests/server.test.js +27 -16
  289. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  290. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  291. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  292. package/dist/server/tests/temp/test-stack.d.ts +6 -0
  293. package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
  294. package/dist/server/tests/temp/test-stack.js +40 -0
  295. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  296. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  297. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  298. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  300. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  301. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  302. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  303. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  304. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  305. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  306. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  307. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  308. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  309. package/dist/server/tests/unit/server/runner.test.js +86 -62
  310. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  311. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  312. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  313. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  314. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  315. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  316. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  317. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  318. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  319. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  320. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  321. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
  322. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  323. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  324. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  325. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  326. package/dist/server/tests/unit/utils/config.test.js +88 -186
  327. package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
  328. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  329. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  330. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  331. package/dist/server/tests/unit/utils/logger.test.js +101 -0
  332. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  333. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  334. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  335. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  336. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  337. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  338. package/dist/server/tests/unit/utils/request-context.test.js +9 -28
  339. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  340. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  341. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  342. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  343. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  344. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  345. package/package.json +1 -1
  346. package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
  347. package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
  348. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  349. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
  350. package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
  351. package/dist/client/assets/ServerListView-DralUL71.js +0 -30
  352. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  353. package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
  354. package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
  355. package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
  356. package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
  357. package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
  358. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  359. package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
  360. package/dist/client/assets/el-input-CeZiq23m.js +0 -1
  361. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  362. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  363. package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
  364. package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
  365. package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
  366. package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
  367. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  368. package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
  369. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  370. package/dist/client/assets/index-COYaYRbH.js +0 -1
  371. package/dist/client/assets/index-Cfcvxyee.js +0 -2
  372. package/dist/client/assets/index-PhuI36Zi.js +0 -1
  373. package/dist/client/assets/omit-7EL6VJO4.js +0 -1
  374. package/dist/client/assets/vnode-upjuIlvm.js +0 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Object key sorting utilities for consistent configuration.
3
+ */
4
+ /**
5
+ * Sorts object keys alphabetically using localeCompare.
6
+ * Returns a new object with sorted keys, preserving the original object.
7
+ *
8
+ * @param obj - Object to sort
9
+ * @returns New object with sorted keys
10
+ */
11
+ export declare function sortObjectKeys<T extends Record<string, unknown>>(obj: T): T;
12
+ /**
13
+ * Sorts object keys alphabetically, case-insensitive.
14
+ * Returns a new object with sorted keys, preserving the original object and original key case.
15
+ *
16
+ * @param obj - Object to sort
17
+ * @returns New object with sorted keys (case-insensitive sort)
18
+ */
19
+ export declare function sortObjectKeysCaseInsensitive<T extends Record<string, unknown>>(obj: T): T;
20
+ /**
21
+ * Recursively sorts all object keys in a nested structure.
22
+ * Returns a new object with all nested keys sorted, preserving the original object.
23
+ *
24
+ * @param obj - Object to sort recursively
25
+ * @returns New object with all nested keys sorted
26
+ */
27
+ export declare function sortObjectKeysDeep<T>(obj: T): T;
28
+ /**
29
+ * Sorts env and headers objects in a server configuration.
30
+ * This is a convenience function for server template/instance configurations.
31
+ * Also normalizes URL fields by removing trailing slashes.
32
+ *
33
+ * @param config - Server configuration object with optional env and headers
34
+ * @returns New object with sorted env and headers keys and normalized URLs
35
+ */
36
+ export declare function sortServerConfigEnvHeaders<T extends {
37
+ env?: Record<string, string>;
38
+ headers?: Record<string, string>;
39
+ }>(config: T): T;
40
+ //# sourceMappingURL=sort-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/sort-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAa1F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAmB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC5E,MAAM,EAAE,CAAC,GAAG,CAAC,CAcd"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Object key sorting utilities for consistent configuration.
3
+ */
4
+ /**
5
+ * Normalizes a URL string by removing trailing slashes.
6
+ *
7
+ * @param url - The URL to normalize
8
+ * @returns Normalized URL
9
+ */
10
+ function normalizeUrl(url) {
11
+ return url.replace(/\/+$/, '');
12
+ }
13
+ /**
14
+ * Normalizes URL fields in a configuration object.
15
+ * Currently handles:
16
+ * - url fields at any level
17
+ * - proxy.url fields
18
+ *
19
+ * @param obj - Object to normalize
20
+ * @returns New object with normalized URLs
21
+ */
22
+ function normalizeConfigUrls(obj) {
23
+ if (!obj) {
24
+ return obj;
25
+ }
26
+ if (Array.isArray(obj)) {
27
+ return obj.map((item) => normalizeConfigUrls(item));
28
+ }
29
+ if (typeof obj === 'object') {
30
+ const result = {};
31
+ for (const [key, value] of Object.entries(obj)) {
32
+ if (key === 'url' && typeof value === 'string') {
33
+ result[key] = normalizeUrl(value);
34
+ }
35
+ else if (key === 'proxy' && typeof value === 'object' && value !== null) {
36
+ const proxy = value;
37
+ if (typeof proxy.url === 'string') {
38
+ result[key] = { ...proxy, url: normalizeUrl(proxy.url) };
39
+ }
40
+ else {
41
+ result[key] = normalizeConfigUrls(value);
42
+ }
43
+ }
44
+ else {
45
+ result[key] = normalizeConfigUrls(value);
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ return obj;
51
+ }
52
+ /**
53
+ * Sorts object keys alphabetically using localeCompare.
54
+ * Returns a new object with sorted keys, preserving the original object.
55
+ *
56
+ * @param obj - Object to sort
57
+ * @returns New object with sorted keys
58
+ */
59
+ export function sortObjectKeys(obj) {
60
+ if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
61
+ return obj;
62
+ }
63
+ const sortedObj = {};
64
+ const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
65
+ for (const key of keys) {
66
+ sortedObj[key] = obj[key];
67
+ }
68
+ return sortedObj;
69
+ }
70
+ /**
71
+ * Sorts object keys alphabetically, case-insensitive.
72
+ * Returns a new object with sorted keys, preserving the original object and original key case.
73
+ *
74
+ * @param obj - Object to sort
75
+ * @returns New object with sorted keys (case-insensitive sort)
76
+ */
77
+ export function sortObjectKeysCaseInsensitive(obj) {
78
+ if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
79
+ return obj;
80
+ }
81
+ const sortedObj = {};
82
+ const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
83
+ for (const key of keys) {
84
+ sortedObj[key] = obj[key];
85
+ }
86
+ return sortedObj;
87
+ }
88
+ /**
89
+ * Recursively sorts all object keys in a nested structure.
90
+ * Returns a new object with all nested keys sorted, preserving the original object.
91
+ *
92
+ * @param obj - Object to sort recursively
93
+ * @returns New object with all nested keys sorted
94
+ */
95
+ export function sortObjectKeysDeep(obj) {
96
+ if (!obj) {
97
+ return obj;
98
+ }
99
+ if (Array.isArray(obj)) {
100
+ return obj.map((item) => sortObjectKeysDeep(item));
101
+ }
102
+ if (typeof obj === 'object') {
103
+ const sortedObj = {};
104
+ const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
105
+ for (const key of keys) {
106
+ sortedObj[key] = sortObjectKeysDeep(obj[key]);
107
+ }
108
+ return sortedObj;
109
+ }
110
+ return obj;
111
+ }
112
+ /**
113
+ * Sorts env and headers objects in a server configuration.
114
+ * This is a convenience function for server template/instance configurations.
115
+ * Also normalizes URL fields by removing trailing slashes.
116
+ *
117
+ * @param config - Server configuration object with optional env and headers
118
+ * @returns New object with sorted env and headers keys and normalized URLs
119
+ */
120
+ export function sortServerConfigEnvHeaders(config) {
121
+ // First normalize URLs
122
+ const normalized = normalizeConfigUrls(config);
123
+ const result = { ...normalized };
124
+ if (result.env) {
125
+ result.env = sortObjectKeysCaseInsensitive(result.env);
126
+ }
127
+ if (result.headers) {
128
+ result.headers = sortObjectKeysCaseInsensitive(result.headers);
129
+ }
130
+ return result;
131
+ }
@@ -9,9 +9,5 @@ export declare class ToolArgsParser {
9
9
  serverName: string;
10
10
  toolName: string;
11
11
  } | null;
12
- /**
13
- * Validates tool argument types
14
- */
15
- static validateToolArgs(): boolean;
16
12
  }
17
13
  //# sourceMappingURL=tool-args-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-args-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/tool-args-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAyB/F;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,OAAO;CAInC"}
1
+ {"version":3,"file":"tool-args-parser.d.ts","sourceRoot":"","sources":["../../../../src/utils/tool-args-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAwBhG"}
@@ -24,11 +24,4 @@ export class ToolArgsParser {
24
24
  toolName: parsedToolName
25
25
  };
26
26
  }
27
- /**
28
- * Validates tool argument types
29
- */
30
- static validateToolArgs() {
31
- // 可以根据工具名称验证参数类型
32
- return true;
33
- }
34
27
  }
@@ -31,9 +31,12 @@ export declare class SseTransport implements Transport {
31
31
  private headers;
32
32
  private reconnectInterval;
33
33
  private maxReconnectAttempts;
34
+ private proxy?;
34
35
  private eventSource;
35
36
  private reconnectAttempts;
36
37
  private isClosing;
38
+ private _serverName?;
39
+ private _compositeKey?;
37
40
  onmessage?: (message: JSONRPCMessage) => void;
38
41
  onerror?: (error: Error) => void;
39
42
  onclose?: () => void;
@@ -44,8 +47,20 @@ export declare class SseTransport implements Transport {
44
47
  * @param headers - Optional HTTP headers to include in the SSE connection request
45
48
  * @param reconnectInterval - Time interval (in milliseconds) between reconnection attempts (default: 3000ms)
46
49
  * @param maxReconnectAttempts - Maximum number of reconnection attempts before giving up (default: 5)
50
+ * @param proxy - Optional proxy configuration
51
+ * @param serverName - Optional server name for logging
52
+ * @param compositeKey - Optional composite key (serverName-serverIndex) for logging
47
53
  */
48
- constructor(url: string, headers?: Record<string, string>, reconnectInterval?: number, maxReconnectAttempts?: number);
54
+ constructor(url: string, headers?: Record<string, string>, reconnectInterval?: number, maxReconnectAttempts?: number, proxy?: {
55
+ url: string;
56
+ } | undefined, serverName?: string, compositeKey?: string);
57
+ /**
58
+ * Helper method to format log messages with server context.
59
+ *
60
+ * @param message - The base message
61
+ * @returns Formatted message with server context if available
62
+ */
63
+ private formatLogMessage;
49
64
  /**
50
65
  * Initializes and starts the SSE connection to the specified URL.
51
66
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sse-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/sse-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAM1E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,YAAa,YAAW,SAAS;IAkB1C,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,oBAAoB;IApB9B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAS;IAEnB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;;;;;OAOG;gBAEO,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,iBAAiB,GAAE,MAAa,EAChC,oBAAoB,GAAE,MAAU;IAG1C;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0D5B;;;;;;;;OAQG;YACW,OAAO;IAOrB;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;;OAQG;YACW,aAAa;IAQ3B;;;;;;;;;;;;OAYG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBnD"}
1
+ {"version":3,"file":"sse-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/sse-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAQ1E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,YAAa,YAAW,SAAS;IAuB1C,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,KAAK,CAAC;IA1BhB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAExB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAE5B;;;;;;;;;;OAUG;gBAEO,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,iBAAiB,GAAE,MAAa,EAChC,oBAAoB,GAAE,MAAU,EAChC,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,YAAA,EAC/B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyG5B;;;;;;;;OAQG;YACW,OAAO;IAOrB;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;;OAQG;YACW,aAAa;IAQ3B;;;;;;;;;;;;OAYG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBnD"}
@@ -1,4 +1,6 @@
1
1
  import { logger } from '../logger.js';
2
+ import { LOG_MODULES } from '../logger/log-modules.js';
3
+ import { ProxyAgent, fetch as undiciFetch } from 'undici';
2
4
  // Use EventSource from the 'eventsource' package for Node.js compatibility
3
5
  import { EventSource } from 'eventsource';
4
6
  /**
@@ -32,9 +34,12 @@ export class SseTransport {
32
34
  headers;
33
35
  reconnectInterval;
34
36
  maxReconnectAttempts;
37
+ proxy;
35
38
  eventSource = null;
36
39
  reconnectAttempts = 0;
37
40
  isClosing = false;
41
+ _serverName;
42
+ _compositeKey;
38
43
  onmessage;
39
44
  onerror;
40
45
  onclose;
@@ -45,12 +50,35 @@ export class SseTransport {
45
50
  * @param headers - Optional HTTP headers to include in the SSE connection request
46
51
  * @param reconnectInterval - Time interval (in milliseconds) between reconnection attempts (default: 3000ms)
47
52
  * @param maxReconnectAttempts - Maximum number of reconnection attempts before giving up (default: 5)
53
+ * @param proxy - Optional proxy configuration
54
+ * @param serverName - Optional server name for logging
55
+ * @param compositeKey - Optional composite key (serverName-serverIndex) for logging
48
56
  */
49
- constructor(url, headers = {}, reconnectInterval = 3000, maxReconnectAttempts = 5) {
57
+ constructor(url, headers = {}, reconnectInterval = 3000, maxReconnectAttempts = 5, proxy, serverName, compositeKey) {
50
58
  this.url = url;
51
59
  this.headers = headers;
52
60
  this.reconnectInterval = reconnectInterval;
53
61
  this.maxReconnectAttempts = maxReconnectAttempts;
62
+ this.proxy = proxy;
63
+ this._serverName = serverName;
64
+ this._compositeKey = compositeKey;
65
+ }
66
+ /**
67
+ * Helper method to format log messages with server context.
68
+ *
69
+ * @param message - The base message
70
+ * @returns Formatted message with server context if available
71
+ */
72
+ formatLogMessage(message) {
73
+ if (this._compositeKey) {
74
+ return `${message} (compositeKey=${this._compositeKey}, url=${this.url})`;
75
+ }
76
+ else if (this._serverName) {
77
+ return `${message} (server=${this._serverName}, url=${this.url})`;
78
+ }
79
+ else {
80
+ return `${message} (url=${this.url})`;
81
+ }
54
82
  }
55
83
  /**
56
84
  * Initializes and starts the SSE connection to the specified URL.
@@ -75,6 +103,24 @@ export class SseTransport {
75
103
  if (Object.keys(this.headers).length > 0) {
76
104
  options.headers = this.headers;
77
105
  }
106
+ const proxyInfo = this.proxy?.url ? `, proxy=${this.proxy.url}` : '';
107
+ logger.info(this.formatLogMessage(`Attempting to connect to SSE server${proxyInfo}`), LOG_MODULES.SSE_TRANSPORT);
108
+ // Add proxy support if configured
109
+ if (this.proxy?.url) {
110
+ const agent = new ProxyAgent(this.proxy.url);
111
+ // Create custom fetch function with proxy
112
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
113
+ const customFetch = (input, init) => {
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
+ const fetchOptions = {
116
+ ...init,
117
+ dispatcher: agent
118
+ };
119
+ return undiciFetch(input, fetchOptions);
120
+ };
121
+ options.fetch = customFetch;
122
+ logger.info(this.formatLogMessage(`SSE transport configured with proxy: ${this.proxy.url}`), LOG_MODULES.SSE_TRANSPORT);
123
+ }
78
124
  this.eventSource = new EventSource(this.url, options);
79
125
  this.eventSource.onmessage = (event) => {
80
126
  try {
@@ -83,34 +129,34 @@ export class SseTransport {
83
129
  this.reconnectAttempts = 0; // Reset on successful message
84
130
  }
85
131
  catch (error) {
86
- logger.error('Failed to parse SSE message:', error);
132
+ logger.error(this.formatLogMessage('Failed to parse SSE message'), error, LOG_MODULES.SSE_TRANSPORT);
87
133
  this.onerror?.(new Error(`Invalid JSON in SSE message: ${event.data}`));
88
134
  }
89
135
  };
90
136
  this.eventSource.onerror = () => {
91
137
  const error = new Error(`SSE connection error for ${this.url}`);
92
- logger.error('SSE connection error:', error);
138
+ logger.error(this.formatLogMessage('SSE connection error'), error, LOG_MODULES.SSE_TRANSPORT);
93
139
  if (!this.isClosing) {
94
140
  this.reconnectAttempts++;
95
141
  if (this.reconnectAttempts <= this.maxReconnectAttempts) {
96
- logger.info(`Attempting to reconnect SSE (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
142
+ logger.info(this.formatLogMessage(`Attempting to reconnect SSE (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`), LOG_MODULES.SSE_TRANSPORT);
97
143
  setTimeout(() => {
98
144
  this.restart();
99
145
  }, this.reconnectInterval);
100
146
  }
101
147
  else {
102
- logger.error('Max reconnection attempts reached for SSE');
148
+ logger.error(this.formatLogMessage('Max reconnection attempts reached for SSE'), LOG_MODULES.SSE_TRANSPORT);
103
149
  this.onerror?.(error);
104
150
  this.closeInternal();
105
151
  }
106
152
  }
107
153
  };
108
154
  this.eventSource.onopen = () => {
109
- logger.info(`SSE connection opened to ${this.url}`);
155
+ logger.info(this.formatLogMessage('SSE connection opened'), LOG_MODULES.SSE_TRANSPORT);
110
156
  };
111
157
  }
112
158
  catch (error) {
113
- logger.error('Failed to create SSE connection:', error);
159
+ logger.error(this.formatLogMessage('Failed to create SSE connection'), error, LOG_MODULES.SSE_TRANSPORT);
114
160
  throw error;
115
161
  }
116
162
  }
@@ -180,10 +226,10 @@ export class SseTransport {
180
226
  // Type-safe way to access message properties
181
227
  const messageId = 'id' in message ? String(message.id) : 'unknown';
182
228
  const method = 'method' in message ? String(message.method) : 'unknown';
183
- logger.warn('Attempted to send message via SSE transport', {
229
+ logger.warn(this.formatLogMessage('Attempted to send message via SSE transport'), {
184
230
  messageId,
185
231
  method
186
- });
232
+ }, LOG_MODULES.SSE_TRANSPORT);
187
233
  throw error;
188
234
  }
189
235
  }
@@ -1,21 +1,16 @@
1
- import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
1
+ import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js';
2
2
  import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
3
+ import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js';
3
4
  import type { LogStorageService } from '../../services/log-storage.service.js';
4
- export interface StdioServerParameters {
5
- command: string;
6
- args?: string[];
7
- env?: NodeJS.ProcessEnv;
8
- stderr?: 'inherit' | 'pipe' | 'ignore';
9
- cwd?: string;
10
- }
5
+ import { PassThrough } from 'stream';
11
6
  export interface StdioTransportOptions {
12
- serverId?: string;
7
+ compositeKey?: string;
13
8
  logStorage?: LogStorageService;
14
9
  }
15
10
  /**
16
11
  * A transport implementation for communicating with MCP (Model Context Protocol) servers
17
- * via standard input/output streams. This transport spawns a child process and establishes
18
- * bidirectional communication using stdin/stdout for JSON-RPC message exchange.
12
+ * via standard input/output streams. This transport wraps the official SDK's StdioClientTransport
13
+ * and provides consistent logging and integration with the MCP Hub Lite system.
19
14
  *
20
15
  * The StdioTransport handles:
21
16
  * - Cross-platform process spawning (including Windows batch file compatibility)
@@ -30,19 +25,11 @@ export interface StdioTransportOptions {
30
25
  * @implements {Transport}
31
26
  */
32
27
  export declare class StdioTransport implements Transport {
33
- private _process?;
34
- private _readBuffer;
35
- private _stderrStream;
36
- private _serverParams;
28
+ private _transport;
37
29
  private _serverName?;
38
- private _serverId?;
30
+ private _compositeKey?;
39
31
  private _logStorage?;
40
- /**
41
- * Gets the process ID of the spawned child process.
42
- *
43
- * @returns {number | undefined} The PID of the child process, or undefined if not started
44
- */
45
- get pid(): number | undefined;
32
+ private _stderrStream;
46
33
  onclose?: () => void;
47
34
  onerror?: (error: Error) => void;
48
35
  onmessage?: (message: JSONRPCMessage) => void;
@@ -59,11 +46,11 @@ export declare class StdioTransport implements Transport {
59
46
  /**
60
47
  * Starts the transport by spawning the child process and establishing communication channels.
61
48
  *
62
- * This method handles platform-specific considerations:
63
- * - On Windows, it automatically wraps batch commands (like npx, npm, etc.) with cmd.exe /c
64
- * - Sets up proper stdio configuration based on the server parameters
65
- * - Configures event listeners for process lifecycle events
66
- * - Establishes data flow for stdout and stderr handling
49
+ * This method delegates to the SDK's StdioClientTransport.start() method which handles:
50
+ * - Platform-specific process spawning (including Windows batch file compatibility)
51
+ * - Proper stdio configuration
52
+ * - Event listeners for process lifecycle events
53
+ * - Data flow for stdout and stderr handling
67
54
  *
68
55
  * @returns {Promise<void>} Resolves when the child process is successfully spawned
69
56
  * @throws {Error} If the transport is already started
@@ -72,36 +59,23 @@ export declare class StdioTransport implements Transport {
72
59
  /**
73
60
  * Gets the stderr stream for the child process.
74
61
  *
75
- * Returns a PassThrough stream if stderr is configured as 'pipe', otherwise returns
76
- * the actual stderr stream from the child process, or null if no stderr is available.
62
+ * Returns our PassThrough stream that captures stderr data.
77
63
  *
78
- * @returns {PassThrough | NodeJS.ReadableStream | null} The stderr stream or null
64
+ * @returns {PassThrough | null} The stderr stream or null
79
65
  */
80
- get stderr(): import("node:stream").Readable | null;
66
+ get stderr(): PassThrough | null;
81
67
  /**
82
- * Processes the internal read buffer to extract and dispatch JSON-RPC messages.
83
- *
84
- * This method continuously reads complete JSON-RPC messages from the buffer
85
- * and dispatches them to the onmessage callback. It handles partial messages
86
- * by leaving incomplete data in the buffer for future processing.
87
- *
88
- * The method uses a while loop to process all available complete messages
89
- * in a single call, ensuring efficient message handling without blocking.
68
+ * Gets the process ID of the spawned child process.
90
69
  *
91
- * @private
70
+ * @returns {number | undefined} The PID of the child process, or undefined if not started
92
71
  */
93
- processReadBuffer(): void;
72
+ get pid(): number | undefined;
94
73
  /**
95
74
  * Closes the transport by gracefully terminating the child process.
96
75
  *
97
- * This method implements a graceful shutdown sequence:
98
- * 1. Sends SIGTERM to allow the child process to clean up
99
- * 2. Waits up to 5 seconds for graceful termination
100
- * 3. Forces termination with SIGKILL if the process doesn't exit
101
- * 4. Cleans up internal state and resolves the promise
102
- *
103
- * The method ensures proper cleanup of the read buffer and handles
104
- * any errors that occur during the shutdown process.
76
+ * This method delegates to the SDK's StdioClientTransport.close() method which handles:
77
+ * - Graceful shutdown sequence with SIGTERM/SIGKILL
78
+ * - Proper cleanup of internal state
105
79
  *
106
80
  * @returns {Promise<void>} Resolves when the transport is fully closed
107
81
  */
@@ -109,13 +83,10 @@ export declare class StdioTransport implements Transport {
109
83
  /**
110
84
  * Sends a JSON-RPC message to the child process via stdin.
111
85
  *
112
- * This method serializes the message to JSON, appends a newline character,
113
- * and writes it to the child process's stdin stream. It validates that
114
- * the transport is connected before attempting to send the message.
86
+ * This method delegates to the SDK's StdioClientTransport.send() method.
115
87
  *
116
88
  * @param {JSONRPCMessage} message - The JSON-RPC message to send
117
89
  * @returns {Promise<void>} Resolves when the message is written to stdin
118
- * @throws {Error} If the transport is not connected (no active child process)
119
90
  */
120
91
  send(message: JSONRPCMessage): Promise<void>;
121
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAgC1E,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAC,CAAoB;IAExC;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEM,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;;;OAMG;gBACS,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAU/F;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmJ5B;;;;;;;OAOG;IACH,IAAI,MAAM,0CAET;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB;IAcjB;;;;;;;;;;;;;OAaG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnD"}
1
+ {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../../../../src/utils/transports/stdio-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,aAAa,CAA4B;IAE1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;;;;;OAMG;gBACS,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAiB/F;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;;;;;OAMG;IACH,IAAI,MAAM,uBAET;IAED;;;;OAIG;IACH,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD"}