@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
@@ -84,8 +84,8 @@ export const listCommand = new Command('list')
84
84
  Name: server.name,
85
85
  // Now need to display server instance information
86
86
  Instances: server.instances?.length || 0,
87
- Type: server.config.type,
88
- Enabled: server.config.enabled
87
+ Type: server.config.template.type,
88
+ Enabled: server.config.instances.some((i) => i.enabled !== false)
89
89
  })));
90
90
  }
91
91
  process.exit(0);
@@ -0,0 +1,57 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * CLI command for dynamic MCP server tool operations via API.
4
+ *
5
+ * This command provides a simplified CLI interface for interacting with MCP server tools,
6
+ * supporting four actions: list-servers, list-tools, get-tool, and call-tool. It wraps
7
+ * the HTTP API endpoints and requires the MCP Hub Lite server to be running.
8
+ *
9
+ * ## Command Format
10
+ *
11
+ * ```
12
+ * npm run server <serverName> <action> [toolName] [--args <json>] [--tags <json>]
13
+ * ```
14
+ *
15
+ * ## Supported Actions
16
+ *
17
+ * - `list-servers` - List all connected MCP servers
18
+ * - `list-tools` - List all tools from the specified server
19
+ * - `get-tool <toolName>` - Get complete schema for a specific tool
20
+ * - `call-tool <toolName>` - Call a tool on the specified server
21
+ *
22
+ * ## Options
23
+ *
24
+ * - `--args <json>` - JSON string of tool arguments (for call-tool action)
25
+ * - `--tags <json>` - JSON object of instance selection tags (call-tool only, for multi-instance servers)
26
+ *
27
+ * ## Usage Examples
28
+ *
29
+ * ```bash
30
+ * # List all connected servers
31
+ * npm run server mcp-hub-lite list-servers
32
+ *
33
+ * # List all tools from a specific server
34
+ * npm run server mcp-hub-lite list-tools
35
+ *
36
+ * # Get tool schema
37
+ * npm run server mcp-hub-lite get-tool list_tools
38
+ *
39
+ * # Call a tool with arguments
40
+ * npm run server mcp-hub-lite call-tool list_tools --args '{"serverName":"mcp-hub-lite"}'
41
+ *
42
+ * # Call a tool with tags for multi-instance selection
43
+ * npm run server baidu-search call-tool search --args '{"query":"天气"}' --tags '{"env":"prod"}'
44
+ * ```
45
+ *
46
+ * ## Error Handling
47
+ *
48
+ * - Exits with code 1 if the server is not running
49
+ * - Exits with code 1 if action is unknown
50
+ * - Exits with code 1 if toolName is required but not provided
51
+ * - Exits with code 1 if JSON parsing fails for --args or --tags
52
+ * - Exits with code 1 if the underlying API call fails
53
+ *
54
+ * @returns {Command} The configured server command instance for registration with Commander.js
55
+ */
56
+ export declare const serverCommand: Command;
57
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,aAAa,SAkItB,CAAC"}
@@ -0,0 +1,169 @@
1
+ import { Command } from 'commander';
2
+ import { getServerStatus } from '../server.js';
3
+ /**
4
+ * CLI command for dynamic MCP server tool operations via API.
5
+ *
6
+ * This command provides a simplified CLI interface for interacting with MCP server tools,
7
+ * supporting four actions: list-servers, list-tools, get-tool, and call-tool. It wraps
8
+ * the HTTP API endpoints and requires the MCP Hub Lite server to be running.
9
+ *
10
+ * ## Command Format
11
+ *
12
+ * ```
13
+ * npm run server <serverName> <action> [toolName] [--args <json>] [--tags <json>]
14
+ * ```
15
+ *
16
+ * ## Supported Actions
17
+ *
18
+ * - `list-servers` - List all connected MCP servers
19
+ * - `list-tools` - List all tools from the specified server
20
+ * - `get-tool <toolName>` - Get complete schema for a specific tool
21
+ * - `call-tool <toolName>` - Call a tool on the specified server
22
+ *
23
+ * ## Options
24
+ *
25
+ * - `--args <json>` - JSON string of tool arguments (for call-tool action)
26
+ * - `--tags <json>` - JSON object of instance selection tags (call-tool only, for multi-instance servers)
27
+ *
28
+ * ## Usage Examples
29
+ *
30
+ * ```bash
31
+ * # List all connected servers
32
+ * npm run server mcp-hub-lite list-servers
33
+ *
34
+ * # List all tools from a specific server
35
+ * npm run server mcp-hub-lite list-tools
36
+ *
37
+ * # Get tool schema
38
+ * npm run server mcp-hub-lite get-tool list_tools
39
+ *
40
+ * # Call a tool with arguments
41
+ * npm run server mcp-hub-lite call-tool list_tools --args '{"serverName":"mcp-hub-lite"}'
42
+ *
43
+ * # Call a tool with tags for multi-instance selection
44
+ * npm run server baidu-search call-tool search --args '{"query":"天气"}' --tags '{"env":"prod"}'
45
+ * ```
46
+ *
47
+ * ## Error Handling
48
+ *
49
+ * - Exits with code 1 if the server is not running
50
+ * - Exits with code 1 if action is unknown
51
+ * - Exits with code 1 if toolName is required but not provided
52
+ * - Exits with code 1 if JSON parsing fails for --args or --tags
53
+ * - Exits with code 1 if the underlying API call fails
54
+ *
55
+ * @returns {Command} The configured server command instance for registration with Commander.js
56
+ */
57
+ export const serverCommand = new Command('server')
58
+ .description('Manage MCP server tools via API (list-servers, list-tools, get-tool, call-tool)')
59
+ .argument('<serverName>', 'Server name to target (use "mcp-hub-lite" for system tools)')
60
+ .argument('<action>', 'Action: list-servers, list-tools, get-tool, call-tool')
61
+ .argument('[toolName]', 'Tool name (required for get-tool and call-tool actions)')
62
+ .option('--args <json>', 'JSON string of tool arguments (call-tool only)')
63
+ .option('--tags <json>', 'JSON object of instance selection tags (call-tool only, for multi-instance servers)')
64
+ .action(async (serverName, action, toolName, options) => {
65
+ try {
66
+ // Check if server is running and get connection info
67
+ const status = await getServerStatus();
68
+ if (!status.running) {
69
+ console.error('Error: MCP Hub Lite server is not running.');
70
+ console.error('Start the server with: mcp-hub-lite start');
71
+ process.exit(1);
72
+ }
73
+ const baseUrl = `http://${status.host}:${status.port}`;
74
+ switch (action) {
75
+ case 'list-servers': {
76
+ const response = await fetch(`${baseUrl}/web/hub-tools/servers`, {
77
+ headers: { Accept: 'application/json' }
78
+ });
79
+ if (!response.ok) {
80
+ throw new Error(`API error: ${response.status} ${response.statusText}`);
81
+ }
82
+ const result = await response.json();
83
+ console.log(JSON.stringify(result, null, 2));
84
+ break;
85
+ }
86
+ case 'list-tools': {
87
+ const tagsParam = options.tags ? `?tags=${encodeURIComponent(options.tags)}` : '';
88
+ const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools${tagsParam}`, {
89
+ headers: { Accept: 'application/json' }
90
+ });
91
+ if (!response.ok) {
92
+ const error = await response.json().catch(() => ({ message: response.statusText }));
93
+ throw new Error(error.message || `API error: ${response.status}`);
94
+ }
95
+ const result = await response.json();
96
+ console.log(JSON.stringify(result, null, 2));
97
+ break;
98
+ }
99
+ case 'get-tool': {
100
+ if (!toolName) {
101
+ console.error('Error: toolName is required for get-tool action');
102
+ process.exit(1);
103
+ }
104
+ const tagsParam = options.tags ? `?tags=${encodeURIComponent(options.tags)}` : '';
105
+ const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools/${toolName}${tagsParam}`, { headers: { Accept: 'application/json' } });
106
+ if (!response.ok) {
107
+ const error = await response.json().catch(() => ({ message: response.statusText }));
108
+ throw new Error(error.message || `API error: ${response.status}`);
109
+ }
110
+ const result = await response.json();
111
+ console.log(JSON.stringify(result, null, 2));
112
+ break;
113
+ }
114
+ case 'call-tool': {
115
+ if (!toolName) {
116
+ console.error('Error: toolName is required for call-tool action');
117
+ process.exit(1);
118
+ }
119
+ // Parse tool arguments
120
+ let toolArgs = {};
121
+ if (options.args) {
122
+ try {
123
+ toolArgs = JSON.parse(options.args);
124
+ }
125
+ catch {
126
+ console.error('Error: Invalid JSON in --args option');
127
+ process.exit(1);
128
+ }
129
+ }
130
+ // Parse tags for instance selection (call-tool only)
131
+ let requestOptions;
132
+ if (options.tags) {
133
+ try {
134
+ requestOptions = { tags: JSON.parse(options.tags) };
135
+ }
136
+ catch {
137
+ console.error('Error: Invalid JSON in --tags option');
138
+ process.exit(1);
139
+ }
140
+ }
141
+ const response = await fetch(`${baseUrl}/web/hub-tools/servers/${serverName}/tools/${toolName}/call`, {
142
+ method: 'POST',
143
+ headers: {
144
+ 'Content-Type': 'application/json',
145
+ Accept: 'application/json'
146
+ },
147
+ body: JSON.stringify({ toolArgs, requestOptions })
148
+ });
149
+ if (!response.ok) {
150
+ const error = await response.json().catch(() => ({ message: response.statusText }));
151
+ throw new Error(error.message || `API error: ${response.status}`);
152
+ }
153
+ const result = await response.json();
154
+ console.log(JSON.stringify(result, null, 2));
155
+ break;
156
+ }
157
+ default: {
158
+ console.error(`Unknown action: ${action}`);
159
+ console.error('Valid actions: list-servers, list-tools, get-tool, call-tool');
160
+ process.exit(1);
161
+ }
162
+ }
163
+ process.exit(0);
164
+ }
165
+ catch (error) {
166
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
167
+ process.exit(1);
168
+ }
169
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,aAAa,SAYtB,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,aAAa,SAYtB,CAAC"}
@@ -82,38 +82,49 @@ function printFormattedStatus(status) {
82
82
  console.log(`📡 Web UI: ${cyan}${webUiUrl}${reset}`);
83
83
  console.log(`🔗 MCP Endpoint: ${cyan}${mcpEndpoint}${reset}`);
84
84
  console.log(`📄 PID File: ${dim}${formatPath(status.pidFilePath)}${reset}`);
85
- // MCP Servers section
85
+ // MCP Servers section - split into connected and disconnected
86
86
  if (status.mcpServers && status.mcpServers.length > 0) {
87
- console.log('');
88
- console.log(`${yellow}MCP Servers:${reset}`);
89
- console.log(`${dim}═════════════${reset}`);
90
- // Calculate column widths
91
- let maxNameLen = 'Server Name'.length;
92
- let maxTypeLen = 'Type'.length;
93
- const maxStatusLen = 'Disconnected'.length;
94
- for (const server of status.mcpServers) {
95
- maxNameLen = Math.max(maxNameLen, (server.name || '').length);
96
- maxTypeLen = Math.max(maxTypeLen, (server.type || '').length);
97
- }
98
- // Simple table without complex borders
99
- const headerName = 'Server Name'.padEnd(maxNameLen);
100
- const headerType = 'Type'.padEnd(maxTypeLen);
101
- const headerStatus = 'Status'.padEnd(maxStatusLen);
102
- console.log(`${cyan}${headerName} ${headerType} ${headerStatus} Tools Resources${reset}`);
103
- console.log(`${dim}${'─'.repeat(maxNameLen + maxTypeLen + maxStatusLen + 20)}${reset}`);
104
- for (const server of status.mcpServers) {
105
- const name = (server.name || '').padEnd(maxNameLen);
106
- const type = (server.type || '').padEnd(maxTypeLen);
107
- const statusText = server.connected
108
- ? `${green}Connected${reset}`.padEnd(maxStatusLen + 9)
109
- : `${red}Disconnected${reset}`.padEnd(maxStatusLen + 9);
110
- const tools = server.toolsCount.toString().padStart(5);
111
- const resources = server.resourcesCount.toString().padStart(9);
112
- console.log(`${name} ${type} ${statusText} ${tools} ${resources}`);
113
- if (server.error) {
114
- console.log(` ${red}Error: ${server.error}${reset}`);
87
+ const connectedServers = status.mcpServers.filter((s) => s.connected);
88
+ const disconnectedServers = status.mcpServers.filter((s) => !s.connected);
89
+ // Function to display a server list
90
+ const displayServerList = (servers, title, titleColor) => {
91
+ if (servers.length === 0)
92
+ return;
93
+ console.log('');
94
+ console.log(`${titleColor}${title}${reset}`);
95
+ console.log(`${dim}${''.repeat(title.length)}${reset}`);
96
+ // Calculate column widths
97
+ let maxNameLen = 'Server Name'.length;
98
+ let maxTypeLen = 'Type'.length;
99
+ const maxStatusLen = 'Disconnected'.length;
100
+ for (const server of servers) {
101
+ maxNameLen = Math.max(maxNameLen, (server.name || '').length);
102
+ maxTypeLen = Math.max(maxTypeLen, (server.type || '').length);
115
103
  }
116
- }
104
+ // Simple table without complex borders
105
+ const headerName = 'Server Name'.padEnd(maxNameLen);
106
+ const headerType = 'Type'.padEnd(maxTypeLen);
107
+ const headerStatus = 'Status'.padEnd(maxStatusLen);
108
+ console.log(`${cyan}${headerName} ${headerType} ${headerStatus} Tools Resources${reset}`);
109
+ console.log(`${dim}${'─'.repeat(maxNameLen + maxTypeLen + maxStatusLen + 20)}${reset}`);
110
+ for (const server of servers) {
111
+ const name = (server.name || '').padEnd(maxNameLen);
112
+ const type = (server.type || '').padEnd(maxTypeLen);
113
+ const statusText = server.connected
114
+ ? `${green}Connected${reset}`.padEnd(maxStatusLen + 9)
115
+ : `${red}Disconnected${reset}`.padEnd(maxStatusLen + 9);
116
+ const tools = server.toolsCount.toString().padStart(5);
117
+ const resources = server.resourcesCount.toString().padStart(9);
118
+ console.log(`${name} ${type} ${statusText} ${tools} ${resources}`);
119
+ if (server.error) {
120
+ console.log(` ${red}Error: ${server.error}${reset}`);
121
+ }
122
+ }
123
+ };
124
+ // Display connected servers first
125
+ displayServerList(connectedServers, 'MCP Servers (Connected):', green);
126
+ // Then display disconnected servers
127
+ displayServerList(disconnectedServers, 'MCP Servers (Disconnected):', red);
117
128
  }
118
129
  // MCP Client Configuration
119
130
  console.log('');
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAiBnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAiBnC"}
@@ -6,6 +6,7 @@
6
6
  import { Command } from 'commander';
7
7
  import { argv } from 'node:process';
8
8
  import { pathToFileURL } from 'node:url';
9
+ import { getAppVersion } from '../utils/version.js';
9
10
  import { startCommand } from './commands/start.js';
10
11
  import { stopCommand } from './commands/stop.js';
11
12
  import { statusCommand } from './commands/status.js';
@@ -71,7 +72,7 @@ export function createCli() {
71
72
  program
72
73
  .name('mcp-hub-lite')
73
74
  .description('Lightweight MCP Gateway for managing MCP servers')
74
- .version('1.0.0');
75
+ .version(process.env.npm_package_version ?? getAppVersion(), '-v, --version');
75
76
  // Register all core commands
76
77
  program.addCommand(startCommand);
77
78
  program.addCommand(stopCommand);
@@ -159,10 +159,19 @@ export declare function restartServer(options: ServerOptions): Promise<void>;
159
159
  export declare function listServers(): Promise<{
160
160
  instances: {
161
161
  id: string;
162
- timestamp: number;
163
- hash: string;
162
+ enabled: boolean;
163
+ args: string[];
164
+ env: Record<string, string>;
165
+ headers: Record<string, string>;
166
+ tags: Record<string, string>;
167
+ index?: number | undefined;
168
+ displayName?: string | undefined;
169
+ timestamp?: number | undefined;
164
170
  pid?: number | undefined;
165
171
  startTime?: number | undefined;
172
+ proxy?: {
173
+ url: string;
174
+ } | undefined;
166
175
  }[];
167
176
  name: string;
168
177
  config: import("../config/config-manager.js").ServerConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/cli/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,iBAO5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CjF;AAgED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW;;;;;;;;;;KAUhC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/cli/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,iBAO5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0CjF;AAgED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW;;;;;;;;;;;;;;;;;;;KAUhC"}
@@ -3,6 +3,28 @@
3
3
  * Handles comparison and logging of configuration changes.
4
4
  */
5
5
  import type { SystemConfig } from './config.schema.js';
6
+ /**
7
+ * Gets the changes between two objects.
8
+ *
9
+ * This function performs a deep comparison of two objects
10
+ * and returns all changes at the field level.
11
+ *
12
+ * @param oldObj - The original object
13
+ * @param newObj - The new object
14
+ * @returns An array of change strings
15
+ */
16
+ export declare function getObjectChanges(oldObj: unknown, newObj: unknown): string[];
17
+ /**
18
+ * Logs object changes with a custom title.
19
+ *
20
+ * @param title - The title to display before the changes
21
+ * @param oldObj - The original object
22
+ * @param newObj - The new object
23
+ * @param logModule - The log module to use
24
+ */
25
+ export declare function logObjectChangesWithTitle(title: string, oldObj: unknown, newObj: unknown, logModule?: {
26
+ module: string;
27
+ }): void;
6
28
  /**
7
29
  * Logs the differences between two system configurations.
8
30
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config-change-logger.d.ts","sourceRoot":"","sources":["../../../../src/config/config-change-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAoCvF"}
1
+ {"version":3,"file":"config-change-logger.d.ts","sourceRoot":"","sources":["../../../../src/config/config-change-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgGvD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAwC3E;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,OAAO,EACf,SAAS,GAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAA+B,GACzD,IAAI,CAON;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAOvF"}
@@ -4,15 +4,102 @@
4
4
  */
5
5
  import { logger, LOG_MODULES } from '../utils/logger.js';
6
6
  /**
7
- * Logs the differences between two system configurations.
7
+ * Sensitive KEY patterns (case-insensitive).
8
+ * Fields whose key contains any of these patterns will have their values masked.
9
+ */
10
+ const SENSITIVE_KEY_PATTERNS = [
11
+ 'token',
12
+ 'key',
13
+ 'authorization',
14
+ 'secret',
15
+ 'password',
16
+ 'credential'
17
+ ];
18
+ /**
19
+ * Sensitive VALUE patterns.
20
+ * String values containing any of these patterns will be masked.
21
+ */
22
+ const SENSITIVE_VALUE_PATTERNS = ['Bearer', 'sk-', 'sk_', 'api_key', 'apikey'];
23
+ /**
24
+ * Checks if a key looks sensitive based on its name.
8
25
  *
9
- * This function performs a deep comparison of two configuration objects
10
- * and logs all changes at the field level for audit purposes.
26
+ * @param key - The key to check
27
+ * @returns True if the key is sensitive
28
+ */
29
+ function isSensitiveKey(key) {
30
+ const lowerKey = key.toLowerCase();
31
+ return SENSITIVE_KEY_PATTERNS.some((pattern) => lowerKey.includes(pattern));
32
+ }
33
+ /**
34
+ * Checks if a value looks sensitive based on its content.
11
35
  *
12
- * @param oldConfig - The original configuration
13
- * @param newConfig - The new configuration
36
+ * @param value - The value to check
37
+ * @returns True if the value is sensitive
14
38
  */
15
- export function logConfigChanges(oldConfig, newConfig) {
39
+ function isSensitiveValue(value) {
40
+ return SENSITIVE_VALUE_PATTERNS.some((pattern) => value.includes(pattern));
41
+ }
42
+ /**
43
+ * Masks a sensitive value while preserving partial visibility.
44
+ * - For values with length < 8: preserves first and last character
45
+ * - For values with length >= 8: preserves first 4 and last 4 characters
46
+ *
47
+ * @param value - The value to mask
48
+ * @returns The masked value
49
+ */
50
+ function maskSensitiveValue(value) {
51
+ if (value.length < 8) {
52
+ return value[0] + '****' + value[value.length - 1];
53
+ }
54
+ return value.substring(0, 4) + '********' + value.substring(value.length - 4);
55
+ }
56
+ /**
57
+ * Normalizes a URL string by removing trailing slashes.
58
+ *
59
+ * @param url - The URL to normalize
60
+ * @returns Normalized URL
61
+ */
62
+ function normalizeUrl(url) {
63
+ return url.replace(/\/+$/, '');
64
+ }
65
+ /**
66
+ * Checks if a path looks like a URL field.
67
+ *
68
+ * @param path - The field path to check
69
+ * @returns True if the path looks like a URL field
70
+ */
71
+ function isUrlField(path) {
72
+ const urlPatterns = [/\.url$/, /^url$/, /\.proxy\.url$/];
73
+ return urlPatterns.some((pattern) => pattern.test(path));
74
+ }
75
+ /**
76
+ * Compares two values with URL normalization support.
77
+ *
78
+ * @param val1 - First value
79
+ * @param val2 - Second value
80
+ * @param path - The field path for context
81
+ * @returns True if values are considered equal
82
+ */
83
+ function areValuesEqual(val1, val2, path) {
84
+ // Special handling for URL fields
85
+ if (isUrlField(path)) {
86
+ if (typeof val1 === 'string' && typeof val2 === 'string') {
87
+ return normalizeUrl(val1) === normalizeUrl(val2);
88
+ }
89
+ }
90
+ return JSON.stringify(val1) === JSON.stringify(val2);
91
+ }
92
+ /**
93
+ * Gets the changes between two objects.
94
+ *
95
+ * This function performs a deep comparison of two objects
96
+ * and returns all changes at the field level.
97
+ *
98
+ * @param oldObj - The original object
99
+ * @param newObj - The new object
100
+ * @returns An array of change strings
101
+ */
102
+ export function getObjectChanges(oldObj, newObj) {
16
103
  const changes = [];
17
104
  const compare = (obj1, obj2, path) => {
18
105
  const allKeys = new Set([...Object.keys(obj1 || {}), ...Object.keys(obj2 || {})]);
@@ -20,7 +107,7 @@ export function logConfigChanges(oldConfig, newConfig) {
20
107
  const currentPath = path ? `${path}.${key}` : key;
21
108
  const val1 = obj1 && typeof obj1 === 'object' ? obj1[key] : undefined;
22
109
  const val2 = obj2 && typeof obj2 === 'object' ? obj2[key] : undefined;
23
- if (JSON.stringify(val1) === JSON.stringify(val2))
110
+ if (areValuesEqual(val1, val2, currentPath))
24
111
  continue;
25
112
  if (typeof val1 === 'object' &&
26
113
  val1 !== null &&
@@ -31,13 +118,50 @@ export function logConfigChanges(oldConfig, newConfig) {
31
118
  compare(val1, val2, currentPath);
32
119
  }
33
120
  else {
34
- const formatVal = (v) => (v === undefined ? 'undefined' : JSON.stringify(v));
35
- changes.push(`${currentPath} = ${formatVal(val1)} -> ${formatVal(val2)}`);
121
+ const formatVal = (key, v) => {
122
+ if (v === undefined)
123
+ return 'undefined';
124
+ const str = JSON.stringify(v);
125
+ if (typeof v === 'string' && (isSensitiveKey(key) || isSensitiveValue(v))) {
126
+ return `"${maskSensitiveValue(v)}"`;
127
+ }
128
+ return str;
129
+ };
130
+ changes.push(`${currentPath} = ${formatVal(key, val1)} -> ${formatVal(key, val2)}`);
36
131
  }
37
132
  }
38
133
  };
39
- compare(oldConfig, newConfig, '');
134
+ compare(oldObj, newObj, '');
135
+ return changes;
136
+ }
137
+ /**
138
+ * Logs object changes with a custom title.
139
+ *
140
+ * @param title - The title to display before the changes
141
+ * @param oldObj - The original object
142
+ * @param newObj - The new object
143
+ * @param logModule - The log module to use
144
+ */
145
+ export function logObjectChangesWithTitle(title, oldObj, newObj, logModule = LOG_MODULES.CONFIG_CHANGES) {
146
+ const changes = getObjectChanges(oldObj, newObj);
147
+ if (changes.length > 0) {
148
+ const message = `${title}\n${changes.join('\n')}`;
149
+ logger.info(message, logModule);
150
+ }
151
+ }
152
+ /**
153
+ * Logs the differences between two system configurations.
154
+ *
155
+ * This function performs a deep comparison of two configuration objects
156
+ * and logs all changes at the field level for audit purposes.
157
+ *
158
+ * @param oldConfig - The original configuration
159
+ * @param newConfig - The new configuration
160
+ */
161
+ export function logConfigChanges(oldConfig, newConfig) {
162
+ const changes = getObjectChanges(oldConfig, newConfig);
40
163
  if (changes.length > 0) {
41
- logger.info(`${changes.join('\n')}`, LOG_MODULES.CONFIG_CHANGES);
164
+ const message = `System Config Changes:\n${changes.join('\n')}`;
165
+ logger.info(message, LOG_MODULES.CONFIG_CHANGES);
42
166
  }
43
167
  }
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Configuration loading utilities.
2
+ * Configuration loading utilities (v1.1 only).
3
3
  * Handles loading and parsing configuration from files with validation.
4
+ * Supports automatic migration from v1.0 to v1.1.
4
5
  */
5
6
  import type { SystemConfig } from './config.schema.js';
6
7
  /**
@@ -9,14 +10,14 @@ import type { SystemConfig } from './config.schema.js';
9
10
  * This function handles the complete configuration loading process:
10
11
  * - Checks if the config file exists at the specified path
11
12
  * - Reads and parses the JSON configuration
13
+ * - Detects legacy v1.0 configuration and auto-migrates to v1.1
12
14
  * - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
13
15
  * - Validates the configuration using Zod schema
14
16
  * - Handles validation failures gracefully by falling back to default configuration
15
17
  *
16
- * If the config file doesn't exist or fails to load, a default configuration is returned.
17
- *
18
18
  * @param configPath - Path to the configuration file
19
- * @returns The loaded and validated system configuration
19
+ * @param autoMigrate - Whether to automatically migrate v1.0 to v1.1 (default: true)
20
+ * @returns The loaded and validated system configuration (v1.1 format)
20
21
  */
21
- export declare function loadConfig(configPath: string): SystemConfig;
22
+ export declare function loadConfig(configPath: string, autoMigrate?: boolean): SystemConfig;
22
23
  //# sourceMappingURL=config-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CA0C3D"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,YAAY,CAoGxF"}