@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,452 +0,0 @@
1
- "use strict";
2
- /**
3
- * Platform Bridge - Reactive Data Store for Tool UI
4
- *
5
- * Provides a reactive interface for tool output data that works across:
6
- * - React (via useSyncExternalStore)
7
- * - HTMX (via custom events)
8
- * - Vanilla JS (via subscribe callbacks)
9
- *
10
- * Uses Object.defineProperty to intercept when platforms inject data,
11
- * automatically detecting and notifying subscribers when data changes.
12
- *
13
- * @example React integration
14
- * ```tsx
15
- * import { useSyncExternalStore } from 'react';
16
- *
17
- * function useToolOutput() {
18
- * return useSyncExternalStore(
19
- * window.__frontmcp.bridge.subscribe,
20
- * window.__frontmcp.bridge.getSnapshot,
21
- * window.__frontmcp.bridge.getServerSnapshot
22
- * );
23
- * }
24
- * ```
25
- *
26
- * @example Vanilla JS
27
- * ```javascript
28
- * const unsubscribe = window.__frontmcp.bridge.subscribe(() => {
29
- * const state = window.__frontmcp.bridge.getState();
30
- * if (!state.loading) {
31
- * renderWidget(state.data);
32
- * }
33
- * });
34
- * ```
35
- *
36
- * @example HTMX
37
- * ```html
38
- * <div hx-trigger="frontmcp:change from:document" hx-get="/render">
39
- * Loading...
40
- * </div>
41
- * ```
42
- */
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.BRIDGE_TYPES = void 0;
45
- exports.renderBridgeScript = renderBridgeScript;
46
- /**
47
- * Render the Platform Bridge inline script.
48
- *
49
- * This script creates a reactive data store that:
50
- * 1. Installs interceptors on window.openai to detect data injection
51
- * 2. Provides subscribe/getState API for React/HTMX/vanilla integration
52
- * 3. Dispatches custom events for HTMX compatibility
53
- * 4. Handles the race condition between iframe load and data injection
54
- *
55
- * @returns Script tag with bridge implementation
56
- */
57
- function renderBridgeScript() {
58
- return `<script>
59
- (function() {
60
- 'use strict';
61
-
62
- // ============================================
63
- // Debug Mode
64
- // ============================================
65
-
66
- var DEBUG = window.location.search.indexOf('frontmcp_debug=1') > -1 ||
67
- window.localStorage.getItem('frontmcp_debug') === '1';
68
- var debugLog = [];
69
-
70
- function log(level, message, data) {
71
- var entry = {
72
- ts: new Date().toISOString(),
73
- level: level,
74
- message: message,
75
- data: data
76
- };
77
- debugLog.push(entry);
78
- if (DEBUG) {
79
- console[level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log'](
80
- '[frontmcp] ' + message,
81
- data || ''
82
- );
83
- }
84
- }
85
-
86
- // ============================================
87
- // Bridge State Management
88
- // ============================================
89
-
90
- var state = { data: null, loading: true, error: null };
91
- var subscribers = [];
92
- var stateVersion = 0; // For React useSyncExternalStore stability
93
-
94
- function notify() {
95
- stateVersion++;
96
- for (var i = 0; i < subscribers.length; i++) {
97
- try { subscribers[i](); } catch(e) {
98
- log('error', 'Subscriber error:', { error: e.message, stack: e.stack });
99
- }
100
- }
101
- // Dispatch custom event for HTMX
102
- if (typeof CustomEvent !== 'undefined') {
103
- document.dispatchEvent(new CustomEvent('frontmcp:change', { detail: state }));
104
- }
105
- }
106
-
107
- function setData(data) {
108
- // Skip if data hasn't actually changed (prevents unnecessary re-renders)
109
- if (!state.loading && state.data === data) return;
110
- log('info', 'setData called', {
111
- dataType: typeof data,
112
- dataLength: typeof data === 'string' ? data.length : 'N/A',
113
- isNull: data === null,
114
- isUndefined: data === undefined
115
- });
116
- state = { data: data, loading: false, error: null };
117
- notify();
118
- }
119
-
120
- function setError(error) {
121
- log('error', 'setError called', { error: error });
122
- state = { data: null, loading: false, error: error };
123
- notify();
124
- }
125
-
126
- function reset() {
127
- log('info', 'reset called');
128
- state = { data: null, loading: true, error: null };
129
- notify();
130
- }
131
-
132
- // ============================================
133
- // Data Validation
134
- // ============================================
135
-
136
- function validateToolOutput(data, source) {
137
- var errors = [];
138
-
139
- if (data === undefined) {
140
- errors.push('toolOutput is undefined');
141
- } else if (data === null) {
142
- // null is valid initial state from OpenAI
143
- log('info', 'toolOutput is null (OpenAI initial state)', { source: source });
144
- return { valid: false, errors: ['initial_state'], isInitial: true };
145
- }
146
-
147
- if (typeof data === 'object' && data !== null) {
148
- if (data.isError === true) {
149
- errors.push('Tool returned error: ' + JSON.stringify(data));
150
- }
151
- // Check for MCP error structure
152
- if (data.error && data.error.code) {
153
- errors.push('MCP error: code=' + data.error.code + ', message=' + (data.error.message || 'unknown'));
154
- }
155
- }
156
-
157
- if (errors.length > 0) {
158
- log('warn', 'Validation issues', { source: source, errors: errors });
159
- }
160
-
161
- return { valid: errors.length === 0, errors: errors, isInitial: false };
162
- }
163
-
164
- function validateMetadata(meta, source) {
165
- var errors = [];
166
-
167
- if (!meta) {
168
- errors.push('toolResponseMetadata is null/undefined');
169
- return { valid: false, errors: errors };
170
- }
171
-
172
- if (typeof meta !== 'object') {
173
- errors.push('toolResponseMetadata is not an object: ' + typeof meta);
174
- return { valid: false, errors: errors };
175
- }
176
-
177
- var html = meta['ui/html'];
178
- if (html !== undefined) {
179
- if (typeof html !== 'string') {
180
- errors.push('ui/html is not a string: ' + typeof html);
181
- } else if (html.length === 0) {
182
- errors.push('ui/html is empty string');
183
- } else if (html.indexOf('validation-error') > -1) {
184
- errors.push('ui/html contains validation error');
185
- log('warn', 'HTML contains validation error', { htmlPreview: html.substring(0, 500) });
186
- }
187
- }
188
-
189
- if (errors.length > 0) {
190
- log('warn', 'Metadata validation issues', { source: source, errors: errors, keys: Object.keys(meta) });
191
- }
192
-
193
- return { valid: errors.length === 0, errors: errors };
194
- }
195
-
196
- // ============================================
197
- // OpenAI Platform Interceptors
198
- // ============================================
199
-
200
- var openaiIntercepted = false;
201
-
202
- function checkOpenAIData(openai) {
203
- if (!openai) {
204
- log('warn', 'checkOpenAIData: openai object is null');
205
- return false;
206
- }
207
-
208
- log('info', 'checkOpenAIData called', {
209
- hasToolOutput: openai.toolOutput !== undefined,
210
- hasToolResponseMetadata: openai.toolResponseMetadata !== undefined,
211
- toolOutputType: typeof openai.toolOutput,
212
- metadataKeys: openai.toolResponseMetadata ? Object.keys(openai.toolResponseMetadata) : []
213
- });
214
-
215
- // Priority 1: Pre-rendered HTML from toolResponseMetadata
216
- if (openai.toolResponseMetadata) {
217
- var metaValidation = validateMetadata(openai.toolResponseMetadata, 'openai.toolResponseMetadata');
218
- var html = openai.toolResponseMetadata['ui/html'];
219
- if (html && typeof html === 'string') {
220
- log('info', 'Using ui/html from metadata', { htmlLength: html.length });
221
- setData(html);
222
- return true;
223
- }
224
- }
225
-
226
- // Priority 2: Tool output (skip null - that's OpenAI's initial state)
227
- if (openai.toolOutput !== undefined && openai.toolOutput !== null) {
228
- var outputValidation = validateToolOutput(openai.toolOutput, 'openai.toolOutput');
229
- if (!outputValidation.isInitial) {
230
- log('info', 'Using toolOutput', {
231
- valid: outputValidation.valid,
232
- errors: outputValidation.errors
233
- });
234
- setData(openai.toolOutput);
235
- return true;
236
- }
237
- }
238
-
239
- log('info', 'checkOpenAIData: no data found yet');
240
- return false;
241
- }
242
-
243
- function installPropertyInterceptor(obj, prop, onSet) {
244
- var current = obj[prop];
245
- var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
246
-
247
- // Don't re-intercept
248
- if (descriptor && descriptor.get && descriptor.set) return;
249
-
250
- Object.defineProperty(obj, prop, {
251
- get: function() { return current; },
252
- set: function(val) {
253
- current = val;
254
- onSet(val);
255
- },
256
- enumerable: true,
257
- configurable: true
258
- });
259
- }
260
-
261
- function installOpenAIInterceptors(openai) {
262
- if (!openai || openaiIntercepted) return;
263
- openaiIntercepted = true;
264
-
265
- // Check existing data first
266
- if (checkOpenAIData(openai)) return;
267
-
268
- // Intercept toolOutput
269
- installPropertyInterceptor(openai, 'toolOutput', function(val) {
270
- checkOpenAIData(openai);
271
- });
272
-
273
- // Intercept toolResponseMetadata
274
- installPropertyInterceptor(openai, 'toolResponseMetadata', function(val) {
275
- checkOpenAIData(openai);
276
- });
277
- }
278
-
279
- // Install interceptor on window.openai
280
- if (typeof window.openai !== 'undefined') {
281
- installOpenAIInterceptors(window.openai);
282
- } else {
283
- // OpenAI object doesn't exist yet - wait for it
284
- var pendingOpenai = undefined;
285
- Object.defineProperty(window, 'openai', {
286
- get: function() { return pendingOpenai; },
287
- set: function(val) {
288
- pendingOpenai = val;
289
- if (val) installOpenAIInterceptors(val);
290
- },
291
- enumerable: true,
292
- configurable: true
293
- });
294
- }
295
-
296
- // ============================================
297
- // MCP/Generic Platform Support
298
- // ============================================
299
-
300
- // Check for existing __frontmcp.toolOutput
301
- if (window.__frontmcp && window.__frontmcp.toolOutput !== undefined) {
302
- setData(window.__frontmcp.toolOutput);
303
- }
304
-
305
- // Check for __mcpToolOutput
306
- if (window.__mcpToolOutput !== undefined && window.__mcpToolOutput !== null) {
307
- setData(window.__mcpToolOutput);
308
- }
309
-
310
- // Check for __mcpResponseMeta
311
- if (window.__mcpResponseMeta && window.__mcpResponseMeta['ui/html']) {
312
- setData(window.__mcpResponseMeta['ui/html']);
313
- }
314
-
315
- // ============================================
316
- // Bridge API
317
- // ============================================
318
-
319
- window.__frontmcp = window.__frontmcp || {};
320
-
321
- window.__frontmcp.bridge = {
322
- getState: function() { return state; },
323
-
324
- // React useSyncExternalStore compatible
325
- getSnapshot: function() { return state; },
326
- getServerSnapshot: function() { return { data: null, loading: true, error: null }; },
327
-
328
- subscribe: function(callback) {
329
- subscribers.push(callback);
330
- return function() {
331
- var idx = subscribers.indexOf(callback);
332
- if (idx > -1) subscribers.splice(idx, 1);
333
- };
334
- },
335
-
336
- hasData: function() { return !state.loading && state.data !== null; },
337
-
338
- // Manual control (for testing/custom injection)
339
- setData: setData,
340
- setError: setError,
341
- reset: reset,
342
-
343
- // Debug API
344
- debug: {
345
- getLogs: function() { return debugLog.slice(); },
346
- getLastErrors: function() {
347
- return debugLog.filter(function(e) { return e.level === 'error' || e.level === 'warn'; });
348
- },
349
- enableDebug: function() {
350
- DEBUG = true;
351
- window.localStorage.setItem('frontmcp_debug', '1');
352
- console.log('[frontmcp] Debug mode enabled. Reload page to see all logs.');
353
- },
354
- disableDebug: function() {
355
- DEBUG = false;
356
- window.localStorage.removeItem('frontmcp_debug');
357
- },
358
- isDebugEnabled: function() { return DEBUG; },
359
- getStateHistory: function() {
360
- return {
361
- current: state,
362
- version: stateVersion,
363
- subscriberCount: subscribers.length,
364
- openaiIntercepted: openaiIntercepted,
365
- pollCount: pollCount
366
- };
367
- },
368
- dumpAll: function() {
369
- console.group('[frontmcp] Debug Dump');
370
- console.log('State:', state);
371
- console.log('Version:', stateVersion);
372
- console.log('Subscribers:', subscribers.length);
373
- console.log('OpenAI Intercepted:', openaiIntercepted);
374
- console.log('Poll Count:', pollCount);
375
- console.log('Debug Logs:', debugLog);
376
- console.groupEnd();
377
- return {
378
- state: state,
379
- logs: debugLog,
380
- version: stateVersion,
381
- openaiIntercepted: openaiIntercepted
382
- };
383
- }
384
- }
385
- };
386
-
387
- // ============================================
388
- // Fallback Polling (for platforms that don't trigger setters)
389
- // ============================================
390
-
391
- var pollCount = 0;
392
- var maxPolls = 30; // ~3 seconds with exponential backoff
393
-
394
- function pollForData() {
395
- if (state.data !== null || pollCount >= maxPolls) return;
396
- pollCount++;
397
-
398
- // Check all sources
399
- if (window.openai) {
400
- if (checkOpenAIData(window.openai)) return;
401
- }
402
-
403
- // Use getToolOutput if available
404
- if (window.__frontmcp.getToolOutput) {
405
- var data = window.__frontmcp.getToolOutput();
406
- if (data !== undefined && data !== null) {
407
- setData(data);
408
- return;
409
- }
410
- }
411
-
412
- // Exponential backoff: 50ms, 75ms, 112ms, ...
413
- var delay = Math.min(50 * Math.pow(1.5, Math.min(pollCount, 10)), 500);
414
- setTimeout(pollForData, delay);
415
- }
416
-
417
- // Start polling after a brief delay (give interceptors time to fire)
418
- setTimeout(pollForData, 50);
419
- })();
420
- </script>`;
421
- }
422
- /**
423
- * Generate TypeScript types for the bridge (for documentation/IDE support).
424
- */
425
- exports.BRIDGE_TYPES = `
426
- interface BridgeState<T = unknown> {
427
- data: T | null;
428
- loading: boolean;
429
- error: string | null;
430
- }
431
-
432
- interface PlatformBridge<T = unknown> {
433
- getState(): BridgeState<T>;
434
- subscribe(callback: () => void): () => void;
435
- getSnapshot(): BridgeState<T>;
436
- getServerSnapshot(): BridgeState<T>;
437
- hasData(): boolean;
438
- setData(data: T): void;
439
- setError(error: string): void;
440
- reset(): void;
441
- }
442
-
443
- declare global {
444
- interface Window {
445
- __frontmcp: {
446
- bridge: PlatformBridge;
447
- // ... other __frontmcp methods
448
- };
449
- }
450
- }
451
- `;
452
- //# sourceMappingURL=bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/base-template/bridge.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;;;AA+CH,gDA4WC;AAvXD;;;;;;;;;;GAUG;AACH,SAAgB,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0WC,CAAC;AACX,CAAC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B3B,CAAC","sourcesContent":["/**\n * Platform Bridge - Reactive Data Store for Tool UI\n *\n * Provides a reactive interface for tool output data that works across:\n * - React (via useSyncExternalStore)\n * - HTMX (via custom events)\n * - Vanilla JS (via subscribe callbacks)\n *\n * Uses Object.defineProperty to intercept when platforms inject data,\n * automatically detecting and notifying subscribers when data changes.\n *\n * @example React integration\n * ```tsx\n * import { useSyncExternalStore } from 'react';\n *\n * function useToolOutput() {\n * return useSyncExternalStore(\n * window.__frontmcp.bridge.subscribe,\n * window.__frontmcp.bridge.getSnapshot,\n * window.__frontmcp.bridge.getServerSnapshot\n * );\n * }\n * ```\n *\n * @example Vanilla JS\n * ```javascript\n * const unsubscribe = window.__frontmcp.bridge.subscribe(() => {\n * const state = window.__frontmcp.bridge.getState();\n * if (!state.loading) {\n * renderWidget(state.data);\n * }\n * });\n * ```\n *\n * @example HTMX\n * ```html\n * <div hx-trigger=\"frontmcp:change from:document\" hx-get=\"/render\">\n * Loading...\n * </div>\n * ```\n */\n\n/**\n * Bridge state containing data, loading status, and error information.\n */\nexport interface BridgeState<T = unknown> {\n /** Current data (null when loading or no data) */\n data: T | null;\n /** Whether the bridge is waiting for data */\n loading: boolean;\n /** Error message if data loading failed */\n error: string | null;\n}\n\n/**\n * Platform Bridge interface for reactive data access.\n */\nexport interface PlatformBridge<T = unknown> {\n /** Get current state snapshot */\n getState(): BridgeState<T>;\n /** Subscribe to state changes */\n subscribe(callback: () => void): () => void;\n /** React useSyncExternalStore compatible getSnapshot */\n getSnapshot(): BridgeState<T>;\n /** React SSR compatible getServerSnapshot */\n getServerSnapshot(): BridgeState<T>;\n /** Check if bridge has received data */\n hasData(): boolean;\n /** Manually set data (for testing or custom injection) */\n setData(data: T): void;\n /** Manually set error */\n setError(error: string): void;\n /** Reset to loading state */\n reset(): void;\n}\n\n/**\n * Render the Platform Bridge inline script.\n *\n * This script creates a reactive data store that:\n * 1. Installs interceptors on window.openai to detect data injection\n * 2. Provides subscribe/getState API for React/HTMX/vanilla integration\n * 3. Dispatches custom events for HTMX compatibility\n * 4. Handles the race condition between iframe load and data injection\n *\n * @returns Script tag with bridge implementation\n */\nexport function renderBridgeScript(): string {\n return `<script>\n(function() {\n 'use strict';\n\n // ============================================\n // Debug Mode\n // ============================================\n\n var DEBUG = window.location.search.indexOf('frontmcp_debug=1') > -1 ||\n window.localStorage.getItem('frontmcp_debug') === '1';\n var debugLog = [];\n\n function log(level, message, data) {\n var entry = {\n ts: new Date().toISOString(),\n level: level,\n message: message,\n data: data\n };\n debugLog.push(entry);\n if (DEBUG) {\n console[level === 'error' ? 'error' : level === 'warn' ? 'warn' : 'log'](\n '[frontmcp] ' + message,\n data || ''\n );\n }\n }\n\n // ============================================\n // Bridge State Management\n // ============================================\n\n var state = { data: null, loading: true, error: null };\n var subscribers = [];\n var stateVersion = 0; // For React useSyncExternalStore stability\n\n function notify() {\n stateVersion++;\n for (var i = 0; i < subscribers.length; i++) {\n try { subscribers[i](); } catch(e) {\n log('error', 'Subscriber error:', { error: e.message, stack: e.stack });\n }\n }\n // Dispatch custom event for HTMX\n if (typeof CustomEvent !== 'undefined') {\n document.dispatchEvent(new CustomEvent('frontmcp:change', { detail: state }));\n }\n }\n\n function setData(data) {\n // Skip if data hasn't actually changed (prevents unnecessary re-renders)\n if (!state.loading && state.data === data) return;\n log('info', 'setData called', {\n dataType: typeof data,\n dataLength: typeof data === 'string' ? data.length : 'N/A',\n isNull: data === null,\n isUndefined: data === undefined\n });\n state = { data: data, loading: false, error: null };\n notify();\n }\n\n function setError(error) {\n log('error', 'setError called', { error: error });\n state = { data: null, loading: false, error: error };\n notify();\n }\n\n function reset() {\n log('info', 'reset called');\n state = { data: null, loading: true, error: null };\n notify();\n }\n\n // ============================================\n // Data Validation\n // ============================================\n\n function validateToolOutput(data, source) {\n var errors = [];\n\n if (data === undefined) {\n errors.push('toolOutput is undefined');\n } else if (data === null) {\n // null is valid initial state from OpenAI\n log('info', 'toolOutput is null (OpenAI initial state)', { source: source });\n return { valid: false, errors: ['initial_state'], isInitial: true };\n }\n\n if (typeof data === 'object' && data !== null) {\n if (data.isError === true) {\n errors.push('Tool returned error: ' + JSON.stringify(data));\n }\n // Check for MCP error structure\n if (data.error && data.error.code) {\n errors.push('MCP error: code=' + data.error.code + ', message=' + (data.error.message || 'unknown'));\n }\n }\n\n if (errors.length > 0) {\n log('warn', 'Validation issues', { source: source, errors: errors });\n }\n\n return { valid: errors.length === 0, errors: errors, isInitial: false };\n }\n\n function validateMetadata(meta, source) {\n var errors = [];\n\n if (!meta) {\n errors.push('toolResponseMetadata is null/undefined');\n return { valid: false, errors: errors };\n }\n\n if (typeof meta !== 'object') {\n errors.push('toolResponseMetadata is not an object: ' + typeof meta);\n return { valid: false, errors: errors };\n }\n\n var html = meta['ui/html'];\n if (html !== undefined) {\n if (typeof html !== 'string') {\n errors.push('ui/html is not a string: ' + typeof html);\n } else if (html.length === 0) {\n errors.push('ui/html is empty string');\n } else if (html.indexOf('validation-error') > -1) {\n errors.push('ui/html contains validation error');\n log('warn', 'HTML contains validation error', { htmlPreview: html.substring(0, 500) });\n }\n }\n\n if (errors.length > 0) {\n log('warn', 'Metadata validation issues', { source: source, errors: errors, keys: Object.keys(meta) });\n }\n\n return { valid: errors.length === 0, errors: errors };\n }\n\n // ============================================\n // OpenAI Platform Interceptors\n // ============================================\n\n var openaiIntercepted = false;\n\n function checkOpenAIData(openai) {\n if (!openai) {\n log('warn', 'checkOpenAIData: openai object is null');\n return false;\n }\n\n log('info', 'checkOpenAIData called', {\n hasToolOutput: openai.toolOutput !== undefined,\n hasToolResponseMetadata: openai.toolResponseMetadata !== undefined,\n toolOutputType: typeof openai.toolOutput,\n metadataKeys: openai.toolResponseMetadata ? Object.keys(openai.toolResponseMetadata) : []\n });\n\n // Priority 1: Pre-rendered HTML from toolResponseMetadata\n if (openai.toolResponseMetadata) {\n var metaValidation = validateMetadata(openai.toolResponseMetadata, 'openai.toolResponseMetadata');\n var html = openai.toolResponseMetadata['ui/html'];\n if (html && typeof html === 'string') {\n log('info', 'Using ui/html from metadata', { htmlLength: html.length });\n setData(html);\n return true;\n }\n }\n\n // Priority 2: Tool output (skip null - that's OpenAI's initial state)\n if (openai.toolOutput !== undefined && openai.toolOutput !== null) {\n var outputValidation = validateToolOutput(openai.toolOutput, 'openai.toolOutput');\n if (!outputValidation.isInitial) {\n log('info', 'Using toolOutput', {\n valid: outputValidation.valid,\n errors: outputValidation.errors\n });\n setData(openai.toolOutput);\n return true;\n }\n }\n\n log('info', 'checkOpenAIData: no data found yet');\n return false;\n }\n\n function installPropertyInterceptor(obj, prop, onSet) {\n var current = obj[prop];\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n\n // Don't re-intercept\n if (descriptor && descriptor.get && descriptor.set) return;\n\n Object.defineProperty(obj, prop, {\n get: function() { return current; },\n set: function(val) {\n current = val;\n onSet(val);\n },\n enumerable: true,\n configurable: true\n });\n }\n\n function installOpenAIInterceptors(openai) {\n if (!openai || openaiIntercepted) return;\n openaiIntercepted = true;\n\n // Check existing data first\n if (checkOpenAIData(openai)) return;\n\n // Intercept toolOutput\n installPropertyInterceptor(openai, 'toolOutput', function(val) {\n checkOpenAIData(openai);\n });\n\n // Intercept toolResponseMetadata\n installPropertyInterceptor(openai, 'toolResponseMetadata', function(val) {\n checkOpenAIData(openai);\n });\n }\n\n // Install interceptor on window.openai\n if (typeof window.openai !== 'undefined') {\n installOpenAIInterceptors(window.openai);\n } else {\n // OpenAI object doesn't exist yet - wait for it\n var pendingOpenai = undefined;\n Object.defineProperty(window, 'openai', {\n get: function() { return pendingOpenai; },\n set: function(val) {\n pendingOpenai = val;\n if (val) installOpenAIInterceptors(val);\n },\n enumerable: true,\n configurable: true\n });\n }\n\n // ============================================\n // MCP/Generic Platform Support\n // ============================================\n\n // Check for existing __frontmcp.toolOutput\n if (window.__frontmcp && window.__frontmcp.toolOutput !== undefined) {\n setData(window.__frontmcp.toolOutput);\n }\n\n // Check for __mcpToolOutput\n if (window.__mcpToolOutput !== undefined && window.__mcpToolOutput !== null) {\n setData(window.__mcpToolOutput);\n }\n\n // Check for __mcpResponseMeta\n if (window.__mcpResponseMeta && window.__mcpResponseMeta['ui/html']) {\n setData(window.__mcpResponseMeta['ui/html']);\n }\n\n // ============================================\n // Bridge API\n // ============================================\n\n window.__frontmcp = window.__frontmcp || {};\n\n window.__frontmcp.bridge = {\n getState: function() { return state; },\n\n // React useSyncExternalStore compatible\n getSnapshot: function() { return state; },\n getServerSnapshot: function() { return { data: null, loading: true, error: null }; },\n\n subscribe: function(callback) {\n subscribers.push(callback);\n return function() {\n var idx = subscribers.indexOf(callback);\n if (idx > -1) subscribers.splice(idx, 1);\n };\n },\n\n hasData: function() { return !state.loading && state.data !== null; },\n\n // Manual control (for testing/custom injection)\n setData: setData,\n setError: setError,\n reset: reset,\n\n // Debug API\n debug: {\n getLogs: function() { return debugLog.slice(); },\n getLastErrors: function() {\n return debugLog.filter(function(e) { return e.level === 'error' || e.level === 'warn'; });\n },\n enableDebug: function() {\n DEBUG = true;\n window.localStorage.setItem('frontmcp_debug', '1');\n console.log('[frontmcp] Debug mode enabled. Reload page to see all logs.');\n },\n disableDebug: function() {\n DEBUG = false;\n window.localStorage.removeItem('frontmcp_debug');\n },\n isDebugEnabled: function() { return DEBUG; },\n getStateHistory: function() {\n return {\n current: state,\n version: stateVersion,\n subscriberCount: subscribers.length,\n openaiIntercepted: openaiIntercepted,\n pollCount: pollCount\n };\n },\n dumpAll: function() {\n console.group('[frontmcp] Debug Dump');\n console.log('State:', state);\n console.log('Version:', stateVersion);\n console.log('Subscribers:', subscribers.length);\n console.log('OpenAI Intercepted:', openaiIntercepted);\n console.log('Poll Count:', pollCount);\n console.log('Debug Logs:', debugLog);\n console.groupEnd();\n return {\n state: state,\n logs: debugLog,\n version: stateVersion,\n openaiIntercepted: openaiIntercepted\n };\n }\n }\n };\n\n // ============================================\n // Fallback Polling (for platforms that don't trigger setters)\n // ============================================\n\n var pollCount = 0;\n var maxPolls = 30; // ~3 seconds with exponential backoff\n\n function pollForData() {\n if (state.data !== null || pollCount >= maxPolls) return;\n pollCount++;\n\n // Check all sources\n if (window.openai) {\n if (checkOpenAIData(window.openai)) return;\n }\n\n // Use getToolOutput if available\n if (window.__frontmcp.getToolOutput) {\n var data = window.__frontmcp.getToolOutput();\n if (data !== undefined && data !== null) {\n setData(data);\n return;\n }\n }\n\n // Exponential backoff: 50ms, 75ms, 112ms, ...\n var delay = Math.min(50 * Math.pow(1.5, Math.min(pollCount, 10)), 500);\n setTimeout(pollForData, delay);\n }\n\n // Start polling after a brief delay (give interceptors time to fire)\n setTimeout(pollForData, 50);\n})();\n</script>`;\n}\n\n/**\n * Generate TypeScript types for the bridge (for documentation/IDE support).\n */\nexport const BRIDGE_TYPES = `\ninterface BridgeState<T = unknown> {\n data: T | null;\n loading: boolean;\n error: string | null;\n}\n\ninterface PlatformBridge<T = unknown> {\n getState(): BridgeState<T>;\n subscribe(callback: () => void): () => void;\n getSnapshot(): BridgeState<T>;\n getServerSnapshot(): BridgeState<T>;\n hasData(): boolean;\n setData(data: T): void;\n setError(error: string): void;\n reset(): void;\n}\n\ndeclare global {\n interface Window {\n __frontmcp: {\n bridge: PlatformBridge;\n // ... other __frontmcp methods\n };\n }\n}\n`;\n"]}
@@ -1,91 +0,0 @@
1
- /**
2
- * Default Base Template for Tool UI
3
- *
4
- * Provides a generic HTML wrapper for tool output widgets that:
5
- * 1. Includes theming (Tailwind CSS with @theme)
6
- * 2. Includes platform polyfills (callTool, detectMcpSession)
7
- * 3. Polls for toolOutput from window.openai or window.__frontmcp
8
- * 4. Renders content via window.__frontmcp.renderContent or default JSON renderer
9
- *
10
- * This template is platform-agnostic and works with:
11
- * - OpenAI Apps SDK (window.openai.toolOutput)
12
- * - Claude Artifacts
13
- * - Custom hosts using MCP protocol
14
- * - ngrok/iframe scenarios
15
- */
16
- import { type ThemeConfig } from '../theme';
17
- import { type McpSession } from './polyfills';
18
- /**
19
- * Options for creating a default base template.
20
- */
21
- export interface BaseTemplateOptions {
22
- /** Tool name for identification */
23
- toolName: string;
24
- /** Theme configuration */
25
- theme?: ThemeConfig;
26
- /** MCP session info for callTool polyfill fallback */
27
- mcpSession?: McpSession;
28
- /** Include HTMX (default: false) */
29
- htmx?: boolean;
30
- /** Include Alpine.js (default: false) */
31
- alpine?: boolean;
32
- /** Include fonts (default: true) */
33
- fonts?: boolean;
34
- /** Use inline scripts (for blocked network platforms) */
35
- inline?: boolean;
36
- /**
37
- * Additional head content (scripts, meta tags).
38
- * @warning This content is injected WITHOUT escaping. Only use with trusted content.
39
- */
40
- headContent?: string;
41
- /** Custom body classes */
42
- bodyClass?: string;
43
- /** Custom widget container classes */
44
- containerClass?: string;
45
- }
46
- /**
47
- * Create a default base template for tool UI widgets.
48
- *
49
- * This generates a complete HTML document that:
50
- * 1. Loads Tailwind CSS with theme configuration
51
- * 2. Injects platform polyfills (callTool, detectMcpSession, getToolOutput)
52
- * 3. Waits for toolOutput to be injected
53
- * 4. Renders content using window.__frontmcp.renderContent or default JSON renderer
54
- *
55
- * @param options - Base template configuration
56
- * @returns Complete HTML document string
57
- *
58
- * @example Basic usage
59
- * ```typescript
60
- * const html = createDefaultBaseTemplate({ toolName: 'get_weather' });
61
- * ```
62
- *
63
- * @example With custom theme and MCP session
64
- * ```typescript
65
- * const html = createDefaultBaseTemplate({
66
- * toolName: 'get_weather',
67
- * theme: customTheme,
68
- * mcpSession: { mcpUrl: 'https://mcp.example.com', sessionId: 'abc123' },
69
- * });
70
- * ```
71
- *
72
- * @example For Claude Artifacts (inline scripts)
73
- * ```typescript
74
- * await fetchAndCacheScriptsFromTheme(theme);
75
- * const html = createDefaultBaseTemplate({
76
- * toolName: 'get_weather',
77
- * inline: true,
78
- * });
79
- * ```
80
- */
81
- export declare function createDefaultBaseTemplate(options: BaseTemplateOptions): string;
82
- /**
83
- * Create a minimal base template without fonts.
84
- *
85
- * Use this for lightweight widgets or when fonts are loaded elsewhere.
86
- *
87
- * @param toolName - Tool name for identification
88
- * @param mcpSession - Optional MCP session info
89
- * @returns Complete HTML document string
90
- */
91
- export declare function createMinimalBaseTemplate(toolName: string, mcpSession?: McpSession): string;