skybridge 0.0.0-dev.f792261 → 0.0.0-dev.f7943e6

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 (380) hide show
  1. package/README.md +126 -124
  2. package/dist/cli/build-helpers.d.ts +11 -0
  3. package/dist/cli/build-helpers.js +107 -0
  4. package/dist/cli/build-helpers.js.map +1 -0
  5. package/dist/cli/build-helpers.test.js +132 -0
  6. package/dist/cli/build-helpers.test.js.map +1 -0
  7. package/dist/cli/build-steps.d.ts +2 -0
  8. package/dist/cli/build-steps.js +73 -0
  9. package/dist/cli/build-steps.js.map +1 -0
  10. package/dist/cli/build-steps.test.js +52 -0
  11. package/dist/cli/build-steps.test.js.map +1 -0
  12. package/dist/cli/detect-port.d.ts +2 -2
  13. package/dist/cli/detect-port.js +9 -20
  14. package/dist/cli/detect-port.js.map +1 -1
  15. package/dist/cli/header.d.ts +1 -1
  16. package/dist/cli/resolve-skybridge-config.d.ts +5 -0
  17. package/dist/cli/resolve-skybridge-config.js +18 -0
  18. package/dist/cli/resolve-skybridge-config.js.map +1 -0
  19. package/dist/cli/run-plain.d.ts +18 -0
  20. package/dist/cli/run-plain.js +89 -0
  21. package/dist/cli/run-plain.js.map +1 -0
  22. package/dist/cli/use-nodemon.d.ts +14 -0
  23. package/dist/cli/use-nodemon.js +71 -60
  24. package/dist/cli/use-nodemon.js.map +1 -1
  25. package/dist/cli/use-typescript-check.d.ts +8 -2
  26. package/dist/cli/use-typescript-check.js +71 -68
  27. package/dist/cli/use-typescript-check.js.map +1 -1
  28. package/dist/commands/build.d.ts +0 -3
  29. package/dist/commands/build.js +2 -73
  30. package/dist/commands/build.js.map +1 -1
  31. package/dist/commands/create.d.ts +9 -0
  32. package/dist/commands/create.js +30 -0
  33. package/dist/commands/create.js.map +1 -0
  34. package/dist/commands/dev.d.ts +1 -0
  35. package/dist/commands/dev.js +48 -0
  36. package/dist/commands/dev.js.map +1 -1
  37. package/dist/commands/start.js +7 -1
  38. package/dist/commands/start.js.map +1 -1
  39. package/dist/context-warnings.d.ts +5 -0
  40. package/dist/context-warnings.js +31 -0
  41. package/dist/context-warnings.js.map +1 -0
  42. package/dist/context-warnings.test.js +28 -0
  43. package/dist/context-warnings.test.js.map +1 -0
  44. package/dist/server/asset-base-url-transform-plugin.d.ts +1 -0
  45. package/dist/server/asset-base-url-transform-plugin.js +16 -1
  46. package/dist/server/asset-base-url-transform-plugin.js.map +1 -1
  47. package/dist/server/asset-base-url-transform-plugin.test.js +51 -1
  48. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -1
  49. package/dist/server/auth/discovery.d.ts +32 -0
  50. package/dist/server/auth/discovery.js +56 -0
  51. package/dist/server/auth/discovery.js.map +1 -0
  52. package/dist/server/auth/discovery.test.d.ts +1 -0
  53. package/dist/server/auth/discovery.test.js +93 -0
  54. package/dist/server/auth/discovery.test.js.map +1 -0
  55. package/dist/server/auth/index.d.ts +44 -0
  56. package/dist/server/auth/index.js +2 -0
  57. package/dist/server/auth/index.js.map +1 -0
  58. package/dist/server/auth/providers/auth0.d.ts +40 -0
  59. package/dist/server/auth/providers/auth0.js +31 -0
  60. package/dist/server/auth/providers/auth0.js.map +1 -0
  61. package/dist/server/auth/providers/auth0.test.d.ts +1 -0
  62. package/dist/server/auth/providers/auth0.test.js +50 -0
  63. package/dist/server/auth/providers/auth0.test.js.map +1 -0
  64. package/dist/server/auth/providers/authplane.d.ts +49 -0
  65. package/dist/server/auth/providers/authplane.js +57 -0
  66. package/dist/server/auth/providers/authplane.js.map +1 -0
  67. package/dist/server/auth/providers/authplane.test.d.ts +1 -0
  68. package/dist/server/auth/providers/authplane.test.js +140 -0
  69. package/dist/server/auth/providers/authplane.test.js.map +1 -0
  70. package/dist/server/auth/providers/clerk.d.ts +51 -0
  71. package/dist/server/auth/providers/clerk.js +19 -0
  72. package/dist/server/auth/providers/clerk.js.map +1 -0
  73. package/dist/server/auth/providers/clerk.test.d.ts +1 -0
  74. package/dist/server/auth/providers/clerk.test.js +30 -0
  75. package/dist/server/auth/providers/clerk.test.js.map +1 -0
  76. package/dist/server/auth/providers/custom.d.ts +40 -0
  77. package/dist/server/auth/providers/custom.js +56 -0
  78. package/dist/server/auth/providers/custom.js.map +1 -0
  79. package/dist/server/auth/providers/custom.test.d.ts +1 -0
  80. package/dist/server/auth/providers/custom.test.js +158 -0
  81. package/dist/server/auth/providers/custom.test.js.map +1 -0
  82. package/dist/server/auth/providers/descope.d.ts +44 -0
  83. package/dist/server/auth/providers/descope.js +44 -0
  84. package/dist/server/auth/providers/descope.js.map +1 -0
  85. package/dist/server/auth/providers/descope.test.d.ts +1 -0
  86. package/dist/server/auth/providers/descope.test.js +62 -0
  87. package/dist/server/auth/providers/descope.test.js.map +1 -0
  88. package/dist/server/auth/providers/shared.d.ts +2 -0
  89. package/dist/server/auth/providers/shared.js +6 -0
  90. package/dist/server/auth/providers/shared.js.map +1 -0
  91. package/dist/server/auth/providers/shared.test.d.ts +1 -0
  92. package/dist/server/auth/providers/shared.test.js +10 -0
  93. package/dist/server/auth/providers/shared.test.js.map +1 -0
  94. package/dist/server/auth/providers/stytch.d.ts +25 -0
  95. package/dist/server/auth/providers/stytch.js +16 -0
  96. package/dist/server/auth/providers/stytch.js.map +1 -0
  97. package/dist/server/auth/providers/verify-spy.d.ts +12 -0
  98. package/dist/server/auth/providers/verify-spy.js +21 -0
  99. package/dist/server/auth/providers/verify-spy.js.map +1 -0
  100. package/dist/server/auth/providers/workos.d.ts +33 -0
  101. package/dist/server/auth/providers/workos.js +15 -0
  102. package/dist/server/auth/providers/workos.js.map +1 -0
  103. package/dist/server/auth/security-schemes.d.ts +23 -0
  104. package/dist/server/auth/security-schemes.js +64 -0
  105. package/dist/server/auth/security-schemes.js.map +1 -0
  106. package/dist/server/auth/security-schemes.test.d.ts +1 -0
  107. package/dist/server/auth/security-schemes.test.js +99 -0
  108. package/dist/server/auth/security-schemes.test.js.map +1 -0
  109. package/dist/server/auth/setup.d.ts +6 -0
  110. package/dist/server/auth/setup.js +92 -0
  111. package/dist/server/auth/setup.js.map +1 -0
  112. package/dist/server/auth/setup.test.d.ts +1 -0
  113. package/dist/server/auth/setup.test.js +508 -0
  114. package/dist/server/auth/setup.test.js.map +1 -0
  115. package/dist/server/auth/verify.d.ts +46 -0
  116. package/dist/server/auth/verify.js +62 -0
  117. package/dist/server/auth/verify.js.map +1 -0
  118. package/dist/server/auth/verify.test.d.ts +1 -0
  119. package/dist/server/auth/verify.test.js +149 -0
  120. package/dist/server/auth/verify.test.js.map +1 -0
  121. package/dist/server/auth-extra.test-d.js +82 -0
  122. package/dist/server/auth-extra.test-d.js.map +1 -0
  123. package/dist/server/auth.d.ts +58 -0
  124. package/dist/server/auth.js +28 -0
  125. package/dist/server/auth.js.map +1 -0
  126. package/dist/server/build-manifest.test.d.ts +1 -0
  127. package/dist/server/build-manifest.test.js +27 -0
  128. package/dist/server/build-manifest.test.js.map +1 -0
  129. package/dist/server/content-helpers.d.ts +40 -0
  130. package/dist/server/content-helpers.js +33 -0
  131. package/dist/server/content-helpers.js.map +1 -1
  132. package/dist/server/express.test.js +61 -0
  133. package/dist/server/express.test.js.map +1 -1
  134. package/dist/server/file-ref.d.ts +28 -0
  135. package/dist/server/file-ref.js +27 -0
  136. package/dist/server/file-ref.js.map +1 -0
  137. package/dist/server/host.d.ts +2 -0
  138. package/dist/server/host.js +11 -0
  139. package/dist/server/host.js.map +1 -0
  140. package/dist/server/host.test.d.ts +1 -0
  141. package/dist/server/host.test.js +13 -0
  142. package/dist/server/host.test.js.map +1 -0
  143. package/dist/server/index.d.ts +15 -2
  144. package/dist/server/index.js +13 -1
  145. package/dist/server/index.js.map +1 -1
  146. package/dist/server/middleware.d.ts +47 -9
  147. package/dist/server/middleware.js +33 -0
  148. package/dist/server/middleware.js.map +1 -1
  149. package/dist/server/middleware.test.js +37 -1
  150. package/dist/server/middleware.test.js.map +1 -1
  151. package/dist/server/register-tool.test.d.ts +1 -0
  152. package/dist/server/register-tool.test.js +26 -0
  153. package/dist/server/register-tool.test.js.map +1 -0
  154. package/dist/server/requestOrigin.d.ts +7 -0
  155. package/dist/server/requestOrigin.js +25 -0
  156. package/dist/server/requestOrigin.js.map +1 -0
  157. package/dist/server/server.d.ts +291 -19
  158. package/dist/server/server.js +458 -178
  159. package/dist/server/server.js.map +1 -1
  160. package/dist/server/skills-integration.test.d.ts +1 -0
  161. package/dist/server/skills-integration.test.js +79 -0
  162. package/dist/server/skills-integration.test.js.map +1 -0
  163. package/dist/server/skills.d.ts +29 -0
  164. package/dist/server/skills.js +195 -0
  165. package/dist/server/skills.js.map +1 -0
  166. package/dist/server/skills.test.d.ts +1 -0
  167. package/dist/server/skills.test.js +247 -0
  168. package/dist/server/skills.test.js.map +1 -0
  169. package/dist/server/view-name.test-d.d.ts +1 -0
  170. package/dist/server/view-name.test-d.js +8 -0
  171. package/dist/server/view-name.test-d.js.map +1 -0
  172. package/dist/server/view-resource-resolution.test.d.ts +6 -0
  173. package/dist/server/view-resource-resolution.test.js +171 -0
  174. package/dist/server/view-resource-resolution.test.js.map +1 -0
  175. package/dist/server/viewsDevServer.js +4 -1
  176. package/dist/server/viewsDevServer.js.map +1 -1
  177. package/dist/test/utils.d.ts +3 -3
  178. package/dist/test/view.test.js +125 -96
  179. package/dist/test/view.test.js.map +1 -1
  180. package/dist/views/index.d.ts +3 -0
  181. package/dist/views/index.js +3 -0
  182. package/dist/views/index.js.map +1 -0
  183. package/dist/{web/plugin → views}/scan-views.js +1 -1
  184. package/dist/views/scan-views.js.map +1 -0
  185. package/dist/views/scan-views.test.d.ts +1 -0
  186. package/dist/views/scan-views.test.js.map +1 -0
  187. package/dist/views/validate-view.d.ts +1 -0
  188. package/dist/{web/plugin → views}/validate-view.js +2 -2
  189. package/dist/views/validate-view.js.map +1 -0
  190. package/dist/views/validate-view.test.d.ts +1 -0
  191. package/dist/views/validate-view.test.js.map +1 -0
  192. package/dist/web/bridges/adaptor.d.ts +51 -0
  193. package/dist/web/bridges/adaptor.js +327 -0
  194. package/dist/web/bridges/adaptor.js.map +1 -0
  195. package/dist/web/bridges/adaptor.test.d.ts +1 -0
  196. package/dist/web/bridges/adaptor.test.js +225 -0
  197. package/dist/web/bridges/adaptor.test.js.map +1 -0
  198. package/dist/web/bridges/apps-sdk/bridge.d.ts +6 -1
  199. package/dist/web/bridges/apps-sdk/bridge.js +15 -3
  200. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -1
  201. package/dist/web/bridges/apps-sdk/index.d.ts +0 -1
  202. package/dist/web/bridges/apps-sdk/index.js +0 -1
  203. package/dist/web/bridges/apps-sdk/index.js.map +1 -1
  204. package/dist/web/bridges/apps-sdk/types.d.ts +2 -0
  205. package/dist/web/bridges/apps-sdk/types.js.map +1 -1
  206. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +11 -0
  207. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +11 -0
  208. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -1
  209. package/dist/web/bridges/get-adaptor.d.ts +7 -0
  210. package/dist/web/bridges/get-adaptor.js +9 -7
  211. package/dist/web/bridges/get-adaptor.js.map +1 -1
  212. package/dist/web/bridges/get-adaptor.test.d.ts +1 -0
  213. package/dist/web/bridges/get-adaptor.test.js +32 -0
  214. package/dist/web/bridges/get-adaptor.test.js.map +1 -0
  215. package/dist/web/bridges/mcp-app/bridge.d.ts +15 -2
  216. package/dist/web/bridges/mcp-app/bridge.js +73 -7
  217. package/dist/web/bridges/mcp-app/bridge.js.map +1 -1
  218. package/dist/web/bridges/mcp-app/bridge.test.d.ts +1 -0
  219. package/dist/web/bridges/mcp-app/bridge.test.js +17 -0
  220. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -0
  221. package/dist/web/bridges/mcp-app/index.d.ts +0 -1
  222. package/dist/web/bridges/mcp-app/index.js +0 -1
  223. package/dist/web/bridges/mcp-app/index.js.map +1 -1
  224. package/dist/web/bridges/mcp-app/types.d.ts +2 -0
  225. package/dist/web/bridges/mcp-app/types.js.map +1 -1
  226. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +12 -0
  227. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +12 -0
  228. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -1
  229. package/dist/web/bridges/mcp-app/view-tools.test.d.ts +1 -0
  230. package/dist/web/bridges/mcp-app/view-tools.test.js +143 -0
  231. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -0
  232. package/dist/web/bridges/types.d.ts +104 -1
  233. package/dist/web/bridges/types.js +14 -1
  234. package/dist/web/bridges/types.js.map +1 -1
  235. package/dist/web/bridges/types.test.d.ts +1 -0
  236. package/dist/web/bridges/types.test.js +19 -0
  237. package/dist/web/bridges/types.test.js.map +1 -0
  238. package/dist/web/bridges/use-host-context.d.ts +5 -0
  239. package/dist/web/bridges/use-host-context.js +5 -0
  240. package/dist/web/bridges/use-host-context.js.map +1 -1
  241. package/dist/web/components/modal-provider.d.ts +1 -1
  242. package/dist/web/components/modal-provider.js +4 -3
  243. package/dist/web/components/modal-provider.js.map +1 -1
  244. package/dist/web/create-store.d.ts +26 -0
  245. package/dist/web/create-store.js +26 -0
  246. package/dist/web/create-store.js.map +1 -1
  247. package/dist/web/create-store.test.js +8 -5
  248. package/dist/web/create-store.test.js.map +1 -1
  249. package/dist/web/data-llm.d.ts +34 -1
  250. package/dist/web/data-llm.js +28 -0
  251. package/dist/web/data-llm.js.map +1 -1
  252. package/dist/web/data-llm.test.js +18 -5
  253. package/dist/web/data-llm.test.js.map +1 -1
  254. package/dist/web/generate-helpers.d.ts +2 -0
  255. package/dist/web/generate-helpers.js +2 -0
  256. package/dist/web/generate-helpers.js.map +1 -1
  257. package/dist/web/generate-helpers.test-d.js +4 -2
  258. package/dist/web/generate-helpers.test-d.js.map +1 -1
  259. package/dist/web/hooks/index.d.ts +5 -0
  260. package/dist/web/hooks/index.js +5 -0
  261. package/dist/web/hooks/index.js.map +1 -1
  262. package/dist/web/hooks/test/utils.d.ts +7 -2
  263. package/dist/web/hooks/test/utils.js +14 -3
  264. package/dist/web/hooks/test/utils.js.map +1 -1
  265. package/dist/web/hooks/use-call-tool.d.ts +45 -0
  266. package/dist/web/hooks/use-call-tool.js +28 -0
  267. package/dist/web/hooks/use-call-tool.js.map +1 -1
  268. package/dist/web/hooks/use-call-tool.test.js +62 -23
  269. package/dist/web/hooks/use-call-tool.test.js.map +1 -1
  270. package/dist/web/hooks/use-display-mode.d.ts +20 -0
  271. package/dist/web/hooks/use-display-mode.js +20 -0
  272. package/dist/web/hooks/use-display-mode.js.map +1 -1
  273. package/dist/web/hooks/use-display-mode.test.js +56 -20
  274. package/dist/web/hooks/use-display-mode.test.js.map +1 -1
  275. package/dist/web/hooks/use-download.d.ts +5 -0
  276. package/dist/web/hooks/use-download.js +8 -0
  277. package/dist/web/hooks/use-download.js.map +1 -0
  278. package/dist/web/hooks/use-download.test.d.ts +1 -0
  279. package/dist/web/hooks/use-download.test.js +103 -0
  280. package/dist/web/hooks/use-download.test.js.map +1 -0
  281. package/dist/web/hooks/use-files.d.ts +32 -0
  282. package/dist/web/hooks/use-files.js +32 -0
  283. package/dist/web/hooks/use-files.js.map +1 -1
  284. package/dist/web/hooks/use-files.test.js +10 -2
  285. package/dist/web/hooks/use-files.test.js.map +1 -1
  286. package/dist/web/hooks/use-host-info.d.ts +22 -0
  287. package/dist/web/hooks/use-host-info.js +30 -0
  288. package/dist/web/hooks/use-host-info.js.map +1 -0
  289. package/dist/web/hooks/use-host-info.test.d.ts +1 -0
  290. package/dist/web/hooks/use-host-info.test.js +59 -0
  291. package/dist/web/hooks/use-host-info.test.js.map +1 -0
  292. package/dist/web/hooks/use-layout.d.ts +2 -0
  293. package/dist/web/hooks/use-layout.js +2 -0
  294. package/dist/web/hooks/use-layout.js.map +1 -1
  295. package/dist/web/hooks/use-layout.test.js +59 -26
  296. package/dist/web/hooks/use-layout.test.js.map +1 -1
  297. package/dist/web/hooks/use-open-external.d.ts +17 -0
  298. package/dist/web/hooks/use-open-external.js +16 -0
  299. package/dist/web/hooks/use-open-external.js.map +1 -1
  300. package/dist/web/hooks/use-open-external.test.js +13 -3
  301. package/dist/web/hooks/use-open-external.test.js.map +1 -1
  302. package/dist/web/hooks/use-register-view-tool.d.ts +38 -0
  303. package/dist/web/hooks/use-register-view-tool.js +50 -0
  304. package/dist/web/hooks/use-register-view-tool.js.map +1 -0
  305. package/dist/web/hooks/use-request-close.d.ts +16 -0
  306. package/dist/web/hooks/use-request-close.js +21 -0
  307. package/dist/web/hooks/use-request-close.js.map +1 -0
  308. package/dist/web/hooks/use-request-close.test.d.ts +1 -0
  309. package/dist/web/hooks/use-request-close.test.js +47 -0
  310. package/dist/web/hooks/use-request-close.test.js.map +1 -0
  311. package/dist/web/hooks/use-request-modal.d.ts +16 -1
  312. package/dist/web/hooks/use-request-modal.js +16 -1
  313. package/dist/web/hooks/use-request-modal.js.map +1 -1
  314. package/dist/web/hooks/use-request-modal.test.js +10 -0
  315. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  316. package/dist/web/hooks/use-request-size.d.ts +20 -0
  317. package/dist/web/hooks/use-request-size.js +24 -0
  318. package/dist/web/hooks/use-request-size.js.map +1 -0
  319. package/dist/web/hooks/use-request-size.test.d.ts +1 -0
  320. package/dist/web/hooks/use-request-size.test.js +47 -0
  321. package/dist/web/hooks/use-request-size.test.js.map +1 -0
  322. package/dist/web/hooks/use-send-follow-up-message.d.ts +17 -0
  323. package/dist/web/hooks/use-send-follow-up-message.js +17 -0
  324. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -1
  325. package/dist/web/hooks/use-set-open-in-app-url.d.ts +17 -0
  326. package/dist/web/hooks/use-set-open-in-app-url.js +17 -0
  327. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -1
  328. package/dist/web/hooks/use-set-open-in-app-url.test.js +28 -8
  329. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -1
  330. package/dist/web/hooks/use-tool-info.d.ts +53 -2
  331. package/dist/web/hooks/use-tool-info.js +30 -7
  332. package/dist/web/hooks/use-tool-info.js.map +1 -1
  333. package/dist/web/hooks/use-tool-info.test-d.js +11 -29
  334. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -1
  335. package/dist/web/hooks/use-tool-info.test.js +42 -32
  336. package/dist/web/hooks/use-tool-info.test.js.map +1 -1
  337. package/dist/web/hooks/use-user.d.ts +2 -0
  338. package/dist/web/hooks/use-user.js +2 -0
  339. package/dist/web/hooks/use-user.js.map +1 -1
  340. package/dist/web/hooks/use-user.test.js +81 -35
  341. package/dist/web/hooks/use-user.test.js.map +1 -1
  342. package/dist/web/hooks/use-view-state.d.ts +21 -0
  343. package/dist/web/hooks/use-view-state.js +19 -9
  344. package/dist/web/hooks/use-view-state.js.map +1 -1
  345. package/dist/web/hooks/use-view-state.test.js +37 -2
  346. package/dist/web/hooks/use-view-state.test.js.map +1 -1
  347. package/dist/web/mount-view.d.ts +19 -0
  348. package/dist/web/mount-view.js +19 -0
  349. package/dist/web/mount-view.js.map +1 -1
  350. package/dist/web/types.d.ts +4 -0
  351. package/dist/web/types.js.map +1 -1
  352. package/package.json +29 -23
  353. package/dist/web/bridges/apps-sdk/adaptor.d.ts +0 -24
  354. package/dist/web/bridges/apps-sdk/adaptor.js +0 -96
  355. package/dist/web/bridges/apps-sdk/adaptor.js.map +0 -1
  356. package/dist/web/bridges/mcp-app/adaptor.d.ts +0 -48
  357. package/dist/web/bridges/mcp-app/adaptor.js +0 -263
  358. package/dist/web/bridges/mcp-app/adaptor.js.map +0 -1
  359. package/dist/web/plugin/data-llm.test.js +0 -81
  360. package/dist/web/plugin/data-llm.test.js.map +0 -1
  361. package/dist/web/plugin/plugin.d.ts +0 -5
  362. package/dist/web/plugin/plugin.js +0 -156
  363. package/dist/web/plugin/plugin.js.map +0 -1
  364. package/dist/web/plugin/scan-views.js.map +0 -1
  365. package/dist/web/plugin/scan-views.test.js.map +0 -1
  366. package/dist/web/plugin/transform-data-llm.d.ts +0 -12
  367. package/dist/web/plugin/transform-data-llm.js +0 -96
  368. package/dist/web/plugin/transform-data-llm.js.map +0 -1
  369. package/dist/web/plugin/transform-data-llm.test.js +0 -81
  370. package/dist/web/plugin/transform-data-llm.test.js.map +0 -1
  371. package/dist/web/plugin/validate-view.d.ts +0 -1
  372. package/dist/web/plugin/validate-view.js.map +0 -1
  373. package/dist/web/plugin/validate-view.test.js.map +0 -1
  374. /package/dist/{web/plugin/data-llm.test.d.ts → cli/build-helpers.test.d.ts} +0 -0
  375. /package/dist/{web/plugin/scan-views.test.d.ts → cli/build-steps.test.d.ts} +0 -0
  376. /package/dist/{web/plugin/transform-data-llm.test.d.ts → context-warnings.test.d.ts} +0 -0
  377. /package/dist/{web/plugin/validate-view.test.d.ts → server/auth-extra.test-d.d.ts} +0 -0
  378. /package/dist/{web/plugin → views}/scan-views.d.ts +0 -0
  379. /package/dist/{web/plugin → views}/scan-views.test.js +0 -0
  380. /package/dist/{web/plugin → views}/validate-view.test.js +0 -0
