@loop_ouroboros/mcp-hub-lite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +21 -0
  3. package/README.md +354 -0
  4. package/dist/client/assets/HomeView-f901HeKw.js +1 -0
  5. package/dist/client/assets/ResourceDetailView-BdOaL_-o.css +1 -0
  6. package/dist/client/assets/ResourceDetailView-Bz66ZjfY.js +1 -0
  7. package/dist/client/assets/ResourcesView-CjMklkyv.css +1 -0
  8. package/dist/client/assets/ResourcesView-lI_fItfA.js +1 -0
  9. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +1 -0
  10. package/dist/client/assets/ServerDashboard-Bgx8WVkx.js +2 -0
  11. package/dist/client/assets/ServerListView-Bws09jNR.css +1 -0
  12. package/dist/client/assets/ServerListView-CP6Ffkfx.js +30 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +1 -0
  14. package/dist/client/assets/SessionsView-D68qKR4D.js +1 -0
  15. package/dist/client/assets/SettingsView-BPYfO9BE.js +1 -0
  16. package/dist/client/assets/ToolCallDialog-Br8FNebN.js +1 -0
  17. package/dist/client/assets/ToolCallDialog-C7eh7jHE.css +1 -0
  18. package/dist/client/assets/ToolsView-B6hUiR43.js +1 -0
  19. package/dist/client/assets/ToolsView-BLnU8cV6.css +1 -0
  20. package/dist/client/assets/_baseClone-DCmK847M.js +1 -0
  21. package/dist/client/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  22. package/dist/client/assets/el-form-item-BVMLpmVC.css +1 -0
  23. package/dist/client/assets/el-form-item-DM0q2hmO.js +12 -0
  24. package/dist/client/assets/el-input-BtI9NECe.js +1 -0
  25. package/dist/client/assets/el-input-CmuHb8HS.css +1 -0
  26. package/dist/client/assets/el-loading-CChNmKeI.js +1 -0
  27. package/dist/client/assets/el-loading-bpKhqqQq.css +1 -0
  28. package/dist/client/assets/el-overlay-B2ZKM6Up.css +1 -0
  29. package/dist/client/assets/el-overlay-lZZbPmsX.js +1 -0
  30. package/dist/client/assets/el-select-BXztu2b5.js +1 -0
  31. package/dist/client/assets/el-select-C0U_l4IZ.css +1 -0
  32. package/dist/client/assets/el-tab-pane-CnNoQHsR.css +1 -0
  33. package/dist/client/assets/el-tab-pane-Dy9ruaEX.js +1 -0
  34. package/dist/client/assets/el-table-column-98UyVgBH.js +1 -0
  35. package/dist/client/assets/el-table-column-T_mV9jNw.css +1 -0
  36. package/dist/client/assets/el-tag-B5lLT51E.js +1 -0
  37. package/dist/client/assets/el-tag-DjxZVOpb.css +1 -0
  38. package/dist/client/assets/event-BB_Ol6Sd.js +1 -0
  39. package/dist/client/assets/index-BgKcmWJr.js +1 -0
  40. package/dist/client/assets/index-BsDWtoIl.css +1 -0
  41. package/dist/client/assets/index-BzQXG7no.js +1 -0
  42. package/dist/client/assets/index-CSTs2jYk.js +2 -0
  43. package/dist/client/assets/omit-Bx5HJNV_.js +1 -0
  44. package/dist/client/assets/raf-B9VDMtMF.js +1 -0
  45. package/dist/client/assets/typescript-Bp3YSIOJ.js +1 -0
  46. package/dist/client/assets/vnode-B8aJx8u4.js +1 -0
  47. package/dist/client/assets/vue-vendor-6ny5zj9i.js +3 -0
  48. package/dist/client/index.html +15 -0
  49. package/dist/server/shared/index.d.ts +3 -0
  50. package/dist/server/shared/index.d.ts.map +1 -0
  51. package/dist/server/shared/index.js +2 -0
  52. package/dist/server/shared/models/index.d.ts +4 -0
  53. package/dist/server/shared/models/index.d.ts.map +1 -0
  54. package/dist/server/shared/models/index.js +3 -0
  55. package/dist/server/shared/models/resource.model.d.ts +8 -0
  56. package/dist/server/shared/models/resource.model.d.ts.map +1 -0
  57. package/dist/server/shared/models/resource.model.js +1 -0
  58. package/dist/server/shared/models/server.model.d.ts +57 -0
  59. package/dist/server/shared/models/server.model.d.ts.map +1 -0
  60. package/dist/server/shared/models/server.model.js +1 -0
  61. package/dist/server/shared/models/session.model.d.ts +73 -0
  62. package/dist/server/shared/models/session.model.d.ts.map +1 -0
  63. package/dist/server/shared/models/session.model.js +70 -0
  64. package/dist/server/shared/models/tool.model.d.ts +22 -0
  65. package/dist/server/shared/models/tool.model.d.ts.map +1 -0
  66. package/dist/server/shared/models/tool.model.js +1 -0
  67. package/dist/server/shared/types/client.types.d.ts +35 -0
  68. package/dist/server/shared/types/client.types.d.ts.map +1 -0
  69. package/dist/server/shared/types/client.types.js +5 -0
  70. package/dist/server/shared/types/common.types.d.ts +5 -0
  71. package/dist/server/shared/types/common.types.d.ts.map +1 -0
  72. package/dist/server/shared/types/common.types.js +2 -0
  73. package/dist/server/shared/types/index.d.ts +4 -0
  74. package/dist/server/shared/types/index.d.ts.map +1 -0
  75. package/dist/server/shared/types/index.js +3 -0
  76. package/dist/server/shared/types/session.types.d.ts +15 -0
  77. package/dist/server/shared/types/session.types.d.ts.map +1 -0
  78. package/dist/server/shared/types/session.types.js +5 -0
  79. package/dist/server/shared/types/websocket.types.d.ts +177 -0
  80. package/dist/server/shared/types/websocket.types.d.ts.map +1 -0
  81. package/dist/server/shared/types/websocket.types.js +25 -0
  82. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts +13 -0
  83. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -0
  84. package/dist/server/src/api/mcp/debug-response-wrapper.js +271 -0
  85. package/dist/server/src/api/mcp/gateway.d.ts +14 -0
  86. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -0
  87. package/dist/server/src/api/mcp/gateway.js +116 -0
  88. package/dist/server/src/api/mcp/session-context-extractor.d.ts +47 -0
  89. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -0
  90. package/dist/server/src/api/mcp/session-context-extractor.js +127 -0
  91. package/dist/server/src/api/mcp/sse-stream-manager.d.ts +13 -0
  92. package/dist/server/src/api/mcp/sse-stream-manager.d.ts.map +1 -0
  93. package/dist/server/src/api/mcp/sse-stream-manager.js +40 -0
  94. package/dist/server/src/api/web/clients.d.ts +30 -0
  95. package/dist/server/src/api/web/clients.d.ts.map +1 -0
  96. package/dist/server/src/api/web/clients.js +41 -0
  97. package/dist/server/src/api/web/config.d.ts +21 -0
  98. package/dist/server/src/api/web/config.d.ts.map +1 -0
  99. package/dist/server/src/api/web/config.js +119 -0
  100. package/dist/server/src/api/web/health.d.ts +21 -0
  101. package/dist/server/src/api/web/health.d.ts.map +1 -0
  102. package/dist/server/src/api/web/health.js +24 -0
  103. package/dist/server/src/api/web/hub-tools.d.ts +30 -0
  104. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -0
  105. package/dist/server/src/api/web/hub-tools.js +202 -0
  106. package/dist/server/src/api/web/logs.d.ts +30 -0
  107. package/dist/server/src/api/web/logs.d.ts.map +1 -0
  108. package/dist/server/src/api/web/logs.js +141 -0
  109. package/dist/server/src/api/web/mcp-status.d.ts +29 -0
  110. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -0
  111. package/dist/server/src/api/web/mcp-status.js +126 -0
  112. package/dist/server/src/api/web/resources.d.ts +28 -0
  113. package/dist/server/src/api/web/resources.d.ts.map +1 -0
  114. package/dist/server/src/api/web/resources.js +93 -0
  115. package/dist/server/src/api/web/search.d.ts +26 -0
  116. package/dist/server/src/api/web/search.d.ts.map +1 -0
  117. package/dist/server/src/api/web/search.js +62 -0
  118. package/dist/server/src/api/web/servers.d.ts +33 -0
  119. package/dist/server/src/api/web/servers.d.ts.map +1 -0
  120. package/dist/server/src/api/web/servers.js +235 -0
  121. package/dist/server/src/api/web/sessions.d.ts +29 -0
  122. package/dist/server/src/api/web/sessions.d.ts.map +1 -0
  123. package/dist/server/src/api/web/sessions.js +104 -0
  124. package/dist/server/src/api/ws/events.d.ts +29 -0
  125. package/dist/server/src/api/ws/events.d.ts.map +1 -0
  126. package/dist/server/src/api/ws/events.js +44 -0
  127. package/dist/server/src/api/ws/ws-handler.d.ts +83 -0
  128. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -0
  129. package/dist/server/src/api/ws/ws-handler.js +217 -0
  130. package/dist/server/src/app.d.ts +24 -0
  131. package/dist/server/src/app.d.ts.map +1 -0
  132. package/dist/server/src/app.js +108 -0
  133. package/dist/server/src/cli/commands/list.d.ts +71 -0
  134. package/dist/server/src/cli/commands/list.d.ts.map +1 -0
  135. package/dist/server/src/cli/commands/list.js +97 -0
  136. package/dist/server/src/cli/commands/restart.d.ts +42 -0
  137. package/dist/server/src/cli/commands/restart.d.ts.map +1 -0
  138. package/dist/server/src/cli/commands/restart.js +61 -0
  139. package/dist/server/src/cli/commands/start.d.ts +43 -0
  140. package/dist/server/src/cli/commands/start.d.ts.map +1 -0
  141. package/dist/server/src/cli/commands/start.js +160 -0
  142. package/dist/server/src/cli/commands/status.d.ts +39 -0
  143. package/dist/server/src/cli/commands/status.d.ts.map +1 -0
  144. package/dist/server/src/cli/commands/status.js +164 -0
  145. package/dist/server/src/cli/commands/stop.d.ts +34 -0
  146. package/dist/server/src/cli/commands/stop.d.ts.map +1 -0
  147. package/dist/server/src/cli/commands/stop.js +47 -0
  148. package/dist/server/src/cli/commands/ui.d.ts +44 -0
  149. package/dist/server/src/cli/commands/ui.d.ts.map +1 -0
  150. package/dist/server/src/cli/commands/ui.js +95 -0
  151. package/dist/server/src/cli/index.d.ts +62 -0
  152. package/dist/server/src/cli/index.d.ts.map +1 -0
  153. package/dist/server/src/cli/index.js +88 -0
  154. package/dist/server/src/cli/parse-args.d.ts +108 -0
  155. package/dist/server/src/cli/parse-args.d.ts.map +1 -0
  156. package/dist/server/src/cli/parse-args.js +131 -0
  157. package/dist/server/src/cli/server.d.ts +171 -0
  158. package/dist/server/src/cli/server.d.ts.map +1 -0
  159. package/dist/server/src/cli/server.js +246 -0
  160. package/dist/server/src/config/config-change-logger.d.ts +16 -0
  161. package/dist/server/src/config/config-change-logger.d.ts.map +1 -0
  162. package/dist/server/src/config/config-change-logger.js +43 -0
  163. package/dist/server/src/config/config-loader.d.ts +22 -0
  164. package/dist/server/src/config/config-loader.d.ts.map +1 -0
  165. package/dist/server/src/config/config-loader.js +66 -0
  166. package/dist/server/src/config/config-manager.d.ts +158 -0
  167. package/dist/server/src/config/config-manager.d.ts.map +1 -0
  168. package/dist/server/src/config/config-manager.js +246 -0
  169. package/dist/server/src/config/config-saver.d.ts +16 -0
  170. package/dist/server/src/config/config-saver.d.ts.map +1 -0
  171. package/dist/server/src/config/config-saver.js +28 -0
  172. package/dist/server/src/config/config.schema.d.ts +108 -0
  173. package/dist/server/src/config/config.schema.d.ts.map +1 -0
  174. package/dist/server/src/config/config.schema.js +103 -0
  175. package/dist/server/src/config/server-config-manager.d.ts +74 -0
  176. package/dist/server/src/config/server-config-manager.d.ts.map +1 -0
  177. package/dist/server/src/config/server-config-manager.js +157 -0
  178. package/dist/server/src/config/type-converter.d.ts +13 -0
  179. package/dist/server/src/config/type-converter.d.ts.map +1 -0
  180. package/dist/server/src/config/type-converter.js +37 -0
  181. package/dist/server/src/index.d.ts +3 -0
  182. package/dist/server/src/index.d.ts.map +1 -0
  183. package/dist/server/src/index.js +352 -0
  184. package/dist/server/src/models/event.model.d.ts +106 -0
  185. package/dist/server/src/models/event.model.d.ts.map +1 -0
  186. package/dist/server/src/models/event.model.js +5 -0
  187. package/dist/server/src/models/server.model.d.ts +19 -0
  188. package/dist/server/src/models/server.model.d.ts.map +1 -0
  189. package/dist/server/src/models/server.model.js +1 -0
  190. package/dist/server/src/models/system-tools.constants.d.ts +73 -0
  191. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -0
  192. package/dist/server/src/models/system-tools.constants.js +31 -0
  193. package/dist/server/src/models/types.d.ts +84 -0
  194. package/dist/server/src/models/types.d.ts.map +1 -0
  195. package/dist/server/src/models/types.js +67 -0
  196. package/dist/server/src/pid/file.d.ts +26 -0
  197. package/dist/server/src/pid/file.d.ts.map +1 -0
  198. package/dist/server/src/pid/file.js +68 -0
  199. package/dist/server/src/pid/manager.d.ts +98 -0
  200. package/dist/server/src/pid/manager.d.ts.map +1 -0
  201. package/dist/server/src/pid/manager.js +158 -0
  202. package/dist/server/src/pid/types.d.ts +13 -0
  203. package/dist/server/src/pid/types.d.ts.map +1 -0
  204. package/dist/server/src/pid/types.js +4 -0
  205. package/dist/server/src/server/dev-server.d.ts +2 -0
  206. package/dist/server/src/server/dev-server.d.ts.map +1 -0
  207. package/dist/server/src/server/dev-server.js +171 -0
  208. package/dist/server/src/server/runner.d.ts +57 -0
  209. package/dist/server/src/server/runner.d.ts.map +1 -0
  210. package/dist/server/src/server/runner.js +163 -0
  211. package/dist/server/src/services/client-tracker.service.d.ts +132 -0
  212. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/client-tracker.service.js +203 -0
  214. package/dist/server/src/services/connection/connection-manager.d.ts +478 -0
  215. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -0
  216. package/dist/server/src/services/connection/connection-manager.js +929 -0
  217. package/dist/server/src/services/connection/index.d.ts +6 -0
  218. package/dist/server/src/services/connection/index.d.ts.map +1 -0
  219. package/dist/server/src/services/connection/index.js +4 -0
  220. package/dist/server/src/services/connection/tool-cache.d.ts +122 -0
  221. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -0
  222. package/dist/server/src/services/connection/tool-cache.js +202 -0
  223. package/dist/server/src/services/connection/types.d.ts +30 -0
  224. package/dist/server/src/services/connection/types.d.ts.map +1 -0
  225. package/dist/server/src/services/connection/types.js +1 -0
  226. package/dist/server/src/services/event-bus.service.d.ts +169 -0
  227. package/dist/server/src/services/event-bus.service.d.ts.map +1 -0
  228. package/dist/server/src/services/event-bus.service.js +200 -0
  229. package/dist/server/src/services/gateway/gateway.service.d.ts +61 -0
  230. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -0
  231. package/dist/server/src/services/gateway/gateway.service.js +107 -0
  232. package/dist/server/src/services/gateway/index.d.ts +8 -0
  233. package/dist/server/src/services/gateway/index.d.ts.map +1 -0
  234. package/dist/server/src/services/gateway/index.js +6 -0
  235. package/dist/server/src/services/gateway/log-formatter.d.ts +26 -0
  236. package/dist/server/src/services/gateway/log-formatter.d.ts.map +1 -0
  237. package/dist/server/src/services/gateway/log-formatter.js +66 -0
  238. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts +13 -0
  239. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -0
  240. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +131 -0
  241. package/dist/server/src/services/gateway/request-handlers/index.d.ts +9 -0
  242. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -0
  243. package/dist/server/src/services/gateway/request-handlers/index.js +8 -0
  244. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +11 -0
  245. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -0
  246. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +85 -0
  247. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts +11 -0
  248. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -0
  249. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +56 -0
  250. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts +11 -0
  251. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -0
  252. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +228 -0
  253. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts +11 -0
  254. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -0
  255. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +79 -0
  256. package/dist/server/src/services/gateway/tool-list-generator.d.ts +23 -0
  257. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -0
  258. package/dist/server/src/services/gateway/tool-list-generator.js +115 -0
  259. package/dist/server/src/services/gateway/types.d.ts +27 -0
  260. package/dist/server/src/services/gateway/types.d.ts.map +1 -0
  261. package/dist/server/src/services/gateway/types.js +4 -0
  262. package/dist/server/src/services/gateway.service.d.ts +7 -0
  263. package/dist/server/src/services/gateway.service.d.ts.map +1 -0
  264. package/dist/server/src/services/gateway.service.js +6 -0
  265. package/dist/server/src/services/hub-manager.service.d.ts +299 -0
  266. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -0
  267. package/dist/server/src/services/hub-manager.service.js +413 -0
  268. package/dist/server/src/services/hub-tools/index.d.ts +10 -0
  269. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -0
  270. package/dist/server/src/services/hub-tools/index.js +6 -0
  271. package/dist/server/src/services/hub-tools/resource-generator.d.ts +63 -0
  272. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -0
  273. package/dist/server/src/services/hub-tools/resource-generator.js +141 -0
  274. package/dist/server/src/services/hub-tools/server-selector.d.ts +63 -0
  275. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -0
  276. package/dist/server/src/services/hub-tools/server-selector.js +108 -0
  277. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +47 -0
  278. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -0
  279. package/dist/server/src/services/hub-tools/system-tool-definitions.js +225 -0
  280. package/dist/server/src/services/hub-tools/tool-search.d.ts +85 -0
  281. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -0
  282. package/dist/server/src/services/hub-tools/tool-search.js +115 -0
  283. package/dist/server/src/services/hub-tools/types.d.ts +42 -0
  284. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -0
  285. package/dist/server/src/services/hub-tools/types.js +1 -0
  286. package/dist/server/src/services/hub-tools.service.d.ts +235 -0
  287. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -0
  288. package/dist/server/src/services/hub-tools.service.js +457 -0
  289. package/dist/server/src/services/log-storage.service.d.ts +177 -0
  290. package/dist/server/src/services/log-storage.service.d.ts.map +1 -0
  291. package/dist/server/src/services/log-storage.service.js +243 -0
  292. package/dist/server/src/services/mcp-connection-manager.d.ts +7 -0
  293. package/dist/server/src/services/mcp-connection-manager.d.ts.map +1 -0
  294. package/dist/server/src/services/mcp-connection-manager.js +6 -0
  295. package/dist/server/src/services/mcp-session-manager.d.ts +6 -0
  296. package/dist/server/src/services/mcp-session-manager.d.ts.map +1 -0
  297. package/dist/server/src/services/mcp-session-manager.js +4 -0
  298. package/dist/server/src/services/search/index.d.ts +5 -0
  299. package/dist/server/src/services/search/index.d.ts.map +1 -0
  300. package/dist/server/src/services/search/index.js +5 -0
  301. package/dist/server/src/services/search/search-cache.d.ts +132 -0
  302. package/dist/server/src/services/search/search-cache.d.ts.map +1 -0
  303. package/dist/server/src/services/search/search-cache.js +151 -0
  304. package/dist/server/src/services/search/search-core.service.d.ts +108 -0
  305. package/dist/server/src/services/search/search-core.service.d.ts.map +1 -0
  306. package/dist/server/src/services/search/search-core.service.js +187 -0
  307. package/dist/server/src/services/search/search-scorer.d.ts +54 -0
  308. package/dist/server/src/services/search/search-scorer.d.ts.map +1 -0
  309. package/dist/server/src/services/search/search-scorer.js +83 -0
  310. package/dist/server/src/services/search/types.d.ts +20 -0
  311. package/dist/server/src/services/search/types.d.ts.map +1 -0
  312. package/dist/server/src/services/search/types.js +1 -0
  313. package/dist/server/src/services/session/index.d.ts +6 -0
  314. package/dist/server/src/services/session/index.d.ts.map +1 -0
  315. package/dist/server/src/services/session/index.js +4 -0
  316. package/dist/server/src/services/session/session-manager.d.ts +352 -0
  317. package/dist/server/src/services/session/session-manager.d.ts.map +1 -0
  318. package/dist/server/src/services/session/session-manager.js +835 -0
  319. package/dist/server/src/services/session/types.d.ts +32 -0
  320. package/dist/server/src/services/session/types.d.ts.map +1 -0
  321. package/dist/server/src/services/session/types.js +1 -0
  322. package/dist/server/src/services/simple-search.service.d.ts +67 -0
  323. package/dist/server/src/services/simple-search.service.d.ts.map +1 -0
  324. package/dist/server/src/services/simple-search.service.js +82 -0
  325. package/dist/server/src/services/system-tool-handler.d.ts +10 -0
  326. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -0
  327. package/dist/server/src/services/system-tool-handler.js +77 -0
  328. package/dist/server/src/utils/error-handler.d.ts +18 -0
  329. package/dist/server/src/utils/error-handler.d.ts.map +1 -0
  330. package/dist/server/src/utils/error-handler.js +59 -0
  331. package/dist/server/src/utils/format-utils.d.ts +23 -0
  332. package/dist/server/src/utils/format-utils.d.ts.map +1 -0
  333. package/dist/server/src/utils/format-utils.js +58 -0
  334. package/dist/server/src/utils/index.d.ts +2 -0
  335. package/dist/server/src/utils/index.d.ts.map +1 -0
  336. package/dist/server/src/utils/index.js +1 -0
  337. package/dist/server/src/utils/json-utils.d.ts +82 -0
  338. package/dist/server/src/utils/json-utils.d.ts.map +1 -0
  339. package/dist/server/src/utils/json-utils.js +204 -0
  340. package/dist/server/src/utils/log-rotator.d.ts +223 -0
  341. package/dist/server/src/utils/log-rotator.d.ts.map +1 -0
  342. package/dist/server/src/utils/log-rotator.js +306 -0
  343. package/dist/server/src/utils/logger/dev-logger.d.ts +39 -0
  344. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -0
  345. package/dist/server/src/utils/logger/dev-logger.js +63 -0
  346. package/dist/server/src/utils/logger/index.d.ts +36 -0
  347. package/dist/server/src/utils/logger/index.d.ts.map +1 -0
  348. package/dist/server/src/utils/logger/index.js +46 -0
  349. package/dist/server/src/utils/logger/log-colors.d.ts +27 -0
  350. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -0
  351. package/dist/server/src/utils/logger/log-colors.js +41 -0
  352. package/dist/server/src/utils/logger/log-context.d.ts +13 -0
  353. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -0
  354. package/dist/server/src/utils/logger/log-context.js +5 -0
  355. package/dist/server/src/utils/logger/log-formatter.d.ts +47 -0
  356. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -0
  357. package/dist/server/src/utils/logger/log-formatter.js +150 -0
  358. package/dist/server/src/utils/logger/log-modules.d.ts +141 -0
  359. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -0
  360. package/dist/server/src/utils/logger/log-modules.js +81 -0
  361. package/dist/server/src/utils/logger/log-output.d.ts +68 -0
  362. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -0
  363. package/dist/server/src/utils/logger/log-output.js +320 -0
  364. package/dist/server/src/utils/logger/logger.d.ts +190 -0
  365. package/dist/server/src/utils/logger/logger.d.ts.map +1 -0
  366. package/dist/server/src/utils/logger/logger.js +350 -0
  367. package/dist/server/src/utils/logger.d.ts +12 -0
  368. package/dist/server/src/utils/logger.d.ts.map +1 -0
  369. package/dist/server/src/utils/logger.js +12 -0
  370. package/dist/server/src/utils/mcp-error-handler.d.ts +162 -0
  371. package/dist/server/src/utils/mcp-error-handler.d.ts.map +1 -0
  372. package/dist/server/src/utils/mcp-error-handler.js +270 -0
  373. package/dist/server/src/utils/port-checker.d.ts +16 -0
  374. package/dist/server/src/utils/port-checker.d.ts.map +1 -0
  375. package/dist/server/src/utils/port-checker.js +242 -0
  376. package/dist/server/src/utils/request-context.d.ts +71 -0
  377. package/dist/server/src/utils/request-context.d.ts.map +1 -0
  378. package/dist/server/src/utils/request-context.js +73 -0
  379. package/dist/server/src/utils/tool-args-parser.d.ts +17 -0
  380. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -0
  381. package/dist/server/src/utils/tool-args-parser.js +34 -0
  382. package/dist/server/src/utils/transports/sse-transport.d.ts +104 -0
  383. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -0
  384. package/dist/server/src/utils/transports/sse-transport.js +189 -0
  385. package/dist/server/src/utils/transports/stdio-transport.d.ts +122 -0
  386. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -0
  387. package/dist/server/src/utils/transports/stdio-transport.js +324 -0
  388. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +146 -0
  389. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -0
  390. package/dist/server/src/utils/transports/streamable-http-transport.js +212 -0
  391. package/dist/server/src/utils/transports/transport-factory.d.ts +26 -0
  392. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -0
  393. package/dist/server/src/utils/transports/transport-factory.js +104 -0
  394. package/dist/server/src/utils/transports/transport.interface.d.ts +35 -0
  395. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -0
  396. package/dist/server/src/utils/transports/transport.interface.js +1 -0
  397. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts +2 -0
  398. package/dist/server/tests/contract/mcp-protocol/initialize.test.d.ts.map +1 -0
  399. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +103 -0
  400. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts +2 -0
  401. package/dist/server/tests/contract/mcp-protocol/tools-call.test.d.ts.map +1 -0
  402. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +181 -0
  403. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts +2 -0
  404. package/dist/server/tests/contract/mcp-protocol/tools-list.test.d.ts.map +1 -0
  405. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +155 -0
  406. package/dist/server/tests/evaluation/evaluation.test.d.ts +2 -0
  407. package/dist/server/tests/evaluation/evaluation.test.d.ts.map +1 -0
  408. package/dist/server/tests/evaluation/evaluation.test.js +102 -0
  409. package/dist/server/tests/helpers/sdk-test-helpers.d.ts +32 -0
  410. package/dist/server/tests/helpers/sdk-test-helpers.d.ts.map +1 -0
  411. package/dist/server/tests/helpers/sdk-test-helpers.js +82 -0
  412. package/dist/server/tests/integration/api/gateway.test.d.ts +2 -0
  413. package/dist/server/tests/integration/api/gateway.test.d.ts.map +1 -0
  414. package/dist/server/tests/integration/api/gateway.test.js +366 -0
  415. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts +2 -0
  416. package/dist/server/tests/integration/gateway/fault-tolerance.test.d.ts.map +1 -0
  417. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +109 -0
  418. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts +2 -0
  419. package/dist/server/tests/integration/gateway/mcp-connection.test.d.ts.map +1 -0
  420. package/dist/server/tests/integration/gateway/mcp-connection.test.js +149 -0
  421. package/dist/server/tests/server.test.d.ts +2 -0
  422. package/dist/server/tests/server.test.d.ts.map +1 -0
  423. package/dist/server/tests/server.test.js +95 -0
  424. package/dist/server/tests/setup.d.ts +7 -0
  425. package/dist/server/tests/setup.d.ts.map +1 -0
  426. package/dist/server/tests/setup.js +53 -0
  427. package/dist/server/tests/types/logger-test-helpers.d.ts +17 -0
  428. package/dist/server/tests/types/logger-test-helpers.d.ts.map +1 -0
  429. package/dist/server/tests/types/logger-test-helpers.js +4 -0
  430. package/dist/server/tests/types/test-helpers.d.ts +27 -0
  431. package/dist/server/tests/types/test-helpers.d.ts.map +1 -0
  432. package/dist/server/tests/types/test-helpers.js +4 -0
  433. package/dist/server/tests/unit/cli/basic-cli.test.d.ts +2 -0
  434. package/dist/server/tests/unit/cli/basic-cli.test.d.ts.map +1 -0
  435. package/dist/server/tests/unit/cli/basic-cli.test.js +33 -0
  436. package/dist/server/tests/unit/cli/cli.test.d.ts +2 -0
  437. package/dist/server/tests/unit/cli/cli.test.d.ts.map +1 -0
  438. package/dist/server/tests/unit/cli/cli.test.js +17 -0
  439. package/dist/server/tests/unit/cli/commands.test.d.ts +2 -0
  440. package/dist/server/tests/unit/cli/commands.test.d.ts.map +1 -0
  441. package/dist/server/tests/unit/cli/commands.test.js +75 -0
  442. package/dist/server/tests/unit/cli/server.test.d.ts +2 -0
  443. package/dist/server/tests/unit/cli/server.test.d.ts.map +1 -0
  444. package/dist/server/tests/unit/cli/server.test.js +68 -0
  445. package/dist/server/tests/unit/server/runner.test.d.ts +2 -0
  446. package/dist/server/tests/unit/server/runner.test.d.ts.map +1 -0
  447. package/dist/server/tests/unit/server/runner.test.js +488 -0
  448. package/dist/server/tests/unit/server/setup.d.ts +2 -0
  449. package/dist/server/tests/unit/server/setup.d.ts.map +1 -0
  450. package/dist/server/tests/unit/server/setup.js +21 -0
  451. package/dist/server/tests/unit/services/gateway-logging.test.d.ts +2 -0
  452. package/dist/server/tests/unit/services/gateway-logging.test.d.ts.map +1 -0
  453. package/dist/server/tests/unit/services/gateway-logging.test.js +47 -0
  454. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts +2 -0
  455. package/dist/server/tests/unit/services/hub-manager-service.test.d.ts.map +1 -0
  456. package/dist/server/tests/unit/services/hub-manager-service.test.js +140 -0
  457. package/dist/server/tests/unit/services/hub-manager.test.d.ts +2 -0
  458. package/dist/server/tests/unit/services/hub-manager.test.d.ts.map +1 -0
  459. package/dist/server/tests/unit/services/hub-manager.test.js +98 -0
  460. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts +2 -0
  461. package/dist/server/tests/unit/services/hub-tools.service.test.d.ts.map +1 -0
  462. package/dist/server/tests/unit/services/hub-tools.service.test.js +674 -0
  463. package/dist/server/tests/unit/services/search/search-cache.test.d.ts +2 -0
  464. package/dist/server/tests/unit/services/search/search-cache.test.d.ts.map +1 -0
  465. package/dist/server/tests/unit/services/search/search-cache.test.js +58 -0
  466. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts +2 -0
  467. package/dist/server/tests/unit/services/search/search-core.service.test.d.ts.map +1 -0
  468. package/dist/server/tests/unit/services/search/search-core.service.test.js +84 -0
  469. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts +2 -0
  470. package/dist/server/tests/unit/services/search/search-scorer.test.d.ts.map +1 -0
  471. package/dist/server/tests/unit/services/search/search-scorer.test.js +97 -0
  472. package/dist/server/tests/unit/services/session-manager.test.d.ts +2 -0
  473. package/dist/server/tests/unit/services/session-manager.test.d.ts.map +1 -0
  474. package/dist/server/tests/unit/services/session-manager.test.js +481 -0
  475. package/dist/server/tests/unit/utils/config.test.d.ts +2 -0
  476. package/dist/server/tests/unit/utils/config.test.d.ts.map +1 -0
  477. package/dist/server/tests/unit/utils/config.test.js +634 -0
  478. package/dist/server/tests/unit/utils/json-utils.test.d.ts +2 -0
  479. package/dist/server/tests/unit/utils/json-utils.test.d.ts.map +1 -0
  480. package/dist/server/tests/unit/utils/json-utils.test.js +296 -0
  481. package/dist/server/tests/unit/utils/log-rotator.test.d.ts +2 -0
  482. package/dist/server/tests/unit/utils/log-rotator.test.d.ts.map +1 -0
  483. package/dist/server/tests/unit/utils/log-rotator.test.js +296 -0
  484. package/dist/server/tests/unit/utils/logger.test.d.ts +2 -0
  485. package/dist/server/tests/unit/utils/logger.test.d.ts.map +1 -0
  486. package/dist/server/tests/unit/utils/logger.test.js +462 -0
  487. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts +2 -0
  488. package/dist/server/tests/unit/utils/mcp-error-handler.test.d.ts.map +1 -0
  489. package/dist/server/tests/unit/utils/mcp-error-handler.test.js +163 -0
  490. package/dist/server/tests/unit/utils/request-context.test.d.ts +2 -0
  491. package/dist/server/tests/unit/utils/request-context.test.d.ts.map +1 -0
  492. package/dist/server/tests/unit/utils/request-context.test.js +82 -0
  493. package/dist/server/vite.config.d.ts +3 -0
  494. package/dist/server/vite.config.d.ts.map +1 -0
  495. package/dist/server/vite.config.js +160 -0
  496. package/dist/server/vitest.config.d.ts +3 -0
  497. package/dist/server/vitest.config.d.ts.map +1 -0
  498. package/dist/server/vitest.config.js +53 -0
  499. package/package.json +113 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * CLI argument parsing utility
