@frontmcp/ui 0.5.1 → 0.6.1

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 (805) hide show
  1. package/README.md +140 -362
  2. package/bridge/adapters/base-adapter.d.ts +104 -0
  3. package/bridge/adapters/base-adapter.d.ts.map +1 -0
  4. package/bridge/adapters/claude.adapter.d.ts +67 -0
  5. package/bridge/adapters/claude.adapter.d.ts.map +1 -0
  6. package/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  7. package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  8. package/bridge/adapters/gemini.adapter.d.ts +64 -0
  9. package/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  10. package/bridge/adapters/generic.adapter.d.ts +56 -0
  11. package/bridge/adapters/generic.adapter.d.ts.map +1 -0
  12. package/bridge/adapters/index.d.ts +26 -0
  13. package/bridge/adapters/index.d.ts.map +1 -0
  14. package/bridge/adapters/openai.adapter.d.ts +65 -0
  15. package/bridge/adapters/openai.adapter.d.ts.map +1 -0
  16. package/bridge/core/adapter-registry.d.ts +122 -0
  17. package/bridge/core/adapter-registry.d.ts.map +1 -0
  18. package/bridge/core/bridge-factory.d.ts +199 -0
  19. package/bridge/core/bridge-factory.d.ts.map +1 -0
  20. package/bridge/core/index.d.ts +10 -0
  21. package/bridge/core/index.d.ts.map +1 -0
  22. package/bridge/index.d.ts +62 -0
  23. package/bridge/index.d.ts.map +1 -0
  24. package/bridge/index.js +2540 -0
  25. package/bridge/runtime/iife-generator.d.ts +62 -0
  26. package/bridge/runtime/iife-generator.d.ts.map +1 -0
  27. package/bridge/runtime/index.d.ts +10 -0
  28. package/bridge/runtime/index.d.ts.map +1 -0
  29. package/bridge/types.d.ts +386 -0
  30. package/bridge/types.d.ts.map +1 -0
  31. package/bundler/bundler.d.ts +208 -0
  32. package/bundler/bundler.d.ts.map +1 -0
  33. package/bundler/cache.d.ts +173 -0
  34. package/bundler/cache.d.ts.map +1 -0
  35. package/bundler/file-cache/component-builder.d.ts +167 -0
  36. package/bundler/file-cache/component-builder.d.ts.map +1 -0
  37. package/bundler/file-cache/hash-calculator.d.ts +155 -0
  38. package/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  39. package/bundler/file-cache/index.d.ts +12 -0
  40. package/bundler/file-cache/index.d.ts.map +1 -0
  41. package/bundler/file-cache/storage/filesystem.d.ts +149 -0
  42. package/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  43. package/bundler/file-cache/storage/index.d.ts +11 -0
  44. package/bundler/file-cache/storage/index.d.ts.map +1 -0
  45. package/bundler/file-cache/storage/interface.d.ts +152 -0
  46. package/bundler/file-cache/storage/interface.d.ts.map +1 -0
  47. package/bundler/file-cache/storage/redis.d.ts +139 -0
  48. package/bundler/file-cache/storage/redis.d.ts.map +1 -0
  49. package/bundler/index.d.ts +43 -0
  50. package/bundler/index.d.ts.map +1 -0
  51. package/bundler/index.js +3707 -0
  52. package/bundler/sandbox/enclave-adapter.d.ts +121 -0
  53. package/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  54. package/bundler/sandbox/executor.d.ts +14 -0
  55. package/bundler/sandbox/executor.d.ts.map +1 -0
  56. package/bundler/sandbox/policy.d.ts +62 -0
  57. package/bundler/sandbox/policy.d.ts.map +1 -0
  58. package/bundler/types.d.ts +702 -0
  59. package/bundler/types.d.ts.map +1 -0
  60. package/components/alert.d.ts +66 -0
  61. package/components/alert.d.ts.map +1 -0
  62. package/components/alert.schema.d.ts +98 -0
  63. package/components/alert.schema.d.ts.map +1 -0
  64. package/components/avatar.d.ts +77 -0
  65. package/components/avatar.d.ts.map +1 -0
  66. package/components/avatar.schema.d.ts +170 -0
  67. package/components/avatar.schema.d.ts.map +1 -0
  68. package/components/badge.d.ts +64 -0
  69. package/components/badge.d.ts.map +1 -0
  70. package/components/badge.schema.d.ts +91 -0
  71. package/components/badge.schema.d.ts.map +1 -0
  72. package/components/button.d.ts +100 -0
  73. package/components/button.d.ts.map +1 -0
  74. package/components/button.schema.d.ts +120 -0
  75. package/components/button.schema.d.ts.map +1 -0
  76. package/components/card.d.ts +53 -0
  77. package/components/card.d.ts.map +1 -0
  78. package/components/card.schema.d.ts +93 -0
  79. package/components/card.schema.d.ts.map +1 -0
  80. package/components/form.d.ts +212 -0
  81. package/components/form.d.ts.map +1 -0
  82. package/components/form.schema.d.ts +365 -0
  83. package/components/form.schema.d.ts.map +1 -0
  84. package/components/index.d.ts +29 -0
  85. package/components/index.d.ts.map +1 -0
  86. package/components/index.js +2525 -0
  87. package/components/list.d.ts +121 -0
  88. package/components/list.d.ts.map +1 -0
  89. package/components/list.schema.d.ts +129 -0
  90. package/components/list.schema.d.ts.map +1 -0
  91. package/components/modal.d.ts +100 -0
  92. package/components/modal.d.ts.map +1 -0
  93. package/components/modal.schema.d.ts +151 -0
  94. package/components/modal.schema.d.ts.map +1 -0
  95. package/components/table.d.ts +91 -0
  96. package/components/table.d.ts.map +1 -0
  97. package/components/table.schema.d.ts +123 -0
  98. package/components/table.schema.d.ts.map +1 -0
  99. package/esm/bridge/adapters/base-adapter.d.ts +104 -0
  100. package/esm/bridge/adapters/base-adapter.d.ts.map +1 -0
  101. package/esm/bridge/adapters/claude.adapter.d.ts +67 -0
  102. package/esm/bridge/adapters/claude.adapter.d.ts.map +1 -0
  103. package/esm/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  104. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  105. package/esm/bridge/adapters/gemini.adapter.d.ts +64 -0
  106. package/esm/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  107. package/esm/bridge/adapters/generic.adapter.d.ts +56 -0
  108. package/esm/bridge/adapters/generic.adapter.d.ts.map +1 -0
  109. package/esm/bridge/adapters/index.d.ts +26 -0
  110. package/esm/bridge/adapters/index.d.ts.map +1 -0
  111. package/esm/bridge/adapters/openai.adapter.d.ts +65 -0
  112. package/esm/bridge/adapters/openai.adapter.d.ts.map +1 -0
  113. package/esm/bridge/core/adapter-registry.d.ts +122 -0
  114. package/esm/bridge/core/adapter-registry.d.ts.map +1 -0
  115. package/esm/bridge/core/bridge-factory.d.ts +199 -0
  116. package/esm/bridge/core/bridge-factory.d.ts.map +1 -0
  117. package/esm/bridge/core/index.d.ts +10 -0
  118. package/esm/bridge/core/index.d.ts.map +1 -0
  119. package/esm/bridge/index.d.ts +62 -0
  120. package/esm/bridge/index.d.ts.map +1 -0
  121. package/esm/bridge/index.js +2487 -0
  122. package/esm/bridge/runtime/iife-generator.d.ts +62 -0
  123. package/esm/bridge/runtime/iife-generator.d.ts.map +1 -0
  124. package/esm/bridge/runtime/index.d.ts +10 -0
  125. package/esm/bridge/runtime/index.d.ts.map +1 -0
  126. package/esm/bridge/types.d.ts +386 -0
  127. package/esm/bridge/types.d.ts.map +1 -0
  128. package/esm/bundler/bundler.d.ts +208 -0
  129. package/esm/bundler/bundler.d.ts.map +1 -0
  130. package/esm/bundler/cache.d.ts +173 -0
  131. package/esm/bundler/cache.d.ts.map +1 -0
  132. package/esm/bundler/file-cache/component-builder.d.ts +167 -0
  133. package/esm/bundler/file-cache/component-builder.d.ts.map +1 -0
  134. package/esm/bundler/file-cache/hash-calculator.d.ts +155 -0
  135. package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  136. package/esm/bundler/file-cache/index.d.ts +12 -0
  137. package/esm/bundler/file-cache/index.d.ts.map +1 -0
  138. package/esm/bundler/file-cache/storage/filesystem.d.ts +149 -0
  139. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  140. package/esm/bundler/file-cache/storage/index.d.ts +11 -0
  141. package/esm/bundler/file-cache/storage/index.d.ts.map +1 -0
  142. package/esm/bundler/file-cache/storage/interface.d.ts +152 -0
  143. package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -0
  144. package/esm/bundler/file-cache/storage/redis.d.ts +139 -0
  145. package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -0
  146. package/esm/bundler/index.d.ts +43 -0
  147. package/esm/bundler/index.d.ts.map +1 -0
  148. package/esm/bundler/index.js +3640 -0
  149. package/esm/bundler/sandbox/enclave-adapter.d.ts +121 -0
  150. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  151. package/esm/bundler/sandbox/executor.d.ts +14 -0
  152. package/esm/bundler/sandbox/executor.d.ts.map +1 -0
  153. package/esm/bundler/sandbox/policy.d.ts +62 -0
  154. package/esm/bundler/sandbox/policy.d.ts.map +1 -0
  155. package/esm/bundler/types.d.ts +702 -0
  156. package/esm/bundler/types.d.ts.map +1 -0
  157. package/esm/components/alert.d.ts +66 -0
  158. package/esm/components/alert.d.ts.map +1 -0
  159. package/esm/components/alert.schema.d.ts +98 -0
  160. package/esm/components/alert.schema.d.ts.map +1 -0
  161. package/esm/components/avatar.d.ts +77 -0
  162. package/esm/components/avatar.d.ts.map +1 -0
  163. package/esm/components/avatar.schema.d.ts +170 -0
  164. package/esm/components/avatar.schema.d.ts.map +1 -0
  165. package/esm/components/badge.d.ts +64 -0
  166. package/esm/components/badge.d.ts.map +1 -0
  167. package/esm/components/badge.schema.d.ts +91 -0
  168. package/esm/components/badge.schema.d.ts.map +1 -0
  169. package/esm/components/button.d.ts +100 -0
  170. package/esm/components/button.d.ts.map +1 -0
  171. package/esm/components/button.schema.d.ts +120 -0
  172. package/esm/components/button.schema.d.ts.map +1 -0
  173. package/esm/components/card.d.ts +53 -0
  174. package/esm/components/card.d.ts.map +1 -0
  175. package/esm/components/card.schema.d.ts +93 -0
  176. package/esm/components/card.schema.d.ts.map +1 -0
  177. package/esm/components/form.d.ts +212 -0
  178. package/esm/components/form.d.ts.map +1 -0
  179. package/esm/components/form.schema.d.ts +365 -0
  180. package/esm/components/form.schema.d.ts.map +1 -0
  181. package/esm/components/index.d.ts +29 -0
  182. package/esm/components/index.d.ts.map +1 -0
  183. package/esm/components/index.js +2396 -0
  184. package/esm/components/list.d.ts +121 -0
  185. package/esm/components/list.d.ts.map +1 -0
  186. package/esm/components/list.schema.d.ts +129 -0
  187. package/esm/components/list.schema.d.ts.map +1 -0
  188. package/esm/components/modal.d.ts +100 -0
  189. package/esm/components/modal.d.ts.map +1 -0
  190. package/esm/components/modal.schema.d.ts +151 -0
  191. package/esm/components/modal.schema.d.ts.map +1 -0
  192. package/esm/components/table.d.ts +91 -0
  193. package/esm/components/table.d.ts.map +1 -0
  194. package/esm/components/table.schema.d.ts +123 -0
  195. package/esm/components/table.schema.d.ts.map +1 -0
  196. package/esm/index.d.ts +40 -0
  197. package/esm/index.d.ts.map +1 -0
  198. package/esm/index.js +8326 -0
  199. package/esm/layouts/base.d.ts +86 -0
  200. package/esm/layouts/base.d.ts.map +1 -0
  201. package/esm/layouts/index.d.ts +8 -0
  202. package/esm/layouts/index.d.ts.map +1 -0
  203. package/esm/layouts/index.js +409 -0
  204. package/esm/layouts/presets.d.ts +134 -0
  205. package/esm/layouts/presets.d.ts.map +1 -0
  206. package/esm/package.json +72 -0
  207. package/esm/pages/consent.d.ts +117 -0
  208. package/esm/pages/consent.d.ts.map +1 -0
  209. package/esm/pages/error.d.ts +101 -0
  210. package/esm/pages/error.d.ts.map +1 -0
  211. package/esm/pages/index.d.ts +9 -0
  212. package/esm/pages/index.d.ts.map +1 -0
  213. package/esm/pages/index.js +1036 -0
  214. package/esm/react/Alert.d.ts +101 -0
  215. package/esm/react/Alert.d.ts.map +1 -0
  216. package/esm/react/Badge.d.ts +100 -0
  217. package/esm/react/Badge.d.ts.map +1 -0
  218. package/esm/react/Button.d.ts +108 -0
  219. package/esm/react/Button.d.ts.map +1 -0
  220. package/esm/react/Card.d.ts +103 -0
  221. package/esm/react/Card.d.ts.map +1 -0
  222. package/esm/react/hooks/context.d.ts +179 -0
  223. package/esm/react/hooks/context.d.ts.map +1 -0
  224. package/esm/react/hooks/index.d.ts +42 -0
  225. package/esm/react/hooks/index.d.ts.map +1 -0
  226. package/esm/react/hooks/tools.d.ts +284 -0
  227. package/esm/react/hooks/tools.d.ts.map +1 -0
  228. package/esm/react/index.d.ts +80 -0
  229. package/esm/react/index.d.ts.map +1 -0
  230. package/esm/react/index.js +3124 -0
  231. package/esm/react/types.d.ts +105 -0
  232. package/esm/react/types.d.ts.map +1 -0
  233. package/esm/react/utils.d.ts +43 -0
  234. package/esm/react/utils.d.ts.map +1 -0
  235. package/esm/render/index.d.ts +8 -0
  236. package/esm/render/index.d.ts.map +1 -0
  237. package/esm/render/index.js +45 -0
  238. package/esm/render/prerender.d.ts +57 -0
  239. package/esm/render/prerender.d.ts.map +1 -0
  240. package/esm/renderers/index.d.ts +21 -0
  241. package/esm/renderers/index.d.ts.map +1 -0
  242. package/esm/renderers/index.js +381 -0
  243. package/esm/renderers/react.adapter.d.ts +70 -0
  244. package/esm/renderers/react.adapter.d.ts.map +1 -0
  245. package/esm/renderers/react.renderer.d.ts +96 -0
  246. package/esm/renderers/react.renderer.d.ts.map +1 -0
  247. package/esm/universal/UniversalApp.d.ts +108 -0
  248. package/esm/universal/UniversalApp.d.ts.map +1 -0
  249. package/esm/universal/cached-runtime.d.ts +115 -0
  250. package/esm/universal/cached-runtime.d.ts.map +1 -0
  251. package/esm/universal/context.d.ts +122 -0
  252. package/esm/universal/context.d.ts.map +1 -0
  253. package/esm/universal/index.d.ts +57 -0
  254. package/esm/universal/index.d.ts.map +1 -0
  255. package/esm/universal/index.js +1755 -0
  256. package/esm/universal/renderers/html.renderer.d.ts +37 -0
  257. package/esm/universal/renderers/html.renderer.d.ts.map +1 -0
  258. package/esm/universal/renderers/index.d.ts +112 -0
  259. package/esm/universal/renderers/index.d.ts.map +1 -0
  260. package/esm/universal/renderers/markdown.renderer.d.ts +33 -0
  261. package/esm/universal/renderers/markdown.renderer.d.ts.map +1 -0
  262. package/esm/universal/renderers/mdx.renderer.d.ts +38 -0
  263. package/esm/universal/renderers/mdx.renderer.d.ts.map +1 -0
  264. package/esm/universal/renderers/react.renderer.d.ts +46 -0
  265. package/esm/universal/renderers/react.renderer.d.ts.map +1 -0
  266. package/esm/universal/runtime-builder.d.ts +33 -0
  267. package/esm/universal/runtime-builder.d.ts.map +1 -0
  268. package/esm/universal/store.d.ts +135 -0
  269. package/esm/universal/store.d.ts.map +1 -0
  270. package/esm/universal/types.d.ts +199 -0
  271. package/esm/universal/types.d.ts.map +1 -0
  272. package/esm/web-components/core/attribute-parser.d.ts +82 -0
  273. package/esm/web-components/core/attribute-parser.d.ts.map +1 -0
  274. package/esm/web-components/core/base-element.d.ts +197 -0
  275. package/esm/web-components/core/base-element.d.ts.map +1 -0
  276. package/esm/web-components/core/index.d.ts +9 -0
  277. package/esm/web-components/core/index.d.ts.map +1 -0
  278. package/esm/web-components/elements/fmcp-alert.d.ts +46 -0
  279. package/esm/web-components/elements/fmcp-alert.d.ts.map +1 -0
  280. package/esm/web-components/elements/fmcp-badge.d.ts +47 -0
  281. package/esm/web-components/elements/fmcp-badge.d.ts.map +1 -0
  282. package/esm/web-components/elements/fmcp-button.d.ts +117 -0
  283. package/esm/web-components/elements/fmcp-button.d.ts.map +1 -0
  284. package/esm/web-components/elements/fmcp-card.d.ts +53 -0
  285. package/esm/web-components/elements/fmcp-card.d.ts.map +1 -0
  286. package/esm/web-components/elements/fmcp-input.d.ts +96 -0
  287. package/esm/web-components/elements/fmcp-input.d.ts.map +1 -0
  288. package/esm/web-components/elements/fmcp-select.d.ts +100 -0
  289. package/esm/web-components/elements/fmcp-select.d.ts.map +1 -0
  290. package/esm/web-components/elements/index.d.ts +13 -0
  291. package/esm/web-components/elements/index.d.ts.map +1 -0
  292. package/esm/web-components/index.d.ts +50 -0
  293. package/esm/web-components/index.d.ts.map +1 -0
  294. package/esm/web-components/index.js +1993 -0
  295. package/esm/web-components/register.d.ts +57 -0
  296. package/esm/web-components/register.d.ts.map +1 -0
  297. package/esm/web-components/types.d.ts +122 -0
  298. package/esm/web-components/types.d.ts.map +1 -0
  299. package/esm/widgets/index.d.ts +8 -0
  300. package/esm/widgets/index.d.ts.map +1 -0
  301. package/esm/widgets/index.js +883 -0
  302. package/esm/widgets/progress.d.ts +133 -0
  303. package/esm/widgets/progress.d.ts.map +1 -0
  304. package/esm/widgets/resource.d.ts +163 -0
  305. package/esm/widgets/resource.d.ts.map +1 -0
  306. package/index.d.ts +40 -0
  307. package/index.d.ts.map +1 -0
  308. package/index.js +8526 -0
  309. package/layouts/base.d.ts +86 -0
  310. package/layouts/base.d.ts.map +1 -0
  311. package/layouts/index.d.ts +8 -0
  312. package/layouts/index.d.ts.map +1 -0
  313. package/layouts/index.js +437 -0
  314. package/layouts/presets.d.ts +134 -0
  315. package/layouts/presets.d.ts.map +1 -0
  316. package/package.json +33 -110
  317. package/pages/consent.d.ts +117 -0
  318. package/pages/consent.d.ts.map +1 -0
  319. package/pages/error.d.ts +101 -0
  320. package/pages/error.d.ts.map +1 -0
  321. package/pages/index.d.ts +9 -0
  322. package/pages/index.d.ts.map +1 -0
  323. package/pages/index.js +1065 -0
  324. package/react/Alert.d.ts +101 -0
  325. package/react/Alert.d.ts.map +1 -0
  326. package/react/Badge.d.ts +100 -0
  327. package/react/Badge.d.ts.map +1 -0
  328. package/react/Button.d.ts +108 -0
  329. package/react/Button.d.ts.map +1 -0
  330. package/react/Card.d.ts +103 -0
  331. package/react/Card.d.ts.map +1 -0
  332. package/react/hooks/context.d.ts +179 -0
  333. package/react/hooks/context.d.ts.map +1 -0
  334. package/react/hooks/index.d.ts +42 -0
  335. package/react/hooks/index.d.ts.map +1 -0
  336. package/react/hooks/tools.d.ts +284 -0
  337. package/react/hooks/tools.d.ts.map +1 -0
  338. package/react/index.d.ts +80 -0
  339. package/react/index.d.ts.map +1 -0
  340. package/react/index.js +3160 -0
  341. package/react/types.d.ts +105 -0
  342. package/react/types.d.ts.map +1 -0
  343. package/react/utils.d.ts +43 -0
  344. package/react/utils.d.ts.map +1 -0
  345. package/render/index.d.ts +8 -0
  346. package/render/index.d.ts.map +1 -0
  347. package/render/index.js +77 -0
  348. package/render/prerender.d.ts +57 -0
  349. package/render/prerender.d.ts.map +1 -0
  350. package/renderers/index.d.ts +21 -0
  351. package/renderers/index.d.ts.map +1 -0
  352. package/renderers/index.js +416 -0
  353. package/renderers/react.adapter.d.ts +70 -0
  354. package/renderers/react.adapter.d.ts.map +1 -0
  355. package/renderers/react.renderer.d.ts +96 -0
  356. package/renderers/react.renderer.d.ts.map +1 -0
  357. package/universal/UniversalApp.d.ts +108 -0
  358. package/universal/UniversalApp.d.ts.map +1 -0
  359. package/universal/cached-runtime.d.ts +115 -0
  360. package/universal/cached-runtime.d.ts.map +1 -0
  361. package/universal/context.d.ts +122 -0
  362. package/universal/context.d.ts.map +1 -0
  363. package/universal/index.d.ts +57 -0
  364. package/universal/index.d.ts.map +1 -0
  365. package/universal/index.js +1841 -0
  366. package/universal/renderers/html.renderer.d.ts +37 -0
  367. package/universal/renderers/html.renderer.d.ts.map +1 -0
  368. package/universal/renderers/index.d.ts +112 -0
  369. package/universal/renderers/index.d.ts.map +1 -0
  370. package/universal/renderers/markdown.renderer.d.ts +33 -0
  371. package/universal/renderers/markdown.renderer.d.ts.map +1 -0
  372. package/universal/renderers/mdx.renderer.d.ts +38 -0
  373. package/universal/renderers/mdx.renderer.d.ts.map +1 -0
  374. package/universal/renderers/react.renderer.d.ts +46 -0
  375. package/universal/renderers/react.renderer.d.ts.map +1 -0
  376. package/universal/runtime-builder.d.ts +33 -0
  377. package/universal/runtime-builder.d.ts.map +1 -0
  378. package/universal/store.d.ts +135 -0
  379. package/universal/store.d.ts.map +1 -0
  380. package/universal/types.d.ts +199 -0
  381. package/universal/types.d.ts.map +1 -0
  382. package/web-components/core/attribute-parser.d.ts +82 -0
  383. package/web-components/core/attribute-parser.d.ts.map +1 -0
  384. package/web-components/core/base-element.d.ts +197 -0
  385. package/web-components/core/base-element.d.ts.map +1 -0
  386. package/web-components/core/index.d.ts +9 -0
  387. package/web-components/core/index.d.ts.map +1 -0
  388. package/web-components/elements/fmcp-alert.d.ts +46 -0
  389. package/web-components/elements/fmcp-alert.d.ts.map +1 -0
  390. package/web-components/elements/fmcp-badge.d.ts +47 -0
  391. package/web-components/elements/fmcp-badge.d.ts.map +1 -0
  392. package/web-components/elements/fmcp-button.d.ts +117 -0
  393. package/web-components/elements/fmcp-button.d.ts.map +1 -0
  394. package/web-components/elements/fmcp-card.d.ts +53 -0
  395. package/web-components/elements/fmcp-card.d.ts.map +1 -0
  396. package/web-components/elements/fmcp-input.d.ts +96 -0
  397. package/web-components/elements/fmcp-input.d.ts.map +1 -0
  398. package/web-components/elements/fmcp-select.d.ts +100 -0
  399. package/web-components/elements/fmcp-select.d.ts.map +1 -0
  400. package/web-components/elements/index.d.ts +13 -0
  401. package/web-components/elements/index.d.ts.map +1 -0
  402. package/web-components/index.d.ts +50 -0
  403. package/web-components/index.d.ts.map +1 -0
  404. package/web-components/index.js +2028 -0
  405. package/web-components/register.d.ts +57 -0
  406. package/web-components/register.d.ts.map +1 -0
  407. package/web-components/types.d.ts +122 -0
  408. package/web-components/types.d.ts.map +1 -0
  409. package/widgets/index.d.ts +8 -0
  410. package/widgets/index.d.ts.map +1 -0
  411. package/widgets/index.js +910 -0
  412. package/widgets/progress.d.ts +133 -0
  413. package/widgets/progress.d.ts.map +1 -0
  414. package/widgets/resource.d.ts +163 -0
  415. package/widgets/resource.d.ts.map +1 -0
  416. package/src/adapters/index.d.ts +0 -10
  417. package/src/adapters/index.js +0 -18
  418. package/src/adapters/index.js.map +0 -1
  419. package/src/adapters/platform-meta.d.ts +0 -165
  420. package/src/adapters/platform-meta.js +0 -310
  421. package/src/adapters/platform-meta.js.map +0 -1
  422. package/src/base-template/bridge.d.ts +0 -89
  423. package/src/base-template/bridge.js +0 -452
  424. package/src/base-template/bridge.js.map +0 -1
  425. package/src/base-template/default-base-template.d.ts +0 -91
  426. package/src/base-template/default-base-template.js +0 -435
  427. package/src/base-template/default-base-template.js.map +0 -1
  428. package/src/base-template/index.d.ts +0 -14
  429. package/src/base-template/index.js +0 -30
  430. package/src/base-template/index.js.map +0 -1
  431. package/src/base-template/polyfills.d.ts +0 -30
  432. package/src/base-template/polyfills.js +0 -190
  433. package/src/base-template/polyfills.js.map +0 -1
  434. package/src/base-template/theme-styles.d.ts +0 -73
  435. package/src/base-template/theme-styles.js +0 -95
  436. package/src/base-template/theme-styles.js.map +0 -1
  437. package/src/bridge/adapters/base-adapter.d.ts +0 -103
  438. package/src/bridge/adapters/base-adapter.js +0 -314
  439. package/src/bridge/adapters/base-adapter.js.map +0 -1
  440. package/src/bridge/adapters/claude.adapter.d.ts +0 -66
  441. package/src/bridge/adapters/claude.adapter.js +0 -145
  442. package/src/bridge/adapters/claude.adapter.js.map +0 -1
  443. package/src/bridge/adapters/ext-apps.adapter.d.ts +0 -142
  444. package/src/bridge/adapters/ext-apps.adapter.js +0 -416
  445. package/src/bridge/adapters/ext-apps.adapter.js.map +0 -1
  446. package/src/bridge/adapters/gemini.adapter.d.ts +0 -63
  447. package/src/bridge/adapters/gemini.adapter.js +0 -160
  448. package/src/bridge/adapters/gemini.adapter.js.map +0 -1
  449. package/src/bridge/adapters/generic.adapter.d.ts +0 -55
  450. package/src/bridge/adapters/generic.adapter.js +0 -108
  451. package/src/bridge/adapters/generic.adapter.js.map +0 -1
  452. package/src/bridge/adapters/index.d.ts +0 -25
  453. package/src/bridge/adapters/index.js +0 -65
  454. package/src/bridge/adapters/index.js.map +0 -1
  455. package/src/bridge/adapters/openai.adapter.d.ts +0 -64
  456. package/src/bridge/adapters/openai.adapter.js +0 -194
  457. package/src/bridge/adapters/openai.adapter.js.map +0 -1
  458. package/src/bridge/core/adapter-registry.d.ts +0 -121
  459. package/src/bridge/core/adapter-registry.js +0 -271
  460. package/src/bridge/core/adapter-registry.js.map +0 -1
  461. package/src/bridge/core/bridge-factory.d.ts +0 -198
  462. package/src/bridge/core/bridge-factory.js +0 -428
  463. package/src/bridge/core/bridge-factory.js.map +0 -1
  464. package/src/bridge/core/index.d.ts +0 -9
  465. package/src/bridge/core/index.js +0 -22
  466. package/src/bridge/core/index.js.map +0 -1
  467. package/src/bridge/index.d.ts +0 -61
  468. package/src/bridge/index.js +0 -94
  469. package/src/bridge/index.js.map +0 -1
  470. package/src/bridge/runtime/iife-generator.d.ts +0 -61
  471. package/src/bridge/runtime/iife-generator.js +0 -940
  472. package/src/bridge/runtime/iife-generator.js.map +0 -1
  473. package/src/bridge/runtime/index.d.ts +0 -8
  474. package/src/bridge/runtime/index.js +0 -16
  475. package/src/bridge/runtime/index.js.map +0 -1
  476. package/src/bridge/types.d.ts +0 -385
  477. package/src/bridge/types.js +0 -11
  478. package/src/bridge/types.js.map +0 -1
  479. package/src/build/cdn-resources.d.ts +0 -140
  480. package/src/build/cdn-resources.js +0 -314
  481. package/src/build/cdn-resources.js.map +0 -1
  482. package/src/build/index.d.ts +0 -294
  483. package/src/build/index.js +0 -325
  484. package/src/build/index.js.map +0 -1
  485. package/src/build/widget-manifest.d.ts +0 -212
  486. package/src/build/widget-manifest.js +0 -652
  487. package/src/build/widget-manifest.js.map +0 -1
  488. package/src/bundler/bundler.d.ts +0 -110
  489. package/src/bundler/bundler.js +0 -432
  490. package/src/bundler/bundler.js.map +0 -1
  491. package/src/bundler/cache.d.ts +0 -172
  492. package/src/bundler/cache.js +0 -250
  493. package/src/bundler/cache.js.map +0 -1
  494. package/src/bundler/index.d.ts +0 -41
  495. package/src/bundler/index.js +0 -73
  496. package/src/bundler/index.js.map +0 -1
  497. package/src/bundler/sandbox/enclave-adapter.d.ts +0 -120
  498. package/src/bundler/sandbox/enclave-adapter.js +0 -339
  499. package/src/bundler/sandbox/enclave-adapter.js.map +0 -1
  500. package/src/bundler/sandbox/executor.d.ts +0 -13
  501. package/src/bundler/sandbox/executor.js +0 -22
  502. package/src/bundler/sandbox/executor.js.map +0 -1
  503. package/src/bundler/sandbox/policy.d.ts +0 -61
  504. package/src/bundler/sandbox/policy.js +0 -238
  505. package/src/bundler/sandbox/policy.js.map +0 -1
  506. package/src/bundler/types.d.ts +0 -347
  507. package/src/bundler/types.js +0 -132
  508. package/src/bundler/types.js.map +0 -1
  509. package/src/components/alert.d.ts +0 -71
  510. package/src/components/alert.js +0 -189
  511. package/src/components/alert.js.map +0 -1
  512. package/src/components/alert.schema.d.ts +0 -114
  513. package/src/components/alert.schema.js +0 -105
  514. package/src/components/alert.schema.js.map +0 -1
  515. package/src/components/avatar.d.ts +0 -76
  516. package/src/components/avatar.js +0 -176
  517. package/src/components/avatar.js.map +0 -1
  518. package/src/components/avatar.schema.d.ts +0 -169
  519. package/src/components/avatar.schema.js +0 -103
  520. package/src/components/avatar.schema.js.map +0 -1
  521. package/src/components/badge.d.ts +0 -70
  522. package/src/components/badge.js +0 -149
  523. package/src/components/badge.js.map +0 -1
  524. package/src/components/badge.schema.d.ts +0 -109
  525. package/src/components/badge.schema.js +0 -96
  526. package/src/components/badge.schema.js.map +0 -1
  527. package/src/components/button.d.ts +0 -111
  528. package/src/components/button.js +0 -336
  529. package/src/components/button.js.map +0 -1
  530. package/src/components/button.schema.d.ts +0 -148
  531. package/src/components/button.schema.js +0 -121
  532. package/src/components/button.schema.js.map +0 -1
  533. package/src/components/card.d.ts +0 -60
  534. package/src/components/card.js +0 -117
  535. package/src/components/card.js.map +0 -1
  536. package/src/components/card.schema.d.ts +0 -113
  537. package/src/components/card.schema.js +0 -98
  538. package/src/components/card.schema.js.map +0 -1
  539. package/src/components/form.d.ts +0 -239
  540. package/src/components/form.js +0 -420
  541. package/src/components/form.js.map +0 -1
  542. package/src/components/form.schema.d.ts +0 -441
  543. package/src/components/form.schema.js +0 -406
  544. package/src/components/form.schema.js.map +0 -1
  545. package/src/components/index.d.ts +0 -29
  546. package/src/components/index.js +0 -98
  547. package/src/components/index.js.map +0 -1
  548. package/src/components/list.d.ts +0 -127
  549. package/src/components/list.js +0 -279
  550. package/src/components/list.js.map +0 -1
  551. package/src/components/list.schema.d.ts +0 -134
  552. package/src/components/list.schema.js +0 -168
  553. package/src/components/list.schema.js.map +0 -1
  554. package/src/components/modal.d.ts +0 -111
  555. package/src/components/modal.js +0 -260
  556. package/src/components/modal.js.map +0 -1
  557. package/src/components/modal.schema.d.ts +0 -186
  558. package/src/components/modal.schema.js +0 -167
  559. package/src/components/modal.schema.js.map +0 -1
  560. package/src/components/table.d.ts +0 -105
  561. package/src/components/table.js +0 -283
  562. package/src/components/table.js.map +0 -1
  563. package/src/components/table.schema.d.ts +0 -159
  564. package/src/components/table.schema.js +0 -173
  565. package/src/components/table.schema.js.map +0 -1
  566. package/src/handlebars/helpers.d.ts +0 -348
  567. package/src/handlebars/helpers.js +0 -605
  568. package/src/handlebars/helpers.js.map +0 -1
  569. package/src/handlebars/index.d.ts +0 -193
  570. package/src/handlebars/index.js +0 -350
  571. package/src/handlebars/index.js.map +0 -1
  572. package/src/index.d.ts +0 -50
  573. package/src/index.js +0 -192
  574. package/src/index.js.map +0 -1
  575. package/src/layouts/base.d.ts +0 -88
  576. package/src/layouts/base.js +0 -227
  577. package/src/layouts/base.js.map +0 -1
  578. package/src/layouts/index.d.ts +0 -7
  579. package/src/layouts/index.js +0 -25
  580. package/src/layouts/index.js.map +0 -1
  581. package/src/layouts/presets.d.ts +0 -133
  582. package/src/layouts/presets.js +0 -277
  583. package/src/layouts/presets.js.map +0 -1
  584. package/src/pages/consent.d.ts +0 -116
  585. package/src/pages/consent.js +0 -218
  586. package/src/pages/consent.js.map +0 -1
  587. package/src/pages/error.d.ts +0 -100
  588. package/src/pages/error.js +0 -263
  589. package/src/pages/error.js.map +0 -1
  590. package/src/pages/index.d.ts +0 -8
  591. package/src/pages/index.js +0 -27
  592. package/src/pages/index.js.map +0 -1
  593. package/src/react/Alert.d.ts +0 -101
  594. package/src/react/Alert.js +0 -51
  595. package/src/react/Alert.js.map +0 -1
  596. package/src/react/Badge.d.ts +0 -100
  597. package/src/react/Badge.js +0 -55
  598. package/src/react/Badge.js.map +0 -1
  599. package/src/react/Button.d.ts +0 -108
  600. package/src/react/Button.js +0 -52
  601. package/src/react/Button.js.map +0 -1
  602. package/src/react/Card.d.ts +0 -103
  603. package/src/react/Card.js +0 -55
  604. package/src/react/Card.js.map +0 -1
  605. package/src/react/hooks/context.d.ts +0 -178
  606. package/src/react/hooks/context.js +0 -287
  607. package/src/react/hooks/context.js.map +0 -1
  608. package/src/react/hooks/index.d.ts +0 -41
  609. package/src/react/hooks/index.js +0 -61
  610. package/src/react/hooks/index.js.map +0 -1
  611. package/src/react/hooks/tools.d.ts +0 -283
  612. package/src/react/hooks/tools.js +0 -465
  613. package/src/react/hooks/tools.js.map +0 -1
  614. package/src/react/index.d.ts +0 -80
  615. package/src/react/index.js +0 -113
  616. package/src/react/index.js.map +0 -1
  617. package/src/react/types.d.ts +0 -105
  618. package/src/react/types.js +0 -12
  619. package/src/react/types.js.map +0 -1
  620. package/src/react/utils.d.ts +0 -42
  621. package/src/react/utils.js +0 -99
  622. package/src/react/utils.js.map +0 -1
  623. package/src/registry/index.d.ts +0 -45
  624. package/src/registry/index.js +0 -67
  625. package/src/registry/index.js.map +0 -1
  626. package/src/registry/render-template.d.ts +0 -86
  627. package/src/registry/render-template.js +0 -239
  628. package/src/registry/render-template.js.map +0 -1
  629. package/src/registry/tool-ui.registry.d.ts +0 -260
  630. package/src/registry/tool-ui.registry.js +0 -438
  631. package/src/registry/tool-ui.registry.js.map +0 -1
  632. package/src/registry/uri-utils.d.ts +0 -55
  633. package/src/registry/uri-utils.js +0 -97
  634. package/src/registry/uri-utils.js.map +0 -1
  635. package/src/render/index.d.ts +0 -7
  636. package/src/render/index.js +0 -14
  637. package/src/render/index.js.map +0 -1
  638. package/src/render/prerender.d.ts +0 -56
  639. package/src/render/prerender.js +0 -98
  640. package/src/render/prerender.js.map +0 -1
  641. package/src/renderers/cache.d.ts +0 -144
  642. package/src/renderers/cache.js +0 -240
  643. package/src/renderers/cache.js.map +0 -1
  644. package/src/renderers/html.renderer.d.ts +0 -122
  645. package/src/renderers/html.renderer.js +0 -204
  646. package/src/renderers/html.renderer.js.map +0 -1
  647. package/src/renderers/index.d.ts +0 -35
  648. package/src/renderers/index.js +0 -70
  649. package/src/renderers/index.js.map +0 -1
  650. package/src/renderers/mdx.renderer.d.ts +0 -119
  651. package/src/renderers/mdx.renderer.js +0 -305
  652. package/src/renderers/mdx.renderer.js.map +0 -1
  653. package/src/renderers/react.renderer.d.ts +0 -95
  654. package/src/renderers/react.renderer.js +0 -260
  655. package/src/renderers/react.renderer.js.map +0 -1
  656. package/src/renderers/registry.d.ts +0 -133
  657. package/src/renderers/registry.js +0 -232
  658. package/src/renderers/registry.js.map +0 -1
  659. package/src/renderers/types.d.ts +0 -341
  660. package/src/renderers/types.js +0 -9
  661. package/src/renderers/types.js.map +0 -1
  662. package/src/renderers/utils/detect.d.ts +0 -106
  663. package/src/renderers/utils/detect.js +0 -267
  664. package/src/renderers/utils/detect.js.map +0 -1
  665. package/src/renderers/utils/hash.d.ts +0 -39
  666. package/src/renderers/utils/hash.js +0 -75
  667. package/src/renderers/utils/hash.js.map +0 -1
  668. package/src/renderers/utils/index.d.ts +0 -8
  669. package/src/renderers/utils/index.js +0 -28
  670. package/src/renderers/utils/index.js.map +0 -1
  671. package/src/renderers/utils/transpiler.d.ts +0 -88
  672. package/src/renderers/utils/transpiler.js +0 -215
  673. package/src/renderers/utils/transpiler.js.map +0 -1
  674. package/src/runtime/adapters/html.adapter.d.ts +0 -58
  675. package/src/runtime/adapters/html.adapter.js +0 -131
  676. package/src/runtime/adapters/html.adapter.js.map +0 -1
  677. package/src/runtime/adapters/index.d.ts +0 -25
  678. package/src/runtime/adapters/index.js +0 -54
  679. package/src/runtime/adapters/index.js.map +0 -1
  680. package/src/runtime/adapters/mdx.adapter.d.ts +0 -72
  681. package/src/runtime/adapters/mdx.adapter.js +0 -241
  682. package/src/runtime/adapters/mdx.adapter.js.map +0 -1
  683. package/src/runtime/adapters/react.adapter.d.ts +0 -69
  684. package/src/runtime/adapters/react.adapter.js +0 -245
  685. package/src/runtime/adapters/react.adapter.js.map +0 -1
  686. package/src/runtime/adapters/types.d.ts +0 -94
  687. package/src/runtime/adapters/types.js +0 -11
  688. package/src/runtime/adapters/types.js.map +0 -1
  689. package/src/runtime/csp.d.ts +0 -37
  690. package/src/runtime/csp.js +0 -140
  691. package/src/runtime/csp.js.map +0 -1
  692. package/src/runtime/index.d.ts +0 -16
  693. package/src/runtime/index.js +0 -72
  694. package/src/runtime/index.js.map +0 -1
  695. package/src/runtime/mcp-bridge.d.ts +0 -100
  696. package/src/runtime/mcp-bridge.js +0 -581
  697. package/src/runtime/mcp-bridge.js.map +0 -1
  698. package/src/runtime/renderer-runtime.d.ts +0 -132
  699. package/src/runtime/renderer-runtime.js +0 -389
  700. package/src/runtime/renderer-runtime.js.map +0 -1
  701. package/src/runtime/sanitizer.d.ts +0 -171
  702. package/src/runtime/sanitizer.js +0 -318
  703. package/src/runtime/sanitizer.js.map +0 -1
  704. package/src/runtime/types.d.ts +0 -414
  705. package/src/runtime/types.js +0 -12
  706. package/src/runtime/types.js.map +0 -1
  707. package/src/runtime/wrapper.d.ts +0 -375
  708. package/src/runtime/wrapper.js +0 -1793
  709. package/src/runtime/wrapper.js.map +0 -1
  710. package/src/styles/index.d.ts +0 -7
  711. package/src/styles/index.js +0 -11
  712. package/src/styles/index.js.map +0 -1
  713. package/src/styles/variants.d.ts +0 -50
  714. package/src/styles/variants.js +0 -175
  715. package/src/styles/variants.js.map +0 -1
  716. package/src/theme/cdn.d.ts +0 -194
  717. package/src/theme/cdn.js +0 -375
  718. package/src/theme/cdn.js.map +0 -1
  719. package/src/theme/index.d.ts +0 -17
  720. package/src/theme/index.js +0 -57
  721. package/src/theme/index.js.map +0 -1
  722. package/src/theme/platforms.d.ts +0 -106
  723. package/src/theme/platforms.js +0 -161
  724. package/src/theme/platforms.js.map +0 -1
  725. package/src/theme/presets/github-openai.d.ts +0 -49
  726. package/src/theme/presets/github-openai.js +0 -189
  727. package/src/theme/presets/github-openai.js.map +0 -1
  728. package/src/theme/presets/index.d.ts +0 -10
  729. package/src/theme/presets/index.js +0 -17
  730. package/src/theme/presets/index.js.map +0 -1
  731. package/src/theme/theme.d.ts +0 -395
  732. package/src/theme/theme.js +0 -332
  733. package/src/theme/theme.js.map +0 -1
  734. package/src/tool-template/builder.d.ts +0 -212
  735. package/src/tool-template/builder.js +0 -397
  736. package/src/tool-template/builder.js.map +0 -1
  737. package/src/tool-template/index.d.ts +0 -15
  738. package/src/tool-template/index.js +0 -38
  739. package/src/tool-template/index.js.map +0 -1
  740. package/src/types/index.d.ts +0 -13
  741. package/src/types/index.js +0 -26
  742. package/src/types/index.js.map +0 -1
  743. package/src/types/ui-config.d.ts +0 -357
  744. package/src/types/ui-config.js +0 -12
  745. package/src/types/ui-config.js.map +0 -1
  746. package/src/types/ui-runtime.d.ts +0 -965
  747. package/src/types/ui-runtime.js +0 -117
  748. package/src/types/ui-runtime.js.map +0 -1
  749. package/src/validation/error-box.d.ts +0 -55
  750. package/src/validation/error-box.js +0 -75
  751. package/src/validation/error-box.js.map +0 -1
  752. package/src/validation/index.d.ts +0 -12
  753. package/src/validation/index.js +0 -21
  754. package/src/validation/index.js.map +0 -1
  755. package/src/validation/wrapper.d.ts +0 -96
  756. package/src/validation/wrapper.js +0 -117
  757. package/src/validation/wrapper.js.map +0 -1
  758. package/src/web-components/core/attribute-parser.d.ts +0 -85
  759. package/src/web-components/core/attribute-parser.js +0 -189
  760. package/src/web-components/core/attribute-parser.js.map +0 -1
  761. package/src/web-components/core/base-element.d.ts +0 -197
  762. package/src/web-components/core/base-element.js +0 -289
  763. package/src/web-components/core/base-element.js.map +0 -1
  764. package/src/web-components/core/index.d.ts +0 -8
  765. package/src/web-components/core/index.js +0 -18
  766. package/src/web-components/core/index.js.map +0 -1
  767. package/src/web-components/elements/fmcp-alert.d.ts +0 -45
  768. package/src/web-components/elements/fmcp-alert.js +0 -93
  769. package/src/web-components/elements/fmcp-alert.js.map +0 -1
  770. package/src/web-components/elements/fmcp-badge.d.ts +0 -46
  771. package/src/web-components/elements/fmcp-badge.js +0 -99
  772. package/src/web-components/elements/fmcp-badge.js.map +0 -1
  773. package/src/web-components/elements/fmcp-button.d.ts +0 -124
  774. package/src/web-components/elements/fmcp-button.js +0 -233
  775. package/src/web-components/elements/fmcp-button.js.map +0 -1
  776. package/src/web-components/elements/fmcp-card.d.ts +0 -52
  777. package/src/web-components/elements/fmcp-card.js +0 -115
  778. package/src/web-components/elements/fmcp-card.js.map +0 -1
  779. package/src/web-components/elements/fmcp-input.d.ts +0 -95
  780. package/src/web-components/elements/fmcp-input.js +0 -248
  781. package/src/web-components/elements/fmcp-input.js.map +0 -1
  782. package/src/web-components/elements/fmcp-select.d.ts +0 -99
  783. package/src/web-components/elements/fmcp-select.js +0 -243
  784. package/src/web-components/elements/fmcp-select.js.map +0 -1
  785. package/src/web-components/elements/index.d.ts +0 -12
  786. package/src/web-components/elements/index.js +0 -34
  787. package/src/web-components/elements/index.js.map +0 -1
  788. package/src/web-components/index.d.ts +0 -49
  789. package/src/web-components/index.js +0 -75
  790. package/src/web-components/index.js.map +0 -1
  791. package/src/web-components/register.d.ts +0 -56
  792. package/src/web-components/register.js +0 -80
  793. package/src/web-components/register.js.map +0 -1
  794. package/src/web-components/types.d.ts +0 -121
  795. package/src/web-components/types.js +0 -25
  796. package/src/web-components/types.js.map +0 -1
  797. package/src/widgets/index.d.ts +0 -7
  798. package/src/widgets/index.js +0 -24
  799. package/src/widgets/index.js.map +0 -1
  800. package/src/widgets/progress.d.ts +0 -132
  801. package/src/widgets/progress.js +0 -303
  802. package/src/widgets/progress.js.map +0 -1
  803. package/src/widgets/resource.d.ts +0 -162
  804. package/src/widgets/resource.js +0 -340
  805. package/src/widgets/resource.js.map +0 -1
