@loop_ouroboros/mcp-hub-lite 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/client/assets/{HomeView-7rMg9C6t.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/{_baseClone-5q1b0P3O.js → _baseClone-Bp9Rjwd7.js} +1 -1
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-H85n3BUC.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/{omit-DPsOVNIJ.js → omit-CqPQN3XP.js} +1 -1
  39. package/dist/client/assets/{raf-DY5mgbuB.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +362 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +1 -57
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +1 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/session-context.types.d.ts +0 -2
  53. package/dist/server/shared/types/session-context.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  55. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  56. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  57. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  58. package/dist/server/src/api/mcp/gateway.js +19 -50
  59. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  60. package/dist/server/src/api/mcp/session-context-extractor.js +5 -14
  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/status.d.ts.map +1 -1
  81. package/dist/server/src/cli/commands/status.js +41 -30
  82. package/dist/server/src/cli/index.d.ts.map +1 -1
  83. package/dist/server/src/cli/index.js +2 -1
  84. package/dist/server/src/cli/server.d.ts +11 -2
  85. package/dist/server/src/cli/server.d.ts.map +1 -1
  86. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  87. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  88. package/dist/server/src/config/config-change-logger.js +135 -11
  89. package/dist/server/src/config/config-loader.d.ts +6 -5
  90. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  91. package/dist/server/src/config/config-loader.js +54 -16
  92. package/dist/server/src/config/config-manager.d.ts +51 -43
  93. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  94. package/dist/server/src/config/config-manager.js +84 -66
  95. package/dist/server/src/config/config-migrator.d.ts +82 -0
  96. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  97. package/dist/server/src/config/config-migrator.js +348 -0
  98. package/dist/server/src/config/config-saver.d.ts +2 -0
  99. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  100. package/dist/server/src/config/config-saver.js +8 -2
  101. package/dist/server/src/config/config.schema.d.ts +10 -104
  102. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  103. package/dist/server/src/config/config.schema.js +15 -99
  104. package/dist/server/src/config/path-validator.d.ts +27 -0
  105. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  106. package/dist/server/src/config/path-validator.js +53 -0
  107. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  108. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  109. package/dist/server/src/config/server-config-manager.js +222 -66
  110. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  111. package/dist/server/src/config/type-converter.js +3 -2
  112. package/dist/server/src/models/event.model.d.ts +17 -10
  113. package/dist/server/src/models/event.model.d.ts.map +1 -1
  114. package/dist/server/src/models/server.model.d.ts +17 -3
  115. package/dist/server/src/models/server.model.d.ts.map +1 -1
  116. package/dist/server/src/models/server.model.js +2 -1
  117. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  118. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  119. package/dist/server/src/models/system-tools.constants.js +4 -8
  120. package/dist/server/src/pid/manager.d.ts.map +1 -1
  121. package/dist/server/src/pid/manager.js +2 -1
  122. package/dist/server/src/server/dev-server.js +34 -20
  123. package/dist/server/src/server/runner.d.ts.map +1 -1
  124. package/dist/server/src/server/runner.js +41 -26
  125. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  126. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  127. package/dist/server/src/services/connection/connection-manager.js +286 -241
  128. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  129. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  130. package/dist/server/src/services/connection/tool-cache.js +50 -55
  131. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  132. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  133. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  134. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  135. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  136. package/dist/server/src/services/gateway/global-transport.js +42 -0
  137. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  138. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  139. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  140. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  141. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  142. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  143. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  144. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +10 -81
  145. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  146. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  147. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  148. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  150. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  151. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  152. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  153. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  154. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  155. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  156. package/dist/server/src/services/gateway/types.d.ts +2 -1
  157. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  158. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  159. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  160. package/dist/server/src/services/hub-manager.service.js +89 -267
  161. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  162. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  163. package/dist/server/src/services/hub-tools/index.js +1 -2
  164. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  165. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  166. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  167. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  168. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  169. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  170. package/dist/server/src/services/hub-tools/resource-generator.d.ts +24 -1
  171. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  172. package/dist/server/src/services/hub-tools/resource-generator.js +259 -39
  173. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  174. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  175. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  176. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  177. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  178. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  179. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  180. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  181. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  182. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  183. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  184. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  185. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  186. package/dist/server/src/services/hub-tools.service.js +185 -110
  187. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  188. package/dist/server/src/services/search/search-core.service.js +11 -11
  189. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  190. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  191. package/dist/server/src/services/session/session-manager.js +23 -585
  192. package/dist/server/src/services/session-tracker.service.d.ts +2 -10
  193. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -1
  194. package/dist/server/src/services/session-tracker.service.js +2 -53
  195. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  196. package/dist/server/src/services/system-tool-handler.js +7 -17
  197. package/dist/server/src/utils/composite-key.d.ts +29 -0
  198. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  199. package/dist/server/src/utils/composite-key.js +39 -0
  200. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  201. package/dist/server/src/utils/error-handler.js +3 -2
  202. package/dist/server/src/utils/index.d.ts +2 -0
  203. package/dist/server/src/utils/index.d.ts.map +1 -1
  204. package/dist/server/src/utils/index.js +2 -0
  205. package/dist/server/src/utils/instance-id.d.ts +22 -0
  206. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  207. package/dist/server/src/utils/instance-id.js +59 -0
  208. package/dist/server/src/utils/json-utils.d.ts +4 -4
  209. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  210. package/dist/server/src/utils/json-utils.js +4 -4
  211. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  212. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  213. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  214. package/dist/server/src/utils/logger/log-formatter.js +82 -5
  215. package/dist/server/src/utils/logger/log-modules.d.ts +15 -9
  216. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  217. package/dist/server/src/utils/logger/log-modules.js +8 -6
  218. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  219. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  220. package/dist/server/src/utils/parameter-validator.js +53 -0
  221. package/dist/server/src/utils/process-tree.d.ts +49 -0
  222. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  223. package/dist/server/src/utils/process-tree.js +285 -0
  224. package/dist/server/src/utils/request-context.d.ts +0 -18
  225. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  226. package/dist/server/src/utils/request-context.js +0 -20
  227. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  228. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  229. package/dist/server/src/utils/sort-utils.js +131 -0
  230. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  231. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  232. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  233. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  234. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  235. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  236. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  237. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  238. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  239. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  240. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  241. package/dist/server/src/utils/transports/transport-factory.js +31 -11
  242. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  243. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  244. package/dist/server/src/utils/version.d.ts +11 -0
  245. package/dist/server/src/utils/version.d.ts.map +1 -0
  246. package/dist/server/src/utils/version.js +57 -0
  247. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  248. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  249. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  250. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  251. package/dist/server/tests/integration/api/gateway.test.js +2 -2
  252. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  253. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  254. package/dist/server/tests/server.test.js +27 -16
  255. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  256. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  257. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  258. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  259. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  260. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  261. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  262. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  263. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  264. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  265. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  266. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  267. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  268. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  269. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  270. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  271. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  272. package/dist/server/tests/unit/server/runner.test.js +86 -62
  273. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  274. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  275. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  276. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  277. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  278. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  279. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  280. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  281. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  282. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  283. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  284. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -320
  285. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  286. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  287. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  288. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  289. package/dist/server/tests/unit/utils/config.test.js +88 -186
  290. package/dist/server/tests/unit/utils/json-utils.test.js +18 -18
  291. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  292. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  293. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  294. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  295. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  296. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  297. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  298. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  300. package/dist/server/tests/unit/utils/request-context.test.js +5 -24
  301. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  302. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  303. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  304. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  305. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  306. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  307. package/package.json +1 -1
  308. package/dist/client/assets/ResourceDetailView-Bf-1ffbk.js +0 -1
  309. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  310. package/dist/client/assets/ResourcesView-g5x4xCPh.js +0 -1
  311. package/dist/client/assets/ServerDashboard-Chpne8Q0.css +0 -1
  312. package/dist/client/assets/ServerDashboard-G8Wmp4hF.js +0 -2
  313. package/dist/client/assets/ServerListView-dV2XrPjo.js +0 -32
  314. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  315. package/dist/client/assets/SessionsView-Ckd38lj1.js +0 -1
  316. package/dist/client/assets/SettingsView-BJUdepEQ.js +0 -1
  317. package/dist/client/assets/ToolCallDialog-C_bTCpHC.js +0 -1
  318. package/dist/client/assets/ToolsView-0c2eputu.js +0 -1
  319. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  320. package/dist/client/assets/el-form-item-ClFnj49k.js +0 -12
  321. package/dist/client/assets/el-input-CDnuSKVZ.js +0 -1
  322. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  323. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  324. package/dist/client/assets/el-overlay-CzMkXyYy.js +0 -1
  325. package/dist/client/assets/el-select-DvjGddk_.js +0 -1
  326. package/dist/client/assets/el-tab-pane-C_DQMcwe.js +0 -1
  327. package/dist/client/assets/el-table-column-CASRIbZM.js +0 -1
  328. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  329. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  330. package/dist/client/assets/el-tag-npbwux4f.js +0 -1
  331. package/dist/client/assets/index-CCnAxNF8.js +0 -2
  332. package/dist/client/assets/index-d1DZeSfz.js +0 -1
  333. package/dist/client/assets/vnode-CHomNjgN.js +0 -1
@@ -0,0 +1,348 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { logger, LOG_MODULES } from '../utils/logger.js';
4
+ import { generateInstanceId } from '../utils/instance-id.js';
5
+ import { isLegacyV1Config, SystemConfigSchema } from './config.schema.js';
6
+ import { reassignServerInstanceIndexes } from './server-config-manager.js';
7
+ /**
8
+ * Default migration options
9
+ */
10
+ const DEFAULT_OPTIONS = {
11
+ dryRun: false,
12
+ createBackup: true,
13
+ validateAfterMigration: true
14
+ };
15
+ /**
16
+ * Generates a timestamp for backup files
17
+ */
18
+ function generateTimestamp() {
19
+ const now = new Date();
20
+ return now.toISOString().replace(/[:.]/g, '-').slice(0, 19);
21
+ }
22
+ /**
23
+ * Creates a backup of the configuration file
24
+ */
25
+ function createBackup(configPath) {
26
+ try {
27
+ if (!existsSync(configPath)) {
28
+ return null;
29
+ }
30
+ const timestamp = generateTimestamp();
31
+ const backupDir = dirname(configPath);
32
+ const backupPath = join(backupDir, `.mcp-hub.json.backup.${timestamp}`);
33
+ const content = readFileSync(configPath, 'utf8');
34
+ writeFileSync(backupPath, content, 'utf8');
35
+ return backupPath;
36
+ }
37
+ catch (error) {
38
+ logger.warn('Failed to create backup:', LOG_MODULES.CONFIG_MANAGER, error);
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Converts a legacy v1.0 ServerConfig to a v1.1 ServerTemplate
44
+ */
45
+ function convertToServerTemplate(v1Config) {
46
+ return {
47
+ command: v1Config.command,
48
+ args: v1Config.args || [],
49
+ env: v1Config.env || {},
50
+ headers: v1Config.headers || {},
51
+ type: v1Config.type || 'stdio',
52
+ timeout: v1Config.timeout || 60000,
53
+ url: v1Config.url,
54
+ aggregatedTools: v1Config.allowedTools || [],
55
+ description: v1Config.description
56
+ };
57
+ }
58
+ /**
59
+ * Converts a legacy v1.0 ServerConfig to a v1.1 ServerInstance
60
+ */
61
+ function convertToServerInstance(v1Config, serverName) {
62
+ // Only keep the differences from template (args should be empty since template has full args)
63
+ const instanceConfig = {
64
+ args: [],
65
+ env: v1Config.env || {},
66
+ headers: v1Config.headers || {},
67
+ tags: v1Config.tags || {}
68
+ };
69
+ return {
70
+ id: generateInstanceId(serverName, instanceConfig),
71
+ index: 0, // Set initial index for migrated instances
72
+ enabled: v1Config.enabled !== false,
73
+ args: [], // In v1.1, instance args are just the append part
74
+ env: v1Config.env || {},
75
+ headers: v1Config.headers || {},
76
+ tags: v1Config.tags || {}
77
+ // command and description are removed from instance
78
+ };
79
+ }
80
+ /**
81
+ * Converts a legacy v1.0 SystemConfig to a v1.1 SystemConfig
82
+ */
83
+ function migrateV1ToV1_1(v1Config) {
84
+ const warnings = [];
85
+ const servers = {};
86
+ // Convert each v1 server to a v1.1 server
87
+ for (const [serverName, serverConfig] of Object.entries(v1Config.servers || {})) {
88
+ const template = convertToServerTemplate(serverConfig);
89
+ const instance = convertToServerInstance(serverConfig, serverName);
90
+ servers[serverName] = {
91
+ template,
92
+ instances: [instance],
93
+ tagDefinitions: []
94
+ };
95
+ }
96
+ // Ensure all server instances have proper indexes
97
+ for (const serverName of Object.keys(servers)) {
98
+ reassignServerInstanceIndexes(serverName, servers);
99
+ }
100
+ const v1_1Config = {
101
+ version: '1.1.0',
102
+ system: v1Config.system,
103
+ security: v1Config.security,
104
+ servers,
105
+ tagDefinitions: []
106
+ };
107
+ return { config: v1_1Config, warnings };
108
+ }
109
+ /**
110
+ * Validates a configuration against the schema
111
+ */
112
+ function validateConfig(config) {
113
+ try {
114
+ SystemConfigSchema.parse(config);
115
+ return { valid: true };
116
+ }
117
+ catch (error) {
118
+ return {
119
+ valid: false,
120
+ errors: error instanceof Error ? error.message : String(error)
121
+ };
122
+ }
123
+ }
124
+ /**
125
+ * Loads and parses a configuration file
126
+ */
127
+ function loadConfigFile(configPath) {
128
+ if (!existsSync(configPath)) {
129
+ throw new Error(`Configuration file not found: ${configPath}`);
130
+ }
131
+ const content = readFileSync(configPath, 'utf8');
132
+ try {
133
+ return JSON.parse(content);
134
+ }
135
+ catch (error) {
136
+ throw new Error(`Failed to parse configuration file: ${error instanceof Error ? error.message : String(error)}`);
137
+ }
138
+ }
139
+ /**
140
+ * Saves a configuration file
141
+ */
142
+ function saveConfigFile(configPath, config) {
143
+ const dir = dirname(configPath);
144
+ if (!existsSync(dir)) {
145
+ mkdirSync(dir, { recursive: true });
146
+ }
147
+ const content = JSON.stringify(config, null, 2);
148
+ writeFileSync(configPath, content, 'utf8');
149
+ }
150
+ /**
151
+ * Main migration function that migrates a configuration from v1.0 to v1.1
152
+ *
153
+ * @param configPath Path to the configuration file
154
+ * @param options Migration options
155
+ * @returns Migration result with backup path and migrated config
156
+ */
157
+ export function migrateConfig(configPath, options = {}) {
158
+ const opts = { ...DEFAULT_OPTIONS, ...options };
159
+ const result = {
160
+ success: false,
161
+ warnings: []
162
+ };
163
+ try {
164
+ // Load and validate source config
165
+ const sourceConfig = loadConfigFile(configPath);
166
+ // Check if already v1.1
167
+ if (!isLegacyV1Config(sourceConfig)) {
168
+ result.success = true;
169
+ result.warnings.push('Configuration is already in v1.1 format');
170
+ result.migratedConfig = sourceConfig;
171
+ return result;
172
+ }
173
+ // Create backup if requested
174
+ let backupPath = null;
175
+ if (opts.createBackup) {
176
+ backupPath = createBackup(configPath);
177
+ if (backupPath) {
178
+ result.backupPath = backupPath;
179
+ }
180
+ else {
181
+ result.warnings.push('Failed to create backup file');
182
+ }
183
+ }
184
+ // Perform migration
185
+ const v1Config = sourceConfig;
186
+ const { config: migratedConfig, warnings } = migrateV1ToV1_1(v1Config);
187
+ result.warnings.push(...warnings);
188
+ // Validate migrated config
189
+ if (opts.validateAfterMigration) {
190
+ const validation = validateConfig(migratedConfig);
191
+ if (!validation.valid) {
192
+ result.error = `Migrated configuration validation failed: ${validation.errors}`;
193
+ return result;
194
+ }
195
+ }
196
+ // Save if not dry run
197
+ if (!opts.dryRun) {
198
+ saveConfigFile(configPath, migratedConfig);
199
+ }
200
+ result.success = true;
201
+ result.migratedConfig = migratedConfig;
202
+ return result;
203
+ }
204
+ catch (error) {
205
+ result.error = error instanceof Error ? error.message : String(error);
206
+ return result;
207
+ }
208
+ }
209
+ /**
210
+ * Performs a dry run of the migration without modifying files
211
+ *
212
+ * @param configPath Path to the configuration file
213
+ * @returns Migration result with what would happen
214
+ */
215
+ export function dryRunMigration(configPath) {
216
+ return migrateConfig(configPath, {
217
+ dryRun: true,
218
+ createBackup: false,
219
+ validateAfterMigration: true
220
+ });
221
+ }
222
+ /**
223
+ * Rolls back a migration using a backup file
224
+ *
225
+ * @param configPath Path to the current configuration file
226
+ * @param backupPath Path to the backup file
227
+ * @returns Success status and any error message
228
+ */
229
+ export function rollbackMigration(configPath, backupPath) {
230
+ try {
231
+ if (!existsSync(backupPath)) {
232
+ return {
233
+ success: false,
234
+ error: `Backup file not found: ${backupPath}`
235
+ };
236
+ }
237
+ const backupContent = readFileSync(backupPath, 'utf8');
238
+ const dir = dirname(configPath);
239
+ if (!existsSync(dir)) {
240
+ mkdirSync(dir, { recursive: true });
241
+ }
242
+ writeFileSync(configPath, backupContent, 'utf8');
243
+ return { success: true };
244
+ }
245
+ catch (error) {
246
+ return {
247
+ success: false,
248
+ error: error instanceof Error ? error.message : String(error)
249
+ };
250
+ }
251
+ }
252
+ /**
253
+ * Checks the migration status of a configuration file
254
+ *
255
+ * @param configPath Path to the configuration file
256
+ * @returns Status information
257
+ */
258
+ export function checkMigrationStatus(configPath) {
259
+ if (!existsSync(configPath)) {
260
+ return {
261
+ exists: false,
262
+ version: 'unknown',
263
+ canMigrate: false,
264
+ message: 'Configuration file does not exist'
265
+ };
266
+ }
267
+ try {
268
+ const config = loadConfigFile(configPath);
269
+ if (!isLegacyV1Config(config)) {
270
+ return {
271
+ exists: true,
272
+ version: 'v1.1',
273
+ canMigrate: false,
274
+ message: 'Configuration is already in v1.1 format'
275
+ };
276
+ }
277
+ return {
278
+ exists: true,
279
+ version: 'v1',
280
+ canMigrate: true,
281
+ message: 'Configuration is in v1.0 format and can be migrated'
282
+ };
283
+ }
284
+ catch (error) {
285
+ return {
286
+ exists: true,
287
+ version: 'unknown',
288
+ canMigrate: false,
289
+ message: `Error reading configuration: ${error instanceof Error ? error.message : String(error)}`
290
+ };
291
+ }
292
+ }
293
+ // ====== v1.1 Configuration Helpers ======
294
+ /**
295
+ * Resolves a server instance configuration by merging template and instance overrides
296
+ *
297
+ * @param serverConfig The server configuration with template and instances
298
+ * @param instanceId Optional instance ID (uses first enabled instance if not provided)
299
+ * @returns The resolved server configuration
300
+ */
301
+ export function resolveInstanceConfig(serverConfig, instanceId) {
302
+ const { template, instances } = serverConfig;
303
+ // Find the target instance
304
+ let targetInstance;
305
+ if (instanceId) {
306
+ targetInstance = instances.find((inst) => inst.id === instanceId);
307
+ }
308
+ else {
309
+ // Use first enabled instance
310
+ targetInstance = instances.find((inst) => inst.enabled !== false);
311
+ }
312
+ if (!targetInstance) {
313
+ return null;
314
+ }
315
+ // Merge template with instance overrides
316
+ return {
317
+ command: template.command,
318
+ args: [...(template.args || []), ...(targetInstance.args || [])],
319
+ env: { ...template.env, ...targetInstance.env },
320
+ headers: { ...template.headers, ...targetInstance.headers },
321
+ proxy: targetInstance.proxy || template.proxy,
322
+ type: template.type,
323
+ timeout: template.timeout,
324
+ url: template.url,
325
+ aggregatedTools: template.aggregatedTools,
326
+ tags: targetInstance.tags,
327
+ enabled: targetInstance.enabled !== false,
328
+ description: template.description
329
+ };
330
+ }
331
+ /**
332
+ * Gets all enabled instances for a server
333
+ *
334
+ * @param serverConfig The server configuration
335
+ * @returns Array of enabled instances with resolved configs
336
+ */
337
+ export function getEnabledInstances(serverConfig) {
338
+ const result = [];
339
+ for (const instance of serverConfig.instances) {
340
+ if (instance.enabled !== false) {
341
+ const resolved = resolveInstanceConfig(serverConfig, instance.id);
342
+ if (resolved) {
343
+ result.push({ instance, resolved });
344
+ }
345
+ }
346
+ }
347
+ return result;
348
+ }
@@ -9,6 +9,8 @@
9
9
  * creating the directory structure if it doesn't exist. Errors during the save
10
10
  * operation are silently ignored to prevent crashes during normal operation.
11
11
  *
12
+ * All empty values and empty objects are preserved as-is in the output.
13
+ *
12
14
  * @param configPath - Path to save the configuration file
13
15
  * @param config - The configuration object to save
14
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config-saver.d.ts","sourceRoot":"","sources":["../../../../src/config/config-saver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAUpE"}
1
+ {"version":3,"file":"config-saver.d.ts","sourceRoot":"","sources":["../../../../src/config/config-saver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAYpE"}
@@ -4,6 +4,8 @@
4
4
  */
5
5
  import * as fs from 'fs';
6
6
  import path from 'path';
7
+ import { logger } from '../utils/logger.js';
8
+ import { LOG_MODULES } from '../utils/logger/log-modules.js';
7
9
  /**
8
10
  * Saves the configuration to disk at the specified path.
9
11
  *
@@ -11,18 +13,22 @@ import path from 'path';
11
13
  * creating the directory structure if it doesn't exist. Errors during the save
12
14
  * operation are silently ignored to prevent crashes during normal operation.
13
15
  *
16
+ * All empty values and empty objects are preserved as-is in the output.
17
+ *
14
18
  * @param configPath - Path to save the configuration file
15
19
  * @param config - The configuration object to save
16
20
  */
17
21
  export function saveConfig(configPath, config) {
18
22
  try {
23
+ logger.debug(`Saving configuration to: ${configPath}`, LOG_MODULES.CONFIG_SAVER);
19
24
  const dir = path.dirname(configPath);
20
25
  if (!fs.existsSync(dir)) {
21
26
  fs.mkdirSync(dir, { recursive: true });
22
27
  }
23
28
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
29
+ logger.debug(`Configuration saved successfully`, LOG_MODULES.CONFIG_SAVER);
24
30
  }
25
- catch {
26
- // Ignore
31
+ catch (error) {
32
+ logger.error(`Failed to save configuration:`, error, LOG_MODULES.CONFIG_SAVER);
27
33
  }
28
34
  }
@@ -1,110 +1,16 @@
1
- import { z } from 'zod';
2
- import type { LogLevel } from '../../shared/types/common.types.js';
1
+ import { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema, type SystemConfig, type ServerConfig, type ServerTemplate, type ServerInstance, type ServerInstanceUpdate, type TagDefinition, type ServerInstanceConfig, type ServerRuntimeConfig } from '../../shared/models/server.model.js';
3
2
  /**
4
3
  * MCP Server Configuration Schema
5
- * Simplified schema for MCP-HUB-LITE Lite version
4
+ * Simplified v1.1 only - No v1.0 compatibility
5
+ *
6
+ * Note: All core schemas are now defined in @shared-models/server.model.ts
7
+ * This file re-exports them for backward compatibility and retains
8
+ * TransportType constants and legacy helper functions.
6
9
  */
7
- export declare const ServerConfigSchema: z.ZodObject<{
8
- command: z.ZodOptional<z.ZodString>;
9
- args: z.ZodDefault<z.ZodArray<z.ZodString>>;
10
- env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
11
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
12
- enabled: z.ZodDefault<z.ZodBoolean>;
13
- tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
14
- type: z.ZodDefault<z.ZodEnum<{
15
- stdio: "stdio";
16
- sse: "sse";
17
- "streamable-http": "streamable-http";
18
- http: "http";
19
- }>>;
20
- timeout: z.ZodDefault<z.ZodNumber>;
21
- url: z.ZodOptional<z.ZodString>;
22
- allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
23
- description: z.ZodOptional<z.ZodString>;
24
- }, z.core.$strip>;
25
- export declare const ServerInstanceConfigSchema: z.ZodObject<{
26
- id: z.ZodString;
27
- timestamp: z.ZodNumber;
28
- hash: z.ZodString;
29
- pid: z.ZodOptional<z.ZodNumber>;
30
- startTime: z.ZodOptional<z.ZodNumber>;
31
- }, z.core.$strip>;
10
+ export { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema };
11
+ export type { SystemConfig, ServerConfig, ServerTemplate, ServerInstance, ServerInstanceUpdate, TagDefinition, ServerInstanceConfig, ServerRuntimeConfig };
32
12
  /**
33
- * Logging Configuration Schema
13
+ * Simplified type guard - only check for legacy v1.0 format for migration
34
14
  */
35
- export declare const LoggingConfigSchema: z.ZodDefault<z.ZodObject<{
36
- level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
37
- rotationAge: z.ZodDefault<z.ZodString>;
38
- jsonPretty: z.ZodDefault<z.ZodBoolean>;
39
- mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
40
- sessionDebug: z.ZodDefault<z.ZodBoolean>;
41
- }, z.core.$strip>>;
42
- /**
43
- * Security Configuration Schema
44
- */
45
- export declare const SecurityConfigSchema: z.ZodDefault<z.ZodObject<{
46
- allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
47
- maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
48
- connectionTimeout: z.ZodDefault<z.ZodNumber>;
49
- idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
50
- sessionTimeout: z.ZodDefault<z.ZodNumber>;
51
- sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
52
- maxConnections: z.ZodDefault<z.ZodNumber>;
53
- }, z.core.$strip>>;
54
- /**
55
- * System Configuration Schema
56
- */
57
- export declare const SystemConfigSchema: z.ZodObject<{
58
- version: z.ZodDefault<z.ZodString>;
59
- system: z.ZodDefault<z.ZodObject<{
60
- host: z.ZodDefault<z.ZodString>;
61
- port: z.ZodDefault<z.ZodNumber>;
62
- language: z.ZodDefault<z.ZodEnum<{
63
- zh: "zh";
64
- en: "en";
65
- }>>;
66
- theme: z.ZodDefault<z.ZodEnum<{
67
- light: "light";
68
- dark: "dark";
69
- system: "system";
70
- }>>;
71
- logging: z.ZodDefault<z.ZodObject<{
72
- level: z.ZodDefault<z.ZodCustom<LogLevel, LogLevel>>;
73
- rotationAge: z.ZodDefault<z.ZodString>;
74
- jsonPretty: z.ZodDefault<z.ZodBoolean>;
75
- mcpCommDebug: z.ZodDefault<z.ZodBoolean>;
76
- sessionDebug: z.ZodDefault<z.ZodBoolean>;
77
- }, z.core.$strip>>;
78
- }, z.core.$strip>>;
79
- security: z.ZodDefault<z.ZodObject<{
80
- allowedNetworks: z.ZodDefault<z.ZodArray<z.ZodString>>;
81
- maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
82
- connectionTimeout: z.ZodDefault<z.ZodNumber>;
83
- idleConnectionTimeout: z.ZodDefault<z.ZodNumber>;
84
- sessionTimeout: z.ZodDefault<z.ZodNumber>;
85
- sessionFlushInterval: z.ZodDefault<z.ZodNumber>;
86
- maxConnections: z.ZodDefault<z.ZodNumber>;
87
- }, z.core.$strip>>;
88
- servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
89
- command: z.ZodOptional<z.ZodString>;
90
- args: z.ZodDefault<z.ZodArray<z.ZodString>>;
91
- env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
92
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
93
- enabled: z.ZodDefault<z.ZodBoolean>;
94
- tags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
95
- type: z.ZodDefault<z.ZodEnum<{
96
- stdio: "stdio";
97
- sse: "sse";
98
- "streamable-http": "streamable-http";
99
- http: "http";
100
- }>>;
101
- timeout: z.ZodDefault<z.ZodNumber>;
102
- url: z.ZodOptional<z.ZodString>;
103
- allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
104
- description: z.ZodOptional<z.ZodString>;
105
- }, z.core.$strip>>>;
106
- }, z.core.$strip>;
107
- export type SystemConfig = z.infer<typeof SystemConfigSchema>;
108
- export type ServerConfig = z.infer<typeof ServerConfigSchema>;
109
- export type ServerInstanceConfig = z.infer<typeof ServerInstanceConfigSchema>;
15
+ export declare function isLegacyV1Config(config: unknown): boolean;
110
16
  //# sourceMappingURL=config.schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;;GAGG;AAGH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAY7B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;kBAc5B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;kBA0B7B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyB7B,CAAC;AAGH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../../../src/config/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC3B,CAAC;AAEF,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAIzD"}
@@ -1,104 +1,20 @@
1
- import { z } from 'zod';
1
+ import { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema } from '../../shared/models/server.model.js';
2
2
  /**
3
3
  * MCP Server Configuration Schema
4
- * Simplified schema for MCP-HUB-LITE Lite version
4
+ * Simplified v1.1 only - No v1.0 compatibility
5
+ *
6
+ * Note: All core schemas are now defined in @shared-models/server.model.ts
7
+ * This file re-exports them for backward compatibility and retains
8
+ * TransportType constants and legacy helper functions.
5
9
  */
6
- // Server configuration schema (keyed by server name)
7
- export const ServerConfigSchema = z.object({
8
- command: z.string().optional(),
9
- args: z.array(z.string()).default([]),
10
- env: z.record(z.string(), z.string()).optional(),
11
- headers: z.record(z.string(), z.string()).optional(),
12
- enabled: z.boolean().default(true),
13
- tags: z.record(z.string(), z.string()).optional(),
14
- type: z.enum(['stdio', 'sse', 'streamable-http', 'http']).default('stdio'),
15
- timeout: z.number().default(60000),
16
- url: z.string().optional(),
17
- allowedTools: z.array(z.string()).default([]),
18
- description: z.string().optional()
19
- });
20
- // Server instance schema (each instance contains id, timestamp, hash)
21
- export const ServerInstanceConfigSchema = z.object({
22
- id: z.string(),
23
- timestamp: z.number(), // Startup time
24
- hash: z.string(),
25
- pid: z.number().optional(), // Process ID
26
- startTime: z.number().optional() // Startup time (same as timestamp, for compatibility)
27
- });
10
+ // Re-export shared types for backward compatibility
11
+ export { TransportType, TagDefinitionSchema, ServerInstanceSchema, ServerInstanceUpdateSchema, ServerTemplateSchema, ServerConfigSchema, LoggingConfigSchema, SecurityConfigSchema, SystemConfigSchema, ServerInstanceConfigSchema };
28
12
  /**
29
- * Logging Configuration Schema
13
+ * Simplified type guard - only check for legacy v1.0 format for migration
30
14
  */
31
- export const LoggingConfigSchema = z
32
- .object({
33
- level: z.custom().default('info'),
34
- rotationAge: z.string().default('7d'), // e.g., "7d", "30d"
35
- jsonPretty: z.boolean().default(true), // Enable pretty JSON formatting in logs
36
- mcpCommDebug: z.boolean().default(false), // Enable MCP communication debug logging
37
- sessionDebug: z.boolean().default(false) // Enable session debug logging
38
- })
39
- .default({
40
- level: 'info',
41
- rotationAge: '7d',
42
- jsonPretty: true,
43
- mcpCommDebug: false,
44
- sessionDebug: false
45
- });
46
- /**
47
- * Security Configuration Schema
48
- */
49
- export const SecurityConfigSchema = z
50
- .object({
51
- allowedNetworks: z
52
- .array(z.string())
53
- .default(['127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12']),
54
- maxConcurrentConnections: z.number().min(1).max(1000).default(50),
55
- connectionTimeout: z.number().min(1000).default(30000),
56
- idleConnectionTimeout: z.number().min(30000).default(300000),
57
- sessionTimeout: z
58
- .number()
59
- .min(60000)
60
- .default(30 * 60 * 1000), // Default 30 minutes, min 1 minute
61
- sessionFlushInterval: z
62
- .number()
63
- .min(1000)
64
- .default(15 * 60 * 1000), // Default 15 minutes, min 1 second
65
- maxConnections: z.number().min(1).max(1000).default(50)
66
- })
67
- .default({
68
- allowedNetworks: ['127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12'],
69
- maxConcurrentConnections: 50,
70
- connectionTimeout: 30000,
71
- idleConnectionTimeout: 300000,
72
- sessionTimeout: 30 * 60 * 1000,
73
- sessionFlushInterval: 15 * 60 * 1000,
74
- maxConnections: 50
75
- });
76
- /**
77
- * System Configuration Schema
78
- */
79
- export const SystemConfigSchema = z.object({
80
- version: z.string().default('1.0.0'),
81
- system: z
82
- .object({
83
- host: z.string().default('localhost'),
84
- port: z.number().default(7788),
85
- language: z.enum(['zh', 'en']).default('zh'),
86
- theme: z.enum(['light', 'dark', 'system']).default('system'),
87
- logging: LoggingConfigSchema
88
- })
89
- .default({
90
- host: 'localhost',
91
- port: 7788,
92
- language: 'zh',
93
- theme: 'system',
94
- logging: {
95
- level: 'info',
96
- rotationAge: '7d',
97
- jsonPretty: true,
98
- mcpCommDebug: false,
99
- sessionDebug: false
100
- }
101
- }),
102
- security: SecurityConfigSchema,
103
- servers: z.record(z.string(), ServerConfigSchema).default({})
104
- });
15
+ export function isLegacyV1Config(config) {
16
+ if (typeof config !== 'object' || config === null)
17
+ return false;
18
+ const c = config;
19
+ return c.version !== '1.1.0';
20
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Path validation utilities for configuration files.
3
+ * Provides basic path validation to prevent path traversal attacks.
4
+ */
5
+ /**
6
+ * Validates that a path is within an allowed directory.
7
+ *
8
+ * @param configPath - The path to validate
9
+ * @param allowedDirs - Array of allowed parent directories
10
+ * @returns true if path is valid, false otherwise
11
+ */
12
+ export declare function isValidConfigPath(configPath: string, allowedDirs: string[]): boolean;
13
+ /**
14
+ * Ensures a path is absolute and normalized.
15
+ *
16
+ * @param configPath - The path to sanitize
17
+ * @returns Normalized absolute path
18
+ */
19
+ export declare function sanitizeConfigPath(configPath: string): string;
20
+ /**
21
+ * Validates that a filename doesn't contain path traversal characters.
22
+ *
23
+ * @param filename - The filename to validate
24
+ * @returns true if filename is safe, false otherwise
25
+ */
26
+ export declare function isSafeFilename(filename: string): boolean;
27
+ //# sourceMappingURL=path-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-validator.d.ts","sourceRoot":"","sources":["../../../../src/config/path-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAepF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASxD"}