@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1

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 (322) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
  6. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
  9. package/dist/client/assets/ServerDetail-BLQ-a4cO.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-BHrsFD5i.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
  14. package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
  17. package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
  18. package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
  19. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
  20. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  21. package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
  24. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
  27. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  28. package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
  29. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  30. package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
  31. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  32. package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
  33. package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
  36. package/dist/client/assets/index-ByNBhPAR.js +1 -0
  37. package/dist/client/assets/index-CTB6oe-9.js +2 -0
  38. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  39. package/dist/client/assets/omit-CUnDT6sS.js +1 -0
  40. package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
  41. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
  42. package/dist/client/index.html +3 -3
  43. package/dist/server/shared/models/resource.model.d.ts +2 -1
  44. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  45. package/dist/server/shared/models/server.model.d.ts +362 -5
  46. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  47. package/dist/server/shared/models/server.model.js +220 -1
  48. package/dist/server/shared/models/session.model.d.ts +1 -57
  49. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  50. package/dist/server/shared/models/session.model.js +1 -55
  51. package/dist/server/shared/models/tool.model.d.ts +4 -2
  52. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  53. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  54. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  55. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  56. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  57. package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
  58. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  59. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/gateway.js +32 -49
  61. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  62. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  63. package/dist/server/src/api/web/hub-tools.js +3 -54
  64. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  65. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  66. package/dist/server/src/api/web/mcp-status.js +71 -30
  67. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  68. package/dist/server/src/api/web/resources.js +28 -22
  69. package/dist/server/src/api/web/search.d.ts +2 -16
  70. package/dist/server/src/api/web/search.d.ts.map +1 -1
  71. package/dist/server/src/api/web/search.js +24 -45
  72. package/dist/server/src/api/web/servers.d.ts +3 -3
  73. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  74. package/dist/server/src/api/web/servers.js +70 -25
  75. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  76. package/dist/server/src/api/ws/ws-handler.js +4 -2
  77. package/dist/server/src/app.d.ts.map +1 -1
  78. package/dist/server/src/app.js +0 -2
  79. package/dist/server/src/cli/commands/list.js +2 -2
  80. package/dist/server/src/cli/commands/server.d.ts +57 -0
  81. package/dist/server/src/cli/commands/server.d.ts.map +1 -0
  82. package/dist/server/src/cli/commands/server.js +169 -0
  83. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  84. package/dist/server/src/cli/commands/status.js +41 -30
  85. package/dist/server/src/cli/index.d.ts.map +1 -1
  86. package/dist/server/src/cli/index.js +2 -1
  87. package/dist/server/src/cli/server.d.ts +11 -2
  88. package/dist/server/src/cli/server.d.ts.map +1 -1
  89. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  90. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  91. package/dist/server/src/config/config-change-logger.js +135 -11
  92. package/dist/server/src/config/config-loader.d.ts +6 -5
  93. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  94. package/dist/server/src/config/config-loader.js +54 -16
  95. package/dist/server/src/config/config-manager.d.ts +51 -43
  96. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  97. package/dist/server/src/config/config-manager.js +84 -66
  98. package/dist/server/src/config/config-migrator.d.ts +82 -0
  99. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  100. package/dist/server/src/config/config-migrator.js +348 -0
  101. package/dist/server/src/config/config-saver.d.ts +2 -0
  102. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  103. package/dist/server/src/config/config-saver.js +8 -2
  104. package/dist/server/src/config/config.schema.d.ts +10 -104
  105. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  106. package/dist/server/src/config/config.schema.js +15 -99
  107. package/dist/server/src/config/path-validator.d.ts +27 -0
  108. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  109. package/dist/server/src/config/path-validator.js +53 -0
  110. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  111. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  112. package/dist/server/src/config/server-config-manager.js +222 -66
  113. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  114. package/dist/server/src/config/type-converter.js +3 -2
  115. package/dist/server/src/models/event.model.d.ts +17 -10
  116. package/dist/server/src/models/event.model.d.ts.map +1 -1
  117. package/dist/server/src/models/server.model.d.ts +17 -3
  118. package/dist/server/src/models/server.model.d.ts.map +1 -1
  119. package/dist/server/src/models/server.model.js +2 -1
  120. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  121. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  122. package/dist/server/src/models/system-tools.constants.js +4 -8
  123. package/dist/server/src/pid/manager.d.ts.map +1 -1
  124. package/dist/server/src/pid/manager.js +2 -1
  125. package/dist/server/src/server/dev-server.js +34 -20
  126. package/dist/server/src/server/runner.d.ts.map +1 -1
  127. package/dist/server/src/server/runner.js +41 -26
  128. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  129. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/connection-manager.js +286 -241
  131. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  132. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  133. package/dist/server/src/services/connection/tool-cache.js +50 -55
  134. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  135. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  136. package/dist/server/src/services/gateway/gateway.service.js +53 -23
  137. package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
  138. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  139. package/dist/server/src/services/gateway/global-transport.js +66 -0
  140. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  142. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  143. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  145. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  146. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  147. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
  148. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  149. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  150. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  151. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  152. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  153. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  155. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  156. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  157. package/dist/server/src/services/gateway/types.d.ts +2 -1
  158. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  159. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  160. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  161. package/dist/server/src/services/hub-manager.service.js +89 -267
  162. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  163. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  164. package/dist/server/src/services/hub-tools/index.js +1 -2
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  167. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  170. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  173. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  175. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  181. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  182. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  183. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  184. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  185. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  186. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  187. package/dist/server/src/services/hub-tools.service.js +185 -110
  188. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  189. package/dist/server/src/services/system-tool-handler.js +7 -17
  190. package/dist/server/src/utils/composite-key.d.ts +29 -0
  191. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  192. package/dist/server/src/utils/composite-key.js +39 -0
  193. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  194. package/dist/server/src/utils/error-handler.js +3 -2
  195. package/dist/server/src/utils/index.d.ts +2 -0
  196. package/dist/server/src/utils/index.d.ts.map +1 -1
  197. package/dist/server/src/utils/index.js +2 -0
  198. package/dist/server/src/utils/instance-id.d.ts +22 -0
  199. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  200. package/dist/server/src/utils/instance-id.js +59 -0
  201. package/dist/server/src/utils/json-utils.d.ts +4 -4
  202. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  203. package/dist/server/src/utils/json-utils.js +4 -4
  204. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  205. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  206. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  207. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  208. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  209. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  210. package/dist/server/src/utils/logger/log-modules.js +8 -6
  211. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  212. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  213. package/dist/server/src/utils/parameter-validator.js +53 -0
  214. package/dist/server/src/utils/process-tree.d.ts +49 -0
  215. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  216. package/dist/server/src/utils/process-tree.js +285 -0
  217. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  218. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  219. package/dist/server/src/utils/sort-utils.js +131 -0
  220. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  221. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  222. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  223. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  224. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  225. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  226. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  227. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  228. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  229. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  230. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  231. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  232. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  233. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  234. package/dist/server/src/utils/version.d.ts +11 -0
  235. package/dist/server/src/utils/version.d.ts.map +1 -0
  236. package/dist/server/src/utils/version.js +57 -0
  237. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  238. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  239. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  240. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  241. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  242. package/dist/server/tests/server.test.js +27 -16
  243. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  244. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  245. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  246. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  247. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  248. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  249. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  250. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  251. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  252. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  253. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  254. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  255. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  256. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  257. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  258. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  259. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  260. package/dist/server/tests/unit/server/runner.test.js +86 -62
  261. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  262. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  263. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  264. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  265. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  266. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  267. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  269. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  270. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  272. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  273. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  276. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  277. package/dist/server/tests/unit/utils/config.test.js +88 -186
  278. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  279. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  280. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  281. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  282. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  283. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  284. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  285. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  286. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  288. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  289. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  290. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  291. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  294. package/package.json +3 -1
  295. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  296. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  297. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  298. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  299. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  300. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  301. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  302. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  303. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  304. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  305. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  306. package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
  307. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  308. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  309. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  310. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  311. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  312. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  313. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  314. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  315. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  316. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  317. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  318. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  319. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  320. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  321. package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
  322. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -0,0 +1,285 @@
