@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
@@ -1,10 +1,5 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import os from 'node:os';
5
- import { SessionStateSchema, SessionStoreSchema, createEmptySessionStore, validateSessionStore } from '../../../shared/models/session.model.js';
6
- // Reset module cache
7
- vi.resetModules();
1
+ import { describe, it, expect } from 'vitest';
2
+ import { SessionStateSchema } from '../../../shared/models/session.model.js';
8
3
  describe('Session Model', () => {
9
4
  describe('SessionStateSchema', () => {
10
5
  it('should validate a valid session state', () => {
@@ -12,8 +7,6 @@ describe('Session Model', () => {
12
7
  sessionId: 'test-session-123',
13
8
  clientName: 'test-client',
14
9
  clientVersion: '1.0.0',
15
- cwd: '/path/to/project',
16
- project: 'test-project',
17
10
  createdAt: Date.now(),
18
11
  lastAccessedAt: Date.now(),
19
12
  metadata: {}
@@ -32,7 +25,6 @@ describe('Session Model', () => {
32
25
  };
33
26
  expect(minimalState.sessionId).toBe('test-session');
34
27
  expect(minimalState.clientName).toBeUndefined();
35
- expect(minimalState.cwd).toBeUndefined();
36
28
  });
37
29
  it('should handle metadata with arbitrary keys', () => {
38
30
  const stateWithMetadata = {
@@ -48,434 +40,32 @@ describe('Session Model', () => {
48
40
  expect(stateWithMetadata.metadata.customKey).toBe('customValue');
49
41
  expect(stateWithMetadata.metadata.numericKey).toBe(123);
50
42
  });
51
- });
52
- describe('SessionStoreSchema', () => {
53
- it('should create an empty session store', () => {
54
- const store = createEmptySessionStore();
55
- expect(store.version).toBe('1.0.0');
56
- expect(store.sessions).toEqual({});
57
- });
58
- it('should validate a valid session store', () => {
59
- const validStore = {
60
- version: '1.0.0',
61
- sessions: {
62
- 'session-1': {
63
- sessionId: 'session-1',
64
- createdAt: Date.now(),
65
- lastAccessedAt: Date.now(),
66
- metadata: {}
67
- }
68
- }
43
+ it('should support SessionState type with all optional fields', () => {
44
+ // Test full version
45
+ const fullState = {
46
+ sessionId: 'full-session-001',
47
+ clientName: 'test-client',
48
+ clientVersion: '1.0.0',
49
+ createdAt: Date.now(),
50
+ lastAccessedAt: Date.now(),
51
+ metadata: { foo: 'bar', count: 42 }
69
52
  };
70
- expect(validStore.version).toBe('1.0.0');
71
- expect(validStore.sessions['session-1']).toBeDefined();
72
- });
73
- it('should validate and normalize session store data', () => {
74
- const storeData = {
75
- version: '1.0.0',
76
- sessions: {
77
- 'session-1': {
78
- sessionId: 'session-1',
79
- createdAt: Date.now(),
80
- lastAccessedAt: Date.now(),
81
- metadata: {}
82
- }
83
- }
53
+ expect(fullState.sessionId).toBe('full-session-001');
54
+ expect(fullState.clientName).toBe('test-client');
55
+ // Test minimal version
56
+ const minimalState = {
57
+ sessionId: 'minimal-session-001',
58
+ createdAt: Date.now(),
59
+ lastAccessedAt: Date.now(),
60
+ metadata: {}
84
61
  };
85
- const validated = validateSessionStore(storeData);
86
- expect(validated.version).toBe('1.0.0');
87
- expect(validated.sessions['session-1']).toBeDefined();
88
- });
89
- it('should return empty store for invalid data', () => {
90
- const invalidData = { invalid: 'data' };
91
- const validated = validateSessionStore(invalidData);
92
- expect(validated.version).toBe('1.0.0');
93
- expect(validated.sessions).toEqual({});
62
+ expect(minimalState.sessionId).toBe('minimal-session-001');
63
+ expect(minimalState.clientName).toBeUndefined();
64
+ // Verify Schema validation
65
+ const fullResult = SessionStateSchema.safeParse(fullState);
66
+ const minimalResult = SessionStateSchema.safeParse(minimalState);
67
+ expect(fullResult.success).toBe(true);
68
+ expect(minimalResult.success).toBe(true);
94
69
  });
95
70
  });
96
71
  });
97
- describe('Session Persistence', () => {
98
- let tempDir;
99
- let sessionsPath;
100
- let originalEnv;
101
- beforeEach(() => {
102
- originalEnv = { ...process.env };
103
- // Create temporary directory
104
- const testRunId = `session-test-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
105
- tempDir = path.join(os.tmpdir(), `mcp-hub-session-test-${testRunId}`);
106
- sessionsPath = path.join(tempDir, 'sessions');
107
- fs.mkdirSync(tempDir, { recursive: true });
108
- // Set environment variables
109
- process.env.MCP_HUB_CONFIG_PATH = path.join(tempDir, '.mcp-hub.json');
110
- });
111
- afterEach(() => {
112
- // Restore environment variables
113
- process.env = { ...originalEnv };
114
- // Clean up temporary directory
115
- if (fs.existsSync(tempDir)) {
116
- let retries = 3;
117
- while (retries > 0) {
118
- try {
119
- fs.rmSync(tempDir, { recursive: true, force: true });
120
- break;
121
- }
122
- catch (error) {
123
- console.warn(`Failed to clean up test temp directory (retries left: ${retries - 1}): ${error}`);
124
- retries--;
125
- if (retries > 0) {
126
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
127
- }
128
- }
129
- }
130
- }
131
- vi.restoreAllMocks();
132
- });
133
- it('should create directory if it does not exist when saving', () => {
134
- const testStore = {
135
- version: '1.0.0',
136
- sessions: {
137
- 'test-session': {
138
- sessionId: 'test-session',
139
- createdAt: Date.now(),
140
- lastAccessedAt: Date.now(),
141
- metadata: {}
142
- }
143
- }
144
- };
145
- // Ensure directory doesn't exist
146
- if (fs.existsSync(sessionsPath)) {
147
- fs.rmSync(sessionsPath, { recursive: true, force: true });
148
- }
149
- // Simulate save operation - create sessions directory
150
- if (!fs.existsSync(sessionsPath)) {
151
- fs.mkdirSync(sessionsPath, { recursive: true });
152
- }
153
- // Save individual session file
154
- const sessionPath = path.join(sessionsPath, 'test-session.json');
155
- fs.writeFileSync(sessionPath, JSON.stringify(testStore.sessions['test-session'], null, 2));
156
- // Save index file
157
- const indexPath = path.join(sessionsPath, 'index.json');
158
- fs.writeFileSync(indexPath, JSON.stringify({ sessions: ['test-session'] }, null, 2));
159
- // Verify directory and files were created
160
- expect(fs.existsSync(sessionsPath)).toBe(true);
161
- expect(fs.existsSync(sessionPath)).toBe(true);
162
- expect(fs.existsSync(indexPath)).toBe(true);
163
- const savedSession = JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
164
- expect(savedSession.sessionId).toBe('test-session');
165
- const savedIndex = JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
166
- expect(savedIndex.sessions).toContain('test-session');
167
- });
168
- it('should read existing sessions directory', () => {
169
- // Create sessions directory
170
- if (!fs.existsSync(sessionsPath)) {
171
- fs.mkdirSync(sessionsPath, { recursive: true });
172
- }
173
- // Create individual session files
174
- const session1Path = path.join(sessionsPath, 'session-1.json');
175
- const session2Path = path.join(sessionsPath, 'session-2.json');
176
- fs.writeFileSync(session1Path, JSON.stringify({
177
- sessionId: 'session-1',
178
- clientName: 'test-client',
179
- createdAt: 1234567890,
180
- lastAccessedAt: 1234567890,
181
- metadata: {}
182
- }, null, 2));
183
- fs.writeFileSync(session2Path, JSON.stringify({
184
- sessionId: 'session-2',
185
- clientName: 'another-client',
186
- createdAt: 9876543210,
187
- lastAccessedAt: 9876543210,
188
- metadata: {}
189
- }, null, 2));
190
- // Create index file
191
- const indexPath = path.join(sessionsPath, 'index.json');
192
- fs.writeFileSync(indexPath, JSON.stringify({
193
- sessions: ['session-1', 'session-2']
194
- }, null, 2));
195
- // Simulate load operation
196
- const indexContent = JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
197
- const loadedSessions = {};
198
- for (const sessionId of indexContent.sessions) {
199
- const sessionPath = path.join(sessionsPath, `${sessionId}.json`);
200
- const sessionContent = JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
201
- loadedSessions[sessionId] = sessionContent;
202
- }
203
- const loadedStore = {
204
- version: '1.0.0',
205
- sessions: loadedSessions
206
- };
207
- const validated = validateSessionStore(loadedStore);
208
- expect(validated.version).toBe('1.0.0');
209
- expect(Object.keys(validated.sessions)).toHaveLength(2);
210
- expect(validated.sessions['session-1'].clientName).toBe('test-client');
211
- expect(validated.sessions['session-2'].clientName).toBe('another-client');
212
- });
213
- it('should handle missing sessions directory gracefully', () => {
214
- if (fs.existsSync(sessionsPath)) {
215
- fs.rmSync(sessionsPath, { recursive: true, force: true });
216
- }
217
- const store = createEmptySessionStore();
218
- expect(store.version).toBe('1.0.0');
219
- expect(store.sessions).toEqual({});
220
- });
221
- it('should handle invalid JSON in session files', () => {
222
- // Create sessions directory
223
- if (!fs.existsSync(sessionsPath)) {
224
- fs.mkdirSync(sessionsPath, { recursive: true });
225
- }
226
- // Create invalid session file
227
- const sessionPath = path.join(sessionsPath, 'invalid-session.json');
228
- fs.writeFileSync(sessionPath, 'invalid json content');
229
- // Create index file
230
- const indexPath = path.join(sessionsPath, 'index.json');
231
- fs.writeFileSync(indexPath, JSON.stringify({
232
- sessions: ['invalid-session']
233
- }, null, 2));
234
- const content = fs.readFileSync(sessionPath, 'utf-8');
235
- expect(() => JSON.parse(content)).toThrow();
236
- // Verify it returns empty store when validation fails
237
- const store = validateSessionStore(null);
238
- expect(store.version).toBe('1.0.0');
239
- expect(store.sessions).toEqual({});
240
- });
241
- it('should update sessions incrementally', () => {
242
- // Create sessions directory
243
- if (!fs.existsSync(sessionsPath)) {
244
- fs.mkdirSync(sessionsPath, { recursive: true });
245
- }
246
- // Initial session
247
- const session1Path = path.join(sessionsPath, 'session-1.json');
248
- fs.writeFileSync(session1Path, JSON.stringify({
249
- sessionId: 'session-1',
250
- createdAt: 1234567890,
251
- lastAccessedAt: 1234567890,
252
- metadata: {}
253
- }, null, 2));
254
- // Create initial index
255
- const indexPath = path.join(sessionsPath, 'index.json');
256
- fs.writeFileSync(indexPath, JSON.stringify({
257
- sessions: ['session-1']
258
- }, null, 2));
259
- // Add second session
260
- const session2Path = path.join(sessionsPath, 'session-2.json');
261
- fs.writeFileSync(session2Path, JSON.stringify({
262
- sessionId: 'session-2',
263
- createdAt: 9876543210,
264
- lastAccessedAt: 9876543210,
265
- metadata: {}
266
- }, null, 2));
267
- // Update index to include both sessions
268
- fs.writeFileSync(indexPath, JSON.stringify({
269
- sessions: ['session-1', 'session-2']
270
- }, null, 2));
271
- // Verify both sessions exist
272
- expect(fs.existsSync(session1Path)).toBe(true);
273
- expect(fs.existsSync(session2Path)).toBe(true);
274
- const session1Content = JSON.parse(fs.readFileSync(session1Path, 'utf-8'));
275
- const session2Content = JSON.parse(fs.readFileSync(session2Path, 'utf-8'));
276
- expect(session1Content.sessionId).toBe('session-1');
277
- expect(session2Content.sessionId).toBe('session-2');
278
- });
279
- it('should remove sessions when deleted', () => {
280
- // Create sessions directory
281
- if (!fs.existsSync(sessionsPath)) {
282
- fs.mkdirSync(sessionsPath, { recursive: true });
283
- }
284
- // Create initial sessions
285
- const session1Path = path.join(sessionsPath, 'session-1.json');
286
- const session2Path = path.join(sessionsPath, 'session-2.json');
287
- fs.writeFileSync(session1Path, JSON.stringify({
288
- sessionId: 'session-1',
289
- createdAt: 1234567890,
290
- lastAccessedAt: 1234567890,
291
- metadata: {}
292
- }, null, 2));
293
- fs.writeFileSync(session2Path, JSON.stringify({
294
- sessionId: 'session-2',
295
- createdAt: 9876543210,
296
- lastAccessedAt: 9876543210,
297
- metadata: {}
298
- }, null, 2));
299
- // Create initial index
300
- const indexPath = path.join(sessionsPath, 'index.json');
301
- fs.writeFileSync(indexPath, JSON.stringify({
302
- sessions: ['session-1', 'session-2']
303
- }, null, 2));
304
- // Delete session-1 (remove file and update index)
305
- fs.unlinkSync(session1Path);
306
- // Update index to only include session-2
307
- fs.writeFileSync(indexPath, JSON.stringify({
308
- sessions: ['session-2']
309
- }, null, 2));
310
- // Verify session-1 has been deleted
311
- expect(fs.existsSync(session1Path)).toBe(false);
312
- expect(fs.existsSync(session2Path)).toBe(true);
313
- const finalIndex = JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
314
- expect(finalIndex.sessions).toHaveLength(1);
315
- expect(finalIndex.sessions).toContain('session-2');
316
- expect(finalIndex.sessions).not.toContain('session-1');
317
- });
318
- });
319
- describe('McpSessionManager with Real SDK', () => {
320
- let tempDir;
321
- let originalEnv;
322
- beforeEach(() => {
323
- originalEnv = { ...process.env };
324
- // Create temporary directory
325
- const testRunId = `session-mgr-test-${Date.now()}-${Math.random().toString(36).substr(2, 5)}`;
326
- tempDir = path.join(os.tmpdir(), `mcp-hub-session-mgr-test-${testRunId}`);
327
- fs.mkdirSync(tempDir, { recursive: true });
328
- // Set environment variables
329
- process.env.MCP_HUB_CONFIG_PATH = path.join(tempDir, '.mcp-hub.json');
330
- process.env.SESSION_FLUSH_INTERVAL = '100'; // Fast refresh for testing
331
- });
332
- afterEach(() => {
333
- // Restore environment variables
334
- process.env = { ...originalEnv };
335
- // Clean up temporary directory
336
- if (fs.existsSync(tempDir)) {
337
- let retries = 3;
338
- while (retries > 0) {
339
- try {
340
- fs.rmSync(tempDir, { recursive: true, force: true });
341
- break;
342
- }
343
- catch {
344
- retries--;
345
- if (retries > 0) {
346
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
347
- }
348
- }
349
- }
350
- }
351
- vi.resetModules();
352
- vi.restoreAllMocks();
353
- });
354
- it('should manually initialize transport._webStandardTransport for restored sessions', async () => {
355
- // This test verifies the core fix logic in createSession method
356
- // Use real SDK types to simulate actual runtime flow
357
- // 1. Prepare test data - create real session state
358
- const testSessionId = 'test-session-restore-001';
359
- const testState = {
360
- sessionId: testSessionId,
361
- clientName: 'claude-code',
362
- clientVersion: '1.0.0',
363
- cwd: '/test/project/path',
364
- project: 'test-project',
365
- createdAt: Date.now() - 3600000,
366
- lastAccessedAt: Date.now() - 60000,
367
- metadata: {
368
- restoredFromDisk: true,
369
- testRun: 'integration-test'
370
- }
371
- };
372
- // 2. Import real SDK types
373
- // Note: We don't actually create SDK instances (to avoid side effects), but verify type compatibility
374
- // Verify type import path exists
375
- const { McpSessionManager: McpSessionManagerClass } = await import('../../../src/services/mcp-session-manager.js');
376
- const manager = new McpSessionManagerClass();
377
- manager.sessionStates.set(testSessionId, testState);
378
- // Verify state injection succeeded
379
- expect(manager.sessionStates.has(testSessionId)).toBe(true);
380
- const injectedState = manager.sessionStates.get(testSessionId);
381
- expect(injectedState).toBeDefined();
382
- if (injectedState) {
383
- expect(injectedState.sessionId).toBe(testSessionId);
384
- expect(injectedState.clientName).toBe('claude-code');
385
- }
386
- });
387
- it('should persist and reload session states using SessionStore schema', async () => {
388
- // This test verifies the complete persistence flow - using real SessionStore model
389
- // 1. Create test session store
390
- const sessionsPath = path.join(tempDir, 'sessions');
391
- const sessionIds = ['session-abc-123', 'session-def-456', 'session-ghi-789'];
392
- const sessions = {};
393
- for (const id of sessionIds) {
394
- sessions[id] = {
395
- sessionId: id,
396
- clientName: `client-${id}`,
397
- clientVersion: '2.0.0',
398
- cwd: `/workspace/project-${id}`,
399
- createdAt: Date.now() - 7200000,
400
- lastAccessedAt: Date.now() - 300000,
401
- metadata: {
402
- source: 'test-suite',
403
- createdAt: new Date().toISOString()
404
- }
405
- };
406
- }
407
- const testStore = {
408
- version: '1.0.0',
409
- sessions
410
- };
411
- // 2. Save to disk - simulate real persistence flow
412
- fs.mkdirSync(path.dirname(sessionsPath), { recursive: true });
413
- fs.writeFileSync(sessionsPath, JSON.stringify(testStore, null, 2));
414
- // 3. Verify can be parsed using SessionStoreSchema
415
- const rawContent = fs.readFileSync(sessionsPath, 'utf-8');
416
- const parsed = JSON.parse(rawContent);
417
- const validated = SessionStoreSchema.safeParse(parsed);
418
- expect(validated.success).toBe(true);
419
- if (validated.success) {
420
- expect(validated.data.version).toBe('1.0.0');
421
- expect(Object.keys(validated.data.sessions)).toHaveLength(3);
422
- for (const id of sessionIds) {
423
- expect(validated.data.sessions[id]).toBeDefined();
424
- expect(validated.data.sessions[id].sessionId).toBe(id);
425
- }
426
- }
427
- });
428
- it('should support SessionState type with all optional fields', () => {
429
- // This test verifies SessionState type flexibility
430
- // Test full version
431
- const fullState = {
432
- sessionId: 'full-session-001',
433
- clientName: 'test-client',
434
- clientVersion: '1.0.0',
435
- cwd: '/test/path',
436
- project: 'test-project',
437
- createdAt: Date.now(),
438
- lastAccessedAt: Date.now(),
439
- metadata: { foo: 'bar', count: 42 }
440
- };
441
- expect(fullState.sessionId).toBe('full-session-001');
442
- expect(fullState.clientName).toBe('test-client');
443
- // Test minimal version
444
- const minimalState = {
445
- sessionId: 'minimal-session-001',
446
- createdAt: Date.now(),
447
- lastAccessedAt: Date.now(),
448
- metadata: {}
449
- };
450
- expect(minimalState.sessionId).toBe('minimal-session-001');
451
- expect(minimalState.clientName).toBeUndefined();
452
- // Verify Schema validation
453
- const fullResult = SessionStateSchema.safeParse(fullState);
454
- const minimalResult = SessionStateSchema.safeParse(minimalState);
455
- expect(fullResult.success).toBe(true);
456
- expect(minimalResult.success).toBe(true);
457
- });
458
- it('should integrate with real StreamableHTTPServerTransport structure', () => {
459
- // This test verifies our fix is compatible with SDK's actual structure
460
- // Verify the property paths we access are reasonable
461
- // _webStandardTransport, sessionId, _initialized - these all actually exist in SDK
462
- // We don't actually create SDK instances (may have side effects), but verify logical consistency of paths
463
- // 1. Verify expected transport structure (based on our SDK code analysis)
464
- const expectedTransportStructure = {
465
- _webStandardTransport: {
466
- sessionId: 'test-session-id',
467
- _initialized: true
468
- }
469
- };
470
- const mockTransport = expectedTransportStructure;
471
- // This is what we do in the actual code
472
- const webTransport = mockTransport._webStandardTransport;
473
- expect(webTransport).toBeDefined();
474
- if (webTransport) {
475
- webTransport.sessionId = 'new-session-id';
476
- webTransport._initialized = true;
477
- expect(webTransport.sessionId).toBe('new-session-id');
478
- expect(webTransport._initialized).toBe(true);
479
- }
480
- });
481
- });