@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,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Renderer Runtime
|
|
3
|
-
*
|
|
4
|
-
* Client-side runtime that manages renderer adapters and handles
|
|
5
|
-
* communication with the FrontMCP Bridge.
|
|
6
|
-
*
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
import type { UIType, WidgetManifest } from '../types/ui-runtime';
|
|
10
|
-
import type { RenderContext, RenderResult } from './adapters/types';
|
|
11
|
-
/**
|
|
12
|
-
* Runtime configuration.
|
|
13
|
-
*/
|
|
14
|
-
export interface RendererRuntimeConfig {
|
|
15
|
-
/** The manifest embedded in the page */
|
|
16
|
-
manifest?: Partial<WidgetManifest>;
|
|
17
|
-
/** Initial tool input */
|
|
18
|
-
input?: Record<string, unknown>;
|
|
19
|
-
/** Initial tool output */
|
|
20
|
-
output?: unknown;
|
|
21
|
-
/** Initial structured content */
|
|
22
|
-
structuredContent?: unknown;
|
|
23
|
-
/** Tool name */
|
|
24
|
-
toolName?: string;
|
|
25
|
-
/** Enable debug logging */
|
|
26
|
-
debug?: boolean;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Renderer Runtime.
|
|
30
|
-
*
|
|
31
|
-
* Client-side runtime that:
|
|
32
|
-
* - Reads manifest from the page
|
|
33
|
-
* - Lazy-loads the appropriate renderer adapter
|
|
34
|
-
* - Handles tool output updates from the Bridge
|
|
35
|
-
* - Re-renders when data changes
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* // Bootstrap from manifest in page
|
|
40
|
-
* const runtime = new RendererRuntime();
|
|
41
|
-
* await runtime.init();
|
|
42
|
-
*
|
|
43
|
-
* // Listen for updates
|
|
44
|
-
* runtime.onUpdate((context) => {
|
|
45
|
-
* console.log('Tool output updated:', context.output);
|
|
46
|
-
* });
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare class RendererRuntime {
|
|
50
|
-
private config;
|
|
51
|
-
private adapters;
|
|
52
|
-
private state;
|
|
53
|
-
private updateCallbacks;
|
|
54
|
-
private bridgeUnsubscribe;
|
|
55
|
-
constructor(config?: RendererRuntimeConfig);
|
|
56
|
-
/**
|
|
57
|
-
* Initialize the runtime.
|
|
58
|
-
* Reads manifest, sets up Bridge listeners, and prepares adapters.
|
|
59
|
-
*/
|
|
60
|
-
init(): Promise<void>;
|
|
61
|
-
/**
|
|
62
|
-
* Get the current render context.
|
|
63
|
-
*/
|
|
64
|
-
get context(): RenderContext;
|
|
65
|
-
/**
|
|
66
|
-
* Get the manifest.
|
|
67
|
-
*/
|
|
68
|
-
get manifest(): Partial<WidgetManifest> | undefined;
|
|
69
|
-
/**
|
|
70
|
-
* Get the resolved UI type.
|
|
71
|
-
*/
|
|
72
|
-
get uiType(): UIType;
|
|
73
|
-
/**
|
|
74
|
-
* Render content to a target element.
|
|
75
|
-
*
|
|
76
|
-
* @param target - Element to render into
|
|
77
|
-
* @param content - Content to render (optional, uses existing innerHTML)
|
|
78
|
-
* @param options - Render options
|
|
79
|
-
*/
|
|
80
|
-
render(target: HTMLElement, content?: string, options?: {
|
|
81
|
-
hydrate?: boolean;
|
|
82
|
-
}): Promise<RenderResult>;
|
|
83
|
-
/**
|
|
84
|
-
* Update the render context and re-render if needed.
|
|
85
|
-
*/
|
|
86
|
-
updateContext(updates: Partial<RenderContext>): Promise<void>;
|
|
87
|
-
/**
|
|
88
|
-
* Subscribe to context updates.
|
|
89
|
-
*/
|
|
90
|
-
onUpdate(callback: (context: RenderContext) => void): () => void;
|
|
91
|
-
/**
|
|
92
|
-
* Clean up resources.
|
|
93
|
-
*/
|
|
94
|
-
destroy(): void;
|
|
95
|
-
/**
|
|
96
|
-
* Read manifest from page.
|
|
97
|
-
*/
|
|
98
|
-
private readManifest;
|
|
99
|
-
/**
|
|
100
|
-
* Read initial data from page globals.
|
|
101
|
-
*/
|
|
102
|
-
private readPageGlobals;
|
|
103
|
-
/**
|
|
104
|
-
* Set up Bridge event listeners.
|
|
105
|
-
*/
|
|
106
|
-
private setupBridgeListeners;
|
|
107
|
-
/**
|
|
108
|
-
* Get or load an adapter for a UI type.
|
|
109
|
-
*/
|
|
110
|
-
private getAdapter;
|
|
111
|
-
/**
|
|
112
|
-
* Auto-detect UI type from content.
|
|
113
|
-
*/
|
|
114
|
-
private detectType;
|
|
115
|
-
/**
|
|
116
|
-
* Log message if debug enabled.
|
|
117
|
-
*/
|
|
118
|
-
private log;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Create and initialize a renderer runtime.
|
|
122
|
-
*/
|
|
123
|
-
export declare function createRendererRuntime(config?: RendererRuntimeConfig): Promise<RendererRuntime>;
|
|
124
|
-
/**
|
|
125
|
-
* Bootstrap the renderer runtime from page manifest.
|
|
126
|
-
* This is the main entry point for the IIFE bootstrap script.
|
|
127
|
-
*/
|
|
128
|
-
export declare function bootstrapRendererRuntime(): Promise<RendererRuntime | null>;
|
|
129
|
-
/**
|
|
130
|
-
* Generate the bootstrap IIFE script for embedding in HTML.
|
|
131
|
-
*/
|
|
132
|
-
export declare function generateBootstrapScript(): string;
|
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Renderer Runtime
|
|
4
|
-
*
|
|
5
|
-
* Client-side runtime that manages renderer adapters and handles
|
|
6
|
-
* communication with the FrontMCP Bridge.
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.RendererRuntime = void 0;
|
|
12
|
-
exports.createRendererRuntime = createRendererRuntime;
|
|
13
|
-
exports.bootstrapRendererRuntime = bootstrapRendererRuntime;
|
|
14
|
-
exports.generateBootstrapScript = generateBootstrapScript;
|
|
15
|
-
const adapters_1 = require("./adapters");
|
|
16
|
-
/**
|
|
17
|
-
* Renderer Runtime.
|
|
18
|
-
*
|
|
19
|
-
* Client-side runtime that:
|
|
20
|
-
* - Reads manifest from the page
|
|
21
|
-
* - Lazy-loads the appropriate renderer adapter
|
|
22
|
-
* - Handles tool output updates from the Bridge
|
|
23
|
-
* - Re-renders when data changes
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // Bootstrap from manifest in page
|
|
28
|
-
* const runtime = new RendererRuntime();
|
|
29
|
-
* await runtime.init();
|
|
30
|
-
*
|
|
31
|
-
* // Listen for updates
|
|
32
|
-
* runtime.onUpdate((context) => {
|
|
33
|
-
* console.log('Tool output updated:', context.output);
|
|
34
|
-
* });
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
class RendererRuntime {
|
|
38
|
-
config;
|
|
39
|
-
adapters = new Map();
|
|
40
|
-
state;
|
|
41
|
-
updateCallbacks = [];
|
|
42
|
-
bridgeUnsubscribe = null;
|
|
43
|
-
constructor(config = {}) {
|
|
44
|
-
this.config = config;
|
|
45
|
-
this.state = {
|
|
46
|
-
initialized: false,
|
|
47
|
-
currentAdapter: null,
|
|
48
|
-
currentTarget: null,
|
|
49
|
-
context: {
|
|
50
|
-
input: config.input ?? {},
|
|
51
|
-
output: config.output,
|
|
52
|
-
structuredContent: config.structuredContent,
|
|
53
|
-
toolName: config.toolName ?? 'unknown',
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Initialize the runtime.
|
|
59
|
-
* Reads manifest, sets up Bridge listeners, and prepares adapters.
|
|
60
|
-
*/
|
|
61
|
-
async init() {
|
|
62
|
-
if (this.state.initialized) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
this.log('Initializing RendererRuntime');
|
|
66
|
-
// Read manifest from page
|
|
67
|
-
this.readManifest();
|
|
68
|
-
// Read initial data from page globals
|
|
69
|
-
this.readPageGlobals();
|
|
70
|
-
// Set up Bridge listeners
|
|
71
|
-
this.setupBridgeListeners();
|
|
72
|
-
this.state.initialized = true;
|
|
73
|
-
this.log('RendererRuntime initialized', this.config.manifest);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Get the current render context.
|
|
77
|
-
*/
|
|
78
|
-
get context() {
|
|
79
|
-
return { ...this.state.context };
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Get the manifest.
|
|
83
|
-
*/
|
|
84
|
-
get manifest() {
|
|
85
|
-
return this.config.manifest;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Get the resolved UI type.
|
|
89
|
-
*/
|
|
90
|
-
get uiType() {
|
|
91
|
-
return this.config.manifest?.uiType ?? 'auto';
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Render content to a target element.
|
|
95
|
-
*
|
|
96
|
-
* @param target - Element to render into
|
|
97
|
-
* @param content - Content to render (optional, uses existing innerHTML)
|
|
98
|
-
* @param options - Render options
|
|
99
|
-
*/
|
|
100
|
-
async render(target, content, options) {
|
|
101
|
-
const type = this.uiType;
|
|
102
|
-
const contentToRender = content ?? target.innerHTML;
|
|
103
|
-
this.log('Rendering', { type, hasContent: !!content, hydrate: options?.hydrate });
|
|
104
|
-
// Get or load adapter
|
|
105
|
-
const adapter = await this.getAdapter(type, contentToRender);
|
|
106
|
-
if (!adapter) {
|
|
107
|
-
return {
|
|
108
|
-
success: false,
|
|
109
|
-
error: `No adapter available for UI type: ${type}`,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
this.state.currentAdapter = adapter;
|
|
113
|
-
this.state.currentTarget = target;
|
|
114
|
-
// Hydrate or render
|
|
115
|
-
if (options?.hydrate && adapter.hydrate) {
|
|
116
|
-
return adapter.hydrate(target, this.state.context);
|
|
117
|
-
}
|
|
118
|
-
if (adapter.renderToDOM) {
|
|
119
|
-
return adapter.renderToDOM(contentToRender, target, this.state.context);
|
|
120
|
-
}
|
|
121
|
-
// Fallback to string render + innerHTML
|
|
122
|
-
const html = await adapter.render(contentToRender, this.state.context);
|
|
123
|
-
target.innerHTML = html;
|
|
124
|
-
return { success: true, html };
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Update the render context and re-render if needed.
|
|
128
|
-
*/
|
|
129
|
-
async updateContext(updates) {
|
|
130
|
-
this.state.context = {
|
|
131
|
-
...this.state.context,
|
|
132
|
-
...updates,
|
|
133
|
-
};
|
|
134
|
-
this.log('Context updated', updates);
|
|
135
|
-
// Notify callbacks
|
|
136
|
-
for (const callback of this.updateCallbacks) {
|
|
137
|
-
try {
|
|
138
|
-
callback(this.state.context);
|
|
139
|
-
}
|
|
140
|
-
catch (error) {
|
|
141
|
-
console.error('[FrontMCP] Update callback error:', error);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Re-render if we have a current target
|
|
145
|
-
if (this.state.currentTarget && this.state.currentAdapter) {
|
|
146
|
-
if (this.state.currentAdapter.update) {
|
|
147
|
-
await this.state.currentAdapter.update(this.state.currentTarget, this.state.context);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Subscribe to context updates.
|
|
153
|
-
*/
|
|
154
|
-
onUpdate(callback) {
|
|
155
|
-
this.updateCallbacks.push(callback);
|
|
156
|
-
return () => {
|
|
157
|
-
const index = this.updateCallbacks.indexOf(callback);
|
|
158
|
-
if (index > -1) {
|
|
159
|
-
this.updateCallbacks.splice(index, 1);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Clean up resources.
|
|
165
|
-
*/
|
|
166
|
-
destroy() {
|
|
167
|
-
// Unsubscribe from Bridge
|
|
168
|
-
if (this.bridgeUnsubscribe) {
|
|
169
|
-
this.bridgeUnsubscribe();
|
|
170
|
-
this.bridgeUnsubscribe = null;
|
|
171
|
-
}
|
|
172
|
-
// Destroy current adapter
|
|
173
|
-
if (this.state.currentAdapter && this.state.currentTarget) {
|
|
174
|
-
this.state.currentAdapter.destroy?.(this.state.currentTarget);
|
|
175
|
-
}
|
|
176
|
-
// Clear state
|
|
177
|
-
this.state.initialized = false;
|
|
178
|
-
this.state.currentAdapter = null;
|
|
179
|
-
this.state.currentTarget = null;
|
|
180
|
-
this.updateCallbacks = [];
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Read manifest from page.
|
|
184
|
-
*/
|
|
185
|
-
readManifest() {
|
|
186
|
-
// Check for manifest in script tag
|
|
187
|
-
const manifestEl = document.getElementById('frontmcp-widget-manifest');
|
|
188
|
-
if (manifestEl) {
|
|
189
|
-
try {
|
|
190
|
-
const manifest = JSON.parse(manifestEl.textContent ?? '{}');
|
|
191
|
-
this.config.manifest = manifest;
|
|
192
|
-
this.log('Loaded manifest from page', manifest);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
console.warn('[FrontMCP] Failed to parse manifest from page');
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// Check for __mcp_manifest script tag (legacy)
|
|
200
|
-
const legacyManifestEl = document.getElementById('__mcp_manifest');
|
|
201
|
-
if (legacyManifestEl) {
|
|
202
|
-
try {
|
|
203
|
-
const manifest = JSON.parse(legacyManifestEl.textContent ?? '{}');
|
|
204
|
-
this.config.manifest = manifest;
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
catch {
|
|
208
|
-
console.warn('[FrontMCP] Failed to parse legacy manifest from page');
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
// Check window global
|
|
212
|
-
const win = window;
|
|
213
|
-
if (win.__frontmcp?.widget?.manifest) {
|
|
214
|
-
this.config.manifest = win.__frontmcp.widget.manifest;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Read initial data from page globals.
|
|
219
|
-
*/
|
|
220
|
-
readPageGlobals() {
|
|
221
|
-
const win = window;
|
|
222
|
-
// Tool name
|
|
223
|
-
if (win.__mcpToolName) {
|
|
224
|
-
this.state.context.toolName = win.__mcpToolName;
|
|
225
|
-
}
|
|
226
|
-
else if (this.config.manifest?.tool) {
|
|
227
|
-
this.state.context.toolName = this.config.manifest.tool;
|
|
228
|
-
}
|
|
229
|
-
// Input
|
|
230
|
-
if (win.__mcpToolInput) {
|
|
231
|
-
this.state.context.input = win.__mcpToolInput;
|
|
232
|
-
}
|
|
233
|
-
else if (win.openai?.toolInput) {
|
|
234
|
-
this.state.context.input = win.openai.toolInput;
|
|
235
|
-
}
|
|
236
|
-
// Output
|
|
237
|
-
if (win.__mcpToolOutput !== undefined) {
|
|
238
|
-
this.state.context.output = win.__mcpToolOutput;
|
|
239
|
-
}
|
|
240
|
-
else if (win.openai?.toolOutput !== undefined) {
|
|
241
|
-
this.state.context.output = win.openai.toolOutput;
|
|
242
|
-
}
|
|
243
|
-
// Structured content
|
|
244
|
-
if (win.__mcpStructuredContent !== undefined) {
|
|
245
|
-
this.state.context.structuredContent = win.__mcpStructuredContent;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Set up Bridge event listeners.
|
|
250
|
-
*/
|
|
251
|
-
setupBridgeListeners() {
|
|
252
|
-
const win = window;
|
|
253
|
-
// Listen for tool result updates via Bridge
|
|
254
|
-
if (win.mcpBridge?.onToolResult) {
|
|
255
|
-
this.bridgeUnsubscribe = win.mcpBridge.onToolResult((result) => {
|
|
256
|
-
this.updateContext({ output: result });
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
// Also listen for custom events
|
|
260
|
-
window.addEventListener('frontmcp:toolOutput', ((event) => {
|
|
261
|
-
this.updateContext({ output: event.detail });
|
|
262
|
-
}));
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Get or load an adapter for a UI type.
|
|
266
|
-
*/
|
|
267
|
-
async getAdapter(type, content) {
|
|
268
|
-
// Check cache
|
|
269
|
-
if (this.adapters.has(type)) {
|
|
270
|
-
return this.adapters.get(type);
|
|
271
|
-
}
|
|
272
|
-
// Auto-detect type from content
|
|
273
|
-
let resolvedType = type;
|
|
274
|
-
if (type === 'auto' && content) {
|
|
275
|
-
resolvedType = this.detectType(content);
|
|
276
|
-
this.log('Auto-detected type:', resolvedType);
|
|
277
|
-
}
|
|
278
|
-
// Check cache again with resolved type
|
|
279
|
-
if (this.adapters.has(resolvedType)) {
|
|
280
|
-
return this.adapters.get(resolvedType);
|
|
281
|
-
}
|
|
282
|
-
// Load adapter
|
|
283
|
-
const adapter = await (0, adapters_1.loadAdapter)(resolvedType);
|
|
284
|
-
if (adapter) {
|
|
285
|
-
this.adapters.set(resolvedType, adapter);
|
|
286
|
-
if (resolvedType !== type) {
|
|
287
|
-
this.adapters.set(type, adapter); // Cache under original type too
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return adapter;
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Auto-detect UI type from content.
|
|
294
|
-
*/
|
|
295
|
-
detectType(content) {
|
|
296
|
-
// Check for React patterns
|
|
297
|
-
if (content.includes('React.createElement') ||
|
|
298
|
-
content.includes('jsx(') ||
|
|
299
|
-
/function\s+\w+\s*\([^)]*\)\s*\{[\s\S]*return\s*[\s\S]*</.test(content)) {
|
|
300
|
-
return 'react';
|
|
301
|
-
}
|
|
302
|
-
// Check for MDX patterns
|
|
303
|
-
if (/^---[\s\S]*?---/.test(content) ||
|
|
304
|
-
/<[A-Z][a-zA-Z0-9]*[\s/>]/.test(content) ||
|
|
305
|
-
/^import\s+/m.test(content) ||
|
|
306
|
-
/^export\s+/m.test(content)) {
|
|
307
|
-
return 'mdx';
|
|
308
|
-
}
|
|
309
|
-
// Default to HTML
|
|
310
|
-
return 'html';
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Log message if debug enabled.
|
|
314
|
-
*/
|
|
315
|
-
log(message, ...args) {
|
|
316
|
-
if (this.config.debug) {
|
|
317
|
-
console.log(`[FrontMCP Runtime] ${message}`, ...args);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
exports.RendererRuntime = RendererRuntime;
|
|
322
|
-
/**
|
|
323
|
-
* Create and initialize a renderer runtime.
|
|
324
|
-
*/
|
|
325
|
-
async function createRendererRuntime(config) {
|
|
326
|
-
const runtime = new RendererRuntime(config);
|
|
327
|
-
await runtime.init();
|
|
328
|
-
return runtime;
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Bootstrap the renderer runtime from page manifest.
|
|
332
|
-
* This is the main entry point for the IIFE bootstrap script.
|
|
333
|
-
*/
|
|
334
|
-
async function bootstrapRendererRuntime() {
|
|
335
|
-
// Wait for DOM to be ready
|
|
336
|
-
if (document.readyState === 'loading') {
|
|
337
|
-
await new Promise((resolve) => {
|
|
338
|
-
document.addEventListener('DOMContentLoaded', () => resolve());
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
try {
|
|
342
|
-
const runtime = await createRendererRuntime({ debug: false });
|
|
343
|
-
// Find and render the main content element
|
|
344
|
-
const contentEl = document.querySelector('[data-frontmcp-widget]') ||
|
|
345
|
-
document.querySelector('[data-mcp-widget]') ||
|
|
346
|
-
document.body.firstElementChild;
|
|
347
|
-
if (contentEl instanceof HTMLElement) {
|
|
348
|
-
await runtime.render(contentEl, undefined, { hydrate: true });
|
|
349
|
-
}
|
|
350
|
-
// Expose runtime globally
|
|
351
|
-
const win = window;
|
|
352
|
-
win.__frontmcp = win.__frontmcp ?? {};
|
|
353
|
-
win.__frontmcp.runtime = runtime;
|
|
354
|
-
return runtime;
|
|
355
|
-
}
|
|
356
|
-
catch (error) {
|
|
357
|
-
console.error('[FrontMCP] Failed to bootstrap renderer runtime:', error);
|
|
358
|
-
return null;
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Generate the bootstrap IIFE script for embedding in HTML.
|
|
363
|
-
*/
|
|
364
|
-
function generateBootstrapScript() {
|
|
365
|
-
return `
|
|
366
|
-
<script>
|
|
367
|
-
(function() {
|
|
368
|
-
'use strict';
|
|
369
|
-
|
|
370
|
-
// Wait for runtime to load
|
|
371
|
-
function bootstrap() {
|
|
372
|
-
if (window.__frontmcp && window.__frontmcp.bootstrapRuntime) {
|
|
373
|
-
window.__frontmcp.bootstrapRuntime();
|
|
374
|
-
} else {
|
|
375
|
-
// Retry after short delay
|
|
376
|
-
setTimeout(bootstrap, 50);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
if (document.readyState === 'loading') {
|
|
381
|
-
document.addEventListener('DOMContentLoaded', bootstrap);
|
|
382
|
-
} else {
|
|
383
|
-
bootstrap();
|
|
384
|
-
}
|
|
385
|
-
})();
|
|
386
|
-
</script>
|
|
387
|
-
`.trim();
|
|
388
|
-
}
|
|
389
|
-
//# sourceMappingURL=renderer-runtime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-runtime.js","sourceRoot":"","sources":["../../../src/runtime/renderer-runtime.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAgZH,sDAIC;AAMD,4DAiCC;AAKD,0DAwBC;AApdD,yCAAyC;AA8BzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAe;IAClB,MAAM,CAAwB;IAC9B,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,KAAK,CAAe;IACpB,eAAe,GAA4C,EAAE,CAAC;IAC9D,iBAAiB,GAAwB,IAAI,CAAC;IAEtD,YAAY,SAAgC,EAAE;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG;YACX,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE;gBACP,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAEzC,0BAA0B;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,sCAAsC;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,0BAA0B;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,MAAmB,EAAE,OAAgB,EAAE,OAA+B;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,MAAM,eAAe,GAAG,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC;QAEpD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAElF,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qCAAqC,IAAI,EAAE;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAElC,oBAAoB;QACpB,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,wCAAwC;QACxC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,OAA+B;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG;YACnB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;YACrB,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAErC,mBAAmB;QACnB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAA0C;QACjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,0BAA0B;QAC1B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC;QAED,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,mCAAmC;QACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACvE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAChC,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,GAAG,GAAG,MAAyF,CAAC;QACtG,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,MAAM,GAAG,GAAG,MASX,CAAC;QAEF,YAAY;QACZ,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1D,CAAC;QAED,QAAQ;QACR,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC;QAChD,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QAClD,CAAC;QAED,SAAS;QACT,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC;QAClD,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;QACpD,CAAC;QAED,qBAAqB;QACrB,IAAI,GAAG,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,sBAAsB,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,MAAM,GAAG,GAAG,MAIX,CAAC;QAEF,4CAA4C;QAC5C,IAAI,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7D,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,KAAkB,EAAE,EAAE;YACrE,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAkB,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,OAAgB;QACrD,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAClC,CAAC;QAED,gCAAgC;QAChC,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC;YAC/B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAW,EAAC,YAAY,CAAC,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,gCAAgC;YACpE,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,OAAe;QAChC,2BAA2B;QAC3B,IACE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxB,yDAAyD,CAAC,IAAI,CAAC,OAAO,CAAC,EACvE,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,yBAAyB;QACzB,IACE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/B,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kBAAkB;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,OAAe,EAAE,GAAG,IAAe;QAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AApVD,0CAoVC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,MAA8B;IACxE,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,wBAAwB;IAC5C,2BAA2B;IAC3B,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9D,2CAA2C;QAC3C,MAAM,SAAS,GACb,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;YAChD,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAElC,IAAI,SAAS,YAAY,WAAW,EAAE,CAAC;YACrC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,MAEX,CAAC;QACF,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACtC,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAEjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBR,CAAC,IAAI,EAAE,CAAC;AACT,CAAC","sourcesContent":["/**\n * Renderer Runtime\n *\n * Client-side runtime that manages renderer adapters and handles\n * communication with the FrontMCP Bridge.\n *\n * @packageDocumentation\n */\n\nimport type { UIType, WidgetManifest } from '../types/ui-runtime';\nimport type { RendererAdapter, RenderContext, RenderResult } from './adapters/types';\nimport { loadAdapter } from './adapters';\n\n/**\n * Runtime configuration.\n */\nexport interface RendererRuntimeConfig {\n /** The manifest embedded in the page */\n manifest?: Partial<WidgetManifest>;\n /** Initial tool input */\n input?: Record<string, unknown>;\n /** Initial tool output */\n output?: unknown;\n /** Initial structured content */\n structuredContent?: unknown;\n /** Tool name */\n toolName?: string;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Runtime state.\n */\ninterface RuntimeState {\n initialized: boolean;\n currentAdapter: RendererAdapter | null;\n currentTarget: HTMLElement | null;\n context: RenderContext;\n}\n\n/**\n * Renderer Runtime.\n *\n * Client-side runtime that:\n * - Reads manifest from the page\n * - Lazy-loads the appropriate renderer adapter\n * - Handles tool output updates from the Bridge\n * - Re-renders when data changes\n *\n * @example\n * ```typescript\n * // Bootstrap from manifest in page\n * const runtime = new RendererRuntime();\n * await runtime.init();\n *\n * // Listen for updates\n * runtime.onUpdate((context) => {\n * console.log('Tool output updated:', context.output);\n * });\n * ```\n */\nexport class RendererRuntime {\n private config: RendererRuntimeConfig;\n private adapters = new Map<UIType, RendererAdapter>();\n private state: RuntimeState;\n private updateCallbacks: Array<(context: RenderContext) => void> = [];\n private bridgeUnsubscribe: (() => void) | null = null;\n\n constructor(config: RendererRuntimeConfig = {}) {\n this.config = config;\n this.state = {\n initialized: false,\n currentAdapter: null,\n currentTarget: null,\n context: {\n input: config.input ?? {},\n output: config.output,\n structuredContent: config.structuredContent,\n toolName: config.toolName ?? 'unknown',\n },\n };\n }\n\n /**\n * Initialize the runtime.\n * Reads manifest, sets up Bridge listeners, and prepares adapters.\n */\n async init(): Promise<void> {\n if (this.state.initialized) {\n return;\n }\n\n this.log('Initializing RendererRuntime');\n\n // Read manifest from page\n this.readManifest();\n\n // Read initial data from page globals\n this.readPageGlobals();\n\n // Set up Bridge listeners\n this.setupBridgeListeners();\n\n this.state.initialized = true;\n this.log('RendererRuntime initialized', this.config.manifest);\n }\n\n /**\n * Get the current render context.\n */\n get context(): RenderContext {\n return { ...this.state.context };\n }\n\n /**\n * Get the manifest.\n */\n get manifest(): Partial<WidgetManifest> | undefined {\n return this.config.manifest;\n }\n\n /**\n * Get the resolved UI type.\n */\n get uiType(): UIType {\n return this.config.manifest?.uiType ?? 'auto';\n }\n\n /**\n * Render content to a target element.\n *\n * @param target - Element to render into\n * @param content - Content to render (optional, uses existing innerHTML)\n * @param options - Render options\n */\n async render(target: HTMLElement, content?: string, options?: { hydrate?: boolean }): Promise<RenderResult> {\n const type = this.uiType;\n const contentToRender = content ?? target.innerHTML;\n\n this.log('Rendering', { type, hasContent: !!content, hydrate: options?.hydrate });\n\n // Get or load adapter\n const adapter = await this.getAdapter(type, contentToRender);\n\n if (!adapter) {\n return {\n success: false,\n error: `No adapter available for UI type: ${type}`,\n };\n }\n\n this.state.currentAdapter = adapter;\n this.state.currentTarget = target;\n\n // Hydrate or render\n if (options?.hydrate && adapter.hydrate) {\n return adapter.hydrate(target, this.state.context);\n }\n\n if (adapter.renderToDOM) {\n return adapter.renderToDOM(contentToRender, target, this.state.context);\n }\n\n // Fallback to string render + innerHTML\n const html = await adapter.render(contentToRender, this.state.context);\n target.innerHTML = html;\n return { success: true, html };\n }\n\n /**\n * Update the render context and re-render if needed.\n */\n async updateContext(updates: Partial<RenderContext>): Promise<void> {\n this.state.context = {\n ...this.state.context,\n ...updates,\n };\n\n this.log('Context updated', updates);\n\n // Notify callbacks\n for (const callback of this.updateCallbacks) {\n try {\n callback(this.state.context);\n } catch (error) {\n console.error('[FrontMCP] Update callback error:', error);\n }\n }\n\n // Re-render if we have a current target\n if (this.state.currentTarget && this.state.currentAdapter) {\n if (this.state.currentAdapter.update) {\n await this.state.currentAdapter.update(this.state.currentTarget, this.state.context);\n }\n }\n }\n\n /**\n * Subscribe to context updates.\n */\n onUpdate(callback: (context: RenderContext) => void): () => void {\n this.updateCallbacks.push(callback);\n return () => {\n const index = this.updateCallbacks.indexOf(callback);\n if (index > -1) {\n this.updateCallbacks.splice(index, 1);\n }\n };\n }\n\n /**\n * Clean up resources.\n */\n destroy(): void {\n // Unsubscribe from Bridge\n if (this.bridgeUnsubscribe) {\n this.bridgeUnsubscribe();\n this.bridgeUnsubscribe = null;\n }\n\n // Destroy current adapter\n if (this.state.currentAdapter && this.state.currentTarget) {\n this.state.currentAdapter.destroy?.(this.state.currentTarget);\n }\n\n // Clear state\n this.state.initialized = false;\n this.state.currentAdapter = null;\n this.state.currentTarget = null;\n this.updateCallbacks = [];\n }\n\n /**\n * Read manifest from page.\n */\n private readManifest(): void {\n // Check for manifest in script tag\n const manifestEl = document.getElementById('frontmcp-widget-manifest');\n if (manifestEl) {\n try {\n const manifest = JSON.parse(manifestEl.textContent ?? '{}');\n this.config.manifest = manifest;\n this.log('Loaded manifest from page', manifest);\n return;\n } catch {\n console.warn('[FrontMCP] Failed to parse manifest from page');\n }\n }\n\n // Check for __mcp_manifest script tag (legacy)\n const legacyManifestEl = document.getElementById('__mcp_manifest');\n if (legacyManifestEl) {\n try {\n const manifest = JSON.parse(legacyManifestEl.textContent ?? '{}');\n this.config.manifest = manifest;\n return;\n } catch {\n console.warn('[FrontMCP] Failed to parse legacy manifest from page');\n }\n }\n\n // Check window global\n const win = window as unknown as { __frontmcp?: { widget?: { manifest?: Partial<WidgetManifest> } } };\n if (win.__frontmcp?.widget?.manifest) {\n this.config.manifest = win.__frontmcp.widget.manifest;\n }\n }\n\n /**\n * Read initial data from page globals.\n */\n private readPageGlobals(): void {\n const win = window as Window & {\n __mcpToolName?: string;\n __mcpToolInput?: Record<string, unknown>;\n __mcpToolOutput?: unknown;\n __mcpStructuredContent?: unknown;\n openai?: {\n toolInput?: Record<string, unknown>;\n toolOutput?: unknown;\n };\n };\n\n // Tool name\n if (win.__mcpToolName) {\n this.state.context.toolName = win.__mcpToolName;\n } else if (this.config.manifest?.tool) {\n this.state.context.toolName = this.config.manifest.tool;\n }\n\n // Input\n if (win.__mcpToolInput) {\n this.state.context.input = win.__mcpToolInput;\n } else if (win.openai?.toolInput) {\n this.state.context.input = win.openai.toolInput;\n }\n\n // Output\n if (win.__mcpToolOutput !== undefined) {\n this.state.context.output = win.__mcpToolOutput;\n } else if (win.openai?.toolOutput !== undefined) {\n this.state.context.output = win.openai.toolOutput;\n }\n\n // Structured content\n if (win.__mcpStructuredContent !== undefined) {\n this.state.context.structuredContent = win.__mcpStructuredContent;\n }\n }\n\n /**\n * Set up Bridge event listeners.\n */\n private setupBridgeListeners(): void {\n const win = window as Window & {\n mcpBridge?: {\n onToolResult?: (callback: (result: unknown) => void) => () => void;\n };\n };\n\n // Listen for tool result updates via Bridge\n if (win.mcpBridge?.onToolResult) {\n this.bridgeUnsubscribe = win.mcpBridge.onToolResult((result) => {\n this.updateContext({ output: result });\n });\n }\n\n // Also listen for custom events\n window.addEventListener('frontmcp:toolOutput', ((event: CustomEvent) => {\n this.updateContext({ output: event.detail });\n }) as EventListener);\n }\n\n /**\n * Get or load an adapter for a UI type.\n */\n private async getAdapter(type: UIType, content?: string): Promise<RendererAdapter | null> {\n // Check cache\n if (this.adapters.has(type)) {\n return this.adapters.get(type)!;\n }\n\n // Auto-detect type from content\n let resolvedType = type;\n if (type === 'auto' && content) {\n resolvedType = this.detectType(content);\n this.log('Auto-detected type:', resolvedType);\n }\n\n // Check cache again with resolved type\n if (this.adapters.has(resolvedType)) {\n return this.adapters.get(resolvedType)!;\n }\n\n // Load adapter\n const adapter = await loadAdapter(resolvedType);\n if (adapter) {\n this.adapters.set(resolvedType, adapter);\n if (resolvedType !== type) {\n this.adapters.set(type, adapter); // Cache under original type too\n }\n }\n\n return adapter;\n }\n\n /**\n * Auto-detect UI type from content.\n */\n private detectType(content: string): UIType {\n // Check for React patterns\n if (\n content.includes('React.createElement') ||\n content.includes('jsx(') ||\n /function\\s+\\w+\\s*\\([^)]*\\)\\s*\\{[\\s\\S]*return\\s*[\\s\\S]*</.test(content)\n ) {\n return 'react';\n }\n\n // Check for MDX patterns\n if (\n /^---[\\s\\S]*?---/.test(content) ||\n /<[A-Z][a-zA-Z0-9]*[\\s/>]/.test(content) ||\n /^import\\s+/m.test(content) ||\n /^export\\s+/m.test(content)\n ) {\n return 'mdx';\n }\n\n // Default to HTML\n return 'html';\n }\n\n /**\n * Log message if debug enabled.\n */\n private log(message: string, ...args: unknown[]): void {\n if (this.config.debug) {\n console.log(`[FrontMCP Runtime] ${message}`, ...args);\n }\n }\n}\n\n/**\n * Create and initialize a renderer runtime.\n */\nexport async function createRendererRuntime(config?: RendererRuntimeConfig): Promise<RendererRuntime> {\n const runtime = new RendererRuntime(config);\n await runtime.init();\n return runtime;\n}\n\n/**\n * Bootstrap the renderer runtime from page manifest.\n * This is the main entry point for the IIFE bootstrap script.\n */\nexport async function bootstrapRendererRuntime(): Promise<RendererRuntime | null> {\n // Wait for DOM to be ready\n if (document.readyState === 'loading') {\n await new Promise<void>((resolve) => {\n document.addEventListener('DOMContentLoaded', () => resolve());\n });\n }\n\n try {\n const runtime = await createRendererRuntime({ debug: false });\n\n // Find and render the main content element\n const contentEl =\n document.querySelector('[data-frontmcp-widget]') ||\n document.querySelector('[data-mcp-widget]') ||\n document.body.firstElementChild;\n\n if (contentEl instanceof HTMLElement) {\n await runtime.render(contentEl, undefined, { hydrate: true });\n }\n\n // Expose runtime globally\n const win = window as unknown as {\n __frontmcp?: { runtime?: RendererRuntime };\n };\n win.__frontmcp = win.__frontmcp ?? {};\n win.__frontmcp.runtime = runtime;\n\n return runtime;\n } catch (error) {\n console.error('[FrontMCP] Failed to bootstrap renderer runtime:', error);\n return null;\n }\n}\n\n/**\n * Generate the bootstrap IIFE script for embedding in HTML.\n */\nexport function generateBootstrapScript(): string {\n return `\n<script>\n(function() {\n 'use strict';\n\n // Wait for runtime to load\n function bootstrap() {\n if (window.__frontmcp && window.__frontmcp.bootstrapRuntime) {\n window.__frontmcp.bootstrapRuntime();\n } else {\n // Retry after short delay\n setTimeout(bootstrap, 50);\n }\n }\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', bootstrap);\n } else {\n bootstrap();\n }\n})();\n</script>\n`.trim();\n}\n"]}
|