@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
  6. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
  9. package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
  14. package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
  17. package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
  18. package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
  19. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
  20. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  21. package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
  24. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
  27. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  28. package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
  29. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  30. package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
  31. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  32. package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
  33. package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
  36. package/dist/client/assets/index-ByNBhPAR.js +1 -0
  37. package/dist/client/assets/index-CTB6oe-9.js +2 -0
  38. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  39. package/dist/client/assets/omit-CUnDT6sS.js +1 -0
  40. package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
  41. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
  42. package/dist/client/index.html +3 -3
  43. package/dist/server/shared/models/resource.model.d.ts +2 -1
  44. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  45. package/dist/server/shared/models/server.model.d.ts +362 -5
  46. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  47. package/dist/server/shared/models/server.model.js +220 -1
  48. package/dist/server/shared/models/session.model.d.ts +1 -57
  49. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  50. package/dist/server/shared/models/session.model.js +1 -55
  51. package/dist/server/shared/models/tool.model.d.ts +4 -2
  52. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  53. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  54. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  55. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  56. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  57. package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
  58. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  59. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/gateway.js +32 -49
  61. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  62. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  63. package/dist/server/src/api/web/hub-tools.js +3 -54
  64. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  65. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  66. package/dist/server/src/api/web/mcp-status.js +71 -30
  67. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  68. package/dist/server/src/api/web/resources.js +28 -22
  69. package/dist/server/src/api/web/search.d.ts +2 -16
  70. package/dist/server/src/api/web/search.d.ts.map +1 -1
  71. package/dist/server/src/api/web/search.js +24 -45
  72. package/dist/server/src/api/web/servers.d.ts +3 -3
  73. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  74. package/dist/server/src/api/web/servers.js +70 -25
  75. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  76. package/dist/server/src/api/ws/ws-handler.js +4 -2
  77. package/dist/server/src/app.d.ts.map +1 -1
  78. package/dist/server/src/app.js +0 -2
  79. package/dist/server/src/cli/commands/list.js +2 -2
  80. package/dist/server/src/cli/commands/server.d.ts +57 -0
  81. package/dist/server/src/cli/commands/server.d.ts.map +1 -0
  82. package/dist/server/src/cli/commands/server.js +169 -0
  83. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  84. package/dist/server/src/cli/commands/status.js +41 -30
  85. package/dist/server/src/cli/index.d.ts.map +1 -1
  86. package/dist/server/src/cli/index.js +2 -1
  87. package/dist/server/src/cli/server.d.ts +11 -2
  88. package/dist/server/src/cli/server.d.ts.map +1 -1
  89. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  90. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  91. package/dist/server/src/config/config-change-logger.js +135 -11
  92. package/dist/server/src/config/config-loader.d.ts +6 -5
  93. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  94. package/dist/server/src/config/config-loader.js +54 -16
  95. package/dist/server/src/config/config-manager.d.ts +51 -43
  96. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  97. package/dist/server/src/config/config-manager.js +84 -66
  98. package/dist/server/src/config/config-migrator.d.ts +82 -0
  99. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  100. package/dist/server/src/config/config-migrator.js +348 -0
  101. package/dist/server/src/config/config-saver.d.ts +2 -0
  102. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  103. package/dist/server/src/config/config-saver.js +8 -2
  104. package/dist/server/src/config/config.schema.d.ts +10 -104
  105. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  106. package/dist/server/src/config/config.schema.js +15 -99
  107. package/dist/server/src/config/path-validator.d.ts +27 -0
  108. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  109. package/dist/server/src/config/path-validator.js +53 -0
  110. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  111. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  112. package/dist/server/src/config/server-config-manager.js +222 -66
  113. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  114. package/dist/server/src/config/type-converter.js +3 -2
  115. package/dist/server/src/models/event.model.d.ts +17 -10
  116. package/dist/server/src/models/event.model.d.ts.map +1 -1
  117. package/dist/server/src/models/server.model.d.ts +17 -3
  118. package/dist/server/src/models/server.model.d.ts.map +1 -1
  119. package/dist/server/src/models/server.model.js +2 -1
  120. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  121. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  122. package/dist/server/src/models/system-tools.constants.js +4 -8
  123. package/dist/server/src/pid/manager.d.ts.map +1 -1
  124. package/dist/server/src/pid/manager.js +2 -1
  125. package/dist/server/src/server/dev-server.js +34 -20
  126. package/dist/server/src/server/runner.d.ts.map +1 -1
  127. package/dist/server/src/server/runner.js +41 -26
  128. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  129. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/connection-manager.js +286 -241
  131. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  132. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  133. package/dist/server/src/services/connection/tool-cache.js +50 -55
  134. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  135. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  136. package/dist/server/src/services/gateway/gateway.service.js +53 -23
  137. package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
  138. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  139. package/dist/server/src/services/gateway/global-transport.js +66 -0
  140. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  142. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  143. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  145. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  146. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  147. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
  148. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  149. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  150. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  151. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  152. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  153. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  155. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  156. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  157. package/dist/server/src/services/gateway/types.d.ts +2 -1
  158. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  159. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  160. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  161. package/dist/server/src/services/hub-manager.service.js +89 -267
  162. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  163. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  164. package/dist/server/src/services/hub-tools/index.js +1 -2
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  167. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  170. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  173. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  175. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  181. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  182. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  183. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  184. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  185. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  186. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  187. package/dist/server/src/services/hub-tools.service.js +185 -110
  188. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  189. package/dist/server/src/services/system-tool-handler.js +7 -17
  190. package/dist/server/src/utils/composite-key.d.ts +29 -0
  191. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  192. package/dist/server/src/utils/composite-key.js +39 -0
  193. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  194. package/dist/server/src/utils/error-handler.js +3 -2
  195. package/dist/server/src/utils/index.d.ts +2 -0
  196. package/dist/server/src/utils/index.d.ts.map +1 -1
  197. package/dist/server/src/utils/index.js +2 -0
  198. package/dist/server/src/utils/instance-id.d.ts +22 -0
  199. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  200. package/dist/server/src/utils/instance-id.js +59 -0
  201. package/dist/server/src/utils/json-utils.d.ts +4 -4
  202. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  203. package/dist/server/src/utils/json-utils.js +4 -4
  204. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  205. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  206. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  207. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  208. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  209. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  210. package/dist/server/src/utils/logger/log-modules.js +8 -6
  211. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  212. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  213. package/dist/server/src/utils/parameter-validator.js +53 -0
  214. package/dist/server/src/utils/process-tree.d.ts +49 -0
  215. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  216. package/dist/server/src/utils/process-tree.js +285 -0
  217. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  218. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  219. package/dist/server/src/utils/sort-utils.js +131 -0
  220. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  221. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  222. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  223. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  224. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  225. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  226. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  227. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  228. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  229. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  230. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  231. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  232. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  233. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  234. package/dist/server/src/utils/version.d.ts +11 -0
  235. package/dist/server/src/utils/version.d.ts.map +1 -0
  236. package/dist/server/src/utils/version.js +57 -0
  237. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  238. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  239. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  240. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  241. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  242. package/dist/server/tests/server.test.js +27 -16
  243. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  244. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  245. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  246. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  247. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  248. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  249. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  250. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  251. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  252. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  253. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  254. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  255. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  256. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  257. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  258. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  259. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  260. package/dist/server/tests/unit/server/runner.test.js +86 -62
  261. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  262. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  263. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  264. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  265. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  266. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  267. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  269. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  270. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  272. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  273. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  276. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  277. package/dist/server/tests/unit/utils/config.test.js +88 -186
  278. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  279. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  280. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  281. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  282. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  283. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  284. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  285. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  286. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  288. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  289. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  290. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  291. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  294. package/package.json +3 -1
  295. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  296. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  297. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  298. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  299. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  300. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  301. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  302. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  303. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  304. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  305. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  306. package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
  307. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  308. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  309. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  310. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  311. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  312. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  313. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  314. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  315. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  316. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  317. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  318. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  319. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  320. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  321. package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
  322. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -1,66 +1,104 @@
