skybridge 0.0.0-dev.8f3d97e → 0.0.0-dev.8f4e43b

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 (357) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -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/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 +6 -0
  20. package/dist/cli/use-nodemon.js +69 -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 +10 -0
  29. package/dist/commands/dev.js +42 -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/const.d.ts +1 -0
  49. package/dist/server/const.js +2 -0
  50. package/dist/server/const.js.map +1 -0
  51. package/dist/server/express.d.ts +9 -0
  52. package/dist/server/express.js +72 -0
  53. package/dist/server/express.js.map +1 -0
  54. package/dist/server/express.test.js +74 -0
  55. package/dist/server/express.test.js.map +1 -0
  56. package/dist/{src/server → server}/index.d.ts +0 -1
  57. package/dist/{src/server → server}/index.js +0 -1
  58. package/dist/server/index.js.map +1 -0
  59. package/dist/server/inferUtilityTypes.js.map +1 -0
  60. package/dist/{src/server → server}/server.d.ts +32 -1
  61. package/dist/server/server.js +206 -0
  62. package/dist/server/server.js.map +1 -0
  63. package/dist/{src/server → server}/templateHelper.d.ts +1 -0
  64. package/dist/server/templateHelper.js.map +1 -0
  65. package/dist/server/templates/development.hbs +67 -0
  66. package/dist/{src/server → server}/templates/production.hbs +1 -2
  67. package/dist/{src/server → server}/widgetsDevServer.d.ts +2 -2
  68. package/dist/server/widgetsDevServer.js +63 -0
  69. package/dist/server/widgetsDevServer.js.map +1 -0
  70. package/dist/test/utils.js.map +1 -0
  71. package/dist/{src/test → test}/widget.test.js +129 -14
  72. package/dist/test/widget.test.js.map +1 -0
  73. package/dist/web/bridges/apps-sdk/adaptor.d.ts +22 -0
  74. package/dist/web/bridges/apps-sdk/adaptor.js +71 -0
  75. package/dist/web/bridges/apps-sdk/adaptor.js.map +1 -0
  76. package/dist/web/bridges/apps-sdk/bridge.d.ts +10 -0
  77. package/dist/{src/web/bridges/apps-sdk-bridge.js → web/bridges/apps-sdk/bridge.js} +2 -2
  78. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -0
  79. package/dist/web/bridges/apps-sdk/index.d.ts +5 -0
  80. package/dist/web/bridges/apps-sdk/index.js +5 -0
  81. package/dist/web/bridges/apps-sdk/index.js.map +1 -0
  82. package/dist/{src/web → web/bridges/apps-sdk}/types.d.ts +28 -58
  83. package/dist/{src/web → web/bridges/apps-sdk}/types.js +0 -1
  84. package/dist/web/bridges/apps-sdk/types.js.map +1 -0
  85. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +2 -0
  86. package/dist/{src/web/bridges/hooks/use-apps-sdk-bridge.js → web/bridges/apps-sdk/use-apps-sdk-context.js} +3 -3
  87. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -0
  88. package/dist/web/bridges/get-adaptor.d.ts +2 -0
  89. package/dist/web/bridges/get-adaptor.js +8 -0
  90. package/dist/web/bridges/get-adaptor.js.map +1 -0
  91. package/dist/web/bridges/index.d.ts +5 -0
  92. package/dist/web/bridges/index.js +6 -0
  93. package/dist/web/bridges/index.js.map +1 -0
  94. package/dist/web/bridges/mcp-app/adaptor.d.ts +36 -0
  95. package/dist/web/bridges/mcp-app/adaptor.js +193 -0
  96. package/dist/web/bridges/mcp-app/adaptor.js.map +1 -0
  97. package/dist/web/bridges/mcp-app/bridge.d.ts +43 -0
  98. package/dist/web/bridges/mcp-app/bridge.js +260 -0
  99. package/dist/web/bridges/mcp-app/bridge.js.map +1 -0
  100. package/dist/web/bridges/mcp-app/index.d.ts +4 -0
  101. package/dist/web/bridges/mcp-app/index.js +4 -0
  102. package/dist/web/bridges/mcp-app/index.js.map +1 -0
  103. package/dist/web/bridges/mcp-app/types.d.ts +8 -0
  104. package/dist/web/bridges/mcp-app/types.js.map +1 -0
  105. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +5 -0
  106. package/dist/{src/web/bridges/hooks/use-mcp-app-bridge.js → web/bridges/mcp-app/use-mcp-app-context.js} +3 -3
  107. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -0
  108. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +66 -0
  109. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -0
  110. package/dist/web/bridges/types.d.ts +101 -0
  111. package/dist/web/bridges/types.js +2 -0
  112. package/dist/{src/web → web}/bridges/types.js.map +1 -1
  113. package/dist/web/bridges/use-host-context.d.ts +2 -0
  114. package/dist/web/bridges/use-host-context.js +8 -0
  115. package/dist/web/bridges/use-host-context.js.map +1 -0
  116. package/dist/web/components/modal-provider.d.ts +4 -0
  117. package/dist/web/components/modal-provider.js +47 -0
  118. package/dist/web/components/modal-provider.js.map +1 -0
  119. package/dist/{src/web → web}/create-store.js +6 -7
  120. package/dist/web/create-store.js.map +1 -0
  121. package/dist/web/create-store.test.js +126 -0
  122. package/dist/web/create-store.test.js.map +1 -0
  123. package/dist/{src/web → web}/data-llm.js +5 -3
  124. package/dist/web/data-llm.js.map +1 -0
  125. package/dist/web/data-llm.test.js +141 -0
  126. package/dist/web/data-llm.test.js.map +1 -0
  127. package/dist/{src/web → web}/generate-helpers.d.ts +3 -2
  128. package/dist/{src/web → web}/generate-helpers.js +1 -1
  129. package/dist/web/generate-helpers.js.map +1 -0
  130. package/dist/web/generate-helpers.test-d.js.map +1 -0
  131. package/dist/web/generate-helpers.test.js.map +1 -0
  132. package/dist/{src/web → web}/helpers/state.js +13 -8
  133. package/dist/web/helpers/state.js.map +1 -0
  134. package/dist/web/helpers/state.test.js.map +1 -0
  135. package/dist/{src/web → web}/hooks/index.d.ts +2 -2
  136. package/dist/{src/web → web}/hooks/index.js +1 -1
  137. package/dist/web/hooks/index.js.map +1 -0
  138. package/dist/{src/web → web}/hooks/test/utils.d.ts +8 -2
  139. package/dist/web/hooks/test/utils.js +60 -0
  140. package/dist/web/hooks/test/utils.js.map +1 -0
  141. package/dist/{src/web → web}/hooks/use-call-tool.d.ts +2 -1
  142. package/dist/{src/web → web}/hooks/use-call-tool.js +2 -2
  143. package/dist/web/hooks/use-call-tool.js.map +1 -0
  144. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -0
  145. package/dist/{src/web → web}/hooks/use-call-tool.test.js +0 -1
  146. package/dist/web/hooks/use-call-tool.test.js.map +1 -0
  147. package/dist/web/hooks/use-display-mode.js +9 -0
  148. package/dist/web/hooks/use-display-mode.js.map +1 -0
  149. package/dist/web/hooks/use-display-mode.test.js.map +1 -0
  150. package/dist/web/hooks/use-files.d.ts +6 -0
  151. package/dist/web/hooks/use-files.js +9 -0
  152. package/dist/web/hooks/use-files.js.map +1 -0
  153. package/dist/{src/web → web}/hooks/use-files.test.js +10 -5
  154. package/dist/web/hooks/use-files.test.js.map +1 -0
  155. package/dist/{src/web → web}/hooks/use-layout.d.ts +2 -2
  156. package/dist/{src/web → web}/hooks/use-layout.js +4 -4
  157. package/dist/web/hooks/use-layout.js.map +1 -0
  158. package/dist/{src/web → web}/hooks/use-layout.test.js +6 -5
  159. package/dist/web/hooks/use-layout.test.js.map +1 -0
  160. package/dist/web/hooks/use-open-external.d.ts +3 -0
  161. package/dist/web/hooks/use-open-external.js +8 -0
  162. package/dist/web/hooks/use-open-external.js.map +1 -0
  163. package/dist/{src/web → web}/hooks/use-open-external.test.js +12 -2
  164. package/dist/web/hooks/use-open-external.test.js.map +1 -0
  165. package/dist/{src/web → web}/hooks/use-request-modal.d.ts +2 -2
  166. package/dist/web/hooks/use-request-modal.js +16 -0
  167. package/dist/web/hooks/use-request-modal.js.map +1 -0
  168. package/dist/web/hooks/use-request-modal.test.js.map +1 -0
  169. package/dist/{src/web → web}/hooks/use-send-follow-up-message.js +2 -2
  170. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -0
  171. package/dist/web/hooks/use-set-open-in-app-url.d.ts +1 -0
  172. package/dist/web/hooks/use-set-open-in-app-url.js +8 -0
  173. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -0
  174. package/dist/web/hooks/use-set-open-in-app-url.test.js +43 -0
  175. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -0
  176. package/dist/{src/web → web}/hooks/use-tool-info.js +4 -4
  177. package/dist/web/hooks/use-tool-info.js.map +1 -0
  178. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -0
  179. package/dist/{src/web → web}/hooks/use-tool-info.test.js +4 -4
  180. package/dist/web/hooks/use-tool-info.test.js.map +1 -0
  181. package/dist/{src/web → web}/hooks/use-user.d.ts +1 -1
  182. package/dist/{src/web → web}/hooks/use-user.js +3 -3
  183. package/dist/web/hooks/use-user.js.map +1 -0
  184. package/dist/{src/web → web}/hooks/use-user.test.js +4 -3
  185. package/dist/web/hooks/use-user.test.js.map +1 -0
  186. package/dist/{src/web → web}/hooks/use-widget-state.js +10 -10
  187. package/dist/web/hooks/use-widget-state.js.map +1 -0
  188. package/dist/web/hooks/use-widget-state.test.d.ts +1 -0
  189. package/dist/{src/web → web}/hooks/use-widget-state.test.js +7 -6
  190. package/dist/web/hooks/use-widget-state.test.js.map +1 -0
  191. package/dist/web/index.js.map +1 -0
  192. package/dist/{src/web → web}/mount-widget.js +9 -1
  193. package/dist/web/mount-widget.js.map +1 -0
  194. package/dist/web/plugin/data-llm.test.d.ts +1 -0
  195. package/dist/web/plugin/data-llm.test.js.map +1 -0
  196. package/dist/{src/web → web}/plugin/plugin.js +24 -9
  197. package/dist/web/plugin/plugin.js.map +1 -0
  198. package/dist/web/plugin/transform-data-llm.js.map +1 -0
  199. package/dist/web/plugin/transform-data-llm.test.d.ts +1 -0
  200. package/dist/web/plugin/transform-data-llm.test.js.map +1 -0
  201. package/dist/web/plugin/validate-widget.d.ts +5 -0
  202. package/dist/web/plugin/validate-widget.js +27 -0
  203. package/dist/web/plugin/validate-widget.js.map +1 -0
  204. package/dist/web/plugin/validate-widget.test.d.ts +1 -0
  205. package/dist/web/plugin/validate-widget.test.js +42 -0
  206. package/dist/web/plugin/validate-widget.test.js.map +1 -0
  207. package/dist/{src/web → web}/proxy.js +0 -1
  208. package/dist/web/proxy.js.map +1 -0
  209. package/dist/web/types.d.ts +16 -0
  210. package/dist/web/types.js +2 -0
  211. package/dist/web/types.js.map +1 -0
  212. package/package.json +61 -37
  213. package/tsconfig.base.json +28 -0
  214. package/dist/src/server/devtoolsStaticServer.d.ts +0 -15
  215. package/dist/src/server/devtoolsStaticServer.js +0 -38
  216. package/dist/src/server/devtoolsStaticServer.js.map +0 -1
  217. package/dist/src/server/index.js.map +0 -1
  218. package/dist/src/server/inferUtilityTypes.js.map +0 -1
  219. package/dist/src/server/server.js +0 -82
  220. package/dist/src/server/server.js.map +0 -1
  221. package/dist/src/server/templateHelper.js.map +0 -1
  222. package/dist/src/server/templates/development.hbs +0 -13
  223. package/dist/src/server/widgetsDevServer.js +0 -39
  224. package/dist/src/server/widgetsDevServer.js.map +0 -1
  225. package/dist/src/test/utils.js.map +0 -1
  226. package/dist/src/test/widget.test.js.map +0 -1
  227. package/dist/src/web/bridges/adaptors/apps-sdk-adaptor.d.ts +0 -13
  228. package/dist/src/web/bridges/adaptors/apps-sdk-adaptor.js +0 -33
  229. package/dist/src/web/bridges/adaptors/apps-sdk-adaptor.js.map +0 -1
  230. package/dist/src/web/bridges/adaptors/mcp-app-adaptor.d.ts +0 -16
  231. package/dist/src/web/bridges/adaptors/mcp-app-adaptor.js +0 -115
  232. package/dist/src/web/bridges/adaptors/mcp-app-adaptor.js.map +0 -1
  233. package/dist/src/web/bridges/apps-sdk-bridge.d.ts +0 -10
  234. package/dist/src/web/bridges/apps-sdk-bridge.js.map +0 -1
  235. package/dist/src/web/bridges/hooks/use-adaptor.d.ts +0 -2
  236. package/dist/src/web/bridges/hooks/use-adaptor.js +0 -8
  237. package/dist/src/web/bridges/hooks/use-adaptor.js.map +0 -1
  238. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.d.ts +0 -2
  239. package/dist/src/web/bridges/hooks/use-apps-sdk-bridge.js.map +0 -1
  240. package/dist/src/web/bridges/hooks/use-bridge.d.ts +0 -2
  241. package/dist/src/web/bridges/hooks/use-bridge.js +0 -8
  242. package/dist/src/web/bridges/hooks/use-bridge.js.map +0 -1
  243. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.d.ts +0 -5
  244. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.js.map +0 -1
  245. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js +0 -41
  246. package/dist/src/web/bridges/hooks/use-mcp-app-bridge.test.js.map +0 -1
  247. package/dist/src/web/bridges/index.d.ts +0 -4
  248. package/dist/src/web/bridges/index.js +0 -5
  249. package/dist/src/web/bridges/index.js.map +0 -1
  250. package/dist/src/web/bridges/mcp-app-bridge.d.ts +0 -38
  251. package/dist/src/web/bridges/mcp-app-bridge.js +0 -162
  252. package/dist/src/web/bridges/mcp-app-bridge.js.map +0 -1
  253. package/dist/src/web/bridges/types.d.ts +0 -57
  254. package/dist/src/web/create-store.js.map +0 -1
  255. package/dist/src/web/create-store.test.js +0 -70
  256. package/dist/src/web/create-store.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/helpers/state.js.map +0 -1
  264. package/dist/src/web/helpers/state.test.js.map +0 -1
  265. package/dist/src/web/hooks/index.js.map +0 -1
  266. package/dist/src/web/hooks/test/utils.js +0 -40
  267. package/dist/src/web/hooks/test/utils.js.map +0 -1
  268. package/dist/src/web/hooks/use-call-tool.js.map +0 -1
  269. package/dist/src/web/hooks/use-call-tool.test-d.js.map +0 -1
  270. package/dist/src/web/hooks/use-call-tool.test.js.map +0 -1
  271. package/dist/src/web/hooks/use-display-mode.js +0 -10
  272. package/dist/src/web/hooks/use-display-mode.js.map +0 -1
  273. package/dist/src/web/hooks/use-display-mode.test.js.map +0 -1
  274. package/dist/src/web/hooks/use-files.d.ts +0 -10
  275. package/dist/src/web/hooks/use-files.js +0 -7
  276. package/dist/src/web/hooks/use-files.js.map +0 -1
  277. package/dist/src/web/hooks/use-files.test.js.map +0 -1
  278. package/dist/src/web/hooks/use-layout.js.map +0 -1
  279. package/dist/src/web/hooks/use-layout.test.js.map +0 -1
  280. package/dist/src/web/hooks/use-open-external.d.ts +0 -1
  281. package/dist/src/web/hooks/use-open-external.js +0 -8
  282. package/dist/src/web/hooks/use-open-external.js.map +0 -1
  283. package/dist/src/web/hooks/use-open-external.test.js.map +0 -1
  284. package/dist/src/web/hooks/use-openai-global.d.ts +0 -3
  285. package/dist/src/web/hooks/use-openai-global.js +0 -6
  286. package/dist/src/web/hooks/use-openai-global.js.map +0 -1
  287. package/dist/src/web/hooks/use-request-modal.js +0 -14
  288. package/dist/src/web/hooks/use-request-modal.js.map +0 -1
  289. package/dist/src/web/hooks/use-request-modal.test.js.map +0 -1
  290. package/dist/src/web/hooks/use-send-follow-up-message.js.map +0 -1
  291. package/dist/src/web/hooks/use-tool-info.js.map +0 -1
  292. package/dist/src/web/hooks/use-tool-info.test-d.js.map +0 -1
  293. package/dist/src/web/hooks/use-tool-info.test.js.map +0 -1
  294. package/dist/src/web/hooks/use-user.js.map +0 -1
  295. package/dist/src/web/hooks/use-user.test.js.map +0 -1
  296. package/dist/src/web/hooks/use-widget-state.js.map +0 -1
  297. package/dist/src/web/hooks/use-widget-state.test.js.map +0 -1
  298. package/dist/src/web/index.js.map +0 -1
  299. package/dist/src/web/mount-widget.js.map +0 -1
  300. package/dist/src/web/plugin/data-llm.test.js.map +0 -1
  301. package/dist/src/web/plugin/plugin.js.map +0 -1
  302. package/dist/src/web/plugin/transform-data-llm.js.map +0 -1
  303. package/dist/src/web/plugin/transform-data-llm.test.js.map +0 -1
  304. package/dist/src/web/proxy.js.map +0 -1
  305. package/dist/src/web/types.js.map +0 -1
  306. package/dist/vitest.config.d.ts +0 -2
  307. package/dist/vitest.config.js +0 -8
  308. package/dist/vitest.config.js.map +0 -1
  309. /package/dist/{src/test/widget.test.d.ts → server/asset-base-url-transform-plugin.test.d.ts} +0 -0
  310. /package/dist/{src/web/bridges/hooks/use-mcp-app-bridge.test.d.ts → server/express.test.d.ts} +0 -0
  311. /package/dist/{src/server → server}/inferUtilityTypes.d.ts +0 -0
  312. /package/dist/{src/server → server}/inferUtilityTypes.js +0 -0
  313. /package/dist/{src/server → server}/templateHelper.js +0 -0
  314. /package/dist/{src/test → test}/utils.d.ts +0 -0
  315. /package/dist/{src/test → test}/utils.js +0 -0
  316. /package/dist/{src/web/create-store.test.d.ts → test/widget.test.d.ts} +0 -0
  317. /package/dist/{src/web/bridges → web/bridges/mcp-app}/types.js +0 -0
  318. /package/dist/{src/web/data-llm.test.d.ts → web/bridges/mcp-app/use-mcp-app-context.test.d.ts} +0 -0
  319. /package/dist/{src/web → web}/create-store.d.ts +0 -0
  320. /package/dist/{src/web/generate-helpers.test-d.d.ts → web/create-store.test.d.ts} +0 -0
  321. /package/dist/{src/web → web}/data-llm.d.ts +0 -0
  322. /package/dist/{src/web/plugin → web}/data-llm.test.d.ts +0 -0
  323. /package/dist/{src/web/generate-helpers.test.d.ts → web/generate-helpers.test-d.d.ts} +0 -0
  324. /package/dist/{src/web → web}/generate-helpers.test-d.js +0 -0
  325. /package/dist/{src/web/helpers/state.test.d.ts → web/generate-helpers.test.d.ts} +0 -0
  326. /package/dist/{src/web → web}/generate-helpers.test.js +0 -0
  327. /package/dist/{src/web → web}/helpers/state.d.ts +0 -0
  328. /package/dist/{src/web/hooks/use-call-tool.test-d.d.ts → web/helpers/state.test.d.ts} +0 -0
  329. /package/dist/{src/web → web}/helpers/state.test.js +0 -0
  330. /package/dist/{src/web/hooks/use-call-tool.test.d.ts → web/hooks/use-call-tool.test-d.d.ts} +0 -0
  331. /package/dist/{src/web → web}/hooks/use-call-tool.test-d.js +0 -0
  332. /package/dist/{src/web/hooks/use-display-mode.test.d.ts → web/hooks/use-call-tool.test.d.ts} +0 -0
  333. /package/dist/{src/web → web}/hooks/use-display-mode.d.ts +0 -0
  334. /package/dist/{src/web/hooks/use-files.test.d.ts → web/hooks/use-display-mode.test.d.ts} +0 -0
  335. /package/dist/{src/web → web}/hooks/use-display-mode.test.js +0 -0
  336. /package/dist/{src/web/hooks/use-layout.test.d.ts → web/hooks/use-files.test.d.ts} +0 -0
  337. /package/dist/{src/web/hooks/use-open-external.test.d.ts → web/hooks/use-layout.test.d.ts} +0 -0
  338. /package/dist/{src/web/hooks/use-request-modal.test.d.ts → web/hooks/use-open-external.test.d.ts} +0 -0
  339. /package/dist/{src/web/hooks/use-tool-info.test-d.d.ts → web/hooks/use-request-modal.test.d.ts} +0 -0
  340. /package/dist/{src/web → web}/hooks/use-request-modal.test.js +0 -0
  341. /package/dist/{src/web → web}/hooks/use-send-follow-up-message.d.ts +0 -0
  342. /package/dist/{src/web/hooks/use-tool-info.test.d.ts → web/hooks/use-set-open-in-app-url.test.d.ts} +0 -0
  343. /package/dist/{src/web → web}/hooks/use-tool-info.d.ts +0 -0
  344. /package/dist/{src/web/hooks/use-user.test.d.ts → web/hooks/use-tool-info.test-d.d.ts} +0 -0
  345. /package/dist/{src/web → web}/hooks/use-tool-info.test-d.js +0 -0
  346. /package/dist/{src/web/hooks/use-widget-state.test.d.ts → web/hooks/use-tool-info.test.d.ts} +0 -0
  347. /package/dist/{src/web/plugin/transform-data-llm.test.d.ts → web/hooks/use-user.test.d.ts} +0 -0
  348. /package/dist/{src/web → web}/hooks/use-widget-state.d.ts +0 -0
  349. /package/dist/{src/web → web}/index.d.ts +0 -0
  350. /package/dist/{src/web → web}/index.js +0 -0
  351. /package/dist/{src/web → web}/mount-widget.d.ts +0 -0
  352. /package/dist/{src/web → web}/plugin/data-llm.test.js +0 -0
  353. /package/dist/{src/web → web}/plugin/plugin.d.ts +0 -0
  354. /package/dist/{src/web → web}/plugin/transform-data-llm.d.ts +0 -0
  355. /package/dist/{src/web → web}/plugin/transform-data-llm.js +0 -0
  356. /package/dist/{src/web → web}/plugin/transform-data-llm.test.js +0 -0
  357. /package/dist/{src/web → web}/proxy.d.ts +0 -0
