@loop_ouroboros/mcp-hub-lite 1.0.1 → 1.1.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 (374) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/client/assets/{HomeView-Cr1jX73N.js → HomeView-Bu2joUvW.js} +1 -1
  3. package/dist/client/assets/ResourceDetailView-BvrhDCD1.js +1 -0
  4. package/dist/client/assets/ResourceDetailView-DUJZbegl.css +1 -0
  5. package/dist/client/assets/ResourcesView-Cc8RHtia.css +1 -0
  6. package/dist/client/assets/ResourcesView-LjqioF_s.js +1 -0
  7. package/dist/client/assets/ServerDashboard-BfLeFDGw.css +1 -0
  8. package/dist/client/assets/ServerDashboard-FhHJFvUi.js +1 -0
  9. package/dist/client/assets/ServerDetail-BKV-M4qT.js +2 -0
  10. package/dist/client/assets/ServerDetail-CtnNKJGx.css +1 -0
  11. package/dist/client/assets/{ServerListView-Bws09jNR.css → ServerListView-B-bPljsO.css} +1 -1
  12. package/dist/client/assets/ServerListView-BXgtDyt3.js +36 -0
  13. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-D-ooYNdN.js +1 -0
  14. package/dist/client/assets/SettingsView-CMFG91Z4.js +1 -0
  15. package/dist/client/assets/SettingsView-GkBOKL0V.css +1 -0
  16. package/dist/client/assets/ToolCallDialog-Bf4Xe4gH.js +1 -0
  17. package/dist/client/assets/ToolsView-DFpha1z0.js +1 -0
  18. package/dist/client/assets/_baseClone-Bp9Rjwd7.js +1 -0
  19. package/dist/client/assets/el-form-item-B4LbJ6OO.css +1 -0
  20. package/dist/client/assets/el-form-item-DdSUWYsl.js +12 -0
  21. package/dist/client/assets/el-input-99gMrutP.js +1 -0
  22. package/dist/client/assets/el-input-BH4BZKnG.css +1 -0
  23. package/dist/client/assets/{el-loading-Csv24uBk.js → el-loading-CIQ5pD5u.js} +1 -1
  24. package/dist/client/assets/el-overlay-BVM6msGX.js +1 -0
  25. package/dist/client/assets/{el-select-C0U_l4IZ.css → el-overlay-CBvdpA69.css} +1 -1
  26. package/dist/client/assets/{ResourceDetailView-BdOaL_-o.css → el-radio-group-B0bauIRR.css} +1 -1
  27. package/dist/client/assets/el-radio-group-DhXWy7ry.js +1 -0
  28. package/dist/client/assets/el-skeleton-item-BLY1jEuR.css +1 -0
  29. package/dist/client/assets/el-skeleton-item-DJz-Us12.js +1 -0
  30. package/dist/client/assets/el-switch-BBrS-_6y.css +1 -0
  31. package/dist/client/assets/el-switch-Bu8AQ5uM.js +1 -0
  32. package/dist/client/assets/el-tab-pane-BnGMaV56.js +1 -0
  33. package/dist/client/assets/el-table-column-BMWOaLS_.js +1 -0
  34. package/dist/client/assets/el-table-column-BdvRS9Y2.css +1 -0
  35. package/dist/client/assets/index-C2V-ZGji.js +1 -0
  36. package/dist/client/assets/{index-BsDWtoIl.css → index-DpH6ZSbs.css} +1 -1
  37. package/dist/client/assets/index-vhkqgpmN.js +2 -0
  38. package/dist/client/assets/omit-CqPQN3XP.js +1 -0
  39. package/dist/client/assets/{raf-DDfJOMYh.js → raf-C2wXzaVU.js} +1 -1
  40. package/dist/client/assets/{vue-vendor-6ny5zj9i.js → vue-vendor-BLHLXXJK.js} +1 -1
  41. package/dist/client/index.html +3 -3
  42. package/dist/server/shared/models/resource.model.d.ts +2 -1
  43. package/dist/server/shared/models/resource.model.d.ts.map +1 -1
  44. package/dist/server/shared/models/server.model.d.ts +363 -5
  45. package/dist/server/shared/models/server.model.d.ts.map +1 -1
  46. package/dist/server/shared/models/server.model.js +220 -1
  47. package/dist/server/shared/models/session.model.d.ts +2 -56
  48. package/dist/server/shared/models/session.model.d.ts.map +1 -1
  49. package/dist/server/shared/models/session.model.js +2 -55
  50. package/dist/server/shared/models/tool.model.d.ts +4 -2
  51. package/dist/server/shared/models/tool.model.d.ts.map +1 -1
  52. package/dist/server/shared/types/client.types.d.ts +4 -32
  53. package/dist/server/shared/types/client.types.d.ts.map +1 -1
  54. package/dist/server/shared/types/client.types.js +3 -2
  55. package/dist/server/shared/types/index.d.ts +3 -3
  56. package/dist/server/shared/types/index.d.ts.map +1 -1
  57. package/dist/server/shared/types/index.js +3 -3
  58. package/dist/server/shared/types/session-context.types.d.ts +35 -0
  59. package/dist/server/shared/types/session-context.types.d.ts.map +1 -0
  60. package/dist/server/shared/types/session-context.types.js +5 -0
  61. package/dist/server/shared/types/websocket.types.d.ts +17 -10
  62. package/dist/server/shared/types/websocket.types.d.ts.map +1 -1
  63. package/dist/server/src/api/mcp/debug-response-wrapper.d.ts.map +1 -1
  64. package/dist/server/src/api/mcp/debug-response-wrapper.js +26 -1
  65. package/dist/server/src/api/mcp/gateway.d.ts +1 -3
  66. package/dist/server/src/api/mcp/gateway.d.ts.map +1 -1
  67. package/dist/server/src/api/mcp/gateway.js +34 -61
  68. package/dist/server/src/api/mcp/session-context-extractor.d.ts +5 -5
  69. package/dist/server/src/api/mcp/session-context-extractor.d.ts.map +1 -1
  70. package/dist/server/src/api/mcp/session-context-extractor.js +15 -39
  71. package/dist/server/src/api/web/clients.js +2 -2
  72. package/dist/server/src/api/web/hub-tools.d.ts +2 -2
  73. package/dist/server/src/api/web/hub-tools.d.ts.map +1 -1
  74. package/dist/server/src/api/web/hub-tools.js +3 -54
  75. package/dist/server/src/api/web/mcp-status.d.ts +1 -1
  76. package/dist/server/src/api/web/mcp-status.d.ts.map +1 -1
  77. package/dist/server/src/api/web/mcp-status.js +71 -30
  78. package/dist/server/src/api/web/resources.d.ts.map +1 -1
  79. package/dist/server/src/api/web/resources.js +28 -22
  80. package/dist/server/src/api/web/search.d.ts +2 -16
  81. package/dist/server/src/api/web/search.d.ts.map +1 -1
  82. package/dist/server/src/api/web/search.js +24 -45
  83. package/dist/server/src/api/web/servers.d.ts +3 -3
  84. package/dist/server/src/api/web/servers.d.ts.map +1 -1
  85. package/dist/server/src/api/web/servers.js +70 -25
  86. package/dist/server/src/api/web/sessions.js +1 -1
  87. package/dist/server/src/api/ws/ws-handler.d.ts.map +1 -1
  88. package/dist/server/src/api/ws/ws-handler.js +4 -2
  89. package/dist/server/src/app.d.ts.map +1 -1
  90. package/dist/server/src/app.js +0 -4
  91. package/dist/server/src/cli/commands/list.js +2 -2
  92. package/dist/server/src/cli/commands/status.d.ts.map +1 -1
  93. package/dist/server/src/cli/commands/status.js +41 -30
  94. package/dist/server/src/cli/index.d.ts.map +1 -1
  95. package/dist/server/src/cli/index.js +2 -1
  96. package/dist/server/src/cli/server.d.ts +11 -2
  97. package/dist/server/src/cli/server.d.ts.map +1 -1
  98. package/dist/server/src/config/config-change-logger.d.ts +22 -0
  99. package/dist/server/src/config/config-change-logger.d.ts.map +1 -1
  100. package/dist/server/src/config/config-change-logger.js +135 -11
  101. package/dist/server/src/config/config-loader.d.ts +6 -5
  102. package/dist/server/src/config/config-loader.d.ts.map +1 -1
  103. package/dist/server/src/config/config-loader.js +54 -16
  104. package/dist/server/src/config/config-manager.d.ts +51 -43
  105. package/dist/server/src/config/config-manager.d.ts.map +1 -1
  106. package/dist/server/src/config/config-manager.js +84 -66
  107. package/dist/server/src/config/config-migrator.d.ts +82 -0
  108. package/dist/server/src/config/config-migrator.d.ts.map +1 -0
  109. package/dist/server/src/config/config-migrator.js +348 -0
  110. package/dist/server/src/config/config-saver.d.ts +2 -0
  111. package/dist/server/src/config/config-saver.d.ts.map +1 -1
  112. package/dist/server/src/config/config-saver.js +8 -2
  113. package/dist/server/src/config/config.schema.d.ts +10 -102
  114. package/dist/server/src/config/config.schema.d.ts.map +1 -1
  115. package/dist/server/src/config/config.schema.js +15 -98
  116. package/dist/server/src/config/path-validator.d.ts +27 -0
  117. package/dist/server/src/config/path-validator.d.ts.map +1 -0
  118. package/dist/server/src/config/path-validator.js +53 -0
  119. package/dist/server/src/config/server-config-manager.d.ts +37 -31
  120. package/dist/server/src/config/server-config-manager.d.ts.map +1 -1
  121. package/dist/server/src/config/server-config-manager.js +222 -66
  122. package/dist/server/src/config/type-converter.d.ts.map +1 -1
  123. package/dist/server/src/config/type-converter.js +3 -2
  124. package/dist/server/src/index.js +1 -1
  125. package/dist/server/src/models/event.model.d.ts +17 -10
  126. package/dist/server/src/models/event.model.d.ts.map +1 -1
  127. package/dist/server/src/models/server.model.d.ts +17 -3
  128. package/dist/server/src/models/server.model.d.ts.map +1 -1
  129. package/dist/server/src/models/server.model.js +2 -1
  130. package/dist/server/src/models/system-tools.constants.d.ts +10 -27
  131. package/dist/server/src/models/system-tools.constants.d.ts.map +1 -1
  132. package/dist/server/src/models/system-tools.constants.js +4 -8
  133. package/dist/server/src/pid/manager.d.ts.map +1 -1
  134. package/dist/server/src/pid/manager.js +2 -1
  135. package/dist/server/src/server/dev-server.js +34 -20
  136. package/dist/server/src/server/runner.d.ts.map +1 -1
  137. package/dist/server/src/server/runner.js +41 -26
  138. package/dist/server/src/services/client-tracker.service.d.ts +3 -128
  139. package/dist/server/src/services/client-tracker.service.d.ts.map +1 -1
  140. package/dist/server/src/services/client-tracker.service.js +4 -200
  141. package/dist/server/src/services/connection/connection-manager.d.ts +85 -103
  142. package/dist/server/src/services/connection/connection-manager.d.ts.map +1 -1
  143. package/dist/server/src/services/connection/connection-manager.js +286 -241
  144. package/dist/server/src/services/connection/tool-cache.d.ts +27 -25
  145. package/dist/server/src/services/connection/tool-cache.d.ts.map +1 -1
  146. package/dist/server/src/services/connection/tool-cache.js +50 -55
  147. package/dist/server/src/services/gateway/gateway.service.d.ts +2 -0
  148. package/dist/server/src/services/gateway/gateway.service.d.ts.map +1 -1
  149. package/dist/server/src/services/gateway/gateway.service.js +15 -19
  150. package/dist/server/src/services/gateway/global-transport.d.ts +10 -0
  151. package/dist/server/src/services/gateway/global-transport.d.ts.map +1 -0
  152. package/dist/server/src/services/gateway/global-transport.js +42 -0
  153. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.d.ts.map +1 -1
  154. package/dist/server/src/services/gateway/request-handlers/call-tool-handler.js +67 -65
  155. package/dist/server/src/services/gateway/request-handlers/index.d.ts +1 -1
  156. package/dist/server/src/services/gateway/request-handlers/index.d.ts.map +1 -1
  157. package/dist/server/src/services/gateway/request-handlers/index.js +1 -1
  158. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts +1 -4
  159. package/dist/server/src/services/gateway/request-handlers/initialize-handler.d.ts.map +1 -1
  160. package/dist/server/src/services/gateway/request-handlers/initialize-handler.js +16 -55
  161. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts +35 -0
  162. package/dist/server/src/services/gateway/request-handlers/initialize.constants.d.ts.map +1 -0
  163. package/dist/server/src/services/gateway/request-handlers/initialize.constants.js +44 -0
  164. package/dist/server/src/services/gateway/request-handlers/resources-handler.d.ts.map +1 -1
  165. package/dist/server/src/services/gateway/request-handlers/resources-handler.js +5 -4
  166. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.d.ts.map +1 -1
  167. package/dist/server/src/services/gateway/request-handlers/system-tools-handler.js +32 -77
  168. package/dist/server/src/services/gateway/request-handlers/tools-handler.d.ts.map +1 -1
  169. package/dist/server/src/services/gateway/request-handlers/tools-handler.js +4 -3
  170. package/dist/server/src/services/gateway/tool-list-generator.d.ts.map +1 -1
  171. package/dist/server/src/services/gateway/tool-list-generator.js +37 -16
  172. package/dist/server/src/services/gateway/types.d.ts +2 -1
  173. package/dist/server/src/services/gateway/types.d.ts.map +1 -1
  174. package/dist/server/src/services/hub-manager.service.d.ts +32 -238
  175. package/dist/server/src/services/hub-manager.service.d.ts.map +1 -1
  176. package/dist/server/src/services/hub-manager.service.js +89 -267
  177. package/dist/server/src/services/hub-tools/index.d.ts +1 -3
  178. package/dist/server/src/services/hub-tools/index.d.ts.map +1 -1
  179. package/dist/server/src/services/hub-tools/index.js +1 -2
  180. package/dist/server/src/services/hub-tools/instance-matcher.d.ts +62 -0
  181. package/dist/server/src/services/hub-tools/instance-matcher.d.ts.map +1 -0
  182. package/dist/server/src/services/hub-tools/instance-matcher.js +132 -0
  183. package/dist/server/src/services/hub-tools/instance-selector.d.ts +29 -0
  184. package/dist/server/src/services/hub-tools/instance-selector.d.ts.map +1 -0
  185. package/dist/server/src/services/hub-tools/instance-selector.js +103 -0
  186. package/dist/server/src/services/hub-tools/resource-generator.d.ts +25 -5
  187. package/dist/server/src/services/hub-tools/resource-generator.d.ts.map +1 -1
  188. package/dist/server/src/services/hub-tools/resource-generator.js +259 -64
  189. package/dist/server/src/services/hub-tools/server-selector.d.ts +26 -13
  190. package/dist/server/src/services/hub-tools/server-selector.d.ts.map +1 -1
  191. package/dist/server/src/services/hub-tools/server-selector.js +44 -37
  192. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts +1 -4
  193. package/dist/server/src/services/hub-tools/system-tool-definitions.d.ts.map +1 -1
  194. package/dist/server/src/services/hub-tools/system-tool-definitions.js +17 -80
  195. package/dist/server/src/services/hub-tools/tool-search.d.ts +7 -7
  196. package/dist/server/src/services/hub-tools/tool-search.d.ts.map +1 -1
  197. package/dist/server/src/services/hub-tools/tool-search.js +10 -4
  198. package/dist/server/src/services/hub-tools/types.d.ts +2 -2
  199. package/dist/server/src/services/hub-tools/types.d.ts.map +1 -1
  200. package/dist/server/src/services/hub-tools.service.d.ts +43 -72
  201. package/dist/server/src/services/hub-tools.service.d.ts.map +1 -1
  202. package/dist/server/src/services/hub-tools.service.js +185 -110
  203. package/dist/server/src/services/search/search-cache.d.ts +0 -19
  204. package/dist/server/src/services/search/search-cache.d.ts.map +1 -1
  205. package/dist/server/src/services/search/search-cache.js +0 -24
  206. package/dist/server/src/services/search/search-core.service.d.ts +5 -5
  207. package/dist/server/src/services/search/search-core.service.js +11 -11
  208. package/dist/server/src/services/session/session-manager.d.ts +12 -256
  209. package/dist/server/src/services/session/session-manager.d.ts.map +1 -1
  210. package/dist/server/src/services/session/session-manager.js +23 -583
  211. package/dist/server/src/services/session-tracker.service.d.ts +124 -0
  212. package/dist/server/src/services/session-tracker.service.d.ts.map +1 -0
  213. package/dist/server/src/services/session-tracker.service.js +176 -0
  214. package/dist/server/src/services/system-tool-handler.d.ts.map +1 -1
  215. package/dist/server/src/services/system-tool-handler.js +7 -17
  216. package/dist/server/src/utils/composite-key.d.ts +29 -0
  217. package/dist/server/src/utils/composite-key.d.ts.map +1 -0
  218. package/dist/server/src/utils/composite-key.js +39 -0
  219. package/dist/server/src/utils/error-handler.d.ts.map +1 -1
  220. package/dist/server/src/utils/error-handler.js +3 -2
  221. package/dist/server/src/utils/index.d.ts +2 -0
  222. package/dist/server/src/utils/index.d.ts.map +1 -1
  223. package/dist/server/src/utils/index.js +2 -0
  224. package/dist/server/src/utils/instance-id.d.ts +22 -0
  225. package/dist/server/src/utils/instance-id.d.ts.map +1 -0
  226. package/dist/server/src/utils/instance-id.js +59 -0
  227. package/dist/server/src/utils/json-utils.d.ts +4 -4
  228. package/dist/server/src/utils/json-utils.d.ts.map +1 -1
  229. package/dist/server/src/utils/json-utils.js +10 -4
  230. package/dist/server/src/utils/logger/dev-logger.d.ts +2 -1
  231. package/dist/server/src/utils/logger/dev-logger.d.ts.map +1 -1
  232. package/dist/server/src/utils/logger/log-colors.d.ts +1 -0
  233. package/dist/server/src/utils/logger/log-colors.d.ts.map +1 -1
  234. package/dist/server/src/utils/logger/log-colors.js +2 -1
  235. package/dist/server/src/utils/logger/log-context.d.ts +1 -0
  236. package/dist/server/src/utils/logger/log-context.d.ts.map +1 -1
  237. package/dist/server/src/utils/logger/log-formatter.d.ts +28 -0
  238. package/dist/server/src/utils/logger/log-formatter.d.ts.map +1 -1
  239. package/dist/server/src/utils/logger/log-formatter.js +287 -5
  240. package/dist/server/src/utils/logger/log-modules.d.ts +15 -12
  241. package/dist/server/src/utils/logger/log-modules.d.ts.map +1 -1
  242. package/dist/server/src/utils/logger/log-modules.js +8 -8
  243. package/dist/server/src/utils/logger/log-output.d.ts +2 -2
  244. package/dist/server/src/utils/logger/log-output.d.ts.map +1 -1
  245. package/dist/server/src/utils/logger/log-output.js +27 -6
  246. package/dist/server/src/utils/logger/logger.d.ts +13 -0
  247. package/dist/server/src/utils/logger/logger.d.ts.map +1 -1
  248. package/dist/server/src/utils/logger/logger.js +42 -7
  249. package/dist/server/src/utils/parameter-validator.d.ts +10 -0
  250. package/dist/server/src/utils/parameter-validator.d.ts.map +1 -0
  251. package/dist/server/src/utils/parameter-validator.js +53 -0
  252. package/dist/server/src/utils/process-tree.d.ts +49 -0
  253. package/dist/server/src/utils/process-tree.d.ts.map +1 -0
  254. package/dist/server/src/utils/process-tree.js +285 -0
  255. package/dist/server/src/utils/request-context.d.ts +12 -30
  256. package/dist/server/src/utils/request-context.d.ts.map +1 -1
  257. package/dist/server/src/utils/request-context.js +10 -30
  258. package/dist/server/src/utils/sort-utils.d.ts +40 -0
  259. package/dist/server/src/utils/sort-utils.d.ts.map +1 -0
  260. package/dist/server/src/utils/sort-utils.js +131 -0
  261. package/dist/server/src/utils/tool-args-parser.d.ts +0 -4
  262. package/dist/server/src/utils/tool-args-parser.d.ts.map +1 -1
  263. package/dist/server/src/utils/tool-args-parser.js +0 -7
  264. package/dist/server/src/utils/transports/sse-transport.d.ts +16 -1
  265. package/dist/server/src/utils/transports/sse-transport.d.ts.map +1 -1
  266. package/dist/server/src/utils/transports/sse-transport.js +55 -9
  267. package/dist/server/src/utils/transports/stdio-transport.d.ts +24 -53
  268. package/dist/server/src/utils/transports/stdio-transport.d.ts.map +1 -1
  269. package/dist/server/src/utils/transports/stdio-transport.js +66 -247
  270. package/dist/server/src/utils/transports/streamable-http-transport.d.ts +24 -1
  271. package/dist/server/src/utils/transports/streamable-http-transport.d.ts.map +1 -1
  272. package/dist/server/src/utils/transports/streamable-http-transport.js +68 -8
  273. package/dist/server/src/utils/transports/transport-factory.d.ts +9 -4
  274. package/dist/server/src/utils/transports/transport-factory.d.ts.map +1 -1
  275. package/dist/server/src/utils/transports/transport-factory.js +33 -13
  276. package/dist/server/src/utils/transports/transport.interface.d.ts +6 -0
  277. package/dist/server/src/utils/transports/transport.interface.d.ts.map +1 -1
  278. package/dist/server/src/utils/version.d.ts +11 -0
  279. package/dist/server/src/utils/version.d.ts.map +1 -0
  280. package/dist/server/src/utils/version.js +57 -0
  281. package/dist/server/tests/contract/mcp-protocol/initialize.test.js +24 -24
  282. package/dist/server/tests/contract/mcp-protocol/tools-call.test.js +49 -45
  283. package/dist/server/tests/contract/mcp-protocol/tools-list.test.js +35 -36
  284. package/dist/server/tests/evaluation/evaluation.test.js +10 -9
  285. package/dist/server/tests/integration/api/gateway.test.js +24 -39
  286. package/dist/server/tests/integration/gateway/fault-tolerance.test.js +65 -25
  287. package/dist/server/tests/integration/gateway/mcp-connection.test.js +53 -61
  288. package/dist/server/tests/server.test.js +27 -16
  289. package/dist/server/tests/temp/temp-run-docling.d.ts +2 -0
  290. package/dist/server/tests/temp/temp-run-docling.d.ts.map +1 -0
  291. package/dist/server/tests/temp/temp-run-docling.js +53 -0
  292. package/dist/server/tests/temp/test-stack.d.ts +6 -0
  293. package/dist/server/tests/temp/test-stack.d.ts.map +1 -0
  294. package/dist/server/tests/temp/test-stack.js +40 -0
  295. package/dist/server/tests/types/test-helpers.d.ts +1 -2
  296. package/dist/server/tests/types/test-helpers.d.ts.map +1 -1
  297. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts +2 -0
  298. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.d.ts.map +1 -0
  299. package/dist/server/tests/unit/config/config-loader-automatic-migration.test.js +199 -0
  300. package/dist/server/tests/unit/config/config-migrator.test.d.ts +2 -0
  301. package/dist/server/tests/unit/config/config-migrator.test.d.ts.map +1 -0
  302. package/dist/server/tests/unit/config/config-migrator.test.js +316 -0
  303. package/dist/server/tests/unit/config/config-saver.test.d.ts +2 -0
  304. package/dist/server/tests/unit/config/config-saver.test.d.ts.map +1 -0
  305. package/dist/server/tests/unit/config/config-saver.test.js +200 -0
  306. package/dist/server/tests/unit/config/config.schema.test.d.ts +2 -0
  307. package/dist/server/tests/unit/config/config.schema.test.d.ts.map +1 -0
  308. package/dist/server/tests/unit/config/config.schema.test.js +347 -0
  309. package/dist/server/tests/unit/server/runner.test.js +86 -62
  310. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts +2 -0
  311. package/dist/server/tests/unit/services/connection/connection-manager.test.d.ts.map +1 -0
  312. package/dist/server/tests/unit/services/connection/connection-manager.test.js +112 -0
  313. package/dist/server/tests/unit/services/hub-manager-service.test.js +112 -46
  314. package/dist/server/tests/unit/services/hub-manager.test.js +25 -15
  315. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts +2 -0
  316. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.d.ts.map +1 -0
  317. package/dist/server/tests/unit/services/hub-tools/instance-selector.test.js +195 -0
  318. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts +2 -0
  319. package/dist/server/tests/unit/services/hub-tools/server-selector.test.d.ts.map +1 -0
  320. package/dist/server/tests/unit/services/hub-tools/server-selector.test.js +190 -0
  321. package/dist/server/tests/unit/services/hub-tools.service.test.js +560 -334
  322. package/dist/server/tests/unit/services/instance-matcher.test.d.ts +2 -0
  323. package/dist/server/tests/unit/services/instance-matcher.test.d.ts.map +1 -0
  324. package/dist/server/tests/unit/services/instance-matcher.test.js +256 -0
  325. package/dist/server/tests/unit/services/session-manager.test.js +26 -436
  326. package/dist/server/tests/unit/utils/config.test.js +88 -186
  327. package/dist/server/tests/unit/utils/json-utils.test.js +107 -13
  328. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts +2 -0
  329. package/dist/server/tests/unit/utils/logger-formatter.test.d.ts.map +1 -0
  330. package/dist/server/tests/unit/utils/logger-formatter.test.js +66 -0
  331. package/dist/server/tests/unit/utils/logger.test.js +101 -0
  332. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts +2 -0
  333. package/dist/server/tests/unit/utils/parameter-validator.test.d.ts.map +1 -0
  334. package/dist/server/tests/unit/utils/parameter-validator.test.js +63 -0
  335. package/dist/server/tests/unit/utils/process-tree.test.d.ts +2 -0
  336. package/dist/server/tests/unit/utils/process-tree.test.d.ts.map +1 -0
  337. package/dist/server/tests/unit/utils/process-tree.test.js +129 -0
  338. package/dist/server/tests/unit/utils/request-context.test.js +9 -28
  339. package/dist/server/tests/unit/utils/sort-utils.test.d.ts +2 -0
  340. package/dist/server/tests/unit/utils/sort-utils.test.d.ts.map +1 -0
  341. package/dist/server/tests/unit/utils/sort-utils.test.js +220 -0
  342. package/dist/server/tests/unit/utils/transport-factory.test.d.ts +2 -0
  343. package/dist/server/tests/unit/utils/transport-factory.test.d.ts.map +1 -0
  344. package/dist/server/tests/unit/utils/transport-factory.test.js +55 -0
  345. package/package.json +1 -1
  346. package/dist/client/assets/ResourceDetailView-BQ49hk0c.js +0 -1
  347. package/dist/client/assets/ResourcesView-BYZfWtia.js +0 -1
  348. package/dist/client/assets/ResourcesView-CjMklkyv.css +0 -1
  349. package/dist/client/assets/ServerDashboard-7_8Og9JJ.css +0 -1
  350. package/dist/client/assets/ServerDashboard-DHcxwKeh.js +0 -2
  351. package/dist/client/assets/ServerListView-DralUL71.js +0 -30
  352. package/dist/client/assets/ServerStatusTags.vue_vue_type_script_setup_true_lang-BHiTFM7-.js +0 -1
  353. package/dist/client/assets/SessionsView-BCGRTqem.js +0 -1
  354. package/dist/client/assets/SettingsView-BLfxa6PZ.js +0 -1
  355. package/dist/client/assets/ToolCallDialog-DQ0OQ1mD.js +0 -1
  356. package/dist/client/assets/ToolsView-BLB6x3tC.js +0 -1
  357. package/dist/client/assets/_baseClone-Bo5mBgsT.js +0 -1
  358. package/dist/client/assets/el-form-item-BVMLpmVC.css +0 -1
  359. package/dist/client/assets/el-form-item-BmeJKVSi.js +0 -12
  360. package/dist/client/assets/el-input-CeZiq23m.js +0 -1
  361. package/dist/client/assets/el-input-CmuHb8HS.css +0 -1
  362. package/dist/client/assets/el-overlay-B2ZKM6Up.css +0 -1
  363. package/dist/client/assets/el-overlay-iw_hrrlC.js +0 -1
  364. package/dist/client/assets/el-select-B73uRP_Y.js +0 -1
  365. package/dist/client/assets/el-tab-pane-BgOTBn4X.js +0 -1
  366. package/dist/client/assets/el-table-column-Ld4GSD3x.js +0 -1
  367. package/dist/client/assets/el-table-column-T_mV9jNw.css +0 -1
  368. package/dist/client/assets/el-tag-DYmSo8Bx.js +0 -1
  369. package/dist/client/assets/el-tag-DjxZVOpb.css +0 -1
  370. package/dist/client/assets/index-COYaYRbH.js +0 -1
  371. package/dist/client/assets/index-Cfcvxyee.js +0 -2
  372. package/dist/client/assets/index-PhuI36Zi.js +0 -1
  373. package/dist/client/assets/omit-7EL6VJO4.js +0 -1
  374. package/dist/client/assets/vnode-upjuIlvm.js +0 -1
