@frontmcp/uipack 0.12.2 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/CLAUDE.md +56 -154
  2. package/README.md +367 -62
  3. package/adapters/base-template.d.ts +30 -0
  4. package/adapters/base-template.d.ts.map +1 -0
  5. package/adapters/cdn-info.d.ts +34 -0
  6. package/adapters/cdn-info.d.ts.map +1 -0
  7. package/adapters/constants.d.ts +18 -0
  8. package/adapters/constants.d.ts.map +1 -0
  9. package/adapters/content-detector.d.ts +19 -0
  10. package/adapters/content-detector.d.ts.map +1 -0
  11. package/adapters/content-renderers.d.ts +27 -0
  12. package/adapters/content-renderers.d.ts.map +1 -0
  13. package/adapters/index.d.ts +14 -7
  14. package/adapters/index.d.ts.map +1 -1
  15. package/adapters/index.js +2343 -426
  16. package/adapters/render-failure.d.ts +18 -0
  17. package/adapters/render-failure.d.ts.map +1 -0
  18. package/adapters/response-builder.d.ts +34 -104
  19. package/adapters/response-builder.d.ts.map +1 -1
  20. package/adapters/serving-mode.d.ts +28 -91
  21. package/adapters/serving-mode.d.ts.map +1 -1
  22. package/adapters/template-renderer.d.ts +50 -0
  23. package/adapters/template-renderer.d.ts.map +1 -0
  24. package/adapters/type-detector.d.ts +18 -0
  25. package/adapters/type-detector.d.ts.map +1 -0
  26. package/bridge-runtime/index.js +1 -1
  27. package/component/index.d.ts +14 -0
  28. package/component/index.d.ts.map +1 -0
  29. package/component/index.js +2043 -0
  30. package/component/loader.d.ts +36 -0
  31. package/component/loader.d.ts.map +1 -0
  32. package/component/renderer.d.ts +30 -0
  33. package/component/renderer.d.ts.map +1 -0
  34. package/component/transpiler.d.ts +49 -0
  35. package/component/transpiler.d.ts.map +1 -0
  36. package/component/types.d.ts +82 -0
  37. package/component/types.d.ts.map +1 -0
  38. package/esm/adapters/index.mjs +2337 -422
  39. package/esm/bridge-runtime/index.mjs +1 -1
  40. package/esm/component/index.mjs +2013 -0
  41. package/esm/index.mjs +3446 -13935
  42. package/esm/package.json +3 -12
  43. package/esm/resolver/index.mjs +661 -0
  44. package/esm/shell/index.mjs +1406 -0
  45. package/esm/types/index.mjs +11 -11
  46. package/esm/utils/index.mjs +53 -8
  47. package/index.d.ts +12 -40
  48. package/index.d.ts.map +1 -1
  49. package/index.js +3579 -14218
  50. package/package.json +3 -12
  51. package/resolver/cdn-registry.d.ts +39 -0
  52. package/resolver/cdn-registry.d.ts.map +1 -0
  53. package/resolver/esm-sh.resolver.d.ts +54 -0
  54. package/resolver/esm-sh.resolver.d.ts.map +1 -0
  55. package/resolver/import-map.d.ts +47 -0
  56. package/resolver/import-map.d.ts.map +1 -0
  57. package/resolver/import-parser.d.ts +28 -0
  58. package/resolver/import-parser.d.ts.map +1 -0
  59. package/resolver/import-rewriter.d.ts +29 -0
  60. package/resolver/import-rewriter.d.ts.map +1 -0
  61. package/resolver/index.d.ts +15 -0
  62. package/resolver/index.d.ts.map +1 -0
  63. package/resolver/index.js +708 -0
  64. package/resolver/types.d.ts +191 -0
  65. package/resolver/types.d.ts.map +1 -0
  66. package/shell/builder.d.ts +31 -0
  67. package/shell/builder.d.ts.map +1 -0
  68. package/shell/csp.d.ts +37 -0
  69. package/shell/csp.d.ts.map +1 -0
  70. package/shell/custom-shell-applier.d.ts +33 -0
  71. package/shell/custom-shell-applier.d.ts.map +1 -0
  72. package/shell/custom-shell-resolver.d.ts +47 -0
  73. package/shell/custom-shell-resolver.d.ts.map +1 -0
  74. package/shell/custom-shell-types.d.ts +75 -0
  75. package/shell/custom-shell-types.d.ts.map +1 -0
  76. package/shell/custom-shell-validator.d.ts +26 -0
  77. package/shell/custom-shell-validator.d.ts.map +1 -0
  78. package/shell/data-injector.d.ts +40 -0
  79. package/shell/data-injector.d.ts.map +1 -0
  80. package/shell/index.d.ts +19 -0
  81. package/shell/index.d.ts.map +1 -0
  82. package/shell/index.js +1453 -0
  83. package/shell/types.d.ts +54 -0
  84. package/shell/types.d.ts.map +1 -0
  85. package/types/index.d.ts +1 -3
  86. package/types/index.d.ts.map +1 -1
  87. package/types/index.js +11 -11
  88. package/types/ui-config.d.ts +50 -11
  89. package/types/ui-config.d.ts.map +1 -1
  90. package/types/ui-runtime.d.ts +8 -82
  91. package/types/ui-runtime.d.ts.map +1 -1
  92. package/utils/index.d.ts +9 -3
  93. package/utils/index.d.ts.map +1 -1
  94. package/utils/index.js +59 -7
  95. package/adapters/platform-meta.constants.d.ts +0 -26
  96. package/adapters/platform-meta.constants.d.ts.map +0 -1
  97. package/adapters/platform-meta.d.ts +0 -234
  98. package/adapters/platform-meta.d.ts.map +0 -1
  99. package/base-template/bridge.d.ts +0 -90
  100. package/base-template/bridge.d.ts.map +0 -1
  101. package/base-template/default-base-template.d.ts +0 -91
  102. package/base-template/default-base-template.d.ts.map +0 -1
  103. package/base-template/index.d.ts +0 -15
  104. package/base-template/index.d.ts.map +0 -1
  105. package/base-template/index.js +0 -1393
  106. package/base-template/polyfills.d.ts +0 -31
  107. package/base-template/polyfills.d.ts.map +0 -1
  108. package/base-template/theme-styles.d.ts +0 -74
  109. package/base-template/theme-styles.d.ts.map +0 -1
  110. package/build/builders/base-builder.d.ts +0 -124
  111. package/build/builders/base-builder.d.ts.map +0 -1
  112. package/build/builders/esbuild-config.d.ts +0 -94
  113. package/build/builders/esbuild-config.d.ts.map +0 -1
  114. package/build/builders/hybrid-builder.d.ts +0 -93
  115. package/build/builders/hybrid-builder.d.ts.map +0 -1
  116. package/build/builders/index.d.ts +0 -17
  117. package/build/builders/index.d.ts.map +0 -1
  118. package/build/builders/inline-builder.d.ts +0 -83
  119. package/build/builders/inline-builder.d.ts.map +0 -1
  120. package/build/builders/static-builder.d.ts +0 -78
  121. package/build/builders/static-builder.d.ts.map +0 -1
  122. package/build/builders/types.d.ts +0 -341
  123. package/build/builders/types.d.ts.map +0 -1
  124. package/build/cdn-resources.d.ts +0 -244
  125. package/build/cdn-resources.d.ts.map +0 -1
  126. package/build/hybrid-data.d.ts +0 -127
  127. package/build/hybrid-data.d.ts.map +0 -1
  128. package/build/index.d.ts +0 -299
  129. package/build/index.d.ts.map +0 -1
  130. package/build/index.js +0 -8699
  131. package/build/ui-components-browser.d.ts +0 -64
  132. package/build/ui-components-browser.d.ts.map +0 -1
  133. package/build/widget-manifest.d.ts +0 -362
  134. package/build/widget-manifest.d.ts.map +0 -1
  135. package/bundler/cache.d.ts +0 -173
  136. package/bundler/cache.d.ts.map +0 -1
  137. package/bundler/file-cache/component-builder.d.ts +0 -167
  138. package/bundler/file-cache/component-builder.d.ts.map +0 -1
  139. package/bundler/file-cache/hash-calculator.d.ts +0 -155
  140. package/bundler/file-cache/hash-calculator.d.ts.map +0 -1
  141. package/bundler/file-cache/index.d.ts +0 -12
  142. package/bundler/file-cache/index.d.ts.map +0 -1
  143. package/bundler/file-cache/storage/filesystem.d.ts +0 -149
  144. package/bundler/file-cache/storage/filesystem.d.ts.map +0 -1
  145. package/bundler/file-cache/storage/index.d.ts +0 -11
  146. package/bundler/file-cache/storage/index.d.ts.map +0 -1
  147. package/bundler/file-cache/storage/interface.d.ts +0 -152
  148. package/bundler/file-cache/storage/interface.d.ts.map +0 -1
  149. package/bundler/file-cache/storage/redis.d.ts +0 -139
  150. package/bundler/file-cache/storage/redis.d.ts.map +0 -1
  151. package/bundler/index.d.ts +0 -35
  152. package/bundler/index.d.ts.map +0 -1
  153. package/bundler/index.js +0 -2953
  154. package/bundler/sandbox/enclave-adapter.d.ts +0 -121
  155. package/bundler/sandbox/enclave-adapter.d.ts.map +0 -1
  156. package/bundler/sandbox/executor.d.ts +0 -14
  157. package/bundler/sandbox/executor.d.ts.map +0 -1
  158. package/bundler/sandbox/policy.d.ts +0 -62
  159. package/bundler/sandbox/policy.d.ts.map +0 -1
  160. package/bundler/types.d.ts +0 -702
  161. package/bundler/types.d.ts.map +0 -1
  162. package/dependency/cdn-registry.d.ts +0 -98
  163. package/dependency/cdn-registry.d.ts.map +0 -1
  164. package/dependency/import-map.d.ts +0 -186
  165. package/dependency/import-map.d.ts.map +0 -1
  166. package/dependency/import-parser.d.ts +0 -82
  167. package/dependency/import-parser.d.ts.map +0 -1
  168. package/dependency/index.d.ts +0 -17
  169. package/dependency/index.d.ts.map +0 -1
  170. package/dependency/index.js +0 -3180
  171. package/dependency/resolver.d.ts +0 -164
  172. package/dependency/resolver.d.ts.map +0 -1
  173. package/dependency/schemas.d.ts +0 -486
  174. package/dependency/schemas.d.ts.map +0 -1
  175. package/dependency/template-loader.d.ts +0 -204
  176. package/dependency/template-loader.d.ts.map +0 -1
  177. package/dependency/template-processor.d.ts +0 -118
  178. package/dependency/template-processor.d.ts.map +0 -1
  179. package/dependency/types.d.ts +0 -739
  180. package/dependency/types.d.ts.map +0 -1
  181. package/esm/base-template/index.mjs +0 -1359
  182. package/esm/build/index.mjs +0 -8601
  183. package/esm/bundler/index.mjs +0 -2895
  184. package/esm/dependency/index.mjs +0 -3068
  185. package/esm/handlebars/index.mjs +0 -587
  186. package/esm/registry/index.mjs +0 -6305
  187. package/esm/renderers/index.mjs +0 -1557
  188. package/esm/runtime/index.mjs +0 -5361
  189. package/esm/styles/index.mjs +0 -171
  190. package/esm/theme/index.mjs +0 -756
  191. package/esm/tool-template/index.mjs +0 -3652
  192. package/esm/validation/index.mjs +0 -542
  193. package/handlebars/expression-extractor.d.ts +0 -147
  194. package/handlebars/expression-extractor.d.ts.map +0 -1
  195. package/handlebars/helpers.d.ts +0 -339
  196. package/handlebars/helpers.d.ts.map +0 -1
  197. package/handlebars/index.d.ts +0 -195
  198. package/handlebars/index.d.ts.map +0 -1
  199. package/handlebars/index.js +0 -659
  200. package/preview/claude-preview.d.ts +0 -67
  201. package/preview/claude-preview.d.ts.map +0 -1
  202. package/preview/generic-preview.d.ts +0 -66
  203. package/preview/generic-preview.d.ts.map +0 -1
  204. package/preview/index.d.ts +0 -36
  205. package/preview/index.d.ts.map +0 -1
  206. package/preview/openai-preview.d.ts +0 -70
  207. package/preview/openai-preview.d.ts.map +0 -1
  208. package/preview/types.d.ts +0 -199
  209. package/preview/types.d.ts.map +0 -1
  210. package/registry/index.d.ts +0 -46
  211. package/registry/index.d.ts.map +0 -1
  212. package/registry/index.js +0 -6342
  213. package/registry/render-template.d.ts +0 -91
  214. package/registry/render-template.d.ts.map +0 -1
  215. package/registry/tool-ui.registry.d.ts +0 -294
  216. package/registry/tool-ui.registry.d.ts.map +0 -1
  217. package/registry/uri-utils.d.ts +0 -56
  218. package/registry/uri-utils.d.ts.map +0 -1
  219. package/renderers/cache.d.ts +0 -145
  220. package/renderers/cache.d.ts.map +0 -1
  221. package/renderers/html.renderer.d.ts +0 -123
  222. package/renderers/html.renderer.d.ts.map +0 -1
  223. package/renderers/index.d.ts +0 -36
  224. package/renderers/index.d.ts.map +0 -1
  225. package/renderers/index.js +0 -1603
  226. package/renderers/mdx-client.renderer.d.ts +0 -124
  227. package/renderers/mdx-client.renderer.d.ts.map +0 -1
  228. package/renderers/registry.d.ts +0 -133
  229. package/renderers/registry.d.ts.map +0 -1
  230. package/renderers/types.d.ts +0 -343
  231. package/renderers/types.d.ts.map +0 -1
  232. package/renderers/utils/detect.d.ts +0 -107
  233. package/renderers/utils/detect.d.ts.map +0 -1
  234. package/renderers/utils/hash.d.ts +0 -40
  235. package/renderers/utils/hash.d.ts.map +0 -1
  236. package/renderers/utils/index.d.ts +0 -9
  237. package/renderers/utils/index.d.ts.map +0 -1
  238. package/renderers/utils/transpiler.d.ts +0 -70
  239. package/renderers/utils/transpiler.d.ts.map +0 -1
  240. package/runtime/adapters/html.adapter.d.ts +0 -59
  241. package/runtime/adapters/html.adapter.d.ts.map +0 -1
  242. package/runtime/adapters/index.d.ts +0 -26
  243. package/runtime/adapters/index.d.ts.map +0 -1
  244. package/runtime/adapters/mdx.adapter.d.ts +0 -73
  245. package/runtime/adapters/mdx.adapter.d.ts.map +0 -1
  246. package/runtime/adapters/types.d.ts +0 -95
  247. package/runtime/adapters/types.d.ts.map +0 -1
  248. package/runtime/csp.d.ts +0 -48
  249. package/runtime/csp.d.ts.map +0 -1
  250. package/runtime/index.d.ts +0 -17
  251. package/runtime/index.d.ts.map +0 -1
  252. package/runtime/index.js +0 -5432
  253. package/runtime/mcp-bridge.d.ts +0 -101
  254. package/runtime/mcp-bridge.d.ts.map +0 -1
  255. package/runtime/renderer-runtime.d.ts +0 -133
  256. package/runtime/renderer-runtime.d.ts.map +0 -1
  257. package/runtime/sanitizer.d.ts +0 -180
  258. package/runtime/sanitizer.d.ts.map +0 -1
  259. package/runtime/types.d.ts +0 -415
  260. package/runtime/types.d.ts.map +0 -1
  261. package/runtime/wrapper.d.ts +0 -421
  262. package/runtime/wrapper.d.ts.map +0 -1
  263. package/styles/index.d.ts +0 -8
  264. package/styles/index.d.ts.map +0 -1
  265. package/styles/index.js +0 -222
  266. package/styles/variants.d.ts +0 -51
  267. package/styles/variants.d.ts.map +0 -1
  268. package/theme/cdn.d.ts +0 -195
  269. package/theme/cdn.d.ts.map +0 -1
  270. package/theme/css-to-theme.d.ts +0 -64
  271. package/theme/css-to-theme.d.ts.map +0 -1
  272. package/theme/index.d.ts +0 -19
  273. package/theme/index.d.ts.map +0 -1
  274. package/theme/index.js +0 -814
  275. package/theme/platforms.d.ts +0 -102
  276. package/theme/platforms.d.ts.map +0 -1
  277. package/theme/presets/github-openai.d.ts +0 -50
  278. package/theme/presets/github-openai.d.ts.map +0 -1
  279. package/theme/presets/index.d.ts +0 -11
  280. package/theme/presets/index.d.ts.map +0 -1
  281. package/theme/theme.d.ts +0 -396
  282. package/theme/theme.d.ts.map +0 -1
  283. package/tool-template/builder.d.ts +0 -213
  284. package/tool-template/builder.d.ts.map +0 -1
  285. package/tool-template/index.d.ts +0 -16
  286. package/tool-template/index.d.ts.map +0 -1
  287. package/tool-template/index.js +0 -3690
  288. package/validation/error-box.d.ts +0 -56
  289. package/validation/error-box.d.ts.map +0 -1
  290. package/validation/index.d.ts +0 -13
  291. package/validation/index.d.ts.map +0 -1
  292. package/validation/index.js +0 -576
  293. package/validation/schema-paths.d.ts +0 -118
  294. package/validation/schema-paths.d.ts.map +0 -1
  295. package/validation/template-validator.d.ts +0 -143
  296. package/validation/template-validator.d.ts.map +0 -1
  297. package/validation/wrapper.d.ts +0 -97
  298. package/validation/wrapper.d.ts.map +0 -1
