@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,68 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import * as serverModule from '../../../src/cli/server.js';
3
+ // Mock dependencies
4
+ vi.mock('@src/app.js', () => ({
5
+ buildApp: vi.fn()
6
+ }));
7
+ vi.mock('@pid/manager.js', () => ({
8
+ PidManager: {
9
+ writePid: vi.fn(),
10
+ removePid: vi.fn(),
11
+ getPid: vi.fn()
12
+ }
13
+ }));
14
+ vi.mock('@services/hub-manager.service.js', () => ({
15
+ hubManager: {
16
+ getAllServers: vi.fn(),
17
+ getServerInstances: vi.fn()
18
+ }
19
+ }));
20
+ describe('CLI Server Functions', () => {
21
+ let originalKill;
22
+ let mockKill;
23
+ beforeEach(() => {
24
+ // Mock process.kill to prevent actual process killing during tests
25
+ originalKill = process.kill;
26
+ mockKill = vi.fn();
27
+ // Use Object.defineProperty to safely override process.kill
28
+ Object.defineProperty(process, 'kill', {
29
+ value: mockKill,
30
+ writable: true,
31
+ configurable: true
32
+ });
33
+ });
34
+ afterEach(() => {
35
+ // Restore original methods
36
+ Object.defineProperty(process, 'kill', {
37
+ value: originalKill,
38
+ writable: true,
39
+ configurable: true
40
+ });
41
+ vi.clearAllMocks();
42
+ });
43
+ describe('startServer', () => {
44
+ it('should be defined', () => {
45
+ expect(serverModule.startServer).toBeDefined();
46
+ });
47
+ });
48
+ describe('stopServer', () => {
49
+ it('should be defined', () => {
50
+ expect(serverModule.stopServer).toBeDefined();
51
+ });
52
+ });
53
+ describe('getServerStatus', () => {
54
+ it('should be defined', () => {
55
+ expect(serverModule.getServerStatus).toBeDefined();
56
+ });
57
+ });
58
+ describe('restartServer', () => {
59
+ it('should be defined', () => {
60
+ expect(serverModule.restartServer).toBeDefined();
61
+ });
62
+ });
63
+ describe('listServers', () => {
64
+ it('should be defined', () => {
65
+ expect(serverModule.listServers).toBeDefined();
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/server/runner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,488 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { runServer } from '../../../src/server/runner.js';
3
+ import { buildApp } from '../../../src/app.js';
4
+ import { configManager } from '../../../src/config/config-manager.js';
5
+ import { logger } from '../../../src/utils/logger.js';
6
+ import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
7
+ import { gateway } from '../../../src/services/gateway.service.js';
8
+ import { PidManager } from '../../../src/pid/manager.js';
9
+ import { checkPort } from '../../../src/utils/port-checker.js';
10
+ // Mock all dependencies
11
+ vi.mock('@src/app.js', () => ({
12
+ buildApp: vi.fn()
13
+ }));
14
+ vi.mock('@config/config-manager.js', () => ({
15
+ configManager: {
16
+ getConfig: vi.fn(),
17
+ getServers: vi.fn(),
18
+ getServerInstanceByName: vi.fn(),
19
+ addServerInstance: vi.fn()
20
+ }
21
+ }));
22
+ vi.mock('@utils/logger.js', () => ({
23
+ logger: {
24
+ info: vi.fn(),
25
+ error: vi.fn(),
26
+ setUseStderr: vi.fn(),
27
+ enableDevLog: vi.fn(),
28
+ setLevel: vi.fn()
29
+ },
30
+ LOG_MODULES: {
31
+ SERVER: { module: 'Server' }
32
+ }
33
+ }));
34
+ vi.mock('@services/mcp-connection-manager.js', () => ({
35
+ mcpConnectionManager: {
36
+ connect: vi.fn(),
37
+ disconnectAll: vi.fn()
38
+ }
39
+ }));
40
+ vi.mock('@services/gateway.service.js', () => ({
41
+ gateway: {
42
+ start: vi.fn()
43
+ }
44
+ }));
45
+ vi.mock('@pid/manager.js', () => ({
46
+ PidManager: {
47
+ writePid: vi.fn(),
48
+ removePid: vi.fn()
49
+ }
50
+ }));
51
+ vi.mock('@utils/port-checker.js', () => ({
52
+ checkPort: vi.fn()
53
+ }));
54
+ describe('Server Runner', () => {
55
+ beforeEach(() => {
56
+ vi.clearAllMocks();
57
+ // Reset process event listeners
58
+ process.removeAllListeners('SIGTERM');
59
+ process.removeAllListeners('SIGINT');
60
+ });
61
+ afterEach(() => {
62
+ // Clean up any remaining listeners
63
+ process.removeAllListeners('SIGTERM');
64
+ process.removeAllListeners('SIGINT');
65
+ });
66
+ describe('runServer function', () => {
67
+ it('should start server in HTTP mode successfully', async () => {
68
+ // Setup mocks
69
+ const mockApp = {
70
+ listen: vi.fn().mockResolvedValue(undefined),
71
+ close: vi.fn().mockResolvedValue(undefined)
72
+ };
73
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
74
+ const mockConfig = {
75
+ version: '1.0.0',
76
+ system: {
77
+ host: 'localhost',
78
+ port: 3000,
79
+ language: 'zh',
80
+ theme: 'system',
81
+ logging: {
82
+ level: 'info',
83
+ rotationAge: '7d',
84
+ jsonPretty: true,
85
+ mcpCommDebug: false,
86
+ sessionDebug: false
87
+ }
88
+ },
89
+ security: {
90
+ allowedNetworks: ['127.0.0.1'],
91
+ maxConcurrentConnections: 50,
92
+ connectionTimeout: 30000,
93
+ idleConnectionTimeout: 300000,
94
+ sessionTimeout: 30 * 60 * 1000,
95
+ sessionFlushInterval: 15 * 60 * 1000,
96
+ maxConnections: 50
97
+ },
98
+ servers: {}
99
+ };
100
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
101
+ vi.mocked(configManager.getServers).mockReturnValue([]);
102
+ vi.mocked(checkPort).mockResolvedValue({ inUse: false });
103
+ // Execute
104
+ await runServer({ stdio: false, port: 3000, host: 'localhost' });
105
+ // Verify
106
+ expect(buildApp).toHaveBeenCalled();
107
+ expect(mockApp.listen).toHaveBeenCalledWith({ port: 3000, host: 'localhost' });
108
+ expect(PidManager.writePid).toHaveBeenCalled();
109
+ expect(logger.info).toHaveBeenCalledWith('MCP Hub Lite Server running at http://localhost:3000', expect.any(Object));
110
+ });
111
+ it('should start server in stdio mode successfully', async () => {
112
+ // Setup mocks
113
+ const mockConfig = {
114
+ version: '1.0.0',
115
+ system: {
116
+ host: 'localhost',
117
+ port: 3000,
118
+ language: 'zh',
119
+ theme: 'system',
120
+ logging: {
121
+ level: 'info',
122
+ rotationAge: '7d',
123
+ jsonPretty: true,
124
+ mcpCommDebug: false,
125
+ sessionDebug: false
126
+ }
127
+ },
128
+ security: {
129
+ allowedNetworks: ['127.0.0.1'],
130
+ maxConcurrentConnections: 50,
131
+ connectionTimeout: 30000,
132
+ idleConnectionTimeout: 300000,
133
+ sessionTimeout: 30 * 60 * 1000,
134
+ sessionFlushInterval: 15 * 60 * 1000,
135
+ maxConnections: 50
136
+ },
137
+ servers: {}
138
+ };
139
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
140
+ vi.mocked(configManager.getServers).mockReturnValue([]);
141
+ // Execute
142
+ await runServer({ stdio: true });
143
+ // Verify
144
+ expect(buildApp).not.toHaveBeenCalled();
145
+ expect(gateway.start).toHaveBeenCalled();
146
+ expect(PidManager.writePid).toHaveBeenCalled();
147
+ expect(logger.setUseStderr).toHaveBeenCalledWith(true);
148
+ expect(logger.info).toHaveBeenCalledWith('Starting in MCP Gateway mode (stdio)...', expect.any(Object));
149
+ });
150
+ it('should handle port already in use by self project', async () => {
151
+ // Setup mocks
152
+ const mockApp = { listen: vi.fn(), close: vi.fn() };
153
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
154
+ const mockConfig = {
155
+ version: '1.0.0',
156
+ system: {
157
+ host: 'localhost',
158
+ port: 3000,
159
+ language: 'zh',
160
+ theme: 'system',
161
+ logging: {
162
+ level: 'info',
163
+ rotationAge: '7d',
164
+ jsonPretty: true,
165
+ mcpCommDebug: false,
166
+ sessionDebug: false
167
+ }
168
+ },
169
+ security: {
170
+ allowedNetworks: ['127.0.0.1'],
171
+ maxConcurrentConnections: 50,
172
+ connectionTimeout: 30000,
173
+ idleConnectionTimeout: 300000,
174
+ sessionTimeout: 30 * 60 * 1000,
175
+ sessionFlushInterval: 15 * 60 * 1000,
176
+ maxConnections: 50
177
+ },
178
+ servers: {}
179
+ };
180
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
181
+ vi.mocked(configManager.getServers).mockReturnValue([]);
182
+ vi.mocked(checkPort).mockResolvedValue({
183
+ inUse: true,
184
+ isSelfProject: true,
185
+ pid: 1234
186
+ });
187
+ // Spy on process.exit
188
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
189
+ throw new Error('process.exit called');
190
+ }));
191
+ // Execute and expect error
192
+ await expect(runServer({ stdio: false, port: 3000, host: 'localhost' })).rejects.toThrow('process.exit called');
193
+ // Verify
194
+ expect(logger.error).toHaveBeenCalledWith('MCP Hub Lite is already running on port 3000 (PID: 1234)');
195
+ expect(exitSpy).toHaveBeenCalledWith(1);
196
+ // Restore
197
+ exitSpy.mockRestore();
198
+ });
199
+ it('should handle port already in use by other application', async () => {
200
+ // Setup mocks
201
+ const mockApp = { listen: vi.fn(), close: vi.fn() };
202
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
203
+ const mockConfig = {
204
+ version: '1.0.0',
205
+ system: {
206
+ host: 'localhost',
207
+ port: 3000,
208
+ language: 'zh',
209
+ theme: 'system',
210
+ logging: {
211
+ level: 'info',
212
+ rotationAge: '7d',
213
+ jsonPretty: true,
214
+ mcpCommDebug: false,
215
+ sessionDebug: false
216
+ }
217
+ },
218
+ security: {
219
+ allowedNetworks: ['127.0.0.1'],
220
+ maxConcurrentConnections: 50,
221
+ connectionTimeout: 30000,
222
+ idleConnectionTimeout: 300000,
223
+ sessionTimeout: 30 * 60 * 1000,
224
+ sessionFlushInterval: 15 * 60 * 1000,
225
+ maxConnections: 50
226
+ },
227
+ servers: {}
228
+ };
229
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
230
+ vi.mocked(configManager.getServers).mockReturnValue([]);
231
+ vi.mocked(checkPort).mockResolvedValue({
232
+ inUse: true,
233
+ isSelfProject: false,
234
+ pid: 5678,
235
+ processName: 'other-app',
236
+ commandLine: 'node other-app.js'
237
+ });
238
+ // Spy on process.exit
239
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
240
+ throw new Error('process.exit called');
241
+ }));
242
+ // Execute and expect error
243
+ await expect(runServer({ stdio: false, port: 3000, host: 'localhost' })).rejects.toThrow('process.exit called');
244
+ // Verify
245
+ expect(logger.error).toHaveBeenCalledWith('Port 3000 is already in use by another application:');
246
+ expect(logger.error).toHaveBeenCalledWith(' Process: other-app (PID: 5678)');
247
+ expect(logger.error).toHaveBeenCalledWith(' Command: node other-app.js');
248
+ expect(exitSpy).toHaveBeenCalledWith(1);
249
+ // Restore
250
+ exitSpy.mockRestore();
251
+ });
252
+ it('should auto-connect to enabled servers', async () => {
253
+ // Setup mocks
254
+ const mockApp = {
255
+ listen: vi.fn().mockResolvedValue(undefined),
256
+ close: vi.fn().mockResolvedValue(undefined)
257
+ };
258
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
259
+ const mockConfig = {
260
+ version: '1.0.0',
261
+ system: {
262
+ host: 'localhost',
263
+ port: 3000,
264
+ language: 'zh',
265
+ theme: 'system',
266
+ logging: {
267
+ level: 'info',
268
+ rotationAge: '7d',
269
+ jsonPretty: true,
270
+ mcpCommDebug: false,
271
+ sessionDebug: false
272
+ }
273
+ },
274
+ security: {
275
+ allowedNetworks: ['127.0.0.1'],
276
+ maxConcurrentConnections: 50,
277
+ connectionTimeout: 30000,
278
+ idleConnectionTimeout: 300000,
279
+ sessionTimeout: 30 * 60 * 1000,
280
+ sessionFlushInterval: 15 * 60 * 1000,
281
+ maxConnections: 50
282
+ },
283
+ servers: {}
284
+ };
285
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
286
+ vi.mocked(checkPort).mockResolvedValue({ inUse: false });
287
+ const mockServers = [
288
+ {
289
+ name: 'enabled-server',
290
+ config: {
291
+ enabled: true,
292
+ command: 'test-command',
293
+ type: 'stdio',
294
+ args: [],
295
+ allowedTools: [],
296
+ timeout: 30000
297
+ }
298
+ },
299
+ {
300
+ name: 'disabled-server',
301
+ config: {
302
+ enabled: false,
303
+ command: 'test-command',
304
+ type: 'stdio',
305
+ args: [],
306
+ allowedTools: [],
307
+ timeout: 30000
308
+ }
309
+ }
310
+ ];
311
+ vi.mocked(configManager.getServers).mockReturnValue(mockServers);
312
+ vi.mocked(configManager.getServerInstanceByName).mockImplementation((name) => {
313
+ if (name === 'enabled-server')
314
+ return [];
315
+ return [{ id: 'instance-1', timestamp: Date.now(), hash: 'test-hash' }];
316
+ });
317
+ vi.mocked(configManager.addServerInstance).mockResolvedValue({
318
+ id: 'new-instance',
319
+ timestamp: Date.now(),
320
+ hash: 'test-hash'
321
+ });
322
+ // Execute
323
+ await runServer({ stdio: false, port: 3000, host: 'localhost' });
324
+ // Verify
325
+ // Only enabled server should be connected (1 call expected)
326
+ expect(mcpConnectionManager.connect).toHaveBeenCalledTimes(1);
327
+ // Call for enabled server with new instance
328
+ expect(mcpConnectionManager.connect).toHaveBeenCalledWith(expect.objectContaining({
329
+ enabled: true,
330
+ command: 'test-command',
331
+ id: 'new-instance'
332
+ }));
333
+ });
334
+ it('should handle graceful shutdown on SIGTERM', async () => {
335
+ // Setup mocks
336
+ const mockApp = {
337
+ listen: vi.fn().mockResolvedValue(undefined),
338
+ close: vi.fn().mockResolvedValue(undefined)
339
+ };
340
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
341
+ const mockConfig = {
342
+ version: '1.0.0',
343
+ system: {
344
+ host: 'localhost',
345
+ port: 3000,
346
+ language: 'zh',
347
+ theme: 'light',
348
+ logging: {
349
+ level: 'info',
350
+ rotationAge: '7d',
351
+ jsonPretty: true,
352
+ mcpCommDebug: false,
353
+ sessionDebug: false
354
+ }
355
+ },
356
+ security: {
357
+ allowedNetworks: ['127.0.0.1'],
358
+ maxConcurrentConnections: 50,
359
+ connectionTimeout: 30000,
360
+ idleConnectionTimeout: 300000,
361
+ sessionTimeout: 30 * 60 * 1000,
362
+ sessionFlushInterval: 15 * 60 * 1000,
363
+ maxConnections: 50
364
+ },
365
+ servers: {}
366
+ };
367
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
368
+ vi.mocked(configManager.getServers).mockReturnValue([]);
369
+ vi.mocked(checkPort).mockResolvedValue({ inUse: false });
370
+ // Spy on process.exit
371
+ const exitSpy = vi
372
+ .spyOn(process, 'exit')
373
+ .mockImplementation((() => { }));
374
+ // Start server
375
+ await runServer({ stdio: false, port: 3000, host: 'localhost' });
376
+ // Trigger SIGTERM
377
+ process.emit('SIGTERM');
378
+ // Wait for async operations
379
+ await new Promise((resolve) => setTimeout(resolve, 10));
380
+ // Verify
381
+ expect(mcpConnectionManager.disconnectAll).toHaveBeenCalled();
382
+ expect(mockApp.close).toHaveBeenCalled();
383
+ expect(PidManager.removePid).toHaveBeenCalled();
384
+ expect(logger.info).toHaveBeenCalledWith('Server stopped gracefully', expect.any(Object));
385
+ expect(exitSpy).toHaveBeenCalledWith(0);
386
+ // Restore
387
+ exitSpy.mockRestore();
388
+ });
389
+ it('should handle graceful shutdown on SIGINT', async () => {
390
+ // Setup mocks
391
+ const mockApp = {
392
+ listen: vi.fn().mockResolvedValue(undefined),
393
+ close: vi.fn().mockResolvedValue(undefined)
394
+ };
395
+ vi.mocked(buildApp).mockResolvedValue(mockApp);
396
+ const mockConfig = {
397
+ version: '1.0.0',
398
+ system: {
399
+ host: 'localhost',
400
+ port: 3000,
401
+ language: 'zh',
402
+ theme: 'light',
403
+ logging: {
404
+ level: 'info',
405
+ rotationAge: '7d',
406
+ jsonPretty: true,
407
+ mcpCommDebug: false,
408
+ sessionDebug: false
409
+ }
410
+ },
411
+ security: {
412
+ allowedNetworks: ['127.0.0.1'],
413
+ maxConcurrentConnections: 50,
414
+ connectionTimeout: 30000,
415
+ idleConnectionTimeout: 300000,
416
+ sessionTimeout: 30 * 60 * 1000,
417
+ sessionFlushInterval: 15 * 60 * 1000,
418
+ maxConnections: 50
419
+ },
420
+ servers: {}
421
+ };
422
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
423
+ vi.mocked(configManager.getServers).mockReturnValue([]);
424
+ vi.mocked(checkPort).mockResolvedValue({ inUse: false });
425
+ // Spy on process.exit
426
+ const exitSpy = vi
427
+ .spyOn(process, 'exit')
428
+ .mockImplementation((() => { }));
429
+ // Start server
430
+ await runServer({ stdio: false, port: 3000, host: 'localhost' });
431
+ // Trigger SIGINT
432
+ process.emit('SIGINT');
433
+ // Wait for async operations
434
+ await new Promise((resolve) => setTimeout(resolve, 10));
435
+ // Verify
436
+ expect(mcpConnectionManager.disconnectAll).toHaveBeenCalled();
437
+ expect(mockApp.close).toHaveBeenCalled();
438
+ expect(PidManager.removePid).toHaveBeenCalled();
439
+ expect(logger.info).toHaveBeenCalledWith('Server stopped gracefully', expect.any(Object));
440
+ expect(exitSpy).toHaveBeenCalledWith(0);
441
+ // Restore
442
+ exitSpy.mockRestore();
443
+ });
444
+ it('should handle startup errors gracefully', async () => {
445
+ // Setup mocks to throw error
446
+ vi.mocked(buildApp).mockRejectedValue(new Error('Startup failed'));
447
+ const mockConfig = {
448
+ version: '1.0.0',
449
+ system: {
450
+ host: 'localhost',
451
+ port: 3000,
452
+ language: 'zh',
453
+ theme: 'light',
454
+ logging: {
455
+ level: 'info',
456
+ rotationAge: '7d',
457
+ jsonPretty: true,
458
+ mcpCommDebug: false,
459
+ sessionDebug: false
460
+ }
461
+ },
462
+ security: {
463
+ allowedNetworks: ['127.0.0.1'],
464
+ maxConcurrentConnections: 50,
465
+ connectionTimeout: 30000,
466
+ idleConnectionTimeout: 300000,
467
+ sessionTimeout: 30 * 60 * 1000,
468
+ sessionFlushInterval: 15 * 60 * 1000,
469
+ maxConnections: 50
470
+ },
471
+ servers: {}
472
+ };
473
+ vi.mocked(configManager.getConfig).mockReturnValue(mockConfig);
474
+ // Spy on process.exit
475
+ const exitSpy = vi.spyOn(process, 'exit').mockImplementation((() => {
476
+ throw new Error('process.exit called');
477
+ }));
478
+ // Execute and expect error
479
+ await expect(runServer({ stdio: false, port: 3000, host: 'localhost' })).rejects.toThrow('process.exit called');
480
+ // Verify
481
+ expect(logger.error).toHaveBeenCalledWith('Failed to start server:', expect.any(Error), expect.any(Object));
482
+ expect(PidManager.removePid).toHaveBeenCalled();
483
+ expect(exitSpy).toHaveBeenCalledWith(1);
484
+ // Restore
485
+ exitSpy.mockRestore();
486
+ });
487
+ });
488
+ });
@@ -0,0 +1,2 @@
1
+ export declare function setupServerTests(): void;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/server/setup.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,SAgB/B"}
@@ -0,0 +1,21 @@
1
+ // Test setup for server module tests
2
+ import { vi } from 'vitest';
3
+ // Global test setup for server tests
4
+ export function setupServerTests() {
5
+ // Mock any global dependencies needed for server tests
6
+ vi.mock('fs', () => ({
7
+ promises: {
8
+ readFile: vi.fn(),
9
+ writeFile: vi.fn(),
10
+ unlink: vi.fn(),
11
+ stat: vi.fn()
12
+ }
13
+ }));
14
+ vi.mock('path', () => ({
15
+ resolve: vi.fn(),
16
+ join: vi.fn(),
17
+ dirname: vi.fn()
18
+ }));
19
+ }
20
+ // Call setup function
21
+ setupServerTests();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gateway-logging.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-logging.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/services/gateway-logging.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import { GatewayService } from '../../../src/services/gateway.service.js';
3
+ describe('GatewayService Logging Helpers', () => {
4
+ // Access private methods using type assertion for testing
5
+ const gateway = new GatewayService();
6
+ test('formatToolArgs should handle simple objects', () => {
7
+ const args = { foo: 'bar', num: 42 };
8
+ const result = gateway.formatToolArgs(args);
9
+ expect(result).toContain('foo');
10
+ expect(result).toContain('bar');
11
+ expect(result).toContain('42');
12
+ });
13
+ test('formatToolArgs should truncate long strings', () => {
14
+ const args = { data: 'a'.repeat(1000) };
15
+ const result = gateway.formatToolArgs(args);
16
+ expect(result).toContain('... [truncated]');
17
+ expect(result.length).toBeLessThan(1000);
18
+ });
19
+ test('formatToolArgs should handle circular references', () => {
20
+ // Create object with circular reference for testing
21
+ const obj = { name: 'test' };
22
+ obj.self = obj;
23
+ const result = gateway.formatToolArgs(obj);
24
+ expect(result).toContain('[Circular Reference]');
25
+ });
26
+ test('formatToolArgs should handle formatting errors gracefully', () => {
27
+ // Create an object with custom toJSON that throws
28
+ const args = {
29
+ get bad() {
30
+ throw new Error('test error');
31
+ }
32
+ };
33
+ const result = gateway.formatToolArgs(args);
34
+ expect(result).toContain('[Error formatting args:');
35
+ });
36
+ test('formatToolResponse should handle valid responses', () => {
37
+ const response = { content: [{ type: 'text', text: 'Hello' }] };
38
+ const result = gateway.formatToolResponse(response);
39
+ expect(result).toContain('Hello');
40
+ });
41
+ test('formatToolResponse should truncate large responses', () => {
42
+ const response = { content: 'a'.repeat(3000) };
43
+ const result = gateway.formatToolResponse(response);
44
+ expect(result).toContain('... [truncated]');
45
+ expect(result.length).toBeLessThan(2500);
46
+ });
47
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hub-manager-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-manager-service.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/services/hub-manager-service.test.ts"],"names":[],"mappings":""}