@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-BBwvy1oj.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-CZ2aB73w.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-CN1NlhWs.js +1 -0
  6. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-k652Vw4Z.js +1 -0
  9. package/dist/client/assets/ServerDetail-BLQ-a4cO.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BHrsFD5i.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHhwEuGe.js +1 -0
  14. package/dist/client/assets/SettingsView-CUOFNXrz.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-BfPjLxfV.js +1 -0
  17. package/dist/client/assets/ToolsView-BxgXvPC3.css +1 -0
  18. package/dist/client/assets/ToolsView-CyuhYAE2.js +1 -0
  19. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-DO5qfalW.js} +1 -1
  20. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  21. package/dist/client/assets/el-form-item-CcGsD2K_.js +12 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/el-input-tYgeiaCT.js +1 -0
  24. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-Dwl9E_Vr.js} +1 -1
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/el-overlay-kqX_BABo.js +1 -0
  27. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  28. package/dist/client/assets/el-radio-group-D8aWBVOT.js +1 -0
  29. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  30. package/dist/client/assets/el-skeleton-item-BRwIFspE.js +1 -0
  31. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  32. package/dist/client/assets/el-switch-BF8c-xeU.js +1 -0
  33. package/dist/client/assets/el-tab-pane-C4Ep94cd.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/el-table-column-Cog6uCh-.js +1 -0
  36. package/dist/client/assets/index-ByNBhPAR.js +1 -0
  37. package/dist/client/assets/index-CTB6oe-9.js +2 -0
  38. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  39. package/dist/client/assets/omit-CUnDT6sS.js +1 -0
  40. package/dist/client/assets/{raf-DY5mgbuB.js → raf-CmzeRPMd.js} +1 -1
  41. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-CbgVSHIh.js} +3 -3
  42. package/dist/client/index.html +3 -3
  43. package/dist/server/shared/models/resource.model.d.ts +2 -1
  44. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  45. package/dist/server/shared/models/server.model.d.ts +362 -5
  46. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  47. package/dist/server/shared/models/server.model.js +220 -1
  48. package/dist/server/shared/models/session.model.d.ts +1 -57
  49. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  50. package/dist/server/shared/models/session.model.js +1 -55
  51. package/dist/server/shared/models/tool.model.d.ts +4 -2
  52. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  53. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  54. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  55. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  56. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  57. package/dist/server/src/api/mcp/debug-response-wrapper.js +2 -2
  58. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  59. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/gateway.js +32 -49
  61. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  62. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  63. package/dist/server/src/api/web/hub-tools.js +3 -54
  64. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  65. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  66. package/dist/server/src/api/web/mcp-status.js +71 -30
  67. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  68. package/dist/server/src/api/web/resources.js +28 -22
  69. package/dist/server/src/api/web/search.d.ts +2 -16
  70. package/dist/server/src/api/web/search.d.ts.map +1 -1
  71. package/dist/server/src/api/web/search.js +24 -45
  72. package/dist/server/src/api/web/servers.d.ts +3 -3
  73. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  74. package/dist/server/src/api/web/servers.js +70 -25
  75. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  76. package/dist/server/src/api/ws/ws-handler.js +4 -2
  77. package/dist/server/src/app.d.ts.map +1 -1
  78. package/dist/server/src/app.js +0 -2
  79. package/dist/server/src/cli/commands/list.js +2 -2
  80. package/dist/server/src/cli/commands/server.d.ts +57 -0
  81. package/dist/server/src/cli/commands/server.d.ts.map +1 -0
  82. package/dist/server/src/cli/commands/server.js +169 -0
  83. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  84. package/dist/server/src/cli/commands/status.js +41 -30
  85. package/dist/server/src/cli/index.d.ts.map +1 -1
  86. package/dist/server/src/cli/index.js +2 -1
  87. package/dist/server/src/cli/server.d.ts +11 -2
  88. package/dist/server/src/cli/server.d.ts.map +1 -1
  89. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  90. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  91. package/dist/server/src/config/config-change-logger.js +135 -11
  92. package/dist/server/src/config/config-loader.d.ts +6 -5
  93. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  94. package/dist/server/src/config/config-loader.js +54 -16
  95. package/dist/server/src/config/config-manager.d.ts +51 -43
  96. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  97. package/dist/server/src/config/config-manager.js +84 -66
  98. package/dist/server/src/config/config-migrator.d.ts +82 -0
  99. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  100. package/dist/server/src/config/config-migrator.js +348 -0
  101. package/dist/server/src/config/config-saver.d.ts +2 -0
  102. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  103. package/dist/server/src/config/config-saver.js +8 -2
  104. package/dist/server/src/config/config.schema.d.ts +10 -104
  105. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  106. package/dist/server/src/config/config.schema.js +15 -99
  107. package/dist/server/src/config/path-validator.d.ts +27 -0
  108. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  109. package/dist/server/src/config/path-validator.js +53 -0
  110. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  111. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  112. package/dist/server/src/config/server-config-manager.js +222 -66
  113. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  114. package/dist/server/src/config/type-converter.js +3 -2
  115. package/dist/server/src/models/event.model.d.ts +17 -10
  116. package/dist/server/src/models/event.model.d.ts.map +1 -1
  117. package/dist/server/src/models/server.model.d.ts +17 -3
  118. package/dist/server/src/models/server.model.d.ts.map +1 -1
  119. package/dist/server/src/models/server.model.js +2 -1
  120. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  121. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  122. package/dist/server/src/models/system-tools.constants.js +4 -8
  123. package/dist/server/src/pid/manager.d.ts.map +1 -1
  124. package/dist/server/src/pid/manager.js +2 -1
  125. package/dist/server/src/server/dev-server.js +34 -20
  126. package/dist/server/src/server/runner.d.ts.map +1 -1
  127. package/dist/server/src/server/runner.js +41 -26
  128. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  129. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/connection-manager.js +286 -241
  131. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  132. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  133. package/dist/server/src/services/connection/tool-cache.js +50 -55
  134. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  135. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  136. package/dist/server/src/services/gateway/gateway.service.js +53 -23
  137. package/dist/server/src/services/gateway/global-transport.d.ts +19 -0
  138. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  139. package/dist/server/src/services/gateway/global-transport.js +66 -0
  140. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  142. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  143. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  145. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  146. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  147. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +20 -80
  148. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  149. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  150. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  151. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  152. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  153. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  155. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  156. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  157. package/dist/server/src/services/gateway/types.d.ts +2 -1
  158. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  159. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  160. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  161. package/dist/server/src/services/hub-manager.service.js +89 -267
  162. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  163. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  164. package/dist/server/src/services/hub-tools/index.js +1 -2
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  167. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  170. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  173. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  175. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  181. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  182. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  183. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  184. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  185. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  186. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  187. package/dist/server/src/services/hub-tools.service.js +185 -110
  188. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  189. package/dist/server/src/services/system-tool-handler.js +7 -17
  190. package/dist/server/src/utils/composite-key.d.ts +29 -0
  191. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  192. package/dist/server/src/utils/composite-key.js +39 -0
  193. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  194. package/dist/server/src/utils/error-handler.js +3 -2
  195. package/dist/server/src/utils/index.d.ts +2 -0
  196. package/dist/server/src/utils/index.d.ts.map +1 -1
  197. package/dist/server/src/utils/index.js +2 -0
  198. package/dist/server/src/utils/instance-id.d.ts +22 -0
  199. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  200. package/dist/server/src/utils/instance-id.js +59 -0
  201. package/dist/server/src/utils/json-utils.d.ts +4 -4
  202. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  203. package/dist/server/src/utils/json-utils.js +4 -4
  204. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  205. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  206. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  207. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  208. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  209. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  210. package/dist/server/src/utils/logger/log-modules.js +8 -6
  211. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  212. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  213. package/dist/server/src/utils/parameter-validator.js +53 -0
  214. package/dist/server/src/utils/process-tree.d.ts +49 -0
  215. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  216. package/dist/server/src/utils/process-tree.js +285 -0
  217. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  218. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  219. package/dist/server/src/utils/sort-utils.js +131 -0
  220. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  221. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  222. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  223. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  224. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  225. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  226. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  227. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  228. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  229. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  230. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  231. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  232. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  233. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  234. package/dist/server/src/utils/version.d.ts +11 -0
  235. package/dist/server/src/utils/version.d.ts.map +1 -0
  236. package/dist/server/src/utils/version.js +57 -0
  237. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  238. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  239. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  240. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  241. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  242. package/dist/server/tests/server.test.js +27 -16
  243. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  244. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  245. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  246. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  247. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  248. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  249. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  250. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  251. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  252. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  253. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  254. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  255. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  256. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  257. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  258. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  259. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  260. package/dist/server/tests/unit/server/runner.test.js +86 -62
  261. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  262. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  263. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  264. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  265. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  266. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  267. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  269. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  270. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  272. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  273. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  276. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  277. package/dist/server/tests/unit/utils/config.test.js +88 -186
  278. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  279. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  280. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  281. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  282. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  283. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  284. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  285. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  286. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  288. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  289. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  290. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  291. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  294. package/package.json +3 -1
  295. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  296. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  297. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  298. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  299. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  300. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  301. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  302. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  303. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  304. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  305. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  306. package/dist/client/assets/ToolsView-E3Ps9c7i.css +0 -1
  307. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  308. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  309. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  310. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  311. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  312. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  313. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  314. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  315. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  316. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  317. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  318. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  319. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  320. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  321. package/dist/client/assets/omit-DPsOVNIJ.js +0 -1
  322. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -0,0 +1,199 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import os from 'node:os';