1
1
  /**
2
- * Configuration loading utilities.
2
+ * Configuration loading utilities (v1.1 only).
3
3
  * Handles loading and parsing configuration from files with validation.
4
+ * Supports automatic migration from v1.0 to v1.1.
4
5
  */
5
6
  import * as fs from 'fs';
6
7
  import { logger, LOG_MODULES } from '../utils/logger.js';
7
- import { SystemConfigSchema } from './config.schema.js';
8
+ import { SystemConfigSchema, isLegacyV1Config } from './config.schema.js';
9
+ import { migrateConfig } from './config-migrator.js';
8
10
  import { convertHttpToStreamableHttp } from './type-converter.js';
11
+ import { reassignServerInstanceIndexes } from './server-config-manager.js';
9
12
  /**
10
13
  * Loads configuration from the specified file path.
11
14
  *
12
15
  * This function handles the complete configuration loading process:
13
16
  * - Checks if the config file exists at the specified path
14
17
  * - Reads and parses the JSON configuration
18
+ * - Detects legacy v1.0 configuration and auto-migrates to v1.1
15
19
  * - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
16
20
  * - Validates the configuration using Zod schema
17
21
  * - Handles validation failures gracefully by falling back to default configuration
18
22
  *
19
- * If the config file doesn't exist or fails to load, a default configuration is returned.
20
- *
21
23
  * @param configPath - Path to the configuration file
22
- * @returns The loaded and validated system configuration
24
+ * @param autoMigrate - Whether to automatically migrate v1.0 to v1.1 (default: true)
25
+ * @returns The loaded and validated system configuration (v1.1 format)
23
26
  */
