@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
@@ -4,24 +4,20 @@
4
4
  */
5
5
  // Individual system tool name constants
6
6
  export const LIST_SERVERS_TOOL = 'list_servers';
7
- export const FIND_SERVERS_TOOL = 'find_servers';
8
- export const LIST_ALL_TOOLS_IN_SERVER_TOOL = 'list_all_tools_in_server';
9
- export const FIND_TOOLS_IN_SERVER_TOOL = 'find_tools_in_server';
7
+ export const LIST_TOOLS_IN_SERVER_TOOL = 'list_tools_in_server';
10
8
  export const GET_TOOL_TOOL = 'get_tool';
11
9
  export const CALL_TOOL_TOOL = 'call_tool';
12
- export const FIND_TOOLS_TOOL = 'find_tools';
10
+ export const UPDATE_SERVER_DESCRIPTION_TOOL = 'update_server_description';
13
11
  /**
14
12
  * List of all system tool names
15
13
  * This array is used to identify system tools across the application
16
14
  */
17
15
  export const SYSTEM_TOOL_NAMES = [
18
16
  LIST_SERVERS_TOOL,
19
- FIND_SERVERS_TOOL,
20
- LIST_ALL_TOOLS_IN_SERVER_TOOL,
21
- FIND_TOOLS_IN_SERVER_TOOL,
17
+ LIST_TOOLS_IN_SERVER_TOOL,
22
18
  GET_TOOL_TOOL,
23
19
  CALL_TOOL_TOOL,
24
- FIND_TOOLS_TOOL
20
+ UPDATE_SERVER_DESCRIPTION_TOOL
25
21
  ];
26
22
  // Individual gateway server name constant
27
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/pid/manager.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,UAAU;IACrB;;;;;;;;;;;;;;;;;;OAkBG;WACW,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAmBtD;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAIvD;;;;;;;;;;;;;;;OAeG;WACW,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IAI7D;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;IAa1D;;;;;;;;;;;;;;;;;;;OAmBG;WACW,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;CAG/D"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/pid/manager.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,UAAU;IACrB;;;;;;;;;;;;;;;;;;OAkBG;WACW,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAmBtD;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAIvD;;;;;;;;;;;;;;;OAeG;WACW,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IAI7D;;;;;;;;;;;;;;;;OAgBG;WACW,SAAS,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;IAa1D;;;;;;;;;;;;;;;;;;;OAmBG;WACW,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO;CAG/D"}
@@ -24,6 +24,7 @@
24
24
  * PidManager.removePid();
25
25
  */
26
26
  import { logger } from '../utils/logger.js';
27
+ import { LOG_MODULES } from '../utils/logger/log-modules.js';
27
28
  import { writePidFile, readPidFile, removePidFile, pidFileExists } from './file.js';
