skybridge 0.0.0-dev.b1d4333 → 0.0.0-dev.b1eed29

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 (353) hide show
  1. package/LICENSE +21 -674
  2. package/README.md +87 -309
  3. package/bin/run.js +5 -0
  4. package/dist/cli/detect-port.d.ts +18 -0
  5. package/dist/cli/detect-port.js +61 -0
  6. package/dist/cli/detect-port.js.map +1 -0
  7. package/dist/cli/header.d.ts +4 -0
  8. package/dist/cli/header.js +6 -0
  9. package/dist/cli/header.js.map +1 -0
  10. package/dist/cli/run-command.d.ts +2 -0
  11. package/dist/cli/run-command.js +43 -0
  12. package/dist/cli/run-command.js.map +1 -0
  13. package/dist/cli/telemetry.d.ts +7 -0
  14. package/dist/cli/telemetry.js +123 -0
  15. package/dist/cli/telemetry.js.map +1 -0
  16. package/dist/cli/use-execute-steps.d.ts +11 -0
  17. package/dist/cli/use-execute-steps.js +36 -0
  18. package/dist/cli/use-execute-steps.js.map +1 -0
  19. package/dist/cli/use-nodemon.d.ts +7 -0
  20. package/dist/cli/use-nodemon.js +76 -0
  21. package/dist/cli/use-nodemon.js.map +1 -0
  22. package/dist/cli/use-typescript-check.d.ts +8 -0
  23. package/dist/cli/use-typescript-check.js +59 -0
  24. package/dist/cli/use-typescript-check.js.map +1 -0
  25. package/dist/commands/build.d.ts +9 -0
  26. package/dist/commands/build.js +46 -0
  27. package/dist/commands/build.js.map +1 -0
  28. package/dist/commands/dev.d.ts +9 -0
  29. package/dist/commands/dev.js +36 -0
  30. package/dist/commands/dev.js.map +1 -0
  31. package/dist/commands/start.d.ts +9 -0
  32. package/dist/commands/start.js +52 -0
  33. package/dist/commands/start.js.map +1 -0
  34. package/dist/commands/telemetry/disable.d.ts +5 -0
  35. package/dist/commands/telemetry/disable.js +14 -0
  36. package/dist/commands/telemetry/disable.js.map +1 -0
  37. package/dist/commands/telemetry/enable.d.ts +5 -0
  38. package/dist/commands/telemetry/enable.js +14 -0
  39. package/dist/commands/telemetry/enable.js.map +1 -0
  40. package/dist/commands/telemetry/status.d.ts +5 -0
  41. package/dist/commands/telemetry/status.js +14 -0
  42. package/dist/commands/telemetry/status.js.map +1 -0
  43. package/dist/server/asset-base-url-transform-plugin.d.ts +11 -0
  44. package/dist/server/asset-base-url-transform-plugin.js +34 -0
  45. package/dist/server/asset-base-url-transform-plugin.js.map +1 -0
  46. package/dist/server/asset-base-url-transform-plugin.test.js +56 -0
  47. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -0
  48. package/dist/server/express.d.ts +15 -0
  49. package/dist/server/express.js +77 -0
  50. package/dist/server/express.js.map +1 -0
  51. package/dist/server/express.test.js +252 -0
  52. package/dist/server/express.test.js.map +1 -0
  53. package/dist/server/index.d.ts +5 -0
  54. package/dist/server/index.js.map +1 -0
  55. package/dist/{src/server → server}/inferUtilityTypes.d.ts +10 -0
  56. package/dist/server/inferUtilityTypes.js.map +1 -0
  57. package/dist/server/middleware.d.ts +124 -0
  58. package/dist/server/middleware.js +93 -0
  59. package/dist/server/middleware.js.map +1 -0
  60. package/dist/server/middleware.test-d.js +75 -0
  61. package/dist/server/middleware.test-d.js.map +1 -0
  62. package/dist/server/middleware.test.js +490 -0
  63. package/dist/server/middleware.test.js.map +1 -0
  64. package/dist/server/server.d.ts +150 -0
  65. package/dist/server/server.js +288 -0
  66. package/dist/server/server.js.map +1 -0
  67. package/dist/{src/server → server}/templateHelper.d.ts +3 -0
  68. package/dist/{src/server → server}/templateHelper.js +5 -4
  69. package/dist/server/templateHelper.js.map +1 -0
  70. package/dist/server/templates/development.hbs +12 -0
  71. package/dist/{src/server → server}/templates/production.hbs +1 -1
  72. package/dist/{src/server → server}/widgetsDevServer.d.ts +3 -2
  73. package/dist/server/widgetsDevServer.js +57 -0
  74. package/dist/server/widgetsDevServer.js.map +1 -0
  75. package/dist/{src/test → test}/utils.d.ts +54 -8
  76. package/dist/{src/test → test}/utils.js +86 -8
  77. package/dist/test/utils.js.map +1 -0
  78. package/dist/test/widget.test.js +263 -0
  79. package/dist/test/widget.test.js.map +1 -0
  80. package/dist/web/bridges/apps-sdk/adaptor.d.ts +22 -0
  81. package/dist/web/bridges/apps-sdk/adaptor.js +75 -0
  82. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -0
  83. package/dist/web/bridges/apps-sdk/bridge.d.ts +10 -0
  84. package/dist/web/bridges/apps-sdk/bridge.js +46 -0
  85. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -0
  86. package/dist/web/bridges/apps-sdk/index.d.ts +5 -0
  87. package/dist/web/bridges/apps-sdk/index.js +5 -0
  88. package/dist/web/bridges/apps-sdk/index.js.map +1 -0
  89. package/dist/{src/web → web/bridges/apps-sdk}/types.d.ts +37 -49
  90. package/dist/{src/web → web/bridges/apps-sdk}/types.js +0 -1
  91. package/dist/web/bridges/apps-sdk/types.js.map +1 -0
  92. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +2 -0
  93. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +7 -0
  94. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -0
  95. package/dist/web/bridges/get-adaptor.d.ts +2 -0
  96. package/dist/web/bridges/get-adaptor.js +8 -0
  97. package/dist/web/bridges/get-adaptor.js.map +1 -0
  98. package/dist/web/bridges/index.d.ts +5 -0
  99. package/dist/web/bridges/index.js +6 -0
  100. package/dist/web/bridges/index.js.map +1 -0
  101. package/dist/web/bridges/mcp-app/adaptor.d.ts +38 -0
  102. package/dist/web/bridges/mcp-app/adaptor.js +184 -0
  103. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -0
  104. package/dist/web/bridges/mcp-app/bridge.d.ts +26 -0
  105. package/dist/web/bridges/mcp-app/bridge.js +102 -0
  106. package/dist/web/bridges/mcp-app/bridge.js.map +1 -0
  107. package/dist/web/bridges/mcp-app/index.d.ts +4 -0
  108. package/dist/web/bridges/mcp-app/index.js +4 -0
  109. package/dist/web/bridges/mcp-app/index.js.map +1 -0
  110. package/dist/web/bridges/mcp-app/types.d.ts +8 -0
  111. package/dist/web/bridges/mcp-app/types.js +2 -0
  112. package/dist/web/bridges/mcp-app/types.js.map +1 -0
  113. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +7 -0
  114. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +7 -0
  115. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -0
  116. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +26 -0
  117. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -0
  118. package/dist/web/bridges/types.d.ts +103 -0
  119. package/dist/web/bridges/types.js +2 -0
  120. package/dist/web/bridges/types.js.map +1 -0
  121. package/dist/web/bridges/use-host-context.d.ts +2 -0
  122. package/dist/web/bridges/use-host-context.js +8 -0
  123. package/dist/web/bridges/use-host-context.js.map +1 -0
  124. package/dist/web/components/modal-provider.d.ts +4 -0
  125. package/dist/web/components/modal-provider.js +45 -0
  126. package/dist/web/components/modal-provider.js.map +1 -0
  127. package/dist/web/create-store.d.ts +3 -0
  128. package/dist/web/create-store.js +24 -0
  129. package/dist/web/create-store.js.map +1 -0
  130. package/dist/web/create-store.test.js +131 -0
  131. package/dist/web/create-store.test.js.map +1 -0
  132. package/dist/{src/web → web}/data-llm.d.ts +1 -0
  133. package/dist/{src/web → web}/data-llm.js +13 -8
  134. package/dist/web/data-llm.js.map +1 -0
  135. package/dist/web/data-llm.test.js +142 -0
  136. package/dist/web/data-llm.test.js.map +1 -0
  137. package/dist/{src/web → web}/generate-helpers.d.ts +11 -8
  138. package/dist/{src/web → web}/generate-helpers.js +5 -3
  139. package/dist/web/generate-helpers.js.map +1 -0
  140. package/dist/{src/web → web}/generate-helpers.test-d.js +59 -3
  141. package/dist/web/generate-helpers.test-d.js.map +1 -0
  142. package/dist/{src/web → web}/generate-helpers.test.js +1 -1
  143. package/dist/web/generate-helpers.test.js.map +1 -0
  144. package/dist/web/helpers/state.d.ts +7 -0
  145. package/dist/web/helpers/state.js +45 -0
  146. package/dist/web/helpers/state.js.map +1 -0
  147. package/dist/web/helpers/state.test.js +53 -0
  148. package/dist/web/helpers/state.test.js.map +1 -0
  149. package/dist/web/hooks/index.d.ts +11 -0
  150. package/dist/{src/web → web}/hooks/index.js +3 -4
  151. package/dist/web/hooks/index.js.map +1 -0
  152. package/dist/web/hooks/test/utils.d.ts +16 -0
  153. package/dist/web/hooks/test/utils.js +64 -0
  154. package/dist/web/hooks/test/utils.js.map +1 -0
  155. package/dist/{src/web → web}/hooks/use-call-tool.d.ts +3 -2
  156. package/dist/{src/web → web}/hooks/use-call-tool.js +12 -4
  157. package/dist/web/hooks/use-call-tool.js.map +1 -0
  158. package/dist/{src/web → web}/hooks/use-call-tool.test-d.js +1 -1
  159. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -0
  160. package/dist/{src/web → web}/hooks/use-call-tool.test.js +35 -16
  161. package/dist/web/hooks/use-call-tool.test.js.map +1 -0
  162. package/dist/web/hooks/use-display-mode.d.ts +4 -0
  163. package/dist/web/hooks/use-display-mode.js +9 -0
  164. package/dist/web/hooks/use-display-mode.js.map +1 -0
  165. package/dist/web/hooks/use-display-mode.test-d.js +8 -0
  166. package/dist/web/hooks/use-display-mode.test-d.js.map +1 -0
  167. package/dist/{src/web → web}/hooks/use-display-mode.test.js +3 -2
  168. package/dist/web/hooks/use-display-mode.test.js.map +1 -0
  169. package/dist/web/hooks/use-files.d.ts +6 -0
  170. package/dist/web/hooks/use-files.js +9 -0
  171. package/dist/web/hooks/use-files.js.map +1 -0
  172. package/dist/{src/web → web}/hooks/use-files.test.js +11 -6
  173. package/dist/web/hooks/use-files.test.js.map +1 -0
  174. package/dist/web/hooks/use-layout.d.ts +22 -0
  175. package/dist/web/hooks/use-layout.js +23 -0
  176. package/dist/web/hooks/use-layout.js.map +1 -0
  177. package/dist/web/hooks/use-layout.test.js +96 -0
  178. package/dist/web/hooks/use-layout.test.js.map +1 -0
  179. package/dist/web/hooks/use-open-external.d.ts +3 -0
  180. package/dist/web/hooks/use-open-external.js +8 -0
  181. package/dist/web/hooks/use-open-external.js.map +1 -0
  182. package/dist/web/hooks/use-open-external.test.js +65 -0
  183. package/dist/web/hooks/use-open-external.test.js.map +1 -0
  184. package/dist/web/hooks/use-request-modal.d.ts +9 -0
  185. package/dist/web/hooks/use-request-modal.js +16 -0
  186. package/dist/web/hooks/use-request-modal.js.map +1 -0
  187. package/dist/web/hooks/use-request-modal.test.d.ts +1 -0
  188. package/dist/web/hooks/use-request-modal.test.js +61 -0
  189. package/dist/web/hooks/use-request-modal.test.js.map +1 -0
  190. package/dist/web/hooks/use-send-follow-up-message.js +8 -0
  191. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -0
  192. package/dist/web/hooks/use-set-open-in-app-url.d.ts +1 -0
  193. package/dist/web/hooks/use-set-open-in-app-url.js +8 -0
  194. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -0
  195. package/dist/web/hooks/use-set-open-in-app-url.test.d.ts +1 -0
  196. package/dist/web/hooks/use-set-open-in-app-url.test.js +43 -0
  197. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -0
  198. package/dist/{src/web → web}/hooks/use-tool-info.d.ts +13 -2
  199. package/dist/web/hooks/use-tool-info.js +26 -0
  200. package/dist/web/hooks/use-tool-info.js.map +1 -0
  201. package/dist/web/hooks/use-tool-info.test-d.d.ts +1 -0
  202. package/dist/{src/web → web}/hooks/use-tool-info.test-d.js +40 -5
  203. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -0
  204. package/dist/web/hooks/use-tool-info.test.d.ts +1 -0
  205. package/dist/web/hooks/use-tool-info.test.js +130 -0
  206. package/dist/web/hooks/use-tool-info.test.js.map +1 -0
  207. package/dist/web/hooks/use-user.d.ts +18 -0
  208. package/dist/web/hooks/use-user.js +35 -0
  209. package/dist/web/hooks/use-user.js.map +1 -0
  210. package/dist/web/hooks/use-user.test.d.ts +1 -0
  211. package/dist/web/hooks/use-user.test.js +122 -0
  212. package/dist/web/hooks/use-user.test.js.map +1 -0
  213. package/dist/web/hooks/use-widget-state.js +32 -0
  214. package/dist/web/hooks/use-widget-state.js.map +1 -0
  215. package/dist/web/hooks/use-widget-state.test.d.ts +1 -0
  216. package/dist/{src/web → web}/hooks/use-widget-state.test.js +12 -8
  217. package/dist/web/hooks/use-widget-state.test.js.map +1 -0
  218. package/dist/{src/web → web}/index.d.ts +5 -3
  219. package/dist/{src/web → web}/index.js +5 -3
  220. package/dist/web/index.js.map +1 -0
  221. package/dist/{src/web → web}/mount-widget.js +9 -1
  222. package/dist/web/mount-widget.js.map +1 -0
  223. package/dist/web/plugin/data-llm.test.d.ts +1 -0
  224. package/dist/web/plugin/data-llm.test.js.map +1 -0
  225. package/dist/web/plugin/plugin.js +54 -0
  226. package/dist/web/plugin/plugin.js.map +1 -0
  227. package/dist/{src/web → web}/plugin/transform-data-llm.js +6 -3
  228. package/dist/web/plugin/transform-data-llm.js.map +1 -0
  229. package/dist/web/plugin/transform-data-llm.test.d.ts +1 -0
  230. package/dist/web/plugin/transform-data-llm.test.js.map +1 -0
  231. package/dist/web/plugin/validate-widget.d.ts +5 -0
  232. package/dist/web/plugin/validate-widget.js +27 -0
  233. package/dist/web/plugin/validate-widget.js.map +1 -0
  234. package/dist/web/plugin/validate-widget.test.d.ts +1 -0
  235. package/dist/web/plugin/validate-widget.test.js +42 -0
  236. package/dist/web/plugin/validate-widget.test.js.map +1 -0
  237. package/dist/{src/web → web}/proxy.js +6 -2
  238. package/dist/web/proxy.js.map +1 -0
  239. package/dist/web/types.d.ts +16 -0
  240. package/dist/web/types.js +2 -0
  241. package/dist/web/types.js.map +1 -0
  242. package/package.json +69 -36
  243. package/tsconfig.base.json +31 -0
  244. package/dist/src/server/index.d.ts +0 -4
  245. package/dist/src/server/index.js.map +0 -1
  246. package/dist/src/server/inferUtilityTypes.js.map +0 -1
  247. package/dist/src/server/server.d.ts +0 -48
  248. package/dist/src/server/server.js +0 -62
  249. package/dist/src/server/server.js.map +0 -1
  250. package/dist/src/server/templateHelper.js.map +0 -1
  251. package/dist/src/server/templates/development.hbs +0 -12
  252. package/dist/src/server/widgetsDevServer.js +0 -39
  253. package/dist/src/server/widgetsDevServer.js.map +0 -1
  254. package/dist/src/test/utils.js.map +0 -1
  255. package/dist/src/test/widget.test.js +0 -90
  256. package/dist/src/test/widget.test.js.map +0 -1
  257. package/dist/src/web/data-llm.js.map +0 -1
  258. package/dist/src/web/data-llm.test.js +0 -76
  259. package/dist/src/web/data-llm.test.js.map +0 -1
  260. package/dist/src/web/generate-helpers.js.map +0 -1
  261. package/dist/src/web/generate-helpers.test-d.js.map +0 -1
  262. package/dist/src/web/generate-helpers.test.js.map +0 -1
  263. package/dist/src/web/hooks/index.d.ts +0 -12
  264. package/dist/src/web/hooks/index.js.map +0 -1
  265. package/dist/src/web/hooks/use-call-tool.js.map +0 -1
  266. package/dist/src/web/hooks/use-call-tool.test-d.js.map +0 -1
  267. package/dist/src/web/hooks/use-call-tool.test.js.map +0 -1
  268. package/dist/src/web/hooks/use-display-mode.d.ts +0 -4
  269. package/dist/src/web/hooks/use-display-mode.js +0 -7
  270. package/dist/src/web/hooks/use-display-mode.js.map +0 -1
  271. package/dist/src/web/hooks/use-display-mode.test.js.map +0 -1
  272. package/dist/src/web/hooks/use-files.d.ts +0 -10
  273. package/dist/src/web/hooks/use-files.js +0 -7
  274. package/dist/src/web/hooks/use-files.js.map +0 -1
  275. package/dist/src/web/hooks/use-files.test.js.map +0 -1
  276. package/dist/src/web/hooks/use-locale.d.ts +0 -1
  277. package/dist/src/web/hooks/use-locale.js +0 -5
  278. package/dist/src/web/hooks/use-locale.js.map +0 -1
  279. package/dist/src/web/hooks/use-locale.test.js +0 -21
  280. package/dist/src/web/hooks/use-locale.test.js.map +0 -1
  281. package/dist/src/web/hooks/use-open-external.d.ts +0 -1
  282. package/dist/src/web/hooks/use-open-external.js +0 -6
  283. package/dist/src/web/hooks/use-open-external.js.map +0 -1
  284. package/dist/src/web/hooks/use-open-external.test.js +0 -24
  285. package/dist/src/web/hooks/use-open-external.test.js.map +0 -1
  286. package/dist/src/web/hooks/use-openai-global.d.ts +0 -2
  287. package/dist/src/web/hooks/use-openai-global.js +0 -23
  288. package/dist/src/web/hooks/use-openai-global.js.map +0 -1
  289. package/dist/src/web/hooks/use-request-modal.d.ts +0 -6
  290. package/dist/src/web/hooks/use-request-modal.js +0 -9
  291. package/dist/src/web/hooks/use-request-modal.js.map +0 -1
  292. package/dist/src/web/hooks/use-request-modal.test.js +0 -24
  293. package/dist/src/web/hooks/use-request-modal.test.js.map +0 -1
  294. package/dist/src/web/hooks/use-send-follow-up-message.js +0 -11
  295. package/dist/src/web/hooks/use-send-follow-up-message.js.map +0 -1
  296. package/dist/src/web/hooks/use-theme.d.ts +0 -1
  297. package/dist/src/web/hooks/use-theme.js +0 -5
  298. package/dist/src/web/hooks/use-theme.js.map +0 -1
  299. package/dist/src/web/hooks/use-theme.test.js +0 -26
  300. package/dist/src/web/hooks/use-theme.test.js.map +0 -1
  301. package/dist/src/web/hooks/use-tool-info.js +0 -22
  302. package/dist/src/web/hooks/use-tool-info.js.map +0 -1
  303. package/dist/src/web/hooks/use-tool-info.test-d.js.map +0 -1
  304. package/dist/src/web/hooks/use-tool-info.test.js +0 -59
  305. package/dist/src/web/hooks/use-tool-info.test.js.map +0 -1
  306. package/dist/src/web/hooks/use-user-agent.d.ts +0 -1
  307. package/dist/src/web/hooks/use-user-agent.js +0 -5
  308. package/dist/src/web/hooks/use-user-agent.js.map +0 -1
  309. package/dist/src/web/hooks/use-user-agent.test.js +0 -31
  310. package/dist/src/web/hooks/use-user-agent.test.js.map +0 -1
  311. package/dist/src/web/hooks/use-widget-state.js +0 -54
  312. package/dist/src/web/hooks/use-widget-state.js.map +0 -1
  313. package/dist/src/web/hooks/use-widget-state.test.js.map +0 -1
  314. package/dist/src/web/index.js.map +0 -1
  315. package/dist/src/web/mount-widget.js.map +0 -1
  316. package/dist/src/web/plugin/data-llm.test.js.map +0 -1
  317. package/dist/src/web/plugin/plugin.js +0 -33
  318. package/dist/src/web/plugin/plugin.js.map +0 -1
  319. package/dist/src/web/plugin/transform-data-llm.js.map +0 -1
  320. package/dist/src/web/plugin/transform-data-llm.test.js.map +0 -1
  321. package/dist/src/web/proxy.js.map +0 -1
  322. package/dist/src/web/types.js.map +0 -1
  323. package/dist/vitest.config.d.ts +0 -2
  324. package/dist/vitest.config.js +0 -8
  325. package/dist/vitest.config.js.map +0 -1
  326. /package/dist/{src/test/widget.test.d.ts → server/asset-base-url-transform-plugin.test.d.ts} +0 -0
  327. /package/dist/{src/web/data-llm.test.d.ts → server/express.test.d.ts} +0 -0
  328. /package/dist/{src/server → server}/index.js +0 -0
  329. /package/dist/{src/server → server}/inferUtilityTypes.js +0 -0
  330. /package/dist/{src/web/generate-helpers.test-d.d.ts → server/middleware.test-d.d.ts} +0 -0
  331. /package/dist/{src/web/generate-helpers.test.d.ts → server/middleware.test.d.ts} +0 -0
  332. /package/dist/{src/web/hooks/use-call-tool.test-d.d.ts → test/widget.test.d.ts} +0 -0
  333. /package/dist/{src/web/hooks/use-call-tool.test.d.ts → web/bridges/mcp-app/use-mcp-app-context.test.d.ts} +0 -0
  334. /package/dist/{src/web/hooks/use-display-mode.test.d.ts → web/create-store.test.d.ts} +0 -0
  335. /package/dist/{src/web/plugin → web}/data-llm.test.d.ts +0 -0
  336. /package/dist/{src/web/hooks/use-files.test.d.ts → web/generate-helpers.test-d.d.ts} +0 -0
  337. /package/dist/{src/web/hooks/use-locale.test.d.ts → web/generate-helpers.test.d.ts} +0 -0
  338. /package/dist/{src/web/hooks/use-open-external.test.d.ts → web/helpers/state.test.d.ts} +0 -0
  339. /package/dist/{src/web/hooks/use-request-modal.test.d.ts → web/hooks/use-call-tool.test-d.d.ts} +0 -0
  340. /package/dist/{src/web/hooks/use-theme.test.d.ts → web/hooks/use-call-tool.test.d.ts} +0 -0
  341. /package/dist/{src/web/hooks/use-tool-info.test-d.d.ts → web/hooks/use-display-mode.test-d.d.ts} +0 -0
  342. /package/dist/{src/web/hooks/use-tool-info.test.d.ts → web/hooks/use-display-mode.test.d.ts} +0 -0
  343. /package/dist/{src/web/hooks/use-user-agent.test.d.ts → web/hooks/use-files.test.d.ts} +0 -0
  344. /package/dist/{src/web/hooks/use-widget-state.test.d.ts → web/hooks/use-layout.test.d.ts} +0 -0
  345. /package/dist/{src/web/plugin/transform-data-llm.test.d.ts → web/hooks/use-open-external.test.d.ts} +0 -0
  346. /package/dist/{src/web → web}/hooks/use-send-follow-up-message.d.ts +0 -0
  347. /package/dist/{src/web → web}/hooks/use-widget-state.d.ts +0 -0
  348. /package/dist/{src/web → web}/mount-widget.d.ts +0 -0
  349. /package/dist/{src/web → web}/plugin/data-llm.test.js +0 -0
  350. /package/dist/{src/web → web}/plugin/plugin.d.ts +0 -0
  351. /package/dist/{src/web → web}/plugin/transform-data-llm.d.ts +0 -0
  352. /package/dist/{src/web → web}/plugin/transform-data-llm.test.js +0 -0
  353. /package/dist/{src/web → web}/proxy.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/telemetry/status.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,MAAM,CAAU,WAAW,GACzB,2DAA2D,CAAC;IAEvD,KAAK,CAAC,GAAG;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAE5B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAChB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,0CAEb,EAEP,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,MAAC,GAAG,eACF,KAAC,IAAI,2BAAgB,EACpB,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,8BAEjB,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,+BAElB,CACR,IACG,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,6BAAoB,EACtC,KAAC,IAAI,cAAE,YAAY,EAAE,GAAQ,IACzB,IACF,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,6DAAoD,EACtE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uDAA8C,EAChE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wDAA+C,IAC7D,IACF,CACP,CAAC;QAEF,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC;IAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Plugin } from "vite";