24
- export function loadConfig(configPath) {
27
+ export function loadConfig(configPath, autoMigrate = true) {
25
28
  try {
26
29
  if (fs.existsSync(configPath)) {
27
30
  logger.info(`Loading configuration from: ${configPath}`, LOG_MODULES.CONFIG_MANAGER);
28
31
  const content = fs.readFileSync(configPath, 'utf-8');
29
32
  let config = JSON.parse(content);
33
+ // Check if automatic migration is enabled and config is legacy v1.0
34
+ if (autoMigrate && isLegacyV1Config(config)) {
35
+ logger.info('Detected legacy v1.0 configuration, starting automatic migration to v1.1', LOG_MODULES.CONFIG_MANAGER);
36
+ const migrationResult = migrateConfig(configPath, {
37
+ dryRun: false,
38
+ createBackup: true,
39
+ validateAfterMigration: true
40
+ });
41
+ if (migrationResult.success && migrationResult.migratedConfig) {
42
+ logger.info('Configuration successfully migrated to v1.1', LOG_MODULES.CONFIG_MANAGER);
43
+ if (migrationResult.backupPath) {
44
+ logger.info(`Backup created at: ${migrationResult.backupPath}`, LOG_MODULES.CONFIG_MANAGER);
45
+ }
46
+ config = migrationResult.migratedConfig;
47
+ }
48
+ else {
49
+ logger.warn(`Migration failed, continuing with default config: ${migrationResult.error}`, LOG_MODULES.CONFIG_MANAGER);
50
+ return SystemConfigSchema.parse({});
51
+ }
52
+ }
30
53
  // Unified type conversion: convert http to streamable-http
31
54
  config = convertHttpToStreamableHttp(config);
32
- // Ensure defaults without validation errors blocking
55
+ // Handle backward compatibility for instanceSelectionStrategy in root level
56
+ if (config.servers) {
57
+ for (const [serverName, serverConfig] of Object.entries(config.servers)) {
58
+ if (serverConfig &&
59
+ typeof serverConfig === 'object' &&
60
+ 'instanceSelectionStrategy' in serverConfig &&
61
+ serverConfig.instanceSelectionStrategy !== undefined) {
62
+ const legacyConfig = serverConfig;
63
+ const strategy = legacyConfig.instanceSelectionStrategy;
64
+ if (typeof strategy === 'string') {
65
+ legacyConfig.template.instanceSelectionStrategy = strategy;
66
+ }
67
+ delete legacyConfig.instanceSelectionStrategy;
68
+ logger.debug(`Migrated instanceSelectionStrategy for server ${serverName} to template`, LOG_MODULES.CONFIG_LOADER);
69
+ }
70
+ }
71
+ }
72
+ // Validate and return configuration
33
73
  try {
34
- // Use safeParse to validate configuration
35
74
  const parsed = SystemConfigSchema.safeParse(config);
36
75
  if (parsed.success) {
37
- // Ensure server configurations are sorted by name
38
76
  const configWithSortedServers = {
39
77
  ...parsed.data,
40
78
  servers: Object.fromEntries(Object.entries(parsed.data.servers).sort(([a], [b]) => a.localeCompare(b)))
41
79
  };
80
+ // Ensure all server instances have proper indexes
81
+ for (const serverName of Object.keys(configWithSortedServers.servers)) {
82
+ reassignServerInstanceIndexes(serverName, configWithSortedServers.servers);
83
+ }
42
84
  return configWithSortedServers;
43
85
  }
44
86
  else {
45
- // On validation failure, log error and use default configuration
46
- logger.error(`Config validation failed: ${parsed.error}`);
87
+ logger.error(`Config validation failed: ${parsed.error}`, LOG_MODULES.CONFIG_LOADER);
47
88
  return SystemConfigSchema.parse({});
48
89
  }
49
90
  }
50
91
  catch (e) {
51
- logger.error(`Failed to parse config: ${e}`);
52
- // On parsing failure, use default configuration
92
+ logger.error(`Failed to parse config: ${e}`, LOG_MODULES.CONFIG_LOADER);
53
93
  return SystemConfigSchema.parse({});
54
94
  }
55
95
  }
56
96
  else {
57
- // When config file doesn't exist, create default config in memory only
58
97
  return SystemConfigSchema.parse({});
59
98
  }
60
99
  }
61
100
  catch (error) {
62
- logger.error(`Failed to load config: ${error}`);
63
- // On config file load failure, use default configuration
101
+ logger.error(`Failed to load config: ${error}`, LOG_MODULES.CONFIG_LOADER);
64
102
  return SystemConfigSchema.parse({});
65
103
  }
66
104
  }
@@ -16,10 +16,10 @@
16
16
  * // Get the config manager instance
17
17
  * const configManager = getConfigManager();
18
18
  *
19
- * // Get all servers
19
+ * // Get all servers (v1.1 format)
20
20
  * const servers = configManager.getServers();
21
21
  *
22
- * // Add a new server
22
+ * // Add a new server with template and default instance
23
23
  * await configManager.addServer('my-server', {
24
24
  * type: 'stdio',
25
25
  * command: 'npx my-mcp-server',
@@ -27,15 +27,13 @@
27
27
  * });
28
28
  * ```
29
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 };
30
+ import { SystemConfigSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
31
+ import type { SystemConfig, ServerTemplate, ServerInstance, ServerConfig } from './config.schema.js';
32
+ export { ServerConfig, SystemConfig, ServerInstance, ServerTemplate, SystemConfigSchema, ServerConfigSchema, ServerInstanceSchema };
33
33
  export declare class ConfigManager {
34
34
  private configPath;
35
35
  private config;
36
- private serverInstances;
37
36
  constructor(configPath?: string);
38
- private initServerInstances;
39
37
  /**
40
38
  * Retrieves the current system configuration.
41
39
  *
@@ -43,7 +41,7 @@ export declare class ConfigManager {
43
41
  */
44
42
  getConfig(): SystemConfig;
45
43
  /**
46
- * Retrieves all configured servers with their configurations.
44
+ * Retrieves all configured servers with their configurations (v1.1 format).
47
45
  *
48
46
  * @param sortByName - Whether to sort servers by name
49
47
  * @returns Array of server objects with name and config
@@ -53,53 +51,45 @@ export declare class ConfigManager {
53
51
  config: ServerConfig;
54
52
  }>;
55
53
  /**
56
- * Retrieves a server configuration by name.
54
+ * Retrieves a server configuration by name (v1.1 format).
57
55
  *
58
56
  * @param name - The name of the server to retrieve
59
- * @returns The server configuration or undefined if not found
57
+ * @returns The server configuration (v1.1) or undefined if not found
60
58
  */
61
59
  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
60
  /**
69
61
  * Retrieves all server instances for a specific server by name.
70
62
  *
71
63
  * @param name - The name of the server to retrieve instances for
72
64
  * @returns Array of server instances, or empty array if none exist
73
65
  */
74
- getServerInstanceByName(name: string): ServerInstanceConfig[];
66
+ getServerInstancesByName(name: string): ServerInstance[];
75
67
  /**
76
- * Retrieves server information by its unique instance ID.
68
+ * Retrieves a specific server instance by index.
77
69
  *
78
- * @param id - The unique instance ID to search for
79
- * @returns Complete server information including name, configuration, and instance details
70
+ * @param name - The name of the server
71
+ * @param index - The index of the instance
72
+ * @returns The server instance or undefined if not found
80
73
  */
81
- getServerById(id: string): {
82
- name: string;
83
- config: ServerConfig;
84
- instance: ServerInstanceConfig;
85
- } | undefined;
74
+ getServerInstanceByIndex(name: string, index: number): ServerInstance | undefined;
86
75
  /**
87
76
  * Adds multiple server configurations to the system in a single operation.
88
77
  *
89
- * @param servers - Array of server objects containing name and partial configuration
78
+ * @param servers - Array of server objects containing name and partial template configuration
90
79
  */
91
80
  addServers(servers: Array<{
92
81
  name: string;
93
- config: Partial<ServerConfig>;
82
+ config: Partial<ServerTemplate>;
94
83
  }>): Promise<void>;
95
84
  /**
96
- * Adds a new server configuration to the system.
85
+ * Adds a new server configuration to the system (v1.1 format).
86
+ * Creates a template and a default instance.
97
87
  *
98
88
  * @param name - The unique name for the server
99
- * @param config - The server configuration
100
- * @returns The validated and complete server configuration
89
+ * @param config - The server template configuration
90
+ * @returns The complete server configuration (v1.1)
101
91
  */
102
- addServer(name: string, config: Partial<ServerConfig>): Promise<ServerConfig>;
92
+ addServer(name: string, config: Partial<ServerTemplate>): Promise<ServerConfig>;
103
93
  /**
104
94
  * Adds a new server instance for the specified server.
105
95
  *
@@ -107,36 +97,54 @@ export declare class ConfigManager {
107
97
  * @param instance - The server instance configuration
108
98
  * @returns The validated and complete server instance configuration
109
99
  */
110
- addServerInstance(name: string, instance: Partial<ServerInstanceConfig>): Promise<ServerInstanceConfig>;
100
+ addServerInstance(name: string, instance: Partial<ServerInstance>): Promise<ServerInstance>;
101
+ /**
102
+ * Updates an existing server template configuration.
103
+ *
104
+ * @param name - The name of the server to update
105
+ * @param updates - The partial template updates to apply
106
+ * @returns The updated server configuration or null if not found
107
+ */
108
+ updateServer(name: string, updates: Partial<ServerTemplate>): Promise<ServerConfig | null>;
111
109
  /**
112
- * Updates an existing server configuration with the provided changes.
110
+ * Updates an existing server configuration.
113
111
  *
114
112
  * @param name - The name of the server to update
115
- * @param updates - The partial configuration updates to apply
113
+ * @param updates - The partial server template updates to apply
114
+ * @returns The updated server configuration or null if not found
116
115
  */
117
- updateServer(name: string, updates: Partial<ServerConfig>): Promise<void>;
116
+ updateServerConfig(name: string, updates: Partial<ServerTemplate>): Promise<ServerConfig | null>;
118
117
  /**
119
- * Updates an existing server instance configuration with the provided changes.
118
+ * Updates an existing server instance configuration.
120
119
  *
121
120
  * @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
121
+ * @param index - The index of the instance to update
122
+ * @param updates - The partial instance updates to apply
123
+ * @returns True if the instance was updated
124
124
  */
125
- updateServerInstance(name: string, index: number, updates: Partial<ServerInstanceConfig>): Promise<void>;
125
+ updateServerInstance(name: string, index: number, updates: Partial<ServerInstance>): Promise<boolean>;
126
126
  /**
127
127
  * Removes a server configuration and all its instances from the system.
128
128
  *
129
129
  * @param name - The name of the server to remove
130
- * @returns True if the server was removed, false if it didn't exist
130
+ * @returns True if the server was removed
131
131
  */
132
- removeServer(name: string): Promise<void>;
132
+ removeServer(name: string): Promise<boolean>;
133
133
  /**
134
134
  * Removes a specific server instance from the system.
135
135
  *
136
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
137
+ * @param index - The index of the instance to remove
138
+ * @returns True if the instance was removed
139
+ */
140
+ removeServerInstance(name: string, index: number): Promise<boolean>;
141
+ /**
142
+ * Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
143
+ *
144
+ * @param name - The name of the server to reassign indexes for
145
+ * @returns True if the server exists and indexes were reassigned
138
146
  */
139
- removeServerInstance(name: string, index: number): Promise<void>;
147
+ reassignInstanceIndexes(name: string): Promise<boolean>;
140
148
  /**
141
149
  * Updates the entire system configuration with the provided partial configuration.
142
150
  *
@@ -1 +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"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,YAAY,EACb,MAAM,oBAAoB,CAAC;AAiB5B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACrB,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAElB,UAAU,CAAC,EAAE,MAAM;IAS/B;;;;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;;;;;OAKG;IACI,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAI/D;;;;;;OAMG;IACI,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKxF;;;;OAIG;IACU,UAAU,CACrB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;OAOG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAM5F;;;;;;OAMG;IACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAM1B;;;;;;OAMG;IACU,YAAY,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ/B;;;;;;OAMG;IACU,kBAAkB,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQ/B;;;;;;;OAOG;IACU,oBAAoB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAQnB;;;;;OAKG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQzD;;;;;;OAMG;IACU,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhF;;;;;OAKG;IACU,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQpE;;;;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;CAGzC;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAchD;AAGD,eAAO,MAAM,aAAa,eAAqB,CAAC"}
@@ -16,10 +16,10 @@
16
16
  * // Get the config manager instance
17
17
  * const configManager = getConfigManager();
18
18
  *
19
- * // Get all servers
19
+ * // Get all servers (v1.1 format)
20
20
  * const servers = configManager.getServers();
21
21
  *
22
- * // Add a new server
22
+ * // Add a new server with template and default instance
23
23
  * await configManager.addServer('my-server', {
24
24
  * type: 'stdio',
25
25
  * command: 'npx my-mcp-server',
@@ -30,38 +30,24 @@
30
30
  import path from 'path';
31
31
  import os from 'os';
32
32
  import { logger, LOG_MODULES } from '../utils/logger.js';
33
- import { SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema } from './config.schema.js';
33
+ import { SystemConfigSchema, ServerInstanceSchema, ServerConfigSchema } from './config.schema.js';
34
34
  import { loadConfig } from './config-loader.js';
35
35
  import { saveConfig } from './config-saver.js';
36
- import { convertHttpToStreamableHttp } from './type-converter.js';
37
36
  import { logConfigChanges } from './config-change-logger.js';
38
- import { addServers, addServer, addServerInstance, updateServer, updateServerInstance, removeServer, removeServerInstance } from './server-config-manager.js';
37
+ import { convertHttpToStreamableHttp } from './type-converter.js';
38
+ import { addServers, addServer, addServerInstance, updateServerTemplate, updateServerInstance, removeServer, removeServerInstance, reassignServerInstanceIndexes } from './server-config-manager.js';
39
39
  // Re-export types for external use
40
- export { SystemConfigSchema, ServerConfigSchema, ServerInstanceConfigSchema };
40
+ export { SystemConfigSchema, ServerConfigSchema, ServerInstanceSchema };
41
41
  export class ConfigManager {
42
42
  configPath;
43
43
  config;
44
- serverInstances = {};
45
44
  constructor(configPath) {
46
45
  this.configPath =
47
46
  configPath ||
48
47
  process.env.MCP_HUB_CONFIG_PATH ||
49
48
  path.join(os.homedir(), '.mcp-hub-lite', 'config', '.mcp-hub.json');
50
49
  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
- }
50
+ this.config = loadConfig(this.configPath, true);
65
51
  }
66
52
  /**
67
53
  * Retrieves the current system configuration.
@@ -72,7 +58,7 @@ export class ConfigManager {
72
58
  return { ...this.config };
73
59
  }
74
60
  /**
75
- * Retrieves all configured servers with their configurations.
61
+ * Retrieves all configured servers with their configurations (v1.1 format).
76
62
  *
77
63
  * @param sortByName - Whether to sort servers by name
78
64
  * @returns Array of server objects with name and config
@@ -88,64 +74,53 @@ export class ConfigManager {
88
74
  return servers;
89
75
  }
90
76
  /**
91
- * Retrieves a server configuration by name.
77
+ * Retrieves a server configuration by name (v1.1 format).
92
78
  *
93
79
  * @param name - The name of the server to retrieve
94
- * @returns The server configuration or undefined if not found
80
+ * @returns The server configuration (v1.1) or undefined if not found
95
81
  */
96
82
  getServerByName(name) {
97
83
  return this.config.servers?.[name];
98
84
  }
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
85
  /**
108
86
  * Retrieves all server instances for a specific server by name.
109
87
  *
110
88
  * @param name - The name of the server to retrieve instances for
111
89
  * @returns Array of server instances, or empty array if none exist
112
90
  */
113
- getServerInstanceByName(name) {
114
- return this.serverInstances[name] || [];
91
+ getServerInstancesByName(name) {
92
+ return this.config.servers?.[name]?.instances || [];
115
93
  }
116
94
  /**
117
- * Retrieves server information by its unique instance ID.
95
+ * Retrieves a specific server instance by index.
118
96
  *
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;
97
+ * @param name - The name of the server
98
+ * @param index - The index of the instance
99
+ * @returns The server instance or undefined if not found
100
+ */
101
+ getServerInstanceByIndex(name, index) {
102
+ const instances = this.getServerInstancesByName(name);
103
+ return instances[index];
130
104
  }
131
105
  /**
132
106
  * Adds multiple server configurations to the system in a single operation.
133
107
  *
134
- * @param servers - Array of server objects containing name and partial configuration
108
+ * @param servers - Array of server objects containing name and partial template configuration
135
109
  */
136
110
  async addServers(servers) {
137
- this.config.servers = addServers(servers, this.config.servers, this.serverInstances);
111
+ this.config.servers = addServers(servers, this.config.servers);
138
112
  this.persistConfig();
139
113
  }
140
114
  /**
141
- * Adds a new server configuration to the system.
115
+ * Adds a new server configuration to the system (v1.1 format).
116
+ * Creates a template and a default instance.
142
117
  *
143
118
  * @param name - The unique name for the server
144
- * @param config - The server configuration
145
- * @returns The validated and complete server configuration
119
+ * @param config - The server template configuration
120
+ * @returns The complete server configuration (v1.1)
146
121
  */
147
122
  async addServer(name, config) {
148
- const validated = addServer(name, config, this.config.servers, this.serverInstances);
123
+ const validated = addServer(name, config, this.config.servers);
149
124
  this.persistConfig();
150
125
  return validated;
151
126
  }
@@ -157,48 +132,92 @@ export class ConfigManager {
157
132
  * @returns The validated and complete server instance configuration
158
133
  */
159
134
  async addServerInstance(name, instance) {
160
- return addServerInstance(name, instance, this.serverInstances);
135
+ const newInstance = addServerInstance(name, instance, this.config.servers);
136
+ this.persistConfig();
137
+ return newInstance;
161
138
  }
162
139
  /**
163
- * Updates an existing server configuration with the provided changes.
140
+ * Updates an existing server template configuration.
164
141
  *
165
142
  * @param name - The name of the server to update
166
- * @param updates - The partial configuration updates to apply
143
+ * @param updates - The partial template updates to apply
144
+ * @returns The updated server configuration or null if not found
167
145
  */
168
146
  async updateServer(name, updates) {
169
- if (updateServer(name, updates, this.config.servers)) {
147
+ if (updateServerTemplate(name, updates, this.config.servers)) {
148
+ this.persistConfig();
149
+ return this.config.servers[name] || null;
150
+ }
151
+ return null;
152
+ }
153
+ /**
154
+ * Updates an existing server configuration.
155
+ *
156
+ * @param name - The name of the server to update
157
+ * @param updates - The partial server template updates to apply
158
+ * @returns The updated server configuration or null if not found
159
+ */
160
+ async updateServerConfig(name, updates) {
161
+ if (updateServerTemplate(name, updates, this.config.servers)) {
170
162
  this.persistConfig();
163
+ return this.config.servers[name] || null;
171
164
  }
165
+ return null;
172
166
  }
173
167
  /**
174
- * Updates an existing server instance configuration with the provided changes.
168
+ * Updates an existing server instance configuration.
175
169
  *
176
170
  * @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
171
+ * @param index - The index of the instance to update
172
+ * @param updates - The partial instance updates to apply
173
+ * @returns True if the instance was updated
179
174
  */
180
175
  async updateServerInstance(name, index, updates) {
181
- updateServerInstance(name, index, updates, this.serverInstances);
176
+ const result = updateServerInstance(name, index, updates, this.config.servers);
177
+ if (result) {
178
+ this.persistConfig();
179
+ }
180
+ return result;
182
181
  }
183
182
  /**
184
183
  * Removes a server configuration and all its instances from the system.
185
184
  *
186
185
  * @param name - The name of the server to remove
187
- * @returns True if the server was removed, false if it didn't exist
186
+ * @returns True if the server was removed
188
187
  */
189
188
  async removeServer(name) {
190
- if (removeServer(name, this.config.servers, this.serverInstances)) {
189
+ if (removeServer(name, this.config.servers)) {
191
190
  this.persistConfig();
191
+ return true;
192
192
  }
193
+ return false;
193
194
  }
194
195
  /**
195
196
  * Removes a specific server instance from the system.
196
197
  *
197
198
  * @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
+ * @param index - The index of the instance to remove
200
+ * @returns True if the instance was removed
199
201
  */
200
202
  async removeServerInstance(name, index) {
201
- removeServerInstance(name, index, this.serverInstances);
203
+ if (removeServerInstance(name, index, this.config.servers)) {
204
+ this.persistConfig();
205
+ return true;
206
+ }
207
+ return false;
208
+ }
209
+ /**
210
+ * Reassigns server instance indexes to be consecutive (0, 1, 2, ...).
211
+ *
212
+ * @param name - The name of the server to reassign indexes for
213
+ * @returns True if the server exists and indexes were reassigned
214
+ */
215
+ async reassignInstanceIndexes(name) {
216
+ if (reassignServerInstanceIndexes(name, this.config.servers)) {
217
+ this.persistConfig();
218
+ return true;
219
+ }
220
+ return false;
202
221
  }
203
222
  /**
204
223
  * Updates the entire system configuration with the provided partial configuration.
@@ -219,8 +238,7 @@ export class ConfigManager {
219
238
  * Synchronizes the in-memory configuration with the on-disk configuration file.
220
239
  */
221
240
  async syncConfig() {
222
- this.config = loadConfig(this.configPath);
223
- this.initServerInstances();
241
+ this.config = loadConfig(this.configPath, true);
224
242
  }
225
243
  }
226
244
  // Lazy initialization of configManager to avoid creating instance during module import
@@ -0,0 +1,82 @@
1
+ import type { ServerInstance, SystemConfig } from './config.schema.js';
2
+ import type { ServerRuntimeConfig } from '../../shared/models/server.model.js';
3
+ /**
4
+ * @deprecated Use ServerRuntimeConfig from @shared-models/server.model instead
5
+ * Resolved server configuration with template + instance merged
6
+ */
7
+ export type ResolvedServerConfig = ServerRuntimeConfig;
8
+ /**
9
+ * Configuration Migration Result
10
+ */
11
+ export interface MigrationResult {
12
+ success: boolean;
13
+ backupPath?: string;
14
+ migratedConfig?: SystemConfig;
15
+ error?: string;
16
+ warnings: string[];
17
+ }
18
+ /**
19
+ * Configuration Migrator Options
20
+ */
21
+ export interface MigrationOptions {
22
+ dryRun?: boolean;
23
+ createBackup?: boolean;
24
+ validateAfterMigration?: boolean;
25
+ }
26
+ /**
27
+ * Main migration function that migrates a configuration from v1.0 to v1.1
28
+ *
29
+ * @param configPath Path to the configuration file
30
+ * @param options Migration options
31
+ * @returns Migration result with backup path and migrated config
32
+ */
33
+ export declare function migrateConfig(configPath: string, options?: MigrationOptions): MigrationResult;
34
+ /**
35
+ * Performs a dry run of the migration without modifying files
36
+ *
37
+ * @param configPath Path to the configuration file
38
+ * @returns Migration result with what would happen
39
+ */
40
+ export declare function dryRunMigration(configPath: string): MigrationResult;
41
+ /**
42
+ * Rolls back a migration using a backup file
43
+ *
44
+ * @param configPath Path to the current configuration file
45
+ * @param backupPath Path to the backup file
46
+ * @returns Success status and any error message
47
+ */
48
+ export declare function rollbackMigration(configPath: string, backupPath: string): {
49
+ success: boolean;
50
+ error?: string;
51
+ };
52
+ /**
53
+ * Checks the migration status of a configuration file
54
+ *
55
+ * @param configPath Path to the configuration file
56
+ * @returns Status information
57
+ */
58
+ export declare function checkMigrationStatus(configPath: string): {
59
+ exists: boolean;
60
+ version: 'v1' | 'v1.1' | 'unknown';
61
+ canMigrate: boolean;
62
+ message: string;
63
+ };
64
+ /**
65
+ * Resolves a server instance configuration by merging template and instance overrides
66
+ *
67
+ * @param serverConfig The server configuration with template and instances
68
+ * @param instanceId Optional instance ID (uses first enabled instance if not provided)
69
+ * @returns The resolved server configuration
70
+ */
71
+ export declare function resolveInstanceConfig(serverConfig: SystemConfig['servers'][string], instanceId?: string): ServerRuntimeConfig | null;
72
+ /**
73
+ * Gets all enabled instances for a server
74
+ *
75
+ * @param serverConfig The server configuration
76
+ * @returns Array of enabled instances with resolved configs
77
+ */
78
+ export declare function getEnabledInstances(serverConfig: SystemConfig['servers'][string]): Array<{
79
+ instance: ServerInstance;
80
+ resolved: ServerRuntimeConfig;
81
+ }>;
82
+ //# sourceMappingURL=config-migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrator.d.ts","sourceRoot":"","sources":["../../../../src/config/config-migrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAG1E;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAyMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAwDjG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAMnE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAyBA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAsCA;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,mBAAmB,GAAG,IAAI,CA+B5B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAC5C,KAAK,CAAC;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAapE"}