skybridge 0.0.0-dev.d4681f9 → 0.0.0-dev.d47cbf2

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 (446) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  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/tunnel-control-server.d.ts +9 -0
  17. package/dist/cli/tunnel-control-server.js +31 -0
  18. package/dist/cli/tunnel-control-server.js.map +1 -0
  19. package/dist/cli/tunnel-control-server.test.js +39 -0
  20. package/dist/cli/tunnel-control-server.test.js.map +1 -0
  21. package/dist/cli/tunnel-handler.d.ts +3 -0
  22. package/dist/cli/tunnel-handler.js +48 -0
  23. package/dist/cli/tunnel-handler.js.map +1 -0
  24. package/dist/cli/tunnel-handler.test.js +105 -0
  25. package/dist/cli/tunnel-handler.test.js.map +1 -0
  26. package/dist/cli/tunnel.d.ts +57 -0
  27. package/dist/cli/tunnel.js +154 -0
  28. package/dist/cli/tunnel.js.map +1 -0
  29. package/dist/cli/tunnel.test.js +190 -0
  30. package/dist/cli/tunnel.test.js.map +1 -0
  31. package/dist/cli/types.d.ts +5 -0
  32. package/dist/{src/web/bridges → cli}/types.js.map +1 -1
  33. package/dist/cli/use-execute-steps.d.ts +11 -0
  34. package/dist/cli/use-execute-steps.js +36 -0
  35. package/dist/cli/use-execute-steps.js.map +1 -0
  36. package/dist/cli/use-messages.d.ts +3 -0
  37. package/dist/cli/use-messages.js +11 -0
  38. package/dist/cli/use-messages.js.map +1 -0
  39. package/dist/cli/use-nodemon.d.ts +2 -0
  40. package/dist/cli/use-nodemon.js +64 -0
  41. package/dist/cli/use-nodemon.js.map +1 -0
  42. package/dist/cli/use-open-browser.d.ts +1 -0
  43. package/dist/cli/use-open-browser.js +44 -0
  44. package/dist/cli/use-open-browser.js.map +1 -0
  45. package/dist/cli/use-tunnel.d.ts +14 -0
  46. package/dist/cli/use-tunnel.js +131 -0
  47. package/dist/cli/use-tunnel.js.map +1 -0
  48. package/dist/cli/use-typescript-check.d.ts +9 -0
  49. package/dist/cli/use-typescript-check.js +94 -0
  50. package/dist/cli/use-typescript-check.js.map +1 -0
  51. package/dist/commands/build.d.ts +9 -0
  52. package/dist/commands/build.js +102 -0
  53. package/dist/commands/build.js.map +1 -0
  54. package/dist/commands/dev.d.ts +12 -0
  55. package/dist/commands/dev.js +80 -0
  56. package/dist/commands/dev.js.map +1 -0
  57. package/dist/commands/start.d.ts +9 -0
  58. package/dist/commands/start.js +49 -0
  59. package/dist/commands/start.js.map +1 -0
  60. package/dist/commands/telemetry/disable.d.ts +5 -0
  61. package/dist/commands/telemetry/disable.js +14 -0
  62. package/dist/commands/telemetry/disable.js.map +1 -0
  63. package/dist/commands/telemetry/enable.d.ts +5 -0
  64. package/dist/commands/telemetry/enable.js +14 -0
  65. package/dist/commands/telemetry/enable.js.map +1 -0
  66. package/dist/commands/telemetry/status.d.ts +5 -0
  67. package/dist/commands/telemetry/status.js +14 -0
  68. package/dist/commands/telemetry/status.js.map +1 -0
  69. package/dist/server/asset-base-url-transform-plugin.d.ts +10 -0
  70. package/dist/server/asset-base-url-transform-plugin.js +33 -0
  71. package/dist/server/asset-base-url-transform-plugin.js.map +1 -0
  72. package/dist/server/asset-base-url-transform-plugin.test.js +84 -0
  73. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -0
  74. package/dist/server/content-helpers.d.ts +27 -0
  75. package/dist/server/content-helpers.js +46 -0
  76. package/dist/server/content-helpers.js.map +1 -0
  77. package/dist/server/content-helpers.test.js +70 -0
  78. package/dist/server/content-helpers.test.js.map +1 -0
  79. package/dist/server/express.d.ts +11 -0
  80. package/dist/server/express.js +101 -0
  81. package/dist/server/express.js.map +1 -0
  82. package/dist/server/express.test.js +430 -0
  83. package/dist/server/express.test.js.map +1 -0
  84. package/dist/server/index.d.ts +6 -0
  85. package/dist/server/index.js +4 -0
  86. package/dist/server/index.js.map +1 -0
  87. package/dist/{src/server → server}/inferUtilityTypes.d.ts +6 -6
  88. package/dist/server/inferUtilityTypes.js.map +1 -0
  89. package/dist/server/metric.d.ts +14 -0
  90. package/dist/server/metric.js +62 -0
  91. package/dist/server/metric.js.map +1 -0
  92. package/dist/server/middleware.d.ts +124 -0
  93. package/dist/server/middleware.js +93 -0
  94. package/dist/server/middleware.js.map +1 -0
  95. package/dist/server/middleware.test-d.js +75 -0
  96. package/dist/server/middleware.test-d.js.map +1 -0
  97. package/dist/server/middleware.test.js +493 -0
  98. package/dist/server/middleware.test.js.map +1 -0
  99. package/dist/server/server.d.ts +196 -0
  100. package/dist/server/server.js +468 -0
  101. package/dist/server/server.js.map +1 -0
  102. package/dist/{src/server → server}/templateHelper.d.ts +5 -7
  103. package/dist/server/templateHelper.js +11 -0
  104. package/dist/server/templateHelper.js.map +1 -0
  105. package/dist/server/templates.generated.d.ts +4 -0
  106. package/dist/server/templates.generated.js +47 -0
  107. package/dist/server/templates.generated.js.map +1 -0
  108. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  109. package/dist/server/tunnel-proxy-router.js +110 -0
  110. package/dist/server/tunnel-proxy-router.js.map +1 -0
  111. package/dist/server/tunnel-proxy-router.test.js +229 -0
  112. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  113. package/dist/server/viewsDevServer.d.ts +14 -0
  114. package/dist/server/viewsDevServer.js +45 -0
  115. package/dist/server/viewsDevServer.js.map +1 -0
  116. package/dist/{src/test → test}/utils.d.ts +13 -21
  117. package/dist/{src/test → test}/utils.js +42 -37
  118. package/dist/test/utils.js.map +1 -0
  119. package/dist/test/view.test.js +523 -0
  120. package/dist/test/view.test.js.map +1 -0
  121. package/dist/version.d.ts +1 -0
  122. package/dist/version.js +3 -0
  123. package/dist/version.js.map +1 -0
  124. package/dist/web/bridges/apps-sdk/adaptor.d.ts +24 -0
  125. package/dist/web/bridges/apps-sdk/adaptor.js +93 -0
  126. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -0
  127. package/dist/web/bridges/apps-sdk/bridge.d.ts +10 -0
  128. package/dist/{src/web/bridges/apps-sdk-bridge.js → web/bridges/apps-sdk/bridge.js} +21 -16
  129. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -0
  130. package/dist/web/bridges/apps-sdk/index.d.ts +5 -0
  131. package/dist/web/bridges/apps-sdk/index.js +5 -0
  132. package/dist/web/bridges/apps-sdk/index.js.map +1 -0
  133. package/dist/web/bridges/apps-sdk/types.d.ts +126 -0
  134. package/dist/{src/web → web/bridges/apps-sdk}/types.js +0 -1
  135. package/dist/web/bridges/apps-sdk/types.js.map +1 -0
  136. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +2 -0
  137. package/dist/{src/web/bridges/hooks/use-apps-sdk-bridge.js → web/bridges/apps-sdk/use-apps-sdk-context.js} +3 -3
  138. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -0
  139. package/dist/web/bridges/get-adaptor.d.ts +2 -0
  140. package/dist/web/bridges/get-adaptor.js +8 -0
  141. package/dist/web/bridges/get-adaptor.js.map +1 -0
  142. package/dist/web/bridges/index.d.ts +5 -0
  143. package/dist/web/bridges/index.js +6 -0
  144. package/dist/web/bridges/index.js.map +1 -0
  145. package/dist/web/bridges/mcp-app/adaptor.d.ts +48 -0
  146. package/dist/web/bridges/mcp-app/adaptor.js +268 -0
  147. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -0
  148. package/dist/web/bridges/mcp-app/bridge.d.ts +26 -0
  149. package/dist/web/bridges/mcp-app/bridge.js +102 -0
  150. package/dist/web/bridges/mcp-app/bridge.js.map +1 -0
  151. package/dist/web/bridges/mcp-app/index.d.ts +4 -0
  152. package/dist/web/bridges/mcp-app/index.js +4 -0
  153. package/dist/web/bridges/mcp-app/index.js.map +1 -0
  154. package/dist/web/bridges/mcp-app/types.d.ts +8 -0
  155. package/dist/web/bridges/mcp-app/types.js +2 -0
  156. package/dist/web/bridges/mcp-app/types.js.map +1 -0
  157. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +7 -0
  158. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +7 -0
  159. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -0
  160. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +26 -0
  161. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -0
  162. package/dist/web/bridges/types.d.ts +109 -0
  163. package/dist/web/bridges/types.js +2 -0
  164. package/dist/web/bridges/types.js.map +1 -0
  165. package/dist/web/bridges/use-host-context.d.ts +2 -0
  166. package/dist/web/bridges/use-host-context.js +8 -0
  167. package/dist/web/bridges/use-host-context.js.map +1 -0
  168. package/dist/web/components/modal-provider.d.ts +4 -0
  169. package/dist/web/components/modal-provider.js +45 -0
  170. package/dist/web/components/modal-provider.js.map +1 -0
  171. package/dist/web/create-store.js +38 -0
  172. package/dist/web/create-store.js.map +1 -0
  173. package/dist/web/create-store.test.js +129 -0
  174. package/dist/web/create-store.test.js.map +1 -0
  175. package/dist/{src/web → web}/data-llm.d.ts +1 -1
  176. package/dist/{src/web → web}/data-llm.js +11 -7
  177. package/dist/web/data-llm.js.map +1 -0
  178. package/dist/web/data-llm.test.js +142 -0
  179. package/dist/web/data-llm.test.js.map +1 -0
  180. package/dist/{src/web → web}/generate-helpers.d.ts +22 -19
  181. package/dist/{src/web → web}/generate-helpers.js +20 -18
  182. package/dist/web/generate-helpers.js.map +1 -0
  183. package/dist/{src/web → web}/generate-helpers.test-d.js +30 -27
  184. package/dist/web/generate-helpers.test-d.js.map +1 -0
  185. package/dist/web/generate-helpers.test.js.map +1 -0
  186. package/dist/{src/web → web}/helpers/state.d.ts +2 -2
  187. package/dist/web/helpers/state.js +45 -0
  188. package/dist/web/helpers/state.js.map +1 -0
  189. package/dist/{src/web → web}/helpers/state.test.js +9 -9
  190. package/dist/web/helpers/state.test.js.map +1 -0
  191. package/dist/{src/web → web}/hooks/index.d.ts +3 -3
  192. package/dist/{src/web → web}/hooks/index.js +2 -2
  193. package/dist/web/hooks/index.js.map +1 -0
  194. package/dist/web/hooks/test/utils.d.ts +16 -0
  195. package/dist/web/hooks/test/utils.js +64 -0
  196. package/dist/web/hooks/test/utils.js.map +1 -0
  197. package/dist/{src/web → web}/hooks/use-call-tool.d.ts +2 -1
  198. package/dist/{src/web → web}/hooks/use-call-tool.js +12 -4
  199. package/dist/web/hooks/use-call-tool.js.map +1 -0
  200. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -0
  201. package/dist/{src/web → web}/hooks/use-call-tool.test.js +26 -1
  202. package/dist/web/hooks/use-call-tool.test.js.map +1 -0
  203. package/dist/web/hooks/use-display-mode.d.ts +4 -0
  204. package/dist/web/hooks/use-display-mode.js +9 -0
  205. package/dist/web/hooks/use-display-mode.js.map +1 -0
  206. package/dist/web/hooks/use-display-mode.test-d.js +8 -0
  207. package/dist/web/hooks/use-display-mode.test-d.js.map +1 -0
  208. package/dist/web/hooks/use-display-mode.test.js.map +1 -0
  209. package/dist/web/hooks/use-files.d.ts +7 -0
  210. package/dist/web/hooks/use-files.js +10 -0
  211. package/dist/web/hooks/use-files.js.map +1 -0
  212. package/dist/web/hooks/use-files.test.d.ts +1 -0
  213. package/dist/web/hooks/use-files.test.js +54 -0
  214. package/dist/web/hooks/use-files.test.js.map +1 -0
  215. package/dist/{src/web → web}/hooks/use-layout.d.ts +2 -2
  216. package/dist/{src/web → web}/hooks/use-layout.js +4 -4
  217. package/dist/web/hooks/use-layout.js.map +1 -0
  218. package/dist/web/hooks/use-layout.test.d.ts +1 -0
  219. package/dist/web/hooks/use-layout.test.js +96 -0
  220. package/dist/web/hooks/use-layout.test.js.map +1 -0
  221. package/dist/web/hooks/use-open-external.d.ts +3 -0
  222. package/dist/web/hooks/use-open-external.js +8 -0
  223. package/dist/web/hooks/use-open-external.js.map +1 -0
  224. package/dist/web/hooks/use-open-external.test.d.ts +1 -0
  225. package/dist/web/hooks/use-open-external.test.js +65 -0
  226. package/dist/web/hooks/use-open-external.test.js.map +1 -0
  227. package/dist/web/hooks/use-request-modal.d.ts +9 -0
  228. package/dist/web/hooks/use-request-modal.js +16 -0
  229. package/dist/web/hooks/use-request-modal.js.map +1 -0
  230. package/dist/web/hooks/use-request-modal.test.d.ts +1 -0
  231. package/dist/{src/web → web}/hooks/use-request-modal.test.js +5 -1
  232. package/dist/web/hooks/use-request-modal.test.js.map +1 -0
  233. package/dist/web/hooks/use-send-follow-up-message.js +8 -0
  234. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -0
  235. package/dist/web/hooks/use-set-open-in-app-url.d.ts +1 -0
  236. package/dist/web/hooks/use-set-open-in-app-url.js +8 -0
  237. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -0
  238. package/dist/web/hooks/use-set-open-in-app-url.test.d.ts +1 -0
  239. package/dist/web/hooks/use-set-open-in-app-url.test.js +43 -0
  240. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -0
  241. package/dist/{src/web → web}/hooks/use-tool-info.d.ts +12 -1
  242. package/dist/web/hooks/use-tool-info.js +26 -0
  243. package/dist/web/hooks/use-tool-info.js.map +1 -0
  244. package/dist/web/hooks/use-tool-info.test-d.d.ts +1 -0
  245. package/dist/{src/web → web}/hooks/use-tool-info.test-d.js +40 -4
  246. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -0
  247. package/dist/web/hooks/use-tool-info.test.d.ts +1 -0
  248. package/dist/web/hooks/use-tool-info.test.js +130 -0
  249. package/dist/web/hooks/use-tool-info.test.js.map +1 -0
  250. package/dist/{src/web → web}/hooks/use-user.d.ts +1 -1
  251. package/dist/web/hooks/use-user.js +35 -0
  252. package/dist/web/hooks/use-user.js.map +1 -0
  253. package/dist/web/hooks/use-user.test.d.ts +1 -0
  254. package/dist/web/hooks/use-user.test.js +122 -0
  255. package/dist/web/hooks/use-user.test.js.map +1 -0
  256. package/dist/web/hooks/use-view-state.d.ts +4 -0
  257. package/dist/web/hooks/use-view-state.js +32 -0
  258. package/dist/web/hooks/use-view-state.js.map +1 -0
  259. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  260. package/dist/web/hooks/use-view-state.test.js +177 -0
  261. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  262. package/dist/{src/web → web}/index.d.ts +1 -2
  263. package/dist/{src/web → web}/index.js +1 -2
  264. package/dist/web/index.js.map +1 -0
  265. package/dist/web/mount-view.d.ts +1 -0
  266. package/dist/{src/web/mount-widget.js → web/mount-view.js} +11 -3
  267. package/dist/web/mount-view.js.map +1 -0
  268. package/dist/web/plugin/data-llm.test.d.ts +1 -0
  269. package/dist/web/plugin/data-llm.test.js.map +1 -0
  270. package/dist/web/plugin/plugin.d.ts +5 -0
  271. package/dist/web/plugin/plugin.js +156 -0
  272. package/dist/web/plugin/plugin.js.map +1 -0
  273. package/dist/web/plugin/scan-views.d.ts +16 -0
  274. package/dist/web/plugin/scan-views.js +88 -0
  275. package/dist/web/plugin/scan-views.js.map +1 -0
  276. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  277. package/dist/web/plugin/scan-views.test.js +99 -0
  278. package/dist/web/plugin/scan-views.test.js.map +1 -0
  279. package/dist/{src/web → web}/plugin/transform-data-llm.js +7 -4
  280. package/dist/web/plugin/transform-data-llm.js.map +1 -0
  281. package/dist/web/plugin/transform-data-llm.test.d.ts +1 -0
  282. package/dist/web/plugin/transform-data-llm.test.js.map +1 -0
  283. package/dist/web/plugin/validate-view.d.ts +1 -0
  284. package/dist/web/plugin/validate-view.js +9 -0
  285. package/dist/web/plugin/validate-view.js.map +1 -0
  286. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  287. package/dist/web/plugin/validate-view.test.js +24 -0
  288. package/dist/web/plugin/validate-view.test.js.map +1 -0
  289. package/dist/{src/web → web}/proxy.js +0 -1
  290. package/dist/web/proxy.js.map +1 -0
  291. package/dist/web/types.d.ts +16 -0
  292. package/dist/web/types.js +2 -0
  293. package/dist/web/types.js.map +1 -0
  294. package/package.json +75 -40
  295. package/tsconfig.base.json +33 -0
  296. package/dist/src/server/devtoolsStaticServer.d.ts +0 -15
  297. package/dist/src/server/devtoolsStaticServer.js +0 -38
  298. package/dist/src/server/devtoolsStaticServer.js.map +0 -1
  299. package/dist/src/server/index.d.ts +0 -5
  300. package/dist/src/server/index.js +0 -4
  301. package/dist/src/server/index.js.map +0 -1
  302. package/dist/src/server/inferUtilityTypes.js.map +0 -1
  303. package/dist/src/server/server.d.ts +0 -74
  304. package/dist/src/server/server.js +0 -82
  305. package/dist/src/server/server.js.map +0 -1
  306. package/dist/src/server/templateHelper.js +0 -30
  307. package/dist/src/server/templateHelper.js.map +0 -1
  308. package/dist/src/server/templates/development.hbs +0 -15
  309. package/dist/src/server/templates/production.hbs +0 -7
  310. package/dist/src/server/widgetsDevServer.d.ts +0 -12
  311. package/dist/src/server/widgetsDevServer.js +0 -39
  312. package/dist/src/server/widgetsDevServer.js.map +0 -1
  313. package/dist/src/test/utils.js.map +0 -1
  314. package/dist/src/test/widget.test.js +0 -146
  315. package/dist/src/test/widget.test.js.map +0 -1
  316. package/dist/src/web/bridges/apps-sdk-adapter.d.ts +0 -2
  317. package/dist/src/web/bridges/apps-sdk-adapter.js +0 -4
  318. package/dist/src/web/bridges/apps-sdk-adapter.js.map +0 -1
  319. package/dist/src/web/bridges/apps-sdk-bridge.d.ts +0 -8
  320. package/dist/src/web/bridges/apps-sdk-bridge.js.map +0 -1
  321. package/dist/src/web/bridges/get-bridge-methods.d.ts +0 -2
  322. package/dist/src/web/bridges/get-bridge-methods.js +0 -8
  323. package/dist/src/web/bridges/get-bridge-methods.js.map +0 -1
  324. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.d.ts +0 -2
  325. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.js.map +0 -1
  326. package/dist/src/web/bridges/hooks/use-bridge.d.ts +0 -2
  327. package/dist/src/web/bridges/hooks/use-bridge.js +0 -57
  328. package/dist/src/web/bridges/hooks/use-bridge.js.map +0 -1
  329. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.d.ts +0 -4
  330. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.js +0 -7
  331. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.js.map +0 -1
  332. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js +0 -58
  333. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js.map +0 -1
  334. package/dist/src/web/bridges/index.d.ts +0 -4
  335. package/dist/src/web/bridges/index.js +0 -5
  336. package/dist/src/web/bridges/index.js.map +0 -1
  337. package/dist/src/web/bridges/mcp-app-adapter.d.ts +0 -2
  338. package/dist/src/web/bridges/mcp-app-adapter.js +0 -12
  339. package/dist/src/web/bridges/mcp-app-adapter.js.map +0 -1
  340. package/dist/src/web/bridges/mcp-app-bridge.d.ts +0 -29
  341. package/dist/src/web/bridges/mcp-app-bridge.js +0 -130
  342. package/dist/src/web/bridges/mcp-app-bridge.js.map +0 -1
  343. package/dist/src/web/bridges/types.d.ts +0 -22
  344. package/dist/src/web/create-store.js +0 -25
  345. package/dist/src/web/create-store.js.map +0 -1
  346. package/dist/src/web/create-store.test.js +0 -70
  347. package/dist/src/web/create-store.test.js.map +0 -1
  348. package/dist/src/web/data-llm.js.map +0 -1
  349. package/dist/src/web/data-llm.test.js +0 -76
  350. package/dist/src/web/data-llm.test.js.map +0 -1
  351. package/dist/src/web/generate-helpers.js.map +0 -1
  352. package/dist/src/web/generate-helpers.test-d.js.map +0 -1
  353. package/dist/src/web/generate-helpers.test.js.map +0 -1
  354. package/dist/src/web/helpers/state.js +0 -40
  355. package/dist/src/web/helpers/state.js.map +0 -1
  356. package/dist/src/web/helpers/state.test.js.map +0 -1
  357. package/dist/src/web/hooks/index.js.map +0 -1
  358. package/dist/src/web/hooks/use-call-tool.js.map +0 -1
  359. package/dist/src/web/hooks/use-call-tool.test-d.js.map +0 -1
  360. package/dist/src/web/hooks/use-call-tool.test.js.map +0 -1
  361. package/dist/src/web/hooks/use-display-mode.d.ts +0 -4
  362. package/dist/src/web/hooks/use-display-mode.js +0 -10
  363. package/dist/src/web/hooks/use-display-mode.js.map +0 -1
  364. package/dist/src/web/hooks/use-display-mode.test.js.map +0 -1
  365. package/dist/src/web/hooks/use-files.d.ts +0 -10
  366. package/dist/src/web/hooks/use-files.js +0 -7
  367. package/dist/src/web/hooks/use-files.js.map +0 -1
  368. package/dist/src/web/hooks/use-files.test.js +0 -29
  369. package/dist/src/web/hooks/use-files.test.js.map +0 -1
  370. package/dist/src/web/hooks/use-layout.js.map +0 -1
  371. package/dist/src/web/hooks/use-layout.test.js +0 -46
  372. package/dist/src/web/hooks/use-layout.test.js.map +0 -1
  373. package/dist/src/web/hooks/use-open-external.d.ts +0 -1
  374. package/dist/src/web/hooks/use-open-external.js +0 -6
  375. package/dist/src/web/hooks/use-open-external.js.map +0 -1
  376. package/dist/src/web/hooks/use-open-external.test.js +0 -24
  377. package/dist/src/web/hooks/use-open-external.test.js.map +0 -1
  378. package/dist/src/web/hooks/use-openai-global.d.ts +0 -3
  379. package/dist/src/web/hooks/use-openai-global.js +0 -6
  380. package/dist/src/web/hooks/use-openai-global.js.map +0 -1
  381. package/dist/src/web/hooks/use-request-modal.d.ts +0 -9
  382. package/dist/src/web/hooks/use-request-modal.js +0 -14
  383. package/dist/src/web/hooks/use-request-modal.js.map +0 -1
  384. package/dist/src/web/hooks/use-request-modal.test.js.map +0 -1
  385. package/dist/src/web/hooks/use-send-follow-up-message.js +0 -11
  386. package/dist/src/web/hooks/use-send-follow-up-message.js.map +0 -1
  387. package/dist/src/web/hooks/use-tool-info.js +0 -20
  388. package/dist/src/web/hooks/use-tool-info.js.map +0 -1
  389. package/dist/src/web/hooks/use-tool-info.test-d.js.map +0 -1
  390. package/dist/src/web/hooks/use-tool-info.test.js +0 -60
  391. package/dist/src/web/hooks/use-tool-info.test.js.map +0 -1
  392. package/dist/src/web/hooks/use-user.js +0 -19
  393. package/dist/src/web/hooks/use-user.js.map +0 -1
  394. package/dist/src/web/hooks/use-user.test.js +0 -44
  395. package/dist/src/web/hooks/use-user.test.js.map +0 -1
  396. package/dist/src/web/hooks/use-widget-state.d.ts +0 -4
  397. package/dist/src/web/hooks/use-widget-state.js +0 -32
  398. package/dist/src/web/hooks/use-widget-state.js.map +0 -1
  399. package/dist/src/web/hooks/use-widget-state.test.js +0 -61
  400. package/dist/src/web/hooks/use-widget-state.test.js.map +0 -1
  401. package/dist/src/web/index.js.map +0 -1
  402. package/dist/src/web/mount-widget.d.ts +0 -1
  403. package/dist/src/web/mount-widget.js.map +0 -1
  404. package/dist/src/web/plugin/data-llm.test.js.map +0 -1
  405. package/dist/src/web/plugin/plugin.d.ts +0 -2
  406. package/dist/src/web/plugin/plugin.js +0 -39
  407. package/dist/src/web/plugin/plugin.js.map +0 -1
  408. package/dist/src/web/plugin/transform-data-llm.js.map +0 -1
  409. package/dist/src/web/plugin/transform-data-llm.test.js.map +0 -1
  410. package/dist/src/web/proxy.js.map +0 -1
  411. package/dist/src/web/types.d.ts +0 -151
  412. package/dist/src/web/types.js.map +0 -1
  413. package/dist/vitest.config.d.ts +0 -2
  414. package/dist/vitest.config.js +0 -8
  415. package/dist/vitest.config.js.map +0 -1
  416. /package/dist/{src/test/widget.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  417. /package/dist/{src/web/bridges/hooks/use-mcp-app-bridge.test.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  418. /package/dist/{src/web/create-store.test.d.ts → cli/tunnel.test.d.ts} +0 -0
  419. /package/dist/{src/web/bridges → cli}/types.js +0 -0
  420. /package/dist/{src/web/data-llm.test.d.ts → server/asset-base-url-transform-plugin.test.d.ts} +0 -0
  421. /package/dist/{src/web/generate-helpers.test-d.d.ts → server/content-helpers.test.d.ts} +0 -0
  422. /package/dist/{src/web/generate-helpers.test.d.ts → server/express.test.d.ts} +0 -0
  423. /package/dist/{src/server → server}/inferUtilityTypes.js +0 -0
  424. /package/dist/{src/web/helpers/state.test.d.ts → server/middleware.test-d.d.ts} +0 -0
  425. /package/dist/{src/web/hooks/use-call-tool.test-d.d.ts → server/middleware.test.d.ts} +0 -0
  426. /package/dist/{src/web/hooks/use-call-tool.test.d.ts → server/tunnel-proxy-router.test.d.ts} +0 -0
  427. /package/dist/{src/web/hooks/use-display-mode.test.d.ts → test/view.test.d.ts} +0 -0
  428. /package/dist/{src/web/hooks/use-files.test.d.ts → web/bridges/mcp-app/use-mcp-app-context.test.d.ts} +0 -0
  429. /package/dist/{src/web → web}/create-store.d.ts +0 -0
  430. /package/dist/{src/web/hooks/use-layout.test.d.ts → web/create-store.test.d.ts} +0 -0
  431. /package/dist/{src/web/plugin → web}/data-llm.test.d.ts +0 -0
  432. /package/dist/{src/web/hooks/use-open-external.test.d.ts → web/generate-helpers.test-d.d.ts} +0 -0
  433. /package/dist/{src/web/hooks/use-request-modal.test.d.ts → web/generate-helpers.test.d.ts} +0 -0
  434. /package/dist/{src/web → web}/generate-helpers.test.js +0 -0
  435. /package/dist/{src/web/hooks/use-tool-info.test-d.d.ts → web/helpers/state.test.d.ts} +0 -0
  436. /package/dist/{src/web/hooks/use-tool-info.test.d.ts → web/hooks/use-call-tool.test-d.d.ts} +0 -0
  437. /package/dist/{src/web → web}/hooks/use-call-tool.test-d.js +0 -0
  438. /package/dist/{src/web/hooks/use-user.test.d.ts → web/hooks/use-call-tool.test.d.ts} +0 -0
  439. /package/dist/{src/web/hooks/use-widget-state.test.d.ts → web/hooks/use-display-mode.test-d.d.ts} +0 -0
  440. /package/dist/{src/web/plugin/transform-data-llm.test.d.ts → web/hooks/use-display-mode.test.d.ts} +0 -0
  441. /package/dist/{src/web → web}/hooks/use-display-mode.test.js +0 -0
  442. /package/dist/{src/web → web}/hooks/use-send-follow-up-message.d.ts +0 -0
  443. /package/dist/{src/web → web}/plugin/data-llm.test.js +0 -0
  444. /package/dist/{src/web → web}/plugin/transform-data-llm.d.ts +0 -0
  445. /package/dist/{src/web → web}/plugin/transform-data-llm.test.js +0 -0
  446. /package/dist/{src/web → web}/proxy.d.ts +0 -0
@@ -4,7 +4,7 @@ import { useToolInfo } from "./hooks/use-tool-info.js";
4
4
  * Creates typed versions of skybridge hooks with full type inference
5
5
  * for tool names, inputs, and outputs.
6
6
  *
7
- * This is the recommended way to use skybridge hooks in your widgets.
7
+ * This is the recommended way to use skybridge hooks in your views.
8
8
  * Set this up once in a dedicated file and export the typed hooks for use across your app.
9
9
  *
10
10
  * @typeParam ServerType - The type of your McpServer instance (use `typeof server`).
@@ -13,11 +13,13 @@ import { useToolInfo } from "./hooks/use-tool-info.js";
13
13
  *
14
14
  * @example
15
15
  * ```typescript
16
- * // server/src/index.ts
16
+ * // src/server.ts
17
17
  * const server = new McpServer({ name: "my-app", version: "1.0" }, {})
18
- * .widget("search-voyage", {}, {
18
+ * .registerTool({
19
+ * name: "search-trip",
19
20
  * inputSchema: { destination: z.string() },
20
21
  * outputSchema: { results: z.array(z.string()) },
22
+ * view: { component: "search-trip", description: "Search trips" },
21
23
  * }, async ({ destination }) => {
22
24
  * return { content: [{ type: "text", text: `Found trips to ${destination}` }] };
23
25
  * });
@@ -27,8 +29,8 @@ import { useToolInfo } from "./hooks/use-tool-info.js";
27
29
  *
28
30
  * @example
29
31
  * ```typescript
30
- * // web/src/skybridge.ts (one-time setup)
31
- * import type { AppType } from "../server";
32
+ * // src/helpers.ts (one-time setup)
33
+ * import type { AppType } from "./server";
32
34
  * import { generateHelpers } from "skybridge/web";
33
35
  *
34
36
  * export const { useCallTool, useToolInfo } = generateHelpers<AppType>();
@@ -36,19 +38,19 @@ import { useToolInfo } from "./hooks/use-tool-info.js";
36
38
  *
37
39
  * @example
38
40
  * ```typescript
39
- * // web/src/widgets/search.tsx (usage)
40
- * import { useCallTool, useToolInfo } from "../skybridge";
41
+ * // src/views/search.tsx (usage)
42
+ * import { useCallTool, useToolInfo } from "../helpers";
41
43
  *
42
- * export function SearchWidget() {
43
- * const { callTool, data } = useCallTool("search-voyage");
44
+ * export function SearchView() {
45
+ * const { callTool, data } = useCallTool("search-trip");
44
46
  * // ^ autocomplete for tool names
45
47
  * callTool({ destination: "Spain" });
46
48
  * // ^ autocomplete for input fields
47
49
  *
48
- * const toolInfo = useToolInfo<"search-voyage">();
49
- * // ^ autocomplete for widget names
50
- * // toolInfo.input is typed based on widget input schema
51
- * // toolInfo.output.structuredContent is typed based on widget output schema
50
+ * const toolInfo = useToolInfo<"search-trip">();
51
+ * // ^ autocomplete for view names
52
+ * // toolInfo.input is typed based on view input schema
53
+ * // toolInfo.output.structuredContent is typed based on view output schema
52
54
  * }
53
55
  * ```
54
56
  */
@@ -58,12 +60,12 @@ export function generateHelpers() {
58
60
  * Typed version of `useCallTool` that provides autocomplete for tool names
59
61
  * and type inference for inputs and outputs.
60
62
  *
61
- * @param name - The name of the widget to call. Autocompletes based on your server's widget registry.
63
+ * @param name - The name of the tool to call. Autocompletes based on your server's tool registry.
62
64
  * @returns A hook with typed `callTool` function and `data` property.
63
65
  *
64
66
  * @example
65
67
  * ```typescript
66
- * const { callTool, data, isPending } = useCallTool("search-voyage");
68
+ * const { callTool, data, isPending } = useCallTool("search-trip");
67
69
  * // TypeScript knows callTool expects { destination: string }
68
70
  * callTool({ destination: "Spain" });
69
71
  *
@@ -77,15 +79,15 @@ export function generateHelpers() {
77
79
  return useCallTool(name);
78
80
  },
79
81
  /**
80
- * Typed version of `useToolInfo` that provides autocomplete for widget names
82
+ * Typed version of `useToolInfo` that provides autocomplete for tool names
81
83
  * and type inference for inputs, outputs, and responseMetadata.
82
84
  *
83
- * @typeParam K - The name of the widget. Autocompletes based on your server's widget registry.
85
+ * @typeParam K - The name of the tool. Autocompletes based on your server's tool registry.
84
86
  * @returns A discriminated union with `status: "pending" | "success"` that narrows correctly.
85
87
  *
86
88
  * @example
87
89
  * ```typescript
88
- * const toolInfo = useToolInfo<"search-voyage">();
90
+ * const toolInfo = useToolInfo<"search-trip">();
89
91
  * // toolInfo.input is typed as { destination: string; ... }
90
92
  * // toolInfo.output is typed as { results: Array<...>; ... }
91
93
  * // toolInfo.responseMetadata is typed based on _meta in callback return
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-helpers.js","sourceRoot":"","sources":["../../src/web/generate-helpers.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAkB,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAoBvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,UAAU,eAAe;IAI7B,OAAO;QACL;;;;;;;;;;;;;;;;;;WAkBG;QACH,WAAW,EAAE,CACX,IAAc,EAId,EAAE;YACF,OAAO,WAAW,CAAC,IAAI,CAGtB,CAAC;QACJ,CAAC;QAED;;;;;;;;;;;;;;;;;;;;;;;;;;WA0BG;QACH,WAAW,EAAE,GAIX,EAAE;YACF,OAAO,WAAW,EAIjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -3,18 +3,18 @@ import { createInterfaceTestServer, createTestServer } from "../test/utils.js";
3
3
  import { generateHelpers } from "./generate-helpers.js";
4
4
  const server = createTestServer();
5
5
  const interfaceServer = createInterfaceTestServer();
6
- test("InferTools extracts the tool registry type (widgets + registerTool)", () => {
7
- expectTypeOf().toHaveProperty("search-voyage");
6
+ test("InferTools extracts the tool registry type (views + registerTool)", () => {
7
+ expectTypeOf().toHaveProperty("search-trip");
8
8
  expectTypeOf().toHaveProperty("get-trip-details");
9
- expectTypeOf().toHaveProperty("no-input-widget");
9
+ expectTypeOf().toHaveProperty("no-input-view");
10
10
  expectTypeOf().toHaveProperty("calculate-price");
11
- expectTypeOf().toHaveProperty("inferred-output-widget");
11
+ expectTypeOf().toHaveProperty("inferred-output-view");
12
12
  expectTypeOf().toHaveProperty("inferred-tool");
13
- expectTypeOf().toHaveProperty("widget-with-metadata");
13
+ expectTypeOf().toHaveProperty("view-with-metadata");
14
14
  expectTypeOf().toHaveProperty("tool-with-metadata");
15
- expectTypeOf().toHaveProperty("widget-with-mixed-returns");
15
+ expectTypeOf().toHaveProperty("view-with-mixed-returns");
16
16
  });
17
- test("ToolNames returns a union of tool name literals (widgets + registerTool)", () => {
17
+ test("ToolNames returns a union of tool name literals (views + registerTool)", () => {
18
18
  expectTypeOf().toEqualTypeOf();
19
19
  });
20
20
  test("ToolInput extracts the correct input type from Zod schema", () => {
@@ -32,23 +32,23 @@ test("ToolOutput extracts the correct output type from callback (inferred)", ()
32
32
  expectTypeOf().toEqualTypeOf();
33
33
  expectTypeOf().toEqualTypeOf();
34
34
  });
35
- test("generateHelpers provides autocomplete for tool names (widgets + registerTool)", () => {
35
+ test("generateHelpers provides autocomplete for tool names (views + registerTool)", () => {
36
36
  const { useCallTool } = generateHelpers();
37
- useCallTool("search-voyage");
37
+ useCallTool("search-trip");
38
38
  useCallTool("get-trip-details");
39
- useCallTool("no-input-widget");
39
+ useCallTool("no-input-view");
40
40
  useCallTool("calculate-price");
41
- useCallTool("inferred-output-widget");
41
+ useCallTool("inferred-output-view");
42
42
  useCallTool("inferred-tool");
43
- useCallTool("widget-with-metadata");
43
+ useCallTool("view-with-metadata");
44
44
  useCallTool("tool-with-metadata");
45
- useCallTool("widget-with-mixed-returns");
45
+ useCallTool("view-with-mixed-returns");
46
46
  // @ts-expect-error - "invalid-name" is not a valid tool name
47
47
  useCallTool("invalid-name");
48
48
  });
49
49
  test("useCallTool returns correctly typed callTool function", () => {
50
50
  const { useCallTool } = generateHelpers();
51
- const { callTool } = useCallTool("search-voyage");
51
+ const { callTool } = useCallTool("search-trip");
52
52
  callTool({ destination: "Spain" });
53
53
  callTool({ destination: "France", departureDate: "2024-06-01" });
54
54
  callTool({ destination: "Italy", maxPrice: 1000 });
@@ -57,7 +57,7 @@ test("useCallTool returns correctly typed callTool function", () => {
57
57
  });
58
58
  test("callTool can be called without args for tools with no required inputs", () => {
59
59
  const { useCallTool } = generateHelpers();
60
- const { callTool, callToolAsync } = useCallTool("no-input-widget");
60
+ const { callTool, callToolAsync } = useCallTool("no-input-view");
61
61
  callTool();
62
62
  callTool({});
63
63
  callToolAsync();
@@ -65,7 +65,7 @@ test("callTool can be called without args for tools with no required inputs", ()
65
65
  });
66
66
  test("callTool requires args for tools with required inputs", () => {
67
67
  const { useCallTool } = generateHelpers();
68
- const { callTool } = useCallTool("search-voyage");
68
+ const { callTool } = useCallTool("search-trip");
69
69
  // @ts-expect-error - "destination" is required
70
70
  callTool();
71
71
  // @ts-expect-error - "destination" is required
@@ -75,7 +75,7 @@ test("callTool requires args for tools with required inputs", () => {
75
75
  });
76
76
  test("callTool supports sideEffects for tools with required inputs", () => {
77
77
  const { useCallTool } = generateHelpers();
78
- const { callTool } = useCallTool("search-voyage");
78
+ const { callTool } = useCallTool("search-trip");
79
79
  callTool({ destination: "Spain" }, {
80
80
  onSuccess: (response, args) => {
81
81
  expectTypeOf(response.structuredContent.results).toBeArray();
@@ -96,7 +96,7 @@ test("callTool supports sideEffects for tools with required inputs", () => {
96
96
  });
97
97
  test("callTool supports sideEffects for tools with no required inputs", () => {
98
98
  const { useCallTool } = generateHelpers();
99
- const { callTool } = useCallTool("no-input-widget");
99
+ const { callTool } = useCallTool("no-input-view");
100
100
  callTool({
101
101
  onSuccess: (response) => {
102
102
  expectTypeOf(response).toHaveProperty("structuredContent");
@@ -110,16 +110,16 @@ test("callTool supports sideEffects for tools with no required inputs", () => {
110
110
  });
111
111
  test("callToolAsync returns correctly typed promise", () => {
112
112
  const { useCallTool } = generateHelpers();
113
- const { callToolAsync: searchAsync } = useCallTool("search-voyage");
113
+ const { callToolAsync: searchAsync } = useCallTool("search-trip");
114
114
  const searchPromise = searchAsync({ destination: "Spain" });
115
115
  expectTypeOf(searchPromise).resolves.toHaveProperty("structuredContent");
116
- const { callToolAsync: noInputAsync } = useCallTool("no-input-widget");
116
+ const { callToolAsync: noInputAsync } = useCallTool("no-input-view");
117
117
  const noInputPromise = noInputAsync();
118
118
  expectTypeOf(noInputPromise).resolves.toHaveProperty("structuredContent");
119
119
  });
120
120
  test("useCallTool returns correctly typed data", () => {
121
121
  const { useCallTool } = generateHelpers();
122
- const { data } = useCallTool("search-voyage");
122
+ const { data } = useCallTool("search-trip");
123
123
  if (data) {
124
124
  expectTypeOf(data.structuredContent).toExtend();
125
125
  expectTypeOf(data.structuredContent.results).toBeArray();
@@ -128,16 +128,16 @@ test("useCallTool returns correctly typed data", () => {
128
128
  });
129
129
  test("useCallTool returns correctly typed data for callback-inferred outputs", () => {
130
130
  const { useCallTool } = generateHelpers();
131
- const { data: widgetData } = useCallTool("inferred-output-widget");
132
- if (widgetData) {
133
- expectTypeOf(widgetData.structuredContent).toExtend();
131
+ const { data: viewData } = useCallTool("inferred-output-view");
132
+ if (viewData) {
133
+ expectTypeOf(viewData.structuredContent).toExtend();
134
134
  }
135
135
  const { data: toolData } = useCallTool("inferred-tool");
136
136
  if (toolData) {
137
137
  expectTypeOf(toolData.structuredContent).toExtend();
138
138
  }
139
139
  });
140
- test("generateHelpers provides autocomplete for tool names in useToolInfo (widgets + registerTool)", () => {
140
+ test("generateHelpers provides autocomplete for tool names in useToolInfo (views + registerTool)", () => {
141
141
  const { useToolInfo } = generateHelpers();
142
142
  useToolInfo();
143
143
  useToolInfo();
@@ -154,7 +154,10 @@ test("generateHelpers provides autocomplete for tool names in useToolInfo (widge
154
154
  test("useToolInfo infers input and output types", () => {
155
155
  const { useToolInfo } = generateHelpers();
156
156
  const toolInfo = useToolInfo();
157
- expectTypeOf(toolInfo.input).toExtend();
157
+ // Input is only available when not in idle state
158
+ if (!(toolInfo.status === "idle")) {
159
+ expectTypeOf(toolInfo.input).toExtend();
160
+ }
158
161
  if (toolInfo.status === "success") {
159
162
  expectTypeOf(toolInfo.output).toExtend();
160
163
  expectTypeOf(toolInfo.output.results).toBeArray();
@@ -190,7 +193,7 @@ test("ToolResponseMetadata extracts correct type when using interface declaratio
190
193
  });
191
194
  test("generateHelpers works with interface-typed server", () => {
192
195
  const { useCallTool, useToolInfo } = generateHelpers();
193
- const { data } = useCallTool("interface-widget");
196
+ const { data } = useCallTool("interface-view");
194
197
  if (data) {
195
198
  expectTypeOf(data.structuredContent.itemName).toBeString();
196
199
  expectTypeOf(data.structuredContent.quantity).toBeNumber();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-helpers.test-d.js","sourceRoot":"","sources":["../../src/web/generate-helpers.test-d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-helpers.test.js","sourceRoot":"","sources":["../../src/web/generate-helpers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;AAGzC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG,eAAe,EAAc,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG,eAAe,EAAc,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type SuperJSONResult } from "superjson";
2
2
  import type { UnknownObject } from "../types.js";
3
- export declare function filterWidgetContext<T extends UnknownObject>(state?: T | null): T | null;
4
- export declare function injectWidgetContext<T extends UnknownObject>(newState: T | null): T | null;
3
+ export declare function filterViewContext<T extends UnknownObject>(state?: T | null): T | null;
4
+ export declare function injectViewContext<T extends UnknownObject>(newState: T | null): T | null;
5
5
  export declare function serializeState(value: UnknownObject): unknown;
6
6
  export declare function deserializeState(value: SuperJSONResult): unknown;
7
7
  export declare function getInitialState<State extends UnknownObject>(defaultState?: State | (() => State)): State | null;
@@ -0,0 +1,45 @@
1
+ import superjson, {} from "superjson";
2
+ import { getAdaptor } from "../bridges/index.js";
3
+ import { VIEW_CONTEXT_KEY } from "../data-llm.js";
4
+ export function filterViewContext(state) {
5
+ if (state === null || state === undefined) {
6
+ return null;
7
+ }
8
+ const { [VIEW_CONTEXT_KEY]: _, ...filteredState } = state;
9
+ return filteredState;
10
+ }
11
+ export function injectViewContext(newState) {
12
+ if (newState === null) {
13
+ return null;
14
+ }
15
+ const currentState = getAdaptor()
16
+ .getHostContextStore("viewState")
17
+ .getSnapshot();
18
+ if (currentState !== null &&
19
+ currentState !== undefined &&
20
+ VIEW_CONTEXT_KEY in currentState) {
21
+ return {
22
+ ...newState,
23
+ [VIEW_CONTEXT_KEY]: currentState[VIEW_CONTEXT_KEY],
24
+ };
25
+ }
26
+ return newState;
27
+ }
28
+ export function serializeState(value) {
29
+ return superjson.parse(superjson.stringify(value)); // Strips functions
30
+ }
31
+ export function deserializeState(value) {
32
+ return superjson.deserialize(value);
33
+ }
34
+ export function getInitialState(defaultState) {
35
+ const viewState = getAdaptor()
36
+ .getHostContextStore("viewState")
37
+ .getSnapshot();
38
+ if (viewState !== null && viewState !== undefined) {
39
+ return filterViewContext(viewState);
40
+ }
41
+ return typeof defaultState === "function"
42
+ ? defaultState()
43
+ : (defaultState ?? null);
44
+ }
45
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/web/helpers/state.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAwB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,MAAM,UAAU,iBAAiB,CAC/B,KAAgB;IAEhB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,KAEnD,CAAC;IAEF,OAAO,aAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAkB;IAElB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,EAAE;SAC9B,mBAAmB,CAAC,WAAW,CAAC;SAChC,WAAW,EAAmD,CAAC;IAElE,IACE,YAAY,KAAK,IAAI;QACrB,YAAY,KAAK,SAAS;QAC1B,gBAAgB,IAAI,YAAY,EAChC,CAAC;QACD,OAAO;YACL,GAAG,QAAQ;YACX,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC;SAC9C,CAAC;IACT,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,OAAO,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB;AACzE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,YAAoC;IAEpC,MAAM,SAAS,GAAG,UAAU,EAAE;SAC3B,mBAAmB,CAAC,WAAW,CAAC;SAChC,WAAW,EAAkB,CAAC;IAEjC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,OAAO,YAAY,KAAK,UAAU;QACvC,CAAC,CAAC,YAAY,EAAE;QAChB,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,29 +1,29 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { WIDGET_CONTEXT_KEY } from "../data-llm.js";
3
- import { filterWidgetContext, serializeState } from "./state.js";
2
+ import { VIEW_CONTEXT_KEY } from "../data-llm.js";
3
+ import { filterViewContext, serializeState } from "./state.js";
4
4
  describe("state helpers", () => {
5
- describe("filterWidgetContext", () => {
5
+ describe("filterViewContext", () => {
6
6
  it("should return null when state is null", () => {
7
- expect(filterWidgetContext(null)).toBe(null);
7
+ expect(filterViewContext(null)).toBe(null);
8
8
  });
9
9
  it("should return null when state is undefined", () => {
10
- expect(filterWidgetContext(undefined)).toBe(null);
10
+ expect(filterViewContext(undefined)).toBe(null);
11
11
  });
12
- it("should correctly filter WIDGET_CONTEXT_KEY and preserve other properties", () => {
12
+ it("should correctly filter VIEW_CONTEXT_KEY and preserve other properties", () => {
13
13
  const stateWithContextAndOthers = {
14
14
  a: 1,
15
15
  b: "two",
16
16
  c: { nested: true },
17
- [WIDGET_CONTEXT_KEY]: "context",
17
+ [VIEW_CONTEXT_KEY]: "context",
18
18
  };
19
- const filteredWithContextAndOthers = filterWidgetContext(stateWithContextAndOthers);
19
+ const filteredWithContextAndOthers = filterViewContext(stateWithContextAndOthers);
20
20
  expect(filteredWithContextAndOthers).toEqual({
21
21
  a: 1,
22
22
  b: "two",
23
23
  c: { nested: true },
24
24
  });
25
25
  const stateNoContext = { count: 5, name: "test" };
26
- const filteredNoContext = filterWidgetContext(stateNoContext);
26
+ const filteredNoContext = filterViewContext(stateNoContext);
27
27
  expect(filteredNoContext).toEqual(stateNoContext);
28
28
  });
29
29
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../../src/web/helpers/state.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,yBAAyB,GAAG;gBAChC,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,KAAK;gBACR,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBACnB,CAAC,gBAAgB,CAAC,EAAE,SAAS;aAC9B,CAAC;YACF,MAAM,4BAA4B,GAAG,iBAAiB,CACpD,yBAAyB,CAC1B,CAAC;YACF,MAAM,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC;gBAC3C,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,KAAK;gBACR,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aACpB,CAAC,CAAC;YAEH,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAClD,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC5D,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG;gBACb,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE,IAAI;gBACP,KAAK;gBACL,IAAI;gBACJ,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;aACvB,CAAC;YACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE,IAAI;gBACP,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC/B,IAAI,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -2,10 +2,10 @@ export { type CallToolAsyncFn, type CallToolFn, type CallToolState, type SideEff
2
2
  export { useDisplayMode } from "./use-display-mode.js";
3
3
  export { useFiles } from "./use-files.js";
4
4
  export { type LayoutState, useLayout } from "./use-layout.js";
5
- export { useOpenExternal } from "./use-open-external.js";
6
- export { useOpenAiGlobal } from "./use-openai-global.js";
5
+ export { type OpenExternalFn, useOpenExternal } from "./use-open-external.js";
7
6
  export { useRequestModal } from "./use-request-modal.js";
8
7
  export { useSendFollowUpMessage } from "./use-send-follow-up-message.js";
8
+ export { useSetOpenInAppUrl } from "./use-set-open-in-app-url.js";
9
9
  export { useToolInfo } from "./use-tool-info.js";
10
10
  export { type UserState, useUser } from "./use-user.js";
11
- export { useWidgetState } from "./use-widget-state.js";
11
+ export { useViewState } from "./use-view-state.js";
@@ -3,10 +3,10 @@ export { useDisplayMode } from "./use-display-mode.js";
3
3
  export { useFiles } from "./use-files.js";
4
4
  export { useLayout } from "./use-layout.js";
5
5
  export { useOpenExternal } from "./use-open-external.js";
6
- export { useOpenAiGlobal } from "./use-openai-global.js";
7
6
  export { useRequestModal } from "./use-request-modal.js";
8
7
  export { useSendFollowUpMessage } from "./use-send-follow-up-message.js";
8
+ export { useSetOpenInAppUrl } from "./use-set-open-in-app-url.js";
9
9
  export { useToolInfo } from "./use-tool-info.js";
10
10
  export { useUser } from "./use-user.js";
11
- export { useWidgetState } from "./use-widget-state.js";
11
+ export { useViewState } from "./use-view-state.js";
12
12
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAoB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAuB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAkB,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { McpUiHostContext, McpUiToolResultNotification } from "@modelcontextprotocol/ext-apps";
2
+ export declare class MockResizeObserver {
3
+ observe(): void;
4
+ unobserve(): void;
5
+ disconnect(): void;
6
+ }
7
+ export declare const getMcpAppHostPostMessageMock: (initialContext?: McpUiHostContext) => import("vitest").Mock<(message: {
8
+ method: string;
9
+ id: number;
10
+ }) => void>;
11
+ export declare const fireToolInputNotification: (args: Record<string, unknown>) => void;
12
+ export declare const fireToolResultNotification: (params: {
13
+ content: McpUiToolResultNotification["params"]["content"];
14
+ structuredContent: Record<string, unknown>;
15
+ _meta?: Record<string, unknown>;
16
+ }) => void;
@@ -0,0 +1,64 @@
1
+ import { fireEvent } from "@testing-library/react";
2
+ import { act } from "react";
3
+ import { vi } from "vitest";
4
+ export class MockResizeObserver {
5
+ observe() { }
6
+ unobserve() { }
7
+ disconnect() { }
8
+ }
9
+ const DEFAULT_CONTEXT = {};
10
+ export const getMcpAppHostPostMessageMock = (initialContext = DEFAULT_CONTEXT) => vi.fn((message) => {
11
+ switch (message.method) {
12
+ case "ui/initialize": {
13
+ const result = {
14
+ protocolVersion: "2025-06-18",
15
+ hostInfo: { name: "test-host", version: "1.0.0" },
16
+ hostCapabilities: {},
17
+ hostContext: initialContext,
18
+ };
19
+ act(() => fireEvent(window, new MessageEvent("message", {
20
+ source: window.parent,
21
+ data: {
22
+ jsonrpc: "2.0",
23
+ id: message.id,
24
+ result,
25
+ },
26
+ })));
27
+ break;
28
+ }
29
+ case "ui/update-model-context": {
30
+ act(() => fireEvent(window, new MessageEvent("message", {
31
+ source: window.parent,
32
+ data: {
33
+ jsonrpc: "2.0",
34
+ id: message.id,
35
+ result: {},
36
+ },
37
+ })));
38
+ break;
39
+ }
40
+ }
41
+ });
42
+ export const fireToolInputNotification = (args) => {
43
+ fireEvent(window, new MessageEvent("message", {
44
+ source: window.parent,
45
+ data: {
46
+ jsonrpc: "2.0",
47
+ method: "ui/notifications/tool-input",
48
+ params: {
49
+ arguments: args,
50
+ },
51
+ },
52
+ }));
53
+ };
54
+ export const fireToolResultNotification = (params) => {
55
+ fireEvent(window, new MessageEvent("message", {
56
+ source: window.parent,
57
+ data: {
58
+ jsonrpc: "2.0",
59
+ method: "ui/notifications/tool-result",
60
+ params,
61
+ },
62
+ }));
63
+ };
64
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/web/hooks/test/utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,MAAM,OAAO,kBAAkB;IAC7B,OAAO,KAAU,CAAC;IAClB,SAAS,KAAU,CAAC;IACpB,UAAU,KAAU,CAAC;CACtB;AAED,MAAM,eAAe,GAAqB,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,iBAAmC,eAAe,EAClD,EAAE,CACF,EAAE,CAAC,EAAE,CAAC,CAAC,OAAuC,EAAE,EAAE;IAChD,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAA0B;gBACpC,eAAe,EAAE,YAAY;gBAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;gBACjD,gBAAgB,EAAE,EAAE;gBACpB,WAAW,EAAE,cAAc;aAC5B,CAAC;YACF,GAAG,CAAC,GAAG,EAAE,CACP,SAAS,CACP,MAAM,EACN,IAAI,YAAY,CAIb,SAAS,EAAE;gBACZ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,MAAM;iBACP;aACF,CAAC,CACH,CACF,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,GAAG,EAAE,CACP,SAAS,CACP,MAAM,EACN,IAAI,YAAY,CACd,SAAS,EACT;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,MAAM,EAAE,EAAE;iBACX;aACF,CACF,CACF,CACF,CAAC;YACF,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAA6B,EAAE,EAAE;IACzE,SAAS,CACP,MAAM,EACN,IAAI,YAAY,CACd,SAAS,EACT;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;aAChB;SACF;KACF,CACF,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,MAI1C,EAAE,EAAE;IACH,SAAS,CACP,MAAM,EACN,IAAI,YAAY,CACd,SAAS,EACT;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,8BAA8B;YACtC,MAAM;SACP;KACF,CACF,CACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { CallToolArgs, CallToolResponse, HasRequiredKeys } from "../types.js";
1
+ import { type CallToolArgs, type CallToolResponse } from "../bridges/index.js";
2
+ import type { HasRequiredKeys } from "../types.js";
2
3
  type CallToolIdleState = {
3
4
  status: "idle";
4
5
  isIdle: true;
@@ -1,15 +1,23 @@
1
- import { useState } from "react";
1
+ import { useRef, useState } from "react";
2
+ import { getAdaptor, } from "../bridges/index.js";
2
3
  export const useCallTool = (name) => {
3
4
  const [{ status, data, error }, setCallToolState] = useState({ status: "idle", data: undefined, error: undefined });
5
+ const callIdRef = useRef(0);
6
+ const adaptor = getAdaptor();
4
7
  const execute = async (toolArgs) => {
8
+ const callId = ++callIdRef.current;
5
9
  setCallToolState({ status: "pending", data: undefined, error: undefined });
6
10
  try {
7
- const data = await window.openai.callTool(name, toolArgs);
8
- setCallToolState({ status: "success", data, error: undefined });
11
+ const data = await adaptor.callTool(name, toolArgs);
12
+ if (callId === callIdRef.current) {
13
+ setCallToolState({ status: "success", data, error: undefined });
14
+ }
9
15
  return data;
10
16
  }
11
17
  catch (error) {
12
- setCallToolState({ status: "error", data: undefined, error });
18
+ if (callId === callIdRef.current) {
19
+ setCallToolState({ status: "error", data: undefined, error });
20
+ }
13
21
  throw error;
14
22
  }
15
23
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-call-tool.js","sourceRoot":"","sources":["../../../src/web/hooks/use-call-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-call-tool.test-d.js","sourceRoot":"","sources":["../../../src/web/hooks/use-call-tool.test-d.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ describe("useCallTool - onSuccess callback", () => {
8
8
  callTool: vi.fn(),
9
9
  };
10
10
  vi.stubGlobal("openai", OpenaiMock);
11
+ vi.stubGlobal("skybridge", { hostType: "apps-sdk" });
11
12
  });
12
13
  afterEach(() => {
13
14
  vi.unstubAllGlobals();
@@ -20,7 +21,6 @@ describe("useCallTool - onSuccess callback", () => {
20
21
  structuredContent: { result: "test" },
21
22
  isError: false,
22
23
  result: "test result",
23
- meta: {},
24
24
  };
25
25
  const error = new Error("test error");
26
26
  it("should call window.openai.callTool with correct arguments", async () => {
@@ -100,6 +100,29 @@ describe("useCallTool - onSuccess callback", () => {
100
100
  expect(onSuccess).not.toHaveBeenCalled();
101
101
  });
102
102
  });
103
+ it("should always return last call started state", async () => {
104
+ const { result } = renderHook(() => useCallTool(toolName));
105
+ const firstCallData = { ...data, result: "first call result" };
106
+ const secondCallData = { ...data, result: "second call result" };
107
+ const { promise: firstCallToolPromise, resolve: resolveFirstCallTool } = Promise.withResolvers();
108
+ const { promise: secondCallToolPromise, resolve: resolveSecondCallTool } = Promise.withResolvers();
109
+ OpenaiMock.callTool
110
+ .mockImplementationOnce(() => firstCallToolPromise)
111
+ .mockImplementationOnce(() => secondCallToolPromise);
112
+ await act(() => {
113
+ result.current.callTool(args);
114
+ result.current.callTool(args);
115
+ resolveFirstCallTool(firstCallData);
116
+ return firstCallToolPromise;
117
+ });
118
+ expect(result.current.status).toEqual("pending");
119
+ expect(result.current.data).toEqual(undefined);
120
+ resolveSecondCallTool(secondCallData);
121
+ await waitFor(() => {
122
+ expect(result.current.status).toEqual("success");
123
+ expect(result.current.data).toEqual(secondCallData);
124
+ });
125
+ });
103
126
  });
104
127
  describe("useCallTool - TypeScript typing", () => {
105
128
  let OpenaiMock;
@@ -108,6 +131,7 @@ describe("useCallTool - TypeScript typing", () => {
108
131
  callTool: vi.fn(),
109
132
  };
110
133
  vi.stubGlobal("openai", OpenaiMock);
134
+ vi.stubGlobal("skybridge", { hostType: "apps-sdk" });
111
135
  });
112
136
  afterEach(() => {
113
137
  vi.unstubAllGlobals();
@@ -153,6 +177,7 @@ describe("useCallTool - TypeScript typing", () => {
153
177
  structuredContent: { data: "test data" },
154
178
  isError: false,
155
179
  result: "data",
180
+ meta: {},
156
181
  };
157
182
  OpenaiMock.callTool.mockResolvedValueOnce(mockResponse);
158
183
  const returnedValue = await act(async () => {