@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/omit-CqPQN3XP.js +1 -0
  39. package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +363 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +2 -56
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +2 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/client.types.d.ts +4 -32
  53. package/dist/server/shared/types/client.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/client.types.js +3 -2
  55. package/dist/server/shared/types/index.d.ts +3 -3
  56. package/dist/server/shared/types/index.d.ts.map +1 -1
  57. package/dist/server/shared/types/index.js +3 -3
  58. package/dist/server/shared/types/session-context.types.d.ts +35 -0
  59. package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
  60. package/dist/server/shared/types/session-context.types.js +5 -0
  61. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  62. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  63. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
  64. package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
  65. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  66. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  67. package/dist/server/src/api/mcp/gateway.js +34 -61
  68. package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
  69. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  70. package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
  71. package/dist/server/src/api/web/clients.js +2 -2
  72. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  73. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  74. package/dist/server/src/api/web/hub-tools.js +3 -54
  75. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  76. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  77. package/dist/server/src/api/web/mcp-status.js +71 -30
  78. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  79. package/dist/server/src/api/web/resources.js +28 -22
  80. package/dist/server/src/api/web/search.d.ts +2 -16
  81. package/dist/server/src/api/web/search.d.ts.map +1 -1
  82. package/dist/server/src/api/web/search.js +24 -45
  83. package/dist/server/src/api/web/servers.d.ts +3 -3
  84. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  85. package/dist/server/src/api/web/servers.js +70 -25
  86. package/dist/server/src/api/web/sessions.js +1 -1
  87. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  88. package/dist/server/src/api/ws/ws-handler.js +4 -2
  89. package/dist/server/src/app.d.ts.map +1 -1
  90. package/dist/server/src/app.js +0 -4
  91. package/dist/server/src/cli/commands/list.js +2 -2
  92. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  93. package/dist/server/src/cli/commands/status.js +41 -30
  94. package/dist/server/src/cli/index.d.ts.map +1 -1
  95. package/dist/server/src/cli/index.js +2 -1
  96. package/dist/server/src/cli/server.d.ts +11 -2
  97. package/dist/server/src/cli/server.d.ts.map +1 -1
  98. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  99. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  100. package/dist/server/src/config/config-change-logger.js +135 -11
  101. package/dist/server/src/config/config-loader.d.ts +6 -5
  102. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  103. package/dist/server/src/config/config-loader.js +54 -16
  104. package/dist/server/src/config/config-manager.d.ts +51 -43
  105. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  106. package/dist/server/src/config/config-manager.js +84 -66
  107. package/dist/server/src/config/config-migrator.d.ts +82 -0
  108. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  109. package/dist/server/src/config/config-migrator.js +348 -0
  110. package/dist/server/src/config/config-saver.d.ts +2 -0
  111. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  112. package/dist/server/src/config/config-saver.js +8 -2
  113. package/dist/server/src/config/config.schema.d.ts +10 -102
  114. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  115. package/dist/server/src/config/config.schema.js +15 -98
  116. package/dist/server/src/config/path-validator.d.ts +27 -0
  117. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  118. package/dist/server/src/config/path-validator.js +53 -0
  119. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  120. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  121. package/dist/server/src/config/server-config-manager.js +222 -66
  122. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  123. package/dist/server/src/config/type-converter.js +3 -2
  124. package/dist/server/src/index.js +1 -1
  125. package/dist/server/src/models/event.model.d.ts +17 -10
  126. package/dist/server/src/models/event.model.d.ts.map +1 -1
  127. package/dist/server/src/models/server.model.d.ts +17 -3
  128. package/dist/server/src/models/server.model.d.ts.map +1 -1
  129. package/dist/server/src/models/server.model.js +2 -1
  130. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  131. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  132. package/dist/server/src/models/system-tools.constants.js +4 -8
  133. package/dist/server/src/pid/manager.d.ts.map +1 -1
  134. package/dist/server/src/pid/manager.js +2 -1
  135. package/dist/server/src/server/dev-server.js +34 -20
  136. package/dist/server/src/server/runner.d.ts.map +1 -1
  137. package/dist/server/src/server/runner.js +41 -26
  138. package/dist/server/src/services/client-tracker.service.d.ts +3 -128
  139. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
  140. package/dist/server/src/services/client-tracker.service.js +4 -200
  141. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  142. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  143. package/dist/server/src/services/connection/connection-manager.js +286 -241
  144. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  145. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  146. package/dist/server/src/services/connection/tool-cache.js +50 -55
  147. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  148. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  150. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  151. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  152. package/dist/server/src/services/gateway/global-transport.js +42 -0
  153. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  155. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  156. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  157. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  158. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  159. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  160. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
  161. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  162. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  163. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  164. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  165. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  166. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  167. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  168. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  169. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  170. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  171. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  172. package/dist/server/src/services/gateway/types.d.ts +2 -1
  173. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  174. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  175. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-manager.service.js +89 -267
  177. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  178. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/index.js +1 -2
  180. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  181. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  182. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  183. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  184. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  185. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  186. package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
  187. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  188. package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
  189. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  190. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  191. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  192. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  193. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  194. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  195. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  196. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  197. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  198. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  199. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  200. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  201. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  202. package/dist/server/src/services/hub-tools.service.js +185 -110
  203. package/dist/server/src/services/search/search-cache.d.ts +0 -19
  204. package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
  205. package/dist/server/src/services/search/search-cache.js +0 -24
  206. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  207. package/dist/server/src/services/search/search-core.service.js +11 -11
  208. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  209. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  210. package/dist/server/src/services/session/session-manager.js +23 -583
  211. package/dist/server/src/services/session-tracker.service.d.ts +124 -0
  212. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/session-tracker.service.js +176 -0
  214. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  215. package/dist/server/src/services/system-tool-handler.js +7 -17
  216. package/dist/server/src/utils/composite-key.d.ts +29 -0
  217. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  218. package/dist/server/src/utils/composite-key.js +39 -0
  219. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  220. package/dist/server/src/utils/error-handler.js +3 -2
  221. package/dist/server/src/utils/index.d.ts +2 -0
  222. package/dist/server/src/utils/index.d.ts.map +1 -1
  223. package/dist/server/src/utils/index.js +2 -0
  224. package/dist/server/src/utils/instance-id.d.ts +22 -0
  225. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  226. package/dist/server/src/utils/instance-id.js +59 -0
  227. package/dist/server/src/utils/json-utils.d.ts +4 -4
  228. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  229. package/dist/server/src/utils/json-utils.js +10 -4
  230. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  231. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  232. package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
  233. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
  234. package/dist/server/src/utils/logger/log-colors.js +2 -1
  235. package/dist/server/src/utils/logger/log-context.d.ts +1 -0
  236. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
  237. package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
  238. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  239. package/dist/server/src/utils/logger/log-formatter.js +287 -5
  240. package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
  241. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  242. package/dist/server/src/utils/logger/log-modules.js +8 -8
  243. package/dist/server/src/utils/logger/log-output.d.ts +2 -2
  244. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
  245. package/dist/server/src/utils/logger/log-output.js +27 -6
  246. package/dist/server/src/utils/logger/logger.d.ts +13 -0
  247. package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
  248. package/dist/server/src/utils/logger/logger.js +42 -7
  249. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  250. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  251. package/dist/server/src/utils/parameter-validator.js +53 -0
  252. package/dist/server/src/utils/process-tree.d.ts +49 -0
  253. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  254. package/dist/server/src/utils/process-tree.js +285 -0
  255. package/dist/server/src/utils/request-context.d.ts +12 -30
  256. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  257. package/dist/server/src/utils/request-context.js +10 -30
  258. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  259. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  260. package/dist/server/src/utils/sort-utils.js +131 -0
  261. package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
  262. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
  263. package/dist/server/src/utils/tool-args-parser.js +0 -7
  264. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  265. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  266. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  267. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  268. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  269. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  270. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  271. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  272. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  273. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  274. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  275. package/dist/server/src/utils/transports/transport-factory.js +33 -13
  276. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  277. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  278. package/dist/server/src/utils/version.d.ts +11 -0
  279. package/dist/server/src/utils/version.d.ts.map +1 -0
  280. package/dist/server/src/utils/version.js +57 -0
  281. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  282. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  283. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  284. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  285. package/dist/server/tests/integration/api/gateway.test.js +24 -39
  286. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  287. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  288. package/dist/server/tests/server.test.js +27 -16
  289. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  290. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  291. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  292. package/dist/server/tests/temp/test-stack.d.ts +6 -0
  293. package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
  294. package/dist/server/tests/temp/test-stack.js +40 -0
  295. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  296. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  297. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  298. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  300. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  301. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  302. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  303. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  304. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  305. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  306. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  307. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  308. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  309. package/dist/server/tests/unit/server/runner.test.js +86 -62
  310. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  311. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  312. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  313. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  314. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  315. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  316. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  317. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  318. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  319. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  320. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  321. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
  322. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  323. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  324. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  325. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  326. package/dist/server/tests/unit/utils/config.test.js +88 -186
  327. package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
  328. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  329. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  330. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  331. package/dist/server/tests/unit/utils/logger.test.js +101 -0
  332. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  333. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  334. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  335. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  336. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  337. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  338. package/dist/server/tests/unit/utils/request-context.test.js +9 -28
  339. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  340. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  341. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  342. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  343. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  344. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  345. package/package.json +1 -1
  346. package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
  347. package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
  348. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  349. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
  350. package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
  351. package/dist/client/assets/ServerListView-DralUL71.js +0 -30
  352. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  353. package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
  354. package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
  355. package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
  356. package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
  357. package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
  358. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  359. package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
  360. package/dist/client/assets/el-input-CeZiq23m.js +0 -1
  361. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  362. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  363. package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
  364. package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
  365. package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
  366. package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
  367. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  368. package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
  369. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  370. package/dist/client/assets/index-COYaYRbH.js +0 -1
  371. package/dist/client/assets/index-Cfcvxyee.js +0 -2
  372. package/dist/client/assets/index-PhuI36Zi.js +0 -1
  373. package/dist/client/assets/omit-7EL6VJO4.js +0 -1
  374. package/dist/client/assets/vnode-upjuIlvm.js +0 -1