@@ -10,6 +10,7 @@
10
10
  * - Error formatting with stack trace truncation to prevent overly verbose logs
11
11
  * - MCP server-specific logging with serverName context
12
12
  * - Log rotation with date-based file naming and automatic cleanup
13
+ * - Caller location information (file name and line number)
13
14
  *
14
15
  * The logger supports four log levels: debug, info, warn, and error, with configurable
15
16
  * minimum log level threshold.
@@ -28,12 +29,13 @@
28
29
  */
29
30
  import { DevLogger } from './dev-logger.js';
30
31
  import { LOG_MODULES } from './log-modules.js';
31
- import { createColoredLogMessage, createLogMessage, formatError, formatTimestamp, formatLogLevel, formatPid } from './log-formatter.js';
32
+ import { createColoredLogMessage, createLogMessage, formatError, formatTimestamp, formatLogLevel, formatPid, getCallerInfo, formatCallerInfo } from './log-formatter.js';
32
33
  import { setDevModeEnabled } from '../json-utils.js';
33
34
  export class Logger {
34
35
  level = 'info';
35
36
  useStderr = false;
36
37
  useColor = true;
38
+ showCaller = true;
37
39
  devLogger = new DevLogger();
38
40
  constructor(level = 'info') {
39
41
  this.level = level;
@@ -45,6 +47,24 @@ export class Logger {
45
47
  if (noColorEnv === 'true' || noColorEnv === '1' || noColorEnv === '') {
46
48
  this.setUseColor(false);
47
49
  }
50
+ // Check LOG_CALLER environment variable
51
+ const logCallerEnv = process.env.LOG_CALLER;
52
+ if (logCallerEnv === 'false' || logCallerEnv === '0') {
53
+ this.setShowCaller(false);
54
+ }
55
+ }
56
+ /**
57
+ * Enable or disable caller information in logs.
58
+ * When enabled, logs will show the file name and line number where the log was called.
59
+ *
60
+ * @param show - Whether to show caller information
61
+ * @example
62
+ * ```typescript
63
+ * logger.setShowCaller(false); // Disable caller info
64
+ * ```
65
+ */
66
+ setShowCaller(show) {
67
+ this.showCaller = show;
48
68
  }
49
69
  /**
50
70
  * Enables development logging mode with file output and enhanced debugging.
@@ -101,13 +121,19 @@ export class Logger {
101
121
  const formattedArgs = args.map((arg) => formatError(arg)).join(' ');
102
122
  fullMessage = `${message} ${formattedArgs}`;
103
123
  }
104
- const context = options
105
- ? {
106
- module: options.module,
107
- traceId: options.traceId,
108
- spanId: options.spanId
124
+ // Build context object
125
+ const context = {
126
+ ...(options?.module && { module: options.module }),
127
+ ...(options?.traceId && { traceId: options.traceId }),
128
+ ...(options?.spanId && { spanId: options.spanId })
129
+ };
130
+ // Add caller info if enabled
131
+ if (this.showCaller) {
132
+ const callerInfo = getCallerInfo(4); // Skip 4 frames to get to the actual caller
133
+ if (callerInfo) {
134
+ context.caller = formatCallerInfo(callerInfo);
109
135
  }
110
- : undefined;
136
+ }
111
137
  const coloredLogMsg = createColoredLogMessage(level, fullMessage, context);
112
138
  const plainLogMsg = createLogMessage(level, fullMessage, context);
113
139
  const consoleLogMsg = this.useColor ? coloredLogMsg : plainLogMsg;
@@ -256,10 +282,19 @@ export class Logger {
256
282
  * Contains the core logging logic originally in serverLog.
257
283
  */
258
284
  logSingleServerLine(level, serverName, message, context) {
285
+ // Build log context with server name
259
286
  const logContext = {
260
287
  ...context,
261
288
  serverName
262
289
  };
290
+ // Add caller info if enabled (only once per serverLog call would be better,
291
+ // but for consistency with multi-line logging, we add it for each line)
292
+ if (this.showCaller) {
293
+ const callerInfo = getCallerInfo(5); // Skip 5 frames to get to the actual caller
294
+ if (callerInfo) {
295
+ logContext.caller = formatCallerInfo(callerInfo);
296
+ }
297
+ }
263
298
  const coloredLogMsg = createColoredLogMessage(level, message, logContext);
264
299
  const plainLogMsg = createLogMessage(level, message, logContext);
265
300
  const consoleLogMsg = this.useColor ? coloredLogMsg : plainLogMsg;
@@ -0,0 +1,10 @@
1
+ import type { JsonSchema } from '../../shared/models/tool.model.js';
2
+ /**
3
+ * Validates tool arguments against the provided JSON schema
4
+ *
5
+ * @param args - The tool arguments to validate
6
+ * @param schema - The JSON schema to validate against
7
+ * @returns null if valid, or an error message string if invalid
8
+ */
9
+ export declare function validateParameters(args: Record<string, unknown>, schema: JsonSchema): string | null;
10
+ //# sourceMappingURL=parameter-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-validator.d.ts","sourceRoot":"","sources":["../../../../src/utils/parameter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU,GACjB,MAAM,GAAG,IAAI,CAyBf"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Validates tool arguments against the provided JSON schema
3
+ *
4
+ * @param args - The tool arguments to validate
5
+ * @param schema - The JSON schema to validate against
6
+ * @returns null if valid, or an error message string if invalid
7
+ */
8
+ export function validateParameters(args, schema) {
9
+ // Check required fields
10
+ if (schema.required && Array.isArray(schema.required)) {
11
+ for (const requiredField of schema.required) {
12
+ if (!(requiredField in args)) {
13
+ return `Missing required parameter: '${requiredField}'. Required parameters: [${schema.required.join(', ')}]`;
14
+ }
15
+ }
16
+ }
17
+ // Check parameter types (basic validation)
18
+ if (schema.properties) {
19
+ for (const [paramName, paramSchema] of Object.entries(schema.properties)) {
20
+ if (paramName in args) {
21
+ const argValue = args[paramName];
22
+ const expectedType = paramSchema.type;
23
+ if (expectedType && !isValidType(argValue, expectedType)) {
24
+ return `Invalid type for parameter '${paramName}'. Expected: ${expectedType}, got: ${typeof argValue}`;
25
+ }
26
+ }
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ /**
32
+ * Validates if a value matches the expected type
33
+ *
34
+ * @param value - The value to validate
35
+ * @param expectedType - The expected JSON schema type
36
+ * @returns true if valid, false otherwise
37
+ */
38
+ function isValidType(value, expectedType) {
39
+ switch (expectedType) {
40
+ case 'string':
41
+ return typeof value === 'string';
42
+ case 'number':
43
+ return typeof value === 'number';
44
+ case 'boolean':
45
+ return typeof value === 'boolean';
46
+ case 'object':
47
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
48
+ case 'array':
49
+ return Array.isArray(value);
50
+ default:
51
+ return true; // Cannot validate unknown types, so pass by default
52
+ }
53
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Windows Process Tree Utility Module
3
+ *
4
+ * This module provides process tree management utilities specifically for Windows.
5
+ * It handles the case where shell: true spawns cmd.exe which then spawns
6
+ * the actual working process (like node.exe, python.exe, etc.).
7
+ *
8
+ * On non-Windows platforms, all methods return safe default values
9
+ * and don't perform any actual operations.
10
+ */
11
+ /**
12
+ * Gets all child process IDs for a given parent PID on Windows.
13
+ *
14
+ * @param pid - Parent process ID
15
+ @returns Promise resolving to array of child PID
16
+ */
17
+ export declare function getChildren(pid: number): Promise<number[]>;
18
+ /**
19
+ * Gets the entire process tree (all descendants) for a given PID.
20
+ * Includes the original PID at the beginning of the array.
21
+ *
22
+ * @param pid - Root process ID
23
+ * @returns Array of all process IDs in the tree
24
+ */
25
+ export declare function getProcessTree(pid: number): Promise<number[]>;
26
+ /**
27
+ * Checks if any process in the process tree is still running.
28
+ *
29
+ * @param pid - Root process ID
30
+ * @returns True if any process in the tree is running
31
+ */
32
+ export declare function isAnyInTreeRunning(pid: number): Promise<boolean>;
33
+ /**
34
+ * Tries to find the actual working process PID in the tree.
35
+ * This looks for processes that are likely the actual worker
36
+ * (node.exe, python.exe, etc.) rather than shell processes.
37
+ *
38
+ * @param pid - Root process ID
39
+ * @returns Working process PID if found, undefined otherwise
40
+ */
41
+ export declare function getWorkingProcessPid(pid: number): Promise<number | undefined>;
42
+ /**
43
+ * Kills the entire process tree.
44
+ *
45
+ * @param pid - Root process ID
46
+ * @param signal - Signal to send (default: SIGTERM)
47
+ */
48
+ export declare function killProcessTree(pid: number, signal?: NodeJS.Signals): Promise<void>;
49
+ //# sourceMappingURL=process-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tree.d.ts","sourceRoot":"","sources":["../../../../src/utils/process-tree.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBhE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBtE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkCnF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,CAAC,OAAmB,GACjC,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,285 @@
1
+ import { spawn } from 'child_process';
2
+ import { logger, LOG_MODULES } from './logger.js';
3
+ /**
4
+ * Windows Process Tree Utility Module
5
+ *
6
+ * This module provides process tree management utilities specifically for Windows.
7
+ * It handles the case where shell: true spawns cmd.exe which then spawns
8
+ * the actual working process (like node.exe, python.exe, etc.).
9
+ *
10
+ * On non-Windows platforms, all methods return safe default values
11
+ * and don't perform any actual operations.
12
+ */
13
+ /**
14
+ * Gets all child process IDs for a given parent PID on Windows.
15
+ *
16
+ * @param pid - Parent process ID
17
+ @returns Promise resolving to array of child PID
18
+ */
19
+ export async function getChildren(pid) {
20
+ if (process.platform !== 'win32') {
21
+ return [];
22
+ }
23
+ try {
24
+ const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq ${pid} } | Select-Object -ExpandProperty ProcessId`);
25
+ const pids = parsePidList(result);
26
+ return pids;
27
+ }
28
+ catch (error) {
29
+ logger.debug(`Failed to get children for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
30
+ return [];
31
+ }
32
+ }
33
+ /**
34
+ * Gets the entire process tree (all descendants) for a given PID.
35
+ * Includes the original PID at the beginning of the array.
36
+ *
37
+ * @param pid - Root process ID
38
+ * @returns Array of all process IDs in the tree
39
+ */
40
+ export async function getProcessTree(pid) {
41
+ if (process.platform !== 'win32') {
42
+ return [pid];
43
+ }
44
+ const tree = [pid];
45
+ const queue = [pid];
46
+ while (queue.length > 0) {
47
+ const current = queue.shift();
48
+ const children = await getChildren(current);
49
+ for (const child of children) {
50
+ if (!tree.includes(child)) {
51
+ tree.push(child);
52
+ queue.push(child);
53
+ }
54
+ }
55
+ }
56
+ return tree;
57
+ }
58
+ /**
59
+ * Checks if any process in the process tree is still running.
60
+ *
61
+ * @param pid - Root process ID
62
+ * @returns True if any process in the tree is running
63
+ */
64
+ export async function isAnyInTreeRunning(pid) {
65
+ if (process.platform !== 'win32') {
66
+ return isProcessRunning(pid);
67
+ }
68
+ try {
69
+ const tree = await getProcessTree(pid);
70
+ for (const processId of tree) {
71
+ if (isProcessRunning(processId)) {
72
+ return true;
73
+ }
74
+ }
75
+ return false;
76
+ }
77
+ catch (error) {
78
+ logger.debug(`Error checking process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
79
+ return isProcessRunning(pid);
80
+ }
81
+ }
82
+ /**
83
+ * Tries to find the actual working process PID in the tree.
84
+ * This looks for processes that are likely the actual worker
85
+ * (node.exe, python.exe, etc.) rather than shell processes.
86
+ *
87
+ * @param pid - Root process ID
88
+ * @returns Working process PID if found, undefined otherwise
89
+ */
90
+ export async function getWorkingProcessPid(pid) {
91
+ if (process.platform !== 'win32') {
92
+ return pid;
93
+ }
94
+ try {
95
+ const tree = await getProcessTree(pid);
96
+ // If only the root process is in the tree, return it
97
+ if (tree.length === 1) {
98
+ return pid;
99
+ }
100
+ // Get process names for all PIDs in the tree
101
+ const processInfo = await getProcessInfo(tree);
102
+ // Filter out shell processes (cmd.exe, powershell.exe, etc.)
103
+ const workerProcesses = processInfo.filter((info) => !isShellProcess(info.name));
104
+ if (workerProcesses.length > 0) {
105
+ // Prefer the deepest (last) worker process in the tree
106
+ return workerProcesses[workerProcesses.length - 1].pid;
107
+ }
108
+ // If no worker processes found, return the last process in the tree
109
+ return tree[tree.length - 1];
110
+ }
111
+ catch (error) {
112
+ logger.debug(`Error finding working process for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
113
+ return pid;
114
+ }
115
+ }
116
+ /**
117
+ * Kills the entire process tree.
118
+ *
119
+ * @param pid - Root process ID
120
+ * @param signal - Signal to send (default: SIGTERM)
121
+ */
122
+ export async function killProcessTree(pid, signal = 'SIGTERM') {
123
+ if (process.platform !== 'win32') {
124
+ // On non-Windows, just kill the single process
125
+ try {
126
+ process.kill(pid, signal);
127
+ }
128
+ catch {
129
+ // Process might already be dead
130
+ }
131
+ return;
132
+ }
133
+ try {
134
+ const tree = await getProcessTree(pid);
135
+ // Kill processes in reverse order (children first, parent last)
136
+ for (let i = tree.length - 1; i >= 0; i--) {
137
+ const processId = tree[i];
138
+ try {
139
+ process.kill(processId, signal);
140
+ }
141
+ catch {
142
+ // Process might already be dead
143
+ }
144
+ }
145
+ }
146
+ catch (error) {
147
+ logger.debug(`Error killing process tree for PID ${pid}:`, error, LOG_MODULES.STDIO_TRANSPORT);
148
+ // Fallback: try to kill just the root process
149
+ try {
150
+ process.kill(pid, signal);
151
+ }
152
+ catch {
153
+ // Process might already be dead
154
+ }
155
+ }
156
+ }
157
+ // ==================== Internal Helper Functions ====================
158
+ /**
159
+ * Checks if a single process is running.
160
+ *
161
+ * @param pid - Process ID
162
+ * @returns True if process is running
163
+ */
164
+ function isProcessRunning(pid) {
165
+ try {
166
+ process.kill(pid, 0);
167
+ return true;
168
+ }
169
+ catch {
170
+ return false;
171
+ }
172
+ }
173
+ /**
174
+ * Executes a PowerShell command and returns the output.
175
+ *
176
+ * @param command - PowerShell command
177
+ * @returns Command output
178
+ */
179
+ async function executePowerShellCommand(command) {
180
+ return new Promise((resolve, reject) => {
181
+ const ps = spawn('powershell.exe', ['-Command', command], {
182
+ windowsHide: true,
183
+ stdio: ['ignore', 'pipe', 'pipe']
184
+ });
185
+ let stdout = '';
186
+ let stderr = '';
187
+ ps.stdout?.on('data', (data) => {
188
+ stdout += data.toString();
189
+ });
190
+ ps.stderr?.on('data', (data) => {
191
+ stderr += data.toString();
192
+ });
193
+ ps.on('close', (code) => {
194
+ if (code === 0) {
195
+ resolve(stdout.trim());
196
+ }
197
+ else {
198
+ reject(new Error(`PowerShell command failed: ${stderr || stdout}`));
199
+ }
200
+ });
201
+ ps.on('error', (error) => {
202
+ reject(error);
203
+ });
204
+ });
205
+ }
206
+ /**
207
+ * Parses a list of PIDs from command output.
208
+ *
209
+ * @param output - Command output
210
+ * * @returns Array of PIDs
211
+ */
212
+ function parsePidList(output) {
213
+ const lines = output
214
+ .split('\n')
215
+ .map((line) => line.trim())
216
+ .filter((line) => line.length > 0);
217
+ const pids = [];
218
+ for (const line of lines) {
219
+ const pid = parseInt(line, 10);
220
+ if (!isNaN(pid) && pid > 0) {
221
+ pids.push(pid);
222
+ }
223
+ }
224
+ return pids;
225
+ }
226
+ /**
227
+ * Gets process information for multiple PIDs.
228
+ *
229
+ * @param pids - Array of process IDs
230
+ * @returns Array of process info objects
231
+ */
232
+ async function getProcessInfo(pids) {
233
+ if (pids.length === 0) {
234
+ return [];
235
+ }
236
+ const result = await executePowerShellCommand(`Get-CimInstance Win32_Process | Where-Object { ${pids.map((pid) => `$_.ProcessId -eq ${pid}`).join(' -or ')} } | Select-Object ProcessId, Name | ConvertTo-Csv -NoTypeInformation`);
237
+ return parseProcessInfoCsv(result);
238
+ }
239
+ /**
240
+ * Parses process info from CSV output.
241
+ *
242
+ * @param csvOutput - CSV output from PowerShell
243
+ * @ *returns Array of process info
244
+ */
245
+ function parseProcessInfoCsv(csvOutput) {
246
+ const lines = csvOutput
247
+ .split('\n')
248
+ .map((line) => line.trim())
249
+ .filter((line) => line.length > 0);
250
+ if (lines.length < 2) {
251
+ return [];
252
+ }
253
+ const info = [];
254
+ // Skip header line
255
+ for (let i = 1; i < lines.length; i++) {
256
+ const parts = lines[i].split(',').map((p) => p.trim().replace(/^"|"$/g, ''));
257
+ if (parts.length >= 2) {
258
+ const pid = parseInt(parts[0], 10);
259
+ if (!isNaN(pid) && pid > 0) {
260
+ info.push({
261
+ pid,
262
+ name: parts[1].toLowerCase()
263
+ });
264
+ }
265
+ }
266
+ }
267
+ return info;
268
+ }
269
+ /**
270
+ * Checks if a process name is a shell process.
271
+ *
272
+ * @param processName - Process name (should be lowercase)
273
+ * @returns True if it's a shell process
274
+ */
275
+ function isShellProcess(processName) {
276
+ const shellProcesses = [
277
+ 'cmd.exe',
278
+ 'powershell.exe',
279
+ 'pwsh.exe',
280
+ 'command.com',
281
+ 'sh.exe',
282
+ 'bash.exe'
283
+ ];
284
+ return shellProcesses.includes(processName.toLowerCase());
285
+ }
@@ -6,66 +6,48 @@
6
6
  * every function call. It uses Node.js AsyncLocalStorage to maintain context
7
7
  * throughout the request lifecycle.
8
8
  *
9
- * The primary use case is storing client context information (sessionId, clientName,
9
+ * The primary use case is storing session context information (sessionId, clientName,
10
10
  * cwd, project, etc.) that needs to be accessible from any part of the application
11
11
  * during request processing.
12
12
  *
13
13
  * @module utils/request-context
14
14
  */
15
15
  import { AsyncLocalStorage } from 'async_hooks';
16
- import type { ClientContext } from '../../shared/types/client.types.js';
16
+ import type { SessionContext } from '../../shared/types/session-context.types.js';
17
17
  /**
18
18
  * AsyncLocalStorage instance for storing request context.
19
19
  *
20
- * This storage holds the ClientContext object for the current request and
20
+ * This storage holds the SessionContext object for the current request and
21
21
  * makes it available throughout the entire request processing chain,
22
22
  * including asynchronous operations and nested function calls.
23
23
  *
24
24
  * @example
25
25
  * ```typescript
26
26
  * // In route handler
27
- * await requestContext.run(clientContext, async () => {
28
- * // Any code executed here can access the client context
29
- * const ctx = getClientContext();
27
+ * await requestContext.run(sessionContext, async () => {
28
+ * // Any code executed here can access the session context
29
+ * const ctx = getSessionContext();
30
30
  * console.log(ctx.sessionId);
31
31
  * });
32
32
  * ```
33
33
  */
34
- export declare const requestContext: AsyncLocalStorage<ClientContext>;
34
+ export declare const requestContext: AsyncLocalStorage<SessionContext>;
35
35
  /**
36
- * Retrieves the current request's client context.
36
+ * Retrieves the current request's session context.
37
37
  *
38
- * This function returns the ClientContext object stored in the AsyncLocalStorage
38
+ * This function returns the SessionContext object stored in the AsyncLocalStorage
39
39
  * for the current request. It should only be called within a request context
40
40
  * that has been established using requestContext.run().
41
41
  *
42
- * @returns {ClientContext | undefined} The current request's client context, or undefined if not in a request context
42
+ * @returns {SessionContext | undefined} The current request's session context, or undefined if not in a request context
43
43
  *
44
44
  * @example
45
45
  * ```typescript
46
- * const context = getClientContext();
46
+ * const context = getSessionContext();
47
47
  * if (context) {
48
48
  * console.log(`Processing request for session: ${context.sessionId}`);
49
49
  * }
50
50
  * ```
51
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;
52
+ export declare function getSessionContext(): SessionContext | undefined;
71
53
  //# sourceMappingURL=request-context.d.ts.map
@@ -1 +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"}
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,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,cAAc,mCAA0C,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D"}
@@ -6,7 +6,7 @@
6
6
  * every function call. It uses Node.js AsyncLocalStorage to maintain context
7
7
  * throughout the request lifecycle.
8
8
  *
9
- * The primary use case is storing client context information (sessionId, clientName,
9
+ * The primary use case is storing session context information (sessionId, clientName,
10
10
  * cwd, project, etc.) that needs to be accessible from any part of the application
11
11
  * during request processing.
12
12
  *
@@ -16,58 +16,38 @@ import { AsyncLocalStorage } from 'async_hooks';
16
16
  /**
17
17
  * AsyncLocalStorage instance for storing request context.
18
18
  *
19
- * This storage holds the ClientContext object for the current request and
19
+ * This storage holds the SessionContext object for the current request and
20
20
  * makes it available throughout the entire request processing chain,
21
21
  * including asynchronous operations and nested function calls.
22
22
  *
23
23
  * @example
24
24
  * ```typescript
25
25
  * // In route handler
26
- * await requestContext.run(clientContext, async () => {
27
- * // Any code executed here can access the client context
28
- * const ctx = getClientContext();
26
+ * await requestContext.run(sessionContext, async () => {
27
+ * // Any code executed here can access the session context
28
+ * const ctx = getSessionContext();
29
29
  * console.log(ctx.sessionId);
30
30
  * });
31
31
  * ```
32
32
  */
33
33
  export const requestContext = new AsyncLocalStorage();
34
34
  /**
35
- * Retrieves the current request's client context.
35
+ * Retrieves the current request's session context.
36
36
  *
37
- * This function returns the ClientContext object stored in the AsyncLocalStorage
37
+ * This function returns the SessionContext object stored in the AsyncLocalStorage
38
38
  * for the current request. It should only be called within a request context
39
39
  * that has been established using requestContext.run().
40
40
  *
41
- * @returns {ClientContext | undefined} The current request's client context, or undefined if not in a request context
41
+ * @returns {SessionContext | undefined} The current request's session context, or undefined if not in a request context
42
42
  *
43
43
  * @example
44
44
  * ```typescript
45
- * const context = getClientContext();
45
+ * const context = getSessionContext();
46
46
  * if (context) {
47
47
  * console.log(`Processing request for session: ${context.sessionId}`);
48
48
  * }
49
49
  * ```
50
50
  */
51
- export function getClientContext() {
51
+ export function getSessionContext() {
52
52
  return requestContext.getStore();
53
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
- }