28
29
  export class PidManager {
29
30
  /**
@@ -60,7 +61,7 @@ export class PidManager {
60
61
  });
61
62
  }
62
63
  catch (error) {
63
- logger.error('Failed to write PID file:', error);
64
+ logger.error('Failed to write PID file:', error, LOG_MODULES.PID_MANAGER);
64
65
  }
65
66
  }
66
67
  /**
@@ -1,5 +1,6 @@
1
1
  import { buildApp } from '../app.js';
2
2
  import { configManager } from '../config/config-manager.js';
3
+ import { resolveInstanceConfig } from '../config/config-migrator.js';
3
4
  import { logger, LOG_MODULES } from '../utils/logger.js';
4
5
  import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
5
6
  import { PidManager } from '../pid/manager.js';
@@ -70,31 +71,44 @@ async function startDevServer() {
70
71
  logger.info('Initializing server connections...', LOG_MODULES.DEV_SERVER);
71
72
  const serverConfigs = configManager.getServers();
72
73
  for (const { name: serverName, config: serverConfig } of serverConfigs) {
73
- if (serverConfig.enabled) {
74
- // Check if there are existing instances
75
- const existingInstances = configManager.getServerInstanceByName(serverName);
76
- if (existingInstances.length === 0) {
77
- // Auto-create instance for enabled servers
78
- try {
79
- const newInstance = await configManager.addServerInstance(serverName, {});
80
- // Connect the new instance
81
- mcpConnectionManager.connect({ ...serverConfig, ...newInstance }).catch((err) => {
74
+ // Check if there are existing instances
75
+ const existingInstances = configManager.getServerInstancesByName(serverName);
76
+ if (existingInstances.length === 0) {
77
+ // Auto-create instance for enabled servers
78
+ try {
79
+ const newInstance = await configManager.addServerInstance(serverName, {});
80
+ // Connect the new instance
81
+ const resolvedConfig = resolveInstanceConfig(serverConfig, newInstance.id);
82
+ if (resolvedConfig && resolvedConfig.enabled !== false) {
83
+ mcpConnectionManager
84
+ .connect(serverName, newInstance.index ?? 0, {
85
+ ...resolvedConfig,
86
+ id: newInstance.id
87
+ })
88
+ .catch((err) => {
82
89
  logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
83
90
  });
84
91
  }
85
- catch (err) {
86
- logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
87
- }
88
92
  }
89
- else {
90
- // Connect existing instances
91
- existingInstances.forEach((instance) => {
92
- mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
93
- logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
94
- });
95
- });
93
+ catch (err) {
94
+ logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
96
95
  }
97
96
  }
97
+ else {
98
+ // Connect existing instances
99
+ existingInstances.forEach((instance) => {
100
+ if (instance.enabled !== false) {
101
+ const resolvedConfig = resolveInstanceConfig(serverConfig, instance.id);
102
+ if (resolvedConfig) {
103
+ mcpConnectionManager
104
+ .connect(serverName, instance.index ?? 0, { ...resolvedConfig, id: instance.id })
105
+ .catch((err) => {
106
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.DEV_SERVER);
107
+ });
108
+ }
109
+ }
110
+ });
111
+ }
98
112
  }
99
113
  // Listen on configured port
100
114
  await app.listen({
@@ -165,7 +179,7 @@ process.on('uncaughtException', (err) => {
165
179
  });
166
180
  // Handle unhandled promise rejections
167
181
  process.on('unhandledRejection', (reason, promise) => {
168
- logger.error('Unhandled Rejection at:', promise, 'reason:', reason, LOG_MODULES.DEV_SERVER);
182
+ logger.error('Unhandled Rejection:', { promise, reason }, LOG_MODULES.DEV_SERVER);
169
183
  process.exit(1);
170
184
  });
171
185
  startDevServer();
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/server/runner.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBA2G9F"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/server/runner.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,iBAuI9F"}
@@ -1,6 +1,8 @@
1
1
  import { buildApp } from '../app.js';
2
2
  import { configManager } from '../config/config-manager.js';
3
- import { logger, LOG_MODULES } from '../utils/logger.js';
3
+ import { resolveInstanceConfig } from '../config/config-migrator.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { LOG_MODULES } from '../utils/logger/log-modules.js';
4
6
  import { setJsonPrettyConfigGetter } from '../utils/json-utils.js';
5
7
  import { mcpConnectionManager } from '../services/mcp-connection-manager.js';
6
8
  import { gateway } from '../services/gateway.service.js';
@@ -77,18 +79,18 @@ export async function runServer(options = {}) {
77
79
  if (portCheck.inUse) {
78
80
  if (portCheck.isSelfProject) {
79
81
  // This project is already running
80
- logger.error(`MCP Hub Lite is already running on port ${port} (PID: ${portCheck.pid})`);
81
- logger.error(`Use 'npm run stop' or 'mcp-hub-lite stop' to stop the running instance.`);
82
+ logger.error(`MCP Hub Lite is already running on port ${port} (PID: ${portCheck.pid})`, LOG_MODULES.SERVER);
83
+ logger.error(`Use 'npm run stop' or 'mcp-hub-lite stop' to stop the running instance.`, LOG_MODULES.SERVER);
82
84
  process.exit(1);
83
85
  }
84
86
  else {
85
87
  // Port is occupied by another application
86
- logger.error(`Port ${port} is already in use by another application:`);
87
- logger.error(` Process: ${portCheck.processName} (PID: ${portCheck.pid})`);
88
+ logger.error(`Port ${port} is already in use by another application:`, LOG_MODULES.SERVER);
89
+ logger.error(` Process: ${portCheck.processName} (PID: ${portCheck.pid})`, LOG_MODULES.SERVER);
88
90
  if (portCheck.commandLine) {
89
- logger.error(` Command: ${portCheck.commandLine}`);
91
+ logger.error(` Command: ${portCheck.commandLine}`, LOG_MODULES.SERVER);
90
92
  }
91
- logger.error(`Please stop the conflicting application or use a different port.`);
93
+ logger.error(`Please stop the conflicting application or use a different port.`, LOG_MODULES.SERVER);
92
94
  process.exit(1);
93
95
  }
94
96
  }
@@ -97,31 +99,44 @@ export async function runServer(options = {}) {
97
99
  logger.info('Initializing server connections...', LOG_MODULES.SERVER);
98
100
  const serverConfigs = configManager.getServers();
99
101
  for (const { name: serverName, config: serverConfig } of serverConfigs) {
100
- if (serverConfig.enabled) {
101
- // Check if there are existing instances
102
- const existingInstances = configManager.getServerInstanceByName(serverName);
103
- if (existingInstances.length === 0) {
104
- // Auto-create instance for enabled servers
105
- try {
106
- const newInstance = await configManager.addServerInstance(serverName, {});
107
- // Connect the new instance
108
- mcpConnectionManager.connect({ ...serverConfig, ...newInstance }).catch((err) => {
102
+ // Check if there are existing instances
103
+ const existingInstances = configManager.getServerInstancesByName(serverName);
104
+ if (existingInstances.length === 0) {
105
+ // Auto-create instance for enabled servers
106
+ try {
107
+ const newInstance = await configManager.addServerInstance(serverName, {});
108
+ // Connect the new instance
109
+ const resolvedConfig = resolveInstanceConfig(serverConfig, newInstance.id);
110
+ if (resolvedConfig && resolvedConfig.enabled !== false) {
111
+ mcpConnectionManager
112
+ .connect(serverName, newInstance.index ?? 0, {
113
+ ...resolvedConfig,
114
+ id: newInstance.id
115
+ })
116
+ .catch((err) => {
109
117
  logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
110
118
  });
111
119
  }
112
- catch (err) {
113
- logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.SERVER);
114
- }
115
120
  }
116
- else {
117
- // Connect existing instances
118
- existingInstances.forEach((instance) => {
119
- mcpConnectionManager.connect({ ...serverConfig, ...instance }).catch((err) => {
120
- logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
121
- });
122
- });
121
+ catch (err) {
122
+ logger.error(`Failed to create instance for ${serverName}:`, err, LOG_MODULES.SERVER);
123
123
  }
124
124
  }
125
+ else {
126
+ // Connect existing instances
127
+ existingInstances.forEach((instance) => {
128
+ if (instance.enabled !== false) {
129
+ const resolvedConfig = resolveInstanceConfig(serverConfig, instance.id);
130
+ if (resolvedConfig) {
131
+ mcpConnectionManager
132
+ .connect(serverName, instance.index ?? 0, { ...resolvedConfig, id: instance.id })
133
+ .catch((err) => {
134
+ logger.error(`Failed to auto-connect to ${serverName}:`, err, LOG_MODULES.SERVER);
135
+ });
136
+ }
137
+ }
138
+ });
139
+ }
125
140
  }
126
141
  // Setup signal handlers for graceful shutdown
127
142
  const shutdown = async (signal) => {
@@ -1,132 +1,7 @@
1
- import type { ClientContext, ClientInfo, ClientRoot } from '../../shared/types/client.types.js';
2
1
  /**
3
- * Client tracking service that manages client connections and their metadata.
2
+ * @deprecated This file is deprecated. Please import from './session-tracker.service.js' instead.
4
3
  *
5
- * This service maintains a registry of connected clients (typically IDEs or other
6
- * MCP clients) and tracks their connection state, metadata, and workspace roots.
7
- * It provides automatic cleanup of stale clients after a timeout period and
8
- * publishes connection/disconnection events via the event bus.
9
- *
10
- * The service is primarily used by the MCP session manager to track which clients
11
- * are connected and maintain their context information for proper session management.
12
- *
13
- * @example
14
- * // Update client information when a new connection is established
15
- * clientTrackerService.updateClient({
16
- * sessionId: 'session-123',
17
- * clientName: 'VS Code',
18
- * clientVersion: '1.85.0',
19
- * cwd: '/home/user/project'
20
- * });
21
- *
22
- * // Get all currently connected clients
23
- * const clients = clientTrackerService.getClients();
4
+ * Client Tracker Service (Deprecated - maintained for backward compatibility)
24
5
  */
25
- declare class ClientTrackerService {
26
- private clients;
27
- private get TIMEOUT_MS();
28
- /**
29
- * Creates a new client tracker service instance.
30
- *
31
- * Initializes the service with automatic periodic cleanup of stale clients
32
- * every 60 seconds to prevent memory leaks from disconnected clients.
33
- */
34
- constructor();
35
- /**
36
- * Updates or creates a client entry with the provided context information.
37
- *
38
- * This method is called whenever a client sends a request with context information.
39
- * It preserves existing client metadata that isn't provided in the new context,
40
- * ensuring that clients don't lose their previously established information.
41
- *
42
- * If this is a new client (not previously tracked), it publishes a 'client-connected'
43
- * event to notify other services about the new connection.
44
- *
45
- * @param context - The client context containing session ID and optional metadata
46
- * @param context.sessionId - Unique identifier for the client session
47
- * @param context.clientName - Optional name of the client application
48
- * @param context.clientVersion - Optional version of the client application
49
- * @param context.protocolVersion - Optional MCP protocol version
50
- * @param context.project - Optional project identifier
51
- * @param context.cwd - Optional current working directory
52
- * @param context.userAgent - Optional user agent string
53
- * @param context.ip - Optional client IP address
54
- *
55
- * @example
56
- * clientTrackerService.updateClient({
57
- * sessionId: 'session-123',
58
- * clientName: 'VS Code',
59
- * clientVersion: '1.85.0',
60
- * cwd: '/home/user/project'
61
- * });
62
- */
63
- updateClient(context: ClientContext): void;
64
- /**
65
- * Updates the workspace roots for a specific client session.
66
- *
67
- * This method is typically called when a client provides its workspace root
68
- * directories, which helps determine the client's working directory context.
69
- * If the client doesn't have a current working directory (cwd) set, it will
70
- * attempt to infer one from the first root URI in the list.
71
- *
72
- * For file:// URIs, it converts them to local file paths using Node.js's
73
- * fileURLToPath utility. For other URI schemes, it uses the URI directly.
74
- *
75
- * @param sessionId - The unique session identifier for the client
76
- * @param roots - Array of client root objects containing URI information
77
- *
78
- * @example
79
- * clientTrackerService.updateClientRoots('session-123', [
80
- * { uri: 'file:///home/user/project' },
81
- * { uri: 'file:///home/user/other-project' }
82
- * ]);
83
- */
84
- updateClientRoots(sessionId: string, roots: ClientRoot[]): void;
85
- /**
86
- * Retrieves all currently tracked client information.
87
- *
88
- * Returns an array of all active client info objects, including their metadata
89
- * and connection state. This is useful for monitoring all connected clients
90
- * or displaying client information in administrative interfaces.
91
- *
92
- * @returns Array of ClientInfo objects representing all tracked clients
93
- *
94
- * @example
95
- * const allClients = clientTrackerService.getClients();
96
- * console.log(`Currently tracking ${allClients.length} clients`);
97
- */
98
- getClients(): ClientInfo[];
99
- /**
100
- * Retrieves client information for a specific session ID.
101
- *
102
- * Returns the complete client info object for the given session ID, or undefined
103
- * if no client with that session ID is currently being tracked.
104
- *
105
- * @param sessionId - The unique session identifier to look up
106
- * @returns ClientInfo object if found, undefined otherwise
107
- *
108
- * @example
109
- * const client = clientTrackerService.getClient('session-123');
110
- * if (client) {
111
- * console.log(`Client ${client.clientName} is connected`);
112
- * }
113
- */
114
- getClient(sessionId: string): ClientInfo | undefined;
115
- /**
116
- * Cleans up stale client entries that haven't been seen recently.
117
- *
118
- * This private method is called periodically to remove clients that haven't
119
- * sent any requests within the timeout period (5 minutes by default). When
120
- * a client is removed, it publishes a 'client-disconnected' event to notify
121
- * other services about the disconnection.
122
- *
123
- * This prevents memory leaks from accumulating disconnected clients and ensures
124
- * that the client registry only contains active connections.
125
- *
126
- * @private
127
- */
128
- private cleanup;
129
- }
130
- export declare const clientTrackerService: ClientTrackerService;
131
- export {};
6
+ export { sessionTrackerService, sessionTrackerService as clientTrackerService, type SessionTrackerService } from './session-tracker.service.js';
132
7
  //# sourceMappingURL=client-tracker.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/client-tracker.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAO3F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,OAAO,CAAsC;IAErD,OAAO,KAAK,UAAU,GAErB;IAED;;;;;OAKG;;IAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACI,YAAY,CAAC,OAAO,EAAE,aAAa;IA2B1C;;;;;;;;;;;;;;;;;;;OAmBG;IACI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IAwB/D;;;;;;;;;;;;OAYG;IACI,UAAU,IAAI,UAAU,EAAE;IAIjC;;;;;;;;;;;;;;OAcG;IACI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;CAiBhB;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
1
+ {"version":3,"file":"client-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/client-tracker.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,qBAAqB,EACrB,qBAAqB,IAAI,oBAAoB,EAC7C,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC"}
@@ -1,203 +1,7 @@
1
- import { logger } from '../utils/logger.js';
2
- import { eventBus } from './event-bus.service.js';
3
- import { fileURLToPath } from 'node:url';
4
- import { configManager } from '../config/config-manager.js';
5
- import { formatDuration } from '../utils/format-utils.js';
6
1
  /**
7
- * Client tracking service that manages client connections and their metadata.
2
+ * @deprecated This file is deprecated. Please import from './session-tracker.service.js' instead.
8
3
  *
9
- * This service maintains a registry of connected clients (typically IDEs or other
10
- * MCP clients) and tracks their connection state, metadata, and workspace roots.
11
- * It provides automatic cleanup of stale clients after a timeout period and
12
- * publishes connection/disconnection events via the event bus.
13
- *
14
- * The service is primarily used by the MCP session manager to track which clients
15
- * are connected and maintain their context information for proper session management.
16
- *
17
- * @example
18
- * // Update client information when a new connection is established
19
- * clientTrackerService.updateClient({
20
- * sessionId: 'session-123',
21
- * clientName: 'VS Code',
22
- * clientVersion: '1.85.0',
23
- * cwd: '/home/user/project'
24
- * });
25
- *
26
- * // Get all currently connected clients
27
- * const clients = clientTrackerService.getClients();
4
+ * Client Tracker Service (Deprecated - maintained for backward compatibility)
28
5
  */
29
- class ClientTrackerService {
30
- clients = new Map();
31
- // Use the same timeout as session manager (default 30 minutes)
32
- get TIMEOUT_MS() {
33
- return configManager.getConfig().security.sessionTimeout;
34
- }
35
- /**
36
- * Creates a new client tracker service instance.
37
- *
38
- * Initializes the service with automatic periodic cleanup of stale clients
39
- * every 60 seconds to prevent memory leaks from disconnected clients.
40
- */
41
- constructor() {
42
- // Periodic cleanup
43
- setInterval(() => this.cleanup(), 60000);
44
- }
45
- /**
46
- * Updates or creates a client entry with the provided context information.
47
- *
48
- * This method is called whenever a client sends a request with context information.
49
- * It preserves existing client metadata that isn't provided in the new context,
50
- * ensuring that clients don't lose their previously established information.
51
- *
52
- * If this is a new client (not previously tracked), it publishes a 'client-connected'
53
- * event to notify other services about the new connection.
54
- *
55
- * @param context - The client context containing session ID and optional metadata
56
- * @param context.sessionId - Unique identifier for the client session
57
- * @param context.clientName - Optional name of the client application
58
- * @param context.clientVersion - Optional version of the client application
59
- * @param context.protocolVersion - Optional MCP protocol version
60
- * @param context.project - Optional project identifier
61
- * @param context.cwd - Optional current working directory
62
- * @param context.userAgent - Optional user agent string
63
- * @param context.ip - Optional client IP address
64
- *
65
- * @example
66
- * clientTrackerService.updateClient({
67
- * sessionId: 'session-123',
68
- * clientName: 'VS Code',
69
- * clientVersion: '1.85.0',
70
- * cwd: '/home/user/project'
71
- * });
72
- */
73
- updateClient(context) {
74
- const existing = this.clients.get(context.sessionId);
75
- const clientInfo = {
76
- ...context,
77
- // Preserve existing info if not provided in new request
78
- clientName: context.clientName || existing?.clientName,
79
- clientVersion: context.clientVersion || existing?.clientVersion,
80
- protocolVersion: context.protocolVersion || existing?.protocolVersion,
81
- project: context.project || existing?.project,
82
- cwd: context.cwd || existing?.cwd, // Preserve CWD if not provided in new request (e.g. inferred from roots)
83
- userAgent: context.userAgent || existing?.userAgent,
84
- ip: context.ip || existing?.ip,
85
- lastSeen: Date.now(),
86
- roots: existing?.roots // Preserve roots if already fetched
87
- };
88
- this.clients.set(context.sessionId, clientInfo);
89
- // If it's a new client, publish connection event
90
- if (!existing) {
91
- eventBus.publish('client-connected', {
92
- timestamp: Date.now(),
93
- client: clientInfo
94
- });
95
- }
96
- }
97
- /**
98
- * Updates the workspace roots for a specific client session.
99
- *
100
- * This method is typically called when a client provides its workspace root
101
- * directories, which helps determine the client's working directory context.
102
- * If the client doesn't have a current working directory (cwd) set, it will
103
- * attempt to infer one from the first root URI in the list.
104
- *
105
- * For file:// URIs, it converts them to local file paths using Node.js's
106
- * fileURLToPath utility. For other URI schemes, it uses the URI directly.
107
- *
108
- * @param sessionId - The unique session identifier for the client
109
- * @param roots - Array of client root objects containing URI information
110
- *
111
- * @example
112
- * clientTrackerService.updateClientRoots('session-123', [
113
- * { uri: 'file:///home/user/project' },
114
- * { uri: 'file:///home/user/other-project' }
115
- * ]);
116
- */
117
- updateClientRoots(sessionId, roots) {
118
- const client = this.clients.get(sessionId);
119
- if (client) {
120
- client.roots = roots;
121
- client.lastSeen = Date.now();
122
- // If CWD is missing, try to infer from roots
123
- if (!client.cwd && roots.length > 0) {
124
- // Convert file:// uri to path if possible, or just use URI
125
- const root = roots[0];
126
- if (root.uri.startsWith('file://')) {
127
- try {
128
- client.cwd = fileURLToPath(root.uri);
129
- }
130
- catch {
131
- client.cwd = root.uri;
132
- }
133
- }
134
- else {
135
- client.cwd = root.uri;
136
- }
137
- logger.debug(`Inferred CWD for session ${sessionId} from roots: ${client.cwd}`);
138
- }
139
- }
140
- }
141
- /**
142
- * Retrieves all currently tracked client information.
143
- *
144
- * Returns an array of all active client info objects, including their metadata
145
- * and connection state. This is useful for monitoring all connected clients
146
- * or displaying client information in administrative interfaces.
147
- *
148
- * @returns Array of ClientInfo objects representing all tracked clients
149
- *
150
- * @example
151
- * const allClients = clientTrackerService.getClients();
152
- * console.log(`Currently tracking ${allClients.length} clients`);
153
- */
154
- getClients() {
155
- return Array.from(this.clients.values());
156
- }
157
- /**
158
- * Retrieves client information for a specific session ID.
159
- *
160
- * Returns the complete client info object for the given session ID, or undefined
161
- * if no client with that session ID is currently being tracked.
162
- *
163
- * @param sessionId - The unique session identifier to look up
164
- * @returns ClientInfo object if found, undefined otherwise
165
- *
166
- * @example
167
- * const client = clientTrackerService.getClient('session-123');
168
- * if (client) {
169
- * console.log(`Client ${client.clientName} is connected`);
170
- * }
171
- */
172
- getClient(sessionId) {
173
- return this.clients.get(sessionId);
174
- }
175
- /**
176
- * Cleans up stale client entries that haven't been seen recently.
177
- *
178
- * This private method is called periodically to remove clients that haven't
179
- * sent any requests within the timeout period (5 minutes by default). When
180
- * a client is removed, it publishes a 'client-disconnected' event to notify
181
- * other services about the disconnection.
182
- *
183
- * This prevents memory leaks from accumulating disconnected clients and ensures
184
- * that the client registry only contains active connections.
185
- *
186
- * @private
187
- */
188
- cleanup() {
189
- const now = Date.now();
190
- for (const [id, info] of this.clients.entries()) {
191
- if (now - info.lastSeen > this.TIMEOUT_MS) {
192
- logger.debug(`Removing stale client: ${id}. Last seen ${formatDuration(now - info.lastSeen)} ago, timeout ${formatDuration(this.TIMEOUT_MS)}`);
193
- this.clients.delete(id);
194
- eventBus.publish('client-disconnected', {
195
- timestamp: Date.now(),
196
- clientId: id,
197
- client: info
198
- });
199
- }
200
- }
201
- }
202
- }
203
- export const clientTrackerService = new ClientTrackerService();
6
+ // Re-export from new service with backward-compatible aliases
7
+ export { sessionTrackerService, sessionTrackerService as clientTrackerService } from './session-tracker.service.js';