@assistant-ui/react 0.15.26 → 0.15.27
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/mcp-apps/app-frame.js +2 -2
- package/dist/mcp-apps/app-frame.js.map +1 -1
- package/dist/mcp-apps/bridge.d.ts.map +1 -1
- package/dist/mcp-apps/bridge.js +28 -3
- package/dist/mcp-apps/bridge.js.map +1 -1
- package/dist/mcp-apps/index.d.ts +1 -1
- package/dist/mcp-apps/index.d.ts.map +1 -1
- package/dist/mcp-apps/types.d.ts +18 -1
- package/dist/mcp-apps/types.d.ts.map +1 -1
- package/dist/mcp-apps/types.js.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerAttachmentDropzone.js +14 -12
- package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
- package/dist/unstable/useComposerInput.d.ts +2 -0
- package/dist/unstable/useComposerInput.d.ts.map +1 -1
- package/dist/unstable/useComposerInput.js +2 -0
- package/dist/unstable/useComposerInput.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +1 -0
- package/src/mcp-apps/McpAppRenderer.test.tsx +7 -2
- package/src/mcp-apps/app-frame.test.tsx +64 -6
- package/src/mcp-apps/app-frame.tsx +2 -2
- package/src/mcp-apps/bridge.test.ts +154 -0
- package/src/mcp-apps/bridge.ts +51 -9
- package/src/mcp-apps/index.ts +1 -0
- package/src/mcp-apps/types.ts +15 -1
- package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +32 -1
- package/src/primitives/composer/ComposerAttachmentDropzone.tsx +14 -12
- package/src/primitives/composer/ComposerDisabledThread.test.tsx +121 -0
- package/src/unstable/useComposerInput.ts +2 -0
package/dist/index.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export { unstable_useComposerInput, unstable_useTriggerPopoverAriaProps, type Un
|
|
|
144
144
|
export type { Assistant } from "./augmentations.js";
|
|
145
145
|
export { CloudRendererHost, type CloudRendererHostProps, } from "./cloud-renderer/CloudRendererHost.js";
|
|
146
146
|
export { McpAppRenderer, McpAppsRemoteHost, getMcpAppFromToolPart, } from "./mcp-apps/index.js";
|
|
147
|
-
export type { McpAppPartOptions, McpAppRendererOptions, McpAppMetadata, McpAppResource, McpAppResourceMeta, McpAppResourceCSP, McpAppSandboxConfig, McpAppHostInfo, McpAppHostContext, McpAppDisplayMode, McpAppsHost, McpAppsRemoteHostOptions, McpAppToolCallParams, McpAppBridgeHandlers, ToolCallMessagePartMcpMetadata, } from "./mcp-apps/index.js";
|
|
147
|
+
export type { McpAppPartOptions, McpAppRendererOptions, McpAppMetadata, McpAppResource, McpAppResourceMeta, McpAppResourceCSP, McpAppSandboxConfig, McpAppHostInfo, McpAppHostContext, McpAppDisplayMode, McpAppsHost, McpAppsRemoteHostOptions, McpAppToolCallParams, McpAppInitializeParams, McpAppBridgeHandlers, ToolCallMessagePartMcpMetadata, } from "./mcp-apps/index.js";
|
|
148
148
|
export type { McpAppResourceOutput } from "@assistant-ui/core/react";
|
|
149
149
|
export type { ShimLoadError, ShimLoadErrorCode } from "safe-content-frame";
|
|
150
150
|
export { unstable_useWebMcpProvider, type Unstable_WebMcpProviderOptions, type Unstable_WebMcpProviderResult, } from "./unstable/webmcp/useWebMcpProvider.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,9 +88,9 @@ function buildLiveHandlers(initial, liveRef, lifecycle) {
|
|
|
88
88
|
lifecycle.onSizeChange(p);
|
|
89
89
|
live()?.onSizeChange?.(p);
|
|
90
90
|
};
|
|
91
|
-
out.onInitialized = () => {
|
|
91
|
+
out.onInitialized = (params) => {
|
|
92
92
|
lifecycle.onInitialized();
|
|
93
|
-
live()?.onInitialized?.();
|
|
93
|
+
live()?.onInitialized?.(params);
|
|
94
94
|
};
|
|
95
95
|
out.onRequestTeardown = (p) => live()?.onRequestTeardown?.(p);
|
|
96
96
|
out.onLog = (p) => live()?.onLog?.(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-frame.js","names":["c","_c","MutableRefObject","useEffect","useRef","useIsomorphicLayoutEffect","McpAppBridge","createMcpAppBridge","SandboxHost","SandboxBridge","SandboxHostApi","SandboxHostFrame","McpAppBridgeHandlers","McpAppFrameProps","McpAppHostContext","isRecord","applyMcpAppCsp","DEFAULT_PRODUCT","INIT_TIMEOUT_MS","DEFAULT_MAX_HEIGHT","isPlainObject","value","Record","prototype","Object","getPrototypeOf","isSameHostContext","a","b","depth","is","Array","isArray","length","i","aKeys","keys","every","key","hasOwn","useBridgeNotify","bridgeRef","widgetReadyRef","pendingRef","lastSentRef","notify","t0","$","isEqual","undefined","t1","current","t2","LiveSnapshot","handlers","hostInfo","hostContext","input","output","FrameLifecycle","onInitialized","onSizeChange","params","width","height","buildLiveHandlers","initial","liveRef","lifecycle","live","has","K","out","defineProperty","get","allowedTools","enumerable","configurable","liveCall","NonNullable","p","fn","Error","callTool","readResource","listResources","openLink","sendMessage","updateModelContext","requestDisplayMode","onRequestTeardown","onLog","onError","e","McpAppFrame","app","resource","sandbox","maxHeight","lastSentInputRef","lastSentOutputRef","lastSentHostContextRef","pendingInputRef","pendingOutputRef","pendingHostContextRef","t3","t4","t5","Symbol","for","frame","host","initTimeoutId","flushPending","notifyToolInput","notifyToolResult","notifyHostContextChanged","wrappedHandlers","clearTimeout","setHeight","setTimeout","bridge","onMessage","dispose","createBridge","_temp","_temp2","_temp3","t6","meta","csp","t7","html","t8","t9","serverId","uri","t10","product","t11","t12","err","t13","prefersBorder","t14","resourceUri","t15","b_2","v_1","v","b_1","v_0","b_0","_c"],"sources":["../../src/mcp-apps/app-frame.tsx"],"sourcesContent":["\"use client\";\n\nimport { type MutableRefObject, useEffect, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport { type McpAppBridge, createMcpAppBridge } from \"./bridge\";\nimport {\n SandboxHost,\n type SandboxBridge,\n type SandboxHostApi,\n type SandboxHostFrame,\n} from \"../sandbox-host/SandboxHost\";\nimport type {\n McpAppBridgeHandlers,\n McpAppFrameProps,\n McpAppHostContext,\n} from \"./types\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\nimport { applyMcpAppCsp } from \"./csp\";\n\nconst DEFAULT_PRODUCT = \"assistant-ui-mcp-app\";\nconst INIT_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_HEIGHT = 800;\n\n// Only a plain object can be compared by its own keys. Structured clone carries\n// a Date, Map, or class instance to the widget intact, and those expose no\n// enumerable keys, so walking them would report two different values as equal.\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n};\n\n// Hosts commonly rebuild an equal context object on every render, and the\n// widget cannot tell a repeated notification apart from a real change. The\n// open index signature on McpAppHostContext admits values JSON rejects (an\n// undefined property value is enough), so leaves the walk cannot compare fall\n// back to identity rather than failing the whole comparison.\nconst isSameHostContext = (a: unknown, b: unknown, depth = 0): boolean => {\n if (Object.is(a, b)) return true;\n if (depth > 100) return false;\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++) {\n if (!isSameHostContext(a[i], b[i], depth + 1)) return false;\n }\n return true;\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n const aKeys = Object.keys(a);\n return (\n aKeys.length === Object.keys(b).length &&\n aKeys.every(\n (key) =>\n Object.hasOwn(b, key) && isSameHostContext(a[key], b[key], depth + 1),\n )\n );\n};\n\nfunction useBridgeNotify<T>(\n value: T | undefined,\n bridgeRef: MutableRefObject<McpAppBridge | null>,\n widgetReadyRef: MutableRefObject<boolean>,\n pendingRef: MutableRefObject<T | undefined>,\n lastSentRef: MutableRefObject<T | undefined>,\n notify: (bridge: McpAppBridge, v: T) => void,\n isEqual: (sent: T | undefined, next: T) => boolean = Object.is,\n) {\n useEffect(() => {\n if (!bridgeRef.current) return;\n // Nothing to deliver, either because there is no value or because the\n // widget already holds it; a queued value here is superseded and would\n // otherwise flush after initialization as a stale update.\n if (value === undefined || isEqual(lastSentRef.current, value)) {\n pendingRef.current = undefined;\n return;\n }\n if (!widgetReadyRef.current) {\n pendingRef.current = value;\n return;\n }\n notify(bridgeRef.current, value);\n lastSentRef.current = value;\n // oxlint-disable-next-line react/exhaustive-deps -- refs are stable; notify and isEqual are assumed stable; re-run only when value changes\n }, [value]);\n}\n\ntype LiveSnapshot = {\n handlers: McpAppBridgeHandlers | undefined;\n hostInfo: McpAppFrameProps[\"hostInfo\"];\n hostContext: McpAppFrameProps[\"hostContext\"];\n input: unknown;\n output: unknown;\n};\n\ntype FrameLifecycle = {\n onInitialized: () => void;\n onSizeChange: (params: { width?: number; height?: number }) => void;\n};\n\n// Proxy each per-call handler through liveRef so the bridge always dispatches\n// to the latest handler reference (e.g. inline callbacks closing over state).\n// Capability presence is snapshot at mount: a handler added later requires a\n// remount (keyed on resource URI) to expose the capability to the widget.\n// allowedTools is the exception: it is never advertised in the ui/initialize\n// response, so it stays a live getter, which means this object must reach the\n// bridge uncopied and the frame passes its lifecycle work in rather than\n// wrapping the result.\nfunction buildLiveHandlers(\n initial: McpAppBridgeHandlers | undefined,\n liveRef: { readonly current: LiveSnapshot },\n lifecycle: FrameLifecycle,\n): McpAppBridgeHandlers {\n const live = () => liveRef.current.handlers;\n const has = <K extends keyof McpAppBridgeHandlers>(key: K) =>\n initial?.[key] !== undefined;\n const out: McpAppBridgeHandlers = {};\n Object.defineProperty(out, \"allowedTools\", {\n get: () => live()?.allowedTools,\n enumerable: true,\n configurable: true,\n });\n const liveCall = <K extends keyof McpAppBridgeHandlers>(\n key: K,\n ): NonNullable<McpAppBridgeHandlers[K]> =>\n ((p: unknown) => {\n const fn = live()?.[key] as ((p: unknown) => unknown) | undefined;\n if (!fn) {\n throw new Error(`${key} handler is no longer available`);\n }\n return fn(p);\n }) as NonNullable<McpAppBridgeHandlers[K]>;\n if (has(\"callTool\")) out.callTool = liveCall(\"callTool\");\n if (has(\"readResource\")) out.readResource = liveCall(\"readResource\");\n if (has(\"listResources\")) out.listResources = liveCall(\"listResources\");\n if (has(\"openLink\")) out.openLink = liveCall(\"openLink\");\n if (has(\"sendMessage\")) out.sendMessage = liveCall(\"sendMessage\");\n if (has(\"updateModelContext\"))\n out.updateModelContext = liveCall(\"updateModelContext\");\n if (has(\"requestDisplayMode\"))\n out.requestDisplayMode = liveCall(\"requestDisplayMode\");\n out.onSizeChange = (p) => {\n lifecycle.onSizeChange(p);\n live()?.onSizeChange?.(p);\n };\n out.onInitialized = () => {\n lifecycle.onInitialized();\n live()?.onInitialized?.();\n };\n out.onRequestTeardown = (p) => live()?.onRequestTeardown?.(p);\n out.onLog = (p) => live()?.onLog?.(p);\n out.onError = (e) => live()?.onError?.(e);\n return out;\n}\n\nexport function McpAppFrame({\n app,\n resource,\n input,\n output,\n sandbox,\n handlers,\n hostInfo,\n hostContext,\n maxHeight = DEFAULT_MAX_HEIGHT,\n}: McpAppFrameProps) {\n const bridgeRef = useRef<McpAppBridge | null>(null);\n const lastSentInputRef = useRef<unknown>(undefined);\n const lastSentOutputRef = useRef<unknown>(undefined);\n const lastSentHostContextRef = useRef<McpAppHostContext | undefined>(\n undefined,\n );\n // Per MCP Apps spec, the host should defer notifications until the widget\n // signals readiness via `notifications/initialized`. Until then, we record\n // pending values and flush them on init.\n const widgetReadyRef = useRef(false);\n const pendingInputRef = useRef<unknown>(undefined);\n const pendingOutputRef = useRef<unknown>(undefined);\n const pendingHostContextRef = useRef<McpAppHostContext | undefined>(\n undefined,\n );\n\n const liveRef = useRef<LiveSnapshot>({\n handlers,\n hostInfo,\n hostContext,\n input,\n output,\n });\n useIsomorphicLayoutEffect(() => {\n liveRef.current = {\n handlers,\n hostInfo,\n hostContext,\n input,\n output,\n };\n }, [handlers, hostInfo, hostContext, input, output]);\n\n const createBridge = (\n frame: SandboxHostFrame,\n host: SandboxHostApi,\n ): SandboxBridge => {\n const current = liveRef.current;\n let initTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const flushPending = () => {\n if (widgetReadyRef.current) return;\n widgetReadyRef.current = true;\n const b = bridgeRef.current;\n if (!b) return;\n if (pendingInputRef.current !== undefined) {\n b.notifyToolInput(pendingInputRef.current);\n lastSentInputRef.current = pendingInputRef.current;\n pendingInputRef.current = undefined;\n }\n if (pendingOutputRef.current !== undefined) {\n b.notifyToolResult(pendingOutputRef.current);\n lastSentOutputRef.current = pendingOutputRef.current;\n pendingOutputRef.current = undefined;\n }\n if (pendingHostContextRef.current !== undefined) {\n b.notifyHostContextChanged(pendingHostContextRef.current);\n lastSentHostContextRef.current = pendingHostContextRef.current;\n pendingHostContextRef.current = undefined;\n }\n };\n\n const wrappedHandlers = buildLiveHandlers(current.handlers, liveRef, {\n onInitialized: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n flushPending();\n },\n onSizeChange: (p) => {\n if (p.height != null) host.setHeight(p.height);\n },\n });\n\n // Safety net: if the widget never sends notifications/initialized (broken\n // or non-spec-compliant), flush the queue anyway so the host doesn't\n // appear hung.\n initTimeoutId = setTimeout(() => {\n initTimeoutId = null;\n flushPending();\n }, INIT_TIMEOUT_MS);\n\n const bridge = createMcpAppBridge({\n frame,\n handlers: wrappedHandlers,\n hostInfo: current.hostInfo,\n hostContext: current.hostContext,\n });\n bridgeRef.current = bridge;\n\n if (current.input !== undefined) pendingInputRef.current = current.input;\n if (current.output !== undefined) pendingOutputRef.current = current.output;\n // hostContext is delivered inside the ui/initialize response, where the\n // bridge defaults it to {}; recording that same normalized value keeps the\n // first later change from repeating what the widget already holds.\n lastSentHostContextRef.current = current.hostContext ?? {};\n\n return {\n onMessage: bridge.onMessage,\n dispose: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n bridge.dispose();\n bridgeRef.current = null;\n lastSentInputRef.current = undefined;\n lastSentOutputRef.current = undefined;\n lastSentHostContextRef.current = undefined;\n widgetReadyRef.current = false;\n pendingInputRef.current = undefined;\n pendingOutputRef.current = undefined;\n pendingHostContextRef.current = undefined;\n },\n };\n };\n\n useBridgeNotify(\n input,\n bridgeRef,\n widgetReadyRef,\n pendingInputRef,\n lastSentInputRef,\n (b, v) => b.notifyToolInput(v),\n );\n useBridgeNotify(\n output,\n bridgeRef,\n widgetReadyRef,\n pendingOutputRef,\n lastSentOutputRef,\n (b, v) => b.notifyToolResult(v),\n );\n useBridgeNotify(\n hostContext,\n bridgeRef,\n widgetReadyRef,\n pendingHostContextRef,\n lastSentHostContextRef,\n (b, v) => b.notifyHostContextChanged(v),\n isSameHostContext,\n );\n\n return (\n <SandboxHost\n content={{ html: applyMcpAppCsp(resource.html, resource.meta?.csp) }}\n contentKey={\n app.serverId ? `${app.serverId} ${resource.uri}` : resource.uri\n }\n sandbox={{ ...sandbox, product: sandbox?.product ?? DEFAULT_PRODUCT }}\n maxHeight={maxHeight}\n createBridge={createBridge}\n onError={(err) => liveRef.current.handlers?.onError?.(err)}\n containerProps={{\n \"data-mcp-app-resource\": app.resourceUri,\n \"data-mcp-app-prefers-border\": resource.meta?.prefersBorder\n ? \"\"\n : undefined,\n }}\n />\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-frame.js","names":["c","_c","MutableRefObject","useEffect","useRef","useIsomorphicLayoutEffect","McpAppBridge","createMcpAppBridge","SandboxHost","SandboxBridge","SandboxHostApi","SandboxHostFrame","McpAppBridgeHandlers","McpAppFrameProps","McpAppHostContext","isRecord","applyMcpAppCsp","DEFAULT_PRODUCT","INIT_TIMEOUT_MS","DEFAULT_MAX_HEIGHT","isPlainObject","value","Record","prototype","Object","getPrototypeOf","isSameHostContext","a","b","depth","is","Array","isArray","length","i","aKeys","keys","every","key","hasOwn","useBridgeNotify","bridgeRef","widgetReadyRef","pendingRef","lastSentRef","notify","t0","$","isEqual","undefined","t1","current","t2","LiveSnapshot","handlers","hostInfo","hostContext","input","output","FrameLifecycle","onInitialized","onSizeChange","params","width","height","buildLiveHandlers","initial","liveRef","lifecycle","live","has","K","out","defineProperty","get","allowedTools","enumerable","configurable","liveCall","NonNullable","p","fn","Error","callTool","readResource","listResources","openLink","sendMessage","updateModelContext","requestDisplayMode","onRequestTeardown","onLog","onError","e","McpAppFrame","app","resource","sandbox","maxHeight","lastSentInputRef","lastSentOutputRef","lastSentHostContextRef","pendingInputRef","pendingOutputRef","pendingHostContextRef","t3","t4","t5","Symbol","for","frame","host","initTimeoutId","flushPending","notifyToolInput","notifyToolResult","notifyHostContextChanged","wrappedHandlers","clearTimeout","setHeight","setTimeout","bridge","onMessage","dispose","createBridge","_temp","_temp2","_temp3","t6","meta","csp","t7","html","t8","t9","serverId","uri","t10","product","t11","t12","err","t13","prefersBorder","t14","resourceUri","t15","b_2","v_1","v","b_1","v_0","b_0","_c"],"sources":["../../src/mcp-apps/app-frame.tsx"],"sourcesContent":["\"use client\";\n\nimport { type MutableRefObject, useEffect, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport { type McpAppBridge, createMcpAppBridge } from \"./bridge\";\nimport {\n SandboxHost,\n type SandboxBridge,\n type SandboxHostApi,\n type SandboxHostFrame,\n} from \"../sandbox-host/SandboxHost\";\nimport type {\n McpAppBridgeHandlers,\n McpAppFrameProps,\n McpAppHostContext,\n} from \"./types\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\nimport { applyMcpAppCsp } from \"./csp\";\n\nconst DEFAULT_PRODUCT = \"assistant-ui-mcp-app\";\nconst INIT_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_HEIGHT = 800;\n\n// Only a plain object can be compared by its own keys. Structured clone carries\n// a Date, Map, or class instance to the widget intact, and those expose no\n// enumerable keys, so walking them would report two different values as equal.\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!isRecord(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n};\n\n// Hosts commonly rebuild an equal context object on every render, and the\n// widget cannot tell a repeated notification apart from a real change. The\n// open index signature on McpAppHostContext admits values JSON rejects (an\n// undefined property value is enough), so leaves the walk cannot compare fall\n// back to identity rather than failing the whole comparison.\nconst isSameHostContext = (a: unknown, b: unknown, depth = 0): boolean => {\n if (Object.is(a, b)) return true;\n if (depth > 100) return false;\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++) {\n if (!isSameHostContext(a[i], b[i], depth + 1)) return false;\n }\n return true;\n }\n if (!isPlainObject(a) || !isPlainObject(b)) return false;\n const aKeys = Object.keys(a);\n return (\n aKeys.length === Object.keys(b).length &&\n aKeys.every(\n (key) =>\n Object.hasOwn(b, key) && isSameHostContext(a[key], b[key], depth + 1),\n )\n );\n};\n\nfunction useBridgeNotify<T>(\n value: T | undefined,\n bridgeRef: MutableRefObject<McpAppBridge | null>,\n widgetReadyRef: MutableRefObject<boolean>,\n pendingRef: MutableRefObject<T | undefined>,\n lastSentRef: MutableRefObject<T | undefined>,\n notify: (bridge: McpAppBridge, v: T) => void,\n isEqual: (sent: T | undefined, next: T) => boolean = Object.is,\n) {\n useEffect(() => {\n if (!bridgeRef.current) return;\n // Nothing to deliver, either because there is no value or because the\n // widget already holds it; a queued value here is superseded and would\n // otherwise flush after initialization as a stale update.\n if (value === undefined || isEqual(lastSentRef.current, value)) {\n pendingRef.current = undefined;\n return;\n }\n if (!widgetReadyRef.current) {\n pendingRef.current = value;\n return;\n }\n notify(bridgeRef.current, value);\n lastSentRef.current = value;\n // oxlint-disable-next-line react/exhaustive-deps -- refs are stable; notify and isEqual are assumed stable; re-run only when value changes\n }, [value]);\n}\n\ntype LiveSnapshot = {\n handlers: McpAppBridgeHandlers | undefined;\n hostInfo: McpAppFrameProps[\"hostInfo\"];\n hostContext: McpAppFrameProps[\"hostContext\"];\n input: unknown;\n output: unknown;\n};\n\ntype FrameLifecycle = {\n onInitialized: () => void;\n onSizeChange: (params: { width?: number; height?: number }) => void;\n};\n\n// Proxy each per-call handler through liveRef so the bridge always dispatches\n// to the latest handler reference (e.g. inline callbacks closing over state).\n// Capability presence is snapshot at mount: a handler added later requires a\n// remount (keyed on resource URI) to expose the capability to the widget.\n// allowedTools is the exception: it is never advertised in the ui/initialize\n// response, so it stays a live getter, which means this object must reach the\n// bridge uncopied and the frame passes its lifecycle work in rather than\n// wrapping the result.\nfunction buildLiveHandlers(\n initial: McpAppBridgeHandlers | undefined,\n liveRef: { readonly current: LiveSnapshot },\n lifecycle: FrameLifecycle,\n): McpAppBridgeHandlers {\n const live = () => liveRef.current.handlers;\n const has = <K extends keyof McpAppBridgeHandlers>(key: K) =>\n initial?.[key] !== undefined;\n const out: McpAppBridgeHandlers = {};\n Object.defineProperty(out, \"allowedTools\", {\n get: () => live()?.allowedTools,\n enumerable: true,\n configurable: true,\n });\n const liveCall = <K extends keyof McpAppBridgeHandlers>(\n key: K,\n ): NonNullable<McpAppBridgeHandlers[K]> =>\n ((p: unknown) => {\n const fn = live()?.[key] as ((p: unknown) => unknown) | undefined;\n if (!fn) {\n throw new Error(`${key} handler is no longer available`);\n }\n return fn(p);\n }) as NonNullable<McpAppBridgeHandlers[K]>;\n if (has(\"callTool\")) out.callTool = liveCall(\"callTool\");\n if (has(\"readResource\")) out.readResource = liveCall(\"readResource\");\n if (has(\"listResources\")) out.listResources = liveCall(\"listResources\");\n if (has(\"openLink\")) out.openLink = liveCall(\"openLink\");\n if (has(\"sendMessage\")) out.sendMessage = liveCall(\"sendMessage\");\n if (has(\"updateModelContext\"))\n out.updateModelContext = liveCall(\"updateModelContext\");\n if (has(\"requestDisplayMode\"))\n out.requestDisplayMode = liveCall(\"requestDisplayMode\");\n out.onSizeChange = (p) => {\n lifecycle.onSizeChange(p);\n live()?.onSizeChange?.(p);\n };\n out.onInitialized = (params) => {\n lifecycle.onInitialized();\n live()?.onInitialized?.(params);\n };\n out.onRequestTeardown = (p) => live()?.onRequestTeardown?.(p);\n out.onLog = (p) => live()?.onLog?.(p);\n out.onError = (e) => live()?.onError?.(e);\n return out;\n}\n\nexport function McpAppFrame({\n app,\n resource,\n input,\n output,\n sandbox,\n handlers,\n hostInfo,\n hostContext,\n maxHeight = DEFAULT_MAX_HEIGHT,\n}: McpAppFrameProps) {\n const bridgeRef = useRef<McpAppBridge | null>(null);\n const lastSentInputRef = useRef<unknown>(undefined);\n const lastSentOutputRef = useRef<unknown>(undefined);\n const lastSentHostContextRef = useRef<McpAppHostContext | undefined>(\n undefined,\n );\n // Per MCP Apps spec, the host should defer notifications until the widget\n // signals readiness via `notifications/initialized`. Until then, we record\n // pending values and flush them on init.\n const widgetReadyRef = useRef(false);\n const pendingInputRef = useRef<unknown>(undefined);\n const pendingOutputRef = useRef<unknown>(undefined);\n const pendingHostContextRef = useRef<McpAppHostContext | undefined>(\n undefined,\n );\n\n const liveRef = useRef<LiveSnapshot>({\n handlers,\n hostInfo,\n hostContext,\n input,\n output,\n });\n useIsomorphicLayoutEffect(() => {\n liveRef.current = {\n handlers,\n hostInfo,\n hostContext,\n input,\n output,\n };\n }, [handlers, hostInfo, hostContext, input, output]);\n\n const createBridge = (\n frame: SandboxHostFrame,\n host: SandboxHostApi,\n ): SandboxBridge => {\n const current = liveRef.current;\n let initTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const flushPending = () => {\n if (widgetReadyRef.current) return;\n widgetReadyRef.current = true;\n const b = bridgeRef.current;\n if (!b) return;\n if (pendingInputRef.current !== undefined) {\n b.notifyToolInput(pendingInputRef.current);\n lastSentInputRef.current = pendingInputRef.current;\n pendingInputRef.current = undefined;\n }\n if (pendingOutputRef.current !== undefined) {\n b.notifyToolResult(pendingOutputRef.current);\n lastSentOutputRef.current = pendingOutputRef.current;\n pendingOutputRef.current = undefined;\n }\n if (pendingHostContextRef.current !== undefined) {\n b.notifyHostContextChanged(pendingHostContextRef.current);\n lastSentHostContextRef.current = pendingHostContextRef.current;\n pendingHostContextRef.current = undefined;\n }\n };\n\n const wrappedHandlers = buildLiveHandlers(current.handlers, liveRef, {\n onInitialized: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n flushPending();\n },\n onSizeChange: (p) => {\n if (p.height != null) host.setHeight(p.height);\n },\n });\n\n // Safety net: if the widget never sends notifications/initialized (broken\n // or non-spec-compliant), flush the queue anyway so the host doesn't\n // appear hung.\n initTimeoutId = setTimeout(() => {\n initTimeoutId = null;\n flushPending();\n }, INIT_TIMEOUT_MS);\n\n const bridge = createMcpAppBridge({\n frame,\n handlers: wrappedHandlers,\n hostInfo: current.hostInfo,\n hostContext: current.hostContext,\n });\n bridgeRef.current = bridge;\n\n if (current.input !== undefined) pendingInputRef.current = current.input;\n if (current.output !== undefined) pendingOutputRef.current = current.output;\n // hostContext is delivered inside the ui/initialize response, where the\n // bridge defaults it to {}; recording that same normalized value keeps the\n // first later change from repeating what the widget already holds.\n lastSentHostContextRef.current = current.hostContext ?? {};\n\n return {\n onMessage: bridge.onMessage,\n dispose: () => {\n if (initTimeoutId !== null) {\n clearTimeout(initTimeoutId);\n initTimeoutId = null;\n }\n bridge.dispose();\n bridgeRef.current = null;\n lastSentInputRef.current = undefined;\n lastSentOutputRef.current = undefined;\n lastSentHostContextRef.current = undefined;\n widgetReadyRef.current = false;\n pendingInputRef.current = undefined;\n pendingOutputRef.current = undefined;\n pendingHostContextRef.current = undefined;\n },\n };\n };\n\n useBridgeNotify(\n input,\n bridgeRef,\n widgetReadyRef,\n pendingInputRef,\n lastSentInputRef,\n (b, v) => b.notifyToolInput(v),\n );\n useBridgeNotify(\n output,\n bridgeRef,\n widgetReadyRef,\n pendingOutputRef,\n lastSentOutputRef,\n (b, v) => b.notifyToolResult(v),\n );\n useBridgeNotify(\n hostContext,\n bridgeRef,\n widgetReadyRef,\n pendingHostContextRef,\n lastSentHostContextRef,\n (b, v) => b.notifyHostContextChanged(v),\n isSameHostContext,\n );\n\n return (\n <SandboxHost\n content={{ html: applyMcpAppCsp(resource.html, resource.meta?.csp) }}\n contentKey={\n app.serverId ? `${app.serverId} ${resource.uri}` : resource.uri\n }\n sandbox={{ ...sandbox, product: sandbox?.product ?? DEFAULT_PRODUCT }}\n maxHeight={maxHeight}\n createBridge={createBridge}\n onError={(err) => liveRef.current.handlers?.onError?.(err)}\n containerProps={{\n \"data-mcp-app-resource\": app.resourceUri,\n \"data-mcp-app-prefers-border\": resource.meta?.prefersBorder\n ? \"\"\n : undefined,\n }}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uCAAoC;AAEpE,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EACtB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uCAAoC;AAEpE,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAMpB,mBAAgB;AAqDjB,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAEjD,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,wBAAwB,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACpE,CAAC;AA+CF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,yBAAyB,GAC9B,YAAY,CAuZd"}
|
package/dist/mcp-apps/bridge.js
CHANGED
|
@@ -6,6 +6,29 @@ const VALID_DISPLAY_MODES = [
|
|
|
6
6
|
"fullscreen",
|
|
7
7
|
"pip"
|
|
8
8
|
];
|
|
9
|
+
function isMcpAppDisplayMode(value) {
|
|
10
|
+
return VALID_DISPLAY_MODES.some((mode) => mode === value);
|
|
11
|
+
}
|
|
12
|
+
function isAppInfo(value) {
|
|
13
|
+
return isRecord(value) && typeof value.name === "string" && typeof value.version === "string";
|
|
14
|
+
}
|
|
15
|
+
function getAppCapabilities(value) {
|
|
16
|
+
if (!isRecord(value)) return void 0;
|
|
17
|
+
const { availableDisplayModes, ...rest } = value;
|
|
18
|
+
return {
|
|
19
|
+
...rest,
|
|
20
|
+
...Array.isArray(availableDisplayModes) ? { availableDisplayModes: Object.values(availableDisplayModes).filter(isMcpAppDisplayMode) } : {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function getInitializeParams(params) {
|
|
24
|
+
if (!isRecord(params)) return {};
|
|
25
|
+
const appCapabilities = getAppCapabilities(params.appCapabilities);
|
|
26
|
+
return {
|
|
27
|
+
...isAppInfo(params.appInfo) ? { appInfo: params.appInfo } : {},
|
|
28
|
+
...appCapabilities ? { appCapabilities } : {},
|
|
29
|
+
...typeof params.protocolVersion === "string" ? { protocolVersion: params.protocolVersion } : {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
9
32
|
const DEFAULT_HOST_INFO = {
|
|
10
33
|
name: "assistant-ui",
|
|
11
34
|
version: "0.1"
|
|
@@ -41,6 +64,7 @@ function isNotification(msg) {
|
|
|
41
64
|
function createMcpAppBridge(opts) {
|
|
42
65
|
const { frame, handlers = {}, hostInfo = DEFAULT_HOST_INFO, hostContext = {} } = opts;
|
|
43
66
|
let disposed = false;
|
|
67
|
+
let initializeParams = {};
|
|
44
68
|
const post = (msg) => {
|
|
45
69
|
if (disposed) return;
|
|
46
70
|
frame.sendMessage(msg);
|
|
@@ -69,7 +93,8 @@ function createMcpAppBridge(opts) {
|
|
|
69
93
|
const params = req.params;
|
|
70
94
|
switch (normalizeMethod(req.method)) {
|
|
71
95
|
case "ui/initialize": {
|
|
72
|
-
|
|
96
|
+
initializeParams = getInitializeParams(params);
|
|
97
|
+
const requestedProtocolVersion = initializeParams.protocolVersion ?? "0.1";
|
|
73
98
|
respond(req.id, { result: {
|
|
74
99
|
protocolVersion: requestedProtocolVersion,
|
|
75
100
|
host: hostInfo,
|
|
@@ -189,7 +214,7 @@ function createMcpAppBridge(opts) {
|
|
|
189
214
|
return;
|
|
190
215
|
}
|
|
191
216
|
const modeParams = params ?? {};
|
|
192
|
-
if (
|
|
217
|
+
if (!isMcpAppDisplayMode(modeParams.mode)) {
|
|
193
218
|
errorResponse(req.id, JSONRPC_ERROR.invalidParams, "requestDisplayMode requires a valid 'mode'");
|
|
194
219
|
return;
|
|
195
220
|
}
|
|
@@ -208,7 +233,7 @@ function createMcpAppBridge(opts) {
|
|
|
208
233
|
try {
|
|
209
234
|
switch (normalizeMethod(note.method)) {
|
|
210
235
|
case "notifications/initialized":
|
|
211
|
-
handlers.onInitialized?.();
|
|
236
|
+
handlers.onInitialized?.(initializeParams);
|
|
212
237
|
return;
|
|
213
238
|
case "notifications/size_changed": {
|
|
214
239
|
const p = note.params ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","names":["SandboxHostFrame","invokeUserCallback","MCP_APP_PROTOCOL_VERSION","McpAppBridgeHandlers","McpAppDisplayMode","McpAppHostContext","McpAppHostInfo","McpAppJsonRpcMessage","McpAppJsonRpcNotification","McpAppJsonRpcRequest","McpAppJsonRpcResponse","isRecord","VALID_DISPLAY_MODES","const","McpAppBridgeFrame","CreateMcpAppBridgeOptions","frame","handlers","hostInfo","hostContext","McpAppBridge","onMessage","event","MessageEvent","dispose","notifyToolInput","input","notifyToolResult","result","notifyHostContextChanged","DEFAULT_HOST_INFO","name","version","METHOD_ALIASES","Record","normalizeMethod","method","JSONRPC_ERROR","parseError","invalidRequest","methodNotFound","invalidParams","internalError","isJsonRpcMessage","value","v","jsonrpc","isRequest","msg","isNotification","createMcpAppBridge","opts","disposed","post","sendMessage","respond","id","payload","error","code","message","data","res","errorResponse","undefined","reportError","Error","onError","bind","handleRequest","req","params","requestedProtocolVersion","protocolVersion","host","capabilities","tools","callTool","resources","readResource","listResources","ui","openLink","requestDisplayMode","updateModelContext","hostCapabilities","openLinks","serverTools","serverResources","text","onLog","logging","callParams","arguments","allowedTools","includes","callArgs","Array","isArray","readParams","uri","linkParams","url","linkProtocol","URL","protocol","modeParams","mode","err","String","handleNotification","note","onInitialized","p","width","height","onSizeChange","onRequestTeardown","content","type","ctx"],"sources":["../../src/mcp-apps/bridge.ts"],"sourcesContent":["import type { SandboxHostFrame } from \"../sandbox-host/SandboxHost\";\nimport { invokeUserCallback } from \"@assistant-ui/core/internal\";\nimport {\n MCP_APP_PROTOCOL_VERSION,\n type McpAppBridgeHandlers,\n type McpAppDisplayMode,\n type McpAppHostContext,\n type McpAppHostInfo,\n type McpAppJsonRpcMessage,\n type McpAppJsonRpcNotification,\n type McpAppJsonRpcRequest,\n type McpAppJsonRpcResponse,\n} from \"./types\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\nconst VALID_DISPLAY_MODES = [\n \"inline\",\n \"fullscreen\",\n \"pip\",\n] as const satisfies readonly McpAppDisplayMode[];\n\nexport type McpAppBridgeFrame = SandboxHostFrame;\n\nexport type CreateMcpAppBridgeOptions = {\n frame: McpAppBridgeFrame;\n handlers?: McpAppBridgeHandlers | undefined;\n hostInfo?: McpAppHostInfo | undefined;\n hostContext?: McpAppHostContext | undefined;\n};\n\nexport type McpAppBridge = {\n onMessage: (event: MessageEvent) => void;\n dispose: () => void;\n notifyToolInput: (input: unknown) => void;\n notifyToolResult: (result: unknown) => void;\n notifyHostContextChanged: (hostContext: McpAppHostContext) => void;\n};\n\nconst DEFAULT_HOST_INFO: McpAppHostInfo = {\n name: \"assistant-ui\",\n version: \"0.1\",\n};\n\n// Accept both the legacy method names and the MCP-UI 2026-01-26 names that\n// `ui/*` capable widgets (e.g. xmcp's host-bridge) emit. Normalize on input\n// so downstream switch statements only need to know the legacy names.\nconst METHOD_ALIASES: Record<string, string> = {\n \"ui/notifications/initialized\": \"notifications/initialized\",\n \"ui/notifications/size-changed\": \"notifications/size_changed\",\n \"ui/request-display-mode\": \"requestDisplayMode\",\n \"ui/open-link\": \"openLink\",\n \"ui/update-model-context\": \"updateModelContext\",\n \"ui/message\": \"sendMessage\",\n \"notifications/message\": \"notifications/log\",\n};\n\nconst normalizeMethod = (method: string): string =>\n METHOD_ALIASES[method] ?? method;\n\nconst JSONRPC_ERROR = {\n parseError: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internalError: -32603,\n} as const;\n\nfunction isJsonRpcMessage(value: unknown): value is McpAppJsonRpcMessage {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return v.jsonrpc === \"2.0\" && typeof v.method === \"string\";\n}\n\nfunction isRequest(msg: McpAppJsonRpcMessage): msg is McpAppJsonRpcRequest {\n return \"id\" in msg;\n}\n\nfunction isNotification(\n msg: McpAppJsonRpcMessage,\n): msg is McpAppJsonRpcNotification {\n return !(\"id\" in msg);\n}\n\nexport function createMcpAppBridge(\n opts: CreateMcpAppBridgeOptions,\n): McpAppBridge {\n const {\n frame,\n handlers = {},\n hostInfo = DEFAULT_HOST_INFO,\n hostContext = {},\n } = opts;\n let disposed = false;\n\n const post = (msg: McpAppJsonRpcMessage) => {\n if (disposed) return;\n frame.sendMessage(msg);\n };\n\n const respond = (\n id: McpAppJsonRpcRequest[\"id\"],\n payload:\n | { result: unknown }\n | { error: { code: number; message: string; data?: unknown } },\n ) => {\n const res: McpAppJsonRpcResponse = {\n jsonrpc: \"2.0\",\n id,\n ...payload,\n };\n post(res);\n };\n\n const errorResponse = (\n id: McpAppJsonRpcRequest[\"id\"],\n code: number,\n message: string,\n data?: unknown,\n ) => {\n respond(id, {\n error: {\n code,\n message,\n ...(data !== undefined ? { data } : {}),\n },\n });\n };\n\n const reportError = (error: Error) => {\n if (disposed) return;\n invokeUserCallback(\n \"assistant-ui\",\n \"MCP App onError\",\n handlers.onError?.bind(handlers),\n error,\n );\n };\n\n const handleRequest = async (req: McpAppJsonRpcRequest) => {\n try {\n const params = req.params;\n\n switch (normalizeMethod(req.method)) {\n case \"ui/initialize\": {\n const requestedProtocolVersion =\n isRecord(params) && typeof params.protocolVersion === \"string\"\n ? params.protocolVersion\n : MCP_APP_PROTOCOL_VERSION;\n respond(req.id, {\n result: {\n protocolVersion: requestedProtocolVersion,\n host: hostInfo,\n hostInfo,\n hostContext,\n capabilities: {\n tools: handlers.callTool ? {} : undefined,\n resources:\n handlers.readResource || handlers.listResources\n ? {}\n : undefined,\n ui: {\n sendMessage: !!handlers.sendMessage,\n openLink: !!handlers.openLink,\n requestDisplayMode: !!handlers.requestDisplayMode,\n updateModelContext: !!handlers.updateModelContext,\n },\n },\n hostCapabilities: {\n ...(handlers.openLink ? { openLinks: {} } : {}),\n ...(handlers.callTool ? { serverTools: {} } : {}),\n ...(handlers.readResource || handlers.listResources\n ? { serverResources: {} }\n : {}),\n ...(handlers.updateModelContext\n ? { updateModelContext: { text: {} } }\n : {}),\n ...(handlers.sendMessage ? { message: { text: {} } } : {}),\n ...(handlers.onLog ? { logging: {} } : {}),\n },\n },\n });\n return;\n }\n\n case \"tools/call\": {\n if (!handlers.callTool) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"tools/call is not supported by this host\",\n );\n return;\n }\n const callParams = (params ?? {}) as {\n name?: unknown;\n arguments?: unknown;\n };\n if (typeof callParams.name !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call requires a string 'name'\",\n );\n return;\n }\n if (\n handlers.allowedTools &&\n !handlers.allowedTools.includes(callParams.name)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n `tool '${callParams.name}' is not allowed for this app`,\n );\n return;\n }\n let callArgs: Record<string, unknown> | undefined;\n if (callParams.arguments !== undefined) {\n if (\n callParams.arguments === null ||\n typeof callParams.arguments !== \"object\" ||\n Array.isArray(callParams.arguments)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call 'arguments' must be an object\",\n );\n return;\n }\n callArgs = callParams.arguments as Record<string, unknown>;\n }\n const result = await handlers.callTool({\n name: callParams.name,\n ...(callArgs !== undefined ? { arguments: callArgs } : {}),\n });\n respond(req.id, { result });\n return;\n }\n\n case \"resources/read\": {\n if (!handlers.readResource) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/read is not supported by this host\",\n );\n return;\n }\n const readParams = (params ?? {}) as { uri?: unknown };\n if (typeof readParams.uri !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"resources/read requires a string 'uri'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.readResource({ uri: readParams.uri }),\n });\n return;\n }\n\n case \"resources/list\": {\n if (!handlers.listResources) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/list is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.listResources(params)) ?? null,\n });\n return;\n }\n\n case \"openLink\": {\n if (!handlers.openLink) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"openLink is not supported by this host\",\n );\n return;\n }\n const linkParams = (params ?? {}) as { url?: unknown };\n if (typeof linkParams.url !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a string 'url'\",\n );\n return;\n }\n let linkProtocol: string;\n try {\n linkProtocol = new URL(linkParams.url).protocol;\n } catch {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a valid URL\",\n );\n return;\n }\n if (linkProtocol !== \"https:\" && linkProtocol !== \"http:\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink only accepts http(s) URLs\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.openLink({ url: linkParams.url }),\n });\n return;\n }\n\n case \"sendMessage\": {\n if (!handlers.sendMessage) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"sendMessage is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.sendMessage(params)) ?? null,\n });\n return;\n }\n\n case \"updateModelContext\": {\n if (!handlers.updateModelContext) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"updateModelContext is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.updateModelContext(params)) ?? null,\n });\n return;\n }\n\n case \"requestDisplayMode\": {\n if (!handlers.requestDisplayMode) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"requestDisplayMode is not supported by this host\",\n );\n return;\n }\n const modeParams = (params ?? {}) as { mode?: unknown };\n if (\n typeof modeParams.mode !== \"string\" ||\n !VALID_DISPLAY_MODES.includes(modeParams.mode as McpAppDisplayMode)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"requestDisplayMode requires a valid 'mode'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.requestDisplayMode({\n mode: modeParams.mode as McpAppDisplayMode,\n }),\n });\n return;\n }\n\n default: {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n `Unknown method: ${req.method}`,\n );\n }\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n errorResponse(req.id, JSONRPC_ERROR.internalError, error.message);\n }\n };\n\n const handleNotification = (note: McpAppJsonRpcNotification) => {\n try {\n switch (normalizeMethod(note.method)) {\n case \"notifications/initialized\": {\n handlers.onInitialized?.();\n return;\n }\n case \"notifications/size_changed\": {\n const p = (note.params ?? {}) as { width?: number; height?: number };\n handlers.onSizeChange?.({\n ...(typeof p.width === \"number\" ? { width: p.width } : {}),\n ...(typeof p.height === \"number\" ? { height: p.height } : {}),\n });\n return;\n }\n case \"notifications/log\": {\n handlers.onLog?.(note.params);\n return;\n }\n case \"notifications/request_teardown\": {\n handlers.onRequestTeardown?.(note.params);\n return;\n }\n case \"notifications/error\": {\n const p = (note.params ?? {}) as { message?: string };\n reportError(\n new Error(\n typeof p.message === \"string\" ? p.message : \"Widget error\",\n ),\n );\n return;\n }\n default:\n return;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n }\n };\n\n // The host applies the cross-origin guard before delegating; this only\n // validates the JSON-RPC envelope.\n const onMessage = (event: MessageEvent) => {\n if (disposed) return;\n if (!isJsonRpcMessage(event.data)) return;\n\n const msg = event.data;\n if (isRequest(msg)) {\n void handleRequest(msg);\n } else if (isNotification(msg)) {\n handleNotification(msg);\n }\n };\n\n return {\n onMessage,\n dispose: () => {\n disposed = true;\n },\n notifyToolInput: (input: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/input\",\n params: { input },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-input\",\n params: isRecord(input) ? { arguments: input } : {},\n });\n },\n notifyToolResult: (result: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/result\",\n params: { result },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-result\",\n params: isRecord(result)\n ? result\n : { content: [{ type: \"text\", text: String(result) }] },\n });\n },\n notifyHostContextChanged: (ctx: McpAppHostContext) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/host_context/changed\",\n params: ctx,\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/host-context-changed\",\n params: ctx,\n });\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bridge.js","names":["SandboxHostFrame","invokeUserCallback","MCP_APP_PROTOCOL_VERSION","McpAppBridgeHandlers","McpAppDisplayMode","McpAppHostContext","McpAppHostInfo","McpAppInitializeParams","McpAppJsonRpcMessage","McpAppJsonRpcNotification","McpAppJsonRpcRequest","McpAppJsonRpcResponse","isRecord","VALID_DISPLAY_MODES","const","isMcpAppDisplayMode","value","some","mode","isAppInfo","NonNullable","name","version","getAppCapabilities","undefined","availableDisplayModes","rest","Array","isArray","Object","values","filter","getInitializeParams","params","appCapabilities","appInfo","protocolVersion","McpAppBridgeFrame","CreateMcpAppBridgeOptions","frame","handlers","hostInfo","hostContext","McpAppBridge","onMessage","event","MessageEvent","dispose","notifyToolInput","input","notifyToolResult","result","notifyHostContextChanged","DEFAULT_HOST_INFO","METHOD_ALIASES","Record","normalizeMethod","method","JSONRPC_ERROR","parseError","invalidRequest","methodNotFound","invalidParams","internalError","isJsonRpcMessage","v","jsonrpc","isRequest","msg","isNotification","createMcpAppBridge","opts","disposed","initializeParams","post","sendMessage","respond","id","payload","error","code","message","data","res","errorResponse","reportError","Error","onError","bind","handleRequest","req","requestedProtocolVersion","host","capabilities","tools","callTool","resources","readResource","listResources","ui","openLink","requestDisplayMode","updateModelContext","hostCapabilities","openLinks","serverTools","serverResources","text","onLog","logging","callParams","arguments","allowedTools","includes","callArgs","readParams","uri","linkParams","url","linkProtocol","URL","protocol","modeParams","err","String","handleNotification","note","onInitialized","p","width","height","onSizeChange","onRequestTeardown","content","type","ctx"],"sources":["../../src/mcp-apps/bridge.ts"],"sourcesContent":["import type { SandboxHostFrame } from \"../sandbox-host/SandboxHost\";\nimport { invokeUserCallback } from \"@assistant-ui/core/internal\";\nimport {\n MCP_APP_PROTOCOL_VERSION,\n type McpAppBridgeHandlers,\n type McpAppDisplayMode,\n type McpAppHostContext,\n type McpAppHostInfo,\n type McpAppInitializeParams,\n type McpAppJsonRpcMessage,\n type McpAppJsonRpcNotification,\n type McpAppJsonRpcRequest,\n type McpAppJsonRpcResponse,\n} from \"./types\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\nconst VALID_DISPLAY_MODES = [\n \"inline\",\n \"fullscreen\",\n \"pip\",\n] as const satisfies readonly McpAppDisplayMode[];\n\nfunction isMcpAppDisplayMode(value: unknown): value is McpAppDisplayMode {\n return VALID_DISPLAY_MODES.some((mode) => mode === value);\n}\n\nfunction isAppInfo(\n value: unknown,\n): value is NonNullable<McpAppInitializeParams[\"appInfo\"]> {\n return (\n isRecord(value) &&\n typeof value.name === \"string\" &&\n typeof value.version === \"string\"\n );\n}\n\nfunction getAppCapabilities(\n value: unknown,\n): McpAppInitializeParams[\"appCapabilities\"] {\n if (!isRecord(value)) return undefined;\n const { availableDisplayModes, ...rest } = value;\n return {\n ...rest,\n // Object.values reads only the entries present, so a sparse list claiming a huge length stays cheap, and the list's own methods are never called.\n ...(Array.isArray(availableDisplayModes)\n ? {\n availableDisplayModes: Object.values(availableDisplayModes).filter(\n isMcpAppDisplayMode,\n ),\n }\n : {}),\n };\n}\n\nfunction getInitializeParams(params: unknown): McpAppInitializeParams {\n if (!isRecord(params)) return {};\n const appCapabilities = getAppCapabilities(params.appCapabilities);\n return {\n ...(isAppInfo(params.appInfo) ? { appInfo: params.appInfo } : {}),\n ...(appCapabilities ? { appCapabilities } : {}),\n ...(typeof params.protocolVersion === \"string\"\n ? { protocolVersion: params.protocolVersion }\n : {}),\n };\n}\n\nexport type McpAppBridgeFrame = SandboxHostFrame;\n\nexport type CreateMcpAppBridgeOptions = {\n frame: McpAppBridgeFrame;\n handlers?: McpAppBridgeHandlers | undefined;\n hostInfo?: McpAppHostInfo | undefined;\n hostContext?: McpAppHostContext | undefined;\n};\n\nexport type McpAppBridge = {\n onMessage: (event: MessageEvent) => void;\n dispose: () => void;\n notifyToolInput: (input: unknown) => void;\n notifyToolResult: (result: unknown) => void;\n notifyHostContextChanged: (hostContext: McpAppHostContext) => void;\n};\n\nconst DEFAULT_HOST_INFO: McpAppHostInfo = {\n name: \"assistant-ui\",\n version: \"0.1\",\n};\n\n// Accept both the legacy method names and the MCP-UI 2026-01-26 names that\n// `ui/*` capable widgets (e.g. xmcp's host-bridge) emit. Normalize on input\n// so downstream switch statements only need to know the legacy names.\nconst METHOD_ALIASES: Record<string, string> = {\n \"ui/notifications/initialized\": \"notifications/initialized\",\n \"ui/notifications/size-changed\": \"notifications/size_changed\",\n \"ui/request-display-mode\": \"requestDisplayMode\",\n \"ui/open-link\": \"openLink\",\n \"ui/update-model-context\": \"updateModelContext\",\n \"ui/message\": \"sendMessage\",\n \"notifications/message\": \"notifications/log\",\n};\n\nconst normalizeMethod = (method: string): string =>\n METHOD_ALIASES[method] ?? method;\n\nconst JSONRPC_ERROR = {\n parseError: -32700,\n invalidRequest: -32600,\n methodNotFound: -32601,\n invalidParams: -32602,\n internalError: -32603,\n} as const;\n\nfunction isJsonRpcMessage(value: unknown): value is McpAppJsonRpcMessage {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return v.jsonrpc === \"2.0\" && typeof v.method === \"string\";\n}\n\nfunction isRequest(msg: McpAppJsonRpcMessage): msg is McpAppJsonRpcRequest {\n return \"id\" in msg;\n}\n\nfunction isNotification(\n msg: McpAppJsonRpcMessage,\n): msg is McpAppJsonRpcNotification {\n return !(\"id\" in msg);\n}\n\nexport function createMcpAppBridge(\n opts: CreateMcpAppBridgeOptions,\n): McpAppBridge {\n const {\n frame,\n handlers = {},\n hostInfo = DEFAULT_HOST_INFO,\n hostContext = {},\n } = opts;\n let disposed = false;\n let initializeParams: McpAppInitializeParams = {};\n\n const post = (msg: McpAppJsonRpcMessage) => {\n if (disposed) return;\n frame.sendMessage(msg);\n };\n\n const respond = (\n id: McpAppJsonRpcRequest[\"id\"],\n payload:\n | { result: unknown }\n | { error: { code: number; message: string; data?: unknown } },\n ) => {\n const res: McpAppJsonRpcResponse = {\n jsonrpc: \"2.0\",\n id,\n ...payload,\n };\n post(res);\n };\n\n const errorResponse = (\n id: McpAppJsonRpcRequest[\"id\"],\n code: number,\n message: string,\n data?: unknown,\n ) => {\n respond(id, {\n error: {\n code,\n message,\n ...(data !== undefined ? { data } : {}),\n },\n });\n };\n\n const reportError = (error: Error) => {\n if (disposed) return;\n invokeUserCallback(\n \"assistant-ui\",\n \"MCP App onError\",\n handlers.onError?.bind(handlers),\n error,\n );\n };\n\n const handleRequest = async (req: McpAppJsonRpcRequest) => {\n try {\n const params = req.params;\n\n switch (normalizeMethod(req.method)) {\n case \"ui/initialize\": {\n initializeParams = getInitializeParams(params);\n const requestedProtocolVersion =\n initializeParams.protocolVersion ?? MCP_APP_PROTOCOL_VERSION;\n respond(req.id, {\n result: {\n protocolVersion: requestedProtocolVersion,\n host: hostInfo,\n hostInfo,\n hostContext,\n capabilities: {\n tools: handlers.callTool ? {} : undefined,\n resources:\n handlers.readResource || handlers.listResources\n ? {}\n : undefined,\n ui: {\n sendMessage: !!handlers.sendMessage,\n openLink: !!handlers.openLink,\n requestDisplayMode: !!handlers.requestDisplayMode,\n updateModelContext: !!handlers.updateModelContext,\n },\n },\n hostCapabilities: {\n ...(handlers.openLink ? { openLinks: {} } : {}),\n ...(handlers.callTool ? { serverTools: {} } : {}),\n ...(handlers.readResource || handlers.listResources\n ? { serverResources: {} }\n : {}),\n ...(handlers.updateModelContext\n ? { updateModelContext: { text: {} } }\n : {}),\n ...(handlers.sendMessage ? { message: { text: {} } } : {}),\n ...(handlers.onLog ? { logging: {} } : {}),\n },\n },\n });\n return;\n }\n\n case \"tools/call\": {\n if (!handlers.callTool) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"tools/call is not supported by this host\",\n );\n return;\n }\n const callParams = (params ?? {}) as {\n name?: unknown;\n arguments?: unknown;\n };\n if (typeof callParams.name !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call requires a string 'name'\",\n );\n return;\n }\n if (\n handlers.allowedTools &&\n !handlers.allowedTools.includes(callParams.name)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n `tool '${callParams.name}' is not allowed for this app`,\n );\n return;\n }\n let callArgs: Record<string, unknown> | undefined;\n if (callParams.arguments !== undefined) {\n if (\n callParams.arguments === null ||\n typeof callParams.arguments !== \"object\" ||\n Array.isArray(callParams.arguments)\n ) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"tools/call 'arguments' must be an object\",\n );\n return;\n }\n callArgs = callParams.arguments as Record<string, unknown>;\n }\n const result = await handlers.callTool({\n name: callParams.name,\n ...(callArgs !== undefined ? { arguments: callArgs } : {}),\n });\n respond(req.id, { result });\n return;\n }\n\n case \"resources/read\": {\n if (!handlers.readResource) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/read is not supported by this host\",\n );\n return;\n }\n const readParams = (params ?? {}) as { uri?: unknown };\n if (typeof readParams.uri !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"resources/read requires a string 'uri'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.readResource({ uri: readParams.uri }),\n });\n return;\n }\n\n case \"resources/list\": {\n if (!handlers.listResources) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"resources/list is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.listResources(params)) ?? null,\n });\n return;\n }\n\n case \"openLink\": {\n if (!handlers.openLink) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"openLink is not supported by this host\",\n );\n return;\n }\n const linkParams = (params ?? {}) as { url?: unknown };\n if (typeof linkParams.url !== \"string\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a string 'url'\",\n );\n return;\n }\n let linkProtocol: string;\n try {\n linkProtocol = new URL(linkParams.url).protocol;\n } catch {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink requires a valid URL\",\n );\n return;\n }\n if (linkProtocol !== \"https:\" && linkProtocol !== \"http:\") {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"openLink only accepts http(s) URLs\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.openLink({ url: linkParams.url }),\n });\n return;\n }\n\n case \"sendMessage\": {\n if (!handlers.sendMessage) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"sendMessage is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.sendMessage(params)) ?? null,\n });\n return;\n }\n\n case \"updateModelContext\": {\n if (!handlers.updateModelContext) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"updateModelContext is not supported by this host\",\n );\n return;\n }\n respond(req.id, {\n result: (await handlers.updateModelContext(params)) ?? null,\n });\n return;\n }\n\n case \"requestDisplayMode\": {\n if (!handlers.requestDisplayMode) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n \"requestDisplayMode is not supported by this host\",\n );\n return;\n }\n const modeParams = (params ?? {}) as { mode?: unknown };\n if (!isMcpAppDisplayMode(modeParams.mode)) {\n errorResponse(\n req.id,\n JSONRPC_ERROR.invalidParams,\n \"requestDisplayMode requires a valid 'mode'\",\n );\n return;\n }\n respond(req.id, {\n result: await handlers.requestDisplayMode({\n mode: modeParams.mode,\n }),\n });\n return;\n }\n\n default: {\n errorResponse(\n req.id,\n JSONRPC_ERROR.methodNotFound,\n `Unknown method: ${req.method}`,\n );\n }\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n errorResponse(req.id, JSONRPC_ERROR.internalError, error.message);\n }\n };\n\n const handleNotification = (note: McpAppJsonRpcNotification) => {\n try {\n switch (normalizeMethod(note.method)) {\n case \"notifications/initialized\": {\n handlers.onInitialized?.(initializeParams);\n return;\n }\n case \"notifications/size_changed\": {\n const p = (note.params ?? {}) as { width?: number; height?: number };\n handlers.onSizeChange?.({\n ...(typeof p.width === \"number\" ? { width: p.width } : {}),\n ...(typeof p.height === \"number\" ? { height: p.height } : {}),\n });\n return;\n }\n case \"notifications/log\": {\n handlers.onLog?.(note.params);\n return;\n }\n case \"notifications/request_teardown\": {\n handlers.onRequestTeardown?.(note.params);\n return;\n }\n case \"notifications/error\": {\n const p = (note.params ?? {}) as { message?: string };\n reportError(\n new Error(\n typeof p.message === \"string\" ? p.message : \"Widget error\",\n ),\n );\n return;\n }\n default:\n return;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportError(error);\n }\n };\n\n // The host applies the cross-origin guard before delegating; this only\n // validates the JSON-RPC envelope.\n const onMessage = (event: MessageEvent) => {\n if (disposed) return;\n if (!isJsonRpcMessage(event.data)) return;\n\n const msg = event.data;\n if (isRequest(msg)) {\n void handleRequest(msg);\n } else if (isNotification(msg)) {\n handleNotification(msg);\n }\n };\n\n return {\n onMessage,\n dispose: () => {\n disposed = true;\n },\n notifyToolInput: (input: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/input\",\n params: { input },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-input\",\n params: isRecord(input) ? { arguments: input } : {},\n });\n },\n notifyToolResult: (result: unknown) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/tools/call/result\",\n params: { result },\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/tool-result\",\n params: isRecord(result)\n ? result\n : { content: [{ type: \"text\", text: String(result) }] },\n });\n },\n notifyHostContextChanged: (ctx: McpAppHostContext) => {\n post({\n jsonrpc: \"2.0\",\n method: \"notifications/host_context/changed\",\n params: ctx,\n });\n post({\n jsonrpc: \"2.0\",\n method: \"ui/notifications/host-context-changed\",\n params: ctx,\n });\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/mcp-apps/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { McpAppRenderer, type McpAppPartOptions, type McpAppRendererOptions, } from "./McpAppRenderer.js";
|
|
2
2
|
export { McpAppsRemoteHost } from "./McpAppsRemoteHost.js";
|
|
3
3
|
export { getMcpAppFromToolPart } from "./utils.js";
|
|
4
|
-
export type { McpAppMetadata, McpAppResource, McpAppResourceMeta, McpAppResourceCSP, McpAppSandboxConfig, McpAppHostInfo, McpAppHostContext, McpAppDisplayMode, McpAppsHost, McpAppsRemoteHostOptions, McpAppToolCallParams, McpAppBridgeHandlers, ToolCallMessagePartMcpMetadata, } from "./types.js";
|
|
4
|
+
export type { McpAppMetadata, McpAppResource, McpAppResourceMeta, McpAppResourceCSP, McpAppSandboxConfig, McpAppHostInfo, McpAppHostContext, McpAppDisplayMode, McpAppsHost, McpAppsRemoteHostOptions, McpAppToolCallParams, McpAppInitializeParams, McpAppBridgeHandlers, ToolCallMessagePartMcpMetadata, } from "./types.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,4BAAyB;AAC1B,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AACxD,OAAO,EAAE,qBAAqB,EAAE,mBAAgB;AAChD,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,GAC/B,mBAAgB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,4BAAyB;AAC1B,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AACxD,OAAO,EAAE,qBAAqB,EAAE,mBAAgB;AAChD,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,8BAA8B,GAC/B,mBAAgB"}
|
package/dist/mcp-apps/types.d.ts
CHANGED
|
@@ -69,6 +69,23 @@ export type McpAppToolCallParams = {
|
|
|
69
69
|
name: string;
|
|
70
70
|
arguments?: Record<string, unknown>;
|
|
71
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* The params of the app's `ui/initialize` request, as `onInitialized`
|
|
74
|
+
* receives them. A field that fails validation is omitted, and
|
|
75
|
+
* `availableDisplayModes` keeps only the modes the bridge recognizes.
|
|
76
|
+
*/
|
|
77
|
+
export type McpAppInitializeParams = {
|
|
78
|
+
appInfo?: {
|
|
79
|
+
name: string;
|
|
80
|
+
version: string;
|
|
81
|
+
[k: string]: unknown;
|
|
82
|
+
};
|
|
83
|
+
appCapabilities?: {
|
|
84
|
+
availableDisplayModes?: McpAppDisplayMode[];
|
|
85
|
+
[k: string]: unknown;
|
|
86
|
+
};
|
|
87
|
+
protocolVersion?: string;
|
|
88
|
+
};
|
|
72
89
|
export type McpAppBridgeHandlers = {
|
|
73
90
|
allowedTools?: readonly string[];
|
|
74
91
|
callTool?: (params: McpAppToolCallParams) => Promise<unknown> | unknown;
|
|
@@ -92,7 +109,7 @@ export type McpAppBridgeHandlers = {
|
|
|
92
109
|
width?: number;
|
|
93
110
|
height?: number;
|
|
94
111
|
}) => void;
|
|
95
|
-
onInitialized?: () => void;
|
|
112
|
+
onInitialized?: (params: McpAppInitializeParams) => void;
|
|
96
113
|
onRequestTeardown?: (params: unknown) => void;
|
|
97
114
|
onLog?: (params: unknown) => void;
|
|
98
115
|
onError?: (error: Error) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["McpAppMetadata","ToolCallMessagePartMcpMetadata","SandboxHostConfig","MCP_APP_MIME_TYPE","const","MCP_APP_PROTOCOL_VERSION","McpAppResourceCSP","connectDomains","resourceDomains","frameDomains","baseUriDomains","k","McpAppResourceMeta","prefersBorder","csp","permissions","Record","McpAppResource","uri","mimeType","html","meta","McpAppDisplayMode","McpAppHostContext","theme","displayMode","availableDisplayModes","McpAppHostInfo","name","version","McpAppsHost","loadResource","params","serverId","Promise","callTool","McpAppToolCallParams","readResource","listResources","McpAppsRemoteHostOptions","url","fetch","headers","arguments","McpAppBridgeHandlers","allowedTools","openLink","sendMessage","updateModelContext","requestDisplayMode","mode","onSizeChange","width","height","onInitialized","onRequestTeardown","onLog","onError","error","Error","McpAppSandboxConfig","McpAppFrameProps","app","resource","input","output","sandbox","handlers","hostInfo","hostContext","maxHeight","McpAppJsonRpcRequest","jsonrpc","id","method","McpAppJsonRpcNotification","McpAppJsonRpcError","code","message","data","McpAppJsonRpcResponse","result","McpAppJsonRpcMessage"],"sources":["../../src/mcp-apps/types.ts"],"sourcesContent":["import type {\n McpAppMetadata,\n ToolCallMessagePartMcpMetadata,\n} from \"@assistant-ui/core\";\nimport type { SandboxHostConfig } from \"../sandbox-host/SandboxHost\";\n\nexport type { McpAppMetadata, ToolCallMessagePartMcpMetadata };\n\nexport const MCP_APP_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\nexport const MCP_APP_PROTOCOL_VERSION = \"0.1\" as const;\n\nexport type McpAppResourceCSP = {\n connectDomains?: string[];\n resourceDomains?: string[];\n frameDomains?: string[];\n baseUriDomains?: string[];\n [k: string]: unknown;\n};\n\nexport type McpAppResourceMeta = {\n prefersBorder?: boolean;\n csp?: McpAppResourceCSP;\n permissions?: Record<string, unknown>;\n [k: string]: unknown;\n};\n\nexport type McpAppResource = {\n uri: string;\n mimeType: typeof MCP_APP_MIME_TYPE;\n html: string;\n meta?: McpAppResourceMeta;\n};\n\nexport type McpAppDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\nexport type McpAppHostContext = {\n theme?: \"light\" | \"dark\";\n displayMode?: McpAppDisplayMode;\n availableDisplayModes?: McpAppDisplayMode[];\n [k: string]: unknown;\n};\n\nexport type McpAppHostInfo = {\n name: string;\n version: string;\n};\n\n/**\n * What `McpAppRenderer` needs from its host — the data-plane operations\n * the widget can request. Provided by a host resource like\n * `McpAppsRemoteHost`.\n */\nexport type McpAppsHost = {\n loadResource: (params: {\n uri: string;\n serverId?: string;\n }) => Promise<McpAppResource>;\n callTool: (\n params: McpAppToolCallParams & { serverId?: string },\n ) => Promise<unknown>;\n readResource: (params: {\n uri: string;\n serverId?: string;\n }) => Promise<unknown>;\n listResources: (params?: unknown) => Promise<unknown>;\n};\n\n/**\n * Options for `McpAppsRemoteHost`. The host POSTs `{ method, params }` to\n * `url` and expects JSON responses. Params may carry `serverId` for host-side routing. Method names sent:\n * - `mcp-apps/read-resource` (`{ uri, serverId? }`) → `McpAppResource`\n * - `tools/call` (`{ name, arguments?, serverId? }`) → tool result\n * - `resources/read` (`{ uri, serverId? }`) → resource read result\n * - `resources/list` (`{ serverId?, ...params }?`) → list result\n */\nexport type McpAppsRemoteHostOptions = {\n url: string;\n fetch?: typeof fetch;\n headers?:\n | Record<string, string>\n | (() => Record<string, string> | Promise<Record<string, string>>);\n};\n\nexport type McpAppToolCallParams = {\n name: string;\n arguments?: Record<string, unknown>;\n};\n\nexport type McpAppBridgeHandlers = {\n allowedTools?: readonly string[];\n callTool?: (params: McpAppToolCallParams) => Promise<unknown> | unknown;\n readResource?: (params: { uri: string }) => Promise<unknown> | unknown;\n listResources?: (params?: unknown) => Promise<unknown> | unknown;\n openLink?: (params: { url: string }) => Promise<unknown> | unknown;\n sendMessage?: (params: unknown) => Promise<unknown> | unknown;\n updateModelContext?: (params: unknown) => Promise<unknown> | unknown;\n requestDisplayMode?: (params: {\n mode: McpAppDisplayMode;\n }) => Promise<{ mode: McpAppDisplayMode }> | { mode: McpAppDisplayMode };\n onSizeChange?: (params: { width?: number; height?: number }) => void;\n onInitialized?: () => void;\n onRequestTeardown?: (params: unknown) => void;\n onLog?: (params: unknown) => void;\n onError?: (error: Error) => void;\n};\n\nexport type McpAppSandboxConfig = SandboxHostConfig;\n\nexport type McpAppFrameProps = {\n app: McpAppMetadata;\n resource: McpAppResource;\n input?: unknown;\n output?: unknown;\n sandbox?: McpAppSandboxConfig | undefined;\n handlers?: McpAppBridgeHandlers | undefined;\n hostInfo?: McpAppHostInfo | undefined;\n hostContext?: McpAppHostContext | undefined;\n /**\n * Upper bound (in pixels) for the auto-resize height driven by the widget's\n * `notifications/size_changed`. Defaults to 800.\n */\n maxHeight?: number | undefined;\n};\n\nexport type McpAppJsonRpcRequest = {\n jsonrpc: \"2.0\";\n id: string | number;\n method: string;\n params?: unknown;\n};\n\nexport type McpAppJsonRpcNotification = {\n jsonrpc: \"2.0\";\n method: string;\n params?: unknown;\n};\n\nexport type McpAppJsonRpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\nexport type McpAppJsonRpcResponse =\n | {\n jsonrpc: \"2.0\";\n id: string | number;\n result: unknown;\n error?: never;\n }\n | {\n jsonrpc: \"2.0\";\n id: string | number;\n result?: never;\n error: McpAppJsonRpcError;\n };\n\nexport type McpAppJsonRpcMessage =\n | McpAppJsonRpcRequest\n | McpAppJsonRpcNotification\n | McpAppJsonRpcResponse;\n"],"mappings":";AAQA,MAAaG,oBAAoB;AAEjC,MAAaE,2BAA2B"}
|
|
1
|
+
{"version":3,"file":"types.js","names":["McpAppMetadata","ToolCallMessagePartMcpMetadata","SandboxHostConfig","MCP_APP_MIME_TYPE","const","MCP_APP_PROTOCOL_VERSION","McpAppResourceCSP","connectDomains","resourceDomains","frameDomains","baseUriDomains","k","McpAppResourceMeta","prefersBorder","csp","permissions","Record","McpAppResource","uri","mimeType","html","meta","McpAppDisplayMode","McpAppHostContext","theme","displayMode","availableDisplayModes","McpAppHostInfo","name","version","McpAppsHost","loadResource","params","serverId","Promise","callTool","McpAppToolCallParams","readResource","listResources","McpAppsRemoteHostOptions","url","fetch","headers","arguments","McpAppInitializeParams","appInfo","appCapabilities","protocolVersion","McpAppBridgeHandlers","allowedTools","openLink","sendMessage","updateModelContext","requestDisplayMode","mode","onSizeChange","width","height","onInitialized","onRequestTeardown","onLog","onError","error","Error","McpAppSandboxConfig","McpAppFrameProps","app","resource","input","output","sandbox","handlers","hostInfo","hostContext","maxHeight","McpAppJsonRpcRequest","jsonrpc","id","method","McpAppJsonRpcNotification","McpAppJsonRpcError","code","message","data","McpAppJsonRpcResponse","result","McpAppJsonRpcMessage"],"sources":["../../src/mcp-apps/types.ts"],"sourcesContent":["import type {\n McpAppMetadata,\n ToolCallMessagePartMcpMetadata,\n} from \"@assistant-ui/core\";\nimport type { SandboxHostConfig } from \"../sandbox-host/SandboxHost\";\n\nexport type { McpAppMetadata, ToolCallMessagePartMcpMetadata };\n\nexport const MCP_APP_MIME_TYPE = \"text/html;profile=mcp-app\" as const;\n\nexport const MCP_APP_PROTOCOL_VERSION = \"0.1\" as const;\n\nexport type McpAppResourceCSP = {\n connectDomains?: string[];\n resourceDomains?: string[];\n frameDomains?: string[];\n baseUriDomains?: string[];\n [k: string]: unknown;\n};\n\nexport type McpAppResourceMeta = {\n prefersBorder?: boolean;\n csp?: McpAppResourceCSP;\n permissions?: Record<string, unknown>;\n [k: string]: unknown;\n};\n\nexport type McpAppResource = {\n uri: string;\n mimeType: typeof MCP_APP_MIME_TYPE;\n html: string;\n meta?: McpAppResourceMeta;\n};\n\nexport type McpAppDisplayMode = \"inline\" | \"fullscreen\" | \"pip\";\n\nexport type McpAppHostContext = {\n theme?: \"light\" | \"dark\";\n displayMode?: McpAppDisplayMode;\n availableDisplayModes?: McpAppDisplayMode[];\n [k: string]: unknown;\n};\n\nexport type McpAppHostInfo = {\n name: string;\n version: string;\n};\n\n/**\n * What `McpAppRenderer` needs from its host — the data-plane operations\n * the widget can request. Provided by a host resource like\n * `McpAppsRemoteHost`.\n */\nexport type McpAppsHost = {\n loadResource: (params: {\n uri: string;\n serverId?: string;\n }) => Promise<McpAppResource>;\n callTool: (\n params: McpAppToolCallParams & { serverId?: string },\n ) => Promise<unknown>;\n readResource: (params: {\n uri: string;\n serverId?: string;\n }) => Promise<unknown>;\n listResources: (params?: unknown) => Promise<unknown>;\n};\n\n/**\n * Options for `McpAppsRemoteHost`. The host POSTs `{ method, params }` to\n * `url` and expects JSON responses. Params may carry `serverId` for host-side routing. Method names sent:\n * - `mcp-apps/read-resource` (`{ uri, serverId? }`) → `McpAppResource`\n * - `tools/call` (`{ name, arguments?, serverId? }`) → tool result\n * - `resources/read` (`{ uri, serverId? }`) → resource read result\n * - `resources/list` (`{ serverId?, ...params }?`) → list result\n */\nexport type McpAppsRemoteHostOptions = {\n url: string;\n fetch?: typeof fetch;\n headers?:\n | Record<string, string>\n | (() => Record<string, string> | Promise<Record<string, string>>);\n};\n\nexport type McpAppToolCallParams = {\n name: string;\n arguments?: Record<string, unknown>;\n};\n\n/**\n * The params of the app's `ui/initialize` request, as `onInitialized`\n * receives them. A field that fails validation is omitted, and\n * `availableDisplayModes` keeps only the modes the bridge recognizes.\n */\nexport type McpAppInitializeParams = {\n appInfo?: { name: string; version: string; [k: string]: unknown };\n appCapabilities?: {\n availableDisplayModes?: McpAppDisplayMode[];\n [k: string]: unknown;\n };\n protocolVersion?: string;\n};\n\nexport type McpAppBridgeHandlers = {\n allowedTools?: readonly string[];\n callTool?: (params: McpAppToolCallParams) => Promise<unknown> | unknown;\n readResource?: (params: { uri: string }) => Promise<unknown> | unknown;\n listResources?: (params?: unknown) => Promise<unknown> | unknown;\n openLink?: (params: { url: string }) => Promise<unknown> | unknown;\n sendMessage?: (params: unknown) => Promise<unknown> | unknown;\n updateModelContext?: (params: unknown) => Promise<unknown> | unknown;\n requestDisplayMode?: (params: {\n mode: McpAppDisplayMode;\n }) => Promise<{ mode: McpAppDisplayMode }> | { mode: McpAppDisplayMode };\n onSizeChange?: (params: { width?: number; height?: number }) => void;\n onInitialized?: (params: McpAppInitializeParams) => void;\n onRequestTeardown?: (params: unknown) => void;\n onLog?: (params: unknown) => void;\n onError?: (error: Error) => void;\n};\n\nexport type McpAppSandboxConfig = SandboxHostConfig;\n\nexport type McpAppFrameProps = {\n app: McpAppMetadata;\n resource: McpAppResource;\n input?: unknown;\n output?: unknown;\n sandbox?: McpAppSandboxConfig | undefined;\n handlers?: McpAppBridgeHandlers | undefined;\n hostInfo?: McpAppHostInfo | undefined;\n hostContext?: McpAppHostContext | undefined;\n /**\n * Upper bound (in pixels) for the auto-resize height driven by the widget's\n * `notifications/size_changed`. Defaults to 800.\n */\n maxHeight?: number | undefined;\n};\n\nexport type McpAppJsonRpcRequest = {\n jsonrpc: \"2.0\";\n id: string | number;\n method: string;\n params?: unknown;\n};\n\nexport type McpAppJsonRpcNotification = {\n jsonrpc: \"2.0\";\n method: string;\n params?: unknown;\n};\n\nexport type McpAppJsonRpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\nexport type McpAppJsonRpcResponse =\n | {\n jsonrpc: \"2.0\";\n id: string | number;\n result: unknown;\n error?: never;\n }\n | {\n jsonrpc: \"2.0\";\n id: string | number;\n result?: never;\n error: McpAppJsonRpcError;\n };\n\nexport type McpAppJsonRpcMessage =\n | McpAppJsonRpcRequest\n | McpAppJsonRpcNotification\n | McpAppJsonRpcResponse;\n"],"mappings":";AAQA,MAAaG,oBAAoB;AAEjC,MAAaE,2BAA2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposerAttachmentDropzone.d.ts","sourceRoot":"","sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,yBAAiB,mCAAmC,CAAC;IACnD,KAAY,OAAO,GAAG,cAAc,CAAC;IACrC,KAAY,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;QACzD,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,mCAAmC;cANlC,OAAO,GAAG,SAAS;aACpB,YAAY,GAAG,SAAS;eACtB,OAAO,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"ComposerAttachmentDropzone.d.ts","sourceRoot":"","sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,yBAAiB,mCAAmC,CAAC;IACnD,KAAY,OAAO,GAAG,cAAc,CAAC;IACrC,KAAY,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;QACzD,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;QAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,mCAAmC;cANlC,OAAO,GAAG,SAAS;aACpB,YAAY,GAAG,SAAS;eACtB,OAAO,GAAG,SAAS;wCA6GhC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { renderSlot } from "../../utils/Primitive.js";
|
|
3
3
|
import { forwardRef, isValidElement, useCallback, useEffect, useState } from "@assistant-ui/tap/react-shim";
|
|
4
|
-
import { useAui } from "@assistant-ui/store";
|
|
4
|
+
import { useAui, useAuiState } from "@assistant-ui/store";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
import { composeEventHandlers } from "radix-ui/internal";
|
|
7
7
|
import { Slot } from "radix-ui";
|
|
@@ -9,44 +9,46 @@ import { Slot } from "radix-ui";
|
|
|
9
9
|
const ComposerPrimitiveAttachmentDropzone = forwardRef(({ disabled, asChild = false, render, children, ...rest }, ref) => {
|
|
10
10
|
const [isDragging, setIsDragging] = useState(false);
|
|
11
11
|
const aui = useAui();
|
|
12
|
+
const disabledByThread = useAuiState((s) => s.thread.isDisabled);
|
|
13
|
+
const isDisabled = disabled || disabledByThread;
|
|
12
14
|
useEffect(() => {
|
|
13
|
-
if (!
|
|
15
|
+
if (!isDisabled) return;
|
|
14
16
|
setIsDragging(false);
|
|
15
|
-
}, [
|
|
17
|
+
}, [isDisabled]);
|
|
16
18
|
const handleDragEnterCapture = useCallback((e) => {
|
|
17
19
|
if (!e.dataTransfer.types.includes("Files")) return;
|
|
18
20
|
e.preventDefault();
|
|
19
|
-
if (
|
|
21
|
+
if (isDisabled || !aui.thread.getState().capabilities.attachments) {
|
|
20
22
|
e.dataTransfer.dropEffect = "none";
|
|
21
23
|
return;
|
|
22
24
|
}
|
|
23
25
|
setIsDragging(true);
|
|
24
|
-
}, [
|
|
26
|
+
}, [isDisabled, aui]);
|
|
25
27
|
const handleDragOverCapture = useCallback((e_0) => {
|
|
26
28
|
if (!e_0.dataTransfer.types.includes("Files")) return;
|
|
27
29
|
e_0.preventDefault();
|
|
28
|
-
if (
|
|
30
|
+
if (isDisabled || !aui.thread.getState().capabilities.attachments) {
|
|
29
31
|
e_0.dataTransfer.dropEffect = "none";
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
34
|
if (!isDragging) setIsDragging(true);
|
|
33
35
|
}, [
|
|
34
|
-
|
|
36
|
+
isDisabled,
|
|
35
37
|
isDragging,
|
|
36
38
|
aui
|
|
37
39
|
]);
|
|
38
40
|
const handleDragLeaveCapture = useCallback((e_1) => {
|
|
39
|
-
if (
|
|
41
|
+
if (isDisabled) return;
|
|
40
42
|
e_1.preventDefault();
|
|
41
43
|
const next = e_1.relatedTarget;
|
|
42
44
|
if (next && e_1.currentTarget.contains(next)) return;
|
|
43
45
|
setIsDragging(false);
|
|
44
|
-
}, [
|
|
46
|
+
}, [isDisabled]);
|
|
45
47
|
const handleDrop = useCallback(async (e_2) => {
|
|
46
48
|
setIsDragging(false);
|
|
47
49
|
if (!e_2.dataTransfer.types.includes("Files")) return;
|
|
48
50
|
e_2.preventDefault();
|
|
49
|
-
if (
|
|
51
|
+
if (isDisabled) return;
|
|
50
52
|
const files = Array.from(e_2.dataTransfer.files);
|
|
51
53
|
if (!aui.thread.getState().capabilities.attachments || files.length === 0) return;
|
|
52
54
|
await Promise.all(files.map(async (file) => {
|
|
@@ -54,9 +56,9 @@ const ComposerPrimitiveAttachmentDropzone = forwardRef(({ disabled, asChild = fa
|
|
|
54
56
|
await aui.composer.addAttachment(file);
|
|
55
57
|
} catch {}
|
|
56
58
|
}));
|
|
57
|
-
}, [
|
|
59
|
+
}, [isDisabled, aui]);
|
|
58
60
|
const mergedProps = {
|
|
59
|
-
...isDragging && !
|
|
61
|
+
...isDragging && !isDisabled ? { "data-dragging": "true" } : null,
|
|
60
62
|
...rest,
|
|
61
63
|
onDragEnterCapture: composeEventHandlers(rest.onDragEnterCapture, handleDragEnterCapture),
|
|
62
64
|
onDragOverCapture: composeEventHandlers(rest.onDragOverCapture, handleDragOverCapture),
|