@loop_ouroboros/mcp-hub-lite 1.0.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 (499) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +21 -0
  3. package/README.md +354 -0
  4. package/dist/client/assets/HomeView-f901HeKw.js +1 -0
  5. package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
  6. package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
  7. package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
  8. package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
  9. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
  10. package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
  11. package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
  12. package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
  14. package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
  15. package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
  16. package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
  17. package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
  18. package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
  19. package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
  20. package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
  21. package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  22. package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
  23. package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
  24. package/dist/client/assets/el-input-BtI9NECe.js +1 -0
  25. package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
  26. package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
  27. package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
  28. package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
  29. package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
  30. package/dist/client/assets/el-select-BXztu2b5.js +1 -0
  31. package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
  32. package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
  33. package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
  34. package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
  35. package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
  36. package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
  37. package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
  38. package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
  39. package/dist/client/assets/index-BgKcmWJr.js +1 -0
  40. package/dist/client/assets/index-BsDWtoIl.css +1 -0
  41. package/dist/client/assets/index-BzQXG7no.js +1 -0
  42. package/dist/client/assets/index-CSTs2jYk.js +2 -0
  43. package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
  44. package/dist/client/assets/raf-B9VDMtMF.js +1 -0
  45. package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
  46. package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
  47. package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
  48. package/dist/client/index.html +15 -0
  49. package/dist/server/shared/index.d.ts +3 -0
  50. package/dist/server/shared/index.d.ts.map +1 -0
  51. package/dist/server/shared/index.js +2 -0
  52. package/dist/server/shared/models/index.d.ts +4 -0
  53. package/dist/server/shared/models/index.d.ts.map +1 -0
  54. package/dist/server/shared/models/index.js +3 -0
  55. package/dist/server/shared/models/resource.model.d.ts +8 -0
  56. package/dist/server/shared/models/resource.model.d.ts.map +1 -0
  57. package/dist/server/shared/models/resource.model.js +1 -0
  58. package/dist/server/shared/models/server.model.d.ts +57 -0
  59. package/dist/server/shared/models/server.model.d.ts.map +1 -0
  60. package/dist/server/shared/models/server.model.js +1 -0
  61. package/dist/server/shared/models/session.model.d.ts +73 -0
  62. package/dist/server/shared/models/session.model.d.ts.map +1 -0
  63. package/dist/server/shared/models/session.model.js +70 -0
  64. package/dist/server/shared/models/tool.model.d.ts +22 -0
  65. package/dist/server/shared/models/tool.model.d.ts.map +1 -0
  66. package/dist/server/shared/models/tool.model.js +1 -0
  67. package/dist/server/shared/types/client.types.d.ts +35 -0
  68. package/dist/server/shared/types/client.types.d.ts.map +1 -0
  69. package/dist/server/shared/types/client.types.js +5 -0
  70. package/dist/server/shared/types/common.types.d.ts +5 -0
  71. package/dist/server/shared/types/common.types.d.ts.map +1 -0
  72. package/dist/server/shared/types/common.types.js +2 -0
  73. package/dist/server/shared/types/index.d.ts +4 -0
  74. package/dist/server/shared/types/index.d.ts.map +1 -0
  75. package/dist/server/shared/types/index.js +3 -0
  76. package/dist/server/shared/types/session.types.d.ts +15 -0
  77. package/dist/server/shared/types/session.types.d.ts.map +1 -0
  78. package/dist/server/shared/types/session.types.js +5 -0
  79. package/dist/server/shared/types/websocket.types.d.ts +177 -0
  80. package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
  81. package/dist/server/shared/types/websocket.types.js +25 -0
  82. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
  83. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
  84. package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
  85. package/dist/server/src/api/mcp/gateway.d.ts +14 -0
  86. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
  87. package/dist/server/src/api/mcp/gateway.js +116 -0
  88. package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
  89. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
  90. package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
  91. package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
  92. package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
  93. package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
  94. package/dist/server/src/api/web/clients.d.ts +30 -0
  95. package/dist/server/src/api/web/clients.d.ts.map +1 -0
  96. package/dist/server/src/api/web/clients.js +41 -0
  97. package/dist/server/src/api/web/config.d.ts +21 -0
  98. package/dist/server/src/api/web/config.d.ts.map +1 -0
  99. package/dist/server/src/api/web/config.js +119 -0
  100. package/dist/server/src/api/web/health.d.ts +21 -0
  101. package/dist/server/src/api/web/health.d.ts.map +1 -0
  102. package/dist/server/src/api/web/health.js +24 -0
  103. package/dist/server/src/api/web/hub-tools.d.ts +30 -0
  104. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
  105. package/dist/server/src/api/web/hub-tools.js +202 -0
  106. package/dist/server/src/api/web/logs.d.ts +30 -0
  107. package/dist/server/src/api/web/logs.d.ts.map +1 -0
  108. package/dist/server/src/api/web/logs.js +141 -0
  109. package/dist/server/src/api/web/mcp-status.d.ts +29 -0
  110. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
  111. package/dist/server/src/api/web/mcp-status.js +126 -0
  112. package/dist/server/src/api/web/resources.d.ts +28 -0
  113. package/dist/server/src/api/web/resources.d.ts.map +1 -0
  114. package/dist/server/src/api/web/resources.js +93 -0
  115. package/dist/server/src/api/web/search.d.ts +26 -0
  116. package/dist/server/src/api/web/search.d.ts.map +1 -0
  117. package/dist/server/src/api/web/search.js +62 -0
  118. package/dist/server/src/api/web/servers.d.ts +33 -0
  119. package/dist/server/src/api/web/servers.d.ts.map +1 -0
  120. package/dist/server/src/api/web/servers.js +235 -0
  121. package/dist/server/src/api/web/sessions.d.ts +29 -0
  122. package/dist/server/src/api/web/sessions.d.ts.map +1 -0
  123. package/dist/server/src/api/web/sessions.js +104 -0
  124. package/dist/server/src/api/ws/events.d.ts +29 -0
  125. package/dist/server/src/api/ws/events.d.ts.map +1 -0
  126. package/dist/server/src/api/ws/events.js +44 -0
  127. package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
  128. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
  129. package/dist/server/src/api/ws/ws-handler.js +217 -0
  130. package/dist/server/src/app.d.ts +24 -0
  131. package/dist/server/src/app.d.ts.map +1 -0
  132. package/dist/server/src/app.js +108 -0
  133. package/dist/server/src/cli/commands/list.d.ts +71 -0
  134. package/dist/server/src/cli/commands/list.d.ts.map +1 -0
  135. package/dist/server/src/cli/commands/list.js +97 -0
  136. package/dist/server/src/cli/commands/restart.d.ts +42 -0
  137. package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
  138. package/dist/server/src/cli/commands/restart.js +61 -0
  139. package/dist/server/src/cli/commands/start.d.ts +43 -0
  140. package/dist/server/src/cli/commands/start.d.ts.map +1 -0
  141. package/dist/server/src/cli/commands/start.js +160 -0
  142. package/dist/server/src/cli/commands/status.d.ts +39 -0
  143. package/dist/server/src/cli/commands/status.d.ts.map +1 -0
  144. package/dist/server/src/cli/commands/status.js +164 -0
  145. package/dist/server/src/cli/commands/stop.d.ts +34 -0
  146. package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
  147. package/dist/server/src/cli/commands/stop.js +47 -0
  148. package/dist/server/src/cli/commands/ui.d.ts +44 -0
  149. package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
  150. package/dist/server/src/cli/commands/ui.js +95 -0
  151. package/dist/server/src/cli/index.d.ts +62 -0
  152. package/dist/server/src/cli/index.d.ts.map +1 -0
  153. package/dist/server/src/cli/index.js +88 -0
  154. package/dist/server/src/cli/parse-args.d.ts +108 -0
  155. package/dist/server/src/cli/parse-args.d.ts.map +1 -0
  156. package/dist/server/src/cli/parse-args.js +131 -0
  157. package/dist/server/src/cli/server.d.ts +171 -0
  158. package/dist/server/src/cli/server.d.ts.map +1 -0
  159. package/dist/server/src/cli/server.js +246 -0
  160. package/dist/server/src/config/config-change-logger.d.ts +16 -0
  161. package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
  162. package/dist/server/src/config/config-change-logger.js +43 -0
  163. package/dist/server/src/config/config-loader.d.ts +22 -0
  164. package/dist/server/src/config/config-loader.d.ts.map +1 -0
  165. package/dist/server/src/config/config-loader.js +66 -0
  166. package/dist/server/src/config/config-manager.d.ts +158 -0
  167. package/dist/server/src/config/config-manager.d.ts.map +1 -0
  168. package/dist/server/src/config/config-manager.js +246 -0
  169. package/dist/server/src/config/config-saver.d.ts +16 -0
  170. package/dist/server/src/config/config-saver.d.ts.map +1 -0
  171. package/dist/server/src/config/config-saver.js +28 -0
  172. package/dist/server/src/config/config.schema.d.ts +108 -0
  173. package/dist/server/src/config/config.schema.d.ts.map +1 -0
  174. package/dist/server/src/config/config.schema.js +103 -0
  175. package/dist/server/src/config/server-config-manager.d.ts +74 -0
  176. package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
  177. package/dist/server/src/config/server-config-manager.js +157 -0
  178. package/dist/server/src/config/type-converter.d.ts +13 -0
  179. package/dist/server/src/config/type-converter.d.ts.map +1 -0
  180. package/dist/server/src/config/type-converter.js +37 -0
  181. package/dist/server/src/index.d.ts +3 -0
  182. package/dist/server/src/index.d.ts.map +1 -0
  183. package/dist/server/src/index.js +352 -0
  184. package/dist/server/src/models/event.model.d.ts +106 -0
  185. package/dist/server/src/models/event.model.d.ts.map +1 -0
  186. package/dist/server/src/models/event.model.js +5 -0
  187. package/dist/server/src/models/server.model.d.ts +19 -0
  188. package/dist/server/src/models/server.model.d.ts.map +1 -0
  189. package/dist/server/src/models/server.model.js +1 -0
  190. package/dist/server/src/models/system-tools.constants.d.ts +73 -0
  191. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
  192. package/dist/server/src/models/system-tools.constants.js +31 -0
  193. package/dist/server/src/models/types.d.ts +84 -0
  194. package/dist/server/src/models/types.d.ts.map +1 -0
  195. package/dist/server/src/models/types.js +67 -0
  196. package/dist/server/src/pid/file.d.ts +26 -0
  197. package/dist/server/src/pid/file.d.ts.map +1 -0
  198. package/dist/server/src/pid/file.js +68 -0
  199. package/dist/server/src/pid/manager.d.ts +98 -0
  200. package/dist/server/src/pid/manager.d.ts.map +1 -0
  201. package/dist/server/src/pid/manager.js +158 -0
  202. package/dist/server/src/pid/types.d.ts +13 -0
  203. package/dist/server/src/pid/types.d.ts.map +1 -0
  204. package/dist/server/src/pid/types.js +4 -0
  205. package/dist/server/src/server/dev-server.d.ts +2 -0
  206. package/dist/server/src/server/dev-server.d.ts.map +1 -0
  207. package/dist/server/src/server/dev-server.js +171 -0
  208. package/dist/server/src/server/runner.d.ts +57 -0
  209. package/dist/server/src/server/runner.d.ts.map +1 -0
  210. package/dist/server/src/server/runner.js +163 -0
  211. package/dist/server/src/services/client-tracker.service.d.ts +132 -0
  212. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/client-tracker.service.js +203 -0
  214. package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
  215. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
  216. package/dist/server/src/services/connection/connection-manager.js +929 -0
  217. package/dist/server/src/services/connection/index.d.ts +6 -0
  218. package/dist/server/src/services/connection/index.d.ts.map +1 -0
  219. package/dist/server/src/services/connection/index.js +4 -0
  220. package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
  221. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
  222. package/dist/server/src/services/connection/tool-cache.js +202 -0
  223. package/dist/server/src/services/connection/types.d.ts +30 -0
  224. package/dist/server/src/services/connection/types.d.ts.map +1 -0
  225. package/dist/server/src/services/connection/types.js +1 -0
  226. package/dist/server/src/services/event-bus.service.d.ts +169 -0
  227. package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
  228. package/dist/server/src/services/event-bus.service.js +200 -0
  229. package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
  230. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
  231. package/dist/server/src/services/gateway/gateway.service.js +107 -0
  232. package/dist/server/src/services/gateway/index.d.ts +8 -0
  233. package/dist/server/src/services/gateway/index.d.ts.map +1 -0
  234. package/dist/server/src/services/gateway/index.js +6 -0
  235. package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
  236. package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
  237. package/dist/server/src/services/gateway/log-formatter.js +66 -0
  238. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
  239. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
  240. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
  241. package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
  242. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
  243. package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
  244. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
  245. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
  246. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
  247. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
  248. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
  249. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
  250. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
  251. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
  252. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
  253. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
  254. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
  255. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
  256. package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
  257. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
  258. package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
  259. package/dist/server/src/services/gateway/types.d.ts +27 -0
  260. package/dist/server/src/services/gateway/types.d.ts.map +1 -0
  261. package/dist/server/src/services/gateway/types.js +4 -0
  262. package/dist/server/src/services/gateway.service.d.ts +7 -0
  263. package/dist/server/src/services/gateway.service.d.ts.map +1 -0
  264. package/dist/server/src/services/gateway.service.js +6 -0
  265. package/dist/server/src/services/hub-manager.service.d.ts +299 -0
  266. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
  267. package/dist/server/src/services/hub-manager.service.js +413 -0
  268. package/dist/server/src/services/hub-tools/index.d.ts +10 -0
  269. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
  270. package/dist/server/src/services/hub-tools/index.js +6 -0
  271. package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
  272. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
  273. package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
  274. package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
  275. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
  276. package/dist/server/src/services/hub-tools/server-selector.js +108 -0
  277. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
  278. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
  279. package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
  280. package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
  281. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
  282. package/dist/server/src/services/hub-tools/tool-search.js +115 -0
  283. package/dist/server/src/services/hub-tools/types.d.ts +42 -0
  284. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
  285. package/dist/server/src/services/hub-tools/types.js +1 -0
  286. package/dist/server/src/services/hub-tools.service.d.ts +235 -0
  287. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
  288. package/dist/server/src/services/hub-tools.service.js +457 -0
  289. package/dist/server/src/services/log-storage.service.d.ts +177 -0
  290. package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
  291. package/dist/server/src/services/log-storage.service.js +243 -0
  292. package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
  293. package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
  294. package/dist/server/src/services/mcp-connection-manager.js +6 -0
  295. package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
  296. package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
  297. package/dist/server/src/services/mcp-session-manager.js +4 -0
  298. package/dist/server/src/services/search/index.d.ts +5 -0
  299. package/dist/server/src/services/search/index.d.ts.map +1 -0
  300. package/dist/server/src/services/search/index.js +5 -0
  301. package/dist/server/src/services/search/search-cache.d.ts +132 -0
  302. package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
  303. package/dist/server/src/services/search/search-cache.js +151 -0
  304. package/dist/server/src/services/search/search-core.service.d.ts +108 -0
  305. package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
  306. package/dist/server/src/services/search/search-core.service.js +187 -0
  307. package/dist/server/src/services/search/search-scorer.d.ts +54 -0
  308. package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
  309. package/dist/server/src/services/search/search-scorer.js +83 -0
  310. package/dist/server/src/services/search/types.d.ts +20 -0
  311. package/dist/server/src/services/search/types.d.ts.map +1 -0
  312. package/dist/server/src/services/search/types.js +1 -0
  313. package/dist/server/src/services/session/index.d.ts +6 -0
  314. package/dist/server/src/services/session/index.d.ts.map +1 -0
  315. package/dist/server/src/services/session/index.js +4 -0
  316. package/dist/server/src/services/session/session-manager.d.ts +352 -0
  317. package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
  318. package/dist/server/src/services/session/session-manager.js +835 -0
  319. package/dist/server/src/services/session/types.d.ts +32 -0
  320. package/dist/server/src/services/session/types.d.ts.map +1 -0
  321. package/dist/server/src/services/session/types.js +1 -0
  322. package/dist/server/src/services/simple-search.service.d.ts +67 -0
  323. package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
  324. package/dist/server/src/services/simple-search.service.js +82 -0
  325. package/dist/server/src/services/system-tool-handler.d.ts +10 -0
  326. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
  327. package/dist/server/src/services/system-tool-handler.js +77 -0
  328. package/dist/server/src/utils/error-handler.d.ts +18 -0
  329. package/dist/server/src/utils/error-handler.d.ts.map +1 -0
  330. package/dist/server/src/utils/error-handler.js +59 -0
  331. package/dist/server/src/utils/format-utils.d.ts +23 -0
  332. package/dist/server/src/utils/format-utils.d.ts.map +1 -0
  333. package/dist/server/src/utils/format-utils.js +58 -0
  334. package/dist/server/src/utils/index.d.ts +2 -0
  335. package/dist/server/src/utils/index.d.ts.map +1 -0
  336. package/dist/server/src/utils/index.js +1 -0
  337. package/dist/server/src/utils/json-utils.d.ts +82 -0
  338. package/dist/server/src/utils/json-utils.d.ts.map +1 -0
  339. package/dist/server/src/utils/json-utils.js +204 -0
  340. package/dist/server/src/utils/log-rotator.d.ts +223 -0
  341. package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
  342. package/dist/server/src/utils/log-rotator.js +306 -0
  343. package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
  344. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
  345. package/dist/server/src/utils/logger/dev-logger.js +63 -0
  346. package/dist/server/src/utils/logger/index.d.ts +36 -0
  347. package/dist/server/src/utils/logger/index.d.ts.map +1 -0
  348. package/dist/server/src/utils/logger/index.js +46 -0
  349. package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
  350. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
  351. package/dist/server/src/utils/logger/log-colors.js +41 -0
  352. package/dist/server/src/utils/logger/log-context.d.ts +13 -0
  353. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
  354. package/dist/server/src/utils/logger/log-context.js +5 -0
  355. package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
  356. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
  357. package/dist/server/src/utils/logger/log-formatter.js +150 -0
  358. package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
  359. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
  360. package/dist/server/src/utils/logger/log-modules.js +81 -0
  361. package/dist/server/src/utils/logger/log-output.d.ts +68 -0
  362. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
  363. package/dist/server/src/utils/logger/log-output.js +320 -0
  364. package/dist/server/src/utils/logger/logger.d.ts +190 -0
  365. package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
  366. package/dist/server/src/utils/logger/logger.js +350 -0
  367. package/dist/server/src/utils/logger.d.ts +12 -0
  368. package/dist/server/src/utils/logger.d.ts.map +1 -0
  369. package/dist/server/src/utils/logger.js +12 -0
  370. package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
  371. package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
  372. package/dist/server/src/utils/mcp-error-handler.js +270 -0
  373. package/dist/server/src/utils/port-checker.d.ts +16 -0
  374. package/dist/server/src/utils/port-checker.d.ts.map +1 -0
  375. package/dist/server/src/utils/port-checker.js +242 -0
  376. package/dist/server/src/utils/request-context.d.ts +71 -0
  377. package/dist/server/src/utils/request-context.d.ts.map +1 -0
  378. package/dist/server/src/utils/request-context.js +73 -0
  379. package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
  380. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
  381. package/dist/server/src/utils/tool-args-parser.js +34 -0
  382. package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
  383. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
  384. package/dist/server/src/utils/transports/sse-transport.js +189 -0
  385. package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
  386. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
  387. package/dist/server/src/utils/transports/stdio-transport.js +324 -0
  388. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
  389. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
  390. package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
  391. package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
  392. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
  393. package/dist/server/src/utils/transports/transport-factory.js +104 -0
  394. package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
  395. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
  396. package/dist/server/src/utils/transports/transport.interface.js +1 -0
  397. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
  398. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
  399. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
  400. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
  401. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
  402. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
  403. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
  404. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
  405. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
  406. package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
  407. package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
  408. package/dist/server/tests/evaluation/evaluation.test.js +102 -0
  409. package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
  410. package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
  411. package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
  412. package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
  413. package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
  414. package/dist/server/tests/integration/api/gateway.test.js +366 -0
  415. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
  416. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
  417. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
  418. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
  419. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
  420. package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
  421. package/dist/server/tests/server.test.d.ts +2 -0
  422. package/dist/server/tests/server.test.d.ts.map +1 -0
  423. package/dist/server/tests/server.test.js +95 -0
  424. package/dist/server/tests/setup.d.ts +7 -0
  425. package/dist/server/tests/setup.d.ts.map +1 -0
  426. package/dist/server/tests/setup.js +53 -0
  427. package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
  428. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
  429. package/dist/server/tests/types/logger-test-helpers.js +4 -0
  430. package/dist/server/tests/types/test-helpers.d.ts +27 -0
  431. package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
  432. package/dist/server/tests/types/test-helpers.js +4 -0
  433. package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
  434. package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
  435. package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
  436. package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
  437. package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
  438. package/dist/server/tests/unit/cli/cli.test.js +17 -0
  439. package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
  440. package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
  441. package/dist/server/tests/unit/cli/commands.test.js +75 -0
  442. package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
  443. package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
  444. package/dist/server/tests/unit/cli/server.test.js +68 -0
  445. package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
  446. package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
  447. package/dist/server/tests/unit/server/runner.test.js +488 -0
  448. package/dist/server/tests/unit/server/setup.d.ts +2 -0
  449. package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
  450. package/dist/server/tests/unit/server/setup.js +21 -0
  451. package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
  452. package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
  453. package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
  454. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
  455. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
  456. package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
  457. package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
  458. package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
  459. package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
  460. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
  461. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
  462. package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
  463. package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
  464. package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
  465. package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
  466. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
  467. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
  468. package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
  469. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
  470. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
  471. package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
  472. package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
  473. package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
  474. package/dist/server/tests/unit/services/session-manager.test.js +481 -0
  475. package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
  476. package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
  477. package/dist/server/tests/unit/utils/config.test.js +634 -0
  478. package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
  479. package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
  480. package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
  481. package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
  482. package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
  483. package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
  484. package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
  485. package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
  486. package/dist/server/tests/unit/utils/logger.test.js +462 -0
  487. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
  488. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
  489. package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
  490. package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
  491. package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
  492. package/dist/server/tests/unit/utils/request-context.test.js +82 -0
  493. package/dist/server/vite.config.d.ts +3 -0
  494. package/dist/server/vite.config.d.ts.map +1 -0
  495. package/dist/server/vite.config.js +160 -0
  496. package/dist/server/vitest.config.d.ts +3 -0
  497. package/dist/server/vitest.config.d.ts.map +1 -0
  498. package/dist/server/vitest.config.js +53 -0
  499. package/package.json +113 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Configuration loading utilities.