1
+ import { spawn } from 'child_process';
2
+ import { logger, LOG_MODULES } from './logger.js';
3
+ /**
4
+ * Windows Process Tree Utility Module
5
+ *
6
+ * This module provides process tree management utilities specifically for Windows.
7
+ * It handles the case where shell: true spawns cmd.exe which then spawns
8
+ * the actual working process (like node.exe, python.exe, etc.).
9
+ *
10
+ * On non-Windows platforms, all methods return safe default values
11
+ * and don't perform any actual operations.
12
+ */
13
+ /**
14
+ * Gets all child process IDs for a given parent PID on Windows.
15
+ *
16
+ * @param pid - Parent process ID
17
+ @returns Promise resolving to array of child PID
18
+ */
19
+ export async function getChildren(pid) {
20
+ if (process.platform !== 'win32') {
21
+ return [];
22
+ }
23
+ try {
24
+ const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq ${pid} } | Select-Object -ExpandProperty ProcessId`);
25
+ const pids = parsePidList(result);
26
+ return pids;
27
+ }
28
+ catch (error) {
29
+ logger.debug(`Failed to get children for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
30
+ return [];
31
+ }
32
+ }
33
+ /**
34
+ * Gets the entire process tree (all descendants) for a given PID.
35
+ * Includes the original PID at the beginning of the array.
36
+ *
37
+ * @param pid - Root process ID
38
+ * @returns Array of all process IDs in the tree
39
+ */
40
+ export async function getProcessTree(pid) {
41
+ if (process.platform !== 'win32') {
42
+ return [pid];
43
+ }
44
+ const tree = [pid];
45
+ const queue = [pid];
46
+ while (queue.length > 0) {
47
+ const current = queue.shift();
48
+ const children = await getChildren(current);
49
+ for (const child of children) {
50
+ if (!tree.includes(child)) {
51
+ tree.push(child);
52
+ queue.push(child);
53
+ }
54
+ }
55
+ }
56
+ return tree;
57
+ }
58
+ /**
59
+ * Checks if any process in the process tree is still running.
60
+ *
61
+ * @param pid - Root process ID
62
+ * @returns True if any process in the tree is running
63
+ */
64
+ export async function isAnyInTreeRunning(pid) {
65
+ if (process.platform !== 'win32') {
66
+ return isProcessRunning(pid);
67
+ }
68
+ try {
69
+ const tree = await getProcessTree(pid);
70
+ for (const processId of tree) {
71
+ if (isProcessRunning(processId)) {
72
+ return true;
73
+ }
74
+ }
75
+ return false;
76
+ }
77
+ catch (error) {
78
+ logger.debug(`Error checking process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
79
+ return isProcessRunning(pid);
80
+ }
81
+ }
82
+ /**
83
+ * Tries to find the actual working process PID in the tree.
84
+ * This looks for processes that are likely the actual worker
85
+ * (node.exe, python.exe, etc.) rather than shell processes.
86
+ *
87
+ * @param pid - Root process ID
88
+ * @returns Working process PID if found, undefined otherwise
89
+ */
90
+ export async function getWorkingProcessPid(pid) {
91
+ if (process.platform !== 'win32') {
92
+ return pid;
93
+ }
94
+ try {
95
+ const tree = await getProcessTree(pid);
96
+ // If only the root process is in the tree, return it
97
+ if (tree.length === 1) {
98
+ return pid;
99
+ }
100
+ // Get process names for all PIDs in the tree
101
+ const processInfo = await getProcessInfo(tree);
102
+ // Filter out shell processes (cmd.exe, powershell.exe, etc.)
103
+ const workerProcesses = processInfo.filter((info) => !isShellProcess(info.name));
104
+ if (workerProcesses.length > 0) {
105
+ // Prefer the deepest (last) worker process in the tree
106
+ return workerProcesses[workerProcesses.length - 1].pid;
107
+ }
108
+ // If no worker processes found, return the last process in the tree
109
+ return tree[tree.length - 1];
110
+ }
111
+ catch (error) {
112
+ logger.debug(`Error finding working process for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
113
+ return pid;
114
+ }
115
+ }
116
+ /**
117
+ * Kills the entire process tree.
118
+ *
119
+ * @param pid - Root process ID
120
+ * @param signal - Signal to send (default: SIGTERM)
121
+ */
122
+ export async function killProcessTree(pid, signal = 'SIGTERM') {
123
+ if (process.platform !== 'win32') {
124
+ // On non-Windows, just kill the single process
125
+ try {
126
+ process.kill(pid, signal);
127
+ }
128
+ catch {
129
+ // Process might already be dead
130
+ }
131
+ return;
132
+ }
133
+ try {
134
+ const tree = await getProcessTree(pid);
135
+ // Kill processes in reverse order (children first, parent last)
136
+ for (let i = tree.length - 1; i >= 0; i--) {
137
+ const processId = tree[i];
138
+ try {
139
+ process.kill(processId, signal);
140
+ }
141
+ catch {
142
+ // Process might already be dead
143
+ }
144
+ }
145
+ }
146
+ catch (error) {
147
+ logger.debug(`Error killing process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
148
+ // Fallback: try to kill just the root process
149
+ try {
150
+ process.kill(pid, signal);
151
+ }
152
+ catch {
153
+ // Process might already be dead
154
+ }
155
+ }
156
+ }
157
+ // ==================== Internal Helper Functions ====================
158
+ /**
159
+ * Checks if a single process is running.
160
+ *
161
+ * @param pid - Process ID
162
+ * @returns True if process is running
163
+ */
164
+ function isProcessRunning(pid) {
165
+ try {
166
+ process.kill(pid, 0);
167
+ return true;
168
+ }
169
+ catch {
170
+ return false;
171
+ }
172
+ }
173
+ /**
174
+ * Executes a PowerShell command and returns the output.
175
+ *
176
+ * @param command - PowerShell command
177
+ * @returns Command output
178
+ */
179
+ async function executePowerShellCommand(command) {
180
+ return new Promise((resolve, reject) => {
181
+ const ps = spawn('powershell.exe', ['-Command', command], {
182
+ windowsHide: true,
183
+ stdio: ['ignore', 'pipe', 'pipe']
184
+ });
185
+ let stdout = '';
186
+ let stderr = '';
187
+ ps.stdout?.on('data', (data) => {
188
+ stdout += data.toString();
189
+ });
190
+ ps.stderr?.on('data', (data) => {
191
+ stderr += data.toString();
192
+ });
193
+ ps.on('close', (code) => {
194
+ if (code === 0) {
195
+ resolve(stdout.trim());
196
+ }
197
+ else {
198
+ reject(new Error(`PowerShell command failed: ${stderr || stdout}`));
199
+ }
200
+ });
201
+ ps.on('error', (error) => {
202
+ reject(error);
203
+ });
204
+ });
205
+ }
206
+ /**
207
+ * Parses a list of PIDs from command output.
208
+ *
209
+ * @param output - Command output
210
+ * * @returns Array of PIDs
211
+ */
212
+ function parsePidList(output) {
213
+ const lines = output
214
+ .split('\n')
215
+ .map((line) => line.trim())
216
+ .filter((line) => line.length > 0);
217
+ const pids = [];
218
+ for (const line of lines) {
219
+ const pid = parseInt(line, 10);
220
+ if (!isNaN(pid) && pid > 0) {
221
+ pids.push(pid);
222
+ }
223
+ }
224
+ return pids;
225
+ }
226
+ /**
227
+ * Gets process information for multiple PIDs.
228
+ *
229
+ * @param pids - Array of process IDs
230
+ * @returns Array of process info objects
231
+ */
232
+ async function getProcessInfo(pids) {
233
+ if (pids.length === 0) {
234
+ return [];
235
+ }
236
+ const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { ${pids.map((pid) => `$_.ProcessId -eq ${pid}`).join(' -or ')} } | Select-Object ProcessId, Name | ConvertTo-Csv -NoTypeInformation`);
237
+ return parseProcessInfoCsv(result);
238
+ }
239
+ /**
240
+ * Parses process info from CSV output.
241
+ *
242
+ * @param csvOutput - CSV output from PowerShell
243
+ * @ *returns Array of process info
244
+ */
245
+ function parseProcessInfoCsv(csvOutput) {
246
+ const lines = csvOutput
247
+ .split('\n')
248
+ .map((line) => line.trim())
249
+ .filter((line) => line.length > 0);
250
+ if (lines.length < 2) {
251
+ return [];
252
+ }
253
+ const info = [];
254
+ // Skip header line
255
+ for (let i = 1; i < lines.length; i++) {
256
+ const parts = lines[i].split(',').map((p) => p.trim().replace(/^"|"$/g, ''));
257
+ if (parts.length >= 2) {
258
+ const pid = parseInt(parts[0], 10);
259
+ if (!isNaN(pid) && pid > 0) {
260
+ info.push({
261
+ pid,
262
+ name: parts[1].toLowerCase()
263
+ });
264
+ }
265
+ }
266
+ }
267
+ return info;
268
+ }
269
+ /**
270
+ * Checks if a process name is a shell process.
271
+ *
272
+ * @param processName - Process name (should be lowercase)
273
+ * @returns True if it's a shell process
274
+ */
275
+ function isShellProcess(processName) {
276
+ const shellProcesses = [
277
+ 'cmd.exe',
278
+ 'powershell.exe',
279
+ 'pwsh.exe',
280
+ 'command.com',
281
+ 'sh.exe',
282
+ 'bash.exe'
283
+ ];
284
+ return shellProcesses.includes(processName.toLowerCase());
285
+ }
@@ -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
+ }
@@ -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
  }