skybridge 0.0.0-dev.a664594 → 0.0.0-dev.a6e5f63

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 (235) hide show
  1. package/README.md +2 -0
  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.d.ts +1 -0
  6. package/dist/cli/build-helpers.test.js +130 -0
  7. package/dist/cli/build-helpers.test.js.map +1 -0
  8. package/dist/cli/build-steps.d.ts +2 -0
  9. package/dist/cli/build-steps.js +73 -0
  10. package/dist/cli/build-steps.js.map +1 -0
  11. package/dist/cli/build-steps.test.d.ts +1 -0
  12. package/dist/cli/build-steps.test.js +52 -0
  13. package/dist/cli/build-steps.test.js.map +1 -0
  14. package/dist/cli/detect-port.d.ts +2 -2
  15. package/dist/cli/detect-port.js +9 -20
  16. package/dist/cli/detect-port.js.map +1 -1
  17. package/dist/cli/header.d.ts +1 -1
  18. package/dist/cli/resolve-skybridge-config.d.ts +5 -0
  19. package/dist/cli/{resolve-views-dir.js → resolve-skybridge-config.js} +4 -3
  20. package/dist/cli/resolve-skybridge-config.js.map +1 -0
  21. package/dist/cli/run-plain.d.ts +18 -0
  22. package/dist/cli/run-plain.js +89 -0
  23. package/dist/cli/run-plain.js.map +1 -0
  24. package/dist/cli/use-nodemon.d.ts +14 -0
  25. package/dist/cli/use-nodemon.js +71 -60
  26. package/dist/cli/use-nodemon.js.map +1 -1
  27. package/dist/cli/use-typescript-check.d.ts +8 -2
  28. package/dist/cli/use-typescript-check.js +70 -67
  29. package/dist/cli/use-typescript-check.js.map +1 -1
  30. package/dist/commands/build.d.ts +0 -3
  31. package/dist/commands/build.js +2 -58
  32. package/dist/commands/build.js.map +1 -1
  33. package/dist/commands/dev.d.ts +1 -0
  34. package/dist/commands/dev.js +34 -2
  35. package/dist/commands/dev.js.map +1 -1
  36. package/dist/commands/start.js +7 -1
  37. package/dist/commands/start.js.map +1 -1
  38. package/dist/server/auth/discovery.d.ts +32 -0
  39. package/dist/server/auth/discovery.js +56 -0
  40. package/dist/server/auth/discovery.js.map +1 -0
  41. package/dist/server/auth/discovery.test.d.ts +1 -0
  42. package/dist/server/auth/discovery.test.js +93 -0
  43. package/dist/server/auth/discovery.test.js.map +1 -0
  44. package/dist/server/auth/index.d.ts +18 -0
  45. package/dist/server/auth/index.js +2 -0
  46. package/dist/server/auth/index.js.map +1 -0
  47. package/dist/server/auth/providers/auth0.d.ts +18 -0
  48. package/dist/server/auth/providers/auth0.js +31 -0
  49. package/dist/server/auth/providers/auth0.js.map +1 -0
  50. package/dist/server/auth/providers/auth0.test.d.ts +1 -0
  51. package/dist/server/auth/providers/auth0.test.js +48 -0
  52. package/dist/server/auth/providers/auth0.test.js.map +1 -0
  53. package/dist/server/auth/providers/authplane.d.ts +47 -0
  54. package/dist/server/auth/providers/authplane.js +57 -0
  55. package/dist/server/auth/providers/authplane.js.map +1 -0
  56. package/dist/server/auth/providers/authplane.test.d.ts +1 -0
  57. package/dist/server/auth/providers/authplane.test.js +138 -0
  58. package/dist/server/auth/providers/authplane.test.js.map +1 -0
  59. package/dist/server/auth/providers/clerk.d.ts +14 -0
  60. package/dist/server/auth/providers/clerk.js +16 -0
  61. package/dist/server/auth/providers/clerk.js.map +1 -0
  62. package/dist/server/auth/providers/clerk.test.d.ts +1 -0
  63. package/dist/server/auth/providers/clerk.test.js +28 -0
  64. package/dist/server/auth/providers/clerk.test.js.map +1 -0
  65. package/dist/server/auth/providers/custom.d.ts +32 -0
  66. package/dist/server/auth/providers/custom.js +49 -0
  67. package/dist/server/auth/providers/custom.js.map +1 -0
  68. package/dist/server/auth/providers/custom.test.d.ts +1 -0
  69. package/dist/server/auth/providers/custom.test.js +156 -0
  70. package/dist/server/auth/providers/custom.test.js.map +1 -0
  71. package/dist/server/auth/providers/descope.d.ts +15 -0
  72. package/dist/server/auth/providers/descope.js +44 -0
  73. package/dist/server/auth/providers/descope.js.map +1 -0
  74. package/dist/server/auth/providers/descope.test.d.ts +1 -0
  75. package/dist/server/auth/providers/descope.test.js +60 -0
  76. package/dist/server/auth/providers/descope.test.js.map +1 -0
  77. package/dist/server/auth/providers/shared.d.ts +2 -0
  78. package/dist/server/auth/providers/shared.js +6 -0
  79. package/dist/server/auth/providers/shared.js.map +1 -0
  80. package/dist/server/auth/providers/shared.test.d.ts +1 -0
  81. package/dist/server/auth/providers/shared.test.js +10 -0
  82. package/dist/server/auth/providers/shared.test.js.map +1 -0
  83. package/dist/server/auth/providers/stytch.d.ts +12 -0
  84. package/dist/server/auth/providers/stytch.js +13 -0
  85. package/dist/server/auth/providers/stytch.js.map +1 -0
  86. package/dist/server/auth/providers/workos.d.ts +11 -0
  87. package/dist/server/auth/providers/workos.js +12 -0
  88. package/dist/server/auth/providers/workos.js.map +1 -0
  89. package/dist/server/auth/security-schemes.d.ts +23 -0
  90. package/dist/server/auth/security-schemes.js +64 -0
  91. package/dist/server/auth/security-schemes.js.map +1 -0
  92. package/dist/server/auth/security-schemes.test.d.ts +1 -0
  93. package/dist/server/auth/security-schemes.test.js +99 -0
  94. package/dist/server/auth/security-schemes.test.js.map +1 -0
  95. package/dist/server/auth/setup.d.ts +6 -0
  96. package/dist/server/auth/setup.js +92 -0
  97. package/dist/server/auth/setup.js.map +1 -0
  98. package/dist/server/auth/setup.test.d.ts +1 -0
  99. package/dist/server/auth/setup.test.js +474 -0
  100. package/dist/server/auth/setup.test.js.map +1 -0
  101. package/dist/server/auth/verify.d.ts +12 -0
  102. package/dist/server/auth/verify.js +38 -0
  103. package/dist/server/auth/verify.js.map +1 -0
  104. package/dist/server/auth/verify.test.d.ts +1 -0
  105. package/dist/server/auth/verify.test.js +100 -0
  106. package/dist/server/auth/verify.test.js.map +1 -0
  107. package/dist/server/build-manifest.test.d.ts +1 -0
  108. package/dist/server/build-manifest.test.js +27 -0
  109. package/dist/server/build-manifest.test.js.map +1 -0
  110. package/dist/server/express.test.js +61 -0
  111. package/dist/server/express.test.js.map +1 -1
  112. package/dist/server/host.d.ts +2 -0
  113. package/dist/server/host.js +11 -0
  114. package/dist/server/host.js.map +1 -0
  115. package/dist/server/host.test.d.ts +1 -0
  116. package/dist/server/host.test.js +13 -0
  117. package/dist/server/host.test.js.map +1 -0
  118. package/dist/server/index.d.ts +11 -2
  119. package/dist/server/index.js +9 -1
  120. package/dist/server/index.js.map +1 -1
  121. package/dist/server/requestOrigin.d.ts +7 -0
  122. package/dist/server/requestOrigin.js +25 -0
  123. package/dist/server/requestOrigin.js.map +1 -0
  124. package/dist/server/server.d.ts +96 -39
  125. package/dist/server/server.js +310 -140
  126. package/dist/server/server.js.map +1 -1
  127. package/dist/server/skills-integration.test.d.ts +1 -0
  128. package/dist/server/skills-integration.test.js +63 -0
  129. package/dist/server/skills-integration.test.js.map +1 -0
  130. package/dist/server/skills.d.ts +23 -0
  131. package/dist/server/skills.js +178 -0
  132. package/dist/server/skills.js.map +1 -0
  133. package/dist/server/skills.test.d.ts +1 -0
  134. package/dist/server/skills.test.js +210 -0
  135. package/dist/server/skills.test.js.map +1 -0
  136. package/dist/server/view-name.test-d.d.ts +1 -0
  137. package/dist/server/view-name.test-d.js +8 -0
  138. package/dist/server/view-name.test-d.js.map +1 -0
  139. package/dist/server/view-resource-resolution.test.d.ts +6 -0
  140. package/dist/server/view-resource-resolution.test.js +171 -0
  141. package/dist/server/view-resource-resolution.test.js.map +1 -0
  142. package/dist/server/viewsDevServer.js +4 -1
  143. package/dist/server/viewsDevServer.js.map +1 -1
  144. package/dist/test/view.test.js +70 -102
  145. package/dist/test/view.test.js.map +1 -1
  146. package/dist/web/bridges/adaptor.d.ts +9 -6
  147. package/dist/web/bridges/adaptor.js +107 -74
  148. package/dist/web/bridges/adaptor.js.map +1 -1
  149. package/dist/web/bridges/adaptor.test.js +93 -244
  150. package/dist/web/bridges/adaptor.test.js.map +1 -1
  151. package/dist/web/bridges/apps-sdk/bridge.d.ts +5 -1
  152. package/dist/web/bridges/apps-sdk/bridge.js +12 -0
  153. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -1
  154. package/dist/web/bridges/get-adaptor.d.ts +0 -2
  155. package/dist/web/bridges/get-adaptor.js +1 -21
  156. package/dist/web/bridges/get-adaptor.js.map +1 -1
  157. package/dist/web/bridges/get-adaptor.test.js +3 -19
  158. package/dist/web/bridges/get-adaptor.test.js.map +1 -1
  159. package/dist/web/bridges/mcp-app/bridge.d.ts +14 -2
  160. package/dist/web/bridges/mcp-app/bridge.js +72 -4
  161. package/dist/web/bridges/mcp-app/bridge.js.map +1 -1
  162. package/dist/web/bridges/mcp-app/bridge.test.js +1 -5
  163. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -1
  164. package/dist/web/bridges/mcp-app/types.d.ts +2 -0
  165. package/dist/web/bridges/mcp-app/types.js.map +1 -1
  166. package/dist/web/bridges/mcp-app/view-tools.test.d.ts +1 -0
  167. package/dist/web/bridges/mcp-app/view-tools.test.js +143 -0
  168. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -0
  169. package/dist/web/bridges/types.d.ts +34 -6
  170. package/dist/web/bridges/types.js.map +1 -1
  171. package/dist/web/components/modal-provider.d.ts +1 -1
  172. package/dist/web/create-store.test.js +4 -3
  173. package/dist/web/create-store.test.js.map +1 -1
  174. package/dist/web/data-llm.d.ts +1 -1
  175. package/dist/web/data-llm.test.js +12 -3
  176. package/dist/web/data-llm.test.js.map +1 -1
  177. package/dist/web/generate-helpers.test-d.js +4 -2
  178. package/dist/web/generate-helpers.test-d.js.map +1 -1
  179. package/dist/web/hooks/index.d.ts +2 -0
  180. package/dist/web/hooks/index.js +2 -0
  181. package/dist/web/hooks/index.js.map +1 -1
  182. package/dist/web/hooks/test/utils.d.ts +2 -1
  183. package/dist/web/hooks/test/utils.js +1 -1
  184. package/dist/web/hooks/test/utils.js.map +1 -1
  185. package/dist/web/hooks/use-call-tool.test.js +6 -5
  186. package/dist/web/hooks/use-call-tool.test.js.map +1 -1
  187. package/dist/web/hooks/use-display-mode.test.js +4 -3
  188. package/dist/web/hooks/use-display-mode.test.js.map +1 -1
  189. package/dist/web/hooks/use-download.test.js +5 -5
  190. package/dist/web/hooks/use-download.test.js.map +1 -1
  191. package/dist/web/hooks/use-files.test.js +3 -3
  192. package/dist/web/hooks/use-files.test.js.map +1 -1
  193. package/dist/web/hooks/use-host-info.d.ts +22 -0
  194. package/dist/web/hooks/use-host-info.js +30 -0
  195. package/dist/web/hooks/use-host-info.js.map +1 -0
  196. package/dist/web/hooks/use-host-info.test.d.ts +1 -0
  197. package/dist/web/hooks/use-host-info.test.js +59 -0
  198. package/dist/web/hooks/use-host-info.test.js.map +1 -0
  199. package/dist/web/hooks/use-layout.test.js +5 -5
  200. package/dist/web/hooks/use-layout.test.js.map +1 -1
  201. package/dist/web/hooks/use-open-external.test.js +7 -11
  202. package/dist/web/hooks/use-open-external.test.js.map +1 -1
  203. package/dist/web/hooks/use-register-view-tool.d.ts +38 -0
  204. package/dist/web/hooks/use-register-view-tool.js +50 -0
  205. package/dist/web/hooks/use-register-view-tool.js.map +1 -0
  206. package/dist/web/hooks/use-request-close.test.js +5 -4
  207. package/dist/web/hooks/use-request-close.test.js.map +1 -1
  208. package/dist/web/hooks/use-request-modal.test.js +3 -3
  209. package/dist/web/hooks/use-request-modal.test.js.map +1 -1
  210. package/dist/web/hooks/use-request-size.test.js +3 -3
  211. package/dist/web/hooks/use-request-size.test.js.map +1 -1
  212. package/dist/web/hooks/use-set-open-in-app-url.test.js +2 -2
  213. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -1
  214. package/dist/web/hooks/use-tool-info.d.ts +25 -7
  215. package/dist/web/hooks/use-tool-info.js +5 -8
  216. package/dist/web/hooks/use-tool-info.js.map +1 -1
  217. package/dist/web/hooks/use-tool-info.test-d.js +11 -29
  218. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -1
  219. package/dist/web/hooks/use-tool-info.test.js +8 -8
  220. package/dist/web/hooks/use-tool-info.test.js.map +1 -1
  221. package/dist/web/hooks/use-user.test.js +5 -5
  222. package/dist/web/hooks/use-user.test.js.map +1 -1
  223. package/dist/web/hooks/use-view-state.js +19 -9
  224. package/dist/web/hooks/use-view-state.js.map +1 -1
  225. package/dist/web/hooks/use-view-state.test.js +34 -3
  226. package/dist/web/hooks/use-view-state.test.js.map +1 -1
  227. package/dist/web/plugin/plugin.d.ts +6 -0
  228. package/dist/web/plugin/plugin.js +3 -3
  229. package/dist/web/plugin/plugin.js.map +1 -1
  230. package/package.json +23 -19
  231. package/dist/cli/resolve-views-dir.d.ts +0 -1
  232. package/dist/cli/resolve-views-dir.js.map +0 -1
  233. package/dist/web/bridges/host-context-stores.d.ts +0 -27
  234. package/dist/web/bridges/host-context-stores.js +0 -73
  235. package/dist/web/bridges/host-context-stores.js.map +0 -1
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "skybridge",
3
- "version": "0.0.0-dev.a664594",
3
+ "version": "0.0.0-dev.a6e5f63",
4
4
  "description": "Skybridge is a framework for building ChatGPT and MCP Apps",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/alpic-ai/skybridge.git"