@@ -91,7 +91,7 @@ export declare function createTestServer(): McpServer<Record<never, import("../s
91
91
  processedAt: number;
92
92
  region: string;
93
93
  }>;
94
- }>;
94
+ }, import("../server/auth.js").ExtraClaims>;
95
95
  export declare function createMinimalTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
96
96
  "search-trip": import("../server/server.js").ToolDef<{
97
97
  destination: string;
@@ -100,7 +100,7 @@ export declare function createMinimalTestServer(): McpServer<Record<never, impor
100
100
  id: string;
101
101
  }[];
102
102
  }, unknown>;
103
- }>;
103
+ }, import("../server/auth.js").ExtraClaims>;
104
104
  export declare function createInterfaceTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
105
105
  "interface-view": import("../server/server.js").ToolDef<{
106
106
  id: string;
@@ -111,7 +111,7 @@ export declare function createInterfaceTestServer(): McpServer<Record<never, imp
111
111
  processedBy: string;
112
112
  version: number;
113
113
  }>;
114
- }>;
114
+ }, import("../server/auth.js").ExtraClaims>;
115
115
  export declare function createMockExtra(host: string, options?: {
116
116
  headers?: Record<string, string | string[]>;
117
117
  url?: URL | string;
@@ -1,5 +1,9 @@
1
1
  import crypto from "node:crypto";
2
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
3
+ import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
2
4
  import { afterEach, beforeEach, describe, expect, it, vi, } from "vitest";
5
+ import { TOOL_OUTPUT_WARNING_TOKENS } from "../context-warnings.js";
6
+ import { McpServer as McpServerClass } from "../server/server.js";
3
7
  import { createMockExtra, createMockMcpServer, resetTestEnv, setTestEnv, } from "./utils.js";
4
8
  const mockManifest = {
5
9
  "skybridge:view:my-view": {
@@ -71,20 +75,24 @@ describe("McpServer.registerTool (unified API)", () => {
71
75
  const serverUrl = `http://${host}`;
72
76
  const hmrUrl = `ws://${host}`;
73
77
  const mockExtra = createMockExtra(host);
74
- const result = await appsSdkResourceCallback(new URL("ui://views/apps-sdk/my-view.html"), mockExtra);
78
+ const result = await appsSdkResourceCallback(new URL("ui://views/ext-apps/my-view.html"), mockExtra);
75
79
  expect(mockRegisterTool).toHaveBeenCalled();
76
80
  expect(result).toEqual({
77
81
  contents: [
78
82
  {
79
- uri: "ui://views/apps-sdk/my-view.html",
80
- mimeType: "text/html+skybridge",
83
+ uri: "ui://views/ext-apps/my-view.html",
84
+ mimeType: "text/html;profile=mcp-app",
81
85
  text: expect.stringContaining('<div id="root"></div>'),
82
86
  _meta: {
83
- "openai/widgetCSP": {
84
- resource_domains: [serverUrl],
85
- connect_domains: [serverUrl, hmrUrl],
87
+ ui: {
88
+ csp: {
89
+ resourceDomains: [serverUrl],
90
+ connectDomains: [serverUrl, hmrUrl],
91
+ baseUriDomains: [serverUrl],
92
+ },
93
+ domain: serverUrl,
94
+ description: "Test view",
86
95
  },
87
- "openai/widgetDomain": serverUrl,
88
96
  "openai/widgetDescription": "Test view",
89
97
  },
90
98
  },
@@ -110,20 +118,24 @@ describe("McpServer.registerTool (unified API)", () => {
110
118
  const host = "myapp.com";
111
119
  const serverUrl = `https://${host}`;
112
120
  const mockExtra = createMockExtra(host);
113
- const versionedUri = `ui://views/apps-sdk/my-view.html${expectedVersionParam("assets/my-view-abc123.js", "style.css")}`;
121
+ const versionedUri = `ui://views/ext-apps/my-view.html${expectedVersionParam("assets/my-view-abc123.js", "style.css")}`;
114
122
  const result = await appsSdkResourceCallback(new URL(versionedUri), mockExtra);
115
123
  expect(result).toEqual({
116
124
  contents: [
117
125
  {
118
126
  uri: versionedUri,
119
- mimeType: "text/html+skybridge",
127
+ mimeType: "text/html;profile=mcp-app",
120
128
  text: expect.stringContaining('<div id="root"></div>'),
121
129
  _meta: {
122
- "openai/widgetCSP": {
123
- resource_domains: [serverUrl],
124
- connect_domains: [serverUrl],
130
+ ui: {
131
+ csp: {
132
+ resourceDomains: [serverUrl],
133
+ connectDomains: [serverUrl],
134
+ baseUriDomains: [serverUrl],
135
+ },
136
+ domain: serverUrl,
137
+ description: "Test view",
125
138
  },
126
- "openai/widgetDomain": serverUrl,
127
139
  "openai/widgetDescription": "Test view",
128
140
  },
129
141
  },
@@ -142,7 +154,7 @@ describe("McpServer.registerTool (unified API)", () => {
142
154
  view: { component: "my-view", description: "Test view" },
143
155
  }, vi.fn());
144
156
  const extAppsResourceCallback = mockRegisterResource.mock
145
- .calls[1]?.[3];
157
+ .calls[0]?.[3];
146
158
  expect(extAppsResourceCallback).toBeDefined();
147
159
  const forwardedUrl = "https://everything-3a2c1264.staging.alpic.live/mcp?foo=bar";
148
160
  const expectedDomain = `${crypto
@@ -167,9 +179,10 @@ describe("McpServer.registerTool (unified API)", () => {
167
179
  description: "Test view",
168
180
  domain: expectedDomain,
169
181
  },
182
+ "openai/widgetDescription": "Test view",
170
183
  });
171
184
  });
172
- it("should register resources with correct hostType for both apps-sdk and ext-apps", async () => {
185
+ it("should register a single ext-apps resource", async () => {
173
186
  server.registerTool({
174
187
  name: "my-view",
175
188
  description: "Test tool",
@@ -179,37 +192,14 @@ describe("McpServer.registerTool (unified API)", () => {
179
192
  prefersBorder: true,
180
193
  },
181
194
  }, vi.fn());
182
- expect(mockRegisterResource).toHaveBeenCalledTimes(2);
183
- const appsSdkCallback = mockRegisterResource.mock
195
+ expect(mockRegisterResource).toHaveBeenCalledTimes(1);
196
+ const resourceCallback = mockRegisterResource.mock
184
197
  .calls[0]?.[3];
185
198
  const host = "localhost:3000";
186
199
  const serverUrl = `http://${host}`;
187
200
  const hmrUrl = `ws://${host}`;
188
- const appsSdkResult = await appsSdkCallback(new URL("ui://views/apps-sdk/my-view.html"), createMockExtra(host));
189
- expect(appsSdkResult).toEqual({
190
- contents: [
191
- {
192
- uri: "ui://views/apps-sdk/my-view.html",
193
- mimeType: "text/html+skybridge",
194
- text: expect.stringContaining('<div id="root"></div>'),
195
- _meta: {
196
- "openai/widgetCSP": {
197
- resource_domains: [serverUrl],
198
- connect_domains: [serverUrl, hmrUrl],
199
- },
200
- "openai/widgetDomain": serverUrl,
201
- "openai/widgetDescription": "Test view",
202
- "openai/widgetPrefersBorder": true,
203
- },
204
- },
205
- ],
206
- });
207
- expect(appsSdkResult.contents[0]?.text).toContain('window.skybridge = { hostType: "apps-sdk", serverUrl: "http://localhost:3000" };');
208
- const extAppsResourceCallback = mockRegisterResource.mock
209
- .calls[1]?.[3];
210
- expect(extAppsResourceCallback).toBeDefined();
211
- const extAppsResult = await extAppsResourceCallback(new URL("ui://views/ext-apps/my-view.html"), createMockExtra(host));
212
- expect(extAppsResult).toEqual({
201
+ const result = await resourceCallback(new URL("ui://views/ext-apps/my-view.html"), createMockExtra(host));
202
+ expect(result).toEqual({
213
203
  contents: [
214
204
  {
215
205
  uri: "ui://views/ext-apps/my-view.html",
@@ -226,27 +216,26 @@ describe("McpServer.registerTool (unified API)", () => {
226
216
  description: "Test view",
227
217
  prefersBorder: true,
228
218
  },
219
+ "openai/widgetDescription": "Test view",
229
220
  },
230
221
  },
231
222
  ],
232
223
  });
233
- expect(extAppsResult.contents[0]?.text).toContain('window.skybridge = { hostType: "mcp-app", serverUrl: "http://localhost:3000" };');
224
+ expect(result.contents[0]?.text).toContain('window.skybridge = { hostType: "mcp-app", serverUrl: "http://localhost:3000" };');
234
225
  });
235
- it("should register tool with ui.resourceUri metadata", async () => {
226
+ it("should advertise the single resource via ui.resourceUri only (no openai/outputTemplate)", async () => {
236
227
  server.registerTool({
237
228
  name: "my-view",
238
229
  description: "Test tool",
239
230
  view: { component: "my-view", description: "Test view" },
240
231
  }, vi.fn());
241
- expect(mockRegisterTool).toHaveBeenCalledTimes(1);
242
- const toolCallArgs = mockRegisterTool.mock.calls[0];
243
- const toolConfig = toolCallArgs?.[1];
244
- expect(toolConfig._meta).toHaveProperty("ui");
245
- expect(toolConfig._meta?.ui).toEqual({
246
- resourceUri: "ui://views/ext-apps/my-view.html",
247
- });
232
+ const toolConfig = mockRegisterTool.mock.calls[0]?.[1];
233
+ const uri = "ui://views/ext-apps/my-view.html";
234
+ expect(toolConfig._meta?.ui?.resourceUri).toBe(uri);
235
+ expect(toolConfig._meta?.["ui/resourceUri"]).toBe(uri);
236
+ expect(toolConfig._meta?.["openai/outputTemplate"]).toBeUndefined();
248
237
  });
249
- it("should register tool with openai/outputTemplate when apps-sdk only", async () => {
238
+ it("treats the deprecated hosts option as a no-op (always the single resource)", async () => {
250
239
  server.registerTool({
251
240
  name: "my-view",
252
241
  description: "Test tool",
@@ -256,11 +245,10 @@ describe("McpServer.registerTool (unified API)", () => {
256
245
  hosts: ["apps-sdk"],
257
246
  },
258
247
  }, vi.fn());
259
- expect(mockRegisterTool).toHaveBeenCalledTimes(1);
260
- const toolCallArgs = mockRegisterTool.mock.calls[0];
261
- const toolConfig = toolCallArgs?.[1];
262
- expect(toolConfig._meta).not.toHaveProperty("ui");
263
- expect(toolConfig._meta?.["openai/outputTemplate"]).toBe("ui://views/apps-sdk/my-view.html");
248
+ expect(mockRegisterResource).toHaveBeenCalledTimes(1);
249
+ const toolConfig = mockRegisterTool.mock.calls[0]?.[1];
250
+ expect(toolConfig._meta?.ui?.resourceUri).toBe("ui://views/ext-apps/my-view.html");
251
+ expect(toolConfig._meta?.["openai/outputTemplate"]).toBeUndefined();
264
252
  });
265
253
  it("should not version view URIs in development", () => {
266
254
  server.registerTool({
@@ -269,12 +257,11 @@ describe("McpServer.registerTool (unified API)", () => {
269
257
  view: { component: "my-view", description: "Test view" },
270
258
  }, vi.fn());
271
259
  const toolConfig = mockRegisterTool.mock.calls[0]?.[1];
272
- expect(toolConfig._meta?.["openai/outputTemplate"]).toBe("ui://views/apps-sdk/my-view.html");
260
+ expect(toolConfig._meta?.["openai/outputTemplate"]).toBeUndefined();
273
261
  expect(toolConfig._meta?.ui?.resourceUri).toBe("ui://views/ext-apps/my-view.html");
274
- // The URI registered with the resource handler must match the URI in
275
- // outputTemplate exactly so the SDK can resolve `resources/read` requests.
276
- expect(mockRegisterResource.mock.calls[0]?.[1]).toBe("ui://views/apps-sdk/my-view.html");
277
- expect(mockRegisterResource.mock.calls[1]?.[1]).toBe("ui://views/ext-apps/my-view.html");
262
+ // The URI registered with the resource handler must match ui.resourceUri
263
+ // exactly so the SDK can resolve `resources/read` requests.
264
+ expect(mockRegisterResource.mock.calls[0]?.[1]).toBe("ui://views/ext-apps/my-view.html");
278
265
  });
279
266
  it("should append a stable content hash to view URIs in production", () => {
280
267
  setTestEnv({ NODE_ENV: "production" });
@@ -285,10 +272,9 @@ describe("McpServer.registerTool (unified API)", () => {
285
272
  }, vi.fn());
286
273
  const expected = expectedVersionParam("assets/my-view-abc123.js", "style.css");
287
274
  const toolConfig = mockRegisterTool.mock.calls[0]?.[1];
288
- expect(toolConfig._meta?.["openai/outputTemplate"]).toBe(`ui://views/apps-sdk/my-view.html${expected}`);
275
+ expect(toolConfig._meta?.["openai/outputTemplate"]).toBeUndefined();
289
276
  expect(toolConfig._meta?.ui?.resourceUri).toBe(`ui://views/ext-apps/my-view.html${expected}`);
290
- expect(mockRegisterResource.mock.calls[0]?.[1]).toBe(`ui://views/apps-sdk/my-view.html${expected}`);
291
- expect(mockRegisterResource.mock.calls[1]?.[1]).toBe(`ui://views/ext-apps/my-view.html${expected}`);
277
+ expect(mockRegisterResource.mock.calls[0]?.[1]).toBe(`ui://views/ext-apps/my-view.html${expected}`);
292
278
  });
293
279
  it("should produce different version params for views with different bundles", () => {
294
280
  setTestEnv({ NODE_ENV: "production" });
@@ -302,8 +288,8 @@ describe("McpServer.registerTool (unified API)", () => {
302
288
  description: "Second tool",
303
289
  view: { component: "folder-view" },
304
290
  }, vi.fn());
305
- const myviewTemplate = (mockRegisterTool.mock.calls[0]?.[1])._meta?.["openai/outputTemplate"];
306
- const folderviewTemplate = (mockRegisterTool.mock.calls[1]?.[1])._meta?.["openai/outputTemplate"];
291
+ const myviewTemplate = mockRegisterTool.mock.calls[0][1]._meta?.ui?.resourceUri;
292
+ const folderviewTemplate = mockRegisterTool.mock.calls[1][1]._meta?.ui?.resourceUri;
307
293
  expect(myviewTemplate).not.toEqual(folderviewTemplate);
308
294
  expect(myviewTemplate).toMatch(/\?v=[0-9a-f]{8}$/);
309
295
  expect(folderviewTemplate).toMatch(/\?v=[0-9a-f]{8}$/);
@@ -316,26 +302,7 @@ describe("McpServer.registerTool (unified API)", () => {
316
302
  view: { component: "unknown-view" },
317
303
  }, vi.fn());
318
304
  const toolConfig = mockRegisterTool.mock.calls[0]?.[1];
319
- expect(toolConfig._meta?.["openai/outputTemplate"]).toBe("ui://views/apps-sdk/unknown-view.html");
320
- });
321
- it("should register tool with ui.resourceUri only when mcp-app only", async () => {
322
- server.registerTool({
323
- name: "my-view",
324
- description: "Test tool",
325
- view: {
326
- component: "my-view",
327
- description: "Test view",
328
- hosts: ["mcp-app"],
329
- },
330
- }, vi.fn());
331
- expect(mockRegisterTool).toHaveBeenCalledTimes(1);
332
- const toolCallArgs = mockRegisterTool.mock.calls[0];
333
- const toolConfig = toolCallArgs?.[1];
334
- expect(toolConfig._meta).toHaveProperty("ui");
335
- expect(toolConfig._meta?.ui).toEqual({
336
- resourceUri: "ui://views/ext-apps/my-view.html",
337
- });
338
- expect(toolConfig._meta?.["openai/outputTemplate"]).toBeUndefined();
305
+ expect(toolConfig._meta?.ui?.resourceUri).toBe("ui://views/ext-apps/unknown-view.html");
339
306
  });
340
307
  it("should inject viewUUID into _meta of tool callback results", async () => {
341
308
  const mockToolCallback = vi.fn().mockResolvedValue({
@@ -355,6 +322,21 @@ describe("McpServer.registerTool (unified API)", () => {
355
322
  expect(typeof result._meta?.viewUUID).toBe("string");
356
323
  expect(result._meta?.viewUUID).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
357
324
  });
325
+ it("warns when a tool callback returns large model-visible output", async () => {
326
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
327
+ server.registerTool({ name: "large-output", description: "Test tool" }, vi.fn().mockResolvedValue({
328
+ content: [
329
+ {
330
+ type: "text",
331
+ text: "x".repeat(TOOL_OUTPUT_WARNING_TOKENS * 4),
332
+ },
333
+ ],
334
+ }));
335
+ const wrappedCallback = mockRegisterTool.mock.calls[0]?.[2];
336
+ await wrappedCallback({}, {});
337
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Tool "large-output" returned'));
338
+ warnSpy.mockRestore();
339
+ });
358
340
  it("should preserve existing _meta when injecting viewUUID", async () => {
359
341
  const mockToolCallback = vi.fn().mockResolvedValue({
360
342
  content: [{ type: "text", text: "result" }],
@@ -473,11 +455,12 @@ describe("McpServer.registerTool (unified API)", () => {
473
455
  const host = "localhost:3000";
474
456
  const serverUrl = `http://${host}`;
475
457
  const hmrUrl = `ws://${host}`;
476
- const result = await appsSdkCallback(new URL("ui://views/apps-sdk/csp-tool.html"), createMockExtra(host));
458
+ const result = await appsSdkCallback(new URL("ui://views/ext-apps/csp-tool.html"), createMockExtra(host));
477
459
  const meta = result.contents[0]?._meta;
478
- expect(meta["openai/widgetCSP"]).toEqual({
479
- resource_domains: [serverUrl, "https://cdn.example.com"],
480
- connect_domains: [serverUrl, hmrUrl, "https://api.example.com"],
460
+ expect(meta.ui?.csp).toEqual({
461
+ resourceDomains: [serverUrl, "https://cdn.example.com"],
462
+ connectDomains: [serverUrl, hmrUrl, "https://api.example.com"],
463
+ baseUriDomains: [serverUrl],
481
464
  });
482
465
  });
483
466
  it("should let view._meta override framework-computed keys", async () => {
@@ -489,18 +472,20 @@ describe("McpServer.registerTool (unified API)", () => {
489
472
  description: "Test view",
490
473
  csp: { connectDomains: ["https://api.x.com"] },
491
474
  _meta: {
492
- "openai/widgetCSP": {
493
- connect_domains: ["https://api.y.com"],
475
+ ui: {
476
+ csp: {
477
+ connectDomains: ["https://api.y.com"],
478
+ },
494
479
  },
495
480
  },
496
481
  },
497
482
  }, vi.fn());
498
483
  const appsSdkCallback = mockRegisterResource.mock
499
484
  .calls[0]?.[3];
500
- const result = await appsSdkCallback(new URL("ui://views/apps-sdk/override-tool.html"), createMockExtra("localhost:3000"));
485
+ const result = await appsSdkCallback(new URL("ui://views/ext-apps/override-tool.html"), createMockExtra("localhost:3000"));
501
486
  const meta = result.contents[0]?._meta;
502
- expect(meta["openai/widgetCSP"]).toEqual({
503
- connect_domains: ["https://api.y.com"],
487
+ expect(meta.ui?.csp).toEqual({
488
+ connectDomains: ["https://api.y.com"],
504
489
  });
505
490
  });
506
491
  it("should pass user _meta keys through to tool config", () => {
@@ -520,4 +505,48 @@ describe("McpServer.registerTool (unified API)", () => {
520
505
  expect(toolConfig._meta?.["acme.com/category"]).toBe("utility");
521
506
  });
522
507
  });
508
+ describe("resources/list view _meta injection", () => {
509
+ afterEach(() => resetTestEnv());
510
+ it("attaches CSP, domain, and connectDomains _meta to view resources at list time", async () => {
511
+ setTestEnv({ NODE_ENV: "production" });
512
+ const server = new McpServerClass({ name: "test", version: "1.0.0" }, { capabilities: {} });
513
+ server.registerTool({
514
+ name: "start",
515
+ description: "Start",
516
+ view: {
517
+ component: "my-view",
518
+ description: "Onboarding deck",
519
+ domain: "skybridge.tech",
520
+ csp: {
521
+ resourceDomains: ["https://fonts.googleapis.com"],
522
+ redirectDomains: ["https://docs.skybridge.tech"],
523
+ },
524
+ },
525
+ }, vi.fn().mockResolvedValue({
526
+ content: [{ type: "text", text: "ok" }],
527
+ structuredContent: {},
528
+ }));
529
+ const client = new Client({ name: "test-client", version: "1.0.0" });
530
+ const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
531
+ await server.connect(serverTransport);
532
+ await client.connect(clientTransport);
533
+ const { resources } = await client.listResources();
534
+ await client.close();
535
+ await server.close();
536
+ const appsSdk = resources.find((r) => r.uri.includes("apps-sdk"));
537
+ const extApps = resources.find((r) => r.uri.includes("ext-apps"));
538
+ expect(appsSdk).toBeUndefined();
539
+ expect(extApps?._meta).toBeDefined();
540
+ const extUi = extApps._meta?.ui;
541
+ expect(extUi?.csp?.connectDomains?.length).toBeGreaterThan(0);
542
+ expect(extUi?.csp?.resourceDomains).toContain("https://fonts.googleapis.com");
543
+ expect(extUi?.domain).toBe("skybridge.tech");
544
+ const meta = extApps?._meta;
545
+ expect(meta["openai/widgetDescription"]).toBe("Onboarding deck");
546
+ expect(meta["openai/widgetCSP"]?.redirect_domains).toEqual([
547
+ "https://docs.skybridge.tech",
548
+ ]);
549
+ expect(meta.ui?.csp).not.toHaveProperty("redirectDomains");
550
+ });
551
+ });
523
552
  //# sourceMappingURL=view.test.js.map