2
+ /**
3
+ * Transforms asset import paths to use the development server base URL.
4
+ */
5
+ export declare function assetBaseUrlTransform(code: string, devServerOrigin: string): string;
6
+ /**
7
+ * Vite plugin that transforms asset import paths to use the development server base URL.
8
+ */
9
+ export declare function assetBaseUrlTransformPlugin(options: {
10
+ devServerOrigin: string;
11
+ }): Plugin;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Transforms asset import paths to use the development server base URL.
3
+ */
4
+ export function assetBaseUrlTransform(code, devServerOrigin) {
5
+ const assetStringPattern = /(?<!https?:\/\/)(["'`])(\/[^"'`]+\.(svg|png|jpeg|jpg|gif|webp|mp3|mp4|woff|woff2|ttf|eot))\1/g;
6
+ code = code.replace(assetStringPattern, (_match, quote, assetPath) => {
7
+ return `${quote}${devServerOrigin}${assetPath}${quote}`;
8
+ });
9
+ return code;
10
+ }
11
+ /**
12
+ * Vite plugin that transforms asset import paths to use the development server base URL.
13
+ */
14
+ export function assetBaseUrlTransformPlugin(options) {
15
+ const { devServerOrigin } = options;
16
+ return {
17
+ name: "asset-base-url-transform",
18
+ enforce: "pre",
19
+ transform(code) {
20
+ if (!code) {
21
+ return null;
22
+ }
23
+ const transformedCode = assetBaseUrlTransform(code, devServerOrigin);
24
+ if (transformedCode === code) {
25
+ return null;
26
+ }
27
+ return {
28
+ code: transformedCode,
29
+ map: null,
30
+ };
31
+ },
32
+ };
33
+ }
34
+ //# sourceMappingURL=asset-base-url-transform-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-base-url-transform-plugin.js","sourceRoot":"","sources":["../../src/server/asset-base-url-transform-plugin.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,eAAuB;IAEvB,MAAM,kBAAkB,GACtB,+FAA+F,CAAC;IAElG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACnE,OAAO,GAAG,KAAK,GAAG,eAAe,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAE3C;IACC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEpC,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,KAAK;QACd,SAAS,CAAC,IAAI;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAErE,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,GAAG,EAAE,IAAI;aACV,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { assetBaseUrlTransform } from "./asset-base-url-transform-plugin.js";
3
+ describe("assetBaseUrlTransform", () => {
4
+ const devServerOrigin = "http://localhost:3000";
5
+ it("should transform asset paths in single, double, and backtick quotes", () => {
6
+ const cases = [
7
+ {
8
+ desc: "single-quoted",
9
+ code: `const image = '/assets/logo.png';`,
10
+ expected: `const image = '${devServerOrigin}/assets/logo.png';`,
11
+ },
12
+ {
13
+ desc: "double-quoted",
14
+ code: `const image = "/assets/logo.png";`,
15
+ expected: `const image = "${devServerOrigin}/assets/logo.png";`,
16
+ },
17
+ {
18
+ desc: "backtick-quoted",
19
+ code: "const image = `/assets/logo.png`;",
20
+ expected: `const image = \`${devServerOrigin}/assets/logo.png\`;`,
21
+ },
22
+ ];
23
+ for (const { code, expected } of cases) {
24
+ const result = assetBaseUrlTransform(code, devServerOrigin);
25
+ expect(result).toBe(expected);
26
+ }
27
+ });
28
+ it("should transform multiple asset paths", () => {
29
+ const code = `
30
+ const logo = '/assets/logo.png';
31
+ const icon = '/assets/icon.svg';
32
+ const font = '/assets/font.woff2';
33
+ `;
34
+ const result = assetBaseUrlTransform(code, devServerOrigin);
35
+ expect(result).toContain(`${devServerOrigin}/assets/logo.png`);
36
+ expect(result).toContain(`${devServerOrigin}/assets/icon.svg`);
37
+ expect(result).toContain(`${devServerOrigin}/assets/font.woff2`);
38
+ });
39
+ it("should not transform already absolute URLs", () => {
40
+ const code = `
41
+ const local = '/assets/logo.png';
42
+ const http = 'http://example.com/image.png';
43
+ const https = 'https://example.com/image.png';
44
+ `;
45
+ const result = assetBaseUrlTransform(code, devServerOrigin);
46
+ expect(result).toContain(`${devServerOrigin}/assets/logo.png`);
47
+ expect(result).toContain("http://example.com/image.png");
48
+ expect(result).toContain("https://example.com/image.png");
49
+ });
50
+ it("should not transform code without asset paths", () => {
51
+ const code = `const text = "Hello World";`;
52
+ const result = assetBaseUrlTransform(code, devServerOrigin);
53
+ expect(result).toBe(code);
54
+ });
55
+ });
56
+ //# sourceMappingURL=asset-base-url-transform-plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-base-url-transform-plugin.test.js","sourceRoot":"","sources":["../../src/server/asset-base-url-transform-plugin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,eAAe,GAAG,uBAAuB,CAAC;IAEhD,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,mCAAmC;gBACzC,QAAQ,EAAE,kBAAkB,eAAe,oBAAoB;aAChE;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,mCAAmC;gBACzC,QAAQ,EAAE,kBAAkB,eAAe,oBAAoB;aAChE;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,mCAAmC;gBACzC,QAAQ,EAAE,mBAAmB,eAAe,qBAAqB;aAClE;SACF,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG;;;;KAIZ,CAAC;QACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,kBAAkB,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,kBAAkB,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,oBAAoB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG;;;;KAIZ,CAAC;QACF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,eAAe,kBAAkB,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,6BAA6B,CAAC;QAC3C,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type http from "node:http";
2
+ import express from "express";
3
+ import type { McpServer } from "./server";
4
+ export declare function createApp({ mcpServer, httpServer, customMiddleware, errorMiddleware, }: {
5
+ mcpServer: McpServer;
6
+ httpServer: http.Server;
7
+ customMiddleware?: {
8
+ path?: string;
9
+ handlers: express.RequestHandler[];
10
+ }[];
11
+ errorMiddleware?: {
12
+ path?: string;
13
+ handlers: express.ErrorRequestHandler[];
14
+ }[];
15
+ }): Promise<express.Express>;
@@ -0,0 +1,77 @@
1
+ import path from "node:path";
2
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
3
+ import cors from "cors";
4
+ import express from "express";
5
+ function applyMiddlewares(app, middlewares) {
6
+ for (const middleware of middlewares) {
7
+ if (middleware.path) {
8
+ app.use(middleware.path, ...middleware.handlers);
9
+ }
10
+ else {
11
+ app.use(...middleware.handlers);
12
+ }
13
+ }
14
+ }
15
+ function defaultErrorHandler(err, _req, res, _next) {
16
+ console.error("Error handling MCP request:", err);
17
+ if (!res.headersSent) {
18
+ res.status(500).json({
19
+ jsonrpc: "2.0",
20
+ error: { code: -32603, message: "Internal server error" },
21
+ id: null,
22
+ });
23
+ }
24
+ }
25
+ export async function createApp({ mcpServer, httpServer, customMiddleware = [], errorMiddleware = [], }) {
26
+ const app = express();
27
+ app.use(express.json());
28
+ const env = process.env.NODE_ENV || "development";
29
+ applyMiddlewares(app, customMiddleware);
30
+ if (env !== "production") {
31
+ const { devtoolsStaticServer } = await import("@skybridge/devtools");
32
+ app.use(await devtoolsStaticServer());
33
+ const { widgetsDevServer } = await import("./widgetsDevServer.js");
34
+ app.use(await widgetsDevServer(httpServer));
35
+ }
36
+ if (env === "production") {
37
+ const assetsPath = path.join(process.cwd(), "dist", "assets");
38
+ app.use("/assets", cors());
39
+ app.use("/assets", express.static(assetsPath));
40
+ }
41
+ app.use("/mcp", mcpMiddleware(mcpServer));
42
+ applyMiddlewares(app, errorMiddleware);
43
+ app.use("/mcp", defaultErrorHandler);
44
+ return app;
45
+ }
46
+ const mcpMiddleware = (server) => {
47
+ return async (req, res, next) => {
48
+ if (req.method !== "POST") {
49
+ res.writeHead(405).end(JSON.stringify({
50
+ jsonrpc: "2.0",
51
+ error: {
52
+ code: -32000,
53
+ message: "Method not allowed.",
54
+ },
55
+ id: null,
56
+ }));
57
+ return;
58
+ }
59
+ try {
60
+ const transport = new StreamableHTTPServerTransport({
61
+ sessionIdGenerator: undefined,
62
+ });
63
+ res.on("close", () => {
64
+ transport.close();
65
+ });
66
+ await server.connect(transport);
67
+ // Express strips the mount path from req.url (e.g. "/mcp" becomes "/").
68
+ // Restore it so the SDK builds the correct requestInfo.url.
69
+ req.url = req.originalUrl;
70
+ await transport.handleRequest(req, res, req.body);
71
+ }
72
+ catch (error) {
73
+ next(error);
74
+ }
75
+ };
76
+ };
77
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/server/express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ import http from "node:http";
2
+ import { afterEach, describe, expect, it, vi } from "vitest";
3
+ vi.mock("@skybridge/devtools", () => ({
4
+ devtoolsStaticServer: () => ((_req, _res, next) => next()),
5
+ }));
6
+ vi.mock("./widgetsDevServer.js", () => ({
7
+ widgetsDevServer: (_httpServer) => ((_req, _res, next) => next()),
8
+ }));
9
+ const fakeServer = {};
10
+ async function listen(app) {
11
+ const server = http.createServer(app);
12
+ await new Promise((resolve) => server.listen(0, resolve));
13
+ const port = server.address().port;
14
+ return { port, server };
15
+ }
16
+ let openServer;
17
+ afterEach(() => openServer?.close());
18
+ async function postMcp(port) {
19
+ return fetch(`http://localhost:${port}/mcp`, {
20
+ method: "POST",
21
+ headers: { "Content-Type": "application/json" },
22
+ body: JSON.stringify({ jsonrpc: "2.0", method: "initialize", id: 1 }),
23
+ });
24
+ }
25
+ async function postApi(port) {
26
+ return fetch(`http://localhost:${port}/api/test`, { method: "POST" });
27
+ }
28
+ describe("createApp", () => {
29
+ it("runs global custom middleware before the /mcp handler", async () => {
30
+ const { createApp } = await import("./express.js");
31
+ const calls = [];
32
+ const mw = (_req, _res, next) => {
33
+ calls.push("custom");
34
+ next();
35
+ };
36
+ const httpServer = http.createServer();
37
+ const app = await createApp({
38
+ mcpServer: fakeServer,
39
+ httpServer,
40
+ customMiddleware: [{ handlers: [mw] }],
41
+ });
42
+ const { port, server } = await listen(app);
43
+ openServer = server;
44
+ await postMcp(port);
45
+ expect(calls).toEqual(["custom"]);
46
+ });
47
+ it("runs path-scoped middleware on /mcp", async () => {
48
+ const { createApp } = await import("./express.js");
49
+ const calls = [];
50
+ const mw = (_req, _res, next) => {
51
+ calls.push("auth");
52
+ next();
53
+ };
54
+ const httpServer = http.createServer();
55
+ const app = await createApp({
56
+ mcpServer: fakeServer,
57
+ httpServer,
58
+ customMiddleware: [{ path: "/mcp", handlers: [mw] }],
59
+ });
60
+ const { port, server } = await listen(app);
61
+ openServer = server;
62
+ await postMcp(port);
63
+ expect(calls).toEqual(["auth"]);
64
+ });
65
+ it("allows middleware to short-circuit with 401", async () => {
66
+ const { createApp } = await import("./express.js");
67
+ const calls = [];
68
+ const reject = (_req, res) => {
69
+ calls.push("reject");
70
+ res.status(401).json({ error: "Unauthorized" });
71
+ };
72
+ const httpServer = http.createServer();
73
+ const app = await createApp({
74
+ mcpServer: fakeServer,
75
+ httpServer,
76
+ customMiddleware: [{ path: "/mcp", handlers: [reject] }],
77
+ });
78
+ const { port, server } = await listen(app);
79
+ openServer = server;
80
+ const res = await postMcp(port);
81
+ expect(calls).toEqual(["reject"]);
82
+ expect(res.status).toBe(401);
83
+ expect(await res.json()).toEqual({ error: "Unauthorized" });
84
+ });
85
+ it("runs multiple global middleware in registration order", async () => {
86
+ const { createApp } = await import("./express.js");
87
+ const calls = [];
88
+ const mwA = (_req, _res, next) => {
89
+ calls.push("A");
90
+ next();
91
+ };
92
+ const mwB = (_req, _res, next) => {
93
+ calls.push("B");
94
+ next();
95
+ };
96
+ const httpServer = http.createServer();
97
+ const app = await createApp({
98
+ mcpServer: fakeServer,
99
+ httpServer,
100
+ customMiddleware: [{ handlers: [mwA] }, { handlers: [mwB] }],
101
+ });
102
+ const { port, server } = await listen(app);
103
+ openServer = server;
104
+ await postMcp(port);
105
+ expect(calls).toEqual(["A", "B"]);
106
+ });
107
+ it("path-scoped middleware does not run on non-matching paths", async () => {
108
+ const { createApp } = await import("./express.js");
109
+ const calls = [];
110
+ const apiMw = (_req, _res, next) => {
111
+ calls.push("api");
112
+ next();
113
+ };
114
+ const httpServer = http.createServer();
115
+ const app = await createApp({
116
+ mcpServer: fakeServer,
117
+ httpServer,
118
+ customMiddleware: [{ path: "/api", handlers: [apiMw] }],
119
+ });
120
+ const { port, server } = await listen(app);
121
+ openServer = server;
122
+ // Hit /mcp — the /api middleware should NOT fire
123
+ await postMcp(port);
124
+ expect(calls).toEqual([]);
125
+ });
126
+ it("supports Express Router via custom middleware", async () => {
127
+ const { createApp } = await import("./express.js");
128
+ const { Router } = await import("express");
129
+ const router = Router();
130
+ router.get("/health", (_req, res) => {
131
+ res.json({ status: "ok" });
132
+ });
133
+ const httpServer = http.createServer();
134
+ const app = await createApp({
135
+ mcpServer: fakeServer,
136
+ httpServer,
137
+ customMiddleware: [{ handlers: [router] }],
138
+ });
139
+ const { port, server } = await listen(app);
140
+ openServer = server;
141
+ const res = await fetch(`http://localhost:${port}/health`);
142
+ expect(res.status).toBe(200);
143
+ expect(await res.json()).toEqual({ status: "ok" });
144
+ });
145
+ it("supports path-prefixed Router", async () => {
146
+ const { createApp } = await import("./express.js");
147
+ const { Router } = await import("express");
148
+ const router = Router();
149
+ router.get("/data", (_req, res) => {
150
+ res.json({ value: 42 });
151
+ });
152
+ const httpServer = http.createServer();
153
+ const app = await createApp({
154
+ mcpServer: fakeServer,
155
+ httpServer,
156
+ customMiddleware: [
157
+ { path: "/api", handlers: [router] },
158
+ ],
159
+ });
160
+ const { port, server } = await listen(app);
161
+ openServer = server;
162
+ const res = await fetch(`http://localhost:${port}/api/data`);
163
+ expect(res.status).toBe(200);
164
+ expect(await res.json()).toEqual({ value: 42 });
165
+ });
166
+ it("server survives middleware errors without crashing", async () => {
167
+ const { createApp } = await import("./express.js");
168
+ const throwing = () => {
169
+ throw new Error("boom");
170
+ };
171
+ const httpServer = http.createServer();
172
+ const app = await createApp({
173
+ mcpServer: fakeServer,
174
+ httpServer,
175
+ customMiddleware: [{ path: "/explode", handlers: [throwing] }],
176
+ });
177
+ const { port, server } = await listen(app);
178
+ openServer = server;
179
+ const res = await fetch(`http://localhost:${port}/explode`);
180
+ expect(res.status).toBe(500);
181
+ // Server process did not crash — it still accepts connections
182
+ const followUp = await fetch(`http://localhost:${port}/explode`);
183
+ expect(followUp.status).toBe(500);
184
+ });
185
+ it("returns 500 JSON-RPC error when the MCP handler throws and no error middleware is registered", async () => {
186
+ const { createApp } = await import("./express.js");
187
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
188
+ const httpServer = http.createServer();
189
+ const app = await createApp({ mcpServer: fakeServer, httpServer });
190
+ const { port, server } = await listen(app);
191
+ openServer = server;
192
+ const res = await postMcp(port);
193
+ expect(res.status).toBe(500);
194
+ expect(await res.json()).toEqual({
195
+ jsonrpc: "2.0",
196
+ error: { code: -32603, message: "Internal server error" },
197
+ id: null,
198
+ });
199
+ expect(consoleSpy).toHaveBeenCalledWith("Error handling MCP request:", expect.any(Error));
200
+ consoleSpy.mockRestore();
201
+ });
202
+ it("invokes a custom error handler when the MCP handler throws", async () => {
203
+ const { createApp } = await import("./express.js");
204
+ const calls = [];
205
+ const errorHandler = (_err, _req, res, _next) => {
206
+ calls.push("error-handler");
207
+ res.status(503).json({ custom: true });
208
+ };
209
+ const httpServer = http.createServer();
210
+ const app = await createApp({
211
+ mcpServer: fakeServer,
212
+ httpServer,
213
+ errorMiddleware: [{ handlers: [errorHandler] }],
214
+ });
215
+ const { port, server } = await listen(app);
216
+ openServer = server;
217
+ const res = await postMcp(port);
218
+ expect(calls).toEqual(["error-handler"]);
219
+ expect(res.status).toBe(503);
220
+ expect(await res.json()).toEqual({ custom: true });
221
+ });
222
+ it("invokes a path-scoped error handler only for matching routes", async () => {
223
+ const { createApp } = await import("./express.js");
224
+ const calls = [];
225
+ const mcpErrorHandler = (_err, _req, res, _next) => {
226
+ calls.push("mcp-error-handler");
227
+ res.status(503).json({ from: "mcp-error-handler" });
228
+ };
229
+ const throwingApiRoute = (_req, _res, next) => {
230
+ next(new Error("api error"));
231
+ };
232
+ const httpServer = http.createServer();
233
+ const app = await createApp({
234
+ mcpServer: fakeServer,
235
+ httpServer,
236
+ customMiddleware: [{ path: "/api/test", handlers: [throwingApiRoute] }],
237
+ errorMiddleware: [{ path: "/mcp", handlers: [mcpErrorHandler] }],
238
+ });
239
+ const { port, server } = await listen(app);
240
+ openServer = server;
241
+ const mcpRes = await postMcp(port);
242
+ expect(calls).toEqual(["mcp-error-handler"]);
243
+ expect(mcpRes.status).toBe(503);
244
+ expect(await mcpRes.json()).toEqual({ from: "mcp-error-handler" });
245
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
246
+ const apiRes = await postApi(port);
247
+ expect(calls).toEqual(["mcp-error-handler"]);
248
+ expect(apiRes.status).toBe(500);
249
+ consoleSpy.mockRestore();
250
+ });
251
+ });
252
+ //# sourceMappingURL=express.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.test.js","sourceRoot":"","sources":["../../src/server/express.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG7D,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,oBAAoB,EAAE,GAAG,EAAE,CACzB,CAAC,CAAC,IAAa,EAAE,IAAa,EAAE,IAAgB,EAAE,EAAE,CAClD,IAAI,EAAE,CAAmB;CAC9B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,gBAAgB,EAAE,CAAC,WAAoB,EAAE,EAAE,CACzC,CAAC,CAAC,IAAa,EAAE,IAAa,EAAE,IAAgB,EAAE,EAAE,CAClD,IAAI,EAAE,CAAmB;CAC9B,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,EAAe,CAAC;AAEnC,KAAK,UAAU,MAAM,CAAC,GAA4C;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAI,MAAM,CAAC,OAAO,EAAuB,CAAC,IAAI,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,IAAI,UAAmC,CAAC;AACxC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAErC,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,OAAO,KAAK,CAAC,oBAAoB,IAAI,MAAM,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;KACtE,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,OAAO,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,EAAE,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,EAAE,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,GAAG,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QACF,MAAM,GAAG,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACjD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;SACxD,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,iDAAiD;QACjD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAClC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAwB,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAChC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE;gBAChB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAwB,CAAC,EAAE;aACvD;SACF,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,WAAW,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAmB,GAAG,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,UAAU,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE3E,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE;YACzD,EAAE,EAAE,IAAI;SACT,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,6BAA6B,EAC7B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAClB,CAAC;QACF,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,YAAY,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACnE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,MAAM,eAAe,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACtE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC5D,IAAI,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC;YAC1B,SAAS,EAAE,UAAU;YACrB,UAAU;YACV,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;SACjE,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,GAAG,MAAM,CAAC;QAEpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { AnyToolRegistry, InferTools, ToolInput, ToolNames, ToolOutput, ToolResponseMetadata, } from "./inferUtilityTypes.js";
2
+ export type { McpExtra, McpMethodString, McpMiddlewareFilter, McpMiddlewareFn, McpResultFor, McpTypedMiddlewareFn, McpWildcard, } from "./middleware.js";
3
+ export type { McpServerTypes, ToolDef, WidgetHostType } from "./server.js";
4
+ export { McpServer } from "./server.js";
5
+ export { widgetsDevServer } from "./widgetsDevServer.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -51,4 +51,14 @@ export type ToolInput<ServerType, ToolName extends ToolNames<ServerType>> = Extr
51
51
  * ```
52
52
  */
53
53
  export type ToolOutput<ServerType, ToolName extends ToolNames<ServerType>> = ExtractTool<ServerType, ToolName>["output"];
54
+ /**
55
+ * Get the responseMetadata type for a specific tool (widget or regular tool).
56
+ * This is inferred from the `_meta` property of the tool callback's return value.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * type SearchMeta = ToolResponseMetadata<MyServer, "search">;
61
+ * ```
62
+ */
63
+ export type ToolResponseMetadata<ServerType, ToolName extends ToolNames<ServerType>> = ExtractTool<ServerType, ToolName>["responseMetadata"];
54
64
  export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferUtilityTypes.js","sourceRoot":"","sources":["../../src/server/inferUtilityTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import type { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
3
+ import type { CallToolResult, CancelTaskResult, ClientNotification, ClientRequest, CompleteResult, EmptyResult, GetPromptResult, GetTaskPayloadResult, GetTaskResult, InitializeResult, ListPromptsResult, ListResourcesResult, ListResourceTemplatesResult, ListTasksResult, ListToolsResult, ReadResourceResult, ServerNotification, ServerRequest, ServerResult } from "@modelcontextprotocol/sdk/types.js";
4
+ /**
5
+ * The `extra` context object provided by the MCP SDK to request handlers.
6
+ */
7
+ export type McpExtra = RequestHandlerExtra<ServerRequest, ServerNotification>;
8
+ /**
9
+ * A single MCP middleware function following the onion model.
10
+ * Call `next()` to invoke the next middleware or the final handler.
11
+ * For notifications, `extra` is `undefined` (SDK does not provide extra context)
12
+ * and `next()` resolves to `undefined`.
13
+ */
14
+ export type McpMiddlewareFn = (request: {
15
+ method: string;
16
+ params: Record<string, unknown>;
17
+ }, extra: McpExtra | undefined, next: () => Promise<unknown>) => Promise<unknown> | unknown;
18
+ /**
19
+ * MCP methods the server handles (incoming from client).
20
+ */
21
+ export type McpMethodString = ClientRequest["method"] | ClientNotification["method"];
22
+ /** Extract params type for a specific MCP method from SDK unions. */
23
+ export type McpRequestParams<M extends string> = Extract<ClientRequest, {
24
+ method: M;
25
+ }> extends {
26
+ params: infer P;
27
+ } ? P : Extract<ClientNotification, {
28
+ method: M;
29
+ }> extends {
30
+ params: infer P;
31
+ } ? P : Record<string, unknown>;
32
+ /** Resolve extra type: McpExtra for requests, undefined for notifications. */
33
+ export type McpExtraFor<M extends string> = M extends ClientRequest["method"] ? McpExtra : M extends ClientNotification["method"] ? undefined : McpExtra | undefined;
34
+ /** Maps each MCP request method to its SDK result type. */
35
+ interface McpResultMap {
36
+ ping: EmptyResult;
37
+ initialize: InitializeResult;
38
+ "tools/list": ListToolsResult;
39
+ "tools/call": CallToolResult;
40
+ "resources/list": ListResourcesResult;
41
+ "resources/templates/list": ListResourceTemplatesResult;
42
+ "resources/read": ReadResourceResult;
43
+ "resources/subscribe": EmptyResult;
44
+ "resources/unsubscribe": EmptyResult;
45
+ "prompts/list": ListPromptsResult;
46
+ "prompts/get": GetPromptResult;
47
+ "completion/complete": CompleteResult;
48
+ "logging/setLevel": EmptyResult;
49
+ "tasks/get": GetTaskResult;
50
+ "tasks/result": GetTaskPayloadResult;
51
+ "tasks/list": ListTasksResult;
52
+ "tasks/cancel": CancelTaskResult;
53
+ }
54
+ /**
55
+ * Map an MCP method string to its corresponding result type.
56
+ * For request methods, resolves to the specific SDK result type.
57
+ * For wildcard patterns (e.g. `"tools/*"`), resolves to the union of matching result types.
58
+ * For notification methods, resolves to `undefined`.
59
+ * For unknown/unmatched methods, falls back to `ServerResult`.
60
+ */
61
+ export type McpResultFor<M extends string> = M extends keyof McpResultMap ? McpResultMap[M] : M extends `${infer Prefix}/*` ? [McpResultMap[keyof McpResultMap & `${Prefix}/${string}`]] extends [never] ? M extends ToWildcard<ClientNotification["method"]> ? undefined : ServerResult : McpResultMap[keyof McpResultMap & `${Prefix}/${string}`] : M extends ClientNotification["method"] ? undefined : ServerResult;
62
+ /** Typed middleware fn for a specific method — narrows params, extra, and next() result. */
63
+ export type McpTypedMiddlewareFn<M extends string> = (request: {
64
+ method: M;
65
+ params: McpRequestParams<M>;
66
+ }, extra: McpExtraFor<M>, next: () => Promise<McpResultFor<M>>) => Promise<unknown> | unknown;
67
+ /** Extracts `"prefix/*"` from `"prefix/anything"` — distributive over unions. */
68
+ type ToWildcard<T extends string> = T extends `${infer Prefix}/${string}` ? `${Prefix}/*` : never;
69
+ /** Wildcard prefixes derived from method strings (e.g. `"tools/*"` from `"tools/call"`). */
70
+ export type McpWildcard = ToWildcard<McpMethodString>;
71
+ /** Category keywords matching all requests or all notifications. */
72
+ type McpCategory = "request" | "notification";
73
+ /**
74
+ * A single filter pattern for MCP middleware:
75
+ * - Exact method: `"tools/call"`
76
+ * - Wildcard: `"tools/*"`
77
+ * - Category: `"request"` | `"notification"`
78
+ * - Escape hatch: arbitrary string via `string & {}`
79
+ */
80
+ type McpMiddlewareFilterPattern = McpMethodString | McpWildcard | McpCategory | (string & {});
81
+ /**
82
+ * Filter determining which MCP methods a middleware applies to.
83
+ * A single pattern or an array of patterns (OR logic).
84
+ */
85
+ export type McpMiddlewareFilter = McpMiddlewareFilterPattern | McpMiddlewareFilterPattern[];
86
+ /**
87
+ * Internal entry stored for each registered middleware.
88
+ * `filter: null` means catch-all (matches everything).
89
+ */
90
+ export type McpMiddlewareEntry = {
91
+ filter: McpMiddlewareFilter | null;
92
+ handler: McpMiddlewareFn;
93
+ };
94
+ type HandlerMap = Map<string, (...args: unknown[]) => Promise<unknown>>;
95
+ /**
96
+ * Extract the TS-private `_requestHandlers` and `_notificationHandlers` maps
97
+ * from the SDK's `Server` (extends `Protocol`). These are runtime-accessible
98
+ * but declared `private` in TypeScript.
99
+ *
100
+ * Validates with `instanceof Map` so an incompatible SDK version fails fast
101
+ * instead of silently breaking.
102
+ */
103
+ export declare function getHandlerMaps(server: Server): {
104
+ requestHandlers: HandlerMap;
105
+ notificationHandlers: HandlerMap;
106
+ };
107
+ /**
108
+ * Check if a single filter pattern matches a given method.
109
+ *
110
+ * - Exact: `"tools/call"` matches only `"tools/call"`
111
+ * - Wildcard: `"tools/*"` matches any method starting with `"tools/"`
112
+ * - Category `"request"`: matches when `isNotification` is false
113
+ * - Category `"notification"`: matches when `isNotification` is true
114
+ */
115
+ export declare function matchesFilter(method: string, filter: string, isNotification: boolean): boolean;
116
+ /**
117
+ * Build an onion-model middleware chain for a specific method.
118
+ *
119
+ * Filters `entries` to those matching `method`, then composes them
120
+ * so the first registered middleware is the outermost layer.
121
+ * `next()` is guarded against multiple calls within a single middleware.
122
+ */
123
+ export declare function buildMiddlewareChain(method: string, isNotification: boolean, originalHandler: (...args: unknown[]) => Promise<unknown>, entries: McpMiddlewareEntry[]): (...args: unknown[]) => Promise<unknown>;
124
+ export {};