@@ -0,0 +1,124 @@
1
+ import type { SessionContext, SessionInfo, SessionRoot } from '../../shared/types/session-context.types.js';
2
+ /**
3
+ * Session tracking service that manages session connections and their metadata.
4
+ *
5
+ * This service maintains a registry of connected sessions (typically IDEs or other
6
+ * MCP clients) and tracks their connection state, metadata, and workspace roots.
7
+ * It provides automatic cleanup of stale sessions 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 sessions
11
+ * are connected and maintain their context information for proper session management.
12
+ *
13
+ * @example
14
+ * // Update session information when a new connection is established
15
+ * sessionTrackerService.updateSession({
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 sessions
23
+ * const sessions = sessionTrackerService.getSessions();
24
+ */
25
+ declare class SessionTrackerService {
26
+ private sessions;
27
+ private get TIMEOUT_MS();
28
+ /**
29
+ * Creates a new session tracker service instance.
30
+ *
31
+ * Initializes the service with automatic periodic cleanup of stale sessions
32
+ * every 60 seconds to prevent memory leaks from disconnected sessions.
33
+ */
34
+ constructor();
35
+ /**
36
+ * Updates or creates a session entry with the provided context information.
37
+ *
38
+ * This method is called whenever a session sends a request with context information.
39
+ * It preserves existing session metadata that isn't provided in the new context,
40
+ * ensuring that sessions don't lose their previously established information.
41
+ *
42
+ * If this is a new session (not previously tracked), it publishes a 'session-connected'
43
+ * event to notify other services about the new connection.
44
+ *
45
+ * @param context - The session context containing session ID and optional metadata
46
+ * @param context.sessionId - Unique identifier for the 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.userAgent - Optional user agent string
51
+ * @param context.ip - Optional session IP address
52
+ *
53
+ * @example
54
+ * sessionTrackerService.updateSession({
55
+ * sessionId: 'session-123',
56
+ * clientName: 'VS Code',
57
+ * clientVersion: '1.85.0'
58
+ * });
59
+ */
60
+ updateSession(context: SessionContext): void;
61
+ /**
62
+ * Updates the workspace roots for a specific session.
63
+ *
64
+ * This method is typically called when a session provides its workspace root
65
+ * directories.
66
+ *
67
+ * @param sessionId - The unique session identifier for the session
68
+ * @param roots - Array of session root objects containing URI information
69
+ *
70
+ * @example
71
+ * sessionTrackerService.updateSessionRoots('session-123', [
72
+ * { uri: 'file:///home/user/project' },
73
+ * { uri: 'file:///home/user/other-project' }
74
+ * ]);
75
+ */
76
+ updateSessionRoots(sessionId: string, roots: SessionRoot[]): void;
77
+ /**
78
+ * Retrieves all currently tracked session information.
79
+ *
80
+ * Returns an array of all active session info objects, including their metadata
81
+ * and connection state. This is useful for monitoring all connected sessions
82
+ * or displaying session information in administrative interfaces.
83
+ *
84
+ * @returns Array of SessionInfo objects representing all tracked sessions
85
+ *
86
+ * @example
87
+ * const allSessions = sessionTrackerService.getSessions();
88
+ * console.log(`Currently tracking ${allSessions.length} sessions`);
89
+ */
90
+ getSessions(): SessionInfo[];
91
+ /**
92
+ * Retrieves session information for a specific session ID.
93
+ *
94
+ * Returns the complete session info object for the given session ID, or undefined
95
+ * if no session with that session ID is currently being tracked.
96
+ *
97
+ * @param sessionId - The unique session identifier to look up
98
+ * @returns SessionInfo object if found, undefined otherwise
99
+ *
100
+ * @example
101
+ * const session = sessionTrackerService.getSession('session-123');
102
+ * if (session) {
103
+ * console.log(`Session ${session.clientName} is connected`);
104
+ * }
105
+ */
106
+ getSession(sessionId: string): SessionInfo | undefined;
107
+ /**
108
+ * Cleans up stale session entries that haven't been seen recently.
109
+ *
110
+ * This private method is called periodically to remove sessions that haven't
111
+ * sent any requests within the timeout period (5 minutes by default). When
112
+ * a session is removed, it publishes a 'session-disconnected' event to notify
113
+ * other services about the disconnection.
114
+ *
115
+ * This prevents memory leaks from accumulating disconnected sessions and ensures
116
+ * that the session registry only contains active connections.
117
+ *
118
+ * @private
119
+ */
120
+ private cleanup;
121
+ }
122
+ export declare const sessionTrackerService: SessionTrackerService;
123
+ export type { SessionTrackerService };
124
+ //# sourceMappingURL=session-tracker.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tracker.service.d.ts","sourceRoot":"","sources":["../../../../src/services/session-tracker.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACZ,MAAM,wCAAwC,CAAC;AAMhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,QAAQ,CAAuC;IAEvD,OAAO,KAAK,UAAU,GAErB;IAED;;;;;OAKG;;IAMH;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,aAAa,CAAC,OAAO,EAAE,cAAc;IA0B5C;;;;;;;;;;;;;;OAcG;IACI,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;IAQjE;;;;;;;;;;;;OAYG;IACI,WAAW,IAAI,WAAW,EAAE;IAInC;;;;;;;;;;;;;;OAcG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI7D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,OAAO;CAkBhB;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { logger, LOG_MODULES } from '../utils/logger.js';
2
+ import { eventBus } from './event-bus.service.js';
3
+ import { configManager } from '../config/config-manager.js';
4
+ import { formatDuration } from '../utils/format-utils.js';
5
+ /**
6
+ * Session tracking service that manages session connections and their metadata.
7
+ *
8
+ * This service maintains a registry of connected sessions (typically IDEs or other
9
+ * MCP clients) and tracks their connection state, metadata, and workspace roots.
10
+ * It provides automatic cleanup of stale sessions after a timeout period and
11
+ * publishes connection/disconnection events via the event bus.
12
+ *
13
+ * The service is primarily used by the MCP session manager to track which sessions
14
+ * are connected and maintain their context information for proper session management.
15
+ *
16
+ * @example
17
+ * // Update session information when a new connection is established
18
+ * sessionTrackerService.updateSession({
19
+ * sessionId: 'session-123',
20
+ * clientName: 'VS Code',
21
+ * clientVersion: '1.85.0',
22
+ * cwd: '/home/user/project'
23
+ * });
24
+ *
25
+ * // Get all currently connected sessions
26
+ * const sessions = sessionTrackerService.getSessions();
27
+ */
28
+ class SessionTrackerService {
29
+ sessions = new Map();
30
+ // Use the same timeout as session manager (default 30 minutes)
31
+ get TIMEOUT_MS() {
32
+ return configManager.getConfig().security.sessionTimeout;
33
+ }
34
+ /**
35
+ * Creates a new session tracker service instance.
36
+ *
37
+ * Initializes the service with automatic periodic cleanup of stale sessions
38
+ * every 60 seconds to prevent memory leaks from disconnected sessions.
39
+ */
40
+ constructor() {
41
+ // Periodic cleanup
42
+ setInterval(() => this.cleanup(), 60000);
43
+ }
44
+ /**
45
+ * Updates or creates a session entry with the provided context information.
46
+ *
47
+ * This method is called whenever a session sends a request with context information.
48
+ * It preserves existing session metadata that isn't provided in the new context,
49
+ * ensuring that sessions don't lose their previously established information.
50
+ *
51
+ * If this is a new session (not previously tracked), it publishes a 'session-connected'
52
+ * event to notify other services about the new connection.
53
+ *
54
+ * @param context - The session context containing session ID and optional metadata
55
+ * @param context.sessionId - Unique identifier for the session
56
+ * @param context.clientName - Optional name of the client application
57
+ * @param context.clientVersion - Optional version of the client application
58
+ * @param context.protocolVersion - Optional MCP protocol version
59
+ * @param context.userAgent - Optional user agent string
60
+ * @param context.ip - Optional session IP address
61
+ *
62
+ * @example
63
+ * sessionTrackerService.updateSession({
64
+ * sessionId: 'session-123',
65
+ * clientName: 'VS Code',
66
+ * clientVersion: '1.85.0'
67
+ * });
68
+ */
69
+ updateSession(context) {
70
+ const existing = this.sessions.get(context.sessionId);
71
+ const sessionInfo = {
72
+ ...context,
73
+ // Preserve existing info if not provided in new request
74
+ clientName: context.clientName || existing?.clientName,
75
+ clientVersion: context.clientVersion || existing?.clientVersion,
76
+ protocolVersion: context.protocolVersion || existing?.protocolVersion,
77
+ capabilities: context.capabilities || existing?.capabilities,
78
+ userAgent: context.userAgent || existing?.userAgent,
79
+ ip: context.ip || existing?.ip,
80
+ lastSeen: Date.now(),
81
+ roots: existing?.roots // Preserve roots if already fetched
82
+ };
83
+ this.sessions.set(context.sessionId, sessionInfo);
84
+ // If it's a new session, publish connection event
85
+ if (!existing) {
86
+ eventBus.publish('session-connected', {
87
+ timestamp: Date.now(),
88
+ session: sessionInfo
89
+ });
90
+ }
91
+ }
92
+ /**
93
+ * Updates the workspace roots for a specific session.
94
+ *
95
+ * This method is typically called when a session provides its workspace root
96
+ * directories.
97
+ *
98
+ * @param sessionId - The unique session identifier for the session
99
+ * @param roots - Array of session root objects containing URI information
100
+ *
101
+ * @example
102
+ * sessionTrackerService.updateSessionRoots('session-123', [
103
+ * { uri: 'file:///home/user/project' },
104
+ * { uri: 'file:///home/user/other-project' }
105
+ * ]);
106
+ */
107
+ updateSessionRoots(sessionId, roots) {
108
+ const session = this.sessions.get(sessionId);
109
+ if (session) {
110
+ session.roots = roots;
111
+ session.lastSeen = Date.now();
112
+ }
113
+ }
114
+ /**
115
+ * Retrieves all currently tracked session information.
116
+ *
117
+ * Returns an array of all active session info objects, including their metadata
118
+ * and connection state. This is useful for monitoring all connected sessions
119
+ * or displaying session information in administrative interfaces.
120
+ *
121
+ * @returns Array of SessionInfo objects representing all tracked sessions
122
+ *
123
+ * @example
124
+ * const allSessions = sessionTrackerService.getSessions();
125
+ * console.log(`Currently tracking ${allSessions.length} sessions`);
126
+ */
127
+ getSessions() {
128
+ return Array.from(this.sessions.values());
129
+ }
130
+ /**
131
+ * Retrieves session information for a specific session ID.
132
+ *
133
+ * Returns the complete session info object for the given session ID, or undefined
134
+ * if no session with that session ID is currently being tracked.
135
+ *
136
+ * @param sessionId - The unique session identifier to look up
137
+ * @returns SessionInfo object if found, undefined otherwise
138
+ *
139
+ * @example
140
+ * const session = sessionTrackerService.getSession('session-123');
141
+ * if (session) {
142
+ * console.log(`Session ${session.clientName} is connected`);
143
+ * }
144
+ */
145
+ getSession(sessionId) {
146
+ return this.sessions.get(sessionId);
147
+ }
148
+ /**
149
+ * Cleans up stale session entries that haven't been seen recently.
150
+ *
151
+ * This private method is called periodically to remove sessions that haven't
152
+ * sent any requests within the timeout period (5 minutes by default). When
153
+ * a session is removed, it publishes a 'session-disconnected' event to notify
154
+ * other services about the disconnection.
155
+ *
156
+ * This prevents memory leaks from accumulating disconnected sessions and ensures
157
+ * that the session registry only contains active connections.
158
+ *
159
+ * @private
160
+ */
161
+ cleanup() {
162
+ const now = Date.now();
163
+ for (const [id, info] of this.sessions.entries()) {
164
+ if (now - info.lastSeen > this.TIMEOUT_MS) {
165
+ logger.debug(`Removing stale session: ${id}. Last seen ${formatDuration(now - info.lastSeen)} ago, timeout ${formatDuration(this.TIMEOUT_MS)}`, LOG_MODULES.SESSION_TRACKER);
166
+ this.sessions.delete(id);
167
+ eventBus.publish('session-disconnected', {
168
+ timestamp: Date.now(),
169
+ sessionId: id,
170
+ session: info
171
+ });
172
+ }
173
+ }
174
+ }
175
+ }
176
+ export const sessionTrackerService = new SessionTrackerService();
@@ -1 +1 @@
1
- {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CAwEpB"}
1
+ {"version":3,"file":"system-tool-handler.d.ts","sourceRoot":"","sources":["../../../../src/services/system-tool-handler.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;WACU,oBAAoB,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;CA8DpB"}
@@ -1,7 +1,7 @@
1
1
  import { hubToolsService } from './hub-tools.service.js';
2
2
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
3
3
  import { logger, LOG_MODULES } from '../utils/logger.js';
4
- import { LIST_SERVERS_TOOL, FIND_SERVERS_TOOL, LIST_ALL_TOOLS_IN_SERVER_TOOL, FIND_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, FIND_TOOLS_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
4
+ import { LIST_SERVERS_TOOL, LIST_TOOLS_IN_SERVER_TOOL, GET_TOOL_TOOL, CALL_TOOL_TOOL, UPDATE_SERVER_DESCRIPTION_TOOL, MCP_HUB_LITE_SERVER } from '../models/system-tools.constants.js';
5
5
  import { stringifyForLogging } from '../utils/json-utils.js';
6
6
  /**
7
7
  * Unified system tool call handler
@@ -18,19 +18,9 @@ export class SystemToolHandler {
18
18
  case LIST_SERVERS_TOOL:
19
19
  result = await hubToolsService.listServers();
20
20
  break;
21
- case FIND_SERVERS_TOOL: {
22
- const findServersArgs = toolArgs;
23
- result = await hubToolsService.findServers(findServersArgs);
24
- break;
25
- }
26
- case LIST_ALL_TOOLS_IN_SERVER_TOOL: {
27
- const listAllToolsArgs = toolArgs;
28
- result = await hubToolsService.listAllToolsInServer(listAllToolsArgs);
29
- break;
30
- }
31
- case FIND_TOOLS_IN_SERVER_TOOL: {
32
- const findToolsInServerArgs = toolArgs;
33
- result = await hubToolsService.findToolsInServer(findToolsInServerArgs);
21
+ case LIST_TOOLS_IN_SERVER_TOOL: {
22
+ const listToolsArgs = toolArgs;
23
+ result = await hubToolsService.listToolsInServer(listToolsArgs);
34
24
  break;
35
25
  }
36
26
  case GET_TOOL_TOOL: {
@@ -50,9 +40,9 @@ export class SystemToolHandler {
50
40
  });
51
41
  break;
52
42
  }
53
- case FIND_TOOLS_TOOL: {
54
- const findToolsArgs = toolArgs;
55
- result = await hubToolsService.findTools(findToolsArgs);
43
+ case UPDATE_SERVER_DESCRIPTION_TOOL: {
44
+ const updateDescArgs = toolArgs;
45
+ result = await hubToolsService.updateServerDescription(updateDescArgs);
56
46
  break;
57
47
  }
58
48
  default:
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Composite key utilities for server instance identification
3
+ *
4
+ * This module provides utilities for generating and parsing composite keys
5
+ * that uniquely identify a server instance across multiple instances
6
+ * of the same server name.
7
+ *
8
+ * Format: `${serverName}-${serverIndex}`
9
+ * Example: 'my-server-0', 'my-server-1', 'test-server-0'
10
+ */
11
+ /**
12
+ * Generates a composite key from serverName and serverIndex
13
+ * @param serverName - The server name
14
+ * @param serverIndex - The instance index
15
+ * @returns Composite key string
16
+ * @example getCompositeKey('my-server', 0) => 'my-server-0'
17
+ */
18
+ export declare function getCompositeKey(serverName: string, serverIndex: number): string;
19
+ /**
20
+ * Parses a composite key back into serverName and serverIndex
21
+ * @param key - The composite key to parse
22
+ * @returns Object with serverName and serverIndex, or null if invalid
23
+ * @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
24
+ */
25
+ export declare function parseCompositeKey(key: string): {
26
+ serverName: string;
27
+ serverIndex: number;
28
+ } | null;
29
+ //# sourceMappingURL=composite-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite-key.d.ts","sourceRoot":"","sources":["../../../../src/utils/composite-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Composite key utilities for server instance identification
3
+ *
4
+ * This module provides utilities for generating and parsing composite keys
5
+ * that uniquely identify a server instance across multiple instances
6
+ * of the same server name.
7
+ *
8
+ * Format: `${serverName}-${serverIndex}`
9
+ * Example: 'my-server-0', 'my-server-1', 'test-server-0'
10
+ */
11
+ /**
12
+ * Generates a composite key from serverName and serverIndex
13
+ * @param serverName - The server name
14
+ * @param serverIndex - The instance index
15
+ * @returns Composite key string
16
+ * @example getCompositeKey('my-server', 0) => 'my-server-0'
17
+ */
18
+ export function getCompositeKey(serverName, serverIndex) {
19
+ return `${serverName}-${serverIndex}`;
20
+ }
21
+ /**
22
+ * Parses a composite key back into serverName and serverIndex
23
+ * @param key - The composite key to parse
24
+ * @returns Object with serverName and serverIndex, or null if invalid
25
+ * @example parseCompositeKey('my-server-0') => { serverName: 'my-server', serverIndex: 0 }
26
+ */
27
+ export function parseCompositeKey(key) {
28
+ const lastDashIndex = key.lastIndexOf('-');
29
+ if (lastDashIndex === -1) {
30
+ return null;
31
+ }
32
+ const serverName = key.slice(0, lastDashIndex);
33
+ const serverIndexPart = key.slice(lastDashIndex + 1);
34
+ const serverIndex = parseInt(serverIndexPart, 10);
35
+ if (isNaN(serverIndex)) {
36
+ return null;
37
+ }
38
+ return { serverName, serverIndex };
39
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAgBrE;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IA6BzF;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAWlE"}
@@ -1,5 +1,6 @@
1
1
  import { McpError } from '@modelcontextprotocol/sdk/types.js';
2
- import { logger, LOG_MODULES } from './logger.js';
2
+ import { logger } from './logger.js';
3
+ import { LOG_MODULES } from './logger/log-modules.js';
3
4
  /**
4
5
  * Unified error handler
5
6
  */
@@ -45,7 +46,7 @@ export class ErrorHandler {
45
46
  * Handles general errors
46
47
  */
47
48
  static handleGeneralError(error, message) {
48
- logger.error(message, error);
49
+ logger.error(message, error, LOG_MODULES.ERROR_HANDLER);
49
50
  if (error instanceof McpError) {
50
51
  throw error;
51
52
  }
@@ -1,2 +1,4 @@
1
1
  export { logger, LOG_MODULES } from './logger.js';
2
+ export * from './sort-utils.js';
3
+ export * from './version.js';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClD,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -1 +1,3 @@
1
1
  export { logger, LOG_MODULES } from './logger.js';
2
+ export * from './sort-utils.js';
3
+ export * from './version.js';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Instance ID generation utilities using content-based hashing.
3
+ */
4
+ import type { ServerInstance } from '../config/config.schema.js';
5
+ /**
6
+ * Generates a stable 8-character hash from an object.
7
+ * Uses SHA-256 and returns the first 8 hex characters.
8
+ *
9
+ * @param obj - The object to hash
10
+ * @returns An 8-character hex string
11
+ */
12
+ export declare function generateInstanceHash(obj: Record<string, unknown>): string;
13
+ /**
14
+ * Generates a deterministic instance ID based on server name and instance configuration.
15
+ * The ID format is: ${serverName}-${hash}
16
+ *
17
+ * @param serverName - Name of the server
18
+ * @param instanceConfig - Partial instance configuration
19
+ * @returns A deterministic instance ID
20
+ */
21
+ export declare function generateInstanceId(serverName: string, instanceConfig: Partial<ServerInstance>): string;
22
+ //# sourceMappingURL=instance-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../../src/utils/instance-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAyBzE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GACtC,MAAM,CAiBR"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Instance ID generation utilities using content-based hashing.
3
+ */
4
+ import { createHash } from 'node:crypto';
5
+ /**
6
+ * Generates a stable 8-character hash from an object.
7
+ * Uses SHA-256 and returns the first 8 hex characters.
8
+ *
9
+ * @param obj - The object to hash
10
+ * @returns An 8-character hex string
11
+ */
12
+ export function generateInstanceHash(obj) {
13
+ function stableStringify(value) {
14
+ if (value === null || typeof value !== 'object') {
15
+ return JSON.stringify(value);
16
+ }
17
+ if (Array.isArray(value)) {
18
+ return '[' + value.map(stableStringify).join(',') + ']';
19
+ }
20
+ const sortedObj = {};
21
+ for (const key of Object.keys(value).sort()) {
22
+ sortedObj[key] = value[key];
23
+ }
24
+ return ('{' +
25
+ Object.keys(sortedObj)
26
+ .map((key) => JSON.stringify(key) + ':' + stableStringify(sortedObj[key]))
27
+ .join(',') +
28
+ '}');
29
+ }
30
+ const stableString = stableStringify(obj);
31
+ const hash = createHash('sha256');
32
+ hash.update(stableString);
33
+ return hash.digest('hex').slice(0, 8);
34
+ }
35
+ /**
36
+ * Generates a deterministic instance ID based on server name and instance configuration.
37
+ * The ID format is: ${serverName}-${hash}
38
+ *
39
+ * @param serverName - Name of the server
40
+ * @param instanceConfig - Partial instance configuration
41
+ * @returns A deterministic instance ID
42
+ */
43
+ export function generateInstanceId(serverName, instanceConfig) {
44
+ const hashableContent = {};
45
+ if (instanceConfig.args && instanceConfig.args.length > 0) {
46
+ hashableContent.args = instanceConfig.args;
47
+ }
48
+ if (instanceConfig.env) {
49
+ hashableContent.env = instanceConfig.env;
50
+ }
51
+ if (instanceConfig.headers) {
52
+ hashableContent.headers = instanceConfig.headers;
53
+ }
54
+ if (instanceConfig.tags && Object.keys(instanceConfig.tags).length > 0) {
55
+ hashableContent.tags = instanceConfig.tags;
56
+ }
57
+ const hash = generateInstanceHash(hashableContent);
58
+ return `${serverName}-${hash}`;
59
+ }
@@ -23,7 +23,7 @@ type ConfigGetter = () => {
23
23
  logging: {
24
24
  jsonPretty: boolean;
25
25
  mcpCommDebug: boolean;
26
- sessionDebug: boolean;
26
+ apiDebug: boolean;
27
27
  };
28
28
  };
29
29
  };
@@ -60,11 +60,11 @@ export declare function getJsonPrettySetting(): boolean;
60
60
  */
61
61
  export declare function getMcpCommDebugSetting(): boolean;
62
62
  /**
63
- * Get session debug setting from config getter.
63
+ * Get API debug setting from config getter.
64
64
  *
65
- * @returns boolean indicating whether to enable session debug logging
65
+ * @returns boolean indicating whether to enable API debug logging
66
66
  */
67
- export declare function getSessionDebugSetting(): boolean;
67
+ export declare function getApiDebugSetting(): boolean;
68
68
  /**
69
69
  * Stringify object for logging with dynamic pretty formatting based on LOG_JSON_PRETTY environment variable
70
70
  * @param obj Object to stringify
@@ -1 +1 @@
1
- {"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,YAAY,EAAE,OAAO,CAAC;SACvB,CAAC;KACH,CAAC;CACH,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/E;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAU9C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,GAClD,MAAM,CAOR"}
1
+ {"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/json-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAiED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM;IACxB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC;YACpB,YAAY,EAAE,OAAO,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC;SACnB,CAAC;KACH,CAAC;CACH,CAAC;AAQF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/E;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAiB9C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,GAClD,MAAM,CAOR"}
@@ -130,6 +130,12 @@ export function stringifyRawHeadersForLogging(rawHeaders) {
130
130
  * @returns boolean indicating whether to use pretty JSON formatting
131
131
  */
132
132
  export function getJsonPrettySetting() {
133
+ // Check environment variable first (highest priority)
134
+ const envValue = process.env.LOG_JSON_PRETTY;
135
+ if (envValue !== undefined) {
136
+ return envValue === 'true' || envValue === '1';
137
+ }
138
+ // Then check config getter
133
139
  if (_configGetter) {
134
140
  try {
135
141
  const config = _configGetter();
@@ -159,15 +165,15 @@ export function getMcpCommDebugSetting() {
159
165
  return getDefaultForDevMode(false);
160
166
  }
161
167
  /**
162
- * Get session debug setting from config getter.
168
+ * Get API debug setting from config getter.
163
169
  *
164
- * @returns boolean indicating whether to enable session debug logging
170
+ * @returns boolean indicating whether to enable API debug logging
165
171
  */
166
- export function getSessionDebugSetting() {
172
+ export function getApiDebugSetting() {
167
173
  if (_configGetter) {
168
174
  try {
169
175
  const config = _configGetter();
170
- return config.system.logging.sessionDebug;
176
+ return config.system.logging.apiDebug;
171
177
  }
172
178
  catch {
173
179
  // Fall through to default if config getter fails
@@ -3,7 +3,8 @@
3
3
  * This file contains development log initialization and management.
4
4
  */
5
5
  import fs from 'fs';
6
- import { LogRotator, type RotatorConfig } from '../log-rotator.js';
6
+ import { LogRotator } from '../log-rotator.js';
7
+ import type { RotatorConfig } from '../log-rotator.js';
7
8
  /**
8
9
  * Development logger configuration and setup.
9
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"dev-logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/dev-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAA2B;IAEhD;;OAEG;IACH,IAAI,MAAM,IAAI,EAAE,CAAC,WAAW,GAAG,IAAI,CAElC;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,UAAU,GAAG,IAAI,CAE/B;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAoB/F;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
1
+ {"version":3,"file":"dev-logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/dev-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAA2B;IAEhD;;OAEG;IACH,IAAI,MAAM,IAAI,EAAE,CAAC,WAAW,GAAG,IAAI,CAElC;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,UAAU,GAAG,IAAI,CAE/B;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAoB/F;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
@@ -12,6 +12,7 @@ export declare const COLORS: {
12
12
  readonly gray: "\u001B[90m";
13
13
  readonly brightCyan: "\u001B[96m";
14
14
  readonly brightMagenta: "\u001B[95m";
15
+ readonly brightBlue: "\u001B[94m";
15
16
  };
16
17
  /**
17
18
  * Get color code for a specific log level.
@@ -1 +1 @@
1
- {"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAa5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,MAAM;;;;;;;;;;CAUT,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAa5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}