@@ -1,234 +0,0 @@
1
- /**
2
- * Platform Metadata Adapters
3
- *
4
- * Build platform-specific _meta fields for tool UI responses.
5
- * Adapts the UI configuration to the format expected by each
6
- * AI platform (OpenAI, Claude, Gemini, etc.).
7
- *
8
- * This module is SDK-independent and can be used by external systems
9
- * like AgentLink without requiring @frontmcp/sdk.
10
- *
11
- * @packageDocumentation
12
- */
13
- import type { UITemplateConfig, UIContentSecurityPolicy } from '../types';
14
- export { DISPLAY_MODE_MAP, type ExtAppsDisplayMode } from './platform-meta.constants';
15
- /**
16
- * Supported AI platform types.
17
- * Used to determine which metadata format to generate.
18
- */
19
- export type AIPlatformType = 'openai' | 'claude' | 'gemini' | 'cursor' | 'continue' | 'cody' | 'generic-mcp' | 'ext-apps' | 'unknown';
20
- /**
21
- * MCP Apps MIME type variants.
22
- *
23
- * - `'standard'`: `text/html+mcp` - The standard MCP Apps MIME type
24
- * - `'profile'`: `text/html;profile=mcp-app` - Profile-based MIME type variant
25
- */
26
- export type ExtAppsMimeTypeVariant = 'standard' | 'profile';
27
- /**
28
- * Get the appropriate MCP Apps MIME type.
29
- *
30
- * MCP Apps supports two MIME type formats:
31
- * - Standard: `text/html+mcp` (default)
32
- * - Profile: `text/html;profile=mcp-app`
33
- *
34
- * The profile variant may be preferred by some hosts for content negotiation.
35
- *
36
- * @param variant - The MIME type variant to use
37
- * @returns The MCP Apps MIME type string
38
- *
39
- * @example
40
- * ```typescript
41
- * import { getExtAppsMimeType } from '@frontmcp/uipack/adapters';
42
- *
43
- * // Default standard MIME type
44
- * getExtAppsMimeType(); // 'text/html+mcp'
45
- *
46
- * // Profile-based MIME type
47
- * getExtAppsMimeType('profile'); // 'text/html;profile=mcp-app'
48
- * ```
49
- */
50
- export declare function getExtAppsMimeType(variant?: ExtAppsMimeTypeVariant): string;
51
- /**
52
- * Check if a MIME type is a valid MCP Apps MIME type.
53
- *
54
- * @param mimeType - The MIME type to check
55
- * @returns True if the MIME type is a valid MCP Apps MIME type
56
- */
57
- export declare function isExtAppsMimeType(mimeType: string): boolean;
58
- /**
59
- * UI metadata to include in tool response _meta field.
60
- * Contains both universal fields and platform-specific annotations.
61
- */
62
- export interface UIMetadata {
63
- /** Inline rendered HTML (universal) */
64
- 'ui/html'?: string;
65
- /** MIME type for the HTML content */
66
- 'ui/mimeType'?: string;
67
- /** Widget token for authenticated operations */
68
- 'ui/widgetToken'?: string;
69
- /** Direct URL to widget (for direct-url serving mode) */
70
- 'ui/directUrl'?: string;
71
- /** Renderer type for the widget (html, react, mdx, markdown, auto) */
72
- 'ui/type'?: string;
73
- /** Manifest URI for accessing widget configuration */
74
- 'ui/manifestUri'?: string;
75
- /** Hash of the widget content for cache validation */
76
- 'ui/contentHash'?: string;
77
- /** Required renderer assets for lazy loading */
78
- 'ui/requiredRenderers'?: string[];
79
- /** OpenAI: Resource URI for widget template */
80
- 'openai/outputTemplate'?: string;
81
- /** OpenAI: Whether widget can invoke tools */
82
- 'openai/widgetAccessible'?: boolean;
83
- /** OpenAI: Whether tool result can produce a widget (CRITICAL for ChatGPT) */
84
- 'openai/resultCanProduceWidget'?: boolean;
85
- /** OpenAI: CSP configuration */
86
- 'openai/widgetCSP'?: {
87
- connect_domains?: string[];
88
- resource_domains?: string[];
89
- };
90
- /** OpenAI: Display mode preference */
91
- 'openai/displayMode'?: string;
92
- /** OpenAI: Widget description */
93
- 'openai/widgetDescription'?: string;
94
- /** OpenAI: Status text while tool is executing */
95
- 'openai/toolInvocation/invoking'?: string;
96
- /** OpenAI: Status text after tool execution completes */
97
- 'openai/toolInvocation/invoked'?: string;
98
- /** Claude: Widget description */
99
- 'claude/widgetDescription'?: string;
100
- /** Claude: Display mode preference */
101
- 'claude/displayMode'?: string;
102
- /** Claude: Whether widget can invoke tools (informational) */
103
- 'claude/widgetAccessible'?: boolean;
104
- /** Claude: Whether to show border around UI */
105
- 'claude/prefersBorder'?: boolean;
106
- /** FrontMCP: Whether widget can invoke tools */
107
- 'frontmcp/widgetAccessible'?: boolean;
108
- /** FrontMCP: CSP configuration */
109
- 'frontmcp/widgetCSP'?: {
110
- connectDomains?: string[];
111
- resourceDomains?: string[];
112
- };
113
- /** FrontMCP: Display mode preference */
114
- 'frontmcp/displayMode'?: string;
115
- /** FrontMCP: Widget description */
116
- 'frontmcp/widgetDescription'?: string;
117
- /** FrontMCP: Whether to show border around UI */
118
- 'frontmcp/prefersBorder'?: boolean;
119
- /** FrontMCP: Dedicated sandbox domain */
120
- 'frontmcp/domain'?: string;
121
- /** Gemini: Widget description */
122
- 'gemini/widgetDescription'?: string;
123
- /** IDE: Resource URI for widget template */
124
- 'ide/outputTemplate'?: string;
125
- /** IDE: Widget description */
126
- 'ide/widgetDescription'?: string;
127
- /** MCP Apps: Resource URI for UI template */
128
- 'ui/resourceUri'?: string;
129
- /** MCP Apps: CSP configuration */
130
- 'ui/csp'?: {
131
- connectDomains?: string[];
132
- resourceDomains?: string[];
133
- };
134
- /** MCP Apps: Dedicated sandbox domain */
135
- 'ui/domain'?: string;
136
- /** MCP Apps: Whether to show border around UI */
137
- 'ui/prefersBorder'?: boolean;
138
- /** MCP Apps: Display mode */
139
- 'ui/displayMode'?: 'inline' | 'fullscreen' | 'pip';
140
- /** Allow additional platform-specific fields */
141
- [key: string]: unknown;
142
- }
143
- /**
144
- * Options for building UI metadata.
145
- */
146
- export interface BuildUIMetaOptions<In = unknown, Out = unknown> {
147
- /** Tool UI configuration */
148
- uiConfig: UITemplateConfig<In, Out>;
149
- /** Detected platform type */
150
- platformType: AIPlatformType;
151
- /** Rendered HTML content */
152
- html: string;
153
- /** Widget access token */
154
- token?: string;
155
- /** Direct URL for widget serving */
156
- directUrl?: string;
157
- /** Renderer type for the widget (html, react, mdx, markdown, auto) */
158
- rendererType?: string;
159
- /** Hash of the widget content for cache validation */
160
- contentHash?: string;
161
- /** Manifest URI for accessing widget configuration */
162
- manifestUri?: string;
163
- }
164
- /**
165
- * Build platform-specific UI metadata for tool response.
166
- *
167
- * For inline serving mode (default), HTML is embedded directly in `_meta['ui/html']`.
168
- * For static mode, the static widget URI is provided in tools/list
169
- * and the tool response contains only structured data.
170
- *
171
- * @example
172
- * ```typescript
173
- * import { buildUIMeta } from '@frontmcp/ui/adapters';
174
- *
175
- * const meta = buildUIMeta({
176
- * uiConfig: { template: (ctx) => `<div>${ctx.output.value}</div>` },
177
- * platformType: 'openai',
178
- * html: '<div>Hello World</div>',
179
- * });
180
- * ```
181
- */
182
- export declare function buildUIMeta<In = unknown, Out = unknown>(options: BuildUIMetaOptions<In, Out>): UIMetadata;
183
- /**
184
- * Build OpenAI CSP format.
185
- */
186
- export declare function buildOpenAICSP(csp: UIContentSecurityPolicy): {
187
- connect_domains?: string[];
188
- resource_domains?: string[];
189
- };
190
- /**
191
- * Build FrontMCP CSP format (camelCase like MCP Apps spec).
192
- * Used for generic-mcp platform metadata.
193
- */
194
- export declare function buildFrontMCPCSP(csp: UIContentSecurityPolicy): {
195
- connectDomains?: string[];
196
- resourceDomains?: string[];
197
- };
198
- /**
199
- * Build metadata for tool discovery (tools/list response).
200
- * This includes fields that should be present at discovery time,
201
- * not in individual tool call responses.
202
- *
203
- * @example
204
- * ```typescript
205
- * import { buildToolDiscoveryMeta } from '@frontmcp/ui/adapters';
206
- *
207
- * const toolMeta = buildToolDiscoveryMeta({
208
- * uiConfig: { template: MyWidget, widgetAccessible: true },
209
- * platformType: 'openai',
210
- * staticWidgetUri: 'ui://widget/my_tool.html',
211
- * });
212
- *
213
- * // Use in tools/list response
214
- * const tool = {
215
- * name: 'my_tool',
216
- * description: '...',
217
- * inputSchema: {...},
218
- * _meta: toolMeta,
219
- * };
220
- * ```
221
- */
222
- export interface BuildToolDiscoveryMetaOptions<In = unknown, Out = unknown> {
223
- /** Tool UI configuration */
224
- uiConfig: UITemplateConfig<In, Out>;
225
- /** Detected platform type */
226
- platformType: AIPlatformType;
227
- /** Static widget URI (e.g., ui://widget/my_tool.html) */
228
- staticWidgetUri: string;
229
- }
230
- /**
231
- * Build tool discovery metadata (for tools/list response).
232
- */
233
- export declare function buildToolDiscoveryMeta<In = unknown, Out = unknown>(options: BuildToolDiscoveryMetaOptions<In, Out>): UIMetadata;
234
- //# sourceMappingURL=platform-meta.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-meta.d.ts","sourceRoot":"","sources":["../../src/adapters/platform-meta.ts"],"names":[],"mappings":"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"}
@@ -1,90 +0,0 @@
1
- /**
2
- * Platform Bridge - Reactive Data Store for Tool UI
3
- *
4
- * Provides a reactive interface for tool output data that works across:
5
- * - React (via useSyncExternalStore)
6
- * - HTMX (via custom events)
7
- * - Vanilla JS (via subscribe callbacks)
8
- *
9
- * Uses Object.defineProperty to intercept when platforms inject data,
10
- * automatically detecting and notifying subscribers when data changes.
11
- *
12
- * @example React integration
13
- * ```tsx
14
- * import { useSyncExternalStore } from 'react';
15
- *
16
- * function useToolOutput() {
17
- * return useSyncExternalStore(
18
- * window.__frontmcp.bridge.subscribe,
19
- * window.__frontmcp.bridge.getSnapshot,
20
- * window.__frontmcp.bridge.getServerSnapshot
21
- * );
22
- * }
23
- * ```
24
- *
25
- * @example Vanilla JS
26
- * ```javascript
27
- * const unsubscribe = window.__frontmcp.bridge.subscribe(() => {
28
- * const state = window.__frontmcp.bridge.getState();
29
- * if (!state.loading) {
30
- * renderWidget(state.data);
31
- * }
32
- * });
33
- * ```
34
- *
35
- * @example HTMX
36
- * ```html
37
- * <div hx-trigger="frontmcp:change from:document" hx-get="/render">
38
- * Loading...
39
- * </div>
40
- * ```
41
- */
42
- /**
43
- * Bridge state containing data, loading status, and error information.
44
- */
45
- export interface BridgeState<T = unknown> {
46
- /** Current data (null when loading or no data) */
47
- data: T | null;
48
- /** Whether the bridge is waiting for data */
49
- loading: boolean;
50
- /** Error message if data loading failed */
51
- error: string | null;
52
- }
53
- /**
54
- * Platform Bridge interface for reactive data access.
55
- */
56
- export interface PlatformBridge<T = unknown> {
57
- /** Get current state snapshot */
58
- getState(): BridgeState<T>;
59
- /** Subscribe to state changes */
60
- subscribe(callback: () => void): () => void;
61
- /** React useSyncExternalStore compatible getSnapshot */
62
- getSnapshot(): BridgeState<T>;
63
- /** React SSR compatible getServerSnapshot */
64
- getServerSnapshot(): BridgeState<T>;
65
- /** Check if bridge has received data */
66
- hasData(): boolean;
67
- /** Manually set data (for testing or custom injection) */
68
- setData(data: T): void;
69
- /** Manually set error */
70
- setError(error: string): void;
71
- /** Reset to loading state */
72
- reset(): void;
73
- }
74
- /**
75
- * Render the Platform Bridge inline script.
76
- *
77
- * This script creates a reactive data store that:
78
- * 1. Installs interceptors on window.openai to detect data injection
79
- * 2. Provides subscribe/getState API for React/HTMX/vanilla integration
80
- * 3. Dispatches custom events for HTMX compatibility
81
- * 4. Handles the race condition between iframe load and data injection
82
- *
83
- * @returns Script tag with bridge implementation
84
- */
85
- export declare function renderBridgeScript(): string;
86
- /**
87
- * Generate TypeScript types for the bridge (for documentation/IDE support).
88
- */
89
- export declare const BRIDGE_TYPES = "\ninterface BridgeState<T = unknown> {\n data: T | null;\n loading: boolean;\n error: string | null;\n}\n\ninterface PlatformBridge<T = unknown> {\n getState(): BridgeState<T>;\n subscribe(callback: () => void): () => void;\n getSnapshot(): BridgeState<T>;\n getServerSnapshot(): BridgeState<T>;\n hasData(): boolean;\n setData(data: T): void;\n setError(error: string): void;\n reset(): void;\n}\n\ndeclare global {\n interface Window {\n __frontmcp: {\n bridge: PlatformBridge;\n // ... other __frontmcp methods\n };\n }\n}\n";
90
- //# sourceMappingURL=bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/base-template/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,kDAAkD;IAClD,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,iCAAiC;IACjC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3B,iCAAiC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,wDAAwD;IACxD,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,6CAA6C;IAC7C,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACpC,wCAAwC;IACxC,OAAO,IAAI,OAAO,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6BAA6B;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CA4W3C;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,ijBA0BxB,CAAC"}
@@ -1,91 +0,0 @@
1
- /**
2
- * Default Base Template for Tool UI
3
- *
4
- * Provides a generic HTML wrapper for tool output widgets that:
5
- * 1. Includes theming (Tailwind CSS with @theme)
6
- * 2. Includes platform polyfills (callTool, detectMcpSession)
7
- * 3. Polls for toolOutput from window.openai or window.__frontmcp
8
- * 4. Renders content via window.__frontmcp.renderContent or default JSON renderer
9
- *
10
- * This template is platform-agnostic and works with:
11
- * - OpenAI Apps SDK (window.openai.toolOutput)
12
- * - Claude Artifacts
13
- * - Custom hosts using MCP protocol
14
- */
15
- import { type ThemeConfig } from '../theme';
16
- import { type McpSession } from './polyfills';
17
- /**
18
- * Options for creating a default base template.
19
- */
20
- export interface BaseTemplateOptions {
21
- /** Tool name for identification */
22
- toolName: string;
23
- /** Theme configuration */
24
- theme?: ThemeConfig;
25
- /** MCP session info for callTool polyfill fallback */
26
- mcpSession?: McpSession;
27
- /** Include HTMX (default: false) */
28
- htmx?: boolean;
29
- /** Include Alpine.js (default: false) */
30
- alpine?: boolean;
31
- /** Include fonts (default: true) */
32
- fonts?: boolean;
33
- /** Use inline scripts (for blocked network platforms) */
34
- inline?: boolean;
35
- /**
36
- * Additional head content (scripts, meta tags).
37
- * @warning This content is injected WITHOUT escaping. Only use with trusted content.
38
- */
39
- headContent?: string;
40
- /** Custom body classes */
41
- bodyClass?: string;
42
- /** Custom widget container classes */
43
- containerClass?: string;
44
- }
45
- /**
46
- * Create a default base template for tool UI widgets.
47
- *
48
- * This generates a complete HTML document that:
49
- * 1. Loads Tailwind CSS with theme configuration
50
- * 2. Injects platform polyfills (callTool, detectMcpSession, getToolOutput)
51
- * 3. Waits for toolOutput to be injected
52
- * 4. Renders content using window.__frontmcp.renderContent or default JSON renderer
53
- *
54
- * @param options - Base template configuration
55
- * @returns Complete HTML document string
56
- *
57
- * @example Basic usage
58
- * ```typescript
59
- * const html = createDefaultBaseTemplate({ toolName: 'get_weather' });
60
- * ```
61
- *
62
- * @example With custom theme and MCP session
63
- * ```typescript
64
- * const html = createDefaultBaseTemplate({
65
- * toolName: 'get_weather',
66
- * theme: customTheme,
67
- * mcpSession: { mcpUrl: 'https://mcp.example.com', sessionId: 'abc123' },
68
- * });
69
- * ```
70
- *
71
- * @example For Claude Artifacts (inline scripts)
72
- * ```typescript
73
- * await fetchAndCacheScriptsFromTheme(theme);
74
- * const html = createDefaultBaseTemplate({
75
- * toolName: 'get_weather',
76
- * inline: true,
77
- * });
78
- * ```
79
- */
80
- export declare function createDefaultBaseTemplate(options: BaseTemplateOptions): string;
81
- /**
82
- * Create a minimal base template without fonts.
83
- *
84
- * Use this for lightweight widgets or when fonts are loaded elsewhere.
85
- *
86
- * @param toolName - Tool name for identification
87
- * @param mcpSession - Optional MCP session info
88
- * @returns Complete HTML document string
89
- */
90
- export declare function createMinimalBaseTemplate(toolName: string, mcpSession?: McpSession): string;
91
- //# sourceMappingURL=default-base-template.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-base-template.d.ts","sourceRoot":"","sources":["../../src/base-template/default-base-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sDAAsD;IACtD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAyW9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAQ3F"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Base Template Module
3
- *
4
- * Provides default HTML wrappers for Tool UI widgets with:
5
- * - Theming (Tailwind CSS + @theme)
6
- * - Platform polyfills (callTool, detectMcpSession, getToolOutput)
7
- * - Cross-platform compatibility (OpenAI, Claude, custom hosts)
8
- *
9
- * @module @frontmcp/ui/base-template
10
- */
11
- export { createDefaultBaseTemplate, createMinimalBaseTemplate, type BaseTemplateOptions, } from './default-base-template';
12
- export { renderThemeStyles, renderMinimalThemeStyles, renderThemeCssOnly, type ThemeStylesOptions, } from './theme-styles';
13
- export { renderMcpSessionPolyfill, type McpSession } from './polyfills';
14
- export { renderBridgeScript, type BridgeState, type PlatformBridge, BRIDGE_TYPES } from './bridge';
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-template/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,wBAAwB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}