5
+ import { loadConfig } from '../../../src/config/config-loader.js';
6
+ import { SystemConfigSchema, isV1Config, isV1_1Config } from '../../../src/config/config.schema.js';
7
+ import { migrateConfig, checkMigrationStatus } from '../../../src/config/config-migrator.js';
8
+ describe('Config Loader Automatic Migration (Backward Compatible)', () => {
9
+ let tempDir;
10
+ let testConfigPath;
11
+ beforeEach(() => {
12
+ // Create temporary directory
13
+ const testId = `auto-migration-test-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
14
+ tempDir = path.join(os.tmpdir(), testId);
15
+ fs.mkdirSync(tempDir, { recursive: true });
16
+ testConfigPath = path.join(tempDir, '.mcp-hub.json');
17
+ });
18
+ afterEach(() => {
19
+ // Clean up temporary directory
20
+ if (fs.existsSync(tempDir)) {
21
+ let retries = 3;
22
+ while (retries > 0) {
23
+ try {
24
+ fs.rmSync(tempDir, { recursive: true, force: true });
25
+ break;
26
+ }
27
+ catch {
28
+ retries--;
29
+ if (retries > 0) {
30
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 50);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ vi.restoreAllMocks();
36
+ });
37
+ const createV1Config = () => ({
38
+ version: '1.0.0',
39
+ system: {
40
+ host: 'localhost',
41
+ port: 7788,
42
+ language: 'zh',
43
+ theme: 'system',
44
+ logging: {
45
+ level: 'info',
46
+ rotationAge: '7d',
47
+ jsonPretty: true,
48
+ mcpCommDebug: false,
49
+ sessionDebug: false
50
+ }
51
+ },
52
+ security: {
53
+ allowedNetworks: ['127.0.0.1'],
54
+ maxConcurrentConnections: 50,
55
+ connectionTimeout: 30000,
56
+ idleConnectionTimeout: 300000,
57
+ sessionTimeout: 1800000,
58
+ sessionFlushInterval: 900000,
59
+ maxConnections: 50
60
+ },
61
+ servers: {
62
+ 'test-server-1': {
63
+ command: 'npx test-server-1',
64
+ args: ['--verbose'],
65
+ env: { NODE_ENV: 'development' },
66
+ enabled: true,
67
+ tags: { environment: 'dev' },
68
+ type: 'stdio',
69
+ timeout: 60000,
70
+ allowedTools: ['tool1', 'tool2'],
71
+ description: 'Test server 1'
72
+ }
73
+ },
74
+ tagDefinitions: []
75
+ });
76
+ const writeV1Config = () => {
77
+ const config = createV1Config();
78
+ fs.writeFileSync(testConfigPath, JSON.stringify(config, null, 2));
79
+ };
80
+ describe('Backward Compatible Loading (Default Behavior)', () => {
81
+ it('should load v1.0 config without migration by default', () => {
82
+ writeV1Config();
83
+ const originalContent = fs.readFileSync(testConfigPath, 'utf-8');
84
+ // Load config with default settings (no auto-migration)
85
+ const loadedConfig = loadConfig(testConfigPath);
86
+ // Verify loaded config is still v1.0 format
87
+ expect(loadedConfig.version).toBe('1.0.0');
88
+ expect(isV1Config(loadedConfig)).toBe(true);
89
+ expect(loadedConfig.servers).toBeDefined();
90
+ expect(loadedConfig.servers['test-server-1']).toBeDefined();
91
+ // Verify file was not modified
92
+ const currentContent = fs.readFileSync(testConfigPath, 'utf-8');
93
+ expect(currentContent).toBe(originalContent);
94
+ });
95
+ it('should validate loaded config with v1.0 schema', () => {
96
+ writeV1Config();
97
+ const loadedConfig = loadConfig(testConfigPath);
98
+ // Validate with Zod schema
99
+ const validation = SystemConfigSchema.safeParse(loadedConfig);
100
+ expect(validation.success).toBe(true);
101
+ });
102
+ it('should sort servers by name when loading', () => {
103
+ const v1Config = createV1Config();
104
+ v1Config.servers = {
105
+ 'zebra-server': {
106
+ enabled: true,
107
+ type: 'stdio',
108
+ args: [],
109
+ timeout: 60000,
110
+ allowedTools: []
111
+ },
112
+ 'alpha-server': {
113
+ enabled: true,
114
+ type: 'stdio',
115
+ args: [],
116
+ timeout: 60000,
117
+ allowedTools: []
118
+ },
119
+ 'mike-server': {
120
+ enabled: true,
121
+ type: 'stdio',
122
+ args: [],
123
+ timeout: 60000,
124
+ allowedTools: []
125
+ }
126
+ };
127
+ fs.writeFileSync(testConfigPath, JSON.stringify(v1Config, null, 2));
128
+ const loadedConfig = loadConfig(testConfigPath);
129
+ // Check that servers are sorted
130
+ const serverNames = Object.keys(loadedConfig.servers);
131
+ expect(serverNames).toEqual(['alpha-server', 'mike-server', 'zebra-server']);
132
+ });
133
+ });
134
+ describe('Optional Auto-Migration', () => {
135
+ it('should migrate v1.0 to v1.1 when autoMigrate=true', () => {
136
+ writeV1Config();
137
+ const originalContent = fs.readFileSync(testConfigPath, 'utf-8');
138
+ // Load config with auto-migration enabled
139
+ const loadedConfig = loadConfig(testConfigPath, true);
140
+ // Even though migration happened, the returned config should be v1.0 compatible
141
+ expect(loadedConfig.version).toBe('1.0.0');
142
+ expect(isV1Config(loadedConfig)).toBe(true);
143
+ // But the file on disk should be migrated to v1.1
144
+ const newContent = fs.readFileSync(testConfigPath, 'utf-8');
145
+ expect(newContent).not.toBe(originalContent);
146
+ const newParsed = JSON.parse(newContent);
147
+ expect(isV1_1Config(newParsed)).toBe(true);
148
+ expect(newParsed.version).toBe('1.1.0');
149
+ });
150
+ it('should create backup when migrating with autoMigrate=true', () => {
151
+ writeV1Config();
152
+ // Load config with auto-migration enabled
153
+ loadConfig(testConfigPath, true);
154
+ // Check for backup files in the same directory
155
+ const files = fs.readdirSync(tempDir);
156
+ const backupFiles = files.filter((f) => f.includes('.backup.'));
157
+ expect(backupFiles.length).toBeGreaterThan(0);
158
+ // Verify backup file contains original v1.0 config
159
+ const backupPath = path.join(tempDir, backupFiles[0]);
160
+ const backupContent = fs.readFileSync(backupPath, 'utf-8');
161
+ const backupParsed = JSON.parse(backupContent);
162
+ expect(isV1Config(backupParsed)).toBe(true);
163
+ expect(backupParsed.version).toBe('1.0.0');
164
+ });
165
+ it('should return v1.0 compatible config even when file is v1.1', () => {
166
+ // First, create a v1.1 file by migrating
167
+ writeV1Config();
168
+ loadConfig(testConfigPath, true);
169
+ // Now load again - file is already v1.1 but should return v1.0 compatible
170
+ const loadedConfig = loadConfig(testConfigPath);
171
+ expect(loadedConfig.version).toBe('1.0.0');
172
+ expect(isV1Config(loadedConfig)).toBe(true);
173
+ expect(loadedConfig.servers).toBeDefined();
174
+ });
175
+ });
176
+ describe('Direct Migration Functions', () => {
177
+ it('should check migration status correctly', () => {
178
+ writeV1Config();
179
+ const status = checkMigrationStatus(testConfigPath);
180
+ expect(status.exists).toBe(true);
181
+ expect(status.version).toBe('v1');
182
+ expect(status.canMigrate).toBe(true);
183
+ });
184
+ it('should perform dry run migration without modifying files', () => {
185
+ writeV1Config();
186
+ const originalContent = fs.readFileSync(testConfigPath, 'utf-8');
187
+ const result = migrateConfig(testConfigPath, {
188
+ dryRun: true,
189
+ createBackup: false,
190
+ validateAfterMigration: true
191
+ });
192
+ expect(result.success).toBe(true);
193
+ expect(result.migratedConfig).toBeDefined();
194
+ // Verify file wasn't modified
195
+ const currentContent = fs.readFileSync(testConfigPath, 'utf-8');
196
+ expect(currentContent).toBe(originalContent);
197
+ });
198
+ });
199
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-migrator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrator.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/config/config-migrator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,316 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import os from 'node:os';
5
+ import { dryRunMigration, checkMigrationStatus, migrateConfig, rollbackMigration, resolveInstanceConfig, getEnabledInstances } from '../../../src/config/config-migrator.js';
6
+ import { SystemConfigSchema, isLegacyV1Config } from '../../../src/config/config.schema.js';
7
+ describe('Config Migrator', () => {
8
+ let tempDir;
9
+ let testConfigPath;
10
+ beforeEach(() => {
11
+ // Create temporary directory
12
+ const testId = `migration-test-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
13
+ tempDir = path.join(os.tmpdir(), testId);
14
+ fs.mkdirSync(tempDir, { recursive: true });
15
+ testConfigPath = path.join(tempDir, '.mcp-hub.json');
16
+ });
17
+ afterEach(() => {
18
+ // Clean up temporary directory
19
+ if (fs.existsSync(tempDir)) {
20
+ let retries = 3;
21
+ while (retries > 0) {
22
+ try {
23
+ fs.rmSync(tempDir, { recursive: true, force: true });
24
+ break;
25
+ }
26
+ catch {
27
+ retries--;
28
+ if (retries > 0) {
29
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 50);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ vi.restoreAllMocks();
35
+ });
36
+ const createLegacyV1Config = () => ({
37
+ version: '1.0.0',
38
+ system: {
39
+ host: 'localhost',
40
+ port: 7788,
41
+ language: 'zh',
42
+ theme: 'system',
43
+ logging: {
44
+ level: 'info',
45
+ rotationAge: '7d',
46
+ jsonPretty: true,
47
+ mcpCommDebug: false,
48
+ apiDebug: false
49
+ }
50
+ },
51
+ security: {
52
+ allowedNetworks: ['127.0.0.1'],
53
+ maxConcurrentConnections: 50,
54
+ connectionTimeout: 30000,
55
+ idleConnectionTimeout: 300000,
56
+ maxConnections: 50
57
+ },
58
+ servers: {
59
+ 'test-server-1': {
60
+ command: 'npx test-server-1',
61
+ args: ['--verbose'],
62
+ env: { NODE_ENV: 'development' },
63
+ enabled: true,
64
+ tags: { environment: 'dev' },
65
+ type: 'stdio',
66
+ timeout: 60000,
67
+ aggregatedTools: ['tool1', 'tool2'],
68
+ description: 'Test server 1'
69
+ },
70
+ 'test-server-2': {
71
+ command: 'npx test-server-2',
72
+ args: [],
73
+ enabled: false,
74
+ type: 'sse',
75
+ url: 'http://localhost:8080',
76
+ timeout: 60000,
77
+ aggregatedTools: [],
78
+ description: 'Test server 2'
79
+ }
80
+ },
81
+ tagDefinitions: []
82
+ });
83
+ const writeLegacyV1Config = () => {
84
+ const config = createLegacyV1Config();
85
+ fs.writeFileSync(testConfigPath, JSON.stringify(config, null, 2));
86
+ };
87
+ describe('checkMigrationStatus', () => {
88
+ it('should return "not found" for non-existent file', () => {
89
+ const result = checkMigrationStatus(testConfigPath);
90
+ expect(result.exists).toBe(false);
91
+ expect(result.version).toBe('unknown');
92
+ expect(result.canMigrate).toBe(false);
93
+ });
94
+ it('should detect v1.0 configuration', () => {
95
+ writeLegacyV1Config();
96
+ const result = checkMigrationStatus(testConfigPath);
97
+ expect(result.exists).toBe(true);
98
+ expect(result.version).toBe('v1');
99
+ expect(result.canMigrate).toBe(true);
100
+ });
101
+ it('should detect v1.1 configuration', () => {
102
+ const v1_1Config = {
103
+ version: '1.1.0',
104
+ system: {
105
+ host: 'localhost',
106
+ port: 7788,
107
+ language: 'zh',
108
+ theme: 'system',
109
+ logging: {
110
+ level: 'info',
111
+ rotationAge: '7d',
112
+ jsonPretty: true,
113
+ mcpCommDebug: false,
114
+ apiDebug: false
115
+ }
116
+ },
117
+ security: {
118
+ allowedNetworks: ['127.0.0.1'],
119
+ maxConcurrentConnections: 50,
120
+ connectionTimeout: 30000,
121
+ idleConnectionTimeout: 300000,
122
+ maxConnections: 50
123
+ },
124
+ servers: {},
125
+ tagDefinitions: []
126
+ };
127
+ fs.writeFileSync(testConfigPath, JSON.stringify(v1_1Config, null, 2));
128
+ const result = checkMigrationStatus(testConfigPath);
129
+ expect(result.exists).toBe(true);
130
+ expect(result.version).toBe('v1.1');
131
+ expect(result.canMigrate).toBe(false);
132
+ });
133
+ });
134
+ describe('dryRunMigration', () => {
135
+ it('should perform migration without modifying files', () => {
136
+ writeLegacyV1Config();
137
+ const originalContent = fs.readFileSync(testConfigPath, 'utf8');
138
+ const result = dryRunMigration(testConfigPath);
139
+ expect(result.success).toBe(true);
140
+ expect(result.migratedConfig).toBeDefined();
141
+ expect(result.backupPath).toBeUndefined();
142
+ // Verify file wasn't modified
143
+ const currentContent = fs.readFileSync(testConfigPath, 'utf8');
144
+ expect(currentContent).toBe(originalContent);
145
+ });
146
+ it('should convert servers to servers correctly', () => {
147
+ writeLegacyV1Config();
148
+ const result = dryRunMigration(testConfigPath);
149
+ expect(result.success).toBe(true);
150
+ expect(result.migratedConfig).toBeDefined();
151
+ const migrated = result.migratedConfig;
152
+ expect(migrated.version).toBe('1.1.0');
153
+ expect(migrated.servers).toBeDefined();
154
+ expect(Object.keys(migrated.servers)).toHaveLength(2);
155
+ expect(migrated.servers['test-server-1']).toBeDefined();
156
+ expect(migrated.servers['test-server-2']).toBeDefined();
157
+ // Check server 1
158
+ const server1 = migrated.servers['test-server-1'];
159
+ expect(server1.template.command).toBe('npx test-server-1');
160
+ expect(server1.template.args).toEqual(['--verbose']);
161
+ expect(server1.template.env).toEqual({ NODE_ENV: 'development' });
162
+ expect(server1.template.type).toBe('stdio');
163
+ expect(server1.instances[0].tags).toEqual({ environment: 'dev' });
164
+ expect(server1.instances).toHaveLength(1);
165
+ expect(server1.instances[0].id).toMatch(/test-server-1-[0-9a-f]{8}/);
166
+ expect(server1.instances[0].enabled).toBe(true);
167
+ });
168
+ it('should preserve system and security config', () => {
169
+ writeLegacyV1Config();
170
+ const v1Config = createLegacyV1Config();
171
+ const result = dryRunMigration(testConfigPath);
172
+ expect(result.success).toBe(true);
173
+ const migrated = result.migratedConfig;
174
+ expect(migrated.system).toEqual(v1Config.system);
175
+ expect(migrated.security).toEqual(v1Config.security);
176
+ });
177
+ });
178
+ describe('migrateConfig (actual migration)', () => {
179
+ it('should perform actual migration and validate the result', () => {
180
+ writeLegacyV1Config();
181
+ const originalContent = fs.readFileSync(testConfigPath, 'utf8');
182
+ const result = migrateConfig(testConfigPath, {
183
+ createBackup: true,
184
+ validateAfterMigration: true
185
+ });
186
+ expect(result.success).toBe(true);
187
+ expect(result.migratedConfig).toBeDefined();
188
+ expect(result.backupPath).toBeDefined();
189
+ // Verify file was modified to v1.1
190
+ const newContent = fs.readFileSync(testConfigPath, 'utf8');
191
+ expect(newContent).not.toBe(originalContent);
192
+ const migratedConfig = JSON.parse(newContent);
193
+ expect(isLegacyV1Config(migratedConfig)).toBe(false);
194
+ expect(migratedConfig.version).toBe('1.1.0');
195
+ });
196
+ it('should validate migrated config with v1.1 schema', () => {
197
+ writeLegacyV1Config();
198
+ const result = migrateConfig(testConfigPath, {
199
+ createBackup: false,
200
+ validateAfterMigration: true
201
+ });
202
+ expect(result.success).toBe(true);
203
+ expect(result.migratedConfig).toBeDefined();
204
+ // Validate with Zod schema
205
+ const validation = SystemConfigSchema.safeParse(result.migratedConfig);
206
+ expect(validation.success).toBe(true);
207
+ });
208
+ });
209
+ describe('rollbackMigration', () => {
210
+ it('should rollback to v1.0 using backup', () => {
211
+ writeLegacyV1Config();
212
+ const originalContent = fs.readFileSync(testConfigPath, 'utf8');
213
+ // Perform migration first
214
+ const migrationResult = migrateConfig(testConfigPath, {
215
+ createBackup: true,
216
+ validateAfterMigration: true
217
+ });
218
+ expect(migrationResult.success).toBe(true);
219
+ expect(migrationResult.backupPath).toBeDefined();
220
+ // Verify file is v1.1
221
+ const migratedContent = fs.readFileSync(testConfigPath, 'utf8');
222
+ expect(migratedContent).not.toBe(originalContent);
223
+ // Rollback
224
+ const rollbackResult = rollbackMigration(testConfigPath, migrationResult.backupPath);
225
+ expect(rollbackResult.success).toBe(true);
226
+ // Verify file is back to original
227
+ const rolledBackContent = fs.readFileSync(testConfigPath, 'utf8');
228
+ expect(rolledBackContent).toBe(originalContent);
229
+ });
230
+ it('should fail rollback for non-existent backup', () => {
231
+ writeLegacyV1Config();
232
+ const nonExistentBackup = path.join(tempDir, 'non-existent-backup.json');
233
+ const result = rollbackMigration(testConfigPath, nonExistentBackup);
234
+ expect(result.success).toBe(false);
235
+ expect(result.error).toContain('not found');
236
+ });
237
+ });
238
+ describe('v1.1 Configuration Helpers', () => {
239
+ describe('resolveInstanceConfig', () => {
240
+ it('should resolve instance configuration by merging template and instance', () => {
241
+ writeLegacyV1Config();
242
+ const migrationResult = dryRunMigration(testConfigPath);
243
+ expect(migrationResult.success).toBe(true);
244
+ const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
245
+ const resolved = resolveInstanceConfig(serverConfig);
246
+ expect(resolved).not.toBeNull();
247
+ expect(resolved.command).toBe('npx test-server-1');
248
+ expect(resolved.args).toEqual(['--verbose']);
249
+ expect(resolved.env).toEqual({ NODE_ENV: 'development' });
250
+ expect(resolved.type).toBe('stdio');
251
+ expect(resolved.tags).toEqual({ environment: 'dev' });
252
+ expect(resolved.enabled).toBe(true);
253
+ });
254
+ it('should resolve specific instance by ID', () => {
255
+ writeLegacyV1Config();
256
+ const migrationResult = dryRunMigration(testConfigPath);
257
+ expect(migrationResult.success).toBe(true);
258
+ const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
259
+ const instanceId = serverConfig.instances[0].id;
260
+ const resolved = resolveInstanceConfig(serverConfig, instanceId);
261
+ expect(resolved).not.toBeNull();
262
+ expect(resolved.command).toBe('npx test-server-1');
263
+ });
264
+ it('should return null for non-existent instance ID', () => {
265
+ writeLegacyV1Config();
266
+ const migrationResult = dryRunMigration(testConfigPath);
267
+ expect(migrationResult.success).toBe(true);
268
+ const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
269
+ const resolved = resolveInstanceConfig(serverConfig, 'non-existent-id');
270
+ expect(resolved).toBeNull();
271
+ });
272
+ });
273
+ describe('getEnabledInstances', () => {
274
+ it('should return only enabled instances', () => {
275
+ writeLegacyV1Config();
276
+ const migrationResult = dryRunMigration(testConfigPath);
277
+ expect(migrationResult.success).toBe(true);
278
+ const serverConfig = migrationResult.migratedConfig.servers['test-server-1'];
279
+ const enabledInstances = getEnabledInstances(serverConfig);
280
+ expect(enabledInstances).toHaveLength(1);
281
+ expect(enabledInstances[0].instance.enabled).toBe(true);
282
+ expect(enabledInstances[0].resolved).not.toBeNull();
283
+ });
284
+ });
285
+ });
286
+ describe('Migration Edge Cases', () => {
287
+ it('should handle empty servers list', () => {
288
+ const emptyV1Config = {
289
+ ...createLegacyV1Config(),
290
+ servers: {}
291
+ };
292
+ fs.writeFileSync(testConfigPath, JSON.stringify(emptyV1Config, null, 2));
293
+ const result = dryRunMigration(testConfigPath);
294
+ expect(result.success).toBe(true);
295
+ expect(result.migratedConfig.servers).toEqual({});
296
+ });
297
+ it('should handle server with minimal configuration', () => {
298
+ const minimalV1Config = {
299
+ ...createLegacyV1Config(),
300
+ servers: {
301
+ 'minimal-server': {
302
+ enabled: true,
303
+ type: 'stdio',
304
+ args: [],
305
+ timeout: 30000,
306
+ aggregatedTools: []
307
+ }
308
+ }
309
+ };
310
+ fs.writeFileSync(testConfigPath, JSON.stringify(minimalV1Config, null, 2));
311
+ const result = dryRunMigration(testConfigPath);
312
+ expect(result.success).toBe(true);
313
+ expect(result.migratedConfig.servers['minimal-server']).toBeDefined();
314
+ });
315
+ });
316
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-saver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-saver.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/config/config-saver.test.ts"],"names":[],"mappings":""}