@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,270 @@
1
+ /**
2
+ * Type guard function to check if an unknown error object is a CMDError.
3
+ * Validates that the object has the required properties of a CMDError.
4
+ *
5
+ * @param error - The error object to validate
6
+ * @returns True if the error is a CMDError, false otherwise
7
+ */
8
+ function isCMDError(error) {
9
+ return (typeof error === 'object' &&
10
+ error !== null &&
11
+ 'code' in error &&
12
+ 'message' in error &&
13
+ 'data' in error &&
14
+ typeof error.code === 'number' &&
15
+ typeof error.message === 'string');
16
+ }
17
+ /**
18
+ * MCP Hub Lite's error code mapping from internal gateway error codes
19
+ * to standard MCP protocol error codes. This mapping ensures compliance
20
+ * with the MCP specification while maintaining internal error categorization.
21
+ *
22
+ * The mapping follows these conventions:
23
+ * - 6001: Gateway internal error → Service unavailable (-32001)
24
+ * - 6002: Connection timeout → Request timeout (-32002)
25
+ * - 6003: Tool not found → MCP tool not found (-32801)
26
+ * - 6004: Tool execution failed → MCP execution failed (-32802)
27
+ * - 6005: Initialization failed → MCP initialization failed (-32803)
28
+ */
29
+ export const MCPHubLiteErrorMap = {
30
+ // Map gateway internal errors to standard MCP error codes
31
+ 6001: -32001, // Gateway internal error -> Service unavailable
32
+ 6002: -32002, // Connection timeout -> Request timeout
33
+ 6003: -32801, // Tool not found -> MCP tool not found
34
+ 6004: -32802, // Tool execution failed -> MCP execution failed
35
+ 6005: -32803 // Initialization failed -> MCP initialization failed
36
+ };
37
+ /**
38
+ * MCPErrorHandler provides standardized error handling and conversion for the MCP Hub Lite system.
39
+ * This class is responsible for converting internal application errors (both native JavaScript Error
40
+ * objects and custom CMDError objects) into standardized MCP protocol error responses that comply
41
+ * with the Model Context Protocol specification.
42
+ *
43
+ * The handler ensures consistent error formatting across the entire system, providing appropriate
44
+ * error codes, messages, and extended metadata that clients can use for proper error handling
45
+ * and user feedback. It supports both generic JavaScript errors and structured CMDError objects
46
+ * with categorized error codes.
47
+ *
48
+ * Usage scenarios include:
49
+ * - Converting backend server errors to MCP-compliant responses
50
+ * - Standardizing error responses from different MCP server implementations
51
+ * - Providing consistent error metadata for client-side error handling
52
+ * - Maintaining compatibility with the MCP protocol specification
53
+ */
54
+ export class MCPErrorHandler {
55
+ /**
56
+ * Converts internal errors to standardized MCP error responses.
57
+ * This method handles both native JavaScript Error objects and custom CMDError objects,
58
+ * mapping them to appropriate MCP error codes and formatting them according to the
59
+ * MCP protocol specification.
60
+ *
61
+ * For native Error objects, it creates a standard MCP error with service unavailable
62
+ * code (-32001) and includes debugging information like stack trace and error name.
63
+ * For CMDError objects, it maps the internal error code ranges to appropriate MCP
64
+ * standard error codes based on error categories (system, security, business, etc.).
65
+ *
66
+ * @param error - The error to convert, either a native Error or CMDError object
67
+ * @returns A standardized MCPError object compliant with the MCP protocol
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Converting a native Error
72
+ * const mcpError = MCPErrorHandler.toMCPError(new Error('Connection failed'));
73
+ *
74
+ * // Converting a CMDError
75
+ * const cmdError: CMDError = { code: 6003, message: 'Tool not found', data: {} };
76
+ * const mcpError = MCPErrorHandler.toMCPError(cmdError);
77
+ * ```
78
+ */
79
+ static toMCPError(error) {
80
+ if (error instanceof Error) {
81
+ // Generic error mapping to standard MCP error
82
+ return {
83
+ code: -32001, // Default to service unavailable
84
+ message: error.message,
85
+ data: {
86
+ originalError: error.message,
87
+ timestamp: new Date().toISOString()
88
+ },
89
+ 'x-mcp': {
90
+ details: {
91
+ stack: error.stack,
92
+ name: error.name
93
+ },
94
+ suggestedActions: ['Check server status', 'Retry request']
95
+ }
96
+ };
97
+ }
98
+ else if (isCMDError(error)) {
99
+ // Map CMD errors to MCP errors
100
+ const mcpCode = this.mapCMDToMCPErrorCode(error.code);
101
+ return {
102
+ code: mcpCode,
103
+ message: error.message,
104
+ data: error.data,
105
+ 'x-mcp': {
106
+ details: error.error?.context,
107
+ suggestedActions: ['Refer to error details', 'Retry or contact administrator']
108
+ }
109
+ };
110
+ }
111
+ // Default MCP error
112
+ return {
113
+ code: -32001,
114
+ message: 'Unknown error',
115
+ 'x-mcp': {
116
+ suggestedActions: ['Retry request']
117
+ }
118
+ };
119
+ }
120
+ /**
121
+ * Maps internal CMD error codes to standardized MCP error codes.
122
+ * This private method implements the core logic for converting categorized
123
+ * internal error codes to appropriate MCP standard error codes based on
124
+ * error type ranges:
125
+ *
126
+ * - 1000-1999: System errors → Service unavailable (-32001)
127
+ * - 2000-2999: Security errors → Authentication/Authorization failed (-32806/-32807)
128
+ * - 3000-3999: Business errors → Invalid parameter (-32602)
129
+ * - 5000-5999: MCP protocol errors → Direct mapping or service unavailable
130
+ * - 6000-6999: Gateway-specific errors → Specific MCP error codes via switch
131
+ *
132
+ * The mapping ensures that internal error categorization is preserved while
133
+ * maintaining compliance with the external MCP protocol standard.
134
+ *
135
+ * @param cmdCode - The internal CMD error code to map
136
+ * @returns The corresponding standardized MCP error code
137
+ *
138
+ * @private
139
+ */
140
+ static mapCMDToMCPErrorCode(cmdCode) {
141
+ // System error mapping
142
+ if (cmdCode >= 1000 && cmdCode <= 1999) {
143
+ return -32001; // Service unavailable
144
+ }
145
+ // Security error mapping
146
+ if (cmdCode >= 2000 && cmdCode <= 2999) {
147
+ return -32806; // Authentication failed or -32807 Authorization failed
148
+ }
149
+ // Business error mapping
150
+ if (cmdCode >= 3000 && cmdCode <= 3999) {
151
+ return -32602; // Invalid parameter (typically used for business validation errors)
152
+ }
153
+ // MCP protocol errors, use standard codes directly
154
+ if (cmdCode >= 5000 && cmdCode <= 5999) {
155
+ // If it's a standard MCP error code, return directly
156
+ if (cmdCode >= 5800 && cmdCode <= 5815) {
157
+ // Corresponds to -328xx range
158
+ return -(32900 - (cmdCode - 5800));
159
+ }
160
+ return -32001; // Default
161
+ }
162
+ // Gateway-specific error code mapping
163
+ if (cmdCode >= 6000 && cmdCode <= 6999) {
164
+ switch (cmdCode) {
165
+ case 6001:
166
+ return -32001; // Service unavailable
167
+ case 6002:
168
+ return -32002; // Request timeout
169
+ case 6003:
170
+ return -32801; // Tool not found
171
+ case 6004:
172
+ return -32802; // Execution failed
173
+ default:
174
+ return -32001;
175
+ }
176
+ }
177
+ return -32001; // Default MCP error code
178
+ }
179
+ }
180
+ /**
181
+ * MCPErrorsMiddleware provides middleware functionality for handling and normalizing
182
+ * error responses from backend MCP servers. This class acts as an intermediary layer
183
+ * that ensures all error responses conform to the standard MCP protocol format,
184
+ * regardless of how the backend server originally formatted its errors.
185
+ *
186
+ * The middleware intercepts JSON-RPC responses containing errors and validates
187
+ * whether they already comply with the MCP error standard. If they don't, it
188
+ * converts them using the MCPErrorHandler to ensure consistent error formatting
189
+ * across all connected MCP servers.
190
+ *
191
+ * This is particularly useful when integrating with various MCP server implementations
192
+ * that may have different error handling conventions, ensuring that clients receive
193
+ * standardized error responses regardless of the underlying server implementation.
194
+ */
195
+ export class MCPErrorsMiddleware {
196
+ /**
197
+ * Handles and normalizes error responses from backend MCP servers.
198
+ * This method processes JSON-RPC responses and ensures that any error objects
199
+ * are converted to the standard MCP error format if they aren't already compliant.
200
+ *
201
+ * The method performs the following steps:
202
+ * 1. Checks if the response contains an error field
203
+ * 2. Validates if the error is already in standard MCP format
204
+ * 3. If not standard, converts the error to MCP format using MCPErrorHandler
205
+ * 4. Returns the normalized response with standardized error formatting
206
+ *
207
+ * Non-error responses are returned unchanged to maintain performance.
208
+ *
209
+ * @param response - The raw response from a backend MCP server
210
+ * @returns The response with standardized error formatting if applicable, otherwise the original response
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * // Handle a response with a non-standard error
215
+ * const rawResponse = { jsonrpc: '2.0', id: 1, error: new Error('Connection failed') };
216
+ * const normalizedResponse = MCPErrorsMiddleware.handleBackendMCPErrors(rawResponse);
217
+ * // normalizedResponse.error will be in standard MCP format
218
+ * ```
219
+ */
220
+ static handleBackendMCPErrors(response) {
221
+ if (typeof response === 'object' && response !== null && 'error' in response) {
222
+ const rpcResponse = response;
223
+ // If it's already in standard MCP error format, return directly
224
+ if (this.isStandardMCPError(rpcResponse.error)) {
225
+ return response;
226
+ }
227
+ // Ensure error is of type Error or CMDError
228
+ let errorToConvert;
229
+ if (rpcResponse.error instanceof Error) {
230
+ errorToConvert = rpcResponse.error;
231
+ }
232
+ else if (isCMDError(rpcResponse.error)) {
233
+ errorToConvert = rpcResponse.error;
234
+ }
235
+ else {
236
+ // If neither, create a generic error
237
+ errorToConvert = new Error(typeof rpcResponse.error === 'object' && rpcResponse.error !== null
238
+ ? rpcResponse.error.message || 'Unknown error'
239
+ : String(rpcResponse.error));
240
+ }
241
+ // Otherwise convert non-standard errors to standard format
242
+ return {
243
+ jsonrpc: '2.0',
244
+ error: MCPErrorHandler.toMCPError(errorToConvert),
245
+ id: rpcResponse.id
246
+ };
247
+ }
248
+ return response;
249
+ }
250
+ /**
251
+ * Type guard function to check if an error object conforms to the standard MCP error format.
252
+ * This private method validates that the error object has the required properties
253
+ * (code as number, message as string) and optional data property according to
254
+ * the MCP specification.
255
+ *
256
+ * @param error - The error object to validate
257
+ * @returns True if the error conforms to MCP standard format, false otherwise
258
+ *
259
+ * @private
260
+ */
261
+ static isStandardMCPError(error) {
262
+ return (typeof error === 'object' &&
263
+ error !== null &&
264
+ 'code' in error &&
265
+ 'message' in error &&
266
+ typeof error.code === 'number' &&
267
+ typeof error.message === 'string' &&
268
+ ('data' in error ? error.data !== undefined : true));
269
+ }
270
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Port occupancy checker utility
3
+ * Checks if a port is in use and attempts to identify the occupying process
4
+ */
5
+ export interface PortCheckResult {
6
+ inUse: boolean;
7
+ pid?: number;
8
+ processName?: string;
9
+ commandLine?: string;
10
+ isSelfProject?: boolean;
11
+ }
12
+ /**
13
+ * Check if port is in use
14
+ */
15
+ export declare function checkPort(port: number): Promise<PortCheckResult>;
16
+ //# sourceMappingURL=port-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-checker.d.ts","sourceRoot":"","sources":["../../../../src/utils/port-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAatE"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Port occupancy checker utility
3
+ * Checks if a port is in use and attempts to identify the occupying process
4
+ */
5
+ import { exec } from 'child_process';
6
+ import { promisify } from 'util';
7
+ import { PidManager } from '../pid/manager.js';
8
+ const execAsync = promisify(exec);
9
+ /**
10
+ * Check if port is in use
11
+ */
12
+ export async function checkPort(port) {
13
+ try {
14
+ const platform = process.platform;
15
+ if (platform === 'win32') {
16
+ return await checkPortWindows(port);
17
+ }
18
+ else {
19
+ return await checkPortUnix(port);
20
+ }
21
+ }
22
+ catch {
23
+ // Return not in use on check failure (safe default)
24
+ return { inUse: false };
25
+ }
26
+ }
27
+ /**
28
+ * Checks if a specific port is in use on Windows platform.
29
+ *
30
+ * This function uses the Windows `netstat` command to identify processes that are
31
+ * listening on the specified port. It parses the netstat output to extract the
32
+ * process ID (PID) and then retrieves detailed process information using WMIC.
33
+ *
34
+ * The function specifically looks for connections in the "LISTENING" state and
35
+ * matches the local address to ensure it's the exact port being checked.
36
+ *
37
+ * @param port - The port number to check for occupancy (e.g., 7788)
38
+ * @returns {Promise<PortCheckResult>} A promise that resolves to a PortCheckResult object
39
+ * containing information about whether the port is in use, the PID of the
40
+ * occupying process, process name, command line, and whether it's the current project
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const result = await checkPortWindows(7788);
45
+ * if (result.inUse) {
46
+ * console.log(`Port 7788 is used by PID ${result.pid} (${result.processName})`);
47
+ * }
48
+ * ```
49
+ */
50
+ async function checkPortWindows(port) {
51
+ try {
52
+ // Use netstat to find the process occupying the port
53
+ const { stdout } = await execAsync(`netstat -ano | findstr :${port}`);
54
+ if (!stdout.trim()) {
55
+ return { inUse: false };
56
+ }
57
+ // Parse netstat output to extract PID
58
+ const lines = stdout.trim().split('\n');
59
+ for (const line of lines) {
60
+ const parts = line.trim().split(/\s+/);
61
+ const localAddress = parts[1];
62
+ const state = parts[3];
63
+ const pid = parseInt(parts[4], 10);
64
+ // Check if it's in LISTENING state and is the target port
65
+ if (state === 'LISTENING' && localAddress.endsWith(`:${port}`)) {
66
+ // Get process details
67
+ const processInfo = await getProcessInfoWindows(pid);
68
+ // Check if it's the current project's process
69
+ const isSelfProject = await isSelfProjectProcess(pid, processInfo.commandLine);
70
+ return {
71
+ inUse: true,
72
+ pid,
73
+ processName: processInfo.processName,
74
+ commandLine: processInfo.commandLine,
75
+ isSelfProject
76
+ };
77
+ }
78
+ }
79
+ return { inUse: false };
80
+ }
81
+ catch {
82
+ return { inUse: false };
83
+ }
84
+ }
85
+ /**
86
+ * Checks if a specific port is in use on Unix platforms (Linux, macOS).
87
+ *
88
+ * This function uses the `lsof` (list open files) command to identify processes that are
89
+ * listening on the specified port. It filters for TCP connections in LISTEN state and
90
+ * extracts the process ID (PID) from the output.
91
+ *
92
+ * After identifying the PID, it retrieves detailed process information using the `ps` command
93
+ * to get the process name and full command line arguments.
94
+ *
95
+ * @param port - The port number to check for occupancy (e.g., 7788)
96
+ * @returns {Promise<PortCheckResult>} A promise that resolves to a PortCheckResult object
97
+ * containing information about whether the port is in use, the PID of the
98
+ * occupying process, process name, command line, and whether it's the current project
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const result = await checkPortUnix(7788);
103
+ * if (result.inUse) {
104
+ * console.log(`Port 7788 is used by PID ${result.pid} (${result.processName})`);
105
+ * }
106
+ * ```
107
+ */
108
+ async function checkPortUnix(port) {
109
+ try {
110
+ // Use lsof to find the process occupying the port
111
+ const { stdout } = await execAsync(`lsof -i :${port} -sTCP:LISTEN -t`);
112
+ if (!stdout.trim()) {
113
+ return { inUse: false };
114
+ }
115
+ const pid = parseInt(stdout.trim().split('\n')[0], 10);
116
+ // Get process details
117
+ const processInfo = await getProcessInfoUnix(pid);
118
+ // Check if it's the current project's process
119
+ const isSelfProject = await isSelfProjectProcess(pid, processInfo.commandLine);
120
+ return {
121
+ inUse: true,
122
+ pid,
123
+ processName: processInfo.processName,
124
+ commandLine: processInfo.commandLine,
125
+ isSelfProject
126
+ };
127
+ }
128
+ catch {
129
+ return { inUse: false };
130
+ }
131
+ }
132
+ /**
133
+ * Retrieves detailed process information for a given PID on Windows.
134
+ *
135
+ * This function uses the Windows Management Instrumentation Command-line (WMIC) tool
136
+ * to query process details including the process name and full command line arguments.
137
+ * It parses the WMIC output to extract the relevant information and handles potential
138
+ * errors gracefully by returning default values.
139
+ *
140
+ * @param pid - The process ID to query for information
141
+ * @returns {Promise<{ processName: string; commandLine: string }>} A promise that resolves to an object
142
+ * containing the process name and command line arguments, or default values if the query fails
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * const info = await getProcessInfoWindows(12345);
147
+ * console.log(`Process: ${info.processName}`);
148
+ * console.log(`Command: ${info.commandLine}`);
149
+ * ```
150
+ */
151
+ async function getProcessInfoWindows(pid) {
152
+ try {
153
+ // Use wmic to get process details
154
+ const { stdout } = await execAsync(`wmic process where ProcessId=${pid} get Name,CommandLine /format:list`);
155
+ const lines = stdout.split('\n').filter((line) => line.trim());
156
+ let processName = 'Unknown';
157
+ let commandLine = '';
158
+ for (const line of lines) {
159
+ if (line.startsWith('CommandLine=')) {
160
+ commandLine = line.substring('CommandLine='.length).trim();
161
+ }
162
+ else if (line.startsWith('Name=')) {
163
+ processName = line.substring('Name='.length).trim();
164
+ }
165
+ }
166
+ return { processName, commandLine };
167
+ }
168
+ catch {
169
+ return { processName: 'Unknown', commandLine: '' };
170
+ }
171
+ }
172
+ /**
173
+ * Retrieves detailed process information for a given PID on Unix platforms (Linux, macOS).
174
+ *
175
+ * This function uses the `ps` (process status) command to query process details including
176
+ * the process name (comm) and full command line arguments (args). It parses the ps output
177
+ * to extract the relevant information and handles potential errors gracefully by returning
178
+ * default values.
179
+ *
180
+ * @param pid - The process ID to query for information
181
+ * @returns {Promise<{ processName: string; commandLine: string }>} A promise that resolves to an object
182
+ * containing the process name and command line arguments, or default values if the query fails
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * const info = await getProcessInfoUnix(12345);
187
+ * console.log(`Process: ${info.processName}`);
188
+ * console.log(`Command: ${info.commandLine}`);
189
+ * ```
190
+ */
191
+ async function getProcessInfoUnix(pid) {
192
+ try {
193
+ // Use ps to get process details
194
+ const { stdout } = await execAsync(`ps -p ${pid} -o comm=,args=`);
195
+ const parts = stdout.trim().split(/\s+/);
196
+ const processName = parts[0] || 'Unknown';
197
+ const commandLine = stdout.trim();
198
+ return { processName, commandLine };
199
+ }
200
+ catch {
201
+ return { processName: 'Unknown', commandLine: '' };
202
+ }
203
+ }
204
+ /**
205
+ * Determines whether a given process belongs to the current MCP Hub Lite project.
206
+ *
207
+ * This function performs two checks to identify if a process is part of the current project:
208
+ * 1. **PID File Check**: Compares the provided PID with the PID stored in the project's PID file
209
+ * 2. **Command Line Signature Check**: Searches for project-specific signatures in the command line
210
+ *
211
+ * The function uses a list of project signatures including the project name 'mcp-hub-lite',
212
+ * the compiled entry file path 'dist/server/src/index.js', and the source entry file 'src/index.ts'.
213
+ *
214
+ * @param pid - The process ID to check
215
+ * @param commandLine - The full command line used to start the process
216
+ * @returns {Promise<boolean>} A promise that resolves to true if the process belongs to the current project, false otherwise
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * const isSelf = await isSelfProjectProcess(12345, 'node dist/server/src/index.js');
221
+ * if (isSelf) {
222
+ * console.log('This is our project process');
223
+ * }
224
+ * ```
225
+ */
226
+ async function isSelfProjectProcess(pid, commandLine) {
227
+ // Check 1: Check if the PID recorded in the PID file matches
228
+ const savedPid = PidManager.getPid();
229
+ if (savedPid === pid) {
230
+ return true;
231
+ }
232
+ // Check 2: Check if the command line contains project signatures
233
+ if (!commandLine) {
234
+ return false;
235
+ }
236
+ const projectSignatures = [
237
+ 'mcp-hub-lite', // Project name
238
+ 'dist/server/src/index.js', // Compiled entry file
239
+ 'src/index.ts' // Source code entry file
240
+ ];
241
+ return projectSignatures.some((signature) => commandLine.includes(signature));
242
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Request context management using AsyncLocalStorage for request-scoped data.
3
+ *
4
+ * This module provides a way to store and access request-specific context data
5
+ * across asynchronous operations without having to pass context objects through
6
+ * every function call. It uses Node.js AsyncLocalStorage to maintain context
7
+ * throughout the request lifecycle.
8
+ *
9
+ * The primary use case is storing client context information (sessionId, clientName,
10
+ * cwd, project, etc.) that needs to be accessible from any part of the application
11
+ * during request processing.
12
+ *
13
+ * @module utils/request-context
14
+ */
15
+ import { AsyncLocalStorage } from 'async_hooks';
16
+ import type { ClientContext } from '../../shared/types/client.types.js';
17
+ /**
18
+ * AsyncLocalStorage instance for storing request context.
19
+ *
20
+ * This storage holds the ClientContext object for the current request and
21
+ * makes it available throughout the entire request processing chain,
22
+ * including asynchronous operations and nested function calls.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // In route handler
27
+ * await requestContext.run(clientContext, async () => {
28
+ * // Any code executed here can access the client context
29
+ * const ctx = getClientContext();
30
+ * console.log(ctx.sessionId);
31
+ * });
32
+ * ```
33
+ */
34
+ export declare const requestContext: AsyncLocalStorage<ClientContext>;
35
+ /**
36
+ * Retrieves the current request's client context.
37
+ *
38
+ * This function returns the ClientContext object stored in the AsyncLocalStorage
39
+ * for the current request. It should only be called within a request context
40
+ * that has been established using requestContext.run().
41
+ *
42
+ * @returns {ClientContext | undefined} The current request's client context, or undefined if not in a request context
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const context = getClientContext();
47
+ * if (context) {
48
+ * console.log(`Processing request for session: ${context.sessionId}`);
49
+ * }
50
+ * ```
51
+ */
52
+ export declare function getClientContext(): ClientContext | undefined;
53
+ /**
54
+ * Retrieves the current request's working directory (cwd).
55
+ *
56
+ * This is a convenience function that extracts the cwd property from the
57
+ * current request's client context. It's commonly used in file operations
58
+ * that need to respect the client's current working directory.
59
+ *
60
+ * @returns {string | undefined} The current request's working directory, or undefined if not available
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const cwd = getClientCwd();
65
+ * if (cwd) {
66
+ * const fullPath = path.join(cwd, relativePath);
67
+ * }
68
+ * ```
69
+ */
70
+ export declare function getClientCwd(): string | undefined;
71
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../../../src/utils/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,kCAAyC,CAAC;AAErE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Request context management using AsyncLocalStorage for request-scoped data.
3
+ *
4
+ * This module provides a way to store and access request-specific context data
5
+ * across asynchronous operations without having to pass context objects through
6
+ * every function call. It uses Node.js AsyncLocalStorage to maintain context
7
+ * throughout the request lifecycle.
8
+ *
9
+ * The primary use case is storing client context information (sessionId, clientName,
10
+ * cwd, project, etc.) that needs to be accessible from any part of the application
11
+ * during request processing.
12
+ *
13
+ * @module utils/request-context
14
+ */
15
+ import { AsyncLocalStorage } from 'async_hooks';
16
+ /**
17
+ * AsyncLocalStorage instance for storing request context.
18
+ *
19
+ * This storage holds the ClientContext object for the current request and
20
+ * makes it available throughout the entire request processing chain,
21
+ * including asynchronous operations and nested function calls.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // In route handler
26
+ * await requestContext.run(clientContext, async () => {
27
+ * // Any code executed here can access the client context
28
+ * const ctx = getClientContext();
29
+ * console.log(ctx.sessionId);
30
+ * });
31
+ * ```
32
+ */
33
+ export const requestContext = new AsyncLocalStorage();
34
+ /**
35
+ * Retrieves the current request's client context.
36
+ *
37
+ * This function returns the ClientContext object stored in the AsyncLocalStorage
38
+ * for the current request. It should only be called within a request context
39
+ * that has been established using requestContext.run().
40
+ *
41
+ * @returns {ClientContext | undefined} The current request's client context, or undefined if not in a request context
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const context = getClientContext();
46
+ * if (context) {
47
+ * console.log(`Processing request for session: ${context.sessionId}`);
48
+ * }
49
+ * ```
50
+ */
51
+ export function getClientContext() {
52
+ return requestContext.getStore();
53
+ }
54
+ /**
55
+ * Retrieves the current request's working directory (cwd).
56
+ *
57
+ * This is a convenience function that extracts the cwd property from the
58
+ * current request's client context. It's commonly used in file operations
59
+ * that need to respect the client's current working directory.
60
+ *
61
+ * @returns {string | undefined} The current request's working directory, or undefined if not available
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const cwd = getClientCwd();
66
+ * if (cwd) {
67
+ * const fullPath = path.join(cwd, relativePath);
68
+ * }
69
+ * ```
70
+ */
71
+ export function getClientCwd() {
72
+ return requestContext.getStore()?.cwd;
73
+ }