@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.
- package/README.md +140 -362
- package/bridge/adapters/base-adapter.d.ts +104 -0
- package/bridge/adapters/base-adapter.d.ts.map +1 -0
- package/bridge/adapters/claude.adapter.d.ts +67 -0
- package/bridge/adapters/claude.adapter.d.ts.map +1 -0
- package/bridge/adapters/ext-apps.adapter.d.ts +143 -0
- package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
- package/bridge/adapters/gemini.adapter.d.ts +64 -0
- package/bridge/adapters/gemini.adapter.d.ts.map +1 -0
- package/bridge/adapters/generic.adapter.d.ts +56 -0
- package/bridge/adapters/generic.adapter.d.ts.map +1 -0
- package/bridge/adapters/index.d.ts +26 -0
- package/bridge/adapters/index.d.ts.map +1 -0
- package/bridge/adapters/openai.adapter.d.ts +65 -0
- package/bridge/adapters/openai.adapter.d.ts.map +1 -0
- package/bridge/core/adapter-registry.d.ts +122 -0
- package/bridge/core/adapter-registry.d.ts.map +1 -0
- package/bridge/core/bridge-factory.d.ts +199 -0
- package/bridge/core/bridge-factory.d.ts.map +1 -0
- package/bridge/core/index.d.ts +10 -0
- package/bridge/core/index.d.ts.map +1 -0
- package/bridge/index.d.ts +62 -0
- package/bridge/index.d.ts.map +1 -0
- package/bridge/index.js +2540 -0
- package/bridge/runtime/iife-generator.d.ts +62 -0
- package/bridge/runtime/iife-generator.d.ts.map +1 -0
- package/bridge/runtime/index.d.ts +10 -0
- package/bridge/runtime/index.d.ts.map +1 -0
- package/bridge/types.d.ts +386 -0
- package/bridge/types.d.ts.map +1 -0
- package/bundler/bundler.d.ts +208 -0
- package/bundler/bundler.d.ts.map +1 -0
- package/bundler/cache.d.ts +173 -0
- package/bundler/cache.d.ts.map +1 -0
- package/bundler/file-cache/component-builder.d.ts +167 -0
- package/bundler/file-cache/component-builder.d.ts.map +1 -0
- package/bundler/file-cache/hash-calculator.d.ts +155 -0
- package/bundler/file-cache/hash-calculator.d.ts.map +1 -0
- package/bundler/file-cache/index.d.ts +12 -0
- package/bundler/file-cache/index.d.ts.map +1 -0
- package/bundler/file-cache/storage/filesystem.d.ts +149 -0
- package/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
- package/bundler/file-cache/storage/index.d.ts +11 -0
- package/bundler/file-cache/storage/index.d.ts.map +1 -0
- package/bundler/file-cache/storage/interface.d.ts +152 -0
- package/bundler/file-cache/storage/interface.d.ts.map +1 -0
- package/bundler/file-cache/storage/redis.d.ts +139 -0
- package/bundler/file-cache/storage/redis.d.ts.map +1 -0
- package/bundler/index.d.ts +43 -0
- package/bundler/index.d.ts.map +1 -0
- package/bundler/index.js +3707 -0
- package/bundler/sandbox/enclave-adapter.d.ts +121 -0
- package/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
- package/bundler/sandbox/executor.d.ts +14 -0
- package/bundler/sandbox/executor.d.ts.map +1 -0
- package/bundler/sandbox/policy.d.ts +62 -0
- package/bundler/sandbox/policy.d.ts.map +1 -0
- package/bundler/types.d.ts +702 -0
- package/bundler/types.d.ts.map +1 -0
- package/components/alert.d.ts +66 -0
- package/components/alert.d.ts.map +1 -0
- package/components/alert.schema.d.ts +98 -0
- package/components/alert.schema.d.ts.map +1 -0
- package/components/avatar.d.ts +77 -0
- package/components/avatar.d.ts.map +1 -0
- package/components/avatar.schema.d.ts +170 -0
- package/components/avatar.schema.d.ts.map +1 -0
- package/components/badge.d.ts +64 -0
- package/components/badge.d.ts.map +1 -0
- package/components/badge.schema.d.ts +91 -0
- package/components/badge.schema.d.ts.map +1 -0
- package/components/button.d.ts +100 -0
- package/components/button.d.ts.map +1 -0
- package/components/button.schema.d.ts +120 -0
- package/components/button.schema.d.ts.map +1 -0
- package/components/card.d.ts +53 -0
- package/components/card.d.ts.map +1 -0
- package/components/card.schema.d.ts +93 -0
- package/components/card.schema.d.ts.map +1 -0
- package/components/form.d.ts +212 -0
- package/components/form.d.ts.map +1 -0
- package/components/form.schema.d.ts +365 -0
- package/components/form.schema.d.ts.map +1 -0
- package/components/index.d.ts +29 -0
- package/components/index.d.ts.map +1 -0
- package/components/index.js +2525 -0
- package/components/list.d.ts +121 -0
- package/components/list.d.ts.map +1 -0
- package/components/list.schema.d.ts +129 -0
- package/components/list.schema.d.ts.map +1 -0
- package/components/modal.d.ts +100 -0
- package/components/modal.d.ts.map +1 -0
- package/components/modal.schema.d.ts +151 -0
- package/components/modal.schema.d.ts.map +1 -0
- package/components/table.d.ts +91 -0
- package/components/table.d.ts.map +1 -0
- package/components/table.schema.d.ts +123 -0
- package/components/table.schema.d.ts.map +1 -0
- package/esm/bridge/adapters/base-adapter.d.ts +104 -0
- package/esm/bridge/adapters/base-adapter.d.ts.map +1 -0
- package/esm/bridge/adapters/claude.adapter.d.ts +67 -0
- package/esm/bridge/adapters/claude.adapter.d.ts.map +1 -0
- package/esm/bridge/adapters/ext-apps.adapter.d.ts +143 -0
- package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
- package/esm/bridge/adapters/gemini.adapter.d.ts +64 -0
- package/esm/bridge/adapters/gemini.adapter.d.ts.map +1 -0
- package/esm/bridge/adapters/generic.adapter.d.ts +56 -0
- package/esm/bridge/adapters/generic.adapter.d.ts.map +1 -0
- package/esm/bridge/adapters/index.d.ts +26 -0
- package/esm/bridge/adapters/index.d.ts.map +1 -0
- package/esm/bridge/adapters/openai.adapter.d.ts +65 -0
- package/esm/bridge/adapters/openai.adapter.d.ts.map +1 -0
- package/esm/bridge/core/adapter-registry.d.ts +122 -0
- package/esm/bridge/core/adapter-registry.d.ts.map +1 -0
- package/esm/bridge/core/bridge-factory.d.ts +199 -0
- package/esm/bridge/core/bridge-factory.d.ts.map +1 -0
- package/esm/bridge/core/index.d.ts +10 -0
- package/esm/bridge/core/index.d.ts.map +1 -0
- package/esm/bridge/index.d.ts +62 -0
- package/esm/bridge/index.d.ts.map +1 -0
- package/esm/bridge/index.js +2487 -0
- package/esm/bridge/runtime/iife-generator.d.ts +62 -0
- package/esm/bridge/runtime/iife-generator.d.ts.map +1 -0
- package/esm/bridge/runtime/index.d.ts +10 -0
- package/esm/bridge/runtime/index.d.ts.map +1 -0
- package/esm/bridge/types.d.ts +386 -0
- package/esm/bridge/types.d.ts.map +1 -0
- package/esm/bundler/bundler.d.ts +208 -0
- package/esm/bundler/bundler.d.ts.map +1 -0
- package/esm/bundler/cache.d.ts +173 -0
- package/esm/bundler/cache.d.ts.map +1 -0
- package/esm/bundler/file-cache/component-builder.d.ts +167 -0
- package/esm/bundler/file-cache/component-builder.d.ts.map +1 -0
- package/esm/bundler/file-cache/hash-calculator.d.ts +155 -0
- package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -0
- package/esm/bundler/file-cache/index.d.ts +12 -0
- package/esm/bundler/file-cache/index.d.ts.map +1 -0
- package/esm/bundler/file-cache/storage/filesystem.d.ts +149 -0
- package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
- package/esm/bundler/file-cache/storage/index.d.ts +11 -0
- package/esm/bundler/file-cache/storage/index.d.ts.map +1 -0
- package/esm/bundler/file-cache/storage/interface.d.ts +152 -0
- package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -0
- package/esm/bundler/file-cache/storage/redis.d.ts +139 -0
- package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -0
- package/esm/bundler/index.d.ts +43 -0
- package/esm/bundler/index.d.ts.map +1 -0
- package/esm/bundler/index.js +3640 -0
- package/esm/bundler/sandbox/enclave-adapter.d.ts +121 -0
- package/esm/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
- package/esm/bundler/sandbox/executor.d.ts +14 -0
- package/esm/bundler/sandbox/executor.d.ts.map +1 -0
- package/esm/bundler/sandbox/policy.d.ts +62 -0
- package/esm/bundler/sandbox/policy.d.ts.map +1 -0
- package/esm/bundler/types.d.ts +702 -0
- package/esm/bundler/types.d.ts.map +1 -0
- package/esm/components/alert.d.ts +66 -0
- package/esm/components/alert.d.ts.map +1 -0
- package/esm/components/alert.schema.d.ts +98 -0
- package/esm/components/alert.schema.d.ts.map +1 -0
- package/esm/components/avatar.d.ts +77 -0
- package/esm/components/avatar.d.ts.map +1 -0
- package/esm/components/avatar.schema.d.ts +170 -0
- package/esm/components/avatar.schema.d.ts.map +1 -0
- package/esm/components/badge.d.ts +64 -0
- package/esm/components/badge.d.ts.map +1 -0
- package/esm/components/badge.schema.d.ts +91 -0
- package/esm/components/badge.schema.d.ts.map +1 -0
- package/esm/components/button.d.ts +100 -0
- package/esm/components/button.d.ts.map +1 -0
- package/esm/components/button.schema.d.ts +120 -0
- package/esm/components/button.schema.d.ts.map +1 -0
- package/esm/components/card.d.ts +53 -0
- package/esm/components/card.d.ts.map +1 -0
- package/esm/components/card.schema.d.ts +93 -0
- package/esm/components/card.schema.d.ts.map +1 -0
- package/esm/components/form.d.ts +212 -0
- package/esm/components/form.d.ts.map +1 -0
- package/esm/components/form.schema.d.ts +365 -0
- package/esm/components/form.schema.d.ts.map +1 -0
- package/esm/components/index.d.ts +29 -0
- package/esm/components/index.d.ts.map +1 -0
- package/esm/components/index.js +2396 -0
- package/esm/components/list.d.ts +121 -0
- package/esm/components/list.d.ts.map +1 -0
- package/esm/components/list.schema.d.ts +129 -0
- package/esm/components/list.schema.d.ts.map +1 -0
- package/esm/components/modal.d.ts +100 -0
- package/esm/components/modal.d.ts.map +1 -0
- package/esm/components/modal.schema.d.ts +151 -0
- package/esm/components/modal.schema.d.ts.map +1 -0
- package/esm/components/table.d.ts +91 -0
- package/esm/components/table.d.ts.map +1 -0
- package/esm/components/table.schema.d.ts +123 -0
- package/esm/components/table.schema.d.ts.map +1 -0
- package/esm/index.d.ts +40 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +8326 -0
- package/esm/layouts/base.d.ts +86 -0
- package/esm/layouts/base.d.ts.map +1 -0
- package/esm/layouts/index.d.ts +8 -0
- package/esm/layouts/index.d.ts.map +1 -0
- package/esm/layouts/index.js +409 -0
- package/esm/layouts/presets.d.ts +134 -0
- package/esm/layouts/presets.d.ts.map +1 -0
- package/esm/package.json +72 -0
- package/esm/pages/consent.d.ts +117 -0
- package/esm/pages/consent.d.ts.map +1 -0
- package/esm/pages/error.d.ts +101 -0
- package/esm/pages/error.d.ts.map +1 -0
- package/esm/pages/index.d.ts +9 -0
- package/esm/pages/index.d.ts.map +1 -0
- package/esm/pages/index.js +1036 -0
- package/esm/react/Alert.d.ts +101 -0
- package/esm/react/Alert.d.ts.map +1 -0
- package/esm/react/Badge.d.ts +100 -0
- package/esm/react/Badge.d.ts.map +1 -0
- package/esm/react/Button.d.ts +108 -0
- package/esm/react/Button.d.ts.map +1 -0
- package/esm/react/Card.d.ts +103 -0
- package/esm/react/Card.d.ts.map +1 -0
- package/esm/react/hooks/context.d.ts +179 -0
- package/esm/react/hooks/context.d.ts.map +1 -0
- package/esm/react/hooks/index.d.ts +42 -0
- package/esm/react/hooks/index.d.ts.map +1 -0
- package/esm/react/hooks/tools.d.ts +284 -0
- package/esm/react/hooks/tools.d.ts.map +1 -0
- package/esm/react/index.d.ts +80 -0
- package/esm/react/index.d.ts.map +1 -0
- package/esm/react/index.js +3124 -0
- package/esm/react/types.d.ts +105 -0
- package/esm/react/types.d.ts.map +1 -0
- package/esm/react/utils.d.ts +43 -0
- package/esm/react/utils.d.ts.map +1 -0
- package/esm/render/index.d.ts +8 -0
- package/esm/render/index.d.ts.map +1 -0
- package/esm/render/index.js +45 -0
- package/esm/render/prerender.d.ts +57 -0
- package/esm/render/prerender.d.ts.map +1 -0
- package/esm/renderers/index.d.ts +21 -0
- package/esm/renderers/index.d.ts.map +1 -0
- package/esm/renderers/index.js +381 -0
- package/esm/renderers/react.adapter.d.ts +70 -0
- package/esm/renderers/react.adapter.d.ts.map +1 -0
- package/esm/renderers/react.renderer.d.ts +96 -0
- package/esm/renderers/react.renderer.d.ts.map +1 -0
- package/esm/universal/UniversalApp.d.ts +108 -0
- package/esm/universal/UniversalApp.d.ts.map +1 -0
- package/esm/universal/cached-runtime.d.ts +115 -0
- package/esm/universal/cached-runtime.d.ts.map +1 -0
- package/esm/universal/context.d.ts +122 -0
- package/esm/universal/context.d.ts.map +1 -0
- package/esm/universal/index.d.ts +57 -0
- package/esm/universal/index.d.ts.map +1 -0
- package/esm/universal/index.js +1755 -0
- package/esm/universal/renderers/html.renderer.d.ts +37 -0
- package/esm/universal/renderers/html.renderer.d.ts.map +1 -0
- package/esm/universal/renderers/index.d.ts +112 -0
- package/esm/universal/renderers/index.d.ts.map +1 -0
- package/esm/universal/renderers/markdown.renderer.d.ts +33 -0
- package/esm/universal/renderers/markdown.renderer.d.ts.map +1 -0
- package/esm/universal/renderers/mdx.renderer.d.ts +38 -0
- package/esm/universal/renderers/mdx.renderer.d.ts.map +1 -0
- package/esm/universal/renderers/react.renderer.d.ts +46 -0
- package/esm/universal/renderers/react.renderer.d.ts.map +1 -0
- package/esm/universal/runtime-builder.d.ts +33 -0
- package/esm/universal/runtime-builder.d.ts.map +1 -0
- package/esm/universal/store.d.ts +135 -0
- package/esm/universal/store.d.ts.map +1 -0
- package/esm/universal/types.d.ts +199 -0
- package/esm/universal/types.d.ts.map +1 -0
- package/esm/web-components/core/attribute-parser.d.ts +82 -0
- package/esm/web-components/core/attribute-parser.d.ts.map +1 -0
- package/esm/web-components/core/base-element.d.ts +197 -0
- package/esm/web-components/core/base-element.d.ts.map +1 -0
- package/esm/web-components/core/index.d.ts +9 -0
- package/esm/web-components/core/index.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-alert.d.ts +46 -0
- package/esm/web-components/elements/fmcp-alert.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-badge.d.ts +47 -0
- package/esm/web-components/elements/fmcp-badge.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-button.d.ts +117 -0
- package/esm/web-components/elements/fmcp-button.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-card.d.ts +53 -0
- package/esm/web-components/elements/fmcp-card.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-input.d.ts +96 -0
- package/esm/web-components/elements/fmcp-input.d.ts.map +1 -0
- package/esm/web-components/elements/fmcp-select.d.ts +100 -0
- package/esm/web-components/elements/fmcp-select.d.ts.map +1 -0
- package/esm/web-components/elements/index.d.ts +13 -0
- package/esm/web-components/elements/index.d.ts.map +1 -0
- package/esm/web-components/index.d.ts +50 -0
- package/esm/web-components/index.d.ts.map +1 -0
- package/esm/web-components/index.js +1993 -0
- package/esm/web-components/register.d.ts +57 -0
- package/esm/web-components/register.d.ts.map +1 -0
- package/esm/web-components/types.d.ts +122 -0
- package/esm/web-components/types.d.ts.map +1 -0
- package/esm/widgets/index.d.ts +8 -0
- package/esm/widgets/index.d.ts.map +1 -0
- package/esm/widgets/index.js +883 -0
- package/esm/widgets/progress.d.ts +133 -0
- package/esm/widgets/progress.d.ts.map +1 -0
- package/esm/widgets/resource.d.ts +163 -0
- package/esm/widgets/resource.d.ts.map +1 -0
- package/index.d.ts +40 -0
- package/index.d.ts.map +1 -0
- package/index.js +8526 -0
- package/layouts/base.d.ts +86 -0
- package/layouts/base.d.ts.map +1 -0
- package/layouts/index.d.ts +8 -0
- package/layouts/index.d.ts.map +1 -0
- package/layouts/index.js +437 -0
- package/layouts/presets.d.ts +134 -0
- package/layouts/presets.d.ts.map +1 -0
- package/package.json +33 -110
- package/pages/consent.d.ts +117 -0
- package/pages/consent.d.ts.map +1 -0
- package/pages/error.d.ts +101 -0
- package/pages/error.d.ts.map +1 -0
- package/pages/index.d.ts +9 -0
- package/pages/index.d.ts.map +1 -0
- package/pages/index.js +1065 -0
- package/react/Alert.d.ts +101 -0
- package/react/Alert.d.ts.map +1 -0
- package/react/Badge.d.ts +100 -0
- package/react/Badge.d.ts.map +1 -0
- package/react/Button.d.ts +108 -0
- package/react/Button.d.ts.map +1 -0
- package/react/Card.d.ts +103 -0
- package/react/Card.d.ts.map +1 -0
- package/react/hooks/context.d.ts +179 -0
- package/react/hooks/context.d.ts.map +1 -0
- package/react/hooks/index.d.ts +42 -0
- package/react/hooks/index.d.ts.map +1 -0
- package/react/hooks/tools.d.ts +284 -0
- package/react/hooks/tools.d.ts.map +1 -0
- package/react/index.d.ts +80 -0
- package/react/index.d.ts.map +1 -0
- package/react/index.js +3160 -0
- package/react/types.d.ts +105 -0
- package/react/types.d.ts.map +1 -0
- package/react/utils.d.ts +43 -0
- package/react/utils.d.ts.map +1 -0
- package/render/index.d.ts +8 -0
- package/render/index.d.ts.map +1 -0
- package/render/index.js +77 -0
- package/render/prerender.d.ts +57 -0
- package/render/prerender.d.ts.map +1 -0
- package/renderers/index.d.ts +21 -0
- package/renderers/index.d.ts.map +1 -0
- package/renderers/index.js +416 -0
- package/renderers/react.adapter.d.ts +70 -0
- package/renderers/react.adapter.d.ts.map +1 -0
- package/renderers/react.renderer.d.ts +96 -0
- package/renderers/react.renderer.d.ts.map +1 -0
- package/universal/UniversalApp.d.ts +108 -0
- package/universal/UniversalApp.d.ts.map +1 -0
- package/universal/cached-runtime.d.ts +115 -0
- package/universal/cached-runtime.d.ts.map +1 -0
- package/universal/context.d.ts +122 -0
- package/universal/context.d.ts.map +1 -0
- package/universal/index.d.ts +57 -0
- package/universal/index.d.ts.map +1 -0
- package/universal/index.js +1841 -0
- package/universal/renderers/html.renderer.d.ts +37 -0
- package/universal/renderers/html.renderer.d.ts.map +1 -0
- package/universal/renderers/index.d.ts +112 -0
- package/universal/renderers/index.d.ts.map +1 -0
- package/universal/renderers/markdown.renderer.d.ts +33 -0
- package/universal/renderers/markdown.renderer.d.ts.map +1 -0
- package/universal/renderers/mdx.renderer.d.ts +38 -0
- package/universal/renderers/mdx.renderer.d.ts.map +1 -0
- package/universal/renderers/react.renderer.d.ts +46 -0
- package/universal/renderers/react.renderer.d.ts.map +1 -0
- package/universal/runtime-builder.d.ts +33 -0
- package/universal/runtime-builder.d.ts.map +1 -0
- package/universal/store.d.ts +135 -0
- package/universal/store.d.ts.map +1 -0
- package/universal/types.d.ts +199 -0
- package/universal/types.d.ts.map +1 -0
- package/web-components/core/attribute-parser.d.ts +82 -0
- package/web-components/core/attribute-parser.d.ts.map +1 -0
- package/web-components/core/base-element.d.ts +197 -0
- package/web-components/core/base-element.d.ts.map +1 -0
- package/web-components/core/index.d.ts +9 -0
- package/web-components/core/index.d.ts.map +1 -0
- package/web-components/elements/fmcp-alert.d.ts +46 -0
- package/web-components/elements/fmcp-alert.d.ts.map +1 -0
- package/web-components/elements/fmcp-badge.d.ts +47 -0
- package/web-components/elements/fmcp-badge.d.ts.map +1 -0
- package/web-components/elements/fmcp-button.d.ts +117 -0
- package/web-components/elements/fmcp-button.d.ts.map +1 -0
- package/web-components/elements/fmcp-card.d.ts +53 -0
- package/web-components/elements/fmcp-card.d.ts.map +1 -0
- package/web-components/elements/fmcp-input.d.ts +96 -0
- package/web-components/elements/fmcp-input.d.ts.map +1 -0
- package/web-components/elements/fmcp-select.d.ts +100 -0
- package/web-components/elements/fmcp-select.d.ts.map +1 -0
- package/web-components/elements/index.d.ts +13 -0
- package/web-components/elements/index.d.ts.map +1 -0
- package/web-components/index.d.ts +50 -0
- package/web-components/index.d.ts.map +1 -0
- package/web-components/index.js +2028 -0
- package/web-components/register.d.ts +57 -0
- package/web-components/register.d.ts.map +1 -0
- package/web-components/types.d.ts +122 -0
- package/web-components/types.d.ts.map +1 -0
- package/widgets/index.d.ts +8 -0
- package/widgets/index.d.ts.map +1 -0
- package/widgets/index.js +910 -0
- package/widgets/progress.d.ts +133 -0
- package/widgets/progress.d.ts.map +1 -0
- package/widgets/resource.d.ts +163 -0
- package/widgets/resource.d.ts.map +1 -0
- package/src/adapters/index.d.ts +0 -10
- package/src/adapters/index.js +0 -18
- package/src/adapters/index.js.map +0 -1
- package/src/adapters/platform-meta.d.ts +0 -165
- package/src/adapters/platform-meta.js +0 -310
- package/src/adapters/platform-meta.js.map +0 -1
- package/src/base-template/bridge.d.ts +0 -89
- package/src/base-template/bridge.js +0 -452
- package/src/base-template/bridge.js.map +0 -1
- package/src/base-template/default-base-template.d.ts +0 -91
- package/src/base-template/default-base-template.js +0 -435
- package/src/base-template/default-base-template.js.map +0 -1
- package/src/base-template/index.d.ts +0 -14
- package/src/base-template/index.js +0 -30
- package/src/base-template/index.js.map +0 -1
- package/src/base-template/polyfills.d.ts +0 -30
- package/src/base-template/polyfills.js +0 -190
- package/src/base-template/polyfills.js.map +0 -1
- package/src/base-template/theme-styles.d.ts +0 -73
- package/src/base-template/theme-styles.js +0 -95
- package/src/base-template/theme-styles.js.map +0 -1
- package/src/bridge/adapters/base-adapter.d.ts +0 -103
- package/src/bridge/adapters/base-adapter.js +0 -314
- package/src/bridge/adapters/base-adapter.js.map +0 -1
- package/src/bridge/adapters/claude.adapter.d.ts +0 -66
- package/src/bridge/adapters/claude.adapter.js +0 -145
- package/src/bridge/adapters/claude.adapter.js.map +0 -1
- package/src/bridge/adapters/ext-apps.adapter.d.ts +0 -142
- package/src/bridge/adapters/ext-apps.adapter.js +0 -416
- package/src/bridge/adapters/ext-apps.adapter.js.map +0 -1
- package/src/bridge/adapters/gemini.adapter.d.ts +0 -63
- package/src/bridge/adapters/gemini.adapter.js +0 -160
- package/src/bridge/adapters/gemini.adapter.js.map +0 -1
- package/src/bridge/adapters/generic.adapter.d.ts +0 -55
- package/src/bridge/adapters/generic.adapter.js +0 -108
- package/src/bridge/adapters/generic.adapter.js.map +0 -1
- package/src/bridge/adapters/index.d.ts +0 -25
- package/src/bridge/adapters/index.js +0 -65
- package/src/bridge/adapters/index.js.map +0 -1
- package/src/bridge/adapters/openai.adapter.d.ts +0 -64
- package/src/bridge/adapters/openai.adapter.js +0 -194
- package/src/bridge/adapters/openai.adapter.js.map +0 -1
- package/src/bridge/core/adapter-registry.d.ts +0 -121
- package/src/bridge/core/adapter-registry.js +0 -271
- package/src/bridge/core/adapter-registry.js.map +0 -1
- package/src/bridge/core/bridge-factory.d.ts +0 -198
- package/src/bridge/core/bridge-factory.js +0 -428
- package/src/bridge/core/bridge-factory.js.map +0 -1
- package/src/bridge/core/index.d.ts +0 -9
- package/src/bridge/core/index.js +0 -22
- package/src/bridge/core/index.js.map +0 -1
- package/src/bridge/index.d.ts +0 -61
- package/src/bridge/index.js +0 -94
- package/src/bridge/index.js.map +0 -1
- package/src/bridge/runtime/iife-generator.d.ts +0 -61
- package/src/bridge/runtime/iife-generator.js +0 -940
- package/src/bridge/runtime/iife-generator.js.map +0 -1
- package/src/bridge/runtime/index.d.ts +0 -8
- package/src/bridge/runtime/index.js +0 -16
- package/src/bridge/runtime/index.js.map +0 -1
- package/src/bridge/types.d.ts +0 -385
- package/src/bridge/types.js +0 -11
- package/src/bridge/types.js.map +0 -1
- package/src/build/cdn-resources.d.ts +0 -140
- package/src/build/cdn-resources.js +0 -314
- package/src/build/cdn-resources.js.map +0 -1
- package/src/build/index.d.ts +0 -294
- package/src/build/index.js +0 -325
- package/src/build/index.js.map +0 -1
- package/src/build/widget-manifest.d.ts +0 -212
- package/src/build/widget-manifest.js +0 -652
- package/src/build/widget-manifest.js.map +0 -1
- package/src/bundler/bundler.d.ts +0 -110
- package/src/bundler/bundler.js +0 -432
- package/src/bundler/bundler.js.map +0 -1
- package/src/bundler/cache.d.ts +0 -172
- package/src/bundler/cache.js +0 -250
- package/src/bundler/cache.js.map +0 -1
- package/src/bundler/index.d.ts +0 -41
- package/src/bundler/index.js +0 -73
- package/src/bundler/index.js.map +0 -1
- package/src/bundler/sandbox/enclave-adapter.d.ts +0 -120
- package/src/bundler/sandbox/enclave-adapter.js +0 -339
- package/src/bundler/sandbox/enclave-adapter.js.map +0 -1
- package/src/bundler/sandbox/executor.d.ts +0 -13
- package/src/bundler/sandbox/executor.js +0 -22
- package/src/bundler/sandbox/executor.js.map +0 -1
- package/src/bundler/sandbox/policy.d.ts +0 -61
- package/src/bundler/sandbox/policy.js +0 -238
- package/src/bundler/sandbox/policy.js.map +0 -1
- package/src/bundler/types.d.ts +0 -347
- package/src/bundler/types.js +0 -132
- package/src/bundler/types.js.map +0 -1
- package/src/components/alert.d.ts +0 -71
- package/src/components/alert.js +0 -189
- package/src/components/alert.js.map +0 -1
- package/src/components/alert.schema.d.ts +0 -114
- package/src/components/alert.schema.js +0 -105
- package/src/components/alert.schema.js.map +0 -1
- package/src/components/avatar.d.ts +0 -76
- package/src/components/avatar.js +0 -176
- package/src/components/avatar.js.map +0 -1
- package/src/components/avatar.schema.d.ts +0 -169
- package/src/components/avatar.schema.js +0 -103
- package/src/components/avatar.schema.js.map +0 -1
- package/src/components/badge.d.ts +0 -70
- package/src/components/badge.js +0 -149
- package/src/components/badge.js.map +0 -1
- package/src/components/badge.schema.d.ts +0 -109
- package/src/components/badge.schema.js +0 -96
- package/src/components/badge.schema.js.map +0 -1
- package/src/components/button.d.ts +0 -111
- package/src/components/button.js +0 -336
- package/src/components/button.js.map +0 -1
- package/src/components/button.schema.d.ts +0 -148
- package/src/components/button.schema.js +0 -121
- package/src/components/button.schema.js.map +0 -1
- package/src/components/card.d.ts +0 -60
- package/src/components/card.js +0 -117
- package/src/components/card.js.map +0 -1
- package/src/components/card.schema.d.ts +0 -113
- package/src/components/card.schema.js +0 -98
- package/src/components/card.schema.js.map +0 -1
- package/src/components/form.d.ts +0 -239
- package/src/components/form.js +0 -420
- package/src/components/form.js.map +0 -1
- package/src/components/form.schema.d.ts +0 -441
- package/src/components/form.schema.js +0 -406
- package/src/components/form.schema.js.map +0 -1
- package/src/components/index.d.ts +0 -29
- package/src/components/index.js +0 -98
- package/src/components/index.js.map +0 -1
- package/src/components/list.d.ts +0 -127
- package/src/components/list.js +0 -279
- package/src/components/list.js.map +0 -1
- package/src/components/list.schema.d.ts +0 -134
- package/src/components/list.schema.js +0 -168
- package/src/components/list.schema.js.map +0 -1
- package/src/components/modal.d.ts +0 -111
- package/src/components/modal.js +0 -260
- package/src/components/modal.js.map +0 -1
- package/src/components/modal.schema.d.ts +0 -186
- package/src/components/modal.schema.js +0 -167
- package/src/components/modal.schema.js.map +0 -1
- package/src/components/table.d.ts +0 -105
- package/src/components/table.js +0 -283
- package/src/components/table.js.map +0 -1
- package/src/components/table.schema.d.ts +0 -159
- package/src/components/table.schema.js +0 -173
- package/src/components/table.schema.js.map +0 -1
- package/src/handlebars/helpers.d.ts +0 -348
- package/src/handlebars/helpers.js +0 -605
- package/src/handlebars/helpers.js.map +0 -1
- package/src/handlebars/index.d.ts +0 -193
- package/src/handlebars/index.js +0 -350
- package/src/handlebars/index.js.map +0 -1
- package/src/index.d.ts +0 -50
- package/src/index.js +0 -192
- package/src/index.js.map +0 -1
- package/src/layouts/base.d.ts +0 -88
- package/src/layouts/base.js +0 -227
- package/src/layouts/base.js.map +0 -1
- package/src/layouts/index.d.ts +0 -7
- package/src/layouts/index.js +0 -25
- package/src/layouts/index.js.map +0 -1
- package/src/layouts/presets.d.ts +0 -133
- package/src/layouts/presets.js +0 -277
- package/src/layouts/presets.js.map +0 -1
- package/src/pages/consent.d.ts +0 -116
- package/src/pages/consent.js +0 -218
- package/src/pages/consent.js.map +0 -1
- package/src/pages/error.d.ts +0 -100
- package/src/pages/error.js +0 -263
- package/src/pages/error.js.map +0 -1
- package/src/pages/index.d.ts +0 -8
- package/src/pages/index.js +0 -27
- package/src/pages/index.js.map +0 -1
- package/src/react/Alert.d.ts +0 -101
- package/src/react/Alert.js +0 -51
- package/src/react/Alert.js.map +0 -1
- package/src/react/Badge.d.ts +0 -100
- package/src/react/Badge.js +0 -55
- package/src/react/Badge.js.map +0 -1
- package/src/react/Button.d.ts +0 -108
- package/src/react/Button.js +0 -52
- package/src/react/Button.js.map +0 -1
- package/src/react/Card.d.ts +0 -103
- package/src/react/Card.js +0 -55
- package/src/react/Card.js.map +0 -1
- package/src/react/hooks/context.d.ts +0 -178
- package/src/react/hooks/context.js +0 -287
- package/src/react/hooks/context.js.map +0 -1
- package/src/react/hooks/index.d.ts +0 -41
- package/src/react/hooks/index.js +0 -61
- package/src/react/hooks/index.js.map +0 -1
- package/src/react/hooks/tools.d.ts +0 -283
- package/src/react/hooks/tools.js +0 -465
- package/src/react/hooks/tools.js.map +0 -1
- package/src/react/index.d.ts +0 -80
- package/src/react/index.js +0 -113
- package/src/react/index.js.map +0 -1
- package/src/react/types.d.ts +0 -105
- package/src/react/types.js +0 -12
- package/src/react/types.js.map +0 -1
- package/src/react/utils.d.ts +0 -42
- package/src/react/utils.js +0 -99
- package/src/react/utils.js.map +0 -1
- package/src/registry/index.d.ts +0 -45
- package/src/registry/index.js +0 -67
- package/src/registry/index.js.map +0 -1
- package/src/registry/render-template.d.ts +0 -86
- package/src/registry/render-template.js +0 -239
- package/src/registry/render-template.js.map +0 -1
- package/src/registry/tool-ui.registry.d.ts +0 -260
- package/src/registry/tool-ui.registry.js +0 -438
- package/src/registry/tool-ui.registry.js.map +0 -1
- package/src/registry/uri-utils.d.ts +0 -55
- package/src/registry/uri-utils.js +0 -97
- package/src/registry/uri-utils.js.map +0 -1
- package/src/render/index.d.ts +0 -7
- package/src/render/index.js +0 -14
- package/src/render/index.js.map +0 -1
- package/src/render/prerender.d.ts +0 -56
- package/src/render/prerender.js +0 -98
- package/src/render/prerender.js.map +0 -1
- package/src/renderers/cache.d.ts +0 -144
- package/src/renderers/cache.js +0 -240
- package/src/renderers/cache.js.map +0 -1
- package/src/renderers/html.renderer.d.ts +0 -122
- package/src/renderers/html.renderer.js +0 -204
- package/src/renderers/html.renderer.js.map +0 -1
- package/src/renderers/index.d.ts +0 -35
- package/src/renderers/index.js +0 -70
- package/src/renderers/index.js.map +0 -1
- package/src/renderers/mdx.renderer.d.ts +0 -119
- package/src/renderers/mdx.renderer.js +0 -305
- package/src/renderers/mdx.renderer.js.map +0 -1
- package/src/renderers/react.renderer.d.ts +0 -95
- package/src/renderers/react.renderer.js +0 -260
- package/src/renderers/react.renderer.js.map +0 -1
- package/src/renderers/registry.d.ts +0 -133
- package/src/renderers/registry.js +0 -232
- package/src/renderers/registry.js.map +0 -1
- package/src/renderers/types.d.ts +0 -341
- package/src/renderers/types.js +0 -9
- package/src/renderers/types.js.map +0 -1
- package/src/renderers/utils/detect.d.ts +0 -106
- package/src/renderers/utils/detect.js +0 -267
- package/src/renderers/utils/detect.js.map +0 -1
- package/src/renderers/utils/hash.d.ts +0 -39
- package/src/renderers/utils/hash.js +0 -75
- package/src/renderers/utils/hash.js.map +0 -1
- package/src/renderers/utils/index.d.ts +0 -8
- package/src/renderers/utils/index.js +0 -28
- package/src/renderers/utils/index.js.map +0 -1
- package/src/renderers/utils/transpiler.d.ts +0 -88
- package/src/renderers/utils/transpiler.js +0 -215
- package/src/renderers/utils/transpiler.js.map +0 -1
- package/src/runtime/adapters/html.adapter.d.ts +0 -58
- package/src/runtime/adapters/html.adapter.js +0 -131
- package/src/runtime/adapters/html.adapter.js.map +0 -1
- package/src/runtime/adapters/index.d.ts +0 -25
- package/src/runtime/adapters/index.js +0 -54
- package/src/runtime/adapters/index.js.map +0 -1
- package/src/runtime/adapters/mdx.adapter.d.ts +0 -72
- package/src/runtime/adapters/mdx.adapter.js +0 -241
- package/src/runtime/adapters/mdx.adapter.js.map +0 -1
- package/src/runtime/adapters/react.adapter.d.ts +0 -69
- package/src/runtime/adapters/react.adapter.js +0 -245
- package/src/runtime/adapters/react.adapter.js.map +0 -1
- package/src/runtime/adapters/types.d.ts +0 -94
- package/src/runtime/adapters/types.js +0 -11
- package/src/runtime/adapters/types.js.map +0 -1
- package/src/runtime/csp.d.ts +0 -37
- package/src/runtime/csp.js +0 -140
- package/src/runtime/csp.js.map +0 -1
- package/src/runtime/index.d.ts +0 -16
- package/src/runtime/index.js +0 -72
- package/src/runtime/index.js.map +0 -1
- package/src/runtime/mcp-bridge.d.ts +0 -100
- package/src/runtime/mcp-bridge.js +0 -581
- package/src/runtime/mcp-bridge.js.map +0 -1
- package/src/runtime/renderer-runtime.d.ts +0 -132
- package/src/runtime/renderer-runtime.js +0 -389
- package/src/runtime/renderer-runtime.js.map +0 -1
- package/src/runtime/sanitizer.d.ts +0 -171
- package/src/runtime/sanitizer.js +0 -318
- package/src/runtime/sanitizer.js.map +0 -1
- package/src/runtime/types.d.ts +0 -414
- package/src/runtime/types.js +0 -12
- package/src/runtime/types.js.map +0 -1
- package/src/runtime/wrapper.d.ts +0 -375
- package/src/runtime/wrapper.js +0 -1793
- package/src/runtime/wrapper.js.map +0 -1
- package/src/styles/index.d.ts +0 -7
- package/src/styles/index.js +0 -11
- package/src/styles/index.js.map +0 -1
- package/src/styles/variants.d.ts +0 -50
- package/src/styles/variants.js +0 -175
- package/src/styles/variants.js.map +0 -1
- package/src/theme/cdn.d.ts +0 -194
- package/src/theme/cdn.js +0 -375
- package/src/theme/cdn.js.map +0 -1
- package/src/theme/index.d.ts +0 -17
- package/src/theme/index.js +0 -57
- package/src/theme/index.js.map +0 -1
- package/src/theme/platforms.d.ts +0 -106
- package/src/theme/platforms.js +0 -161
- package/src/theme/platforms.js.map +0 -1
- package/src/theme/presets/github-openai.d.ts +0 -49
- package/src/theme/presets/github-openai.js +0 -189
- package/src/theme/presets/github-openai.js.map +0 -1
- package/src/theme/presets/index.d.ts +0 -10
- package/src/theme/presets/index.js +0 -17
- package/src/theme/presets/index.js.map +0 -1
- package/src/theme/theme.d.ts +0 -395
- package/src/theme/theme.js +0 -332
- package/src/theme/theme.js.map +0 -1
- package/src/tool-template/builder.d.ts +0 -212
- package/src/tool-template/builder.js +0 -397
- package/src/tool-template/builder.js.map +0 -1
- package/src/tool-template/index.d.ts +0 -15
- package/src/tool-template/index.js +0 -38
- package/src/tool-template/index.js.map +0 -1
- package/src/types/index.d.ts +0 -13
- package/src/types/index.js +0 -26
- package/src/types/index.js.map +0 -1
- package/src/types/ui-config.d.ts +0 -357
- package/src/types/ui-config.js +0 -12
- package/src/types/ui-config.js.map +0 -1
- package/src/types/ui-runtime.d.ts +0 -965
- package/src/types/ui-runtime.js +0 -117
- package/src/types/ui-runtime.js.map +0 -1
- package/src/validation/error-box.d.ts +0 -55
- package/src/validation/error-box.js +0 -75
- package/src/validation/error-box.js.map +0 -1
- package/src/validation/index.d.ts +0 -12
- package/src/validation/index.js +0 -21
- package/src/validation/index.js.map +0 -1
- package/src/validation/wrapper.d.ts +0 -96
- package/src/validation/wrapper.js +0 -117
- package/src/validation/wrapper.js.map +0 -1
- package/src/web-components/core/attribute-parser.d.ts +0 -85
- package/src/web-components/core/attribute-parser.js +0 -189
- package/src/web-components/core/attribute-parser.js.map +0 -1
- package/src/web-components/core/base-element.d.ts +0 -197
- package/src/web-components/core/base-element.js +0 -289
- package/src/web-components/core/base-element.js.map +0 -1
- package/src/web-components/core/index.d.ts +0 -8
- package/src/web-components/core/index.js +0 -18
- package/src/web-components/core/index.js.map +0 -1
- package/src/web-components/elements/fmcp-alert.d.ts +0 -45
- package/src/web-components/elements/fmcp-alert.js +0 -93
- package/src/web-components/elements/fmcp-alert.js.map +0 -1
- package/src/web-components/elements/fmcp-badge.d.ts +0 -46
- package/src/web-components/elements/fmcp-badge.js +0 -99
- package/src/web-components/elements/fmcp-badge.js.map +0 -1
- package/src/web-components/elements/fmcp-button.d.ts +0 -124
- package/src/web-components/elements/fmcp-button.js +0 -233
- package/src/web-components/elements/fmcp-button.js.map +0 -1
- package/src/web-components/elements/fmcp-card.d.ts +0 -52
- package/src/web-components/elements/fmcp-card.js +0 -115
- package/src/web-components/elements/fmcp-card.js.map +0 -1
- package/src/web-components/elements/fmcp-input.d.ts +0 -95
- package/src/web-components/elements/fmcp-input.js +0 -248
- package/src/web-components/elements/fmcp-input.js.map +0 -1
- package/src/web-components/elements/fmcp-select.d.ts +0 -99
- package/src/web-components/elements/fmcp-select.js +0 -243
- package/src/web-components/elements/fmcp-select.js.map +0 -1
- package/src/web-components/elements/index.d.ts +0 -12
- package/src/web-components/elements/index.js +0 -34
- package/src/web-components/elements/index.js.map +0 -1
- package/src/web-components/index.d.ts +0 -49
- package/src/web-components/index.js +0 -75
- package/src/web-components/index.js.map +0 -1
- package/src/web-components/register.d.ts +0 -56
- package/src/web-components/register.js +0 -80
- package/src/web-components/register.js.map +0 -1
- package/src/web-components/types.d.ts +0 -121
- package/src/web-components/types.js +0 -25
- package/src/web-components/types.js.map +0 -1
- package/src/widgets/index.d.ts +0 -7
- package/src/widgets/index.js +0 -24
- package/src/widgets/index.js.map +0 -1
- package/src/widgets/progress.d.ts +0 -132
- package/src/widgets/progress.js +0 -303
- package/src/widgets/progress.js.map +0 -1
- package/src/widgets/resource.d.ts +0 -162
- package/src/widgets/resource.js +0 -340
- package/src/widgets/resource.js.map +0 -1
|
@@ -1,940 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* IIFE Generator for FrontMcpBridge Runtime
|
|
4
|
-
*
|
|
5
|
-
* Generates vanilla JavaScript IIFE scripts that can be embedded
|
|
6
|
-
* in HTML templates for runtime platform detection and bridge setup.
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.BRIDGE_SCRIPT_TAGS = exports.UNIVERSAL_BRIDGE_SCRIPT = void 0;
|
|
12
|
-
exports.generateBridgeIIFE = generateBridgeIIFE;
|
|
13
|
-
exports.generatePlatformBundle = generatePlatformBundle;
|
|
14
|
-
/**
|
|
15
|
-
* Generate the bridge runtime IIFE script.
|
|
16
|
-
*
|
|
17
|
-
* This generates a self-contained vanilla JavaScript script that:
|
|
18
|
-
* 1. Detects the current platform
|
|
19
|
-
* 2. Initializes the appropriate adapter
|
|
20
|
-
* 3. Exposes window.FrontMcpBridge global
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* import { generateBridgeIIFE } from '@frontmcp/ui/bridge';
|
|
25
|
-
*
|
|
26
|
-
* const script = generateBridgeIIFE({ debug: true });
|
|
27
|
-
* const html = `<script>${script}</script>`;
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
function generateBridgeIIFE(options = {}) {
|
|
31
|
-
const { debug = false, trustedOrigins = [], minify = false } = options;
|
|
32
|
-
const adapters = options.adapters || ['openai', 'ext-apps', 'claude', 'gemini', 'generic'];
|
|
33
|
-
const parts = [];
|
|
34
|
-
// Start IIFE
|
|
35
|
-
parts.push('(function() {');
|
|
36
|
-
parts.push('"use strict";');
|
|
37
|
-
parts.push('');
|
|
38
|
-
// Debug logging
|
|
39
|
-
if (debug) {
|
|
40
|
-
parts.push('function log(msg) { console.log("[FrontMcpBridge] " + msg); }');
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
parts.push('function log() {}');
|
|
44
|
-
}
|
|
45
|
-
parts.push('');
|
|
46
|
-
// Default safe area
|
|
47
|
-
parts.push('var DEFAULT_SAFE_AREA = { top: 0, bottom: 0, left: 0, right: 0 };');
|
|
48
|
-
parts.push('');
|
|
49
|
-
// Host context detection
|
|
50
|
-
parts.push(generateContextDetection());
|
|
51
|
-
parts.push('');
|
|
52
|
-
// Base adapter capabilities
|
|
53
|
-
parts.push(generateBaseCapabilities());
|
|
54
|
-
parts.push('');
|
|
55
|
-
// Generate selected adapters
|
|
56
|
-
if (adapters.includes('openai')) {
|
|
57
|
-
parts.push(generateOpenAIAdapter());
|
|
58
|
-
parts.push('');
|
|
59
|
-
}
|
|
60
|
-
if (adapters.includes('ext-apps')) {
|
|
61
|
-
parts.push(generateExtAppsAdapter(trustedOrigins));
|
|
62
|
-
parts.push('');
|
|
63
|
-
}
|
|
64
|
-
if (adapters.includes('claude')) {
|
|
65
|
-
parts.push(generateClaudeAdapter());
|
|
66
|
-
parts.push('');
|
|
67
|
-
}
|
|
68
|
-
if (adapters.includes('gemini')) {
|
|
69
|
-
parts.push(generateGeminiAdapter());
|
|
70
|
-
parts.push('');
|
|
71
|
-
}
|
|
72
|
-
if (adapters.includes('generic')) {
|
|
73
|
-
parts.push(generateGenericAdapter());
|
|
74
|
-
parts.push('');
|
|
75
|
-
}
|
|
76
|
-
// Platform detection and initialization
|
|
77
|
-
parts.push(generatePlatformDetection(adapters));
|
|
78
|
-
parts.push('');
|
|
79
|
-
// Bridge class
|
|
80
|
-
parts.push(generateBridgeClass());
|
|
81
|
-
parts.push('');
|
|
82
|
-
// Initialize and expose
|
|
83
|
-
parts.push('var bridge = new FrontMcpBridge();');
|
|
84
|
-
parts.push('bridge.initialize().then(function() {');
|
|
85
|
-
parts.push(' log("Bridge initialized with adapter: " + bridge.adapterId);');
|
|
86
|
-
parts.push(' window.dispatchEvent(new CustomEvent("bridge:ready", { detail: { adapter: bridge.adapterId } }));');
|
|
87
|
-
parts.push('}).catch(function(err) {');
|
|
88
|
-
parts.push(' console.error("[FrontMcpBridge] Init failed:", err);');
|
|
89
|
-
parts.push(' window.dispatchEvent(new CustomEvent("bridge:error", { detail: { error: err } }));');
|
|
90
|
-
parts.push('});');
|
|
91
|
-
parts.push('');
|
|
92
|
-
// Expose global
|
|
93
|
-
parts.push('window.FrontMcpBridge = bridge;');
|
|
94
|
-
// End IIFE
|
|
95
|
-
parts.push('})();');
|
|
96
|
-
const code = parts.join('\n');
|
|
97
|
-
if (minify) {
|
|
98
|
-
return minifyJS(code);
|
|
99
|
-
}
|
|
100
|
-
return code;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Generate context detection helper.
|
|
104
|
-
*/
|
|
105
|
-
function generateContextDetection() {
|
|
106
|
-
return `
|
|
107
|
-
function detectTheme() {
|
|
108
|
-
if (typeof window !== 'undefined' && window.matchMedia) {
|
|
109
|
-
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
110
|
-
}
|
|
111
|
-
return 'light';
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function detectLocale() {
|
|
115
|
-
if (typeof navigator !== 'undefined') {
|
|
116
|
-
return navigator.language || 'en-US';
|
|
117
|
-
}
|
|
118
|
-
return 'en-US';
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function detectUserAgent() {
|
|
122
|
-
if (typeof navigator === 'undefined') {
|
|
123
|
-
return { type: 'web', hover: true, touch: false };
|
|
124
|
-
}
|
|
125
|
-
var ua = navigator.userAgent || '';
|
|
126
|
-
var isMobile = /iPhone|iPad|iPod|Android/i.test(ua);
|
|
127
|
-
var hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
|
|
128
|
-
var hasHover = window.matchMedia && window.matchMedia('(hover: hover)').matches;
|
|
129
|
-
return { type: isMobile ? 'mobile' : 'web', hover: hasHover !== false, touch: hasTouch };
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function detectViewport() {
|
|
133
|
-
if (typeof window !== 'undefined') {
|
|
134
|
-
return { width: window.innerWidth, height: window.innerHeight };
|
|
135
|
-
}
|
|
136
|
-
return undefined;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function readInjectedData() {
|
|
140
|
-
var data = { toolInput: {}, toolOutput: undefined, structuredContent: undefined };
|
|
141
|
-
if (typeof window !== 'undefined') {
|
|
142
|
-
if (window.__mcpToolInput) data.toolInput = window.__mcpToolInput;
|
|
143
|
-
if (window.__mcpToolOutput) data.toolOutput = window.__mcpToolOutput;
|
|
144
|
-
if (window.__mcpStructuredContent) data.structuredContent = window.__mcpStructuredContent;
|
|
145
|
-
}
|
|
146
|
-
return data;
|
|
147
|
-
}
|
|
148
|
-
`.trim();
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Generate base capabilities object.
|
|
152
|
-
*/
|
|
153
|
-
function generateBaseCapabilities() {
|
|
154
|
-
return `
|
|
155
|
-
var DEFAULT_CAPABILITIES = {
|
|
156
|
-
canCallTools: false,
|
|
157
|
-
canSendMessages: false,
|
|
158
|
-
canOpenLinks: false,
|
|
159
|
-
canPersistState: true,
|
|
160
|
-
hasNetworkAccess: true,
|
|
161
|
-
supportsDisplayModes: false,
|
|
162
|
-
supportsTheme: true
|
|
163
|
-
};
|
|
164
|
-
`.trim();
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Generate OpenAI adapter code.
|
|
168
|
-
*/
|
|
169
|
-
function generateOpenAIAdapter() {
|
|
170
|
-
return `
|
|
171
|
-
var OpenAIAdapter = {
|
|
172
|
-
id: 'openai',
|
|
173
|
-
name: 'OpenAI ChatGPT',
|
|
174
|
-
priority: 100,
|
|
175
|
-
capabilities: Object.assign({}, DEFAULT_CAPABILITIES, {
|
|
176
|
-
canCallTools: true,
|
|
177
|
-
canSendMessages: true,
|
|
178
|
-
canOpenLinks: true,
|
|
179
|
-
supportsDisplayModes: true
|
|
180
|
-
}),
|
|
181
|
-
canHandle: function() {
|
|
182
|
-
if (typeof window === 'undefined') return false;
|
|
183
|
-
// Check for window.openai.callTool (the actual OpenAI SDK API)
|
|
184
|
-
if (window.openai && typeof window.openai.callTool === 'function') return true;
|
|
185
|
-
// Also check if we're being injected with tool metadata (OpenAI injects toolOutput)
|
|
186
|
-
if (window.openai && (window.openai.toolOutput !== undefined || window.openai.toolInput !== undefined)) return true;
|
|
187
|
-
return false;
|
|
188
|
-
},
|
|
189
|
-
initialize: function(context) {
|
|
190
|
-
var sdk = window.openai;
|
|
191
|
-
context.sdk = sdk;
|
|
192
|
-
// OpenAI SDK exposes theme and displayMode directly as properties
|
|
193
|
-
if (sdk.theme) {
|
|
194
|
-
context.hostContext.theme = sdk.theme;
|
|
195
|
-
}
|
|
196
|
-
if (sdk.displayMode) {
|
|
197
|
-
context.hostContext.displayMode = sdk.displayMode;
|
|
198
|
-
}
|
|
199
|
-
// Note: OpenAI SDK does not have an onContextChange equivalent
|
|
200
|
-
return Promise.resolve();
|
|
201
|
-
},
|
|
202
|
-
callTool: function(context, name, args) {
|
|
203
|
-
return context.sdk.callTool(name, args);
|
|
204
|
-
},
|
|
205
|
-
sendMessage: function(context, content) {
|
|
206
|
-
if (typeof context.sdk.sendFollowUpMessage === 'function') {
|
|
207
|
-
return context.sdk.sendFollowUpMessage(content);
|
|
208
|
-
}
|
|
209
|
-
return Promise.reject(new Error('Messages not supported'));
|
|
210
|
-
},
|
|
211
|
-
openLink: function(context, url) {
|
|
212
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
213
|
-
return Promise.resolve();
|
|
214
|
-
},
|
|
215
|
-
requestDisplayMode: function(context, mode) {
|
|
216
|
-
return Promise.resolve();
|
|
217
|
-
},
|
|
218
|
-
requestClose: function(context) {
|
|
219
|
-
return Promise.resolve();
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
`.trim();
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Generate ext-apps adapter code.
|
|
226
|
-
*/
|
|
227
|
-
function generateExtAppsAdapter(trustedOrigins) {
|
|
228
|
-
const originsArray = trustedOrigins.length > 0 ? JSON.stringify(trustedOrigins) : '[]';
|
|
229
|
-
return `
|
|
230
|
-
var ExtAppsAdapter = {
|
|
231
|
-
id: 'ext-apps',
|
|
232
|
-
name: 'ext-apps (SEP-1865)',
|
|
233
|
-
priority: 80,
|
|
234
|
-
capabilities: Object.assign({}, DEFAULT_CAPABILITIES, { canPersistState: true, hasNetworkAccess: true }),
|
|
235
|
-
trustedOrigins: ${originsArray},
|
|
236
|
-
trustedOrigin: null,
|
|
237
|
-
pendingRequests: {},
|
|
238
|
-
requestId: 0,
|
|
239
|
-
hostCapabilities: {},
|
|
240
|
-
canHandle: function() {
|
|
241
|
-
if (typeof window === 'undefined') return false;
|
|
242
|
-
if (window.parent === window) return false;
|
|
243
|
-
// Check for OpenAI SDK (window.openai.callTool) - defer to OpenAIAdapter
|
|
244
|
-
if (window.openai && typeof window.openai.callTool === 'function') return false;
|
|
245
|
-
if (window.__mcpPlatform === 'ext-apps') return true;
|
|
246
|
-
return true;
|
|
247
|
-
},
|
|
248
|
-
initialize: function(context) {
|
|
249
|
-
var self = this;
|
|
250
|
-
context.extApps = this;
|
|
251
|
-
|
|
252
|
-
window.addEventListener('message', function(event) {
|
|
253
|
-
self.handleMessage(context, event);
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
return self.performHandshake(context);
|
|
257
|
-
},
|
|
258
|
-
handleMessage: function(context, event) {
|
|
259
|
-
if (!this.isOriginTrusted(event.origin)) return;
|
|
260
|
-
var data = event.data;
|
|
261
|
-
if (!data || typeof data !== 'object' || data.jsonrpc !== '2.0') return;
|
|
262
|
-
|
|
263
|
-
if ('id' in data && (data.result !== undefined || data.error !== undefined)) {
|
|
264
|
-
var pending = this.pendingRequests[data.id];
|
|
265
|
-
if (pending) {
|
|
266
|
-
clearTimeout(pending.timeout);
|
|
267
|
-
delete this.pendingRequests[data.id];
|
|
268
|
-
if (data.error) {
|
|
269
|
-
pending.reject(new Error(data.error.message + ' (code: ' + data.error.code + ')'));
|
|
270
|
-
} else {
|
|
271
|
-
pending.resolve(data.result);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
if ('method' in data && !('id' in data)) {
|
|
278
|
-
this.handleNotification(context, data);
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
handleNotification: function(context, notification) {
|
|
282
|
-
var params = notification.params || {};
|
|
283
|
-
switch (notification.method) {
|
|
284
|
-
case 'ui/notifications/tool-input':
|
|
285
|
-
context.toolInput = params.arguments || {};
|
|
286
|
-
window.dispatchEvent(new CustomEvent('tool:input', { detail: { arguments: context.toolInput } }));
|
|
287
|
-
break;
|
|
288
|
-
case 'ui/notifications/tool-result':
|
|
289
|
-
context.toolOutput = params.content;
|
|
290
|
-
context.structuredContent = params.structuredContent;
|
|
291
|
-
context.notifyToolResult(params.content);
|
|
292
|
-
window.dispatchEvent(new CustomEvent('tool:result', { detail: params }));
|
|
293
|
-
break;
|
|
294
|
-
case 'ui/notifications/host-context-changed':
|
|
295
|
-
Object.assign(context.hostContext, params);
|
|
296
|
-
context.notifyContextChange(params);
|
|
297
|
-
break;
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
isOriginTrusted: function(origin) {
|
|
301
|
-
if (this.trustedOrigins.length > 0) {
|
|
302
|
-
return this.trustedOrigins.indexOf(origin) !== -1;
|
|
303
|
-
}
|
|
304
|
-
// When no trusted origins configured, only trust first message in iframe context
|
|
305
|
-
// This helps mitigate race conditions where a malicious iframe could establish trust
|
|
306
|
-
if (!this.trustedOrigin) {
|
|
307
|
-
if (window.parent !== window && origin) {
|
|
308
|
-
this.trustedOrigin = origin;
|
|
309
|
-
return true;
|
|
310
|
-
}
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
return this.trustedOrigin === origin;
|
|
314
|
-
},
|
|
315
|
-
sendRequest: function(method, params) {
|
|
316
|
-
var self = this;
|
|
317
|
-
return new Promise(function(resolve, reject) {
|
|
318
|
-
// Security: Require trusted origin before sending requests to prevent message leaks
|
|
319
|
-
if (!self.trustedOrigin && self.trustedOrigins.length === 0) {
|
|
320
|
-
reject(new Error('Cannot send request: no trusted origin established'));
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
var id = ++self.requestId;
|
|
325
|
-
var timeout = setTimeout(function() {
|
|
326
|
-
delete self.pendingRequests[id];
|
|
327
|
-
reject(new Error('Request ' + method + ' timed out'));
|
|
328
|
-
}, 10000);
|
|
329
|
-
|
|
330
|
-
self.pendingRequests[id] = { resolve: resolve, reject: reject, timeout: timeout };
|
|
331
|
-
|
|
332
|
-
var targetOrigin = self.trustedOrigin || self.trustedOrigins[0];
|
|
333
|
-
window.parent.postMessage({ jsonrpc: '2.0', id: id, method: method, params: params }, targetOrigin);
|
|
334
|
-
});
|
|
335
|
-
},
|
|
336
|
-
performHandshake: function(context) {
|
|
337
|
-
var self = this;
|
|
338
|
-
var params = {
|
|
339
|
-
appInfo: { name: 'FrontMCP Widget', version: '1.0.0' },
|
|
340
|
-
appCapabilities: { tools: { listChanged: false } },
|
|
341
|
-
protocolVersion: '2024-11-05'
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
return this.sendRequest('ui/initialize', params).then(function(result) {
|
|
345
|
-
self.hostCapabilities = result.hostCapabilities || {};
|
|
346
|
-
self.capabilities = Object.assign({}, self.capabilities, {
|
|
347
|
-
canCallTools: Boolean(self.hostCapabilities.serverToolProxy),
|
|
348
|
-
canSendMessages: true,
|
|
349
|
-
canOpenLinks: Boolean(self.hostCapabilities.openLink),
|
|
350
|
-
supportsDisplayModes: true
|
|
351
|
-
});
|
|
352
|
-
if (result.hostContext) {
|
|
353
|
-
Object.assign(context.hostContext, result.hostContext);
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
},
|
|
357
|
-
callTool: function(context, name, args) {
|
|
358
|
-
if (!this.hostCapabilities.serverToolProxy) {
|
|
359
|
-
return Promise.reject(new Error('Server tool proxy not supported'));
|
|
360
|
-
}
|
|
361
|
-
return this.sendRequest('ui/callServerTool', { name: name, arguments: args });
|
|
362
|
-
},
|
|
363
|
-
sendMessage: function(context, content) {
|
|
364
|
-
return this.sendRequest('ui/message', { content: content });
|
|
365
|
-
},
|
|
366
|
-
openLink: function(context, url) {
|
|
367
|
-
if (!this.hostCapabilities.openLink) {
|
|
368
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
369
|
-
return Promise.resolve();
|
|
370
|
-
}
|
|
371
|
-
return this.sendRequest('ui/openLink', { url: url });
|
|
372
|
-
},
|
|
373
|
-
requestDisplayMode: function(context, mode) {
|
|
374
|
-
return this.sendRequest('ui/setDisplayMode', { mode: mode });
|
|
375
|
-
},
|
|
376
|
-
requestClose: function(context) {
|
|
377
|
-
return this.sendRequest('ui/close', {});
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
`.trim();
|
|
381
|
-
}
|
|
382
|
-
/**
|
|
383
|
-
* Generate Claude adapter code.
|
|
384
|
-
*/
|
|
385
|
-
function generateClaudeAdapter() {
|
|
386
|
-
return `
|
|
387
|
-
var ClaudeAdapter = {
|
|
388
|
-
id: 'claude',
|
|
389
|
-
name: 'Claude (Anthropic)',
|
|
390
|
-
priority: 60,
|
|
391
|
-
capabilities: Object.assign({}, DEFAULT_CAPABILITIES, {
|
|
392
|
-
canCallTools: false,
|
|
393
|
-
canSendMessages: false,
|
|
394
|
-
canOpenLinks: true,
|
|
395
|
-
hasNetworkAccess: false,
|
|
396
|
-
supportsDisplayModes: false
|
|
397
|
-
}),
|
|
398
|
-
canHandle: function() {
|
|
399
|
-
if (typeof window === 'undefined') return false;
|
|
400
|
-
if (window.__mcpPlatform === 'claude') return true;
|
|
401
|
-
if (window.claude) return true;
|
|
402
|
-
if (window.__claudeArtifact) return true;
|
|
403
|
-
if (typeof location !== 'undefined') {
|
|
404
|
-
var href = location.href;
|
|
405
|
-
if (href.indexOf('claude.ai') !== -1 || href.indexOf('anthropic.com') !== -1) return true;
|
|
406
|
-
}
|
|
407
|
-
return false;
|
|
408
|
-
},
|
|
409
|
-
initialize: function(context) {
|
|
410
|
-
return Promise.resolve();
|
|
411
|
-
},
|
|
412
|
-
callTool: function() {
|
|
413
|
-
return Promise.reject(new Error('Tool calls not supported in Claude'));
|
|
414
|
-
},
|
|
415
|
-
sendMessage: function() {
|
|
416
|
-
return Promise.reject(new Error('Messages not supported in Claude'));
|
|
417
|
-
},
|
|
418
|
-
openLink: function(context, url) {
|
|
419
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
420
|
-
return Promise.resolve();
|
|
421
|
-
},
|
|
422
|
-
requestDisplayMode: function() {
|
|
423
|
-
return Promise.resolve();
|
|
424
|
-
},
|
|
425
|
-
requestClose: function() {
|
|
426
|
-
return Promise.resolve();
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
`.trim();
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Generate Gemini adapter code.
|
|
433
|
-
*/
|
|
434
|
-
function generateGeminiAdapter() {
|
|
435
|
-
return `
|
|
436
|
-
var GeminiAdapter = {
|
|
437
|
-
id: 'gemini',
|
|
438
|
-
name: 'Google Gemini',
|
|
439
|
-
priority: 40,
|
|
440
|
-
capabilities: Object.assign({}, DEFAULT_CAPABILITIES, {
|
|
441
|
-
canOpenLinks: true,
|
|
442
|
-
hasNetworkAccess: true
|
|
443
|
-
}),
|
|
444
|
-
canHandle: function() {
|
|
445
|
-
if (typeof window === 'undefined') return false;
|
|
446
|
-
if (window.__mcpPlatform === 'gemini') return true;
|
|
447
|
-
if (window.gemini) return true;
|
|
448
|
-
if (typeof location !== 'undefined') {
|
|
449
|
-
var href = location.href;
|
|
450
|
-
if (href.indexOf('gemini.google.com') !== -1 || href.indexOf('bard.google.com') !== -1) return true;
|
|
451
|
-
}
|
|
452
|
-
return false;
|
|
453
|
-
},
|
|
454
|
-
initialize: function(context) {
|
|
455
|
-
if (window.gemini && window.gemini.ui && window.gemini.ui.getTheme) {
|
|
456
|
-
context.hostContext.theme = window.gemini.ui.getTheme() === 'dark' ? 'dark' : 'light';
|
|
457
|
-
}
|
|
458
|
-
return Promise.resolve();
|
|
459
|
-
},
|
|
460
|
-
callTool: function() {
|
|
461
|
-
return Promise.reject(new Error('Tool calls not supported in Gemini'));
|
|
462
|
-
},
|
|
463
|
-
sendMessage: function(context, content) {
|
|
464
|
-
if (window.gemini && window.gemini.ui && window.gemini.ui.sendMessage) {
|
|
465
|
-
return window.gemini.ui.sendMessage(content);
|
|
466
|
-
}
|
|
467
|
-
return Promise.reject(new Error('Messages not supported in Gemini'));
|
|
468
|
-
},
|
|
469
|
-
openLink: function(context, url) {
|
|
470
|
-
if (window.gemini && window.gemini.ui && window.gemini.ui.openLink) {
|
|
471
|
-
return window.gemini.ui.openLink(url);
|
|
472
|
-
}
|
|
473
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
474
|
-
return Promise.resolve();
|
|
475
|
-
},
|
|
476
|
-
requestDisplayMode: function() {
|
|
477
|
-
return Promise.resolve();
|
|
478
|
-
},
|
|
479
|
-
requestClose: function() {
|
|
480
|
-
return Promise.resolve();
|
|
481
|
-
}
|
|
482
|
-
};
|
|
483
|
-
`.trim();
|
|
484
|
-
}
|
|
485
|
-
/**
|
|
486
|
-
* Generate Generic adapter code.
|
|
487
|
-
*/
|
|
488
|
-
function generateGenericAdapter() {
|
|
489
|
-
return `
|
|
490
|
-
var GenericAdapter = {
|
|
491
|
-
id: 'generic',
|
|
492
|
-
name: 'Generic Web',
|
|
493
|
-
priority: 0,
|
|
494
|
-
capabilities: Object.assign({}, DEFAULT_CAPABILITIES, {
|
|
495
|
-
canOpenLinks: true,
|
|
496
|
-
hasNetworkAccess: true
|
|
497
|
-
}),
|
|
498
|
-
canHandle: function() {
|
|
499
|
-
return typeof window !== 'undefined';
|
|
500
|
-
},
|
|
501
|
-
initialize: function(context) {
|
|
502
|
-
return Promise.resolve();
|
|
503
|
-
},
|
|
504
|
-
callTool: function() {
|
|
505
|
-
return Promise.reject(new Error('Tool calls not supported'));
|
|
506
|
-
},
|
|
507
|
-
sendMessage: function() {
|
|
508
|
-
return Promise.reject(new Error('Messages not supported'));
|
|
509
|
-
},
|
|
510
|
-
openLink: function(context, url) {
|
|
511
|
-
window.open(url, '_blank', 'noopener,noreferrer');
|
|
512
|
-
return Promise.resolve();
|
|
513
|
-
},
|
|
514
|
-
requestDisplayMode: function() {
|
|
515
|
-
return Promise.resolve();
|
|
516
|
-
},
|
|
517
|
-
requestClose: function() {
|
|
518
|
-
return Promise.resolve();
|
|
519
|
-
}
|
|
520
|
-
};
|
|
521
|
-
`.trim();
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* Generate platform detection logic.
|
|
525
|
-
*/
|
|
526
|
-
function generatePlatformDetection(adapters) {
|
|
527
|
-
const adapterVars = adapters
|
|
528
|
-
.map((a) => {
|
|
529
|
-
switch (a) {
|
|
530
|
-
case 'openai':
|
|
531
|
-
return 'OpenAIAdapter';
|
|
532
|
-
case 'ext-apps':
|
|
533
|
-
return 'ExtAppsAdapter';
|
|
534
|
-
case 'claude':
|
|
535
|
-
return 'ClaudeAdapter';
|
|
536
|
-
case 'gemini':
|
|
537
|
-
return 'GeminiAdapter';
|
|
538
|
-
case 'generic':
|
|
539
|
-
return 'GenericAdapter';
|
|
540
|
-
default:
|
|
541
|
-
return '';
|
|
542
|
-
}
|
|
543
|
-
})
|
|
544
|
-
.filter(Boolean);
|
|
545
|
-
return `
|
|
546
|
-
var ADAPTERS = [${adapterVars.join(', ')}].sort(function(a, b) { return b.priority - a.priority; });
|
|
547
|
-
|
|
548
|
-
function detectPlatform() {
|
|
549
|
-
for (var i = 0; i < ADAPTERS.length; i++) {
|
|
550
|
-
if (ADAPTERS[i].canHandle()) {
|
|
551
|
-
log('Detected platform: ' + ADAPTERS[i].id);
|
|
552
|
-
return ADAPTERS[i];
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
log('No platform detected, using generic');
|
|
556
|
-
return GenericAdapter;
|
|
557
|
-
}
|
|
558
|
-
`.trim();
|
|
559
|
-
}
|
|
560
|
-
/**
|
|
561
|
-
* Generate the main bridge class.
|
|
562
|
-
*/
|
|
563
|
-
function generateBridgeClass() {
|
|
564
|
-
return `
|
|
565
|
-
function FrontMcpBridge() {
|
|
566
|
-
this._adapter = null;
|
|
567
|
-
this._initialized = false;
|
|
568
|
-
this._context = {
|
|
569
|
-
hostContext: {
|
|
570
|
-
theme: detectTheme(),
|
|
571
|
-
displayMode: 'inline',
|
|
572
|
-
locale: detectLocale(),
|
|
573
|
-
userAgent: detectUserAgent(),
|
|
574
|
-
safeArea: DEFAULT_SAFE_AREA,
|
|
575
|
-
viewport: detectViewport()
|
|
576
|
-
},
|
|
577
|
-
toolInput: {},
|
|
578
|
-
toolOutput: undefined,
|
|
579
|
-
structuredContent: undefined,
|
|
580
|
-
widgetState: {},
|
|
581
|
-
contextListeners: [],
|
|
582
|
-
toolResultListeners: [],
|
|
583
|
-
notifyContextChange: function(changes) {
|
|
584
|
-
Object.assign(this.hostContext, changes);
|
|
585
|
-
for (var i = 0; i < this.contextListeners.length; i++) {
|
|
586
|
-
try { this.contextListeners[i](changes); } catch(e) {}
|
|
587
|
-
}
|
|
588
|
-
},
|
|
589
|
-
notifyToolResult: function(result) {
|
|
590
|
-
this.toolOutput = result;
|
|
591
|
-
for (var i = 0; i < this.toolResultListeners.length; i++) {
|
|
592
|
-
try { this.toolResultListeners[i](result); } catch(e) {}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
};
|
|
596
|
-
|
|
597
|
-
var injected = readInjectedData();
|
|
598
|
-
this._context.toolInput = injected.toolInput;
|
|
599
|
-
this._context.toolOutput = injected.toolOutput;
|
|
600
|
-
this._context.structuredContent = injected.structuredContent;
|
|
601
|
-
|
|
602
|
-
this._loadWidgetState();
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
FrontMcpBridge.prototype._loadWidgetState = function() {
|
|
606
|
-
try {
|
|
607
|
-
var key = 'frontmcp:widget:' + (window.__mcpToolName || 'unknown');
|
|
608
|
-
var stored = localStorage.getItem(key);
|
|
609
|
-
if (stored) this._context.widgetState = JSON.parse(stored);
|
|
610
|
-
} catch(e) {}
|
|
611
|
-
};
|
|
612
|
-
|
|
613
|
-
FrontMcpBridge.prototype._saveWidgetState = function() {
|
|
614
|
-
try {
|
|
615
|
-
var key = 'frontmcp:widget:' + (window.__mcpToolName || 'unknown');
|
|
616
|
-
localStorage.setItem(key, JSON.stringify(this._context.widgetState));
|
|
617
|
-
} catch(e) {}
|
|
618
|
-
};
|
|
619
|
-
|
|
620
|
-
FrontMcpBridge.prototype.initialize = function() {
|
|
621
|
-
if (this._initialized) return Promise.resolve();
|
|
622
|
-
var self = this;
|
|
623
|
-
this._adapter = detectPlatform();
|
|
624
|
-
return this._adapter.initialize(this._context).then(function() {
|
|
625
|
-
self._initialized = true;
|
|
626
|
-
// Set up the data-tool-call click handler after initialization
|
|
627
|
-
self._setupDataToolCallHandler();
|
|
628
|
-
});
|
|
629
|
-
};
|
|
630
|
-
|
|
631
|
-
Object.defineProperty(FrontMcpBridge.prototype, 'initialized', { get: function() { return this._initialized; } });
|
|
632
|
-
Object.defineProperty(FrontMcpBridge.prototype, 'adapterId', { get: function() { return this._adapter ? this._adapter.id : undefined; } });
|
|
633
|
-
Object.defineProperty(FrontMcpBridge.prototype, 'capabilities', { get: function() { return this._adapter ? this._adapter.capabilities : DEFAULT_CAPABILITIES; } });
|
|
634
|
-
|
|
635
|
-
FrontMcpBridge.prototype.getTheme = function() { return this._context.hostContext.theme; };
|
|
636
|
-
FrontMcpBridge.prototype.getDisplayMode = function() { return this._context.hostContext.displayMode; };
|
|
637
|
-
FrontMcpBridge.prototype.getToolInput = function() { return this._context.toolInput; };
|
|
638
|
-
FrontMcpBridge.prototype.getToolOutput = function() { return this._context.toolOutput; };
|
|
639
|
-
FrontMcpBridge.prototype.getStructuredContent = function() { return this._context.structuredContent; };
|
|
640
|
-
FrontMcpBridge.prototype.getWidgetState = function() { return this._context.widgetState; };
|
|
641
|
-
FrontMcpBridge.prototype.getHostContext = function() { return Object.assign({}, this._context.hostContext); };
|
|
642
|
-
FrontMcpBridge.prototype.hasCapability = function(cap) { return this._adapter && this._adapter.capabilities[cap] === true; };
|
|
643
|
-
|
|
644
|
-
// Get tool response metadata (platform-agnostic)
|
|
645
|
-
// Used by inline mode widgets to detect when ui/html arrives
|
|
646
|
-
FrontMcpBridge.prototype.getToolResponseMetadata = function() {
|
|
647
|
-
// OpenAI injects toolResponseMetadata for widget-producing tools
|
|
648
|
-
if (typeof window !== 'undefined' && window.openai && window.openai.toolResponseMetadata) {
|
|
649
|
-
return window.openai.toolResponseMetadata;
|
|
650
|
-
}
|
|
651
|
-
// Claude (future support)
|
|
652
|
-
if (typeof window !== 'undefined' && window.claude && window.claude.toolResponseMetadata) {
|
|
653
|
-
return window.claude.toolResponseMetadata;
|
|
654
|
-
}
|
|
655
|
-
// FrontMCP direct injection (for testing/ext-apps)
|
|
656
|
-
if (typeof window !== 'undefined' && window.__mcpToolResponseMetadata) {
|
|
657
|
-
return window.__mcpToolResponseMetadata;
|
|
658
|
-
}
|
|
659
|
-
return null;
|
|
660
|
-
};
|
|
661
|
-
|
|
662
|
-
// Subscribe to tool response metadata changes (for inline mode injection)
|
|
663
|
-
FrontMcpBridge.prototype.onToolResponseMetadata = function(callback) {
|
|
664
|
-
var self = this;
|
|
665
|
-
var called = false;
|
|
666
|
-
|
|
667
|
-
// Check if already available
|
|
668
|
-
var existing = self.getToolResponseMetadata();
|
|
669
|
-
if (existing) {
|
|
670
|
-
called = true;
|
|
671
|
-
callback(existing);
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
// Set up property interceptors for OpenAI
|
|
675
|
-
if (typeof window !== 'undefined') {
|
|
676
|
-
// OpenAI: Intercept toolResponseMetadata assignment
|
|
677
|
-
if (!window.__frontmcpMetadataIntercepted) {
|
|
678
|
-
window.__frontmcpMetadataIntercepted = true;
|
|
679
|
-
window.__frontmcpMetadataCallbacks = [];
|
|
680
|
-
|
|
681
|
-
// Create openai object if it doesn't exist
|
|
682
|
-
if (!window.openai) window.openai = {};
|
|
683
|
-
|
|
684
|
-
var originalMetadata = window.openai.toolResponseMetadata;
|
|
685
|
-
Object.defineProperty(window.openai, 'toolResponseMetadata', {
|
|
686
|
-
get: function() { return originalMetadata; },
|
|
687
|
-
set: function(val) {
|
|
688
|
-
originalMetadata = val;
|
|
689
|
-
log('toolResponseMetadata set, notifying ' + window.__frontmcpMetadataCallbacks.length + ' listeners');
|
|
690
|
-
for (var i = 0; i < window.__frontmcpMetadataCallbacks.length; i++) {
|
|
691
|
-
try { window.__frontmcpMetadataCallbacks[i](val); } catch(e) {}
|
|
692
|
-
}
|
|
693
|
-
},
|
|
694
|
-
configurable: true
|
|
695
|
-
});
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
// Register callback wrapper (store reference for unsubscribe)
|
|
699
|
-
var wrapper = function(metadata) {
|
|
700
|
-
if (!called) {
|
|
701
|
-
called = true;
|
|
702
|
-
callback(metadata);
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
window.__frontmcpMetadataCallbacks.push(wrapper);
|
|
706
|
-
|
|
707
|
-
// Return unsubscribe function that removes the wrapper (not the original callback)
|
|
708
|
-
return function() {
|
|
709
|
-
if (window.__frontmcpMetadataCallbacks) {
|
|
710
|
-
var idx = window.__frontmcpMetadataCallbacks.indexOf(wrapper);
|
|
711
|
-
if (idx !== -1) window.__frontmcpMetadataCallbacks.splice(idx, 1);
|
|
712
|
-
}
|
|
713
|
-
};
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
// Return no-op unsubscribe for non-window environments
|
|
717
|
-
return function() {};
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
FrontMcpBridge.prototype.callTool = function(name, args) {
|
|
721
|
-
// Priority 1: Direct OpenAI SDK call (most reliable in OpenAI iframe)
|
|
722
|
-
// This bypasses adapter abstraction for maximum compatibility
|
|
723
|
-
if (typeof window !== 'undefined' && window.openai && typeof window.openai.callTool === 'function') {
|
|
724
|
-
log('callTool: Using OpenAI SDK directly');
|
|
725
|
-
return window.openai.callTool(name, args);
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
// Priority 2: Use adapter (if initialized and supports tool calls)
|
|
729
|
-
if (this._adapter && this._adapter.capabilities && this._adapter.capabilities.canCallTools) {
|
|
730
|
-
log('callTool: Using adapter ' + this._adapter.id);
|
|
731
|
-
return this._adapter.callTool(this._context, name, args);
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
// Not initialized or no tool support
|
|
735
|
-
if (!this._adapter) {
|
|
736
|
-
return Promise.reject(new Error('Bridge not initialized. Wait for bridge:ready event.'));
|
|
737
|
-
}
|
|
738
|
-
return Promise.reject(new Error('Tool calls not supported on this platform (' + this._adapter.id + ')'));
|
|
739
|
-
};
|
|
740
|
-
|
|
741
|
-
FrontMcpBridge.prototype.sendMessage = function(content) {
|
|
742
|
-
if (!this._adapter) return Promise.reject(new Error('Not initialized'));
|
|
743
|
-
return this._adapter.sendMessage(this._context, content);
|
|
744
|
-
};
|
|
745
|
-
|
|
746
|
-
FrontMcpBridge.prototype.openLink = function(url) {
|
|
747
|
-
if (!this._adapter) return Promise.reject(new Error('Not initialized'));
|
|
748
|
-
return this._adapter.openLink(this._context, url);
|
|
749
|
-
};
|
|
750
|
-
|
|
751
|
-
FrontMcpBridge.prototype.requestDisplayMode = function(mode) {
|
|
752
|
-
if (!this._adapter) return Promise.reject(new Error('Not initialized'));
|
|
753
|
-
var self = this;
|
|
754
|
-
return this._adapter.requestDisplayMode(this._context, mode).then(function() {
|
|
755
|
-
self._context.hostContext.displayMode = mode;
|
|
756
|
-
});
|
|
757
|
-
};
|
|
758
|
-
|
|
759
|
-
FrontMcpBridge.prototype.requestClose = function() {
|
|
760
|
-
if (!this._adapter) return Promise.reject(new Error('Not initialized'));
|
|
761
|
-
return this._adapter.requestClose(this._context);
|
|
762
|
-
};
|
|
763
|
-
|
|
764
|
-
FrontMcpBridge.prototype.setWidgetState = function(state) {
|
|
765
|
-
Object.assign(this._context.widgetState, state);
|
|
766
|
-
this._saveWidgetState();
|
|
767
|
-
};
|
|
768
|
-
|
|
769
|
-
FrontMcpBridge.prototype.onContextChange = function(callback) {
|
|
770
|
-
var listeners = this._context.contextListeners;
|
|
771
|
-
listeners.push(callback);
|
|
772
|
-
return function() {
|
|
773
|
-
var idx = listeners.indexOf(callback);
|
|
774
|
-
if (idx !== -1) listeners.splice(idx, 1);
|
|
775
|
-
};
|
|
776
|
-
};
|
|
777
|
-
|
|
778
|
-
FrontMcpBridge.prototype.onToolResult = function(callback) {
|
|
779
|
-
var listeners = this._context.toolResultListeners;
|
|
780
|
-
listeners.push(callback);
|
|
781
|
-
return function() {
|
|
782
|
-
var idx = listeners.indexOf(callback);
|
|
783
|
-
if (idx !== -1) listeners.splice(idx, 1);
|
|
784
|
-
};
|
|
785
|
-
};
|
|
786
|
-
|
|
787
|
-
// ==================== data-tool-call Click Handler ====================
|
|
788
|
-
|
|
789
|
-
FrontMcpBridge.prototype._setupDataToolCallHandler = function() {
|
|
790
|
-
var self = this;
|
|
791
|
-
|
|
792
|
-
document.addEventListener('click', function(e) {
|
|
793
|
-
// Find the closest element with data-tool-call attribute
|
|
794
|
-
var target = e.target;
|
|
795
|
-
while (target && target !== document) {
|
|
796
|
-
if (target.hasAttribute && target.hasAttribute('data-tool-call')) {
|
|
797
|
-
var toolName = target.getAttribute('data-tool-call');
|
|
798
|
-
var argsAttr = target.getAttribute('data-tool-args');
|
|
799
|
-
var args = {};
|
|
800
|
-
|
|
801
|
-
try {
|
|
802
|
-
if (argsAttr) {
|
|
803
|
-
args = JSON.parse(argsAttr);
|
|
804
|
-
}
|
|
805
|
-
} catch (parseErr) {
|
|
806
|
-
console.error('[frontmcp] Failed to parse data-tool-args:', parseErr);
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
log('data-tool-call clicked: ' + toolName);
|
|
810
|
-
|
|
811
|
-
// Show loading state - save original content first
|
|
812
|
-
var originalContent = target.innerHTML;
|
|
813
|
-
var originalDisabled = target.disabled;
|
|
814
|
-
target.disabled = true;
|
|
815
|
-
target.classList.add('opacity-50', 'cursor-not-allowed');
|
|
816
|
-
|
|
817
|
-
// Add spinner for buttons
|
|
818
|
-
var spinner = '<svg class="animate-spin -ml-1 mr-2 h-4 w-4 inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>';
|
|
819
|
-
if (target.tagName === 'BUTTON') {
|
|
820
|
-
target.innerHTML = spinner + 'Loading...';
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
// Helper to reset button state
|
|
824
|
-
function resetButton() {
|
|
825
|
-
target.innerHTML = originalContent;
|
|
826
|
-
target.disabled = originalDisabled;
|
|
827
|
-
target.classList.remove('opacity-50', 'cursor-not-allowed');
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
// Determine how to call the tool
|
|
831
|
-
var toolCallPromise;
|
|
832
|
-
|
|
833
|
-
// Priority 1: Direct OpenAI SDK call (bypasses adapter abstraction)
|
|
834
|
-
if (typeof window !== 'undefined' && window.openai && typeof window.openai.callTool === 'function') {
|
|
835
|
-
log('Using OpenAI SDK directly for tool call');
|
|
836
|
-
toolCallPromise = window.openai.callTool(toolName, args);
|
|
837
|
-
}
|
|
838
|
-
// Priority 2: Use adapter (if it supports tool calls)
|
|
839
|
-
else if (self.hasCapability('canCallTools')) {
|
|
840
|
-
log('Using adapter for tool call');
|
|
841
|
-
toolCallPromise = self.callTool(toolName, args);
|
|
842
|
-
}
|
|
843
|
-
// No tool call capability
|
|
844
|
-
else {
|
|
845
|
-
console.error('[frontmcp] Tool calls not supported on this platform (' + self.adapterId + ')');
|
|
846
|
-
resetButton();
|
|
847
|
-
target.dispatchEvent(new CustomEvent('tool:error', {
|
|
848
|
-
detail: { name: toolName, args: args, error: 'Tool calls not supported on this platform' },
|
|
849
|
-
bubbles: true
|
|
850
|
-
}));
|
|
851
|
-
e.preventDefault();
|
|
852
|
-
return;
|
|
853
|
-
}
|
|
854
|
-
|
|
855
|
-
// Handle the tool call result
|
|
856
|
-
toolCallPromise.then(function(result) {
|
|
857
|
-
log('Tool call succeeded: ' + toolName);
|
|
858
|
-
resetButton();
|
|
859
|
-
|
|
860
|
-
// Update bridge state to trigger widget re-render
|
|
861
|
-
// React isn't hydrated in OpenAI iframe, so useState doesn't work
|
|
862
|
-
// Instead, we use the bridge's reactive state system
|
|
863
|
-
if (result && window.__frontmcp && window.__frontmcp.bridge && typeof window.__frontmcp.bridge.setWidgetState === 'function') {
|
|
864
|
-
var newData = result.structuredContent || result;
|
|
865
|
-
log('Updating bridge state with new data');
|
|
866
|
-
window.__frontmcp.bridge.setWidgetState(newData);
|
|
867
|
-
}
|
|
868
|
-
|
|
869
|
-
// Dispatch success event
|
|
870
|
-
target.dispatchEvent(new CustomEvent('tool:success', {
|
|
871
|
-
detail: { name: toolName, args: args, result: result },
|
|
872
|
-
bubbles: true
|
|
873
|
-
}));
|
|
874
|
-
}).catch(function(err) {
|
|
875
|
-
console.error('[frontmcp] Tool call failed: ' + toolName, err);
|
|
876
|
-
resetButton();
|
|
877
|
-
// Dispatch error event
|
|
878
|
-
target.dispatchEvent(new CustomEvent('tool:error', {
|
|
879
|
-
detail: { name: toolName, args: args, error: err.message || err },
|
|
880
|
-
bubbles: true
|
|
881
|
-
}));
|
|
882
|
-
});
|
|
883
|
-
|
|
884
|
-
// Prevent default behavior (e.g., form submission)
|
|
885
|
-
e.preventDefault();
|
|
886
|
-
return;
|
|
887
|
-
}
|
|
888
|
-
target = target.parentElement;
|
|
889
|
-
}
|
|
890
|
-
}, true); // Use capture phase to handle before React handlers
|
|
891
|
-
};
|
|
892
|
-
`.trim();
|
|
893
|
-
}
|
|
894
|
-
/**
|
|
895
|
-
* Simple JS minification (removes extra whitespace and newlines).
|
|
896
|
-
*/
|
|
897
|
-
function minifyJS(code) {
|
|
898
|
-
return code
|
|
899
|
-
.replace(/\/\*[\s\S]*?\*\//g, '') // Remove block comments
|
|
900
|
-
.replace(/\/\/.*$/gm, '') // Remove line comments
|
|
901
|
-
.replace(/\s+/g, ' ') // Collapse whitespace
|
|
902
|
-
.replace(/\s*([{};,:()\[\]])\s*/g, '$1') // Remove space around punctuation
|
|
903
|
-
.replace(/;\}/g, '}') // Remove trailing semicolons before }
|
|
904
|
-
.trim();
|
|
905
|
-
}
|
|
906
|
-
/**
|
|
907
|
-
* Generate platform-specific bundle IIFE.
|
|
908
|
-
*
|
|
909
|
-
* @example ChatGPT-specific bundle
|
|
910
|
-
* ```typescript
|
|
911
|
-
* const script = generatePlatformBundle('chatgpt');
|
|
912
|
-
* ```
|
|
913
|
-
*/
|
|
914
|
-
function generatePlatformBundle(platform, options = {}) {
|
|
915
|
-
const platformAdapters = {
|
|
916
|
-
chatgpt: ['openai', 'generic'],
|
|
917
|
-
claude: ['claude', 'generic'],
|
|
918
|
-
gemini: ['gemini', 'generic'],
|
|
919
|
-
universal: ['openai', 'ext-apps', 'claude', 'gemini', 'generic'],
|
|
920
|
-
};
|
|
921
|
-
return generateBridgeIIFE({
|
|
922
|
-
...options,
|
|
923
|
-
adapters: platformAdapters[platform],
|
|
924
|
-
});
|
|
925
|
-
}
|
|
926
|
-
/**
|
|
927
|
-
* Pre-generated universal bridge script (includes all adapters).
|
|
928
|
-
* Use this for the simplest integration.
|
|
929
|
-
*/
|
|
930
|
-
exports.UNIVERSAL_BRIDGE_SCRIPT = generateBridgeIIFE();
|
|
931
|
-
/**
|
|
932
|
-
* Pre-generated bridge scripts wrapped in script tags.
|
|
933
|
-
*/
|
|
934
|
-
exports.BRIDGE_SCRIPT_TAGS = {
|
|
935
|
-
universal: `<script>${exports.UNIVERSAL_BRIDGE_SCRIPT}</script>`,
|
|
936
|
-
chatgpt: `<script>${generatePlatformBundle('chatgpt')}</script>`,
|
|
937
|
-
claude: `<script>${generatePlatformBundle('claude')}</script>`,
|
|
938
|
-
gemini: `<script>${generatePlatformBundle('gemini')}</script>`,
|
|
939
|
-
};
|
|
940
|
-
//# sourceMappingURL=iife-generator.js.map
|