@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,674 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { HubToolsService } from '../../../src/services/hub-tools.service.js';
3
+ import { hubManager } from '../../../src/services/hub-manager.service.js';
4
+ import { mcpConnectionManager } from '../../../src/services/mcp-connection-manager.js';
5
+ // Mock dependencies
6
+ vi.mock('@services/hub-manager.service.js');
7
+ vi.mock('@services/mcp-connection-manager.js');
8
+ describe('HubToolsService', () => {
9
+ let hubToolsService;
10
+ beforeEach(() => {
11
+ hubToolsService = new HubToolsService();
12
+ // Clear mock calls between tests to avoid state pollution
13
+ vi.clearAllMocks();
14
+ });
15
+ describe('listServers', () => {
16
+ it('should return array of server names only', async () => {
17
+ // Arrange
18
+ const mockServers = [
19
+ {
20
+ name: 'Test Server 1',
21
+ config: {
22
+ type: 'stdio',
23
+ command: 'test-command',
24
+ args: [],
25
+ enabled: true,
26
+ allowedTools: [],
27
+ timeout: 30000
28
+ }
29
+ },
30
+ {
31
+ name: 'Test Server 2',
32
+ config: {
33
+ type: 'sse',
34
+ url: 'http://example.com',
35
+ args: [],
36
+ enabled: true,
37
+ allowedTools: [],
38
+ timeout: 30000
39
+ }
40
+ }
41
+ ];
42
+ vi.mocked(hubManager.getAllServers).mockReturnValue(mockServers);
43
+ // Act
44
+ const servers = await hubToolsService.listServers();
45
+ // Assert
46
+ expect(servers).toEqual(['Test Server 1', 'Test Server 2']);
47
+ expect(hubManager.getAllServers).toHaveBeenCalledTimes(1);
48
+ });
49
+ });
50
+ describe('findServers', () => {
51
+ it('should find servers matching name pattern (case-insensitive)', async () => {
52
+ // Arrange
53
+ const mockServers = [
54
+ {
55
+ name: 'Test Server 1',
56
+ config: {
57
+ type: 'stdio',
58
+ command: 'test-command',
59
+ args: [],
60
+ enabled: true,
61
+ allowedTools: [],
62
+ timeout: 30000
63
+ }
64
+ },
65
+ {
66
+ name: 'Production Server',
67
+ config: {
68
+ type: 'sse',
69
+ url: 'http://example.com',
70
+ args: [],
71
+ enabled: true,
72
+ allowedTools: [],
73
+ timeout: 30000
74
+ }
75
+ },
76
+ {
77
+ name: 'Development Server',
78
+ config: {
79
+ type: 'http',
80
+ url: 'http://dev.example.com',
81
+ args: [],
82
+ enabled: true,
83
+ allowedTools: [],
84
+ timeout: 30000
85
+ }
86
+ }
87
+ ];
88
+ vi.mocked(hubManager.getAllServers).mockReturnValue(mockServers);
89
+ // Act
90
+ const results = await hubToolsService.findServers({
91
+ pattern: 'server',
92
+ searchIn: 'name',
93
+ caseSensitive: false
94
+ });
95
+ // Assert
96
+ expect(results).toEqual(['Test Server 1', 'Production Server', 'Development Server']);
97
+ expect(hubManager.getAllServers).toHaveBeenCalledTimes(1);
98
+ });
99
+ it('should find servers matching name pattern (case-sensitive)', async () => {
100
+ // Arrange
101
+ const mockServers = [
102
+ {
103
+ name: 'Test Server 1',
104
+ config: {
105
+ type: 'stdio',
106
+ command: 'test-command',
107
+ args: [],
108
+ enabled: true,
109
+ allowedTools: [],
110
+ timeout: 30000
111
+ }
112
+ },
113
+ {
114
+ name: 'production server',
115
+ config: {
116
+ type: 'sse',
117
+ url: 'http://example.com',
118
+ args: [],
119
+ enabled: true,
120
+ allowedTools: [],
121
+ timeout: 30000
122
+ }
123
+ }
124
+ ];
125
+ vi.mocked(hubManager.getAllServers).mockReturnValue(mockServers);
126
+ // Act
127
+ const results = await hubToolsService.findServers({
128
+ pattern: 'Server',
129
+ searchIn: 'name',
130
+ caseSensitive: true
131
+ });
132
+ // Assert
133
+ expect(results).toEqual(['Test Server 1']);
134
+ expect(hubManager.getAllServers).toHaveBeenCalledTimes(1);
135
+ });
136
+ });
137
+ describe('listAllToolsInServer', () => {
138
+ it('should return tools from a specific server', async () => {
139
+ // Arrange
140
+ const serverName = 'Test Server';
141
+ const serverId = '1';
142
+ const mockTools = [
143
+ {
144
+ name: 'readFile',
145
+ description: 'Read file contents',
146
+ inputSchema: { type: 'object' },
147
+ serverName: 'Test Server'
148
+ },
149
+ {
150
+ name: 'writeFile',
151
+ description: 'Write file contents',
152
+ inputSchema: {
153
+ type: 'object',
154
+ properties: { path: { type: 'string' }, content: { type: 'string' } },
155
+ required: ['path', 'content']
156
+ },
157
+ serverName: 'Test Server'
158
+ }
159
+ ];
160
+ // getServerInstanceByName should return ServerInstanceConfig objects (with id, timestamp, hash)
161
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
162
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
163
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
164
+ type: 'stdio',
165
+ command: 'test-command',
166
+ args: [],
167
+ enabled: true,
168
+ allowedTools: [],
169
+ timeout: 30000
170
+ });
171
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
172
+ // Act
173
+ const result = await hubToolsService.listAllToolsInServer({ serverName });
174
+ // Assert
175
+ expect(result).toEqual({
176
+ serverName,
177
+ tools: mockTools
178
+ });
179
+ expect(hubManager.getServerInstanceByName).toHaveBeenCalledTimes(1);
180
+ expect(hubManager.getServerInstanceByName).toHaveBeenCalledWith(serverName);
181
+ expect(mcpConnectionManager.getTools).toHaveBeenCalledWith(serverId);
182
+ });
183
+ it('should throw error if server not found', async () => {
184
+ // Arrange
185
+ const serverName = 'Non-existent Server';
186
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([]);
187
+ vi.mocked(hubManager.getServerByName).mockReturnValue(undefined);
188
+ // Act & Assert
189
+ await expect(hubToolsService.listAllToolsInServer({ serverName })).rejects.toThrow(`Server not found: ${serverName}`);
190
+ });
191
+ });
192
+ describe('findToolsInServer', () => {
193
+ it('should find tools matching pattern in server', async () => {
194
+ // Arrange
195
+ const serverName = 'Test Server';
196
+ const serverId = '1';
197
+ const mockTools = [
198
+ {
199
+ name: 'readFile',
200
+ description: 'Read file contents',
201
+ inputSchema: { type: 'object', properties: {}, required: [] },
202
+ serverName: 'Test Server'
203
+ },
204
+ {
205
+ name: 'writeFile',
206
+ description: 'Write file contents',
207
+ inputSchema: { type: 'object', properties: {}, required: [] },
208
+ serverName: 'Test Server'
209
+ },
210
+ {
211
+ name: 'listFiles',
212
+ description: 'List files in directory',
213
+ inputSchema: { type: 'object', properties: {}, required: [] },
214
+ serverName: 'Test Server'
215
+ }
216
+ ];
217
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
218
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
219
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
220
+ type: 'stdio',
221
+ command: 'test-command',
222
+ args: [],
223
+ enabled: true,
224
+ allowedTools: [],
225
+ timeout: 30000
226
+ });
227
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
228
+ // Act
229
+ const result = await hubToolsService.findToolsInServer({
230
+ serverName,
231
+ pattern: 'File',
232
+ searchIn: 'both',
233
+ caseSensitive: false
234
+ });
235
+ // Assert
236
+ expect(result).toEqual({
237
+ serverName,
238
+ tools: [
239
+ {
240
+ name: 'readFile',
241
+ description: 'Read file contents',
242
+ inputSchema: { type: 'object', properties: {}, required: [] },
243
+ serverName: 'Test Server'
244
+ },
245
+ {
246
+ name: 'writeFile',
247
+ description: 'Write file contents',
248
+ inputSchema: { type: 'object', properties: {}, required: [] },
249
+ serverName: 'Test Server'
250
+ },
251
+ {
252
+ name: 'listFiles',
253
+ description: 'List files in directory',
254
+ inputSchema: { type: 'object', properties: {}, required: [] },
255
+ serverName: 'Test Server'
256
+ }
257
+ ]
258
+ });
259
+ });
260
+ it('should return empty array if no tools match', async () => {
261
+ // Arrange
262
+ const serverName = 'Test Server';
263
+ const serverId = '1';
264
+ const mockTools = [
265
+ {
266
+ name: 'unmatchedTool',
267
+ description: 'This should not match',
268
+ inputSchema: { type: 'object', properties: {}, required: [] },
269
+ serverName: 'Test Server'
270
+ },
271
+ {
272
+ name: 'anotherUnmatchedTool',
273
+ description: 'This should also not match',
274
+ inputSchema: { type: 'object', properties: {}, required: [] },
275
+ serverName: 'Test Server'
276
+ }
277
+ ];
278
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
279
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
280
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
281
+ type: 'stdio',
282
+ command: 'test-command',
283
+ args: [],
284
+ enabled: true,
285
+ allowedTools: [],
286
+ timeout: 30000
287
+ });
288
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
289
+ // Act
290
+ const result = await hubToolsService.findToolsInServer({
291
+ serverName,
292
+ pattern: 'File',
293
+ searchIn: 'both',
294
+ caseSensitive: false
295
+ });
296
+ // Assert
297
+ expect(result).toEqual({
298
+ serverName,
299
+ tools: []
300
+ });
301
+ });
302
+ });
303
+ describe('getTool', () => {
304
+ it('should return tool details from server', async () => {
305
+ // Arrange
306
+ const serverName = 'Test Server';
307
+ const serverId = '1';
308
+ const toolName = 'readFile';
309
+ const mockTools = [
310
+ {
311
+ name: 'readFile',
312
+ description: 'Read file contents',
313
+ inputSchema: { type: 'object' },
314
+ serverName: 'Test Server'
315
+ },
316
+ {
317
+ name: 'writeFile',
318
+ description: 'Write file contents',
319
+ inputSchema: { type: 'object' },
320
+ serverName: 'Test Server'
321
+ }
322
+ ];
323
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
324
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
325
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
326
+ type: 'stdio',
327
+ command: 'test-command',
328
+ args: [],
329
+ enabled: true,
330
+ allowedTools: [],
331
+ timeout: 30000
332
+ });
333
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
334
+ // Act
335
+ const tool = await hubToolsService.getTool({ serverName, toolName });
336
+ // Assert
337
+ expect(tool).toEqual(mockTools[0]);
338
+ });
339
+ it('should return undefined if tool not found', async () => {
340
+ // Arrange
341
+ const serverName = 'Test Server';
342
+ const serverId = '1';
343
+ const toolName = 'nonExistentTool';
344
+ const mockTools = [
345
+ {
346
+ name: 'readFile',
347
+ description: 'Read file contents',
348
+ inputSchema: { type: 'object' },
349
+ serverName: 'Test Server'
350
+ }
351
+ ];
352
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
353
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
354
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
355
+ type: 'stdio',
356
+ command: 'test-command',
357
+ args: [],
358
+ enabled: true,
359
+ allowedTools: [],
360
+ timeout: 30000
361
+ });
362
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
363
+ // Act
364
+ const tool = await hubToolsService.getTool({ serverName, toolName });
365
+ // Assert
366
+ expect(tool).toBeUndefined();
367
+ });
368
+ });
369
+ describe('callTool', () => {
370
+ it('should call tool on server with arguments', async () => {
371
+ // Arrange
372
+ const serverName = 'Test Server';
373
+ const serverId = '1';
374
+ const toolName = 'readFile';
375
+ const toolArgs = { path: '/test/file.txt' };
376
+ const expectedResult = { content: 'Test file content' };
377
+ const mockInstance = { id: serverId, timestamp: Date.now(), hash: 'hash1' };
378
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
379
+ vi.mocked(hubManager.getServerByName).mockReturnValue({
380
+ type: 'stdio',
381
+ command: 'test-command',
382
+ args: [],
383
+ enabled: true,
384
+ allowedTools: [],
385
+ timeout: 30000
386
+ });
387
+ vi.mocked(mcpConnectionManager.callTool).mockResolvedValue(expectedResult);
388
+ // Act
389
+ const result = await hubToolsService.callTool({ serverName, toolName, toolArgs });
390
+ // Assert
391
+ expect(result).toEqual(expectedResult);
392
+ expect(mcpConnectionManager.callTool).toHaveBeenCalledWith(serverId, toolName, toolArgs);
393
+ });
394
+ it('should throw error if server not found when calling tool', async () => {
395
+ // Arrange
396
+ const serverName = 'Non-existent Server';
397
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([]);
398
+ vi.mocked(hubManager.getServerByName).mockReturnValue(undefined);
399
+ // Act & Assert
400
+ await expect(hubToolsService.callTool({ serverName, toolName: 'readFile', toolArgs: {} })).rejects.toThrow(`Server not found: ${serverName}`);
401
+ });
402
+ });
403
+ describe('listAllTools', () => {
404
+ it('should list all tools from all servers', async () => {
405
+ // Arrange
406
+ const mockServers = [
407
+ {
408
+ name: 'Server 1',
409
+ config: {
410
+ type: 'stdio',
411
+ command: 'test-command',
412
+ args: [],
413
+ enabled: true,
414
+ allowedTools: [],
415
+ timeout: 30000
416
+ }
417
+ },
418
+ {
419
+ name: 'Server 2',
420
+ config: {
421
+ type: 'sse',
422
+ url: 'http://example.com',
423
+ args: [],
424
+ enabled: true,
425
+ allowedTools: [],
426
+ timeout: 30000
427
+ }
428
+ }
429
+ ];
430
+ const mockServerInstances = {
431
+ 'Server 1': [{ id: '1', timestamp: Date.now(), hash: 'hash1' }],
432
+ 'Server 2': [{ id: '2', timestamp: Date.now(), hash: 'hash2' }]
433
+ };
434
+ const mockTools = [
435
+ {
436
+ name: 'readFile',
437
+ description: 'Read file contents',
438
+ inputSchema: { type: 'object', properties: {}, required: [] },
439
+ serverName: 'Server 1'
440
+ },
441
+ {
442
+ name: 'writeFile',
443
+ description: 'Write file contents',
444
+ inputSchema: { type: 'object', properties: {}, required: [] },
445
+ serverName: 'Server 1'
446
+ }
447
+ ];
448
+ vi.mocked(hubManager.getAllServers).mockReturnValue(mockServers);
449
+ vi.mocked(hubManager.getServerInstanceByName).mockImplementation((name) => mockServerInstances[name]);
450
+ vi.mocked(hubManager.getServerByName).mockImplementation((name) => mockServers.find((s) => s.name === name)?.config);
451
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
452
+ // Act
453
+ const allTools = await hubToolsService.listAllTools();
454
+ // Assert - System tools under mcp-hub-lite
455
+ expect(allTools).toHaveProperty('mcp-hub-lite');
456
+ expect(Array.isArray(allTools['mcp-hub-lite'].tools)).toBe(true);
457
+ // Assert system tools
458
+ const systemToolNames = allTools['mcp-hub-lite'].tools.map((t) => t.name);
459
+ expect(systemToolNames).toContain('list_servers');
460
+ expect(systemToolNames).toContain('find_servers');
461
+ expect(systemToolNames).toContain('list_all_tools_in_server');
462
+ expect(systemToolNames).toContain('find_tools_in_server');
463
+ expect(systemToolNames).toContain('get_tool');
464
+ expect(systemToolNames).toContain('call_tool');
465
+ expect(systemToolNames).toContain('find_tools');
466
+ // Assert server tools - should have only name and description
467
+ expect(allTools['Server 1'].tools).toEqual(mockTools);
468
+ expect(allTools['Server 2'].tools).toEqual(mockTools);
469
+ });
470
+ });
471
+ describe('findTools', () => {
472
+ it('should find tools matching pattern across all servers', async () => {
473
+ // Arrange
474
+ const mockTools = {
475
+ 'Server 1': {
476
+ tools: [
477
+ { name: 'readFile', description: 'Read file contents', serverName: 'Server 1' },
478
+ { name: 'writeFile', description: 'Write file contents', serverName: 'Server 1' }
479
+ ]
480
+ },
481
+ 'Server 2': {
482
+ tools: [
483
+ { name: 'listFiles', description: 'List files in directory', serverName: 'Server 2' }
484
+ ]
485
+ }
486
+ };
487
+ vi.spyOn(hubToolsService, 'listAllTools').mockResolvedValue(mockTools);
488
+ // Act
489
+ const results = await hubToolsService.findTools({
490
+ pattern: 'File',
491
+ searchIn: 'both',
492
+ caseSensitive: false
493
+ });
494
+ // Assert
495
+ expect(results).toEqual(mockTools);
496
+ });
497
+ });
498
+ describe('listResources', () => {
499
+ it('should return empty array when no servers are connected', async () => {
500
+ // Arrange
501
+ vi.mocked(hubManager.getAllServers).mockReturnValue([]);
502
+ // Act
503
+ const resources = await hubToolsService.listResources();
504
+ // Assert
505
+ expect(resources).toEqual([]);
506
+ expect(hubManager.getAllServers).toHaveBeenCalledTimes(1);
507
+ });
508
+ it('should return dynamic resources for connected servers', async () => {
509
+ // Arrange
510
+ const mockServers = [
511
+ {
512
+ name: 'Test Server',
513
+ config: {
514
+ type: 'stdio',
515
+ command: 'test-command',
516
+ args: [],
517
+ enabled: true,
518
+ allowedTools: [],
519
+ timeout: 30000
520
+ }
521
+ }
522
+ ];
523
+ const mockInstance = {
524
+ id: '1',
525
+ timestamp: Date.now(),
526
+ hash: 'hash1',
527
+ status: 'online',
528
+ lastHeartbeat: Date.now(),
529
+ uptime: 1000
530
+ };
531
+ vi.mocked(hubManager.getAllServers).mockReturnValue(mockServers);
532
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
533
+ vi.mocked(hubManager.getServerByName).mockReturnValue(mockServers[0].config);
534
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue([
535
+ { name: 'testTool', description: 'Test tool', serverName: 'test-server' }
536
+ ]);
537
+ vi.mocked(mcpConnectionManager.getResources).mockReturnValue([
538
+ { uri: 'test://resource', name: 'Test Resource' }
539
+ ]);
540
+ // Act
541
+ const resources = await hubToolsService.listResources();
542
+ // Assert
543
+ expect(resources).toHaveLength(3);
544
+ expect(resources[0]).toEqual({
545
+ uri: 'hub://servers/Test Server',
546
+ name: 'Server: Test Server',
547
+ description: 'Connected MCP server: Test Server',
548
+ mimeType: 'application/json',
549
+ serverId: '1'
550
+ });
551
+ expect(resources[1]).toEqual({
552
+ uri: 'hub://servers/Test Server/tools',
553
+ name: 'Tools: Test Server',
554
+ description: '1 tools available from Test Server',
555
+ mimeType: 'application/json',
556
+ serverId: '1'
557
+ });
558
+ expect(resources[2]).toEqual({
559
+ uri: 'hub://servers/Test Server/resources',
560
+ name: 'Resources: Test Server',
561
+ description: '1 resources available from Test Server',
562
+ mimeType: 'application/json',
563
+ serverId: '1'
564
+ });
565
+ });
566
+ });
567
+ describe('readResource', () => {
568
+ it('should throw error for invalid URI format', async () => {
569
+ // Act & Assert
570
+ await expect(hubToolsService.readResource('invalid-uri')).rejects.toThrow('Invalid Hub resource URI');
571
+ await expect(hubToolsService.readResource('hub://invalid')).rejects.toThrow('Invalid Hub resource URI format');
572
+ });
573
+ it('should throw error for non-existent server', async () => {
574
+ // Arrange
575
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([]);
576
+ // Act & Assert
577
+ await expect(hubToolsService.readResource('hub://servers/NonExistent')).rejects.toThrow('Server not found or not connected');
578
+ });
579
+ it('should return server metadata for server URI', async () => {
580
+ // Arrange
581
+ const serverName = 'Test Server';
582
+ const mockInstance = {
583
+ id: '1',
584
+ timestamp: Date.now(),
585
+ hash: 'hash1',
586
+ status: 'online',
587
+ lastHeartbeat: Date.now(),
588
+ uptime: 1000
589
+ };
590
+ const mockConfig = {
591
+ type: 'stdio',
592
+ command: 'test-command',
593
+ args: [],
594
+ enabled: true,
595
+ allowedTools: [],
596
+ timeout: 30000,
597
+ tags: { env: 'test' }
598
+ };
599
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
600
+ vi.mocked(hubManager.getServerByName).mockReturnValue(mockConfig);
601
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue([
602
+ { name: 'testTool', serverName: 'test-server' }
603
+ ]);
604
+ vi.mocked(mcpConnectionManager.getResources).mockReturnValue([
605
+ { uri: 'test://resource', name: 'Test Resource' }
606
+ ]);
607
+ // Act
608
+ const result = await hubToolsService.readResource(`hub://servers/${serverName}`);
609
+ // Assert
610
+ expect(result).toEqual({
611
+ name: serverName,
612
+ status: 'online',
613
+ toolsCount: 1,
614
+ resourcesCount: 1,
615
+ tags: { env: 'test' },
616
+ lastHeartbeat: mockInstance.lastHeartbeat,
617
+ uptime: mockInstance.uptime
618
+ });
619
+ });
620
+ it('should return tools list for tools URI', async () => {
621
+ // Arrange
622
+ const serverName = 'Test Server';
623
+ const mockInstance = {
624
+ id: '1',
625
+ timestamp: Date.now(),
626
+ hash: 'hash1',
627
+ status: 'online',
628
+ lastHeartbeat: Date.now(),
629
+ uptime: 1000
630
+ };
631
+ const mockTools = [{ name: 'testTool', description: 'Test tool', serverName: 'test-server' }];
632
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
633
+ vi.mocked(mcpConnectionManager.getTools).mockReturnValue(mockTools);
634
+ // Act
635
+ const result = await hubToolsService.readResource(`hub://servers/${serverName}/tools`);
636
+ // Assert
637
+ expect(result).toEqual(mockTools);
638
+ });
639
+ it('should return resources list for resources URI', async () => {
640
+ // Arrange
641
+ const serverName = 'Test Server';
642
+ const mockInstance = {
643
+ id: '1',
644
+ timestamp: Date.now(),
645
+ hash: 'hash1',
646
+ status: 'online',
647
+ lastHeartbeat: Date.now(),
648
+ uptime: 1000
649
+ };
650
+ const mockResources = [{ uri: 'test://resource', name: 'Test Resource' }];
651
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
652
+ vi.mocked(mcpConnectionManager.getResources).mockReturnValue(mockResources);
653
+ // Act
654
+ const result = await hubToolsService.readResource(`hub://servers/${serverName}/resources`);
655
+ // Assert
656
+ expect(result).toEqual(mockResources);
657
+ });
658
+ it('should throw error for unknown resource type', async () => {
659
+ // Arrange
660
+ const serverName = 'Test Server';
661
+ const mockInstance = {
662
+ id: '1',
663
+ timestamp: Date.now(),
664
+ hash: 'hash1',
665
+ status: 'online',
666
+ lastHeartbeat: Date.now(),
667
+ uptime: 1000
668
+ };
669
+ vi.mocked(hubManager.getServerInstanceByName).mockReturnValue([mockInstance]);
670
+ // Act & Assert
671
+ await expect(hubToolsService.readResource(`hub://servers/${serverName}/unknown`)).rejects.toThrow('Unknown resource type');
672
+ });
673
+ });
674
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search-cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-cache.test.d.ts","sourceRoot":"","sources":["../../../../../../tests/unit/services/search/search-cache.test.ts"],"names":[],"mappings":""}