@@ -5,15 +5,12 @@ const mockManifest = {
5
5
  "src/widgets/folder-widget/index.tsx": { file: "folder-widget.js" },
6
6
  "style.css": { file: "style.css" },
7
7
  };
8
- vi.mock("node:fs", async () => {
9
- const actual = await vi.importActual("node:fs");
8
+ const actual = vi.hoisted(() => require("node:fs"));
9
+ vi.mock("node:fs", () => {
10
10
  const readFileSyncImpl = (path, ...args) => {
11
11
  if (typeof path === "string" && path.includes("manifest.json")) {
12
12
  return JSON.stringify(mockManifest);
13
13
  }
14
- // Type assertion needed because readFileSync has overloads with different parameter types
15
- // Using @ts-expect-error because the overloads are complex and we're forwarding args
16
- // @ts-expect-error - readFileSync overloads require complex type handling
17
14
  return actual.readFileSync(path, ...args);
18
15
  };
19
16
  const readFileSync = vi.fn(readFileSyncImpl);
@@ -56,11 +53,19 @@ describe("McpServer.registerWidget", () => {
56
53
  uri: "ui://widgets/apps-sdk/my-widget.html",
57
54
  mimeType: "text/html+skybridge",
58
55
  text: expect.stringContaining('<div id="root"></div>'),
56
+ _meta: {
57
+ "openai/widgetCSP": {
58
+ resource_domains: [serverUrl],
59
+ connect_domains: [serverUrl, "ws://localhost:24678"],
60
+ },
61
+ "openai/widgetDomain": serverUrl,
62
+ "openai/widgetDescription": "Test widget",
63
+ },
59
64
  },
60
65
  ],
61
66
  });
62
67
  // Check development-specific content
63
- expect(result.contents[0]?.text).toContain(`${serverUrl}/@react-refresh`);
68
+ expect(result.contents[0]?.text).toContain(`${serverUrl}/assets/@react-refresh`);
64
69
  expect(result.contents[0]?.text).toContain(`${serverUrl}/@vite/client`);
65
70
  expect(result.contents[0]?.text).toContain(`${serverUrl}/src/widgets/my-widget`);
66
71
  expect(result.contents[0]?.text).not.toContain(`${serverUrl}/src/widgets/my-widget.tsx`);
@@ -75,8 +80,9 @@ describe("McpServer.registerWidget", () => {
75
80
  const appsSdkResourceCallback = mockRegisterResource.mock
76
81
  .calls[0]?.[3];
77
82
  expect(appsSdkResourceCallback).toBeDefined();
78
- const serverUrl = "https://myapp.com";
79
- const mockExtra = createMockExtra(serverUrl);
83
+ const host = "myapp.com";
84
+ const serverUrl = `https://${host}`;
85
+ const mockExtra = createMockExtra(host);
80
86
  const result = await appsSdkResourceCallback(new URL("ui://widgets/apps-sdk/my-widget.html"), mockExtra);
81
87
  expect(result).toEqual({
82
88
  contents: [
@@ -84,11 +90,19 @@ describe("McpServer.registerWidget", () => {
84
90
  uri: "ui://widgets/apps-sdk/my-widget.html",
85
91
  mimeType: "text/html+skybridge",
86
92
  text: expect.stringContaining('<div id="root"></div>'),
93
+ _meta: {
94
+ "openai/widgetCSP": {
95
+ resource_domains: [serverUrl],
96
+ connect_domains: [serverUrl],
97
+ },
98
+ "openai/widgetDomain": serverUrl,
99
+ "openai/widgetDescription": "Test widget",
100
+ },
87
101
  },
88
102
  ],
89
103
  });
90
104
  // Check production-specific content
91
- expect(result.contents[0]?.text).not.toContain(`${serverUrl}@react-refresh`);
105
+ expect(result.contents[0]?.text).not.toContain(`${serverUrl}/assets/@react-refresh`);
92
106
  expect(result.contents[0]?.text).not.toContain(`${serverUrl}@vite/client`);
93
107
  expect(result.contents[0]?.text).toContain(`${serverUrl}/assets/my-widget.js`);
94
108
  expect(result.contents[0]?.text).toContain(`${serverUrl}/assets/style.css`);
@@ -102,31 +116,45 @@ describe("McpServer.registerWidget", () => {
102
116
  const appsSdkResourceCallback = mockRegisterResource.mock
103
117
  .calls[0]?.[3];
104
118
  expect(appsSdkResourceCallback).toBeDefined();
105
- const serverUrl = "https://myapp.com";
106
- const mockExtra = createMockExtra(serverUrl);
119
+ const host = "myapp.com";
120
+ const serverUrl = `https://${host}`;
121
+ const mockExtra = createMockExtra(host);
107
122
  const result = await appsSdkResourceCallback(new URL("ui://widgets/apps-sdk/folder-widget.html"), mockExtra);
108
123
  // Should resolve to folder-widget.js from the manifest entry "src/widgets/folder-widget/index.tsx"
109
124
  expect(result.contents[0]?.text).toContain(`${serverUrl}/assets/folder-widget.js`);
110
125
  });
111
126
  it("should register resources with correct hostType for both apps-sdk and ext-apps formats", async () => {
112
127
  const mockToolCallback = vi.fn();
113
- const mockRegisterResourceConfig = { description: "Test widget" };
128
+ const mockRegisterResourceConfig = {
129
+ description: "Test widget",
130
+ _meta: { "openai/widgetPrefersBorder": true },
131
+ };
114
132
  const mockToolConfig = { description: "Test tool" };
115
133
  server.registerWidget("my-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
116
134
  expect(mockRegisterResource).toHaveBeenCalledTimes(2);
117
135
  const appsSdkCallback = mockRegisterResource.mock
118
136
  .calls[0]?.[3];
119
137
  const appsSdkResult = await appsSdkCallback(new URL("ui://widgets/apps-sdk/my-widget.html"), createMockExtra("__not_used__"));
138
+ const serverUrl = "http://localhost:3000";
120
139
  expect(appsSdkResult).toEqual({
121
140
  contents: [
122
141
  {
123
142
  uri: "ui://widgets/apps-sdk/my-widget.html",
124
143
  mimeType: "text/html+skybridge",
125
144
  text: expect.stringContaining('<div id="root"></div>'),
145
+ _meta: {
146
+ "openai/widgetCSP": {
147
+ resource_domains: [serverUrl],
148
+ connect_domains: [serverUrl, "ws://localhost:24678"],
149
+ },
150
+ "openai/widgetDomain": serverUrl,
151
+ "openai/widgetDescription": "Test widget",
152
+ "openai/widgetPrefersBorder": true,
153
+ },
126
154
  },
127
155
  ],
128
156
  });
129
- expect(appsSdkResult.contents[0]?.text).toContain('window.skybridge = { hostType: "apps-sdk" }');
157
+ expect(appsSdkResult.contents[0]?.text).toContain('window.skybridge = { hostType: "apps-sdk", serverUrl: "http://localhost:3000" };');
130
158
  const extAppsResourceCallback = mockRegisterResource.mock
131
159
  .calls[1]?.[3];
132
160
  expect(extAppsResourceCallback).toBeDefined();
@@ -137,10 +165,97 @@ describe("McpServer.registerWidget", () => {
137
165
  uri: "ui://widgets/ext-apps/my-widget.html",
138
166
  mimeType: "text/html;profile=mcp-app",
139
167
  text: expect.stringContaining('<div id="root"></div>'),
168
+ _meta: {
169
+ ui: {
170
+ csp: {
171
+ resourceDomains: [serverUrl],
172
+ connectDomains: [serverUrl, "ws://localhost:24678"],
173
+ },
174
+ domain: serverUrl,
175
+ },
176
+ },
177
+ },
178
+ ],
179
+ });
180
+ expect(extAppsResult.contents[0]?.text).toContain('window.skybridge = { hostType: "mcp-app", serverUrl: "http://localhost:3000" };');
181
+ });
182
+ it("should register tool with ui.resourceUri metadata (not deprecated ui/resourceUri)", async () => {
183
+ const mockToolCallback = vi.fn();
184
+ const mockRegisterResourceConfig = { description: "Test widget" };
185
+ const mockToolConfig = { description: "Test tool" };
186
+ server.registerWidget("my-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
187
+ expect(mockRegisterTool).toHaveBeenCalledTimes(1);
188
+ const toolCallArgs = mockRegisterTool.mock.calls[0];
189
+ const toolConfig = toolCallArgs?.[1];
190
+ expect(toolConfig._meta).toHaveProperty("ui");
191
+ expect(toolConfig._meta?.ui).toEqual({
192
+ resourceUri: "ui://widgets/ext-apps/my-widget.html",
193
+ });
194
+ });
195
+ it("should apply meta overrides in correct priority: defaults < ui.* < direct openai/* keys", async () => {
196
+ const mockToolCallback = vi.fn();
197
+ const mockRegisterResourceConfig = {
198
+ description: "Test widget",
199
+ _meta: {
200
+ // ui.csp overrides (middle priority)
201
+ ui: {
202
+ csp: {
203
+ resourceDomains: ["https://from-ui-csp.com"],
204
+ connectDomains: ["https://from-ui-csp.com"],
205
+ },
206
+ domain: "https://from-ui-domain.com",
207
+ prefersBorder: false,
140
208
  },
209
+ // Direct openai/* keys (highest priority) - should override ui.*
210
+ "openai/widgetDomain": "https://direct-override.com",
211
+ "openai/widgetPrefersBorder": true,
212
+ },
213
+ };
214
+ const mockToolConfig = { description: "Test tool" };
215
+ server.registerWidget("override-test", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
216
+ const appsSdkCallback = mockRegisterResource.mock
217
+ .calls[0]?.[3];
218
+ const serverUrl = "http://localhost:3000";
219
+ const result = await appsSdkCallback(new URL("ui://widgets/apps-sdk/override-test.html"), createMockExtra("__not_used__"));
220
+ const meta = result.contents[0]?._meta;
221
+ // CSP arrays are merged with union - all unique domains from defaults and user config are preserved
222
+ expect(meta["openai/widgetCSP"]).toEqual({
223
+ resource_domains: [serverUrl, "https://from-ui-csp.com"],
224
+ connect_domains: [
225
+ serverUrl,
226
+ "ws://localhost:24678",
227
+ "https://from-ui-csp.com",
141
228
  ],
229
+ frame_domains: undefined,
230
+ redirect_domains: undefined,
142
231
  });
143
- expect(extAppsResult.contents[0]?.text).toContain('window.skybridge = { hostType: "mcp-app" }');
232
+ // Domain should be overridden by direct openai/* key (highest priority)
233
+ expect(meta["openai/widgetDomain"]).toBe("https://direct-override.com");
234
+ // PrefersBorder should be overridden by direct openai/* key (highest priority)
235
+ expect(meta["openai/widgetPrefersBorder"]).toBe(true);
236
+ // Description should be from defaults (toolConfig.description)
237
+ expect(meta["openai/widgetDescription"]).toBe("Test widget");
238
+ });
239
+ it("should register tool with ui.resourceUri metadata only", async () => {
240
+ const mockToolCallback = vi.fn();
241
+ server.registerWidget("my-widget", { description: "Test widget", hosts: ["mcp-app"] }, { description: "Test tool" }, mockToolCallback);
242
+ expect(mockRegisterTool).toHaveBeenCalledTimes(1);
243
+ const toolCallArgs = mockRegisterTool.mock.calls[0];
244
+ const toolConfig = toolCallArgs?.[1];
245
+ expect(toolConfig._meta).toHaveProperty("ui");
246
+ expect(toolConfig._meta?.ui).toEqual({
247
+ resourceUri: "ui://widgets/ext-apps/my-widget.html",
248
+ });
249
+ expect(toolConfig._meta?.["openai/outputTemplate"]).to.be.undefined;
250
+ });
251
+ it("should register tool with uopenai/outputTemplate metadata only", async () => {
252
+ const mockToolCallback = vi.fn();
253
+ server.registerWidget("my-widget", { description: "Test widget", hosts: ["apps-sdk"] }, { description: "Test tool" }, mockToolCallback);
254
+ expect(mockRegisterTool).toHaveBeenCalledTimes(1);
255
+ const toolCallArgs = mockRegisterTool.mock.calls[0];
256
+ const toolConfig = toolCallArgs?.[1];
257
+ expect(toolConfig._meta).not.toHaveProperty("ui");
258
+ expect(toolConfig._meta?.["openai/outputTemplate"]).to.eq("ui://widgets/apps-sdk/my-widget.html");
144
259
  });
145
260
  });
146
261
  //# sourceMappingURL=widget.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.test.js","sourceRoot":"","sources":["../../src/test/widget.test.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EAEF,EAAE,GACH,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,MAAM,YAAY,GAAG;IACnB,2BAA2B,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IACrD,qCAAqC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACnE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;CACnC,CAAC;AAEF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAEpD,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;IACtB,MAAM,gBAAgB,GAAG,CACvB,IAA+C,EAC/C,GAAG,IAAe,EACsB,EAAE;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAEjC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAA+B,CAAC;IAE3E,OAAO;QACL,YAAY;QACZ,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,MAAiB,CAAC;IACtB,IAAI,oBAAiE,CAAC;IACtE,IAAI,gBAAyD,CAAC;IAE9D,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE;YACjD,mBAAmB,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAExC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,qCAAqC;QACrC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAC1C,MAAM,SAAS,GAAG,eAAe,CAC/B,cAAc,CACsD,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;oBACtD,KAAK,EAAE;wBACL,kBAAkB,EAAE;4BAClB,gBAAgB,EAAE,CAAC,SAAS,CAAC;4BAC7B,eAAe,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC;yBACrD;wBACD,qBAAqB,EAAE,SAAS;wBAChC,0BAA0B,EAAE,aAAa;qBAC1C;iBACF;aACF;SACF,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,wBAAwB,CACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,eAAe,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,wBAAwB,CACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC5C,GAAG,SAAS,4BAA4B,CACzC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,qCAAqC;QACrC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,MAAM,SAAS,GAAG,WAAW,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAGrC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;oBACtD,KAAK,EAAE;wBACL,kBAAkB,EAAE;4BAClB,gBAAgB,EAAE,CAAC,SAAS,CAAC;4BAC7B,eAAe,EAAE,CAAC,SAAS,CAAC;yBAC7B;wBACD,qBAAqB,EAAE,SAAS;wBAChC,0BAA0B,EAAE,aAAa;qBAC1C;iBACF;aACF;SACF,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC5C,GAAG,SAAS,wBAAwB,CACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,cAAc,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,sBAAsB,CACnC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;QACpE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAEtD,MAAM,CAAC,cAAc,CACnB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,MAAM,SAAS,GAAG,WAAW,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAGrC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,0CAA0C,CAAC,EACnD,SAAS,CACV,CAAC;QAEF,mGAAmG;QACnG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,0BAA0B,CACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG;YACjC,WAAW,EAAE,aAAa;YAC1B,KAAK,EAAE,EAAE,4BAA4B,EAAE,IAAI,EAAE;SAC9C,CAAC;QACF,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEtD,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI;aAC9C,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,eAAe,CACzC,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,eAAe,CAAC,cAAc,CAG7B,CACF,CAAC;QACF,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAE1C,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;oBACtD,KAAK,EAAE;wBACL,kBAAkB,EAAE;4BAClB,gBAAgB,EAAE,CAAC,SAAS,CAAC;4BAC7B,eAAe,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC;yBACrD;wBACD,qBAAqB,EAAE,SAAS;wBAChC,0BAA0B,EAAE,aAAa;wBACzC,4BAA4B,EAAE,IAAI;qBACnC;iBACF;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAC/C,kFAAkF,CACnF,CAAC;QAEF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAUb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,aAAa,GAAG,MAAM,uBAAuB,CACjD,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,eAAe,CAAC,cAAc,CAG7B,CACF,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,2BAA2B;oBACrC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;oBACtD,KAAK,EAAE;wBACL,EAAE,EAAE;4BACF,GAAG,EAAE;gCACH,eAAe,EAAE,CAAC,SAAS,CAAC;gCAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC;6BACpD;4BACD,MAAM,EAAE,SAAS;yBAClB;qBACF;iBACF;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAC/C,iFAAiF,CAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC,CAAC,CAAwC,CAAC;QAE5E,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;YACnC,WAAW,EAAE,sCAAsC;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG;YACjC,WAAW,EAAE,aAAa;YAC1B,KAAK,EAAE;gBACL,qCAAqC;gBACrC,EAAE,EAAE;oBACF,GAAG,EAAE;wBACH,eAAe,EAAE,CAAC,yBAAyB,CAAC;wBAC5C,cAAc,EAAE,CAAC,yBAAyB,CAAC;qBAC5C;oBACD,MAAM,EAAE,4BAA4B;oBACpC,aAAa,EAAE,KAAK;iBACrB;gBACD,iEAAiE;gBACjE,qBAAqB,EAAE,6BAA6B;gBACpD,4BAA4B,EAAE,IAAI;aACnC;SACF,CAAC;QACF,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI;aAC9C,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAUb,CAAC;QACH,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,IAAI,GAAG,CAAC,0CAA0C,CAAC,EACnD,eAAe,CAAC,cAAc,CAG7B,CACF,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAgC,CAAC;QAElE,oGAAoG;QACpG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC,gBAAgB,EAAE,CAAC,SAAS,EAAE,yBAAyB,CAAC;YACxD,eAAe,EAAE;gBACf,SAAS;gBACT,sBAAsB;gBACtB,yBAAyB;aAC1B;YACD,aAAa,EAAE,SAAS;YACxB,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;QAEH,wEAAwE;QACxE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAExE,+EAA+E;QAC/E,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtD,+DAA+D;QAC/D,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAClD,EAAE,WAAW,EAAE,WAAW,EAAE,EAC5B,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC,CAAC,CAAwC,CAAC;QAE5E,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;YACnC,WAAW,EAAE,sCAAsC;SACpD,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,EACnD,EAAE,WAAW,EAAE,WAAW,EAAE,EAC5B,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC,CAAC,CAAwC,CAAC;QAE5E,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACvD,sCAAsC,CACvC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Adaptor, CallToolResponse, DisplayMode, HostContext, HostContextStore, OpenExternalOptions, RequestModalOptions, SetWidgetStateAction } from "../types.js";
2
+ export declare class AppsSdkAdaptor implements Adaptor {
3
+ private static instance;
4
+ static getInstance(): AppsSdkAdaptor;
5
+ static resetInstance(): void;
6
+ getHostContextStore<K extends keyof HostContext>(key: K): HostContextStore<K>;
7
+ callTool: <ToolArgs extends Record<string, unknown> | null = null, ToolResponse extends CallToolResponse = CallToolResponse>(name: string, args: ToolArgs) => Promise<ToolResponse>;
8
+ requestDisplayMode: (mode: DisplayMode) => Promise<{
9
+ mode: DisplayMode;
10
+ }>;
11
+ sendFollowUpMessage: (prompt: string) => Promise<void>;
12
+ openExternal(href: string, options?: OpenExternalOptions): void;
13
+ setWidgetState: (stateOrUpdater: SetWidgetStateAction) => Promise<void>;
14
+ uploadFile: (file: File) => Promise<import("../types.js").FileMetadata>;
15
+ getFileDownloadUrl: (file: {
16
+ fileId: string;
17
+ }) => Promise<{
18
+ downloadUrl: string;
19
+ }>;
20
+ openModal(options: RequestModalOptions): Promise<void>;
21
+ setOpenInAppUrl(href: string): Promise<void>;
22
+ }
@@ -0,0 +1,71 @@
1
+ import { AppsSdkBridge } from "./bridge.js";
2
+ export class AppsSdkAdaptor {
3
+ static instance = null;
4
+ static getInstance() {
5
+ if (!AppsSdkAdaptor.instance) {
6
+ AppsSdkAdaptor.instance = new AppsSdkAdaptor();
7
+ }
8
+ return AppsSdkAdaptor.instance;
9
+ }
10
+ static resetInstance() {
11
+ AppsSdkAdaptor.instance = null;
12
+ }
13
+ getHostContextStore(key) {
14
+ const bridge = AppsSdkBridge.getInstance();
15
+ if (key === "widgetState") {
16
+ return {
17
+ subscribe: bridge.subscribe("widgetState"),
18
+ getSnapshot: () => bridge.getSnapshot("widgetState")?.modelContent ?? null,
19
+ };
20
+ }
21
+ return {
22
+ subscribe: bridge.subscribe(key),
23
+ getSnapshot: () => bridge.getSnapshot(key),
24
+ };
25
+ }
26
+ callTool = async (name, args) => {
27
+ return window.openai.callTool(name, args);
28
+ };
29
+ requestDisplayMode = (mode) => {
30
+ return window.openai.requestDisplayMode({ mode });
31
+ };
32
+ sendFollowUpMessage = (prompt) => {
33
+ return window.openai.sendFollowUpMessage({ prompt });
34
+ };
35
+ openExternal(href, options = {}) {
36
+ window.openai.openExternal({ href, ...options });
37
+ }
38
+ setWidgetState = (stateOrUpdater) => {
39
+ const modelContent = typeof stateOrUpdater === "function"
40
+ ? stateOrUpdater(window.openai.widgetState?.modelContent ?? null)
41
+ : stateOrUpdater;
42
+ return window.openai.setWidgetState({ modelContent });
43
+ };
44
+ uploadFile = (file) => {
45
+ return window.openai.uploadFile(file).then(async (metadata) => {
46
+ const state = window.openai.widgetState
47
+ ? { ...window.openai.widgetState }
48
+ : { modelContent: {} };
49
+ if (!state.imageIds) {
50
+ state.imageIds = [];
51
+ }
52
+ state.imageIds.push(metadata.fileId);
53
+ await window.openai.setWidgetState(state);
54
+ return metadata;
55
+ });
56
+ };
57
+ getFileDownloadUrl = (file) => {
58
+ return window.openai.getFileDownloadUrl(file);
59
+ };
60
+ openModal(options) {
61
+ return window.openai.requestModal(options);
62
+ }
63
+ setOpenInAppUrl(href) {
64
+ href = href.trim();
65
+ if (!href) {
66
+ throw new Error("The href parameter is required.");
67
+ }
68
+ return window.openai.setOpenInAppUrl({ href });
69
+ }
70
+ }
71
+ //# sourceMappingURL=adaptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptor.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/adaptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Bridge, Subscribe } from "../types.js";
2
+ import { type AppsSdkContext } from "./types.js";
3
+ export declare class AppsSdkBridge implements Bridge<AppsSdkContext> {
4
+ private static instance;
5
+ static getInstance(): AppsSdkBridge;
6
+ static resetInstance(): void;
7
+ subscribe(key: keyof AppsSdkContext): Subscribe;
8
+ subscribe(keys: readonly (keyof AppsSdkContext)[]): Subscribe;
9
+ getSnapshot: <K extends keyof AppsSdkContext>(key: K) => (import("./types.js").AppsSdkMethods<import("./types.js").WidgetState> & AppsSdkContext<Record<never, unknown>, import("../../types.js").UnknownObject, import("../../types.js").UnknownObject, import("./types.js").WidgetState>)[K];
10
+ }
@@ -1,4 +1,4 @@
1
- import { SET_GLOBALS_EVENT_TYPE, } from "../types.js";
1
+ import { SET_GLOBALS_EVENT_TYPE, } from "./types.js";
2
2
  export class AppsSdkBridge {
3
3
  static instance = null;
4
4
  static getInstance() {
@@ -43,4 +43,4 @@ export class AppsSdkBridge {
43
43
  return window.openai[key];
44
44
  };
45
45
  }
46
- //# sourceMappingURL=apps-sdk-bridge.js.map
46
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,sBAAsB,GAEvB,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,QAAQ,GAAyB,IAAI,CAAC;IAE9C,MAAM,CAAC,WAAW;QACvB,IACE,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU;YACxC,MAAM,CAAC,MAAM,KAAK,SAAS,EAC3B,CAAC;YACD,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpC,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,aAAa;QACzB,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAIM,SAAS,CACd,SAAmE;QAEnE,MAAM,IAAI,GAAsC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACtE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChB,OAAO,CAAC,QAAoB,EAAE,EAAE;YAC9B,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAE;gBACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CACjC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CACjD,CAAC;gBACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,OAAO;gBACT,CAAC;gBACD,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC;YAEF,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,eAAe,EAAE;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;YACtE,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAEM,WAAW,GAAG,CAAiC,GAAM,EAAE,EAAE;QAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,+EAA+E,GAAG,8CAA8C,CACjI,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { AppsSdkAdaptor } from "./adaptor.js";
2
+ export { AppsSdkBridge } from "./bridge.js";
3
+ export type { AppsSdkContext, AppsSdkMethods, ToolResponseEvent, } from "./types.js";
4
+ export { SET_GLOBALS_EVENT_TYPE, SetGlobalsEvent, TOOL_RESPONSE_EVENT_TYPE, } from "./types.js";
5
+ export { useAppsSdkContext } from "./use-apps-sdk-context.js";
@@ -0,0 +1,5 @@
1
+ export { AppsSdkAdaptor } from "./adaptor.js";
2
+ export { AppsSdkBridge } from "./bridge.js";
3
+ export { SET_GLOBALS_EVENT_TYPE, SetGlobalsEvent, TOOL_RESPONSE_EVENT_TYPE, } from "./types.js";
4
+ export { useAppsSdkContext } from "./use-apps-sdk-context.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM5C,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,23 +1,9 @@
1
- import "react";
2
- import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
3
- import type { WidgetHostType } from "../server/index.js";
4
- declare module "react" {
5
- interface HTMLAttributes<T> {
6
- "data-llm"?: string;
7
- }
8
- }
9
- export type UnknownObject = Record<string, unknown>;
10
- export type Prettify<T> = {
11
- [K in keyof T]: T[K];
12
- } & {};
13
- export type Objectify<T> = T & UnknownObject;
14
- type RequiredKeys<T> = {
15
- [K in keyof T]-?: Record<string, never> extends Pick<T, K> ? never : K;
16
- }[keyof T];
17
- export type HasRequiredKeys<T> = RequiredKeys<T> extends never ? false : true;
18
- type WidgetState = UnknownObject;
19
- type FileMetadata = {
20
- fileId: string;
1
+ import type { UnknownObject } from "../../types.js";
2
+ import type { CallToolArgs, CallToolResponse, FileMetadata, RequestModalOptions } from "../types.js";
3
+ type DisplayMode = "pip" | "inline" | "fullscreen" | "modal";
4
+ export type WidgetState = {
5
+ modelContent: Record<string, unknown>;
6
+ imageIds?: string[];
21
7
  };
22
8
  export declare const TOOL_RESPONSE_EVENT_TYPE = "openai:tool_response";
23
9
  export declare class ToolResponseEvent extends CustomEvent<{
@@ -30,21 +16,17 @@ export declare class ToolResponseEvent extends CustomEvent<{
30
16
  }
31
17
  declare global {
32
18
  interface Window {
33
- skybridge: SkybridgeProperties;
34
- openai: OpenAiMethods<WidgetState> & OpenAiProperties;
19
+ openai: AppsSdkMethods & AppsSdkContext;
35
20
  }
36
21
  interface WindowEventMap {
37
22
  [SET_GLOBALS_EVENT_TYPE]: SetGlobalsEvent;
38
23
  }
39
24
  }
40
- export type SkybridgeProperties = {
41
- hostType: WidgetHostType;
42
- };
43
- export type OpenAiProperties<ToolInput extends UnknownObject = Record<never, unknown>, ToolOutput extends UnknownObject = UnknownObject, ToolResponseMetadata extends UnknownObject = UnknownObject, WidgetState extends UnknownObject = UnknownObject> = {
25
+ export type AppsSdkContext<ToolInput extends UnknownObject = Record<never, unknown>, ToolOutput extends UnknownObject = UnknownObject, ToolResponseMetadata extends UnknownObject = UnknownObject, WS extends WidgetState = WidgetState> = {
44
26
  theme: Theme;
45
27
  userAgent: UserAgent;
46
28
  locale: string;
47
- maxHeight: number;
29
+ maxHeight: number | undefined;
48
30
  displayMode: DisplayMode;
49
31
  safeArea: SafeArea;
50
32
  view: View;
@@ -53,27 +35,9 @@ export type OpenAiProperties<ToolInput extends UnknownObject = Record<never, unk
53
35
  text: string;
54
36
  } | null;
55
37
  toolResponseMetadata: ToolResponseMetadata | null;
56
- widgetState: WidgetState | null;
38
+ widgetState: WS | null;
57
39
  };
58
- export type CallToolArgs = Record<string, unknown> | null;
59
- export type CallToolResponse = {
60
- content: CallToolResult["content"];
61
- structuredContent: Record<string, unknown>;
62
- isError: boolean;
63
- result: string;
64
- meta: Record<string, unknown>;
65
- };
66
- export type RequestModalOptions = {
67
- title?: string;
68
- params?: Record<string, unknown>;
69
- anchor?: {
70
- top?: number;
71
- left?: number;
72
- width?: number;
73
- height?: number;
74
- };
75
- };
76
- export type OpenAiMethods<WidgetState extends UnknownObject = UnknownObject> = {
40
+ export type AppsSdkMethods<WS extends WidgetState = WidgetState> = {
77
41
  /** Calls a tool on your MCP. Returns the full response. */
78
42
  callTool: <ToolArgs extends CallToolArgs = null, ToolResponse extends CallToolResponse = CallToolResponse>(name: string, args: ToolArgs) => Promise<ToolResponse>;
79
43
  /** Triggers a followup turn in the ChatGPT conversation */
@@ -83,6 +47,7 @@ export type OpenAiMethods<WidgetState extends UnknownObject = UnknownObject> = {
83
47
  /** Opens an external link, redirects web page or mobile app */
84
48
  openExternal(args: {
85
49
  href: string;
50
+ redirectUrl?: false;
86
51
  }): void;
87
52
  /** For transitioning an app from inline to fullscreen or pip */
88
53
  requestDisplayMode: (args: {
@@ -98,7 +63,7 @@ export type OpenAiMethods<WidgetState extends UnknownObject = UnknownObject> = {
98
63
  * Sets the widget state.
99
64
  * This state is persisted across widget renders.
100
65
  */
101
- setWidgetState: (state: WidgetState) => Promise<void>;
66
+ setWidgetState: (state: WS) => Promise<void>;
102
67
  /**
103
68
  * Opens a modal portaled outside of the widget iFrame.
104
69
  * This ensures the modal is correctly displayed and not limited to the widget's area.
@@ -110,34 +75,39 @@ export type OpenAiMethods<WidgetState extends UnknownObject = UnknownObject> = {
110
75
  * Downloads a file from the host that was previously uploaded.
111
76
  * Only files uploaded by the same connector instance can be downloaded.
112
77
  */
113
- downloadFile: (file: FileMetadata) => Promise<{
78
+ getFileDownloadUrl: (file: FileMetadata) => Promise<{
114
79
  downloadUrl: string;
115
80
  }>;
81
+ /**
82
+ * Sets the open in app URL.
83
+ * This URL will be opened in the app when the user clicks on the top right button in fullscreen mode.
84
+ */
85
+ setOpenInAppUrl: (args: {
86
+ href: string;
87
+ }) => Promise<void>;
116
88
  };
117
89
  export declare const SET_GLOBALS_EVENT_TYPE = "openai:set_globals";
118
90
  export declare class SetGlobalsEvent extends CustomEvent<{
119
- globals: Partial<OpenAiProperties>;
91
+ globals: Partial<AppsSdkContext>;
120
92
  }> {
121
93
  readonly type = "openai:set_globals";
122
94
  }
123
- export type CallTool = (name: string, args: Record<string, unknown>) => Promise<CallToolResponse>;
124
- export type DisplayMode = "pip" | "inline" | "fullscreen" | "modal";
125
- export type View = {
95
+ type View = {
126
96
  mode: DisplayMode;
127
97
  params?: Record<string, unknown>;
128
98
  };
129
- export type Theme = "light" | "dark";
130
- export type SafeAreaInsets = {
99
+ type Theme = "light" | "dark";
100
+ type SafeAreaInsets = {
131
101
  top: number;
132
102
  bottom: number;
133
103
  left: number;
134
104
  right: number;
135
105
  };
136
- export type SafeArea = {
106
+ type SafeArea = {
137
107
  insets: SafeAreaInsets;
138
108
  };
139
- export type DeviceType = "mobile" | "tablet" | "desktop" | "unknown";
140
- export type UserAgent = {
109
+ type DeviceType = "mobile" | "tablet" | "desktop" | "unknown";
110
+ type UserAgent = {
141
111
  device: {
142
112
  type: DeviceType;
143
113
  };
@@ -1,4 +1,3 @@
1
- import "react";
2
1
  export const TOOL_RESPONSE_EVENT_TYPE = "openai:tool_response";
3
2
  export class ToolResponseEvent extends CustomEvent {
4
3
  type = TOOL_RESPONSE_EVENT_TYPE;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/types.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,OAAO,iBAAkB,SAAQ,WAErC;IACkB,IAAI,GAAG,wBAAwB,CAAC;CACnD;AAwFD,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,OAAO,eAAgB,SAAQ,WAEnC;IACkB,IAAI,GAAG,sBAAsB,CAAC;CACjD"}
@@ -0,0 +1,2 @@
1
+ import type { AppsSdkContext } from "./types.js";
2
+ export declare function useAppsSdkContext<K extends keyof AppsSdkContext>(key: K): AppsSdkContext[K];
@@ -1,7 +1,7 @@
1
1
  import { useSyncExternalStore } from "react";
2
- import { AppsSdkBridge } from "../apps-sdk-bridge.js";
3
- export function useAppsSdkBridge(key) {
2
+ import { AppsSdkBridge } from "./bridge.js";
3
+ export function useAppsSdkContext(key) {
4
4
  const bridge = AppsSdkBridge.getInstance();
5
5
  return useSyncExternalStore(bridge.subscribe(key), () => bridge.getSnapshot(key));
6
6
  }
7
- //# sourceMappingURL=use-apps-sdk-bridge.js.map
7
+ //# sourceMappingURL=use-apps-sdk-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-apps-sdk-context.js","sourceRoot":"","sources":["../../../../src/web/bridges/apps-sdk/use-apps-sdk-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,UAAU,iBAAiB,CAC/B,GAAM;IAEN,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CACtD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Adaptor } from "./types.js";
2
+ export declare const getAdaptor: () => Adaptor;
@@ -0,0 +1,8 @@
1
+ import { AppsSdkAdaptor } from "./apps-sdk/adaptor.js";
2
+ import { McpAppAdaptor } from "./mcp-app/adaptor.js";
3
+ export const getAdaptor = () => {
4
+ return window.skybridge.hostType === "apps-sdk"
5
+ ? AppsSdkAdaptor.getInstance()
6
+ : McpAppAdaptor.getInstance();
7
+ };
8
+ //# sourceMappingURL=get-adaptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-adaptor.js","sourceRoot":"","sources":["../../../src/web/bridges/get-adaptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU;QAC7C,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE;QAC9B,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./apps-sdk/index.js";
2
+ export { getAdaptor } from "./get-adaptor.js";
3
+ export * from "./mcp-app/index.js";
4
+ export * from "./types.js";
5
+ export { useHostContext } from "./use-host-context.js";
@@ -0,0 +1,6 @@
1
+ export * from "./apps-sdk/index.js";
2
+ export { getAdaptor } from "./get-adaptor.js";
3
+ export * from "./mcp-app/index.js";
4
+ export * from "./types.js";
5
+ export { useHostContext } from "./use-host-context.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/bridges/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}