@@ -1,581 +0,0 @@
1
- "use strict";
2
- /**
3
- * MCP Bridge Runtime
4
- *
5
- * Universal JavaScript runtime injected into UI templates that adapts
6
- * to the host environment (OpenAI Apps SDK, ext-apps, Claude, etc.).
7
- *
8
- * This script is designed to be embedded directly into HTML templates
9
- * via the MCP_BRIDGE_RUNTIME constant.
10
- *
11
- * Architecture:
12
- * - On OpenAI: Proxy directly to native window.openai API
13
- * - On Claude: Polyfill with limited functionality (network-blocked)
14
- * - On ext-apps: JSON-RPC postMessage bridge (SEP-1865 compliant)
15
- * - On Gemini: Gemini SDK integration
16
- * - On Unknown: LocalStorage-based state, basic functionality
17
- *
18
- * @see https://developers.openai.com/apps-sdk/build/chatgpt-ui
19
- * @see https://github.com/modelcontextprotocol/ext-apps (SEP-1865)
20
- */
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.generateCustomBridge = exports.PLATFORM_BRIDGE_SCRIPTS = exports.FRONTMCP_BRIDGE_RUNTIME = exports.MCP_BRIDGE_RUNTIME = void 0;
23
- exports.getMCPBridgeScript = getMCPBridgeScript;
24
- exports.isMCPBridgeSupported = isMCPBridgeSupported;
25
- const iife_generator_1 = require("../bridge/runtime/iife-generator");
26
- /**
27
- * The MCP Bridge runtime script.
28
- * This is injected into UI templates to provide a unified API across providers.
29
- *
30
- * Uses the new FrontMcpBridge adapter system which supports:
31
- * - OpenAI ChatGPT Apps SDK
32
- * - ext-apps (SEP-1865 protocol)
33
- * - Claude (Anthropic)
34
- * - Gemini (Google)
35
- * - Generic fallback
36
- *
37
- * The bridge exposes:
38
- * - window.FrontMcpBridge - New unified bridge API
39
- * - window.mcpBridge - Legacy compatibility bridge
40
- * - window.openai - OpenAI polyfill for non-OpenAI platforms
41
- *
42
- * Provides full OpenAI window.openai API compatibility:
43
- * - Properties: theme, userAgent, locale, maxHeight, displayMode, safeArea,
44
- * toolInput, toolOutput, toolResponseMetadata, widgetState
45
- * - Methods: callTool, requestDisplayMode, requestClose, openExternal,
46
- * sendFollowUpMessage, setWidgetState
47
- */
48
- exports.MCP_BRIDGE_RUNTIME = `
49
- <script>
50
- (function() {
51
- 'use strict';
52
-
53
- // ==================== Environment Detection ====================
54
-
55
- var isOpenAI = typeof window.openai !== 'undefined';
56
- var isExtApps = window.parent !== window && !isOpenAI;
57
- var isClaude = typeof window.claude !== 'undefined' ||
58
- (window.__mcpPlatform === 'claude');
59
- var isGemini = window.__mcpPlatform === 'gemini';
60
-
61
- // ==================== Internal State ====================
62
-
63
- var messageId = 0;
64
- var pendingRequests = new Map();
65
- var contextChangeListeners = [];
66
- var toolResultListeners = [];
67
-
68
- // Default values for polyfilled properties
69
- var defaultSafeArea = { top: 0, bottom: 0, left: 0, right: 0 };
70
- var defaultUserAgent = { type: 'web', hover: true, touch: false };
71
-
72
- // Host context (for ext-apps and polyfill mode)
73
- var hostContext = window.__mcpHostContext || {
74
- theme: 'light',
75
- displayMode: 'inline'
76
- };
77
-
78
- // Trusted origin for postMessage validation (set during ext-apps initialization)
79
- var trustedOrigin = null;
80
-
81
- // Detect device capabilities
82
- var detectUserAgent = function() {
83
- var ua = navigator.userAgent || '';
84
- var isMobile = /iPhone|iPad|iPod|Android/i.test(ua);
85
- var hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
86
- var hasHover = window.matchMedia && window.matchMedia('(hover: hover)').matches;
87
- return {
88
- type: isMobile ? 'mobile' : 'web',
89
- hover: hasHover !== false,
90
- touch: hasTouch
91
- };
92
- };
93
-
94
- // Detect theme from system preference
95
- var detectTheme = function() {
96
- if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
97
- return 'dark';
98
- }
99
- return 'light';
100
- };
101
-
102
- // ==================== Bridge Implementation ====================
103
-
104
- /**
105
- * MCP Bridge provides full OpenAI API compatibility.
106
- * On OpenAI, it proxies directly to window.openai.
107
- * On other platforms, it provides polyfills.
108
- */
109
- var bridge = {
110
- // ==================== Environment Info ====================
111
-
112
- get provider() {
113
- if (isOpenAI) return 'openai';
114
- if (isClaude) return 'claude';
115
- if (isGemini) return 'gemini';
116
- if (isExtApps) return 'ext-apps';
117
- return 'unknown';
118
- },
119
-
120
- // ==================== OpenAI-Compatible Properties ====================
121
-
122
- get theme() {
123
- if (isOpenAI && window.openai) {
124
- return window.openai.theme || 'light';
125
- }
126
- return hostContext.theme || detectTheme();
127
- },
128
-
129
- get userAgent() {
130
- if (isOpenAI && window.openai && window.openai.userAgent) {
131
- return window.openai.userAgent;
132
- }
133
- return hostContext.userAgent || detectUserAgent();
134
- },
135
-
136
- get locale() {
137
- if (isOpenAI && window.openai && window.openai.locale) {
138
- return window.openai.locale;
139
- }
140
- return navigator.language || 'en-US';
141
- },
142
-
143
- get maxHeight() {
144
- if (isOpenAI && window.openai) {
145
- return window.openai.maxHeight;
146
- }
147
- return hostContext.viewport ? hostContext.viewport.maxHeight : undefined;
148
- },
149
-
150
- get displayMode() {
151
- if (isOpenAI && window.openai) {
152
- return window.openai.displayMode || 'inline';
153
- }
154
- return hostContext.displayMode || 'inline';
155
- },
156
-
157
- get safeArea() {
158
- if (isOpenAI && window.openai && window.openai.safeArea) {
159
- return window.openai.safeArea;
160
- }
161
- return hostContext.safeArea || defaultSafeArea;
162
- },
163
-
164
- get toolInput() {
165
- if (isOpenAI && window.openai && window.openai.toolInput) {
166
- return window.openai.toolInput;
167
- }
168
- return window.__mcpToolInput || {};
169
- },
170
-
171
- get toolOutput() {
172
- if (isOpenAI && window.openai) {
173
- return window.openai.toolOutput;
174
- }
175
- return window.__mcpToolOutput;
176
- },
177
-
178
- get structuredContent() {
179
- // Alias for toolOutput to maintain compatibility
180
- if (isOpenAI && window.openai) {
181
- return window.openai.toolOutput;
182
- }
183
- return window.__mcpStructuredContent;
184
- },
185
-
186
- get toolResponseMetadata() {
187
- if (isOpenAI && window.openai && window.openai.toolResponseMetadata) {
188
- return window.openai.toolResponseMetadata;
189
- }
190
- return window.__mcpToolResponseMetadata || {};
191
- },
192
-
193
- get widgetState() {
194
- if (isOpenAI && window.openai) {
195
- return window.openai.widgetState || {};
196
- }
197
- // Polyfill: use localStorage
198
- try {
199
- var stored = localStorage.getItem('__mcpWidgetState');
200
- return stored ? JSON.parse(stored) : {};
201
- } catch (e) {
202
- return {};
203
- }
204
- },
205
-
206
- // ==================== OpenAI-Compatible Methods ====================
207
-
208
- callTool: function(name, params) {
209
- if (isOpenAI && window.openai && window.openai.callTool) {
210
- return window.openai.callTool(name, params);
211
- }
212
- if (isClaude) {
213
- return Promise.reject(new Error(
214
- 'Tool calls are not supported in Claude widgets (network-blocked sandbox)'
215
- ));
216
- }
217
- if (isGemini) {
218
- return Promise.reject(new Error(
219
- 'Tool calls are not supported in Gemini widgets'
220
- ));
221
- }
222
- if (isExtApps) {
223
- return this._sendRequest('tools/call', { name: name, arguments: params });
224
- }
225
- return Promise.reject(new Error('Tool calls not supported in this environment'));
226
- },
227
-
228
- requestDisplayMode: function(options) {
229
- if (isOpenAI && window.openai && window.openai.requestDisplayMode) {
230
- return window.openai.requestDisplayMode(options);
231
- }
232
- if (isExtApps) {
233
- return this._sendRequest('ui/request-display-mode', options);
234
- }
235
- // Polyfill: just update local state
236
- if (options && options.mode) {
237
- hostContext.displayMode = options.mode;
238
- contextChangeListeners.forEach(function(cb) {
239
- try { cb({ displayMode: options.mode }); } catch (e) {}
240
- });
241
- }
242
- return Promise.resolve();
243
- },
244
-
245
- requestClose: function() {
246
- if (isOpenAI && window.openai && window.openai.requestClose) {
247
- return window.openai.requestClose();
248
- }
249
- if (isExtApps) {
250
- return this._sendRequest('ui/request-close', {});
251
- }
252
- // Polyfill: dispatch event for parent to handle
253
- window.dispatchEvent(new CustomEvent('mcp:request-close'));
254
- return Promise.resolve();
255
- },
256
-
257
- openExternal: function(options) {
258
- var href = typeof options === 'string' ? options : (options && options.href);
259
- if (!href) {
260
- return Promise.reject(new Error('URL required'));
261
- }
262
- if (isOpenAI && window.openai && window.openai.openExternal) {
263
- return window.openai.openExternal({ href: href });
264
- }
265
- if (isExtApps) {
266
- return this._sendRequest('ui/open-link', { url: href });
267
- }
268
- // Fallback: open in new window
269
- window.open(href, '_blank', 'noopener,noreferrer');
270
- return Promise.resolve();
271
- },
272
-
273
- // Alias for openExternal (backwards compatibility)
274
- openLink: function(url) {
275
- return this.openExternal({ href: url });
276
- },
277
-
278
- sendFollowUpMessage: function(options) {
279
- var prompt = typeof options === 'string' ? options : (options && options.prompt);
280
- if (!prompt) {
281
- return Promise.reject(new Error('Prompt required'));
282
- }
283
- if (isOpenAI && window.openai && window.openai.sendFollowUpMessage) {
284
- return window.openai.sendFollowUpMessage({ prompt: prompt });
285
- }
286
- if (isClaude) {
287
- return Promise.reject(new Error(
288
- 'Follow-up messages are not supported in Claude widgets (network-blocked sandbox)'
289
- ));
290
- }
291
- if (isGemini) {
292
- return Promise.reject(new Error(
293
- 'Follow-up messages are not supported in Gemini widgets'
294
- ));
295
- }
296
- if (isExtApps) {
297
- return this._sendRequest('ui/message', {
298
- role: 'user',
299
- content: { type: 'text', text: prompt }
300
- });
301
- }
302
- return Promise.reject(new Error('Messages not supported in this environment'));
303
- },
304
-
305
- // Alias for sendFollowUpMessage (backwards compatibility)
306
- sendMessage: function(content) {
307
- return this.sendFollowUpMessage({ prompt: content });
308
- },
309
-
310
- setWidgetState: function(state) {
311
- if (isOpenAI && window.openai && window.openai.setWidgetState) {
312
- window.openai.setWidgetState(state);
313
- return;
314
- }
315
- // Polyfill: persist to localStorage
316
- try {
317
- localStorage.setItem('__mcpWidgetState', JSON.stringify(state));
318
- } catch (e) {
319
- console.warn('Failed to persist widget state:', e);
320
- }
321
- },
322
-
323
- // ==================== Context API (MCP-specific) ====================
324
-
325
- get context() {
326
- return {
327
- theme: this.theme,
328
- displayMode: this.displayMode,
329
- viewport: this.maxHeight ? { maxHeight: this.maxHeight } : undefined,
330
- userAgent: this.userAgent,
331
- locale: this.locale,
332
- safeArea: this.safeArea
333
- };
334
- },
335
-
336
- onContextChange: function(callback) {
337
- contextChangeListeners.push(callback);
338
- return function() {
339
- var index = contextChangeListeners.indexOf(callback);
340
- if (index > -1) contextChangeListeners.splice(index, 1);
341
- };
342
- },
343
-
344
- onToolResult: function(callback) {
345
- toolResultListeners.push(callback);
346
- return function() {
347
- var index = toolResultListeners.indexOf(callback);
348
- if (index > -1) toolResultListeners.splice(index, 1);
349
- };
350
- },
351
-
352
- // ==================== Internal Methods ====================
353
-
354
- _sendRequest: function(method, params) {
355
- return new Promise(function(resolve, reject) {
356
- var id = ++messageId;
357
- pendingRequests.set(id, { resolve: resolve, reject: reject });
358
-
359
- window.parent.postMessage({
360
- jsonrpc: '2.0',
361
- id: id,
362
- method: method,
363
- params: params
364
- }, '*');
365
-
366
- // Timeout after 30s
367
- setTimeout(function() {
368
- if (pendingRequests.has(id)) {
369
- pendingRequests.delete(id);
370
- reject(new Error('Request timeout'));
371
- }
372
- }, 30000);
373
- });
374
- },
375
-
376
- _initExtApps: function() {
377
- var self = this;
378
- return this._sendRequest('ui/initialize', {}).then(function(result) {
379
- if (result && result.hostContext) {
380
- hostContext = Object.assign(hostContext, result.hostContext);
381
- }
382
- // Note: trustedOrigin is now set from first message event origin (trust-on-first-use)
383
- // Send initialized notification
384
- window.parent.postMessage({
385
- jsonrpc: '2.0',
386
- method: 'ui/notifications/initialized',
387
- params: {}
388
- }, '*');
389
- return result;
390
- });
391
- }
392
- };
393
-
394
- // ==================== Event Handling ====================
395
-
396
- window.addEventListener('message', function(event) {
397
- var data = event.data;
398
- if (!data || data.jsonrpc !== '2.0') return;
399
-
400
- // Trust-on-first-use: Establish trusted origin from the first valid message
401
- if (isExtApps && !trustedOrigin && event.origin) {
402
- trustedOrigin = event.origin;
403
- }
404
-
405
- // Validate origin for ext-apps environment to prevent spoofed messages
406
- if (isExtApps && trustedOrigin && event.origin !== trustedOrigin) {
407
- console.warn('MCP Bridge: Ignoring message from untrusted origin:', event.origin);
408
- return;
409
- }
410
-
411
- // Handle responses
412
- if (data.id && pendingRequests.has(data.id)) {
413
- var pending = pendingRequests.get(data.id);
414
- pendingRequests.delete(data.id);
415
-
416
- if (data.error) {
417
- var err = new Error(data.error.message || 'Unknown error');
418
- err.code = data.error.code;
419
- err.data = data.error.data;
420
- pending.reject(err);
421
- } else {
422
- pending.resolve(data.result);
423
- }
424
- return;
425
- }
426
-
427
- // Handle notifications
428
- switch (data.method) {
429
- case 'ui/notifications/tool-input':
430
- window.__mcpToolInput = data.params && data.params.arguments;
431
- window.dispatchEvent(new CustomEvent('mcp:tool-input', { detail: data.params }));
432
- break;
433
-
434
- case 'ui/notifications/tool-input-partial':
435
- if (data.params && data.params.arguments) {
436
- window.__mcpToolInput = Object.assign(window.__mcpToolInput || {}, data.params.arguments);
437
- }
438
- break;
439
-
440
- case 'ui/notifications/tool-result':
441
- window.__mcpToolOutput = data.params && data.params.content;
442
- window.__mcpStructuredContent = data.params && data.params.structuredContent;
443
- toolResultListeners.forEach(function(cb) {
444
- try { cb(data.params); } catch (e) { console.error('Tool result listener error:', e); }
445
- });
446
- window.dispatchEvent(new CustomEvent('mcp:tool-result', { detail: data.params }));
447
- break;
448
-
449
- case 'ui/notifications/tool-cancelled':
450
- window.dispatchEvent(new CustomEvent('mcp:tool-cancelled', { detail: data.params }));
451
- break;
452
-
453
- case 'ui/host-context-change':
454
- hostContext = Object.assign(hostContext, data.params);
455
- contextChangeListeners.forEach(function(cb) {
456
- try { cb(data.params); } catch (e) { console.error('Context change listener error:', e); }
457
- });
458
- window.dispatchEvent(new CustomEvent('mcp:context-change', { detail: data.params }));
459
- break;
460
-
461
- case 'ui/size-change':
462
- if (hostContext.viewport) {
463
- hostContext.viewport = Object.assign(hostContext.viewport, data.params);
464
- } else {
465
- hostContext.viewport = data.params;
466
- }
467
- break;
468
- }
469
- });
470
-
471
- // ==================== Initialize ====================
472
-
473
- // Export bridge
474
- window.mcpBridge = bridge;
475
-
476
- // Also create window.openai polyfill for non-OpenAI platforms
477
- // This allows code written for OpenAI to work on other platforms
478
- if (!isOpenAI) {
479
- window.openai = {
480
- get theme() { return bridge.theme; },
481
- get userAgent() { return bridge.userAgent; },
482
- get locale() { return bridge.locale; },
483
- get maxHeight() { return bridge.maxHeight; },
484
- get displayMode() { return bridge.displayMode; },
485
- get safeArea() { return bridge.safeArea; },
486
- get toolInput() { return bridge.toolInput; },
487
- get toolOutput() { return bridge.toolOutput; },
488
- get toolResponseMetadata() { return bridge.toolResponseMetadata; },
489
- get widgetState() { return bridge.widgetState; },
490
- callTool: function(n, a) { return bridge.callTool(n, a); },
491
- requestDisplayMode: function(o) { return bridge.requestDisplayMode(o); },
492
- requestClose: function() { return bridge.requestClose(); },
493
- openExternal: function(o) { return bridge.openExternal(o); },
494
- sendFollowUpMessage: function(o) { return bridge.sendFollowUpMessage(o); },
495
- setWidgetState: function(s) { return bridge.setWidgetState(s); }
496
- };
497
- }
498
-
499
- // Auto-initialize for ext-apps
500
- if (isExtApps) {
501
- bridge._initExtApps().catch(function(err) {
502
- console.warn('Failed to initialize MCP bridge:', err);
503
- });
504
- }
505
-
506
- // Dispatch ready event
507
- window.dispatchEvent(new CustomEvent('mcp:bridge-ready'));
508
- })();
509
- </script>
510
- `;
511
- /**
512
- * Get the MCP Bridge runtime script as a string (without script tags)
513
- * Useful for inline embedding in specific scenarios.
514
- */
515
- function getMCPBridgeScript() {
516
- // Extract the script content without the <script> tags
517
- const match = exports.MCP_BRIDGE_RUNTIME.match(/<script>([\s\S]*?)<\/script>/);
518
- return match ? match[1].trim() : '';
519
- }
520
- /**
521
- * Check if the current environment supports the MCP bridge
522
- */
523
- function isMCPBridgeSupported() {
524
- if (typeof window === 'undefined')
525
- return false;
526
- const w = window;
527
- return (typeof w.openai !== 'undefined' ||
528
- typeof w.claude !== 'undefined' ||
529
- w.__mcpPlatform === 'claude' ||
530
- w.__mcpPlatform === 'gemini' ||
531
- w.__mcpPlatform === 'ext-apps' ||
532
- window.parent !== window);
533
- }
534
- // ============================================
535
- // New FrontMcpBridge System Exports
536
- // ============================================
537
- /**
538
- * The new FrontMcpBridge runtime script (universal - includes all adapters).
539
- * This is the recommended bridge for new integrations.
540
- *
541
- * @example
542
- * ```typescript
543
- * import { FRONTMCP_BRIDGE_RUNTIME } from '@frontmcp/ui/runtime';
544
- * const html = `<!DOCTYPE html><html><head>${FRONTMCP_BRIDGE_RUNTIME}</head>...</html>`;
545
- * ```
546
- */
547
- exports.FRONTMCP_BRIDGE_RUNTIME = iife_generator_1.BRIDGE_SCRIPT_TAGS.universal;
548
- /**
549
- * Platform-specific bridge scripts.
550
- *
551
- * Use these for smaller bundle sizes when targeting a specific platform.
552
- *
553
- * @example
554
- * ```typescript
555
- * import { PLATFORM_BRIDGE_SCRIPTS } from '@frontmcp/ui/runtime';
556
- *
557
- * // For ChatGPT only
558
- * const chatgptHtml = `<html><head>${PLATFORM_BRIDGE_SCRIPTS.chatgpt}</head>...</html>`;
559
- *
560
- * // For Claude only
561
- * const claudeHtml = `<html><head>${PLATFORM_BRIDGE_SCRIPTS.claude}</head>...</html>`;
562
- * ```
563
- */
564
- exports.PLATFORM_BRIDGE_SCRIPTS = iife_generator_1.BRIDGE_SCRIPT_TAGS;
565
- /**
566
- * Generate a custom bridge script with specific options.
567
- *
568
- * @example
569
- * ```typescript
570
- * import { generateCustomBridge } from '@frontmcp/ui/runtime';
571
- *
572
- * const script = generateCustomBridge({
573
- * adapters: ['openai', 'ext-apps'],
574
- * debug: true,
575
- * trustedOrigins: ['https://my-host.com']
576
- * });
577
- * ```
578
- */
579
- var iife_generator_2 = require("../bridge/runtime/iife-generator");
580
- Object.defineProperty(exports, "generateCustomBridge", { enumerable: true, get: function () { return iife_generator_2.generateBridgeIIFE; } });
581
- //# sourceMappingURL=mcp-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../../src/runtime/mcp-bridge.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AA+eH,gDAIC;AAKD,oDAWC;AAhgBD,qEAA0F;AAE1F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACU,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8cjC,CAAC;AAEF;;;GAGG;AACH,SAAgB,kBAAkB;IAChC,uDAAuD;IACvD,MAAM,KAAK,GAAG,0BAAkB,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,CAAC,GAAG,MAAmF,CAAC;IAC9F,OAAO,CACL,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW;QAC/B,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW;QAC/B,CAAC,CAAC,aAAa,KAAK,QAAQ;QAC5B,CAAC,CAAC,aAAa,KAAK,QAAQ;QAC5B,CAAC,CAAC,aAAa,KAAK,UAAU;QAC9B,MAAM,CAAC,MAAM,KAAK,MAAM,CACzB,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,oCAAoC;AACpC,+CAA+C;AAE/C;;;;;;;;;GASG;AACU,QAAA,uBAAuB,GAAG,mCAAkB,CAAC,SAAS,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AACU,QAAA,uBAAuB,GAAG,mCAAkB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,mEAA8F;AAArF,sHAAA,kBAAkB,OAAwB","sourcesContent":["/**\n * MCP Bridge Runtime\n *\n * Universal JavaScript runtime injected into UI templates that adapts\n * to the host environment (OpenAI Apps SDK, ext-apps, Claude, etc.).\n *\n * This script is designed to be embedded directly into HTML templates\n * via the MCP_BRIDGE_RUNTIME constant.\n *\n * Architecture:\n * - On OpenAI: Proxy directly to native window.openai API\n * - On Claude: Polyfill with limited functionality (network-blocked)\n * - On ext-apps: JSON-RPC postMessage bridge (SEP-1865 compliant)\n * - On Gemini: Gemini SDK integration\n * - On Unknown: LocalStorage-based state, basic functionality\n *\n * @see https://developers.openai.com/apps-sdk/build/chatgpt-ui\n * @see https://github.com/modelcontextprotocol/ext-apps (SEP-1865)\n */\n\nimport type { ProviderType, ThemeMode, DisplayMode, HostContext } from './types';\nimport { BRIDGE_SCRIPT_TAGS, generateBridgeIIFE } from '../bridge/runtime/iife-generator';\n\n/**\n * The MCP Bridge runtime script.\n * This is injected into UI templates to provide a unified API across providers.\n *\n * Uses the new FrontMcpBridge adapter system which supports:\n * - OpenAI ChatGPT Apps SDK\n * - ext-apps (SEP-1865 protocol)\n * - Claude (Anthropic)\n * - Gemini (Google)\n * - Generic fallback\n *\n * The bridge exposes:\n * - window.FrontMcpBridge - New unified bridge API\n * - window.mcpBridge - Legacy compatibility bridge\n * - window.openai - OpenAI polyfill for non-OpenAI platforms\n *\n * Provides full OpenAI window.openai API compatibility:\n * - Properties: theme, userAgent, locale, maxHeight, displayMode, safeArea,\n * toolInput, toolOutput, toolResponseMetadata, widgetState\n * - Methods: callTool, requestDisplayMode, requestClose, openExternal,\n * sendFollowUpMessage, setWidgetState\n */\nexport const MCP_BRIDGE_RUNTIME = `\n<script>\n(function() {\n 'use strict';\n\n // ==================== Environment Detection ====================\n\n var isOpenAI = typeof window.openai !== 'undefined';\n var isExtApps = window.parent !== window && !isOpenAI;\n var isClaude = typeof window.claude !== 'undefined' ||\n (window.__mcpPlatform === 'claude');\n var isGemini = window.__mcpPlatform === 'gemini';\n\n // ==================== Internal State ====================\n\n var messageId = 0;\n var pendingRequests = new Map();\n var contextChangeListeners = [];\n var toolResultListeners = [];\n\n // Default values for polyfilled properties\n var defaultSafeArea = { top: 0, bottom: 0, left: 0, right: 0 };\n var defaultUserAgent = { type: 'web', hover: true, touch: false };\n\n // Host context (for ext-apps and polyfill mode)\n var hostContext = window.__mcpHostContext || {\n theme: 'light',\n displayMode: 'inline'\n };\n\n // Trusted origin for postMessage validation (set during ext-apps initialization)\n var trustedOrigin = null;\n\n // Detect device capabilities\n var detectUserAgent = function() {\n var ua = navigator.userAgent || '';\n var isMobile = /iPhone|iPad|iPod|Android/i.test(ua);\n var hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n var hasHover = window.matchMedia && window.matchMedia('(hover: hover)').matches;\n return {\n type: isMobile ? 'mobile' : 'web',\n hover: hasHover !== false,\n touch: hasTouch\n };\n };\n\n // Detect theme from system preference\n var detectTheme = function() {\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return 'light';\n };\n\n // ==================== Bridge Implementation ====================\n\n /**\n * MCP Bridge provides full OpenAI API compatibility.\n * On OpenAI, it proxies directly to window.openai.\n * On other platforms, it provides polyfills.\n */\n var bridge = {\n // ==================== Environment Info ====================\n\n get provider() {\n if (isOpenAI) return 'openai';\n if (isClaude) return 'claude';\n if (isGemini) return 'gemini';\n if (isExtApps) return 'ext-apps';\n return 'unknown';\n },\n\n // ==================== OpenAI-Compatible Properties ====================\n\n get theme() {\n if (isOpenAI && window.openai) {\n return window.openai.theme || 'light';\n }\n return hostContext.theme || detectTheme();\n },\n\n get userAgent() {\n if (isOpenAI && window.openai && window.openai.userAgent) {\n return window.openai.userAgent;\n }\n return hostContext.userAgent || detectUserAgent();\n },\n\n get locale() {\n if (isOpenAI && window.openai && window.openai.locale) {\n return window.openai.locale;\n }\n return navigator.language || 'en-US';\n },\n\n get maxHeight() {\n if (isOpenAI && window.openai) {\n return window.openai.maxHeight;\n }\n return hostContext.viewport ? hostContext.viewport.maxHeight : undefined;\n },\n\n get displayMode() {\n if (isOpenAI && window.openai) {\n return window.openai.displayMode || 'inline';\n }\n return hostContext.displayMode || 'inline';\n },\n\n get safeArea() {\n if (isOpenAI && window.openai && window.openai.safeArea) {\n return window.openai.safeArea;\n }\n return hostContext.safeArea || defaultSafeArea;\n },\n\n get toolInput() {\n if (isOpenAI && window.openai && window.openai.toolInput) {\n return window.openai.toolInput;\n }\n return window.__mcpToolInput || {};\n },\n\n get toolOutput() {\n if (isOpenAI && window.openai) {\n return window.openai.toolOutput;\n }\n return window.__mcpToolOutput;\n },\n\n get structuredContent() {\n // Alias for toolOutput to maintain compatibility\n if (isOpenAI && window.openai) {\n return window.openai.toolOutput;\n }\n return window.__mcpStructuredContent;\n },\n\n get toolResponseMetadata() {\n if (isOpenAI && window.openai && window.openai.toolResponseMetadata) {\n return window.openai.toolResponseMetadata;\n }\n return window.__mcpToolResponseMetadata || {};\n },\n\n get widgetState() {\n if (isOpenAI && window.openai) {\n return window.openai.widgetState || {};\n }\n // Polyfill: use localStorage\n try {\n var stored = localStorage.getItem('__mcpWidgetState');\n return stored ? JSON.parse(stored) : {};\n } catch (e) {\n return {};\n }\n },\n\n // ==================== OpenAI-Compatible Methods ====================\n\n callTool: function(name, params) {\n if (isOpenAI && window.openai && window.openai.callTool) {\n return window.openai.callTool(name, params);\n }\n if (isClaude) {\n return Promise.reject(new Error(\n 'Tool calls are not supported in Claude widgets (network-blocked sandbox)'\n ));\n }\n if (isGemini) {\n return Promise.reject(new Error(\n 'Tool calls are not supported in Gemini widgets'\n ));\n }\n if (isExtApps) {\n return this._sendRequest('tools/call', { name: name, arguments: params });\n }\n return Promise.reject(new Error('Tool calls not supported in this environment'));\n },\n\n requestDisplayMode: function(options) {\n if (isOpenAI && window.openai && window.openai.requestDisplayMode) {\n return window.openai.requestDisplayMode(options);\n }\n if (isExtApps) {\n return this._sendRequest('ui/request-display-mode', options);\n }\n // Polyfill: just update local state\n if (options && options.mode) {\n hostContext.displayMode = options.mode;\n contextChangeListeners.forEach(function(cb) {\n try { cb({ displayMode: options.mode }); } catch (e) {}\n });\n }\n return Promise.resolve();\n },\n\n requestClose: function() {\n if (isOpenAI && window.openai && window.openai.requestClose) {\n return window.openai.requestClose();\n }\n if (isExtApps) {\n return this._sendRequest('ui/request-close', {});\n }\n // Polyfill: dispatch event for parent to handle\n window.dispatchEvent(new CustomEvent('mcp:request-close'));\n return Promise.resolve();\n },\n\n openExternal: function(options) {\n var href = typeof options === 'string' ? options : (options && options.href);\n if (!href) {\n return Promise.reject(new Error('URL required'));\n }\n if (isOpenAI && window.openai && window.openai.openExternal) {\n return window.openai.openExternal({ href: href });\n }\n if (isExtApps) {\n return this._sendRequest('ui/open-link', { url: href });\n }\n // Fallback: open in new window\n window.open(href, '_blank', 'noopener,noreferrer');\n return Promise.resolve();\n },\n\n // Alias for openExternal (backwards compatibility)\n openLink: function(url) {\n return this.openExternal({ href: url });\n },\n\n sendFollowUpMessage: function(options) {\n var prompt = typeof options === 'string' ? options : (options && options.prompt);\n if (!prompt) {\n return Promise.reject(new Error('Prompt required'));\n }\n if (isOpenAI && window.openai && window.openai.sendFollowUpMessage) {\n return window.openai.sendFollowUpMessage({ prompt: prompt });\n }\n if (isClaude) {\n return Promise.reject(new Error(\n 'Follow-up messages are not supported in Claude widgets (network-blocked sandbox)'\n ));\n }\n if (isGemini) {\n return Promise.reject(new Error(\n 'Follow-up messages are not supported in Gemini widgets'\n ));\n }\n if (isExtApps) {\n return this._sendRequest('ui/message', {\n role: 'user',\n content: { type: 'text', text: prompt }\n });\n }\n return Promise.reject(new Error('Messages not supported in this environment'));\n },\n\n // Alias for sendFollowUpMessage (backwards compatibility)\n sendMessage: function(content) {\n return this.sendFollowUpMessage({ prompt: content });\n },\n\n setWidgetState: function(state) {\n if (isOpenAI && window.openai && window.openai.setWidgetState) {\n window.openai.setWidgetState(state);\n return;\n }\n // Polyfill: persist to localStorage\n try {\n localStorage.setItem('__mcpWidgetState', JSON.stringify(state));\n } catch (e) {\n console.warn('Failed to persist widget state:', e);\n }\n },\n\n // ==================== Context API (MCP-specific) ====================\n\n get context() {\n return {\n theme: this.theme,\n displayMode: this.displayMode,\n viewport: this.maxHeight ? { maxHeight: this.maxHeight } : undefined,\n userAgent: this.userAgent,\n locale: this.locale,\n safeArea: this.safeArea\n };\n },\n\n onContextChange: function(callback) {\n contextChangeListeners.push(callback);\n return function() {\n var index = contextChangeListeners.indexOf(callback);\n if (index > -1) contextChangeListeners.splice(index, 1);\n };\n },\n\n onToolResult: function(callback) {\n toolResultListeners.push(callback);\n return function() {\n var index = toolResultListeners.indexOf(callback);\n if (index > -1) toolResultListeners.splice(index, 1);\n };\n },\n\n // ==================== Internal Methods ====================\n\n _sendRequest: function(method, params) {\n return new Promise(function(resolve, reject) {\n var id = ++messageId;\n pendingRequests.set(id, { resolve: resolve, reject: reject });\n\n window.parent.postMessage({\n jsonrpc: '2.0',\n id: id,\n method: method,\n params: params\n }, '*');\n\n // Timeout after 30s\n setTimeout(function() {\n if (pendingRequests.has(id)) {\n pendingRequests.delete(id);\n reject(new Error('Request timeout'));\n }\n }, 30000);\n });\n },\n\n _initExtApps: function() {\n var self = this;\n return this._sendRequest('ui/initialize', {}).then(function(result) {\n if (result && result.hostContext) {\n hostContext = Object.assign(hostContext, result.hostContext);\n }\n // Note: trustedOrigin is now set from first message event origin (trust-on-first-use)\n // Send initialized notification\n window.parent.postMessage({\n jsonrpc: '2.0',\n method: 'ui/notifications/initialized',\n params: {}\n }, '*');\n return result;\n });\n }\n };\n\n // ==================== Event Handling ====================\n\n window.addEventListener('message', function(event) {\n var data = event.data;\n if (!data || data.jsonrpc !== '2.0') return;\n\n // Trust-on-first-use: Establish trusted origin from the first valid message\n if (isExtApps && !trustedOrigin && event.origin) {\n trustedOrigin = event.origin;\n }\n\n // Validate origin for ext-apps environment to prevent spoofed messages\n if (isExtApps && trustedOrigin && event.origin !== trustedOrigin) {\n console.warn('MCP Bridge: Ignoring message from untrusted origin:', event.origin);\n return;\n }\n\n // Handle responses\n if (data.id && pendingRequests.has(data.id)) {\n var pending = pendingRequests.get(data.id);\n pendingRequests.delete(data.id);\n\n if (data.error) {\n var err = new Error(data.error.message || 'Unknown error');\n err.code = data.error.code;\n err.data = data.error.data;\n pending.reject(err);\n } else {\n pending.resolve(data.result);\n }\n return;\n }\n\n // Handle notifications\n switch (data.method) {\n case 'ui/notifications/tool-input':\n window.__mcpToolInput = data.params && data.params.arguments;\n window.dispatchEvent(new CustomEvent('mcp:tool-input', { detail: data.params }));\n break;\n\n case 'ui/notifications/tool-input-partial':\n if (data.params && data.params.arguments) {\n window.__mcpToolInput = Object.assign(window.__mcpToolInput || {}, data.params.arguments);\n }\n break;\n\n case 'ui/notifications/tool-result':\n window.__mcpToolOutput = data.params && data.params.content;\n window.__mcpStructuredContent = data.params && data.params.structuredContent;\n toolResultListeners.forEach(function(cb) {\n try { cb(data.params); } catch (e) { console.error('Tool result listener error:', e); }\n });\n window.dispatchEvent(new CustomEvent('mcp:tool-result', { detail: data.params }));\n break;\n\n case 'ui/notifications/tool-cancelled':\n window.dispatchEvent(new CustomEvent('mcp:tool-cancelled', { detail: data.params }));\n break;\n\n case 'ui/host-context-change':\n hostContext = Object.assign(hostContext, data.params);\n contextChangeListeners.forEach(function(cb) {\n try { cb(data.params); } catch (e) { console.error('Context change listener error:', e); }\n });\n window.dispatchEvent(new CustomEvent('mcp:context-change', { detail: data.params }));\n break;\n\n case 'ui/size-change':\n if (hostContext.viewport) {\n hostContext.viewport = Object.assign(hostContext.viewport, data.params);\n } else {\n hostContext.viewport = data.params;\n }\n break;\n }\n });\n\n // ==================== Initialize ====================\n\n // Export bridge\n window.mcpBridge = bridge;\n\n // Also create window.openai polyfill for non-OpenAI platforms\n // This allows code written for OpenAI to work on other platforms\n if (!isOpenAI) {\n window.openai = {\n get theme() { return bridge.theme; },\n get userAgent() { return bridge.userAgent; },\n get locale() { return bridge.locale; },\n get maxHeight() { return bridge.maxHeight; },\n get displayMode() { return bridge.displayMode; },\n get safeArea() { return bridge.safeArea; },\n get toolInput() { return bridge.toolInput; },\n get toolOutput() { return bridge.toolOutput; },\n get toolResponseMetadata() { return bridge.toolResponseMetadata; },\n get widgetState() { return bridge.widgetState; },\n callTool: function(n, a) { return bridge.callTool(n, a); },\n requestDisplayMode: function(o) { return bridge.requestDisplayMode(o); },\n requestClose: function() { return bridge.requestClose(); },\n openExternal: function(o) { return bridge.openExternal(o); },\n sendFollowUpMessage: function(o) { return bridge.sendFollowUpMessage(o); },\n setWidgetState: function(s) { return bridge.setWidgetState(s); }\n };\n }\n\n // Auto-initialize for ext-apps\n if (isExtApps) {\n bridge._initExtApps().catch(function(err) {\n console.warn('Failed to initialize MCP bridge:', err);\n });\n }\n\n // Dispatch ready event\n window.dispatchEvent(new CustomEvent('mcp:bridge-ready'));\n})();\n</script>\n`;\n\n/**\n * Get the MCP Bridge runtime script as a string (without script tags)\n * Useful for inline embedding in specific scenarios.\n */\nexport function getMCPBridgeScript(): string {\n // Extract the script content without the <script> tags\n const match = MCP_BRIDGE_RUNTIME.match(/<script>([\\s\\S]*?)<\\/script>/);\n return match ? match[1].trim() : '';\n}\n\n/**\n * Check if the current environment supports the MCP bridge\n */\nexport function isMCPBridgeSupported(): boolean {\n if (typeof window === 'undefined') return false;\n const w = window as unknown as { openai?: unknown; claude?: unknown; __mcpPlatform?: string };\n return (\n typeof w.openai !== 'undefined' ||\n typeof w.claude !== 'undefined' ||\n w.__mcpPlatform === 'claude' ||\n w.__mcpPlatform === 'gemini' ||\n w.__mcpPlatform === 'ext-apps' ||\n window.parent !== window\n );\n}\n\n// ============================================\n// New FrontMcpBridge System Exports\n// ============================================\n\n/**\n * The new FrontMcpBridge runtime script (universal - includes all adapters).\n * This is the recommended bridge for new integrations.\n *\n * @example\n * ```typescript\n * import { FRONTMCP_BRIDGE_RUNTIME } from '@frontmcp/ui/runtime';\n * const html = `<!DOCTYPE html><html><head>${FRONTMCP_BRIDGE_RUNTIME}</head>...</html>`;\n * ```\n */\nexport const FRONTMCP_BRIDGE_RUNTIME = BRIDGE_SCRIPT_TAGS.universal;\n\n/**\n * Platform-specific bridge scripts.\n *\n * Use these for smaller bundle sizes when targeting a specific platform.\n *\n * @example\n * ```typescript\n * import { PLATFORM_BRIDGE_SCRIPTS } from '@frontmcp/ui/runtime';\n *\n * // For ChatGPT only\n * const chatgptHtml = `<html><head>${PLATFORM_BRIDGE_SCRIPTS.chatgpt}</head>...</html>`;\n *\n * // For Claude only\n * const claudeHtml = `<html><head>${PLATFORM_BRIDGE_SCRIPTS.claude}</head>...</html>`;\n * ```\n */\nexport const PLATFORM_BRIDGE_SCRIPTS = BRIDGE_SCRIPT_TAGS;\n\n/**\n * Generate a custom bridge script with specific options.\n *\n * @example\n * ```typescript\n * import { generateCustomBridge } from '@frontmcp/ui/runtime';\n *\n * const script = generateCustomBridge({\n * adapters: ['openai', 'ext-apps'],\n * debug: true,\n * trustedOrigins: ['https://my-host.com']\n * });\n * ```\n */\nexport { generateBridgeIIFE as generateCustomBridge } from '../bridge/runtime/iife-generator';\n\n// Re-export IIFE generator options type\nexport type { IIFEGeneratorOptions } from '../bridge/runtime/iife-generator';\n"]}