@frontmcp/ui 0.5.0

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 (393) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +438 -0
  3. package/package.json +147 -0
  4. package/src/adapters/index.d.ts +10 -0
  5. package/src/adapters/index.js +18 -0
  6. package/src/adapters/index.js.map +1 -0
  7. package/src/adapters/platform-meta.d.ts +165 -0
  8. package/src/adapters/platform-meta.js +310 -0
  9. package/src/adapters/platform-meta.js.map +1 -0
  10. package/src/base-template/bridge.d.ts +89 -0
  11. package/src/base-template/bridge.js +452 -0
  12. package/src/base-template/bridge.js.map +1 -0
  13. package/src/base-template/default-base-template.d.ts +91 -0
  14. package/src/base-template/default-base-template.js +435 -0
  15. package/src/base-template/default-base-template.js.map +1 -0
  16. package/src/base-template/index.d.ts +14 -0
  17. package/src/base-template/index.js +30 -0
  18. package/src/base-template/index.js.map +1 -0
  19. package/src/base-template/polyfills.d.ts +30 -0
  20. package/src/base-template/polyfills.js +190 -0
  21. package/src/base-template/polyfills.js.map +1 -0
  22. package/src/base-template/theme-styles.d.ts +73 -0
  23. package/src/base-template/theme-styles.js +95 -0
  24. package/src/base-template/theme-styles.js.map +1 -0
  25. package/src/bridge/adapters/base-adapter.d.ts +103 -0
  26. package/src/bridge/adapters/base-adapter.js +314 -0
  27. package/src/bridge/adapters/base-adapter.js.map +1 -0
  28. package/src/bridge/adapters/claude.adapter.d.ts +66 -0
  29. package/src/bridge/adapters/claude.adapter.js +145 -0
  30. package/src/bridge/adapters/claude.adapter.js.map +1 -0
  31. package/src/bridge/adapters/ext-apps.adapter.d.ts +142 -0
  32. package/src/bridge/adapters/ext-apps.adapter.js +416 -0
  33. package/src/bridge/adapters/ext-apps.adapter.js.map +1 -0
  34. package/src/bridge/adapters/gemini.adapter.d.ts +63 -0
  35. package/src/bridge/adapters/gemini.adapter.js +160 -0
  36. package/src/bridge/adapters/gemini.adapter.js.map +1 -0
  37. package/src/bridge/adapters/generic.adapter.d.ts +55 -0
  38. package/src/bridge/adapters/generic.adapter.js +108 -0
  39. package/src/bridge/adapters/generic.adapter.js.map +1 -0
  40. package/src/bridge/adapters/index.d.ts +25 -0
  41. package/src/bridge/adapters/index.js +65 -0
  42. package/src/bridge/adapters/index.js.map +1 -0
  43. package/src/bridge/adapters/openai.adapter.d.ts +64 -0
  44. package/src/bridge/adapters/openai.adapter.js +194 -0
  45. package/src/bridge/adapters/openai.adapter.js.map +1 -0
  46. package/src/bridge/core/adapter-registry.d.ts +121 -0
  47. package/src/bridge/core/adapter-registry.js +271 -0
  48. package/src/bridge/core/adapter-registry.js.map +1 -0
  49. package/src/bridge/core/bridge-factory.d.ts +198 -0
  50. package/src/bridge/core/bridge-factory.js +428 -0
  51. package/src/bridge/core/bridge-factory.js.map +1 -0
  52. package/src/bridge/core/index.d.ts +9 -0
  53. package/src/bridge/core/index.js +22 -0
  54. package/src/bridge/core/index.js.map +1 -0
  55. package/src/bridge/index.d.ts +61 -0
  56. package/src/bridge/index.js +94 -0
  57. package/src/bridge/index.js.map +1 -0
  58. package/src/bridge/runtime/iife-generator.d.ts +61 -0
  59. package/src/bridge/runtime/iife-generator.js +940 -0
  60. package/src/bridge/runtime/iife-generator.js.map +1 -0
  61. package/src/bridge/runtime/index.d.ts +8 -0
  62. package/src/bridge/runtime/index.js +16 -0
  63. package/src/bridge/runtime/index.js.map +1 -0
  64. package/src/bridge/types.d.ts +385 -0
  65. package/src/bridge/types.js +11 -0
  66. package/src/bridge/types.js.map +1 -0
  67. package/src/build/cdn-resources.d.ts +140 -0
  68. package/src/build/cdn-resources.js +314 -0
  69. package/src/build/cdn-resources.js.map +1 -0
  70. package/src/build/index.d.ts +294 -0
  71. package/src/build/index.js +325 -0
  72. package/src/build/index.js.map +1 -0
  73. package/src/build/widget-manifest.d.ts +212 -0
  74. package/src/build/widget-manifest.js +652 -0
  75. package/src/build/widget-manifest.js.map +1 -0
  76. package/src/bundler/bundler.d.ts +110 -0
  77. package/src/bundler/bundler.js +432 -0
  78. package/src/bundler/bundler.js.map +1 -0
  79. package/src/bundler/cache.d.ts +172 -0
  80. package/src/bundler/cache.js +250 -0
  81. package/src/bundler/cache.js.map +1 -0
  82. package/src/bundler/index.d.ts +41 -0
  83. package/src/bundler/index.js +73 -0
  84. package/src/bundler/index.js.map +1 -0
  85. package/src/bundler/sandbox/enclave-adapter.d.ts +120 -0
  86. package/src/bundler/sandbox/enclave-adapter.js +339 -0
  87. package/src/bundler/sandbox/enclave-adapter.js.map +1 -0
  88. package/src/bundler/sandbox/executor.d.ts +13 -0
  89. package/src/bundler/sandbox/executor.js +22 -0
  90. package/src/bundler/sandbox/executor.js.map +1 -0
  91. package/src/bundler/sandbox/policy.d.ts +61 -0
  92. package/src/bundler/sandbox/policy.js +238 -0
  93. package/src/bundler/sandbox/policy.js.map +1 -0
  94. package/src/bundler/types.d.ts +347 -0
  95. package/src/bundler/types.js +132 -0
  96. package/src/bundler/types.js.map +1 -0
  97. package/src/components/alert.d.ts +71 -0
  98. package/src/components/alert.js +189 -0
  99. package/src/components/alert.js.map +1 -0
  100. package/src/components/alert.schema.d.ts +114 -0
  101. package/src/components/alert.schema.js +105 -0
  102. package/src/components/alert.schema.js.map +1 -0
  103. package/src/components/avatar.d.ts +76 -0
  104. package/src/components/avatar.js +176 -0
  105. package/src/components/avatar.js.map +1 -0
  106. package/src/components/avatar.schema.d.ts +169 -0
  107. package/src/components/avatar.schema.js +103 -0
  108. package/src/components/avatar.schema.js.map +1 -0
  109. package/src/components/badge.d.ts +70 -0
  110. package/src/components/badge.js +149 -0
  111. package/src/components/badge.js.map +1 -0
  112. package/src/components/badge.schema.d.ts +109 -0
  113. package/src/components/badge.schema.js +96 -0
  114. package/src/components/badge.schema.js.map +1 -0
  115. package/src/components/button.d.ts +111 -0
  116. package/src/components/button.js +336 -0
  117. package/src/components/button.js.map +1 -0
  118. package/src/components/button.schema.d.ts +148 -0
  119. package/src/components/button.schema.js +121 -0
  120. package/src/components/button.schema.js.map +1 -0
  121. package/src/components/card.d.ts +60 -0
  122. package/src/components/card.js +117 -0
  123. package/src/components/card.js.map +1 -0
  124. package/src/components/card.schema.d.ts +113 -0
  125. package/src/components/card.schema.js +98 -0
  126. package/src/components/card.schema.js.map +1 -0
  127. package/src/components/form.d.ts +239 -0
  128. package/src/components/form.js +420 -0
  129. package/src/components/form.js.map +1 -0
  130. package/src/components/form.schema.d.ts +441 -0
  131. package/src/components/form.schema.js +406 -0
  132. package/src/components/form.schema.js.map +1 -0
  133. package/src/components/index.d.ts +29 -0
  134. package/src/components/index.js +98 -0
  135. package/src/components/index.js.map +1 -0
  136. package/src/components/list.d.ts +127 -0
  137. package/src/components/list.js +279 -0
  138. package/src/components/list.js.map +1 -0
  139. package/src/components/list.schema.d.ts +134 -0
  140. package/src/components/list.schema.js +168 -0
  141. package/src/components/list.schema.js.map +1 -0
  142. package/src/components/modal.d.ts +111 -0
  143. package/src/components/modal.js +260 -0
  144. package/src/components/modal.js.map +1 -0
  145. package/src/components/modal.schema.d.ts +186 -0
  146. package/src/components/modal.schema.js +167 -0
  147. package/src/components/modal.schema.js.map +1 -0
  148. package/src/components/table.d.ts +105 -0
  149. package/src/components/table.js +283 -0
  150. package/src/components/table.js.map +1 -0
  151. package/src/components/table.schema.d.ts +159 -0
  152. package/src/components/table.schema.js +173 -0
  153. package/src/components/table.schema.js.map +1 -0
  154. package/src/handlebars/helpers.d.ts +348 -0
  155. package/src/handlebars/helpers.js +605 -0
  156. package/src/handlebars/helpers.js.map +1 -0
  157. package/src/handlebars/index.d.ts +193 -0
  158. package/src/handlebars/index.js +350 -0
  159. package/src/handlebars/index.js.map +1 -0
  160. package/src/index.d.ts +50 -0
  161. package/src/index.js +192 -0
  162. package/src/index.js.map +1 -0
  163. package/src/layouts/base.d.ts +88 -0
  164. package/src/layouts/base.js +227 -0
  165. package/src/layouts/base.js.map +1 -0
  166. package/src/layouts/index.d.ts +7 -0
  167. package/src/layouts/index.js +25 -0
  168. package/src/layouts/index.js.map +1 -0
  169. package/src/layouts/presets.d.ts +133 -0
  170. package/src/layouts/presets.js +277 -0
  171. package/src/layouts/presets.js.map +1 -0
  172. package/src/pages/consent.d.ts +116 -0
  173. package/src/pages/consent.js +218 -0
  174. package/src/pages/consent.js.map +1 -0
  175. package/src/pages/error.d.ts +100 -0
  176. package/src/pages/error.js +263 -0
  177. package/src/pages/error.js.map +1 -0
  178. package/src/pages/index.d.ts +8 -0
  179. package/src/pages/index.js +27 -0
  180. package/src/pages/index.js.map +1 -0
  181. package/src/react/Alert.d.ts +101 -0
  182. package/src/react/Alert.js +51 -0
  183. package/src/react/Alert.js.map +1 -0
  184. package/src/react/Badge.d.ts +100 -0
  185. package/src/react/Badge.js +55 -0
  186. package/src/react/Badge.js.map +1 -0
  187. package/src/react/Button.d.ts +108 -0
  188. package/src/react/Button.js +52 -0
  189. package/src/react/Button.js.map +1 -0
  190. package/src/react/Card.d.ts +103 -0
  191. package/src/react/Card.js +55 -0
  192. package/src/react/Card.js.map +1 -0
  193. package/src/react/hooks/context.d.ts +178 -0
  194. package/src/react/hooks/context.js +287 -0
  195. package/src/react/hooks/context.js.map +1 -0
  196. package/src/react/hooks/index.d.ts +41 -0
  197. package/src/react/hooks/index.js +61 -0
  198. package/src/react/hooks/index.js.map +1 -0
  199. package/src/react/hooks/tools.d.ts +283 -0
  200. package/src/react/hooks/tools.js +465 -0
  201. package/src/react/hooks/tools.js.map +1 -0
  202. package/src/react/index.d.ts +80 -0
  203. package/src/react/index.js +113 -0
  204. package/src/react/index.js.map +1 -0
  205. package/src/react/types.d.ts +105 -0
  206. package/src/react/types.js +12 -0
  207. package/src/react/types.js.map +1 -0
  208. package/src/react/utils.d.ts +42 -0
  209. package/src/react/utils.js +99 -0
  210. package/src/react/utils.js.map +1 -0
  211. package/src/registry/index.d.ts +45 -0
  212. package/src/registry/index.js +67 -0
  213. package/src/registry/index.js.map +1 -0
  214. package/src/registry/render-template.d.ts +86 -0
  215. package/src/registry/render-template.js +239 -0
  216. package/src/registry/render-template.js.map +1 -0
  217. package/src/registry/tool-ui.registry.d.ts +260 -0
  218. package/src/registry/tool-ui.registry.js +438 -0
  219. package/src/registry/tool-ui.registry.js.map +1 -0
  220. package/src/registry/uri-utils.d.ts +55 -0
  221. package/src/registry/uri-utils.js +97 -0
  222. package/src/registry/uri-utils.js.map +1 -0
  223. package/src/render/index.d.ts +7 -0
  224. package/src/render/index.js +14 -0
  225. package/src/render/index.js.map +1 -0
  226. package/src/render/prerender.d.ts +56 -0
  227. package/src/render/prerender.js +98 -0
  228. package/src/render/prerender.js.map +1 -0
  229. package/src/renderers/cache.d.ts +144 -0
  230. package/src/renderers/cache.js +240 -0
  231. package/src/renderers/cache.js.map +1 -0
  232. package/src/renderers/html.renderer.d.ts +122 -0
  233. package/src/renderers/html.renderer.js +204 -0
  234. package/src/renderers/html.renderer.js.map +1 -0
  235. package/src/renderers/index.d.ts +35 -0
  236. package/src/renderers/index.js +70 -0
  237. package/src/renderers/index.js.map +1 -0
  238. package/src/renderers/mdx.renderer.d.ts +119 -0
  239. package/src/renderers/mdx.renderer.js +305 -0
  240. package/src/renderers/mdx.renderer.js.map +1 -0
  241. package/src/renderers/react.renderer.d.ts +95 -0
  242. package/src/renderers/react.renderer.js +260 -0
  243. package/src/renderers/react.renderer.js.map +1 -0
  244. package/src/renderers/registry.d.ts +133 -0
  245. package/src/renderers/registry.js +232 -0
  246. package/src/renderers/registry.js.map +1 -0
  247. package/src/renderers/types.d.ts +341 -0
  248. package/src/renderers/types.js +9 -0
  249. package/src/renderers/types.js.map +1 -0
  250. package/src/renderers/utils/detect.d.ts +106 -0
  251. package/src/renderers/utils/detect.js +267 -0
  252. package/src/renderers/utils/detect.js.map +1 -0
  253. package/src/renderers/utils/hash.d.ts +39 -0
  254. package/src/renderers/utils/hash.js +75 -0
  255. package/src/renderers/utils/hash.js.map +1 -0
  256. package/src/renderers/utils/index.d.ts +8 -0
  257. package/src/renderers/utils/index.js +28 -0
  258. package/src/renderers/utils/index.js.map +1 -0
  259. package/src/renderers/utils/transpiler.d.ts +88 -0
  260. package/src/renderers/utils/transpiler.js +215 -0
  261. package/src/renderers/utils/transpiler.js.map +1 -0
  262. package/src/runtime/adapters/html.adapter.d.ts +58 -0
  263. package/src/runtime/adapters/html.adapter.js +131 -0
  264. package/src/runtime/adapters/html.adapter.js.map +1 -0
  265. package/src/runtime/adapters/index.d.ts +25 -0
  266. package/src/runtime/adapters/index.js +54 -0
  267. package/src/runtime/adapters/index.js.map +1 -0
  268. package/src/runtime/adapters/mdx.adapter.d.ts +72 -0
  269. package/src/runtime/adapters/mdx.adapter.js +241 -0
  270. package/src/runtime/adapters/mdx.adapter.js.map +1 -0
  271. package/src/runtime/adapters/react.adapter.d.ts +69 -0
  272. package/src/runtime/adapters/react.adapter.js +245 -0
  273. package/src/runtime/adapters/react.adapter.js.map +1 -0
  274. package/src/runtime/adapters/types.d.ts +94 -0
  275. package/src/runtime/adapters/types.js +11 -0
  276. package/src/runtime/adapters/types.js.map +1 -0
  277. package/src/runtime/csp.d.ts +37 -0
  278. package/src/runtime/csp.js +140 -0
  279. package/src/runtime/csp.js.map +1 -0
  280. package/src/runtime/index.d.ts +16 -0
  281. package/src/runtime/index.js +72 -0
  282. package/src/runtime/index.js.map +1 -0
  283. package/src/runtime/mcp-bridge.d.ts +100 -0
  284. package/src/runtime/mcp-bridge.js +581 -0
  285. package/src/runtime/mcp-bridge.js.map +1 -0
  286. package/src/runtime/renderer-runtime.d.ts +132 -0
  287. package/src/runtime/renderer-runtime.js +389 -0
  288. package/src/runtime/renderer-runtime.js.map +1 -0
  289. package/src/runtime/sanitizer.d.ts +171 -0
  290. package/src/runtime/sanitizer.js +318 -0
  291. package/src/runtime/sanitizer.js.map +1 -0
  292. package/src/runtime/types.d.ts +414 -0
  293. package/src/runtime/types.js +12 -0
  294. package/src/runtime/types.js.map +1 -0
  295. package/src/runtime/wrapper.d.ts +375 -0
  296. package/src/runtime/wrapper.js +1793 -0
  297. package/src/runtime/wrapper.js.map +1 -0
  298. package/src/styles/index.d.ts +7 -0
  299. package/src/styles/index.js +11 -0
  300. package/src/styles/index.js.map +1 -0
  301. package/src/styles/variants.d.ts +50 -0
  302. package/src/styles/variants.js +175 -0
  303. package/src/styles/variants.js.map +1 -0
  304. package/src/theme/cdn.d.ts +194 -0
  305. package/src/theme/cdn.js +375 -0
  306. package/src/theme/cdn.js.map +1 -0
  307. package/src/theme/index.d.ts +17 -0
  308. package/src/theme/index.js +57 -0
  309. package/src/theme/index.js.map +1 -0
  310. package/src/theme/platforms.d.ts +106 -0
  311. package/src/theme/platforms.js +161 -0
  312. package/src/theme/platforms.js.map +1 -0
  313. package/src/theme/presets/github-openai.d.ts +49 -0
  314. package/src/theme/presets/github-openai.js +189 -0
  315. package/src/theme/presets/github-openai.js.map +1 -0
  316. package/src/theme/presets/index.d.ts +10 -0
  317. package/src/theme/presets/index.js +17 -0
  318. package/src/theme/presets/index.js.map +1 -0
  319. package/src/theme/theme.d.ts +395 -0
  320. package/src/theme/theme.js +332 -0
  321. package/src/theme/theme.js.map +1 -0
  322. package/src/tool-template/builder.d.ts +212 -0
  323. package/src/tool-template/builder.js +397 -0
  324. package/src/tool-template/builder.js.map +1 -0
  325. package/src/tool-template/index.d.ts +15 -0
  326. package/src/tool-template/index.js +38 -0
  327. package/src/tool-template/index.js.map +1 -0
  328. package/src/types/index.d.ts +13 -0
  329. package/src/types/index.js +26 -0
  330. package/src/types/index.js.map +1 -0
  331. package/src/types/ui-config.d.ts +357 -0
  332. package/src/types/ui-config.js +12 -0
  333. package/src/types/ui-config.js.map +1 -0
  334. package/src/types/ui-runtime.d.ts +965 -0
  335. package/src/types/ui-runtime.js +117 -0
  336. package/src/types/ui-runtime.js.map +1 -0
  337. package/src/validation/error-box.d.ts +55 -0
  338. package/src/validation/error-box.js +75 -0
  339. package/src/validation/error-box.js.map +1 -0
  340. package/src/validation/index.d.ts +12 -0
  341. package/src/validation/index.js +21 -0
  342. package/src/validation/index.js.map +1 -0
  343. package/src/validation/wrapper.d.ts +96 -0
  344. package/src/validation/wrapper.js +117 -0
  345. package/src/validation/wrapper.js.map +1 -0
  346. package/src/web-components/core/attribute-parser.d.ts +85 -0
  347. package/src/web-components/core/attribute-parser.js +189 -0
  348. package/src/web-components/core/attribute-parser.js.map +1 -0
  349. package/src/web-components/core/base-element.d.ts +197 -0
  350. package/src/web-components/core/base-element.js +289 -0
  351. package/src/web-components/core/base-element.js.map +1 -0
  352. package/src/web-components/core/index.d.ts +8 -0
  353. package/src/web-components/core/index.js +18 -0
  354. package/src/web-components/core/index.js.map +1 -0
  355. package/src/web-components/elements/fmcp-alert.d.ts +45 -0
  356. package/src/web-components/elements/fmcp-alert.js +93 -0
  357. package/src/web-components/elements/fmcp-alert.js.map +1 -0
  358. package/src/web-components/elements/fmcp-badge.d.ts +46 -0
  359. package/src/web-components/elements/fmcp-badge.js +99 -0
  360. package/src/web-components/elements/fmcp-badge.js.map +1 -0
  361. package/src/web-components/elements/fmcp-button.d.ts +124 -0
  362. package/src/web-components/elements/fmcp-button.js +233 -0
  363. package/src/web-components/elements/fmcp-button.js.map +1 -0
  364. package/src/web-components/elements/fmcp-card.d.ts +52 -0
  365. package/src/web-components/elements/fmcp-card.js +115 -0
  366. package/src/web-components/elements/fmcp-card.js.map +1 -0
  367. package/src/web-components/elements/fmcp-input.d.ts +95 -0
  368. package/src/web-components/elements/fmcp-input.js +248 -0
  369. package/src/web-components/elements/fmcp-input.js.map +1 -0
  370. package/src/web-components/elements/fmcp-select.d.ts +99 -0
  371. package/src/web-components/elements/fmcp-select.js +243 -0
  372. package/src/web-components/elements/fmcp-select.js.map +1 -0
  373. package/src/web-components/elements/index.d.ts +12 -0
  374. package/src/web-components/elements/index.js +34 -0
  375. package/src/web-components/elements/index.js.map +1 -0
  376. package/src/web-components/index.d.ts +49 -0
  377. package/src/web-components/index.js +75 -0
  378. package/src/web-components/index.js.map +1 -0
  379. package/src/web-components/register.d.ts +56 -0
  380. package/src/web-components/register.js +80 -0
  381. package/src/web-components/register.js.map +1 -0
  382. package/src/web-components/types.d.ts +121 -0
  383. package/src/web-components/types.js +25 -0
  384. package/src/web-components/types.js.map +1 -0
  385. package/src/widgets/index.d.ts +7 -0
  386. package/src/widgets/index.js +24 -0
  387. package/src/widgets/index.js.map +1 -0
  388. package/src/widgets/progress.d.ts +132 -0
  389. package/src/widgets/progress.js +303 -0
  390. package/src/widgets/progress.js.map +1 -0
  391. package/src/widgets/resource.d.ts +162 -0
  392. package/src/widgets/resource.js +340 -0
  393. package/src/widgets/resource.js.map +1 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /**
3
+ * Gemini Platform Adapter
4
+ *
5
+ * Adapter for Google's Gemini AI platform.
6
+ * Provides integration with Gemini-specific features and APIs.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.GeminiAdapter = void 0;
12
+ exports.createGeminiAdapter = createGeminiAdapter;
13
+ const base_adapter_1 = require("./base-adapter");
14
+ /**
15
+ * Gemini adapter for Google's AI platform.
16
+ *
17
+ * Features:
18
+ * - Theme detection from Gemini SDK or system
19
+ * - Network access for external resources
20
+ * - LocalStorage persistence
21
+ * - Link opening capability
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { GeminiAdapter } from '@frontmcp/ui/bridge';
26
+ *
27
+ * const adapter = new GeminiAdapter();
28
+ * if (adapter.canHandle()) {
29
+ * await adapter.initialize();
30
+ * }
31
+ * ```
32
+ */
33
+ class GeminiAdapter extends base_adapter_1.BaseAdapter {
34
+ id = 'gemini';
35
+ name = 'Google Gemini';
36
+ priority = 40;
37
+ _gemini;
38
+ constructor() {
39
+ super();
40
+ this._capabilities = {
41
+ ...base_adapter_1.DEFAULT_CAPABILITIES,
42
+ canCallTools: false, // May be enabled if SDK supports it
43
+ canSendMessages: false, // May be enabled if SDK supports it
44
+ canOpenLinks: true,
45
+ canPersistState: true,
46
+ hasNetworkAccess: true,
47
+ supportsDisplayModes: false,
48
+ supportsTheme: true,
49
+ };
50
+ }
51
+ /**
52
+ * Check if we're running in a Gemini context.
53
+ */
54
+ canHandle() {
55
+ if (typeof window === 'undefined')
56
+ return false;
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ const win = window;
59
+ // Check explicit platform marker
60
+ if (win.__mcpPlatform === 'gemini')
61
+ return true;
62
+ // Check for Gemini-specific global
63
+ if (win.gemini)
64
+ return true;
65
+ // Check URL patterns for Gemini
66
+ if (typeof location !== 'undefined') {
67
+ const href = location.href;
68
+ if (href.includes('gemini.google.com') || href.includes('bard.google.com')) {
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+ /**
75
+ * Initialize the Gemini adapter.
76
+ */
77
+ async initialize() {
78
+ if (this._initialized)
79
+ return;
80
+ // Get Gemini SDK reference if available
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ const win = window;
83
+ this._gemini = win.gemini;
84
+ // Update capabilities based on available SDK features
85
+ if (this._gemini?.ui) {
86
+ if (this._gemini.ui.sendMessage) {
87
+ this._capabilities = { ...this._capabilities, canSendMessages: true };
88
+ }
89
+ }
90
+ // Call base initialization
91
+ await super.initialize();
92
+ // Setup theme listener
93
+ this._setupThemeListener();
94
+ }
95
+ /**
96
+ * Get current theme.
97
+ */
98
+ getTheme() {
99
+ if (this._gemini?.ui?.getTheme) {
100
+ const theme = this._gemini.ui.getTheme();
101
+ return theme === 'dark' ? 'dark' : 'light';
102
+ }
103
+ return super.getTheme();
104
+ }
105
+ /**
106
+ * Send a message (if supported by SDK).
107
+ */
108
+ async sendMessage(content) {
109
+ if (this._gemini?.ui?.sendMessage) {
110
+ await this._gemini.ui.sendMessage(content);
111
+ return;
112
+ }
113
+ throw new Error('Sending messages is not supported by Gemini adapter');
114
+ }
115
+ /**
116
+ * Open a link.
117
+ */
118
+ async openLink(url) {
119
+ if (this._gemini?.ui?.openLink) {
120
+ await this._gemini.ui.openLink(url);
121
+ return;
122
+ }
123
+ // Fallback to window.open
124
+ return super.openLink(url);
125
+ }
126
+ // ============================================
127
+ // Private Helpers
128
+ // ============================================
129
+ /**
130
+ * Setup listener for system theme changes.
131
+ */
132
+ _setupThemeListener() {
133
+ if (typeof window === 'undefined' || !window.matchMedia)
134
+ return;
135
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
136
+ const handleChange = (e) => {
137
+ // Only update if not using SDK theme
138
+ if (!this._gemini?.ui?.getTheme) {
139
+ const newTheme = e.matches ? 'dark' : 'light';
140
+ if (newTheme !== this._hostContext.theme) {
141
+ this._notifyContextChange({ theme: newTheme });
142
+ }
143
+ }
144
+ };
145
+ if (mediaQuery.addEventListener) {
146
+ mediaQuery.addEventListener('change', handleChange);
147
+ }
148
+ else if (mediaQuery.addListener) {
149
+ mediaQuery.addListener(handleChange);
150
+ }
151
+ }
152
+ }
153
+ exports.GeminiAdapter = GeminiAdapter;
154
+ /**
155
+ * Factory function for creating Gemini adapter instances.
156
+ */
157
+ function createGeminiAdapter() {
158
+ return new GeminiAdapter();
159
+ }
160
+ //# sourceMappingURL=gemini.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.adapter.js","sourceRoot":"","sources":["../../../../src/bridge/adapters/gemini.adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA6KH,kDAEC;AA7KD,iDAAmE;AAanE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,aAAc,SAAQ,0BAAW;IACnC,EAAE,GAAG,QAAQ,CAAC;IACd,IAAI,GAAG,eAAe,CAAC;IACvB,QAAQ,GAAG,EAAE,CAAC;IAEf,OAAO,CAAwB;IAEvC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,mCAAoB;YACvB,YAAY,EAAE,KAAK,EAAE,oCAAoC;YACzD,eAAe,EAAE,KAAK,EAAE,oCAAoC;YAC5D,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,KAAK;YAC3B,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAEhD,8DAA8D;QAC9D,MAAM,GAAG,GAAG,MAAa,CAAC;QAE1B,iCAAiC;QACjC,IAAI,GAAG,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEhD,mCAAmC;QACnC,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE5B,gCAAgC;QAChC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,UAAU;QACvB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,wCAAwC;QACxC,8DAA8D;QAC9D,MAAM,GAAG,GAAG,MAAa,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAA+B,CAAC;QAEnD,sDAAsD;QACtD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAEzB,uBAAuB;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACM,QAAQ;QACf,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,WAAW,CAAC,OAAe;QACxC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,QAAQ,CAAC,GAAW;QACjC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,0BAA0B;QAC1B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAE/C;;OAEG;IACK,mBAAmB;QACzB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO;QAEhE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAErE,MAAM,YAAY,GAAG,CAAC,CAAuC,EAAE,EAAE;YAC/D,qCAAqC;YACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC9C,IAAI,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;oBACzC,IAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAClC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AAtID,sCAsIC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * Gemini Platform Adapter\n *\n * Adapter for Google's Gemini AI platform.\n * Provides integration with Gemini-specific features and APIs.\n *\n * @packageDocumentation\n */\n\nimport { BaseAdapter, DEFAULT_CAPABILITIES } from './base-adapter';\n\n/**\n * Gemini SDK global interface (simplified type).\n */\ninterface GeminiSDK {\n ui?: {\n getTheme?(): string;\n sendMessage?(content: string): Promise<void>;\n openLink?(url: string): Promise<void>;\n };\n}\n\n/**\n * Gemini adapter for Google's AI platform.\n *\n * Features:\n * - Theme detection from Gemini SDK or system\n * - Network access for external resources\n * - LocalStorage persistence\n * - Link opening capability\n *\n * @example\n * ```typescript\n * import { GeminiAdapter } from '@frontmcp/ui/bridge';\n *\n * const adapter = new GeminiAdapter();\n * if (adapter.canHandle()) {\n * await adapter.initialize();\n * }\n * ```\n */\nexport class GeminiAdapter extends BaseAdapter {\n readonly id = 'gemini';\n readonly name = 'Google Gemini';\n readonly priority = 40;\n\n private _gemini: GeminiSDK | undefined;\n\n constructor() {\n super();\n this._capabilities = {\n ...DEFAULT_CAPABILITIES,\n canCallTools: false, // May be enabled if SDK supports it\n canSendMessages: false, // May be enabled if SDK supports it\n canOpenLinks: true,\n canPersistState: true,\n hasNetworkAccess: true,\n supportsDisplayModes: false,\n supportsTheme: true,\n };\n }\n\n /**\n * Check if we're running in a Gemini context.\n */\n canHandle(): boolean {\n if (typeof window === 'undefined') return false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const win = window as any;\n\n // Check explicit platform marker\n if (win.__mcpPlatform === 'gemini') return true;\n\n // Check for Gemini-specific global\n if (win.gemini) return true;\n\n // Check URL patterns for Gemini\n if (typeof location !== 'undefined') {\n const href = location.href;\n if (href.includes('gemini.google.com') || href.includes('bard.google.com')) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Initialize the Gemini adapter.\n */\n override async initialize(): Promise<void> {\n if (this._initialized) return;\n\n // Get Gemini SDK reference if available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const win = window as any;\n this._gemini = win.gemini as GeminiSDK | undefined;\n\n // Update capabilities based on available SDK features\n if (this._gemini?.ui) {\n if (this._gemini.ui.sendMessage) {\n this._capabilities = { ...this._capabilities, canSendMessages: true };\n }\n }\n\n // Call base initialization\n await super.initialize();\n\n // Setup theme listener\n this._setupThemeListener();\n }\n\n /**\n * Get current theme.\n */\n override getTheme(): 'light' | 'dark' {\n if (this._gemini?.ui?.getTheme) {\n const theme = this._gemini.ui.getTheme();\n return theme === 'dark' ? 'dark' : 'light';\n }\n return super.getTheme();\n }\n\n /**\n * Send a message (if supported by SDK).\n */\n override async sendMessage(content: string): Promise<void> {\n if (this._gemini?.ui?.sendMessage) {\n await this._gemini.ui.sendMessage(content);\n return;\n }\n throw new Error('Sending messages is not supported by Gemini adapter');\n }\n\n /**\n * Open a link.\n */\n override async openLink(url: string): Promise<void> {\n if (this._gemini?.ui?.openLink) {\n await this._gemini.ui.openLink(url);\n return;\n }\n // Fallback to window.open\n return super.openLink(url);\n }\n\n // ============================================\n // Private Helpers\n // ============================================\n\n /**\n * Setup listener for system theme changes.\n */\n private _setupThemeListener(): void {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n // Only update if not using SDK theme\n if (!this._gemini?.ui?.getTheme) {\n const newTheme = e.matches ? 'dark' : 'light';\n if (newTheme !== this._hostContext.theme) {\n this._notifyContextChange({ theme: newTheme });\n }\n }\n };\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handleChange);\n }\n }\n}\n\n/**\n * Factory function for creating Gemini adapter instances.\n */\nexport function createGeminiAdapter(): GeminiAdapter {\n return new GeminiAdapter();\n}\n"]}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Generic Platform Adapter
3
+ *
4
+ * Fallback adapter for unknown or unsupported platforms.
5
+ * Provides basic functionality using standard web APIs.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { BaseAdapter } from './base-adapter';
10
+ /**
11
+ * Generic fallback adapter.
12
+ *
13
+ * Used when no platform-specific adapter matches the current environment.
14
+ * Provides basic functionality:
15
+ * - Theme detection from system preferences
16
+ * - LocalStorage persistence
17
+ * - Link opening via window.open
18
+ * - Injected tool data from window globals
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { GenericAdapter } from '@frontmcp/ui/bridge';
23
+ *
24
+ * const adapter = new GenericAdapter();
25
+ * await adapter.initialize();
26
+ * const theme = adapter.getTheme();
27
+ * ```
28
+ */
29
+ export declare class GenericAdapter extends BaseAdapter {
30
+ readonly id = "generic";
31
+ readonly name = "Generic Web";
32
+ readonly priority = 0;
33
+ constructor();
34
+ /**
35
+ * Generic adapter can always handle the environment.
36
+ * It serves as the fallback when no other adapter matches.
37
+ */
38
+ canHandle(): boolean;
39
+ /**
40
+ * Initialize the generic adapter.
41
+ */
42
+ initialize(): Promise<void>;
43
+ /**
44
+ * Open a link using window.open.
45
+ */
46
+ openLink(url: string): Promise<void>;
47
+ /**
48
+ * Setup listener for system theme changes.
49
+ */
50
+ private _setupThemeListener;
51
+ }
52
+ /**
53
+ * Factory function for creating generic adapter instances.
54
+ */
55
+ export declare function createGenericAdapter(): GenericAdapter;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Generic Platform Adapter
4
+ *
5
+ * Fallback adapter for unknown or unsupported platforms.
6
+ * Provides basic functionality using standard web APIs.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.GenericAdapter = void 0;
12
+ exports.createGenericAdapter = createGenericAdapter;
13
+ const base_adapter_1 = require("./base-adapter");
14
+ /**
15
+ * Generic fallback adapter.
16
+ *
17
+ * Used when no platform-specific adapter matches the current environment.
18
+ * Provides basic functionality:
19
+ * - Theme detection from system preferences
20
+ * - LocalStorage persistence
21
+ * - Link opening via window.open
22
+ * - Injected tool data from window globals
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * import { GenericAdapter } from '@frontmcp/ui/bridge';
27
+ *
28
+ * const adapter = new GenericAdapter();
29
+ * await adapter.initialize();
30
+ * const theme = adapter.getTheme();
31
+ * ```
32
+ */
33
+ class GenericAdapter extends base_adapter_1.BaseAdapter {
34
+ id = 'generic';
35
+ name = 'Generic Web';
36
+ priority = 0; // Lowest priority - fallback only
37
+ constructor() {
38
+ super();
39
+ this._capabilities = {
40
+ ...base_adapter_1.DEFAULT_CAPABILITIES,
41
+ canCallTools: false,
42
+ canSendMessages: false,
43
+ canOpenLinks: true, // window.open works
44
+ canPersistState: true, // localStorage works
45
+ hasNetworkAccess: true, // Assume network available
46
+ supportsDisplayModes: false,
47
+ supportsTheme: true, // System theme detection
48
+ };
49
+ }
50
+ /**
51
+ * Generic adapter can always handle the environment.
52
+ * It serves as the fallback when no other adapter matches.
53
+ */
54
+ canHandle() {
55
+ // Always return true - this is the fallback adapter
56
+ return typeof window !== 'undefined';
57
+ }
58
+ /**
59
+ * Initialize the generic adapter.
60
+ */
61
+ async initialize() {
62
+ if (this._initialized)
63
+ return;
64
+ // Call base initialization
65
+ await super.initialize();
66
+ // Setup theme listener
67
+ this._setupThemeListener();
68
+ }
69
+ /**
70
+ * Open a link using window.open.
71
+ */
72
+ async openLink(url) {
73
+ if (typeof window !== 'undefined') {
74
+ window.open(url, '_blank', 'noopener,noreferrer');
75
+ }
76
+ }
77
+ // ============================================
78
+ // Private Helpers
79
+ // ============================================
80
+ /**
81
+ * Setup listener for system theme changes.
82
+ */
83
+ _setupThemeListener() {
84
+ if (typeof window === 'undefined' || !window.matchMedia)
85
+ return;
86
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
87
+ const handleChange = (e) => {
88
+ const newTheme = e.matches ? 'dark' : 'light';
89
+ if (newTheme !== this._hostContext.theme) {
90
+ this._notifyContextChange({ theme: newTheme });
91
+ }
92
+ };
93
+ if (mediaQuery.addEventListener) {
94
+ mediaQuery.addEventListener('change', handleChange);
95
+ }
96
+ else if (mediaQuery.addListener) {
97
+ mediaQuery.addListener(handleChange);
98
+ }
99
+ }
100
+ }
101
+ exports.GenericAdapter = GenericAdapter;
102
+ /**
103
+ * Factory function for creating generic adapter instances.
104
+ */
105
+ function createGenericAdapter() {
106
+ return new GenericAdapter();
107
+ }
108
+ //# sourceMappingURL=generic.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.adapter.js","sourceRoot":"","sources":["../../../../src/bridge/adapters/generic.adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAuGH,oDAEC;AAvGD,iDAAmE;AAEnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,cAAe,SAAQ,0BAAW;IACpC,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,aAAa,CAAC;IACrB,QAAQ,GAAG,CAAC,CAAC,CAAC,kCAAkC;IAEzD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,aAAa,GAAG;YACnB,GAAG,mCAAoB;YACvB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,IAAI,EAAE,oBAAoB;YACxC,eAAe,EAAE,IAAI,EAAE,qBAAqB;YAC5C,gBAAgB,EAAE,IAAI,EAAE,2BAA2B;YACnD,oBAAoB,EAAE,KAAK;YAC3B,aAAa,EAAE,IAAI,EAAE,yBAAyB;SAC/C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,oDAAoD;QACpD,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;IACvC,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,UAAU;QACvB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,2BAA2B;QAC3B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAEzB,uBAAuB;QACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,QAAQ,CAAC,GAAW;QACjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAE/C;;OAEG;IACK,mBAAmB;QACzB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO;QAEhE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAErE,MAAM,YAAY,GAAG,CAAC,CAAuC,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACzC,IAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAClC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AA3ED,wCA2EC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * Generic Platform Adapter\n *\n * Fallback adapter for unknown or unsupported platforms.\n * Provides basic functionality using standard web APIs.\n *\n * @packageDocumentation\n */\n\nimport { BaseAdapter, DEFAULT_CAPABILITIES } from './base-adapter';\n\n/**\n * Generic fallback adapter.\n *\n * Used when no platform-specific adapter matches the current environment.\n * Provides basic functionality:\n * - Theme detection from system preferences\n * - LocalStorage persistence\n * - Link opening via window.open\n * - Injected tool data from window globals\n *\n * @example\n * ```typescript\n * import { GenericAdapter } from '@frontmcp/ui/bridge';\n *\n * const adapter = new GenericAdapter();\n * await adapter.initialize();\n * const theme = adapter.getTheme();\n * ```\n */\nexport class GenericAdapter extends BaseAdapter {\n readonly id = 'generic';\n readonly name = 'Generic Web';\n readonly priority = 0; // Lowest priority - fallback only\n\n constructor() {\n super();\n this._capabilities = {\n ...DEFAULT_CAPABILITIES,\n canCallTools: false,\n canSendMessages: false,\n canOpenLinks: true, // window.open works\n canPersistState: true, // localStorage works\n hasNetworkAccess: true, // Assume network available\n supportsDisplayModes: false,\n supportsTheme: true, // System theme detection\n };\n }\n\n /**\n * Generic adapter can always handle the environment.\n * It serves as the fallback when no other adapter matches.\n */\n canHandle(): boolean {\n // Always return true - this is the fallback adapter\n return typeof window !== 'undefined';\n }\n\n /**\n * Initialize the generic adapter.\n */\n override async initialize(): Promise<void> {\n if (this._initialized) return;\n\n // Call base initialization\n await super.initialize();\n\n // Setup theme listener\n this._setupThemeListener();\n }\n\n /**\n * Open a link using window.open.\n */\n override async openLink(url: string): Promise<void> {\n if (typeof window !== 'undefined') {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n }\n\n // ============================================\n // Private Helpers\n // ============================================\n\n /**\n * Setup listener for system theme changes.\n */\n private _setupThemeListener(): void {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n const newTheme = e.matches ? 'dark' : 'light';\n if (newTheme !== this._hostContext.theme) {\n this._notifyContextChange({ theme: newTheme });\n }\n };\n\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handleChange);\n }\n }\n}\n\n/**\n * Factory function for creating generic adapter instances.\n */\nexport function createGenericAdapter(): GenericAdapter {\n return new GenericAdapter();\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Platform Adapters Module
3
+ *
4
+ * Exports all platform adapters and the default registration function.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { BaseAdapter, DEFAULT_CAPABILITIES, DEFAULT_SAFE_AREA } from './base-adapter';
9
+ export { OpenAIAdapter, createOpenAIAdapter } from './openai.adapter';
10
+ export { ExtAppsAdapter, createExtAppsAdapter, type ExtAppsAdapterConfig } from './ext-apps.adapter';
11
+ export { ClaudeAdapter, createClaudeAdapter } from './claude.adapter';
12
+ export { GeminiAdapter, createGeminiAdapter } from './gemini.adapter';
13
+ export { GenericAdapter, createGenericAdapter } from './generic.adapter';
14
+ /**
15
+ * Register all built-in adapters with the default registry.
16
+ * Called automatically when importing from '@frontmcp/ui/bridge'.
17
+ *
18
+ * Adapter priority order:
19
+ * 1. OpenAI (100) - ChatGPT Apps SDK
20
+ * 2. ext-apps (80) - SEP-1865 protocol
21
+ * 3. Claude (60) - Anthropic Claude
22
+ * 4. Gemini (40) - Google Gemini
23
+ * 5. Generic (0) - Fallback
24
+ */
25
+ export declare function registerBuiltInAdapters(): void;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Platform Adapters Module
4
+ *
5
+ * Exports all platform adapters and the default registration function.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createGenericAdapter = exports.GenericAdapter = exports.createGeminiAdapter = exports.GeminiAdapter = exports.createClaudeAdapter = exports.ClaudeAdapter = exports.createExtAppsAdapter = exports.ExtAppsAdapter = exports.createOpenAIAdapter = exports.OpenAIAdapter = exports.DEFAULT_SAFE_AREA = exports.DEFAULT_CAPABILITIES = exports.BaseAdapter = void 0;
11
+ exports.registerBuiltInAdapters = registerBuiltInAdapters;
12
+ // Base adapter
13
+ var base_adapter_1 = require("./base-adapter");
14
+ Object.defineProperty(exports, "BaseAdapter", { enumerable: true, get: function () { return base_adapter_1.BaseAdapter; } });
15
+ Object.defineProperty(exports, "DEFAULT_CAPABILITIES", { enumerable: true, get: function () { return base_adapter_1.DEFAULT_CAPABILITIES; } });
16
+ Object.defineProperty(exports, "DEFAULT_SAFE_AREA", { enumerable: true, get: function () { return base_adapter_1.DEFAULT_SAFE_AREA; } });
17
+ // Platform adapters
18
+ var openai_adapter_1 = require("./openai.adapter");
19
+ Object.defineProperty(exports, "OpenAIAdapter", { enumerable: true, get: function () { return openai_adapter_1.OpenAIAdapter; } });
20
+ Object.defineProperty(exports, "createOpenAIAdapter", { enumerable: true, get: function () { return openai_adapter_1.createOpenAIAdapter; } });
21
+ var ext_apps_adapter_1 = require("./ext-apps.adapter");
22
+ Object.defineProperty(exports, "ExtAppsAdapter", { enumerable: true, get: function () { return ext_apps_adapter_1.ExtAppsAdapter; } });
23
+ Object.defineProperty(exports, "createExtAppsAdapter", { enumerable: true, get: function () { return ext_apps_adapter_1.createExtAppsAdapter; } });
24
+ var claude_adapter_1 = require("./claude.adapter");
25
+ Object.defineProperty(exports, "ClaudeAdapter", { enumerable: true, get: function () { return claude_adapter_1.ClaudeAdapter; } });
26
+ Object.defineProperty(exports, "createClaudeAdapter", { enumerable: true, get: function () { return claude_adapter_1.createClaudeAdapter; } });
27
+ var gemini_adapter_1 = require("./gemini.adapter");
28
+ Object.defineProperty(exports, "GeminiAdapter", { enumerable: true, get: function () { return gemini_adapter_1.GeminiAdapter; } });
29
+ Object.defineProperty(exports, "createGeminiAdapter", { enumerable: true, get: function () { return gemini_adapter_1.createGeminiAdapter; } });
30
+ var generic_adapter_1 = require("./generic.adapter");
31
+ Object.defineProperty(exports, "GenericAdapter", { enumerable: true, get: function () { return generic_adapter_1.GenericAdapter; } });
32
+ Object.defineProperty(exports, "createGenericAdapter", { enumerable: true, get: function () { return generic_adapter_1.createGenericAdapter; } });
33
+ // Default registration
34
+ const core_1 = require("../core");
35
+ const openai_adapter_2 = require("./openai.adapter");
36
+ const ext_apps_adapter_2 = require("./ext-apps.adapter");
37
+ const claude_adapter_2 = require("./claude.adapter");
38
+ const gemini_adapter_2 = require("./gemini.adapter");
39
+ const generic_adapter_2 = require("./generic.adapter");
40
+ /**
41
+ * Register all built-in adapters with the default registry.
42
+ * Called automatically when importing from '@frontmcp/ui/bridge'.
43
+ *
44
+ * Adapter priority order:
45
+ * 1. OpenAI (100) - ChatGPT Apps SDK
46
+ * 2. ext-apps (80) - SEP-1865 protocol
47
+ * 3. Claude (60) - Anthropic Claude
48
+ * 4. Gemini (40) - Google Gemini
49
+ * 5. Generic (0) - Fallback
50
+ */
51
+ function registerBuiltInAdapters() {
52
+ // OpenAI - highest priority
53
+ core_1.defaultRegistry.register('openai', openai_adapter_2.createOpenAIAdapter);
54
+ // ext-apps (SEP-1865) - high priority
55
+ core_1.defaultRegistry.register('ext-apps', ext_apps_adapter_2.createExtAppsAdapter);
56
+ // Claude
57
+ core_1.defaultRegistry.register('claude', claude_adapter_2.createClaudeAdapter);
58
+ // Gemini
59
+ core_1.defaultRegistry.register('gemini', gemini_adapter_2.createGeminiAdapter);
60
+ // Generic - fallback (always matches)
61
+ core_1.defaultRegistry.register('generic', generic_adapter_2.createGenericAdapter);
62
+ }
63
+ // Auto-register built-in adapters on module load
64
+ registerBuiltInAdapters();
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bridge/adapters/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA+BH,0DAeC;AA5CD,eAAe;AACf,+CAAsF;AAA7E,2GAAA,WAAW,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAE7D,oBAAoB;AACpB,mDAAsE;AAA7D,+GAAA,aAAa,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAC3C,uDAAqG;AAA5F,kHAAA,cAAc,OAAA;AAAE,wHAAA,oBAAoB,OAAA;AAC7C,mDAAsE;AAA7D,+GAAA,aAAa,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAC3C,mDAAsE;AAA7D,+GAAA,aAAa,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAC3C,qDAAyE;AAAhE,iHAAA,cAAc,OAAA;AAAE,uHAAA,oBAAoB,OAAA;AAE7C,uBAAuB;AACvB,kCAA0C;AAC1C,qDAAuD;AACvD,yDAA0D;AAC1D,qDAAuD;AACvD,qDAAuD;AACvD,uDAAyD;AAEzD;;;;;;;;;;GAUG;AACH,SAAgB,uBAAuB;IACrC,4BAA4B;IAC5B,sBAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,oCAAmB,CAAC,CAAC;IAExD,sCAAsC;IACtC,sBAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,uCAAoB,CAAC,CAAC;IAE3D,SAAS;IACT,sBAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,oCAAmB,CAAC,CAAC;IAExD,SAAS;IACT,sBAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,oCAAmB,CAAC,CAAC;IAExD,sCAAsC;IACtC,sBAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,sCAAoB,CAAC,CAAC;AAC5D,CAAC;AAED,iDAAiD;AACjD,uBAAuB,EAAE,CAAC","sourcesContent":["/**\n * Platform Adapters Module\n *\n * Exports all platform adapters and the default registration function.\n *\n * @packageDocumentation\n */\n\n// Base adapter\nexport { BaseAdapter, DEFAULT_CAPABILITIES, DEFAULT_SAFE_AREA } from './base-adapter';\n\n// Platform adapters\nexport { OpenAIAdapter, createOpenAIAdapter } from './openai.adapter';\nexport { ExtAppsAdapter, createExtAppsAdapter, type ExtAppsAdapterConfig } from './ext-apps.adapter';\nexport { ClaudeAdapter, createClaudeAdapter } from './claude.adapter';\nexport { GeminiAdapter, createGeminiAdapter } from './gemini.adapter';\nexport { GenericAdapter, createGenericAdapter } from './generic.adapter';\n\n// Default registration\nimport { defaultRegistry } from '../core';\nimport { createOpenAIAdapter } from './openai.adapter';\nimport { createExtAppsAdapter } from './ext-apps.adapter';\nimport { createClaudeAdapter } from './claude.adapter';\nimport { createGeminiAdapter } from './gemini.adapter';\nimport { createGenericAdapter } from './generic.adapter';\n\n/**\n * Register all built-in adapters with the default registry.\n * Called automatically when importing from '@frontmcp/ui/bridge'.\n *\n * Adapter priority order:\n * 1. OpenAI (100) - ChatGPT Apps SDK\n * 2. ext-apps (80) - SEP-1865 protocol\n * 3. Claude (60) - Anthropic Claude\n * 4. Gemini (40) - Google Gemini\n * 5. Generic (0) - Fallback\n */\nexport function registerBuiltInAdapters(): void {\n // OpenAI - highest priority\n defaultRegistry.register('openai', createOpenAIAdapter);\n\n // ext-apps (SEP-1865) - high priority\n defaultRegistry.register('ext-apps', createExtAppsAdapter);\n\n // Claude\n defaultRegistry.register('claude', createClaudeAdapter);\n\n // Gemini\n defaultRegistry.register('gemini', createGeminiAdapter);\n\n // Generic - fallback (always matches)\n defaultRegistry.register('generic', createGenericAdapter);\n}\n\n// Auto-register built-in adapters on module load\nregisterBuiltInAdapters();\n"]}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * OpenAI Platform Adapter
3
+ *
4
+ * Adapter for OpenAI's ChatGPT Apps SDK.
5
+ * Provides full widget functionality including tool calls, messaging,
6
+ * and display mode changes via the window.openai API.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { DisplayMode } from '../types';
11
+ import { BaseAdapter } from './base-adapter';
12
+ /**
13
+ * OpenAI Apps SDK adapter.
14
+ *
15
+ * Detects the presence of `window.openai` and proxies all operations
16
+ * through the ChatGPT Apps SDK.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { OpenAIAdapter } from '@frontmcp/ui/bridge';
21
+ *
22
+ * const adapter = new OpenAIAdapter();
23
+ * if (adapter.canHandle()) {
24
+ * await adapter.initialize();
25
+ * const theme = adapter.getTheme();
26
+ * }
27
+ * ```
28
+ */
29
+ export declare class OpenAIAdapter extends BaseAdapter {
30
+ readonly id = "openai";
31
+ readonly name = "OpenAI ChatGPT";
32
+ readonly priority = 100;
33
+ private _openai;
34
+ private _unsubscribeContext;
35
+ private _unsubscribeToolResult;
36
+ constructor();
37
+ /**
38
+ * Check if OpenAI Apps SDK is available.
39
+ */
40
+ canHandle(): boolean;
41
+ /**
42
+ * Initialize the OpenAI adapter.
43
+ */
44
+ initialize(): Promise<void>;
45
+ /**
46
+ * Dispose adapter resources.
47
+ */
48
+ dispose(): void;
49
+ getTheme(): 'light' | 'dark';
50
+ getDisplayMode(): DisplayMode;
51
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
52
+ sendMessage(content: string): Promise<void>;
53
+ openLink(url: string): Promise<void>;
54
+ requestDisplayMode(mode: DisplayMode): Promise<void>;
55
+ requestClose(): Promise<void>;
56
+ /**
57
+ * Sync context from OpenAI SDK.
58
+ */
59
+ private _syncContextFromSDK;
60
+ }
61
+ /**
62
+ * Factory function for creating OpenAI adapter instances.
63
+ */
64
+ export declare function createOpenAIAdapter(): OpenAIAdapter;