@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,306 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Manages log file rotation and cleanup for MCP Hub Lite.
5
+ *
6
+ * This class provides automated log rotation functionality that creates log files
7
+ * with timestamp-based naming on each startup and automatically cleans up old log files
8
+ * based on the configured retention period. It ensures that log storage doesn't grow
9
+ * indefinitely while maintaining a configurable history of log files for debugging
10
+ * and monitoring purposes.
11
+ *
12
+ * The log rotator works by:
13
+ * 1. Creating log files with format: `{logBaseName}.{YYYYMMDD_HHmmSSZZZ}.log` on each startup
14
+ * 2. Automatically cleaning up log files older than the configured retention period
15
+ * 3. Providing utilities to retrieve and manage existing log files
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const logDir = path.join(os.homedir(), '.mcp-hub-lite', 'logs');
20
+ * const rotator = new LogRotator(logDir, 'mcp-hub');
21
+ *
22
+ * // Create a new log file with timestamp (for startup)
23
+ * const newLogPath = rotator.createNewLogFilePath();
24
+ *
25
+ * // Get the latest existing log file
26
+ * const latestLogPath = rotator.getLatestLogFilePath();
27
+ *
28
+ * // Perform log rotation (cleanup old files)
29
+ * rotator.rotateLogs();
30
+ *
31
+ * // Get all log files sorted by date (newest first)
32
+ * const logFiles = rotator.getLogFiles();
33
+ * ```
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // With custom configuration (independent from global config)
38
+ * const rotator = new LogRotator(logDir, 'dev-server', { rotationAge: '7d' });
39
+ * ```
40
+ *
41
+ * @class
42
+ * @since 1.0.0
43
+ */
44
+ export class LogRotator {
45
+ logDir;
46
+ logBaseName;
47
+ customConfig;
48
+ configGetter;
49
+ /**
50
+ * Creates a new LogRotator instance.
51
+ *
52
+ * @param logDir - The directory where log files are stored
53
+ * @param logBaseName - The base name for log files (default: 'mcp-hub')
54
+ * @param customConfig - Optional custom configuration for independent rotation settings
55
+ * @param configGetter - Optional config getter function for global config access (for backward compatibility)
56
+ */
57
+ constructor(logDir, logBaseName = 'mcp-hub', customConfig, configGetter) {
58
+ this.logDir = logDir;
59
+ this.logBaseName = logBaseName;
60
+ this.customConfig = customConfig || null;
61
+ this.configGetter = configGetter || null;
62
+ // Ensure log directory exists
63
+ if (!fs.existsSync(this.logDir)) {
64
+ fs.mkdirSync(this.logDir, { recursive: true });
65
+ }
66
+ }
67
+ /**
68
+ * Calculates the retention period in days from the configured rotation age.
69
+ *
70
+ * Parses the rotation age configuration value which can be in
71
+ * various formats (e.g., "7d", "24h", "1440m") and converts it to days.
72
+ * Hours and minutes are converted to days using ceiling division to ensure
73
+ * proper retention behavior.
74
+ *
75
+ * If a customConfig was provided, it will be used; otherwise, falls back to
76
+ * the configGetter if provided; defaults to 7 days.
77
+ *
78
+ * @returns {number} The retention period in days. Defaults to 7 days if the
79
+ * configuration is invalid or cannot be parsed.
80
+ * @private
81
+ */
82
+ getRetentionDays() {
83
+ const maxAge = this.customConfig?.rotationAge ??
84
+ (this.configGetter ? this.configGetter().system.logging.rotationAge : null) ??
85
+ '7d';
86
+ // Parse maxAge like "7d", "30d", etc.
87
+ const match = maxAge.match(/^(\d+)([dhm])$/);
88
+ if (match) {
89
+ const value = parseInt(match[1], 10);
90
+ const unit = match[2];
91
+ switch (unit) {
92
+ case 'd':
93
+ return value;
94
+ case 'h':
95
+ return Math.ceil(value / 24);
96
+ case 'm':
97
+ return Math.ceil(value / (24 * 60));
98
+ default:
99
+ return 7;
100
+ }
101
+ }
102
+ return 7; // default to 7 days
103
+ }
104
+ /**
105
+ * Generates a timestamp string in YYYYMMDD_HHmmSSZZZ format.
106
+ *
107
+ * @param date - The date to format, defaults to current date/time
108
+ * @returns {string} Formatted timestamp string
109
+ * @private
110
+ */
111
+ formatTimestamp(date = new Date()) {
112
+ const year = date.getFullYear();
113
+ const month = String(date.getMonth() + 1).padStart(2, '0');
114
+ const day = String(date.getDate()).padStart(2, '0');
115
+ const hours = String(date.getHours()).padStart(2, '0');
116
+ const minutes = String(date.getMinutes()).padStart(2, '0');
117
+ const seconds = String(date.getSeconds()).padStart(2, '0');
118
+ const milliseconds = String(date.getMilliseconds()).padStart(3, '0');
119
+ return `${year}${month}${day}_${hours}${minutes}${seconds}${milliseconds}`;
120
+ }
121
+ /**
122
+ * Creates a new log file path with the current timestamp.
123
+ *
124
+ * This method generates a log file path using the configured log directory and base name,
125
+ * combined with the current timestamp in YYYYMMDD_HHmmSSZZZ format. The resulting path
126
+ * follows the pattern: `{logDir}/{logBaseName}.{YYYYMMDD_HHmmSSZZZ}.log`
127
+ *
128
+ * This method should be called on application startup to create a new log file
129
+ * for each session.
130
+ *
131
+ * @returns {string} The absolute file path for the new log file.
132
+ * @example
133
+ * ```typescript
134
+ * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
135
+ * const logPath = rotator.createNewLogFilePath();
136
+ * // Returns: '/var/log/mcp-hub/mcp-hub.20260301_143022123.log' (with current timestamp)
137
+ * ```
138
+ */
139
+ createNewLogFilePath() {
140
+ const timestamp = this.formatTimestamp();
141
+ return path.join(this.logDir, `${this.logBaseName}.${timestamp}.log`);
142
+ }
143
+ /**
144
+ * Gets the latest existing log file path.
145
+ *
146
+ * This method scans the log directory and returns the path to the most recent
147
+ * log file based on the timestamp in the filename. If no log files exist,
148
+ * it returns null.
149
+ *
150
+ * @returns {string | null} The absolute file path to the latest log file, or null if none exist.
151
+ * @example
152
+ * ```typescript
153
+ * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
154
+ * const latestLog = rotator.getLatestLogFilePath();
155
+ * // Returns: '/var/log/mcp-hub/mcp-hub.20260301_143022123.log' or null
156
+ * ```
157
+ */
158
+ getLatestLogFilePath() {
159
+ const logFiles = this.getLogFiles();
160
+ return logFiles.length > 0 ? logFiles[0] : null;
161
+ }
162
+ /**
163
+ * Gets the current log file path (backward compatibility).
164
+ *
165
+ * This method is maintained for backward compatibility. It first tries to get
166
+ * the latest existing log file. If none exists, it creates a new one.
167
+ *
168
+ * @returns {string} The absolute file path for the current log file.
169
+ * @deprecated Use createNewLogFilePath() or getLatestLogFilePath() instead
170
+ * @example
171
+ * ```typescript
172
+ * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
173
+ * const logPath = rotator.getCurrentLogFilePath();
174
+ * ```
175
+ */
176
+ getCurrentLogFilePath() {
177
+ const latest = this.getLatestLogFilePath();
178
+ return latest ?? this.createNewLogFilePath();
179
+ }
180
+ /**
181
+ * Performs log rotation by cleaning up old log files beyond the retention period.
182
+ *
183
+ * This method scans the configured log directory for files matching the pattern
184
+ * `{logBaseName}.{YYYY-MM-DD}.log` and removes any files that are older than
185
+ * the configured retention period (specified in the system configuration under
186
+ * `system.logging.rotationAge`).
187
+ *
188
+ * The retention period supports various time units:
189
+ * - 'd' for days (e.g., "7d" = 7 days)
190
+ * - 'h' for hours (e.g., "24h" = 1 day)
191
+ * - 'm' for minutes (e.g., "1440m" = 1 day)
192
+ *
193
+ * If no valid retention period is configured, it defaults to 7 days.
194
+ *
195
+ * This method should be called periodically (e.g., on application startup or
196
+ * via a scheduled task) to prevent log files from consuming excessive disk space.
197
+ *
198
+ * @returns {void}
199
+ * @throws {Error} If there's an error reading the log directory or deleting files,
200
+ * the error is caught and logged to console.error, but the method
201
+ * continues execution without throwing.
202
+ * @example
203
+ * ```typescript
204
+ * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
205
+ * rotator.rotateLogs(); // Cleans up log files older than configured retention period
206
+ * ```
207
+ */
208
+ rotateLogs() {
209
+ try {
210
+ const files = fs.readdirSync(this.logDir);
211
+ const logFiles = files.filter((file) => file.startsWith(`${this.logBaseName}.`) && file.endsWith('.log'));
212
+ const now = new Date();
213
+ const retentionThreshold = new Date();
214
+ retentionThreshold.setDate(now.getDate() - this.getRetentionDays());
215
+ for (const file of logFiles) {
216
+ const filePath = path.join(this.logDir, file);
217
+ const stats = fs.statSync(filePath);
218
+ if (stats.mtime < retentionThreshold) {
219
+ fs.unlinkSync(filePath);
220
+ }
221
+ }
222
+ }
223
+ catch (error) {
224
+ console.error('Failed to rotate logs:', error);
225
+ }
226
+ }
227
+ /**
228
+ * Retrieves all existing log files sorted by date (newest first).
229
+ *
230
+ * This method scans the configured log directory for files matching the pattern
231
+ * `{logBaseName}.{YYYY-MM-DD}.log`, extracts the date from each filename,
232
+ * and returns an array of absolute file paths sorted in descending order by date
233
+ * (newest files first).
234
+ *
235
+ * This is useful for log management interfaces, log viewing utilities, or any
236
+ * functionality that needs to present log files in chronological order.
237
+ *
238
+ * @returns {string[]} Array of absolute file paths to log files, sorted by date
239
+ * with newest files first. Returns an empty array if no log
240
+ * files are found or if an error occurs during scanning.
241
+ * @throws {Error} If there's an error reading the log directory, the error is
242
+ * caught and logged to console.error, but the method returns
243
+ * an empty array instead of throwing.
244
+ * @example
245
+ * ```typescript
246
+ * const rotator = new LogRotator('/var/log/mcp-hub', 'mcp-hub');
247
+ * const logFiles = rotator.getLogFiles();
248
+ * // Returns: [
249
+ * // '/var/log/mcp-hub/mcp-hub.2026-02-16.log',
250
+ * // '/var/log/mcp-hub/mcp-hub.2026-02-15.log',
251
+ * // '/var/log/mcp-hub/mcp-hub.2026-02-14.log'
252
+ * // ]
253
+ * ```
254
+ */
255
+ getLogFiles() {
256
+ try {
257
+ const files = fs.readdirSync(this.logDir);
258
+ const logFiles = files
259
+ .filter((file) => file.startsWith(`${this.logBaseName}.`) && file.endsWith('.log'))
260
+ .map((file) => ({
261
+ name: file,
262
+ path: path.join(this.logDir, file),
263
+ date: this.extractDateFromFilename(file)
264
+ }))
265
+ .filter((item) => item.date !== null)
266
+ .sort((a, b) => b.date.getTime() - a.date.getTime())
267
+ .map((item) => item.path);
268
+ return logFiles;
269
+ }
270
+ catch (error) {
271
+ console.error('Failed to get log files:', error);
272
+ return [];
273
+ }
274
+ }
275
+ /**
276
+ * Extracts the date from a log filename.
277
+ *
278
+ * Parses filenames that match either:
279
+ * - New format: `{logBaseName}.{YYYYMMDD_HHmmSSZZZ}.log` (preferred)
280
+ * - Old format: `{logBaseName}.{YYYY-MM-DD}.log` (for backward compatibility)
281
+ *
282
+ * and extracts the date portion, converting it to a Date object.
283
+ *
284
+ * @param {string} filename - The log filename to parse
285
+ * (e.g., "mcp-hub.20260301_143022123.log" or "mcp-hub.2026-02-16.log")
286
+ * @returns {Date | null} A Date object representing the extracted date, or null
287
+ * if the filename doesn't match the expected pattern or
288
+ * contains an invalid date.
289
+ * @private
290
+ */
291
+ extractDateFromFilename(filename) {
292
+ // Try new format first: YYYYMMDD_HHmmSSZZZ
293
+ const newFormatMatch = filename.match(new RegExp(`${this.logBaseName}\\.(\\d{4})(\\d{2})(\\d{2})_(\\d{2})(\\d{2})(\\d{2})(\\d{3})\\.log$`));
294
+ if (newFormatMatch) {
295
+ const [, year, month, day, hours, minutes, seconds, ms] = newFormatMatch;
296
+ return new Date(parseInt(year, 10), parseInt(month, 10) - 1, // months are 0-indexed
297
+ parseInt(day, 10), parseInt(hours, 10), parseInt(minutes, 10), parseInt(seconds, 10), parseInt(ms, 10));
298
+ }
299
+ // Try old format: YYYY-MM-DD (backward compatibility)
300
+ const oldFormatMatch = filename.match(new RegExp(`${this.logBaseName}\\.(\\d{4}-\\d{2}-\\d{2})\\.log$`));
301
+ if (oldFormatMatch && oldFormatMatch[1]) {
302
+ return new Date(oldFormatMatch[1]);
303
+ }
304
+ return null;
305
+ }
306
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Development mode logging setup.
3
+ * This file contains development log initialization and management.
4
+ */
5
+ import fs from 'fs';
6
+ import { LogRotator, type RotatorConfig } from '../log-rotator.js';
7
+ /**
8
+ * Development logger configuration and setup.
9
+ */
10
+ export declare class DevLogger {
11
+ private logFileStream;
12
+ private devLogRotator;
13
+ /**
14
+ * Get the current log file stream.
15
+ */
16
+ get stream(): fs.WriteStream | null;
17
+ /**
18
+ * Get the dev log rotator (for testing only).
19
+ * @internal
20
+ */
21
+ get rotator(): LogRotator | null;
22
+ /**
23
+ * Enables development logging mode with file output and enhanced debugging.
24
+ *
25
+ * This method configures the logger to:
26
+ * - Write all log output to a file in the logs/ directory
27
+ * - Use timestamp-based log file naming (dev-server.YYYYMMDD_HHmmSSZZZ.log)
28
+ * - Automatically clean up old log files (default: 7 days retention)
29
+ *
30
+ * @param rotatorConfig - Optional custom rotation configuration (default: 7 days retention)
31
+ * @param onLogEnabled - Optional callback when log is enabled, receives the log file path
32
+ */
33
+ enableDevLog(rotatorConfig?: RotatorConfig, onLogEnabled?: (logFilePath: string) => void): void;
34
+ /**
35
+ * Close the dev log file stream if open.
36
+ */
37
+ close(): void;
38
+ }
39
+ //# sourceMappingURL=dev-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-logger.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/dev-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,aAAa,CAA2B;IAEhD;;OAEG;IACH,IAAI,MAAM,IAAI,EAAE,CAAC,WAAW,GAAG,IAAI,CAElC;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,UAAU,GAAG,IAAI,CAE/B;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAoB/F;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Development mode logging setup.
3
+ * This file contains development log initialization and management.
4
+ */
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ import { LogRotator } from '../log-rotator.js';
8
+ /**
9
+ * Development logger configuration and setup.
10
+ */
11
+ export class DevLogger {
12
+ logFileStream = null;
13
+ devLogRotator = null;
14
+ /**
15
+ * Get the current log file stream.
16
+ */
17
+ get stream() {
18
+ return this.logFileStream;
19
+ }
20
+ /**
21
+ * Get the dev log rotator (for testing only).
22
+ * @internal
23
+ */
24
+ get rotator() {
25
+ return this.devLogRotator;
26
+ }
27
+ /**
28
+ * Enables development logging mode with file output and enhanced debugging.
29
+ *
30
+ * This method configures the logger to:
31
+ * - Write all log output to a file in the logs/ directory
32
+ * - Use timestamp-based log file naming (dev-server.YYYYMMDD_HHmmSSZZZ.log)
33
+ * - Automatically clean up old log files (default: 7 days retention)
34
+ *
35
+ * @param rotatorConfig - Optional custom rotation configuration (default: 7 days retention)
36
+ * @param onLogEnabled - Optional callback when log is enabled, receives the log file path
37
+ */
38
+ enableDevLog(rotatorConfig, onLogEnabled) {
39
+ if (this.logFileStream)
40
+ return;
41
+ const logDir = path.join(process.cwd(), 'logs');
42
+ if (!fs.existsSync(logDir)) {
43
+ fs.mkdirSync(logDir, { recursive: true });
44
+ }
45
+ const config = rotatorConfig || { rotationAge: '7d' };
46
+ this.devLogRotator = new LogRotator(logDir, 'dev-server', config);
47
+ this.devLogRotator.rotateLogs();
48
+ const logFile = this.devLogRotator.createNewLogFilePath();
49
+ this.logFileStream = fs.createWriteStream(logFile, { flags: 'a' });
50
+ if (onLogEnabled) {
51
+ onLogEnabled(logFile);
52
+ }
53
+ }
54
+ /**
55
+ * Close the dev log file stream if open.
56
+ */
57
+ close() {
58
+ if (this.logFileStream) {
59
+ this.logFileStream.end();
60
+ this.logFileStream = null;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Logger module exports.
3
+ * This file provides backward-compatible exports for the refactored logger module.
4
+ */
5
+ export type { LogContext, LogOptions } from './log-context.js';
6
+ export { LOG_MODULES } from './log-modules.js';
7
+ export type { LogModuleKey, LogModule } from './log-modules.js';
8
+ export { COLORS, getColorCodeForLevel, getResetColor } from './log-colors.js';
9
+ export { formatTimestamp, formatLogLevel, formatPid, createColoredLogMessage, createLogMessage, formatError } from './log-formatter.js';
10
+ export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
11
+ export { Logger } from './logger.js';
12
+ import { Logger } from './logger.js';
13
+ import type { LogContext } from './log-context.js';
14
+ export declare const logger: Logger;
15
+ /**
16
+ * Log a message with color formatting for console and plain text for file output.
17
+ *
18
+ * This function provides a convenient way to log messages that appear with
19
+ * ANSI color codes in the console but are written as plain text to log files.
20
+ * It uses the logger's internal formatting methods to ensure consistent output.
21
+ *
22
+ * @param coloredMessage - The message to display in the console with color formatting
23
+ * @param plainMessage - The message to write to log files in plain text format
24
+ * @param context - Optional logging context including PID, server name, trace ID, etc.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * logWithColor(
29
+ * '\x1b[32m[SUCCESS]\x1b[0m Server started',
30
+ * '[SUCCESS] Server started',
31
+ * { serverName: 'mcp-hub', pid: process.pid }
32
+ * );
33
+ * ```
34
+ */
35
+ export declare function logWithColor(coloredMessage: string, plainMessage: string, context?: LogContext): void;
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,IAAI,CAQN"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Logger module exports.
3
+ * This file provides backward-compatible exports for the refactored logger module.
4
+ */
5
+ // Re-export log module constants
6
+ export { LOG_MODULES } from './log-modules.js';
7
+ // Re-export color utilities
8
+ export { COLORS, getColorCodeForLevel, getResetColor } from './log-colors.js';
9
+ // Re-export formatter utilities
10
+ export { formatTimestamp, formatLogLevel, formatPid, createColoredLogMessage, createLogMessage, formatError } from './log-formatter.js';
11
+ // Re-export output utilities
12
+ export { isToolsListResponse, simplifyToolsListResponse, hasImageContent, simplifyImageContent, formatMcpMessageForLogging, isNotificationMessage, logNotificationMessage } from './log-output.js';
13
+ // Re-export main Logger class
14
+ export { Logger } from './logger.js';
15
+ // Create and export the default logger instance
16
+ import { Logger } from './logger.js';
17
+ import { createColoredLogMessage, createLogMessage } from './log-formatter.js';
18
+ export const logger = new Logger();
19
+ /**
20
+ * Log a message with color formatting for console and plain text for file output.
21
+ *
22
+ * This function provides a convenient way to log messages that appear with
23
+ * ANSI color codes in the console but are written as plain text to log files.
24
+ * It uses the logger's internal formatting methods to ensure consistent output.
25
+ *
26
+ * @param coloredMessage - The message to display in the console with color formatting
27
+ * @param plainMessage - The message to write to log files in plain text format
28
+ * @param context - Optional logging context including PID, server name, trace ID, etc.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * logWithColor(
33
+ * '\x1b[32m[SUCCESS]\x1b[0m Server started',
34
+ * '[SUCCESS] Server started',
35
+ * { serverName: 'mcp-hub', pid: process.pid }
36
+ * );
37
+ * ```
38
+ */
39
+ export function logWithColor(coloredMessage, plainMessage, context) {
40
+ const coloredLogMsg = createColoredLogMessage('info', coloredMessage, context);
41
+ console.info(coloredLogMsg);
42
+ if (logger.logFileStream) {
43
+ const plainLogMsg = createLogMessage('info', plainMessage, context);
44
+ logger.logFileStream.write(plainLogMsg + '\n');
45
+ }
46
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ANSI color codes for logging.
3
+ * This file contains all color-related constants and helpers.
4
+ */
5
+ import type { LogLevel } from '../../../shared/types/common.types.js';
6
+ export declare const COLORS: {
7
+ readonly reset: "\u001B[0m";
8
+ readonly cyan: "\u001B[36m";
9
+ readonly green: "\u001B[32m";
10
+ readonly yellow: "\u001B[33m";
11
+ readonly red: "\u001B[31m";
12
+ readonly gray: "\u001B[90m";
13
+ readonly brightCyan: "\u001B[96m";
14
+ readonly brightMagenta: "\u001B[95m";
15
+ };
16
+ /**
17
+ * Get color code for a specific log level.
18
+ * @param level - The log level
19
+ * @returns ANSI color code string
20
+ */
21
+ export declare function getColorCodeForLevel(level: LogLevel): string;
22
+ /**
23
+ * Get reset color code.
24
+ * @returns ANSI reset color code
25
+ */
26
+ export declare function getResetColor(): string;
27
+ //# sourceMappingURL=log-colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-colors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAa5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ANSI color codes for logging.
3
+ * This file contains all color-related constants and helpers.
4
+ */
5
+ // ANSI color codes
6
+ export const COLORS = {
7
+ reset: '\x1b[0m',
8
+ cyan: '\x1b[36m',
9
+ green: '\x1b[32m',
10
+ yellow: '\x1b[33m',
11
+ red: '\x1b[31m',
12
+ gray: '\x1b[90m',
13
+ brightCyan: '\x1b[96m',
14
+ brightMagenta: '\x1b[95m'
15
+ };
16
+ /**
17
+ * Get color code for a specific log level.
18
+ * @param level - The log level
19
+ * @returns ANSI color code string
20
+ */
21
+ export function getColorCodeForLevel(level) {
22
+ switch (level) {
23
+ case 'debug':
24
+ return COLORS.cyan;
25
+ case 'info':
26
+ return COLORS.green;
27
+ case 'warn':
28
+ return COLORS.yellow;
29
+ case 'error':
30
+ return COLORS.red;
31
+ default:
32
+ return COLORS.reset;
33
+ }
34
+ }
35
+ /**
36
+ * Get reset color code.
37
+ * @returns ANSI reset color code
38
+ */
39
+ export function getResetColor() {
40
+ return COLORS.reset;
41
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Log context types and interfaces.
3
+ * This file contains all type definitions for logging context.
4
+ */
5
+ export interface LogContext {
6
+ pid?: number;
7
+ serverName?: string;
8
+ module?: string;
9
+ traceId?: string;
10
+ spanId?: string;
11
+ }
12
+ export type LogOptions = Omit<LogContext, 'pid' | 'serverName'>;
13
+ //# sourceMappingURL=log-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-context.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,YAAY,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Log context types and interfaces.
3
+ * This file contains all type definitions for logging context.
4
+ */
5
+ export {};
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Log formatting utilities.
3
+ * This file contains all log message formatting logic.
4
+ */
5
+ import type { LogLevel } from '../../../shared/types/common.types.js';
6
+ import type { LogContext } from './log-context.js';
7
+ /**
8
+ * Format a timestamp for logging.
9
+ * @param date - The date to format
10
+ * @returns Formatted timestamp string
11
+ */
12
+ export declare function formatTimestamp(date: Date): string;
13
+ /**
14
+ * Format a log level for display.
15
+ * @param level - The log level
16
+ * @returns Formatted log level string
17
+ */
18
+ export declare function formatLogLevel(level: LogLevel): string;
19
+ /**
20
+ * Format a PID for display.
21
+ * @param pid - The process ID
22
+ * @returns Formatted PID string
23
+ */
24
+ export declare function formatPid(pid: number): string;
25
+ /**
26
+ * Create a colored log message for console output.
27
+ * @param level - The log level
28
+ * @param message - The log message
29
+ * @param context - Optional log context
30
+ * @returns Colored log message string
31
+ */
32
+ export declare function createColoredLogMessage(level: LogLevel, message: string, context?: LogContext): string;
33
+ /**
34
+ * Create a plain text log message for file output.
35
+ * @param level - The log level
36
+ * @param message - The log message
37
+ * @param context - Optional log context
38
+ * @returns Plain text log message string
39
+ */
40
+ export declare function createLogMessage(level: LogLevel, message: string, context?: LogContext): string;
41
+ /**
42
+ * Format an error object for logging.
43
+ * @param error - The error to format
44
+ * @returns Formatted error string
45
+ */
46
+ export declare function formatError(error: unknown): string;
47
+ //# sourceMappingURL=log-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-formatter.d.ts","sourceRoot":"","sources":["../../../../../src/utils/logger/log-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CASlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAatD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,UAAU,GACnB,MAAM,CAiCR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAyB/F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiClD"}