3
+ * Handles loading and parsing configuration from files with validation.
4
+ */
5
+ import * as fs from 'fs';
6
+ import { logger, LOG_MODULES } from '../utils/logger.js';
7
+ import { SystemConfigSchema } from './config.schema.js';
8
+ import { convertHttpToStreamableHttp } from './type-converter.js';
9
+ /**
10
+ * Loads configuration from the specified file path.
11
+ *
12
+ * This function handles the complete configuration loading process:
13
+ * - Checks if the config file exists at the specified path
14
+ * - Reads and parses the JSON configuration
15
+ * - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
16
+ * - Validates the configuration using Zod schema
17
+ * - Handles validation failures gracefully by falling back to default configuration
18
+ *
19
+ * If the config file doesn't exist or fails to load, a default configuration is returned.
20
+ *
21
+ * @param configPath - Path to the configuration file
22
+ * @returns The loaded and validated system configuration
23
+ */
24
+ export function loadConfig(configPath) {
25
+ try {
26
+ if (fs.existsSync(configPath)) {
27
+ logger.info(`Loading configuration from: ${configPath}`, LOG_MODULES.CONFIG_MANAGER);
28
+ const content = fs.readFileSync(configPath, 'utf-8');
29
+ let config = JSON.parse(content);
30
+ // Unified type conversion: convert http to streamable-http
31
+ config = convertHttpToStreamableHttp(config);
32
+ // Ensure defaults without validation errors blocking
33
+ try {
34
+ // Use safeParse to validate configuration
35
+ const parsed = SystemConfigSchema.safeParse(config);
36
+ if (parsed.success) {
37
+ // Ensure server configurations are sorted by name
38
+ const configWithSortedServers = {
39
+ ...parsed.data,
40
+ servers: Object.fromEntries(Object.entries(parsed.data.servers).sort(([a], [b]) => a.localeCompare(b)))
41
+ };
42
+ return configWithSortedServers;
43
+ }
44
+ else {
45
+ // On validation failure, log error and use default configuration
46
+ logger.error(`Config validation failed: ${parsed.error}`);
47
+ return SystemConfigSchema.parse({});
48
+ }
49
+ }
50
+ catch (e) {
51
+ logger.error(`Failed to parse config: ${e}`);
52
+ // On parsing failure, use default configuration
53
+ return SystemConfigSchema.parse({});
54
+ }
55
+ }
56
+ else {
57
+ // When config file doesn't exist, create default config in memory only
58
+ return SystemConfigSchema.parse({});
59
+ }
60
+ }
61
+ catch (error) {
62
+ logger.error(`Failed to load config: ${error}`);
63
+ // On config file load failure, use default configuration
64
+ return SystemConfigSchema.parse({});
65
+ }
66
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Configuration Manager for MCP Hub Lite system.
3
+ *
4
+ * This class provides comprehensive configuration management capabilities including:
5
+ * - Loading and parsing configuration from JSON files
6
+ * - Runtime configuration updates with validation
7
+ * - Server and server instance lifecycle management
8
+ * - Automatic configuration persistence to disk
9
+ * - Type conversion and compatibility handling (e.g., 'http' to 'streamable-http')
10
+ * - Configuration change logging and tracking
11
+ *
12
+ * This is a thin wrapper around modular utilities for better maintainability.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Get the config manager instance
17
+ * const configManager = getConfigManager();
18
+ *
19
+ * // Get all servers
20
+ * const servers = configManager.getServers();
21
+ *
22
+ * // Add a new server
23
+ * await configManager.addServer('my-server', {
24
+ * type: 'stdio',
25
+ * command: 'npx my-mcp-server',
26
+ * enabled: true
27
+ * });
28
+ * ```
29
+ */
30
+ import { SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema } from './config.schema.js';
31
+ import type { ServerConfig, SystemConfig, ServerInstanceConfig } from './config.schema.js';
32
+ export { ServerConfig, SystemConfig, ServerInstanceConfig, SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema };
33
+ export declare class ConfigManager {
34
+ private configPath;
35
+ private config;
36
+ private serverInstances;
37
+ constructor(configPath?: string);
38
+ private initServerInstances;
39
+ /**
40
+ * Retrieves the current system configuration.
41
+ *
42
+ * @returns A deep copy of the current system configuration
43
+ */
44
+ getConfig(): SystemConfig;
45
+ /**
46
+ * Retrieves all configured servers with their configurations.
47
+ *
48
+ * @param sortByName - Whether to sort servers by name
49
+ * @returns Array of server objects with name and config
50
+ */
51
+ getServers(sortByName?: boolean): Array<{
52
+ name: string;
53
+ config: ServerConfig;
54
+ }>;
55
+ /**
56
+ * Retrieves a server configuration by name.
57
+ *
58
+ * @param name - The name of the server to retrieve
59
+ * @returns The server configuration or undefined if not found
60
+ */
61
+ getServerByName(name: string): ServerConfig | undefined;
62
+ /**
63
+ * Retrieves all server instances grouped by server name.
64
+ *
65
+ * @returns Server instances grouped by server name
66
+ */
67
+ getServerInstances(): Record<string, ServerInstanceConfig[]>;
68
+ /**
69
+ * Retrieves all server instances for a specific server by name.
70
+ *
71
+ * @param name - The name of the server to retrieve instances for
72
+ * @returns Array of server instances, or empty array if none exist
73
+ */
74
+ getServerInstanceByName(name: string): ServerInstanceConfig[];
75
+ /**
76
+ * Retrieves server information by its unique instance ID.
77
+ *
78
+ * @param id - The unique instance ID to search for
79
+ * @returns Complete server information including name, configuration, and instance details
80
+ */
81
+ getServerById(id: string): {
82
+ name: string;
83
+ config: ServerConfig;
84
+ instance: ServerInstanceConfig;
85
+ } | undefined;
86
+ /**
87
+ * Adds multiple server configurations to the system in a single operation.
88
+ *
89
+ * @param servers - Array of server objects containing name and partial configuration
90
+ */
91
+ addServers(servers: Array<{
92
+ name: string;
93
+ config: Partial<ServerConfig>;
94
+ }>): Promise<void>;
95
+ /**
96
+ * Adds a new server configuration to the system.
97
+ *
98
+ * @param name - The unique name for the server
99
+ * @param config - The server configuration
100
+ * @returns The validated and complete server configuration
101
+ */
102
+ addServer(name: string, config: Partial<ServerConfig>): Promise<ServerConfig>;
103
+ /**
104
+ * Adds a new server instance for the specified server.
105
+ *
106
+ * @param name - The name of the server to add an instance for
107
+ * @param instance - The server instance configuration
108
+ * @returns The validated and complete server instance configuration
109
+ */
110
+ addServerInstance(name: string, instance: Partial<ServerInstanceConfig>): Promise<ServerInstanceConfig>;
111
+ /**
112
+ * Updates an existing server configuration with the provided changes.
113
+ *
114
+ * @param name - The name of the server to update
115
+ * @param updates - The partial configuration updates to apply
116
+ */
117
+ updateServer(name: string, updates: Partial<ServerConfig>): Promise<void>;
118
+ /**
119
+ * Updates an existing server instance configuration with the provided changes.
120
+ *
121
+ * @param name - The name of the server containing the instance to update
122
+ * @param index - The index of the instance to update in the instances array
123
+ * @param updates - The partial instance configuration updates to apply
124
+ */
125
+ updateServerInstance(name: string, index: number, updates: Partial<ServerInstanceConfig>): Promise<void>;
126
+ /**
127
+ * Removes a server configuration and all its instances from the system.
128
+ *
129
+ * @param name - The name of the server to remove
130
+ * @returns True if the server was removed, false if it didn't exist
131
+ */
132
+ removeServer(name: string): Promise<void>;
133
+ /**
134
+ * Removes a specific server instance from the system.
135
+ *
136
+ * @param name - The name of the server containing the instance to remove
137
+ * @param index - The index of the instance to remove from the instances array
138
+ */
139
+ removeServerInstance(name: string, index: number): Promise<void>;
140
+ /**
141
+ * Updates the entire system configuration with the provided partial configuration.
142
+ *
143
+ * @param newConfig - Partial system configuration containing updates
144
+ */
145
+ updateConfig(newConfig: Partial<SystemConfig>): Promise<void>;
146
+ private persistConfig;
147
+ /**
148
+ * Synchronizes the in-memory configuration with the on-disk configuration file.
149
+ */
150
+ syncConfig(): Promise<void>;
151
+ }
152
+ /**
153
+ * Get the config manager instance
154
+ * In test environment, always creates a new instance to prevent test pollution
155
+ */
156
+ export declare function getConfigManager(): ConfigManager;
157
+ export declare const configManager: ConfigManager;
158
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAgB3F,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC3B,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAA8C;gBAEzD,UAAU,CAAC,EAAE,MAAM;IAU/B,OAAO,CAAC,mBAAmB;IAW3B;;;;OAIG;IACI,SAAS,IAAI,YAAY;IAIhC;;;;;OAKG;IACI,UAAU,CAAC,UAAU,GAAE,OAAe,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;IAW7F;;;;;OAKG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;;;OAIG;IACI,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAInE;;;;;OAKG;IACI,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAIpE;;;;;OAKG;IACI,aAAa,CAClB,EAAE,EAAE,MAAM,GACT;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,oBAAoB,CAAA;KAAE,GAAG,SAAS;IAUrF;;;;OAIG;IACU,UAAU,CACrB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;KAAE,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;OAMG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAM1F;;;;;;OAMG;IACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACtC,OAAO,CAAC,oBAAoB,CAAC;IAIhC;;;;;OAKG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtF;;;;;;OAMG;IACU,oBAAoB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD;;;;;OAKG;IACU,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E;;;;OAIG;IACU,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1E,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAchD;AAGD,eAAO,MAAM,aAAa,eAAqB,CAAC"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Configuration Manager for MCP Hub Lite system.
3
+ *
4
+ * This class provides comprehensive configuration management capabilities including:
5
+ * - Loading and parsing configuration from JSON files
6
+ * - Runtime configuration updates with validation
7
+ * - Server and server instance lifecycle management
8
+ * - Automatic configuration persistence to disk
9
+ * - Type conversion and compatibility handling (e.g., 'http' to 'streamable-http')
10
+ * - Configuration change logging and tracking
11
+ *
12
+ * This is a thin wrapper around modular utilities for better maintainability.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Get the config manager instance
17
+ * const configManager = getConfigManager();
18
+ *
19
+ * // Get all servers
20
+ * const servers = configManager.getServers();
21
+ *
22
+ * // Add a new server
23
+ * await configManager.addServer('my-server', {
24
+ * type: 'stdio',
25
+ * command: 'npx my-mcp-server',
26
+ * enabled: true
27
+ * });
28
+ * ```
29
+ */
30
+ import path from 'path';
31
+ import os from 'os';
32
+ import { logger, LOG_MODULES } from '../utils/logger.js';
33
+ import { SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema } from './config.schema.js';
34
+ import { loadConfig } from './config-loader.js';
35
+ import { saveConfig } from './config-saver.js';
36
+ import { convertHttpToStreamableHttp } from './type-converter.js';
37
+ import { logConfigChanges } from './config-change-logger.js';
38
+ import { addServers, addServer, addServerInstance, updateServer, updateServerInstance, removeServer, removeServerInstance } from './server-config-manager.js';
39
+ // Re-export types for external use
40
+ export { SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema };
41
+ export class ConfigManager {
42
+ configPath;
43
+ config;
44
+ serverInstances = {};
45
+ constructor(configPath) {
46
+ this.configPath =
47
+ configPath ||
48
+ process.env.MCP_HUB_CONFIG_PATH ||
49
+ path.join(os.homedir(), '.mcp-hub-lite', 'config', '.mcp-hub.json');
50
+ logger.info(`Using config file: ${this.configPath}`, LOG_MODULES.CONFIG_MANAGER);
51
+ this.config = loadConfig(this.configPath);
52
+ this.initServerInstances();
53
+ }
54
+ initServerInstances() {
55
+ // Init server instances
56
+ if (this.config && this.config.servers && typeof this.config.servers === 'object') {
57
+ Object.keys(this.config.servers).forEach((name) => {
58
+ if (!this.serverInstances[name])
59
+ this.serverInstances[name] = [];
60
+ });
61
+ }
62
+ else if (!this.config) {
63
+ this.config = SystemConfigSchema.parse({});
64
+ }
65
+ }
66
+ /**
67
+ * Retrieves the current system configuration.
68
+ *
69
+ * @returns A deep copy of the current system configuration
70
+ */
71
+ getConfig() {
72
+ return { ...this.config };
73
+ }
74
+ /**
75
+ * Retrieves all configured servers with their configurations.
76
+ *
77
+ * @param sortByName - Whether to sort servers by name
78
+ * @returns Array of server objects with name and config
79
+ */
80
+ getServers(sortByName = false) {
81
+ let servers = Object.entries(this.config.servers || {}).map(([name, config]) => ({
82
+ name,
83
+ config
84
+ }));
85
+ if (sortByName) {
86
+ servers = [...servers].sort((a, b) => a.name.localeCompare(b.name));
87
+ }
88
+ return servers;
89
+ }
90
+ /**
91
+ * Retrieves a server configuration by name.
92
+ *
93
+ * @param name - The name of the server to retrieve
94
+ * @returns The server configuration or undefined if not found
95
+ */
96
+ getServerByName(name) {
97
+ return this.config.servers?.[name];
98
+ }
99
+ /**
100
+ * Retrieves all server instances grouped by server name.
101
+ *
102
+ * @returns Server instances grouped by server name
103
+ */
104
+ getServerInstances() {
105
+ return { ...this.serverInstances };
106
+ }
107
+ /**
108
+ * Retrieves all server instances for a specific server by name.
109
+ *
110
+ * @param name - The name of the server to retrieve instances for
111
+ * @returns Array of server instances, or empty array if none exist
112
+ */
113
+ getServerInstanceByName(name) {
114
+ return this.serverInstances[name] || [];
115
+ }
116
+ /**
117
+ * Retrieves server information by its unique instance ID.
118
+ *
119
+ * @param id - The unique instance ID to search for
120
+ * @returns Complete server information including name, configuration, and instance details
121
+ */
122
+ getServerById(id) {
123
+ for (const [serverName, instances] of Object.entries(this.serverInstances)) {
124
+ const instance = instances.find((inst) => inst.id === id);
125
+ if (instance) {
126
+ return { name: serverName, config: this.config.servers[serverName], instance };
127
+ }
128
+ }
129
+ return undefined;
130
+ }
131
+ /**
132
+ * Adds multiple server configurations to the system in a single operation.
133
+ *
134
+ * @param servers - Array of server objects containing name and partial configuration
135
+ */
136
+ async addServers(servers) {
137
+ this.config.servers = addServers(servers, this.config.servers, this.serverInstances);
138
+ this.persistConfig();
139
+ }
140
+ /**
141
+ * Adds a new server configuration to the system.
142
+ *
143
+ * @param name - The unique name for the server
144
+ * @param config - The server configuration
145
+ * @returns The validated and complete server configuration
146
+ */
147
+ async addServer(name, config) {
148
+ const validated = addServer(name, config, this.config.servers, this.serverInstances);
149
+ this.persistConfig();
150
+ return validated;
151
+ }
152
+ /**
153
+ * Adds a new server instance for the specified server.
154
+ *
155
+ * @param name - The name of the server to add an instance for
156
+ * @param instance - The server instance configuration
157
+ * @returns The validated and complete server instance configuration
158
+ */
159
+ async addServerInstance(name, instance) {
160
+ return addServerInstance(name, instance, this.serverInstances);
161
+ }
162
+ /**
163
+ * Updates an existing server configuration with the provided changes.
164
+ *
165
+ * @param name - The name of the server to update
166
+ * @param updates - The partial configuration updates to apply
167
+ */
168
+ async updateServer(name, updates) {
169
+ if (updateServer(name, updates, this.config.servers)) {
170
+ this.persistConfig();
171
+ }
172
+ }
173
+ /**
174
+ * Updates an existing server instance configuration with the provided changes.
175
+ *
176
+ * @param name - The name of the server containing the instance to update
177
+ * @param index - The index of the instance to update in the instances array
178
+ * @param updates - The partial instance configuration updates to apply
179
+ */
180
+ async updateServerInstance(name, index, updates) {
181
+ updateServerInstance(name, index, updates, this.serverInstances);
182
+ }
183
+ /**
184
+ * Removes a server configuration and all its instances from the system.
185
+ *
186
+ * @param name - The name of the server to remove
187
+ * @returns True if the server was removed, false if it didn't exist
188
+ */
189
+ async removeServer(name) {
190
+ if (removeServer(name, this.config.servers, this.serverInstances)) {
191
+ this.persistConfig();
192
+ }
193
+ }
194
+ /**
195
+ * Removes a specific server instance from the system.
196
+ *
197
+ * @param name - The name of the server containing the instance to remove
198
+ * @param index - The index of the instance to remove from the instances array
199
+ */
200
+ async removeServerInstance(name, index) {
201
+ removeServerInstance(name, index, this.serverInstances);
202
+ }
203
+ /**
204
+ * Updates the entire system configuration with the provided partial configuration.
205
+ *
206
+ * @param newConfig - Partial system configuration containing updates
207
+ */
208
+ async updateConfig(newConfig) {
209
+ const oldConfig = JSON.parse(JSON.stringify(this.config));
210
+ const convertedConfig = convertHttpToStreamableHttp(newConfig);
211
+ this.config = SystemConfigSchema.parse({ ...this.config, ...convertedConfig });
212
+ logConfigChanges(oldConfig, this.config);
213
+ this.persistConfig();
214
+ }
215
+ persistConfig() {
216
+ saveConfig(this.configPath, this.config);
217
+ }
218
+ /**
219
+ * Synchronizes the in-memory configuration with the on-disk configuration file.
220
+ */
221
+ async syncConfig() {
222
+ this.config = loadConfig(this.configPath);
223
+ this.initServerInstances();
224
+ }
225
+ }
226
+ // Lazy initialization of configManager to avoid creating instance during module import
227
+ let _configManager = null;
228
+ /**
229
+ * Get the config manager instance
230
+ * In test environment, always creates a new instance to prevent test pollution
231
+ */
232
+ export function getConfigManager() {
233
+ // In test environment, always create a new instance to ensure test isolation
234
+ if (process.env.VITEST === 'true' || process.env.NODE_ENV === 'test') {
235
+ const testConfigPath = process.env.MCP_HUB_CONFIG_PATH ||
236
+ path.join(os.tmpdir(), `mcp-hub-test-fallback-${Date.now()}`, '.mcp-hub.json');
237
+ return new ConfigManager(testConfigPath);
238
+ }
239
+ // In production, use singleton pattern
240
+ if (!_configManager) {
241
+ _configManager = new ConfigManager();
242
+ }
243
+ return _configManager;
244
+ }
245
+ // Export the getter function directly
246
+ export const configManager = getConfigManager();
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configuration saving utilities.
3
+ * Handles persisting configuration to disk with proper directory creation.
4
+ */
5
+ /**
6
+ * Saves the configuration to disk at the specified path.
7
+ *
8
+ * This function writes the current configuration to the configured file path,
9
+ * creating the directory structure if it doesn't exist. Errors during the save
10
+ * operation are silently ignored to prevent crashes during normal operation.
11
+ *
12
+ * @param configPath - Path to save the configuration file
13
+ * @param config - The configuration object to save
14
+ */
15
+ export declare function saveConfig(configPath: string, config: unknown): void;
16
+ //# sourceMappingURL=config-saver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-saver.d.ts","sourceRoot":"","sources":["../../../../src/config/config-saver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAUpE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Configuration saving utilities.
3
+ * Handles persisting configuration to disk with proper directory creation.
4
+ */
5
+ import * as fs from 'fs';
6
+ import path from 'path';
7
+ /**
8
+ * Saves the configuration to disk at the specified path.
9
+ *
10
+ * This function writes the current configuration to the configured file path,
11
+ * creating the directory structure if it doesn't exist. Errors during the save
12
+ * operation are silently ignored to prevent crashes during normal operation.
13
+ *
14
+ * @param configPath - Path to save the configuration file
15
+ * @param config - The configuration object to save
16
+ */
17
+ export function saveConfig(configPath, config) {
18
+ try {
19
+ const dir = path.dirname(configPath);
20
+ if (!fs.existsSync(dir)) {
21
+ fs.mkdirSync(dir, { recursive: true });
22
+ }
23
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
24
+ }
25
+ catch {
26
+ // Ignore
27
+ }
28
+ }
@@ -0,0 +1,108 @@
1
+ import { z } from 'zod';
2
+ import type { LogLevel } from '../../shared/types/common.types.js';
3
+ /**
4
+ * MCP Server Configuration Schema
5
+ * Simplified schema for MCP-HUB-LITE Lite version
6
+ */
7
+ export declare const ServerConfigSchema: z.ZodObject<{
8
+ command: z.ZodOptional<z.ZodString>;
9
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
10
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
11
+ enabled: z.ZodDefault<z.ZodBoolean>;
12
+ tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
13
+ type: z.ZodDefault<z.ZodEnum<{
14
+ stdio: "stdio";
15
+ sse: "sse";
16
+ "streamable-http": "streamable-http";
17
+ http: "http";
18
+ }>>;
19
+ timeout: z.ZodDefault<z.ZodNumber>;
20
+ url: z.ZodOptional<z.ZodString>;
21
+ allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
22
+ description: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>;
24
+ export declare const ServerInstanceConfigSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ timestamp: z.ZodNumber;
27
+ hash: z.ZodString;
28
+ pid: z.ZodOptional<z.ZodNumber>;
29
+ startTime: z.ZodOptional<z.ZodNumber>;
30
+ }, z.core.$strip>;
31
+ /**
32
+ * Logging Configuration Schema
33
+ */
34
+ export declare const LoggingConfigSchema: z.ZodDefault<z.ZodObject<{
35
+ level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
36
+ rotationAge: z.ZodDefault<z.ZodString>;
37
+ jsonPretty: z.ZodDefault<z.ZodBoolean>;
38
+ mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
39
+ sessionDebug: z.ZodDefault<z.ZodBoolean>;
40
+ }, z.core.$strip>>;
41
+ /**
42
+ * Security Configuration Schema
43
+ */
44
+ export declare const SecurityConfigSchema: z.ZodDefault<z.ZodObject<{
45
+ allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
46
+ maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
47
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
48
+ idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
49
+ sessionTimeout: z.ZodDefault<z.ZodNumber>;
50
+ sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
51
+ maxConnections: z.ZodDefault<z.ZodNumber>;
52
+ }, z.core.$strip>>;
53
+ /**
54
+ * System Configuration Schema
55
+ */
56
+ export declare const SystemConfigSchema: z.ZodObject<{
57
+ version: z.ZodDefault<z.ZodString>;
58
+ system: z.ZodDefault<z.ZodObject<{
59
+ host: z.ZodDefault<z.ZodString>;
60
+ port: z.ZodDefault<z.ZodNumber>;
61
+ language: z.ZodDefault<z.ZodEnum<{
62
+ zh: "zh";
63
+ en: "en";
64
+ }>>;
65
+ theme: z.ZodDefault<z.ZodEnum<{
66
+ light: "light";
67
+ dark: "dark";
68
+ system: "system";
69
+ }>>;
70
+ logging: z.ZodDefault<z.ZodObject<{
71
+ level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
72
+ rotationAge: z.ZodDefault<z.ZodString>;
73
+ jsonPretty: z.ZodDefault<z.ZodBoolean>;
74
+ mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
75
+ sessionDebug: z.ZodDefault<z.ZodBoolean>;
76
+ }, z.core.$strip>>;
77
+ }, z.core.$strip>>;
78
+ security: z.ZodDefault<z.ZodObject<{
79
+ allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
80
+ maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
81
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
82
+ idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
83
+ sessionTimeout: z.ZodDefault<z.ZodNumber>;
84
+ sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
85
+ maxConnections: z.ZodDefault<z.ZodNumber>;
86
+ }, z.core.$strip>>;
87
+ servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
88
+ command: z.ZodOptional<z.ZodString>;
89
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
90
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
91
+ enabled: z.ZodDefault<z.ZodBoolean>;
92
+ tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
93
+ type: z.ZodDefault<z.ZodEnum<{
94
+ stdio: "stdio";
95
+ sse: "sse";
96
+ "streamable-http": "streamable-http";
97
+ http: "http";
98
+ }>>;
99
+ timeout: z.ZodDefault<z.ZodNumber>;
100
+ url: z.ZodOptional<z.ZodString>;
101
+ allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
102
+ description: z.ZodOptional<z.ZodString>;
103
+ }, z.core.$strip>>>;
104
+ }, z.core.$strip>;
105
+ export type SystemConfig = z.infer<typeof SystemConfigSchema>;
106
+ export type ServerConfig = z.infer<typeof ServerConfigSchema>;
107
+ export type ServerInstanceConfig = z.infer<typeof ServerInstanceConfigSchema>;
108
+ //# sourceMappingURL=config.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;;GAGG;AAGH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;iBAW7B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;kBAc5B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;kBA0B7B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyB7B,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}