3
+ * Provides parameter validation and parsing functions
4
+ */
5
+ /**
6
+ * Parses and validates a port number from a string input.
7
+ *
8
+ * This function converts a string representation of a port number to an integer
9
+ * and validates that it falls within the valid TCP/UDP port range (1-65535).
10
+ * It is primarily used for CLI argument parsing when users specify custom ports
11
+ * via command line options like `--port` or `-p`.
12
+ *
13
+ * @param value - The string representation of the port number to parse
14
+ * @returns The validated port number as an integer
15
+ * @throws {Error} If the input is not a valid number or outside the valid port range (1-65535)
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const port = parsePort("8080"); // Returns 8080
20
+ * const invalidPort = parsePort("99999"); // Throws Error: Invalid port: 99999. Must be between 1 and 65535.
21
+ * ```
22
+ */
23
+ export function parsePort(value) {
24
+ const port = parseInt(value, 10);
25
+ if (isNaN(port) || port < 1 || port > 65535) {
26
+ throw new Error(`Invalid port: ${value}. Must be between 1 and 65535.`);
27
+ }
28
+ return port;
29
+ }
30
+ /**
31
+ * Parses and validates a hostname or IP address from a string input.
32
+ *
33
+ * This function performs basic validation on hostname/IP address inputs by ensuring
34
+ * the value is not empty or whitespace-only. It trims any leading/trailing whitespace
35
+ * from the input and returns the cleaned hostname. This function is used when parsing
36
+ * CLI arguments for host configuration via options like `--host` or `-h`.
37
+ *
38
+ * Note: This function performs only basic validation (non-empty check). More complex
39
+ * hostname format validation (e.g., DNS compliance, IP address format) should be
40
+ * handled at the network layer or by the underlying server implementation.
41
+ *
42
+ * @param value - The hostname or IP address string to parse and validate
43
+ * @returns The trimmed hostname/IP address string
44
+ * @throws {Error} If the input is null, undefined, or contains only whitespace
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const host = parseHost("localhost"); // Returns "localhost"
49
+ * const hostWithSpaces = parseHost(" 127.0.0.1 "); // Returns "127.0.0.1"
50
+ * const emptyHost = parseHost(""); // Throws Error: Host cannot be empty
51
+ * ```
52
+ */
53
+ export function parseHost(value) {
54
+ // Simple hostname format validation
55
+ if (!value || value.trim().length === 0) {
56
+ throw new Error('Host cannot be empty');
57
+ }
58
+ return value.trim();
59
+ }
60
+ /**
61
+ * Validates a configuration file path to ensure it points to a valid JSON file.
62
+ *
63
+ * This function checks that the provided file path ends with the `.json` extension,
64
+ * ensuring that only JSON configuration files are accepted. It is used during CLI
65
+ * argument parsing when users specify custom configuration files via the `--config`
66
+ * option. The function does not verify file existence or accessibility, as those
67
+ * checks should be performed by the file system operations that actually read the file.
68
+ *
69
+ * @param path - The file path to validate as a configuration file path
70
+ * @returns The original path string if validation passes
71
+ * @throws {Error} If the path does not end with the '.json' extension
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const validPath = validateConfigPath("./config.json"); // Returns "./config.json"
76
+ * const invalidPath = validateConfigPath("./config.txt"); // Throws Error: Config file must be a .json file
77
+ * ```
78
+ */
79
+ export function validateConfigPath(path) {
80
+ if (!path.endsWith('.json')) {
81
+ throw new Error('Config file must be a .json file');
82
+ }
83
+ return path;
84
+ }
85
+ /**
86
+ * Validate log level
87
+ */
88
+ export function validateLogLevel(level) {
89
+ const validLevels = ['error', 'warn', 'info', 'debug'];
90
+ const lowerLevel = level.toLowerCase();
91
+ if (!validLevels.includes(lowerLevel)) {
92
+ throw new Error(`Invalid log level: ${level}. Must be one of: ${validLevels.join(', ')}`);
93
+ }
94
+ return lowerLevel;
95
+ }
96
+ /**
97
+ * Merges CLI options with default values to create a complete configuration object.
98
+ *
99
+ * This function takes partial CLI options (which may contain only some of the available
100
+ * options) and merges them with a complete set of default values. It uses nullish coalescing
101
+ * (??) to ensure that only undefined or null values are replaced with defaults, preserving
102
+ * explicitly set falsy values like `false` for boolean options.
103
+ *
104
+ * The function handles all standard CLI options including:
105
+ * - port: TCP port number for the server
106
+ * - host: Hostname or IP address to bind to
107
+ * - config: Path to configuration file
108
+ * - foreground: Whether to run in foreground mode
109
+ * - stdio: Whether to use stdio transport mode
110
+ *
111
+ * @param options - Partial CLI options object containing user-specified values
112
+ * @param defaults - Complete CLI options object containing default values
113
+ * @returns {CliOptions} A complete CLI options object with merged values
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * const userOptions = { port: 8080 };
118
+ * const defaultOptions = { port: 7788, host: 'localhost', config: '.mcp-hub.json', foreground: false, stdio: false };
119
+ * const merged = mergeOptions(userOptions, defaultOptions);
120
+ * // Result: { port: 8080, host: 'localhost', config: '.mcp-hub.json', foreground: false, stdio: false }
121
+ * ```
122
+ */
123
+ export function mergeOptions(options, defaults) {
124
+ return {
125
+ port: options.port ?? defaults.port,
126
+ host: options.host ?? defaults.host,
127
+ config: options.config ?? defaults.config,
128
+ foreground: options.foreground ?? defaults.foreground,
129
+ stdio: options.stdio ?? defaults.stdio
130
+ };
131
+ }
@@ -0,0 +1,171 @@
1
+ /**
2
+ * CLI Server Management Functions
3
+ * Handles start, stop, status, restart operations
4
+ */
5
+ interface ServerOptions {
6
+ port: number;
7
+ host: string;
8
+ configPath?: string;
9
+ }
10
+ interface McpServerStatus {
11
+ name: string;
12
+ type: string;
13
+ connected: boolean;
14
+ toolsCount: number;
15
+ resourcesCount: number;
16
+ error?: string;
17
+ }
18
+ export interface EnhancedServerStatus {
19
+ running: boolean;
20
+ pid?: string;
21
+ host: string;
22
+ port: number;
23
+ message?: string;
24
+ pidFilePath: string;
25
+ mcpServers?: McpServerStatus[];
26
+ }
27
+ /**
28
+ * Starts the MCP Hub Lite server with the specified configuration options.
29
+ *
30
+ * This function initializes and starts the full MCP Hub Lite server, including:
31
+ * - Fastify HTTP server with web interface and API
32
+ * - Automatic connection to enabled MCP servers
33
+ * - Port conflict detection
34
+ * - Graceful shutdown handlers
35
+ * - PID file management
36
+ *
37
+ * After successful startup, the process ID is written to a PID file for
38
+ * process management and monitoring purposes.
39
+ *
40
+ * Note: The `configPath` option is accepted for API consistency but is not
41
+ * currently used by this function. Configuration loading is handled by the
42
+ * ConfigManager singleton during module initialization.
43
+ *
44
+ * @param {ServerOptions} options - Configuration options for server startup
45
+ * @param {number} options.port - The port number to listen on (e.g., 7788)
46
+ * @param {string} options.host - The host address to bind to (e.g., 'localhost', '0.0.0.0')
47
+ * @param {string} [options.configPath] - Optional path to custom configuration file (currently unused)
48
+ * @returns {Promise<void>} A promise that resolves when the server is successfully started
49
+ * @throws {Error} If the server fails to start due to port conflicts, permission issues, or configuration errors
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * await startServer({
54
+ * port: 7788,
55
+ * host: 'localhost'
56
+ * });
57
+ * console.log(`Server running on http://localhost:7788`);
58
+ * ```
59
+ *
60
+ * @see {@link runServer} for the full server startup implementation
61
+ * @see {@link PidManager} for process ID management
62
+ */
63
+ export declare function startServer(options: ServerOptions): Promise<void>;
64
+ /**
65
+ * Stops the MCP Hub Lite server gracefully by sending a termination signal.
66
+ *
67
+ * This function terminates the running server process by:
68
+ * - Reading the PID from the PID file (or using provided PID)
69
+ * - Sending SIGTERM signal to gracefully terminate the process
70
+ * - Cleaning up the PID file to prevent stale process detection
71
+ *
72
+ * If no PID is provided, it reads from the PID file managed by PidManager.
73
+ * If the PID file doesn't exist or the process is already terminated,
74
+ * the function handles this gracefully without throwing errors.
75
+ *
76
+ * @param pid - Optional specific process ID to stop. If not provided, uses PID from PID file.
77
+ * @returns {Promise<void>} Resolves when the stop operation completes (regardless of success/failure)
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Stop the currently running server
82
+ * await stopServer();
83
+ *
84
+ * // Stop a specific process ID
85
+ * await stopServer('12345');
86
+ * ```
87
+ */
88
+ export declare function stopServer(pid?: string): Promise<void>;
89
+ /**
90
+ * Retrieves the current status of the MCP Hub Lite server.
91
+ *
92
+ * This function checks if the server is running by:
93
+ * - Reading the PID from the PID file (or using provided PID)
94
+ * - Verifying if the process with that PID is still active
95
+ * - If running, attempts to fetch additional runtime status via HTTP API
96
+ * - Returns enhanced status with configuration and runtime information
97
+ *
98
+ * The function uses `process.kill(pid, 0)` which doesn't actually kill the process
99
+ * but checks if a process with the given PID exists and is accessible.
100
+ *
101
+ * @param pid - Optional specific process ID to check. If not provided, uses PID from PID file.
102
+ * @returns {Promise<EnhancedServerStatus>} Enhanced status object with full details
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const status = await getServerStatus();
107
+ * if (status.running) {
108
+ * console.log(`Server running on ${status.host}:${status.port} with PID ${status.pid}`);
109
+ * }
110
+ * ```
111
+ */
112
+ export declare function getServerStatus(pid?: string): Promise<EnhancedServerStatus>;
113
+ /**
114
+ * Restarts the MCP Hub Lite server with the same configuration options.
115
+ *
116
+ * This function performs a graceful restart by:
117
+ * - First stopping the currently running server (if any)
118
+ * - Then starting a new server instance with the provided options
119
+ *
120
+ * This is useful for applying configuration changes or recovering from
121
+ * transient issues without manual intervention.
122
+ *
123
+ * @param options - Configuration options for the new server instance
124
+ * @param {number} options.port - The port number to listen on
125
+ * @param {string} options.host - The host address to bind to
126
+ * @param {string} [options.configPath] - Optional path to custom configuration file
127
+ * @returns {Promise<void>} A promise that resolves when the server is successfully restarted
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * await restartServer({
132
+ * port: 7788,
133
+ * host: 'localhost'
134
+ * });
135
+ * ```
136
+ */
137
+ export declare function restartServer(options: ServerOptions): Promise<void>;
138
+ /**
139
+ * Lists all configured MCP servers with their instances.
140
+ *
141
+ * This function retrieves all servers managed by the HubManager and
142
+ * enriches them with their associated instances (if any). Each server
143
+ * object includes its configuration and an array of active instances.
144
+ *
145
+ * This is primarily used by the CLI `list` command to display the
146
+ * current server configuration to users.
147
+ *
148
+ * @returns {Promise<Array>} Array of server objects with instances included
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const servers = await listServers();
153
+ * servers.forEach(server => {
154
+ * console.log(`Server: ${server.name}`);
155
+ * console.log(`Instances: ${server.instances.length}`);
156
+ * });
157
+ * ```
158
+ */
159
+ export declare function listServers(): Promise<{
160
+ instances: {
161
+ id: string;
162
+ timestamp: number;
163
+ hash: string;
164
+ pid?: number | undefined;
165
+ startTime?: number | undefined;
166
+ }[];
167
+ name: string;
168
+ config: import("../config/config-manager.js").ServerConfig;
169
+ }[]>;
170
+ export {};
171
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * CLI Server Management Functions
3
+ * Handles start, stop, status, restart operations
4
+ */
5
+ import { PidManager } from '../pid/manager.js';
6
+ import { getConfigManager } from '../config/config-manager.js';
7
+ import { getPidFilePath } from '../pid/file.js';
8
+ import { runServer } from '../server/runner.js';
9
+ /**
10
+ * Starts the MCP Hub Lite server with the specified configuration options.
11
+ *
12
+ * This function initializes and starts the full MCP Hub Lite server, including:
13
+ * - Fastify HTTP server with web interface and API
14
+ * - Automatic connection to enabled MCP servers
15
+ * - Port conflict detection
16
+ * - Graceful shutdown handlers
17
+ * - PID file management
18
+ *
19
+ * After successful startup, the process ID is written to a PID file for
20
+ * process management and monitoring purposes.
21
+ *
22
+ * Note: The `configPath` option is accepted for API consistency but is not
23
+ * currently used by this function. Configuration loading is handled by the
24
+ * ConfigManager singleton during module initialization.
25
+ *
26
+ * @param {ServerOptions} options - Configuration options for server startup
27
+ * @param {number} options.port - The port number to listen on (e.g., 7788)
28
+ * @param {string} options.host - The host address to bind to (e.g., 'localhost', '0.0.0.0')
29
+ * @param {string} [options.configPath] - Optional path to custom configuration file (currently unused)
30
+ * @returns {Promise<void>} A promise that resolves when the server is successfully started
31
+ * @throws {Error} If the server fails to start due to port conflicts, permission issues, or configuration errors
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * await startServer({
36
+ * port: 7788,
37
+ * host: 'localhost'
38
+ * });
39
+ * console.log(`Server running on http://localhost:7788`);
40
+ * ```
41
+ *
42
+ * @see {@link runServer} for the full server startup implementation
43
+ * @see {@link PidManager} for process ID management
44
+ */
45
+ export async function startServer(options) {
46
+ // Use the full runServer implementation which includes auto-connection of MCP servers
47
+ await runServer({
48
+ port: options.port,
49
+ host: options.host
50
+ });
51
+ }
52
+ /**
53
+ * Stops the MCP Hub Lite server gracefully by sending a termination signal.
54
+ *
55
+ * This function terminates the running server process by:
56
+ * - Reading the PID from the PID file (or using provided PID)
57
+ * - Sending SIGTERM signal to gracefully terminate the process
58
+ * - Cleaning up the PID file to prevent stale process detection
59
+ *
60
+ * If no PID is provided, it reads from the PID file managed by PidManager.
61
+ * If the PID file doesn't exist or the process is already terminated,
62
+ * the function handles this gracefully without throwing errors.
63
+ *
64
+ * @param pid - Optional specific process ID to stop. If not provided, uses PID from PID file.
65
+ * @returns {Promise<void>} Resolves when the stop operation completes (regardless of success/failure)
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * // Stop the currently running server
70
+ * await stopServer();
71
+ *
72
+ * // Stop a specific process ID
73
+ * await stopServer('12345');
74
+ * ```
75
+ */
76
+ export async function stopServer(pid) {
77
+ const actualPid = pid || PidManager.getPid()?.toString();
78
+ if (actualPid) {
79
+ process.kill(parseInt(actualPid), 'SIGTERM');
80
+ PidManager.removePid();
81
+ }
82
+ }
83
+ /**
84
+ * Retrieves the current status of the MCP Hub Lite server.
85
+ *
86
+ * This function checks if the server is running by:
87
+ * - Reading the PID from the PID file (or using provided PID)
88
+ * - Verifying if the process with that PID is still active
89
+ * - If running, attempts to fetch additional runtime status via HTTP API
90
+ * - Returns enhanced status with configuration and runtime information
91
+ *
92
+ * The function uses `process.kill(pid, 0)` which doesn't actually kill the process
93
+ * but checks if a process with the given PID exists and is accessible.
94
+ *
95
+ * @param pid - Optional specific process ID to check. If not provided, uses PID from PID file.
96
+ * @returns {Promise<EnhancedServerStatus>} Enhanced status object with full details
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const status = await getServerStatus();
101
+ * if (status.running) {
102
+ * console.log(`Server running on ${status.host}:${status.port} with PID ${status.pid}`);
103
+ * }
104
+ * ```
105
+ */
106
+ export async function getServerStatus(pid) {
107
+ const configManager = getConfigManager();
108
+ const config = configManager.getConfig();
109
+ const host = process.env.HOST || config.system.host;
110
+ const port = process.env.PORT ? parseInt(process.env.PORT, 10) : config.system.port;
111
+ const pidFilePath = getPidFilePath();
112
+ const actualPid = pid || PidManager.getPid()?.toString();
113
+ if (!actualPid) {
114
+ return {
115
+ running: false,
116
+ host,
117
+ port,
118
+ pidFilePath,
119
+ message: 'Server not running'
120
+ };
121
+ }
122
+ try {
123
+ process.kill(parseInt(actualPid), 0); // Signal 0 just checks if process exists
124
+ // Try to fetch runtime status via HTTP API
125
+ const mcpServers = await fetchRuntimeStatus(host, port);
126
+ return {
127
+ running: true,
128
+ pid: actualPid,
129
+ host,
130
+ port,
131
+ pidFilePath,
132
+ mcpServers
133
+ };
134
+ }
135
+ catch {
136
+ return {
137
+ running: false,
138
+ host,
139
+ port,
140
+ pidFilePath,
141
+ message: 'Server process not found'
142
+ };
143
+ }
144
+ }
145
+ /**
146
+ * Fetches runtime status from the running server via HTTP API.
147
+ *
148
+ * This function attempts to connect to the local server API to retrieve
149
+ * real-time status information about connected MCP servers. It uses a
150
+ * short timeout to ensure the status command remains responsive even
151
+ * if the server is unresponsive.
152
+ *
153
+ * @param host - The host address to connect to
154
+ * @param port - The port number to connect to
155
+ * @returns Promise with array of MCP server status, or undefined if API call fails
156
+ */
157
+ async function fetchRuntimeStatus(host, port) {
158
+ try {
159
+ const controller = new AbortController();
160
+ const timeoutId = setTimeout(() => controller.abort(), 500);
161
+ const response = await fetch(`http://${host}:${port}/web/mcp/status`, {
162
+ signal: controller.signal,
163
+ headers: {
164
+ Accept: 'application/json'
165
+ }
166
+ });
167
+ clearTimeout(timeoutId);
168
+ if (!response.ok) {
169
+ return undefined;
170
+ }
171
+ const statusData = (await response.json());
172
+ // Map status data directly (API now includes name and type)
173
+ const result = statusData.map((item) => ({
174
+ name: item.name,
175
+ type: item.type,
176
+ connected: item.status.connected,
177
+ toolsCount: item.status.toolsCount,
178
+ resourcesCount: item.status.resourcesCount,
179
+ error: item.status.error
180
+ }));
181
+ return result;
182
+ }
183
+ catch {
184
+ // Silent failure - API not available, just return undefined
185
+ return undefined;
186
+ }
187
+ }
188
+ /**
189
+ * Restarts the MCP Hub Lite server with the same configuration options.
190
+ *
191
+ * This function performs a graceful restart by:
192
+ * - First stopping the currently running server (if any)
193
+ * - Then starting a new server instance with the provided options
194
+ *
195
+ * This is useful for applying configuration changes or recovering from
196
+ * transient issues without manual intervention.
197
+ *
198
+ * @param options - Configuration options for the new server instance
199
+ * @param {number} options.port - The port number to listen on
200
+ * @param {string} options.host - The host address to bind to
201
+ * @param {string} [options.configPath] - Optional path to custom configuration file
202
+ * @returns {Promise<void>} A promise that resolves when the server is successfully restarted
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * await restartServer({
207
+ * port: 7788,
208
+ * host: 'localhost'
209
+ * });
210
+ * ```
211
+ */
212
+ export async function restartServer(options) {
213
+ await stopServer();
214
+ await startServer(options);
215
+ }
216
+ /**
217
+ * Lists all configured MCP servers with their instances.
218
+ *
219
+ * This function retrieves all servers managed by the HubManager and
220
+ * enriches them with their associated instances (if any). Each server
221
+ * object includes its configuration and an array of active instances.
222
+ *
223
+ * This is primarily used by the CLI `list` command to display the
224
+ * current server configuration to users.
225
+ *
226
+ * @returns {Promise<Array>} Array of server objects with instances included
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const servers = await listServers();
231
+ * servers.forEach(server => {
232
+ * console.log(`Server: ${server.name}`);
233
+ * console.log(`Instances: ${server.instances.length}`);
234
+ * });
235
+ * ```
236
+ */
237
+ export async function listServers() {
238
+ // Dynamic import to avoid loading heavyweight services for simple commands
239
+ const { hubManager } = await import('../services/hub-manager.service.js');
240
+ const servers = hubManager.getAllServers();
241
+ const serverInstances = hubManager.getServerInstances();
242
+ return servers.map((server) => ({
243
+ ...server,
244
+ instances: serverInstances[server.name] || []
245
+ }));
246
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configuration change logging utilities.
3
+ * Handles comparison and logging of configuration changes.
4
+ */
5
+ import type { SystemConfig } from './config.schema.js';
6
+ /**
7
+ * Logs the differences between two system configurations.
8
+ *
9
+ * This function performs a deep comparison of two configuration objects
10
+ * and logs all changes at the field level for audit purposes.
11
+ *
12
+ * @param oldConfig - The original configuration
13
+ * @param newConfig - The new configuration
14
+ */
15
+ export declare function logConfigChanges(oldConfig: SystemConfig, newConfig: SystemConfig): void;
16
+ //# sourceMappingURL=config-change-logger.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Configuration change logging utilities.
3
+ * Handles comparison and logging of configuration changes.
4
+ */
5
+ import { logger, LOG_MODULES } from '../utils/logger.js';
6
+ /**
7
+ * Logs the differences between two system configurations.
8
+ *
9
+ * This function performs a deep comparison of two configuration objects
10
+ * and logs all changes at the field level for audit purposes.
11
+ *
12
+ * @param oldConfig - The original configuration
13
+ * @param newConfig - The new configuration
14
+ */
15
+ export function logConfigChanges(oldConfig, newConfig) {
16
+ const changes = [];
17
+ const compare = (obj1, obj2, path) => {
18
+ const allKeys = new Set([...Object.keys(obj1 || {}), ...Object.keys(obj2 || {})]);
19
+ for (const key of allKeys) {
20
+ const currentPath = path ? `${path}.${key}` : key;
21
+ const val1 = obj1 && typeof obj1 === 'object' ? obj1[key] : undefined;
22
+ const val2 = obj2 && typeof obj2 === 'object' ? obj2[key] : undefined;
23
+ if (JSON.stringify(val1) === JSON.stringify(val2))
24
+ continue;
25
+ if (typeof val1 === 'object' &&
26
+ val1 !== null &&
27
+ typeof val2 === 'object' &&
28
+ val2 !== null &&
29
+ !Array.isArray(val1) &&
30
+ !Array.isArray(val2)) {
31
+ compare(val1, val2, currentPath);
32
+ }
33
+ else {
34
+ const formatVal = (v) => (v === undefined ? 'undefined' : JSON.stringify(v));
35
+ changes.push(`${currentPath} = ${formatVal(val1)} -> ${formatVal(val2)}`);
36
+ }
37
+ }
38
+ };
39
+ compare(oldConfig, newConfig, '');
40
+ if (changes.length > 0) {
41
+ logger.info(`${changes.join('\n')}`, LOG_MODULES.CONFIG_CHANGES);
42
+ }
43
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Configuration loading utilities.
3
+ * Handles loading and parsing configuration from files with validation.
4
+ */
5
+ import type { SystemConfig } from './config.schema.js';
6
+ /**
7
+ * Loads configuration from the specified file path.
8
+ *
9
+ * This function handles the complete configuration loading process:
10
+ * - Checks if the config file exists at the specified path
11
+ * - Reads and parses the JSON configuration
12
+ * - Performs type conversion for compatibility (e.g., 'http' to 'streamable-http')
13
+ * - Validates the configuration using Zod schema
14
+ * - Handles validation failures gracefully by falling back to default configuration
15
+ *
16
+ * If the config file doesn't exist or fails to load, a default configuration is returned.
17
+ *
18
+ * @param configPath - Path to the configuration file
19
+ * @returns The loaded and validated system configuration
20
+ */
21
+ export declare function loadConfig(configPath: string): SystemConfig;
22
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +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"}