@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,462 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import os from 'node:os';
5
+ import { Logger, logWithColor } from '../../../src/utils/logger.js';
6
+ import { setJsonPrettyConfigGetter, setDevModeEnabled } from '../../../src/utils/json-utils.js';
7
+ describe('Logger', () => {
8
+ let logger;
9
+ let tempLogDir;
10
+ beforeEach(() => {
11
+ // Create temporary log directory
12
+ tempLogDir = path.join(os.tmpdir(), `logger-test-${Date.now()}`);
13
+ fs.mkdirSync(tempLogDir, { recursive: true });
14
+ // Reset config getter
15
+ setJsonPrettyConfigGetter(null);
16
+ // Reset dev mode flag
17
+ setDevModeEnabled(false);
18
+ });
19
+ afterEach(() => {
20
+ // Clean up temporary directory
21
+ if (fs.existsSync(tempLogDir)) {
22
+ fs.rmSync(tempLogDir, { recursive: true, force: true });
23
+ }
24
+ // Clean up mocks
25
+ vi.restoreAllMocks();
26
+ });
27
+ it('should create logger with default level', () => {
28
+ logger = new Logger();
29
+ expect(logger).toBeDefined();
30
+ // Note: Since logger is a private property, we cannot access it directly, but we can test through behavior
31
+ });
32
+ it('should create logger with specified level', () => {
33
+ logger = new Logger('debug');
34
+ expect(logger).toBeDefined();
35
+ });
36
+ it('should set log level correctly', () => {
37
+ logger = new Logger('info');
38
+ logger.setLevel('debug');
39
+ // Verify level setting (via internal method simulation)
40
+ const shouldLogSpy = vi.spyOn(logger, 'shouldLog');
41
+ logger.shouldLog('debug');
42
+ expect(shouldLogSpy).toHaveBeenCalledWith('debug');
43
+ });
44
+ it('should format timestamp correctly', () => {
45
+ logger = new Logger();
46
+ const testDate = new Date('2025-12-01T10:30:45.123Z');
47
+ const formatted = logger.formatTimestamp(testDate);
48
+ // Verify format is correct, but don't hardcode specific time values (timezone may affect)
49
+ expect(formatted).toMatch(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/);
50
+ });
51
+ it('should format log level correctly', () => {
52
+ logger = new Logger();
53
+ expect(logger.formatLogLevel('debug')).toBe('DBG');
54
+ expect(logger.formatLogLevel('info')).toBe('INF');
55
+ expect(logger.formatLogLevel('warn')).toBe('WRN');
56
+ expect(logger.formatLogLevel('error')).toBe('ERR');
57
+ });
58
+ it('should format PID correctly', () => {
59
+ logger = new Logger();
60
+ expect(logger.formatPid(123)).toBe('PID: 123');
61
+ expect(logger.formatPid(123456)).toBe('PID: 123456');
62
+ expect(logger.formatPid(123456789)).toBe('PID:12345678'); // Test long PID truncation
63
+ });
64
+ it('should determine if message should be logged based on level', () => {
65
+ logger = new Logger('info');
66
+ // info level should log info, warn, error
67
+ expect(logger.shouldLog('info')).toBe(true);
68
+ expect(logger.shouldLog('warn')).toBe(true);
69
+ expect(logger.shouldLog('error')).toBe(true);
70
+ expect(logger.shouldLog('debug')).toBe(false);
71
+ // debug level should log all
72
+ logger.setLevel('debug');
73
+ expect(logger.shouldLog('debug')).toBe(true);
74
+ });
75
+ it('should create colored log message with server name', () => {
76
+ logger = new Logger();
77
+ const message = logger.createColoredLogMessage('info', 'test message', {
78
+ pid: 123,
79
+ serverName: 'test-server'
80
+ });
81
+ // Verify message contains correct components (don't verify specific timestamp)
82
+ expect(message).toMatch(/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\]/);
83
+ expect(message).toContain('[INF]');
84
+ expect(message).toContain('[PID: 123]');
85
+ expect(message).toContain('[test-server]');
86
+ expect(message).toContain('test message');
87
+ });
88
+ it('should create plain log message without server name', () => {
89
+ logger = new Logger();
90
+ const message = logger.createLogMessage('info', 'test message', {
91
+ pid: 123
92
+ });
93
+ // Verify message contains correct components (don't verify specific timestamp)
94
+ expect(message).toMatch(/\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\]/);
95
+ expect(message).toContain('[INF]');
96
+ expect(message).toContain('[PID: 123]');
97
+ expect(message).toContain('[mcp-hub]');
98
+ expect(message).toContain('test message');
99
+ });
100
+ it('should format error objects correctly', () => {
101
+ logger = new Logger();
102
+ // Test Error object
103
+ const error = new Error('Test error');
104
+ error.stack = 'Error: Test error\n at test (test.js:1:1)\n at another (test.js:2:2)';
105
+ const formatted = logger.formatError(error);
106
+ expect(formatted).toContain('Test error');
107
+ expect(formatted).toContain('at test (test.js:1:1)');
108
+ // Test non-Error object
109
+ const stringError = 'string error';
110
+ const formattedString = logger.formatError(stringError);
111
+ expect(formattedString).toBe('string error');
112
+ });
113
+ it('should enable dev log when DEV_LOG_FILE environment variable is "true"', () => {
114
+ try {
115
+ // Set DEV_LOG_FILE environment variable
116
+ process.env.DEV_LOG_FILE = 'true';
117
+ // Mock fs and path modules to avoid file system operations
118
+ const mkdirSyncSpy = vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
119
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
120
+ const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
121
+ return {
122
+ write: vi.fn(),
123
+ end: vi.fn(),
124
+ close: vi.fn(),
125
+ bytesWritten: 0,
126
+ path: '',
127
+ pending: false,
128
+ writable: true,
129
+ writableEnded: false,
130
+ writableFinished: false,
131
+ writableHighWaterMark: 16384,
132
+ writableLength: 0,
133
+ writableObjectMode: false,
134
+ writableCorked: 0,
135
+ destroyed: false
136
+ // Add other necessary properties...
137
+ };
138
+ });
139
+ logger = new Logger();
140
+ expect(logger.logFileStream).toBeDefined();
141
+ // Verify file system operations were called
142
+ expect(mkdirSyncSpy).toHaveBeenCalled();
143
+ expect(createWriteStreamSpy).toHaveBeenCalled();
144
+ }
145
+ finally {
146
+ // Restore environment variable and mocks
147
+ delete process.env.DEV_LOG_FILE;
148
+ vi.restoreAllMocks();
149
+ }
150
+ });
151
+ it('should enable dev log when DEV_LOG_FILE environment variable is "1"', () => {
152
+ try {
153
+ // Set DEV_LOG_FILE environment variable to "1"
154
+ process.env.DEV_LOG_FILE = '1';
155
+ // Mock fs and path modules to avoid file system operations
156
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
157
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
158
+ vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
159
+ return {
160
+ write: vi.fn(),
161
+ end: vi.fn(),
162
+ close: vi.fn(),
163
+ destroyed: false
164
+ };
165
+ });
166
+ logger = new Logger();
167
+ expect(logger.logFileStream).toBeDefined();
168
+ }
169
+ finally {
170
+ // Restore environment variable and mocks
171
+ delete process.env.DEV_LOG_FILE;
172
+ vi.restoreAllMocks();
173
+ }
174
+ });
175
+ it('should NOT enable dev log when DEV_LOG_FILE environment variable is not set', () => {
176
+ try {
177
+ // Ensure DEV_LOG_FILE is not set
178
+ delete process.env.DEV_LOG_FILE;
179
+ logger = new Logger();
180
+ expect(logger.logFileStream).toBeNull();
181
+ }
182
+ finally {
183
+ // Restore mocks
184
+ vi.restoreAllMocks();
185
+ }
186
+ });
187
+ it('should NOT enable dev log when DEV_LOG_FILE environment variable is other values', () => {
188
+ try {
189
+ // Set DEV_LOG_FILE to a value that should not enable
190
+ process.env.DEV_LOG_FILE = 'false';
191
+ logger = new Logger();
192
+ expect(logger.logFileStream).toBeNull();
193
+ }
194
+ finally {
195
+ // Restore environment variable
196
+ delete process.env.DEV_LOG_FILE;
197
+ vi.restoreAllMocks();
198
+ }
199
+ });
200
+ it('should handle multiple arguments in log methods', () => {
201
+ logger = new Logger('debug');
202
+ // Mock console methods
203
+ const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
204
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
205
+ const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
206
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
207
+ // Test debug method
208
+ logger.debug('test', 'arg1', 'arg2');
209
+ expect(consoleDebugSpy).toHaveBeenCalled();
210
+ // Test info method
211
+ logger.info('test', 'arg1', 'arg2');
212
+ expect(consoleInfoSpy).toHaveBeenCalled();
213
+ // Test warn method
214
+ logger.warn('test', 'arg1', 'arg2');
215
+ expect(consoleWarnSpy).toHaveBeenCalled();
216
+ // Test error method
217
+ logger.error('test', 'arg1', 'arg2');
218
+ expect(consoleErrorSpy).toHaveBeenCalled();
219
+ // Restore console methods
220
+ consoleDebugSpy.mockRestore();
221
+ consoleInfoSpy.mockRestore();
222
+ consoleWarnSpy.mockRestore();
223
+ consoleErrorSpy.mockRestore();
224
+ });
225
+ it('should respect log level filtering', () => {
226
+ logger = new Logger('warn');
227
+ const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
228
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
229
+ const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
230
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
231
+ // debug and info should not be called
232
+ logger.debug('debug message');
233
+ logger.info('info message');
234
+ // warn and error should be called
235
+ logger.warn('warn message');
236
+ logger.error('error message');
237
+ expect(consoleDebugSpy).not.toHaveBeenCalled();
238
+ expect(consoleInfoSpy).not.toHaveBeenCalled();
239
+ expect(consoleWarnSpy).toHaveBeenCalled();
240
+ expect(consoleErrorSpy).toHaveBeenCalled();
241
+ // Restore console methods
242
+ consoleDebugSpy.mockRestore();
243
+ consoleInfoSpy.mockRestore();
244
+ consoleWarnSpy.mockRestore();
245
+ consoleErrorSpy.mockRestore();
246
+ });
247
+ it('should include traceId and spanId in log messages when provided', () => {
248
+ logger = new Logger();
249
+ // Test colored log message
250
+ const coloredMessage = logger.createColoredLogMessage('info', 'test message', {
251
+ pid: 123,
252
+ serverName: 'test-server',
253
+ traceId: '1234567890abcdef1234567890abcdef',
254
+ spanId: 'abcdef1234567890'
255
+ });
256
+ expect(coloredMessage).toContain('[TID:1234567890abcdef1234567890abcdef]');
257
+ expect(coloredMessage).toContain('[SID:abcdef1234567890]');
258
+ // Test plain text log message
259
+ const plainMessage = logger.createLogMessage('info', 'test message', {
260
+ pid: 123,
261
+ serverName: 'test-server',
262
+ traceId: '1234567890abcdef1234567890abcdef',
263
+ spanId: 'abcdef1234567890'
264
+ });
265
+ expect(plainMessage).toContain('[TID:1234567890abcdef1234567890abcdef]');
266
+ expect(plainMessage).toContain('[SID:abcdef1234567890]');
267
+ });
268
+ it('should handle log messages without traceId and spanId', () => {
269
+ logger = new Logger();
270
+ // Test colored log message
271
+ const coloredMessage = logger.createColoredLogMessage('info', 'test message', {
272
+ pid: 123,
273
+ serverName: 'test-server'
274
+ });
275
+ expect(coloredMessage).not.toContain('traceId');
276
+ expect(coloredMessage).not.toContain('spanId');
277
+ // Test plain text log message
278
+ const plainMessage = logger.createLogMessage('info', 'test message', {
279
+ pid: 123,
280
+ serverName: 'test-server'
281
+ });
282
+ expect(plainMessage).not.toContain('traceId');
283
+ expect(plainMessage).not.toContain('spanId');
284
+ });
285
+ it('should include traceId and spanId in serverLog', () => {
286
+ logger = new Logger('info');
287
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
288
+ logger.serverLog('info', 'test-server', 'server message', {
289
+ pid: 456,
290
+ traceId: '1234567890abcdef1234567890abcdef',
291
+ spanId: 'abcdef1234567890'
292
+ });
293
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[TID:1234567890abcdef1234567890abcdef]'));
294
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[SID:abcdef1234567890]'));
295
+ // Restore console methods
296
+ consoleInfoSpy.mockRestore();
297
+ });
298
+ it('should respect log level filtering in serverLog method', () => {
299
+ logger = new Logger('info');
300
+ const consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
301
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
302
+ const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
303
+ const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
304
+ // debug should not be called (because level is info)
305
+ logger.serverLog('debug', 'test-server', 'debug message');
306
+ // info, warn, error should be called
307
+ logger.serverLog('info', 'test-server', 'info message');
308
+ logger.serverLog('warn', 'test-server', 'warn message');
309
+ logger.serverLog('error', 'test-server', 'error message');
310
+ expect(consoleDebugSpy).not.toHaveBeenCalled();
311
+ expect(consoleInfoSpy).toHaveBeenCalled();
312
+ expect(consoleWarnSpy).toHaveBeenCalled();
313
+ expect(consoleErrorSpy).toHaveBeenCalled();
314
+ // Restore console methods
315
+ consoleDebugSpy.mockRestore();
316
+ consoleInfoSpy.mockRestore();
317
+ consoleWarnSpy.mockRestore();
318
+ consoleErrorSpy.mockRestore();
319
+ });
320
+ it('should split multi-line messages in serverLog and log each line individually', () => {
321
+ logger = new Logger('info');
322
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
323
+ const multiLineMessage = 'line 1\nline 2\r\nline 3\n\n \nline 4 (after empty lines)';
324
+ logger.serverLog('info', 'test-server', multiLineMessage);
325
+ // Should log 4 non-empty lines (empty lines and whitespace-only lines should be skipped)
326
+ expect(consoleInfoSpy).toHaveBeenCalledTimes(4);
327
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 1'));
328
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 2'));
329
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 3'));
330
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('line 4 (after empty lines)'));
331
+ consoleInfoSpy.mockRestore();
332
+ });
333
+ it('should handle single-line messages normally in serverLog', () => {
334
+ logger = new Logger('info');
335
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
336
+ logger.serverLog('info', 'test-server', 'single line message');
337
+ expect(consoleInfoSpy).toHaveBeenCalledTimes(1);
338
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('single line message'));
339
+ consoleInfoSpy.mockRestore();
340
+ });
341
+ it('should write multi-line messages to file stream individually', () => {
342
+ logger = new Logger('info');
343
+ // Enable dev log to get a file stream
344
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
345
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
346
+ const writeSpy = vi.fn();
347
+ vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
348
+ return {
349
+ write: writeSpy,
350
+ end: vi.fn(),
351
+ close: vi.fn(),
352
+ destroyed: false
353
+ };
354
+ });
355
+ logger.enableDevLog();
356
+ const multiLineMessage = 'file line 1\nfile line 2\nfile line 3';
357
+ logger.serverLog('info', 'test-server', multiLineMessage);
358
+ // Should write 3 lines to the file stream
359
+ expect(writeSpy).toHaveBeenCalledTimes(3);
360
+ expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 1'));
361
+ expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 2'));
362
+ expect(writeSpy).toHaveBeenCalledWith(expect.stringContaining('file line 3'));
363
+ vi.restoreAllMocks();
364
+ });
365
+ it('should handle logWithColor function with traceId and spanId', () => {
366
+ // Reset logger instance to avoid interference between tests
367
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
368
+ logWithColor('colored message', 'plain message', {
369
+ pid: 123,
370
+ serverName: 'test-server',
371
+ traceId: '1234567890abcdef1234567890abcdef',
372
+ spanId: 'abcdef1234567890'
373
+ });
374
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[TID:1234567890abcdef1234567890abcdef]'));
375
+ expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('[SID:abcdef1234567890]'));
376
+ // Restore console methods
377
+ consoleInfoSpy.mockRestore();
378
+ });
379
+ it('should handle logWithColor function without context', () => {
380
+ // Reset logger instance to avoid interference between tests
381
+ const consoleInfoSpy = vi.spyOn(console, 'info').mockImplementation(() => { });
382
+ logWithColor('colored message', 'plain message');
383
+ expect(consoleInfoSpy).toHaveBeenCalled();
384
+ // Restore console methods
385
+ consoleInfoSpy.mockRestore();
386
+ });
387
+ describe('dev log rotation', () => {
388
+ it('should create devLogRotator when enableDevLog is called', () => {
389
+ // Mock fs modules to avoid file system operations
390
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
391
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
392
+ const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
393
+ return {
394
+ write: vi.fn(),
395
+ end: vi.fn(),
396
+ close: vi.fn(),
397
+ destroyed: false
398
+ };
399
+ });
400
+ logger = new Logger();
401
+ logger.enableDevLog();
402
+ expect(logger.devLogRotator).toBeDefined();
403
+ createWriteStreamSpy.mockRestore();
404
+ });
405
+ it('should use timestamp-based log file naming for dev logs', () => {
406
+ // Mock fs modules
407
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
408
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
409
+ let capturedLogPath = '';
410
+ const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation((path) => {
411
+ capturedLogPath = path;
412
+ return {
413
+ write: vi.fn(),
414
+ end: vi.fn(),
415
+ close: vi.fn(),
416
+ destroyed: false
417
+ };
418
+ });
419
+ logger = new Logger();
420
+ logger.enableDevLog();
421
+ // Verify the log path uses the new timestamp format: dev-server.YYYYMMDD_HHmmSSZZZ.log
422
+ expect(capturedLogPath).toMatch(/dev-server\.\d{8}_\d{9}\.log$/);
423
+ createWriteStreamSpy.mockRestore();
424
+ });
425
+ it('should accept custom rotator config in enableDevLog', () => {
426
+ // Mock fs modules
427
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
428
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
429
+ const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
430
+ return {
431
+ write: vi.fn(),
432
+ end: vi.fn(),
433
+ close: vi.fn(),
434
+ destroyed: false
435
+ };
436
+ });
437
+ logger = new Logger();
438
+ logger.enableDevLog({ rotationAge: '14d' });
439
+ expect(logger.devLogRotator).toBeDefined();
440
+ createWriteStreamSpy.mockRestore();
441
+ });
442
+ it('should not create multiple log streams when enableDevLog is called multiple times', () => {
443
+ // Mock fs modules
444
+ vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
445
+ vi.spyOn(fs, 'existsSync').mockImplementation(() => false);
446
+ const createWriteStreamSpy = vi.spyOn(fs, 'createWriteStream').mockImplementation(() => {
447
+ return {
448
+ write: vi.fn(),
449
+ end: vi.fn(),
450
+ close: vi.fn(),
451
+ destroyed: false
452
+ };
453
+ });
454
+ logger = new Logger();
455
+ logger.enableDevLog();
456
+ logger.enableDevLog(); // Call again
457
+ // createWriteStream should only be called once
458
+ expect(createWriteStreamSpy).toHaveBeenCalledTimes(1);
459
+ createWriteStreamSpy.mockRestore();
460
+ });
461
+ });
462
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-error-handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-error-handler.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/mcp-error-handler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { MCPErrorHandler, MCPHubLiteErrorMap, MCPErrorsMiddleware } from '../../../src/utils/mcp-error-handler.js';
3
+ describe('MCPErrorHandler', () => {
4
+ describe('toMCPError', () => {
5
+ it('should convert Error instance to MCPError', () => {
6
+ const error = new Error('Test error');
7
+ error.stack = 'Error: Test error\n at test (test.js:1:1)';
8
+ error.name = 'TestError';
9
+ const mcpError = MCPErrorHandler.toMCPError(error);
10
+ expect(mcpError).toMatchObject({
11
+ code: -32001,
12
+ message: 'Test error',
13
+ data: {
14
+ originalError: 'Test error',
15
+ timestamp: expect.any(String)
16
+ }
17
+ });
18
+ expect(mcpError['x-mcp']).toMatchObject({
19
+ details: {
20
+ stack: 'Error: Test error\n at test (test.js:1:1)',
21
+ name: 'TestError'
22
+ },
23
+ suggestedActions: ['Check server status', 'Retry request']
24
+ });
25
+ });
26
+ it('should convert CMDError to MCPError with proper mapping', () => {
27
+ const cmdError = {
28
+ code: 6001,
29
+ message: 'Gateway internal error',
30
+ data: null,
31
+ timestamp: '2025-12-01T10:30:00.000Z',
32
+ requestId: 'req-123',
33
+ error: {
34
+ category: 'SYSTEM',
35
+ severity: 'ERROR',
36
+ context: { serverId: 'server-1' }
37
+ }
38
+ };
39
+ const mcpError = MCPErrorHandler.toMCPError(cmdError);
40
+ expect(mcpError.code).toBe(-32001); // mapped from 6001
41
+ expect(mcpError.message).toBe('Gateway internal error');
42
+ expect(mcpError.data).toBeNull();
43
+ expect(mcpError['x-mcp']).toMatchObject({
44
+ details: { serverId: 'server-1' },
45
+ suggestedActions: ['Refer to error details', 'Retry or contact administrator']
46
+ });
47
+ });
48
+ it('should handle unknown error type', () => {
49
+ // Test with a string that is not an Error or CMDError
50
+ const unknownError = 'unknown error string';
51
+ const mcpError = MCPErrorHandler.toMCPError(unknownError);
52
+ expect(mcpError).toMatchObject({
53
+ code: -32001,
54
+ message: 'Unknown error'
55
+ });
56
+ expect(mcpError['x-mcp']).toMatchObject({
57
+ suggestedActions: ['Retry request']
58
+ });
59
+ });
60
+ });
61
+ describe('mapCMDToMCPErrorCode', () => {
62
+ it('should map system errors (1000-1999) to -32001', () => {
63
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1001)).toBe(-32001);
64
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1500)).toBe(-32001);
65
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](1999)).toBe(-32001);
66
+ });
67
+ it('should map security errors (2000-2999) to -32806', () => {
68
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2001)).toBe(-32806);
69
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2500)).toBe(-32806);
70
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](2999)).toBe(-32806);
71
+ });
72
+ it('should map business errors (3000-3999) to -32602', () => {
73
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3001)).toBe(-32602);
74
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3500)).toBe(-32602);
75
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](3999)).toBe(-32602);
76
+ });
77
+ it('should map MCP Hub Lite gateway errors (6000-6999)', () => {
78
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6001)).toBe(-32001);
79
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6002)).toBe(-32002);
80
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6003)).toBe(-32801);
81
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6004)).toBe(-32802);
82
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](6005)).toBe(-32001); // default for unmapped codes
83
+ });
84
+ it('should return default -32001 for unknown error codes', () => {
85
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](9999)).toBe(-32001);
86
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](0)).toBe(-32001);
87
+ expect(MCPErrorHandler['mapCMDToMCPErrorCode'](-1)).toBe(-32001);
88
+ });
89
+ });
90
+ describe('MCPHubLiteErrorMap', () => {
91
+ it('should have correct error code mappings', () => {
92
+ expect(MCPHubLiteErrorMap[6001]).toBe(-32001);
93
+ expect(MCPHubLiteErrorMap[6002]).toBe(-32002);
94
+ expect(MCPHubLiteErrorMap[6003]).toBe(-32801);
95
+ expect(MCPHubLiteErrorMap[6004]).toBe(-32802);
96
+ expect(MCPHubLiteErrorMap[6005]).toBe(-32803);
97
+ });
98
+ });
99
+ describe('MCPErrorsMiddleware', () => {
100
+ it('should handle backend MCP errors and convert non-standard errors', () => {
101
+ const response = {
102
+ jsonrpc: '2.0',
103
+ id: 'test-id',
104
+ error: new Error('Backend error')
105
+ };
106
+ const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
107
+ expect(result.jsonrpc).toBe('2.0');
108
+ expect(result.id).toBe('test-id');
109
+ expect(result.error).toBeDefined();
110
+ expect(result.error.code).toBe(-32001);
111
+ expect(result.error.message).toBe('Backend error');
112
+ });
113
+ it('should return standard MCP errors unchanged', () => {
114
+ const standardMCPError = {
115
+ code: -32801,
116
+ message: 'Tool not found',
117
+ data: { toolName: 'non-existent-tool' }
118
+ };
119
+ const response = {
120
+ jsonrpc: '2.0',
121
+ id: 'test-id',
122
+ error: standardMCPError
123
+ };
124
+ const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
125
+ expect(result).toBe(response); // should be the same object
126
+ });
127
+ it('should return response unchanged when no error', () => {
128
+ const response = {
129
+ jsonrpc: '2.0',
130
+ id: 'test-id',
131
+ result: { success: true }
132
+ };
133
+ const result = MCPErrorsMiddleware.handleBackendMCPErrors(response);
134
+ expect(result).toBe(response); // should be the same object
135
+ });
136
+ });
137
+ describe('isStandardMCPError', () => {
138
+ it('should identify standard MCP errors', () => {
139
+ const standardError = {
140
+ code: -32801,
141
+ message: 'Tool not found'
142
+ };
143
+ const isStandard = MCPErrorsMiddleware['isStandardMCPError'](standardError);
144
+ expect(isStandard).toBe(true);
145
+ });
146
+ it('should reject non-standard errors', () => {
147
+ const nonStandardError = {
148
+ code: 'invalid-code', // not a number
149
+ message: 'Invalid error'
150
+ };
151
+ const isStandard = MCPErrorsMiddleware['isStandardMCPError'](nonStandardError);
152
+ expect(isStandard).toBe(false);
153
+ });
154
+ it('should reject errors without message', () => {
155
+ const invalidError = {
156
+ code: -32801
157
+ // missing message
158
+ };
159
+ const isStandard = MCPErrorsMiddleware['isStandardMCPError'](invalidError);
160
+ expect(isStandard).toBe(false);
161
+ });
162
+ });
163
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request-context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.test.d.ts","sourceRoot":"","sources":["../../../../../tests/unit/utils/request-context.test.ts"],"names":[],"mappings":""}