8
8
  },
9
9
  "type": "module",
10
+ "sideEffects": false,
10
11
  "engines": {
11
- "node": ">=22.0.0"
12
+ "node": ">=22.23.1"
12
13
  },
13
14
  "files": [
14
15
  "dist",
@@ -41,28 +42,31 @@
41
42
  "license": "ISC",
42
43
  "peerDependencies": {
43
44
  "@modelcontextprotocol/sdk": ">=1.27.0",
44
- "@skybridge/devtools": "^1.0.0",
45
+ "@skybridge/devtools": "^1.1.0",
45
46
  "nodemon": ">=3.0.0",
46
47
  "react": ">=18.0.0",
47
48
  "react-dom": ">=18.0.0",
48
49
  "vite": ">=7.3.1"
49
50
  },
50
51
  "dependencies": {
51
- "@babel/core": "^7.29.0",
52
- "@modelcontextprotocol/ext-apps": "^1.3.2",
53
- "@oclif/core": "^4.10.3",
52
+ "@babel/core": "^7.29.7",
53
+ "@modelcontextprotocol/ext-apps": "^1.7.4",
54
+ "@oclif/core": "^4.11.14",
54
55
  "ci-info": "^4.4.0",
55
56
  "cors": "^2.8.6",
56
57
  "cross-spawn": "^7.0.6",
57
58
  "dequal": "^2.0.3",
58
- "es-toolkit": "^1.45.1",
59
+ "es-toolkit": "^1.49.0",
60
+ "esbuild": "^0.28.1",
59
61
  "express": "^5.2.1",
60
62
  "handlebars": "^4.7.9",
61
- "ink": "^7.0.0",
63
+ "ink": "^7.1.1",
64
+ "jose": "^6.2.3",
62
65
  "open": "^11.0.0",
63
- "posthog-node": "^5.28.9",
66
+ "posthog-node": "^5.45.2",
64
67
  "superjson": "^2.2.6",
65
- "zustand": "^5.0.12"
68
+ "yaml": "^2.9.0",
69
+ "zustand": "^5.0.14"
66
70
  },
67
71
  "devDependencies": {
68
72
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -73,18 +77,18 @@
73
77
  "@types/cors": "^2.8.19",
74
78
  "@types/cross-spawn": "^6.0.6",
75
79
  "@types/express": "^5.0.6",
76
- "@types/jsdom": "^28.0.1",
77
- "@types/node": "^24.12.0",
78
- "@types/react": "^19.2.14",
80
+ "@types/jsdom": "^28.0.3",
81
+ "@types/node": "^24.13.3",
82
+ "@types/react": "^19.2.17",
79
83
  "@types/react-dom": "^19.2.3",
80
- "@vitest/ui": "^4.1.4",
81
- "jsdom": "^29.0.1",
84
+ "@vitest/ui": "^4.1.10",
85
+ "jsdom": "^29.1.1",
82
86
  "shx": "^0.4.0",
83
87
  "ts-node": "^10.9.2",
84
- "typescript": "^6.0.2",
85
- "vite": "^8.0.0",
86
- "vitest": "^4.1.4",
87
- "zod": "^4.3.6"
88
+ "typescript": "^6.0.3",
89
+ "vite": "^8.1.5",
90
+ "vitest": "^4.1.10",
91
+ "zod": "^4.4.3"
88
92
  },
89
93
  "bin": {
90
94
  "sb": "./bin/run.js",
@@ -1 +0,0 @@
1
- export declare function resolveViewsDir(root: string): Promise<string | undefined>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-views-dir.js","sourceRoot":"","sources":["../../src/cli/resolve-views-dir.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY;IAEZ,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EACxC,SAAS,EACT,IAAI,CACL,CAAC;IAEF,MAAM,iBAAiB,GAAG,CACxB,KAAc,EAC2C,EAAE,CAC3D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;IAE9C,MAAM,OAAO,GAA0D,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC;AACpE,CAAC","sourcesContent":["export async function resolveViewsDir(\n root: string,\n): Promise<string | undefined> {\n const { loadConfigFromFile } = await import(\"vite\");\n const loaded = await loadConfigFromFile(\n { command: \"build\", mode: \"production\" },\n undefined,\n root,\n );\n\n const isPluginCandidate = (\n value: unknown,\n ): value is { name?: string; api?: { viewsDir?: string } } =>\n typeof value === \"object\" && value !== null;\n\n const plugins: Array<{ name?: string; api?: { viewsDir?: string } }> = [];\n const walk = (value: unknown) => {\n if (Array.isArray(value)) {\n value.forEach(walk);\n } else if (isPluginCandidate(value)) {\n plugins.push(value);\n }\n };\n walk(loaded?.config.plugins ?? []);\n return plugins.find((p) => p.name === \"skybridge\")?.api?.viewsDir;\n}\n"]}
@@ -1,27 +0,0 @@
1
- import type { McpAppBridge } from "./mcp-app/bridge.js";
2
- import type { HostContextStore } from "./types.js";
3
- /**
4
- * Build the host-context store map sourced from the MCP App bridge.
5
- * `display` and `viewState` are *not* included here; those are handled
6
- * by the adaptor itself because they have transport-specific overlays
7
- * and additional state (polyfill modal state, localStorage hydration).
8
- */
9
- export declare function buildMcpContextStores(bridge: McpAppBridge): {
10
- theme: HostContextStore<"theme">;
11
- locale: HostContextStore<"locale">;
12
- safeArea: HostContextStore<"safeArea">;
13
- displayMode: HostContextStore<"displayMode">;
14
- maxHeight: HostContextStore<"maxHeight">;
15
- userAgent: HostContextStore<"userAgent">;
16
- toolInput: HostContextStore<"toolInput">;
17
- toolOutput: HostContextStore<"toolOutput">;
18
- toolResponseMetadata: HostContextStore<"toolResponseMetadata">;
19
- };
20
- /**
21
- * Build the Apps-SDK-sourced overlay stores (`display`, `viewState`).
22
- * Used by `HostAdaptor` only when `window.openai` is present.
23
- */
24
- export declare function buildAppsSdkOverlayStores(bridge: import("./apps-sdk/bridge.js").AppsSdkBridge): {
25
- display: HostContextStore<"display">;
26
- viewState: HostContextStore<"viewState">;
27
- };
@@ -1,73 +0,0 @@
1
- import { dequal } from "dequal/lite";
2
- /**
3
- * Build a memoized {@link HostContextStore} backed by one or more
4
- * `McpAppBridge` context keys. Recomputed values are deep-compared via
5
- * `dequal` so unchanged snapshots return the cached reference.
6
- */
7
- function createMcpStore(bridge, keys, computeSnapshot) {
8
- let cachedValue;
9
- return {
10
- subscribe: bridge.subscribe(keys),
11
- getSnapshot: () => {
12
- const context = Object.fromEntries(keys.map((k) => [k, bridge.getSnapshot(k)]));
13
- const newValue = computeSnapshot(context);
14
- if (cachedValue !== undefined && dequal(cachedValue, newValue)) {
15
- return cachedValue;
16
- }
17
- cachedValue = newValue;
18
- return newValue;
19
- },
20
- };
21
- }
22
- /**
23
- * Build the host-context store map sourced from the MCP App bridge.
24
- * `display` and `viewState` are *not* included here; those are handled
25
- * by the adaptor itself because they have transport-specific overlays
26
- * and additional state (polyfill modal state, localStorage hydration).
27
- */
28
- export function buildMcpContextStores(bridge) {
29
- return {
30
- theme: createMcpStore(bridge, ["theme"], ({ theme }) => theme ?? "light"),
31
- locale: createMcpStore(bridge, ["locale"], ({ locale }) => locale ?? "en-US"),
32
- safeArea: createMcpStore(bridge, ["safeAreaInsets"], ({ safeAreaInsets }) => ({
33
- insets: safeAreaInsets ?? { top: 0, right: 0, bottom: 0, left: 0 },
34
- })),
35
- displayMode: createMcpStore(bridge, ["displayMode"], ({ displayMode }) => displayMode ?? "inline"),
36
- maxHeight: createMcpStore(bridge, ["containerDimensions"], ({ containerDimensions }) => {
37
- if (containerDimensions && "maxHeight" in containerDimensions) {
38
- return containerDimensions.maxHeight;
39
- }
40
- return undefined;
41
- }),
42
- userAgent: createMcpStore(bridge, ["platform", "deviceCapabilities"], ({ platform, deviceCapabilities }) => ({
43
- device: {
44
- type: platform === "web" ? "desktop" : (platform ?? "unknown"),
45
- },
46
- capabilities: {
47
- hover: true,
48
- touch: true,
49
- ...deviceCapabilities,
50
- },
51
- })),
52
- toolInput: createMcpStore(bridge, ["toolInput"], ({ toolInput }) => toolInput ?? null),
53
- toolOutput: createMcpStore(bridge, ["toolResult"], ({ toolResult }) => toolResult?.structuredContent ?? null),
54
- toolResponseMetadata: createMcpStore(bridge, ["toolResult"], ({ toolResult }) => toolResult?._meta ?? null),
55
- };
56
- }
57
- /**
58
- * Build the Apps-SDK-sourced overlay stores (`display`, `viewState`).
59
- * Used by `HostAdaptor` only when `window.openai` is present.
60
- */
61
- export function buildAppsSdkOverlayStores(bridge) {
62
- return {
63
- display: {
64
- subscribe: bridge.subscribe("view"),
65
- getSnapshot: () => bridge.getSnapshot("view"),
66
- },
67
- viewState: {
68
- subscribe: bridge.subscribe("widgetState"),
69
- getSnapshot: () => bridge.getSnapshot("widgetState")?.modelContent ?? null,
70
- },
71
- };
72
- }
73
- //# sourceMappingURL=host-context-stores.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-context-stores.js","sourceRoot":"","sources":["../../../src/web/bridges/host-context-stores.ts"],"names":[],"mappings":"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","sourcesContent":["import { dequal } from \"dequal/lite\";\nimport type { McpAppBridge } from \"./mcp-app/bridge.js\";\nimport type { McpAppContext, McpAppContextKey } from \"./mcp-app/types.js\";\nimport type { HostContextStore } from \"./types.js\";\n\ntype PickContext<K extends readonly McpAppContextKey[]> = {\n [P in K[number]]: McpAppContext[P];\n};\n\n/**\n * Build a memoized {@link HostContextStore} backed by one or more\n * `McpAppBridge` context keys. Recomputed values are deep-compared via\n * `dequal` so unchanged snapshots return the cached reference.\n */\nfunction createMcpStore<const Keys extends readonly McpAppContextKey[], R>(\n bridge: McpAppBridge,\n keys: Keys,\n computeSnapshot: (context: PickContext<Keys>) => R,\n) {\n let cachedValue: R | undefined;\n return {\n subscribe: bridge.subscribe(keys),\n getSnapshot: () => {\n const context = Object.fromEntries(\n keys.map((k) => [k, bridge.getSnapshot(k)]),\n ) as PickContext<Keys>;\n const newValue = computeSnapshot(context);\n if (cachedValue !== undefined && dequal(cachedValue, newValue)) {\n return cachedValue;\n }\n cachedValue = newValue;\n return newValue;\n },\n };\n}\n\n/**\n * Build the host-context store map sourced from the MCP App bridge.\n * `display` and `viewState` are *not* included here; those are handled\n * by the adaptor itself because they have transport-specific overlays\n * and additional state (polyfill modal state, localStorage hydration).\n */\nexport function buildMcpContextStores(bridge: McpAppBridge): {\n theme: HostContextStore<\"theme\">;\n locale: HostContextStore<\"locale\">;\n safeArea: HostContextStore<\"safeArea\">;\n displayMode: HostContextStore<\"displayMode\">;\n maxHeight: HostContextStore<\"maxHeight\">;\n userAgent: HostContextStore<\"userAgent\">;\n toolInput: HostContextStore<\"toolInput\">;\n toolOutput: HostContextStore<\"toolOutput\">;\n toolResponseMetadata: HostContextStore<\"toolResponseMetadata\">;\n} {\n return {\n theme: createMcpStore(bridge, [\"theme\"], ({ theme }) => theme ?? \"light\"),\n locale: createMcpStore(\n bridge,\n [\"locale\"],\n ({ locale }) => locale ?? \"en-US\",\n ),\n safeArea: createMcpStore(\n bridge,\n [\"safeAreaInsets\"],\n ({ safeAreaInsets }) => ({\n insets: safeAreaInsets ?? { top: 0, right: 0, bottom: 0, left: 0 },\n }),\n ),\n displayMode: createMcpStore(\n bridge,\n [\"displayMode\"],\n ({ displayMode }) => displayMode ?? \"inline\",\n ),\n maxHeight: createMcpStore(\n bridge,\n [\"containerDimensions\"],\n ({ containerDimensions }) => {\n if (containerDimensions && \"maxHeight\" in containerDimensions) {\n return containerDimensions.maxHeight;\n }\n return undefined;\n },\n ),\n userAgent: createMcpStore(\n bridge,\n [\"platform\", \"deviceCapabilities\"],\n ({ platform, deviceCapabilities }) => ({\n device: {\n type: platform === \"web\" ? \"desktop\" : (platform ?? \"unknown\"),\n },\n capabilities: {\n hover: true,\n touch: true,\n ...deviceCapabilities,\n },\n }),\n ),\n toolInput: createMcpStore(\n bridge,\n [\"toolInput\"],\n ({ toolInput }) => toolInput ?? null,\n ),\n toolOutput: createMcpStore(\n bridge,\n [\"toolResult\"],\n ({ toolResult }) => toolResult?.structuredContent ?? null,\n ),\n toolResponseMetadata: createMcpStore(\n bridge,\n [\"toolResult\"],\n ({ toolResult }) => toolResult?._meta ?? null,\n ),\n };\n}\n\n/**\n * Build the Apps-SDK-sourced overlay stores (`display`, `viewState`).\n * Used by `HostAdaptor` only when `window.openai` is present.\n */\nexport function buildAppsSdkOverlayStores(\n bridge: import(\"./apps-sdk/bridge.js\").AppsSdkBridge,\n): {\n display: HostContextStore<\"display\">;\n viewState: HostContextStore<\"viewState\">;\n} {\n return {\n display: {\n subscribe: bridge.subscribe(\"view\"),\n getSnapshot: () => bridge.getSnapshot(\"view\"),\n },\n viewState: {\n subscribe: bridge.subscribe(\"widgetState\"),\n getSnapshot: () =>\n bridge.getSnapshot(\"widgetState\")?.modelContent ?? null,\n },\n };\n}\n"]}