@agent-native/core 0.72.2 → 0.72.4
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/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +16 -0
- package/corpus/core/package.json +6 -6
- package/corpus/core/src/a2a/client.ts +7 -3
- package/corpus/core/src/client/AgentPanel.tsx +12 -1
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +263 -13
- package/corpus/core/src/client/api-path.ts +28 -0
- package/corpus/core/src/client/embed-auth.ts +26 -0
- package/corpus/core/src/client/mcp-app-host.ts +6 -0
- package/corpus/core/src/client/mcp-apps/McpAppRenderer.tsx +227 -33
- package/corpus/core/src/client/resources/use-mcp-servers.ts +1 -0
- package/corpus/core/src/client/settings/DemoModeSection.tsx +3 -1
- package/corpus/core/src/client/use-agent-chat-home-handoff.ts +16 -4
- package/corpus/core/src/client/use-chat-threads.ts +86 -5
- package/corpus/core/src/demo/fetch-interceptor.ts +1 -1
- package/corpus/core/src/embedding/agent.ts +6 -1
- package/corpus/core/src/embedding/bridge.ts +34 -1
- package/corpus/core/src/mcp/build-server.ts +38 -10
- package/corpus/core/src/mcp/embed-app.ts +120 -45
- package/corpus/core/src/mcp/index.ts +5 -0
- package/corpus/core/src/mcp/org-directory.ts +70 -11
- package/corpus/core/src/mcp/server.ts +14 -0
- package/corpus/core/src/mcp-client/config.ts +12 -0
- package/corpus/core/src/mcp-client/index.ts +2 -0
- package/corpus/core/src/mcp-client/manager.ts +268 -9
- package/corpus/core/src/mcp-client/remote-store.ts +154 -0
- package/corpus/core/src/mcp-client/routes.ts +2 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +8 -0
- package/corpus/core/src/server/index.ts +1 -0
- package/corpus/core/src/shared/mcp-embed-headers.ts +44 -3
- package/corpus/core/src/vite/client.ts +53 -0
- package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +17 -10
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +15 -6
- package/corpus/templates/assets/AGENTS.md +7 -5
- package/corpus/templates/assets/actions/generate-asset.ts +161 -0
- package/corpus/templates/assets/actions/list-assets.ts +4 -2
- package/corpus/templates/assets/actions/navigate.ts +2 -1
- package/corpus/templates/assets/actions/open-asset-picker.ts +84 -3
- package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -2
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +27 -4
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +35 -5
- package/corpus/templates/assets/app/routes/_index.tsx +12 -0
- package/corpus/templates/assets/app/routes/chat.$threadId.tsx +1 -0
- package/corpus/templates/assets/app/routes/library.tsx +243 -40
- package/corpus/templates/chat/actions/navigate.ts +3 -0
- package/corpus/templates/chat/app/components/layout/Layout.tsx +7 -2
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +27 -4
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +38 -6
- package/corpus/templates/chat/app/routes/_index.tsx +13 -0
- package/corpus/templates/chat/app/routes/chat.$threadId.tsx +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +9 -0
- package/corpus/templates/design/AGENTS.md +10 -5
- package/corpus/templates/design/actions/connect-assets-mcp.ts +131 -0
- package/corpus/templates/design/actions/insert-asset.ts +219 -0
- package/corpus/templates/design/actions/view-screen.ts +3 -1
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +1 -1
- package/corpus/templates/design/app/pages/DesignEditor.tsx +53 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +5 -1
- package/corpus/templates/design/server/plugins/assets-mcp.ts +60 -0
- package/corpus/templates/dispatch/app/routes/chat.$threadId.tsx +26 -0
- package/dist/a2a/client.d.ts +1 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +5 -3
- package/dist/a2a/client.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +6 -2
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts +22 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +215 -13
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/api-path.d.ts.map +1 -1
- package/dist/client/api-path.js +27 -0
- package/dist/client/api-path.js.map +1 -1
- package/dist/client/embed-auth.d.ts.map +1 -1
- package/dist/client/embed-auth.js +27 -0
- package/dist/client/embed-auth.js.map +1 -1
- package/dist/client/mcp-app-host.d.ts.map +1 -1
- package/dist/client/mcp-app-host.js +5 -0
- package/dist/client/mcp-app-host.js.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.d.ts +1 -0
- package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.js +179 -33
- package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/client/resources/use-mcp-servers.d.ts +1 -0
- package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
- package/dist/client/resources/use-mcp-servers.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +3 -1
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts +7 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.js +9 -5
- package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts +6 -0
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +79 -5
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/demo/fetch-interceptor.js +1 -1
- package/dist/demo/fetch-interceptor.js.map +1 -1
- package/dist/embedding/agent.d.ts +1 -1
- package/dist/embedding/agent.d.ts.map +1 -1
- package/dist/embedding/agent.js +1 -1
- package/dist/embedding/agent.js.map +1 -1
- package/dist/embedding/bridge.d.ts.map +1 -1
- package/dist/embedding/bridge.js +27 -1
- package/dist/embedding/bridge.js.map +1 -1
- package/dist/extensions/schema.d.ts +2 -2
- package/dist/mcp/build-server.d.ts +2 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +32 -9
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/embed-app.d.ts.map +1 -1
- package/dist/mcp/embed-app.js +120 -45
- package/dist/mcp/embed-app.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/org-directory.d.ts +1 -0
- package/dist/mcp/org-directory.d.ts.map +1 -1
- package/dist/mcp/org-directory.js +59 -11
- package/dist/mcp/org-directory.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-client/config.d.ts +12 -0
- package/dist/mcp-client/config.d.ts.map +1 -1
- package/dist/mcp-client/config.js.map +1 -1
- package/dist/mcp-client/index.d.ts +1 -1
- package/dist/mcp-client/index.d.ts.map +1 -1
- package/dist/mcp-client/index.js +1 -1
- package/dist/mcp-client/index.js.map +1 -1
- package/dist/mcp-client/manager.d.ts +2 -0
- package/dist/mcp-client/manager.d.ts.map +1 -1
- package/dist/mcp-client/manager.js +201 -9
- package/dist/mcp-client/manager.js.map +1 -1
- package/dist/mcp-client/remote-store.d.ts +27 -0
- package/dist/mcp-client/remote-store.d.ts.map +1 -1
- package/dist/mcp-client/remote-store.js +105 -0
- package/dist/mcp-client/remote-store.js.map +1 -1
- package/dist/mcp-client/routes.d.ts +1 -0
- package/dist/mcp-client/routes.d.ts.map +1 -1
- package/dist/mcp-client/routes.js +1 -0
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/provider-api/actions/github-repo-files.d.ts +2 -2
- package/dist/provider-api/actions/query-staged-dataset.d.ts +3 -3
- package/dist/provider-api/corpus-jobs.d.ts +8 -8
- package/dist/server/agent-chat-plugin.d.ts +2 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +8 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/shared/mcp-embed-headers.d.ts +3 -1
- package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
- package/dist/shared/mcp-embed-headers.js +40 -3
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.d.ts +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts +2 -2
- package/dist/sharing/actions/share-resource.d.ts +1 -1
- package/dist/sharing/schema.d.ts +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +44 -0
- package/dist/vite/client.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/embedding/bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AGENT_NATIVE_EMBED_MESSAGE_TYPES,\n createAgentNativeEmbedEnvelope,\n createEmbeddedAppRequestId,\n embeddedAppOrigin,\n isAgentNativeEmbedEnvelope,\n isAllowedEmbeddedAppOrigin,\n messageErrorPayload,\n type AgentNativeEmbedEnvelope,\n} from \"./protocol.js\";\n\nexport interface EmbeddedAppMessageEvent<TPayload = unknown> {\n name: string;\n payload: TPayload;\n event: MessageEvent;\n}\n\nexport type EmbeddedAppMessageHandler = (\n message: EmbeddedAppMessageEvent,\n) => void;\n\nexport type EmbeddedAppRequestHandler = (\n message: EmbeddedAppMessageEvent,\n) => unknown | Promise<unknown>;\n\nexport interface EmbeddedAppBridgeOptions {\n /**\n * Exact parent origin to post back to. Defaults to document.referrer's\n * origin when available. If no origin can be resolved, sends fail closed.\n */\n parentOrigin?: string;\n /**\n * Origins allowed to send messages to the embedded app. Defaults to the\n * resolved parent origin.\n */\n allowedOrigins?: string[];\n onMessage?: EmbeddedAppMessageHandler;\n onRequest?: EmbeddedAppRequestHandler;\n targetWindow?: Window | null;\n currentWindow?: Window;\n}\n\nexport interface EmbeddedAppBridge {\n parentOrigin: string | null;\n postMessage<TPayload = unknown>(name: string, payload?: TPayload): boolean;\n request<TResult = unknown, TPayload = unknown>(\n name: string,\n payload?: TPayload,\n options?: { timeoutMs?: number },\n ): Promise<TResult>;\n ready<TPayload = unknown>(payload?: TPayload): boolean;\n close<TPayload = unknown>(payload?: TPayload): boolean;\n destroy(): void;\n}\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout> | undefined;\n};\n\nfunction resolveParentOrigin(win: Window, explicit?: string): string | null {\n if (explicit) return explicit;\n const referrerOrigin = embeddedAppOrigin(win.document?.referrer ?? \"\");\n return referrerOrigin;\n}\n\nfunction postToParent(\n win: Window,\n parent: Window | null,\n parentOrigin: string | null,\n envelope: AgentNativeEmbedEnvelope,\n): boolean {\n const target = parent ?? (win.parent === win ? null : win.parent);\n if (!parentOrigin) return false;\n if (!target) return false;\n target.postMessage(envelope, parentOrigin);\n return true;\n}\n\nexport function createEmbeddedAppBridge(\n options: EmbeddedAppBridgeOptions = {},\n): EmbeddedAppBridge {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n const allowedOrigins =\n options.allowedOrigins ??\n (parentOrigin && parentOrigin !== \"*\" ? [parentOrigin] : []);\n const pending = new Map<string, PendingRequest>();\n let destroyed = false;\n\n const postEnvelope = (envelope: AgentNativeEmbedEnvelope) =>\n postToParent(win, options.targetWindow ?? null, parentOrigin, envelope);\n\n const listener = (event: MessageEvent) => {\n if (destroyed) return;\n if (!isAllowedEmbeddedAppOrigin(event.origin, allowedOrigins)) return;\n if (!isAgentNativeEmbedEnvelope(event.data)) return;\n\n const envelope = event.data;\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.RESPONSE) {\n const requestId = envelope.requestId;\n if (!requestId) return;\n const entry = pending.get(requestId);\n if (!entry) return;\n pending.delete(requestId);\n if (entry.timer) clearTimeout(entry.timer);\n entry.resolve(envelope.payload);\n return;\n }\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.ERROR) {\n const requestId = envelope.requestId;\n if (!requestId) return;\n const entry = pending.get(requestId);\n if (!entry) return;\n pending.delete(requestId);\n if (entry.timer) clearTimeout(entry.timer);\n entry.reject(new Error(envelope.error?.message ?? \"Embedded app error\"));\n return;\n }\n\n if (!envelope.name) return;\n const message = {\n name: envelope.name,\n payload: envelope.payload,\n event,\n } satisfies EmbeddedAppMessageEvent;\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.REQUEST) {\n Promise.resolve(options.onRequest?.(message))\n .then((payload) => {\n postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.RESPONSE,\n { requestId: envelope.requestId, payload },\n ),\n );\n })\n .catch((error) => {\n postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.ERROR,\n {\n requestId: envelope.requestId,\n error: messageErrorPayload(error),\n },\n ),\n );\n });\n return;\n }\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE) {\n options.onMessage?.(message);\n }\n };\n\n win.addEventListener(\"message\", listener);\n\n return {\n parentOrigin,\n postMessage(name, payload) {\n return postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE,\n { name, payload },\n ),\n );\n },\n request<TResult = unknown, TPayload = unknown>(\n name: string,\n payload?: TPayload,\n requestOptions?: { timeoutMs?: number },\n ) {\n const requestId = createEmbeddedAppRequestId();\n return new Promise<TResult>((resolve, reject) => {\n const timeoutMs = requestOptions?.timeoutMs ?? 30_000;\n const timer =\n timeoutMs > 0\n ? setTimeout(() => {\n pending.delete(requestId);\n reject(new Error(`Embedded app request timed out: ${name}`));\n }, timeoutMs)\n : undefined;\n pending.set(requestId, {\n resolve: (value) => resolve(value as TResult),\n reject,\n timer,\n });\n const posted = postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.REQUEST,\n { name, payload, requestId },\n ),\n );\n if (!posted) {\n pending.delete(requestId);\n if (timer) clearTimeout(timer);\n reject(new Error(\"Embedded app parent window is not available\"));\n }\n });\n },\n ready(payload) {\n return postEnvelope(\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.READY, {\n payload,\n }),\n );\n },\n close(payload) {\n return this.postMessage(\"close\", payload);\n },\n destroy() {\n destroyed = true;\n win.removeEventListener(\"message\", listener);\n for (const entry of pending.values()) {\n if (entry.timer) clearTimeout(entry.timer);\n entry.reject(new Error(\"Embedded app bridge destroyed\"));\n }\n pending.clear();\n },\n };\n}\n\nexport function sendEmbeddedAppMessage<TPayload = unknown>(\n name: string,\n payload?: TPayload,\n options: Pick<\n EmbeddedAppBridgeOptions,\n \"currentWindow\" | \"parentOrigin\" | \"targetWindow\"\n > = {},\n): boolean {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n return postToParent(\n win,\n options.targetWindow ?? null,\n parentOrigin,\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE, {\n name,\n payload,\n }),\n );\n}\n\nexport function announceEmbeddedAppReady<TPayload = unknown>(\n payload?: TPayload,\n options: Pick<\n EmbeddedAppBridgeOptions,\n \"currentWindow\" | \"parentOrigin\" | \"targetWindow\"\n > = {},\n): boolean {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n return postToParent(\n win,\n options.targetWindow ?? null,\n parentOrigin,\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.READY, {\n payload,\n }),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/embedding/bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MCP_APP_CHAT_BRIDGE_QUERY_PARAM,\n EMBED_MODE_QUERY_PARAM,\n} from \"../shared/embed-auth.js\";\nimport {\n AGENT_NATIVE_EMBED_MESSAGE_TYPES,\n createAgentNativeEmbedEnvelope,\n createEmbeddedAppRequestId,\n embeddedAppOrigin,\n isAgentNativeEmbedEnvelope,\n isAllowedEmbeddedAppOrigin,\n messageErrorPayload,\n type AgentNativeEmbedEnvelope,\n} from \"./protocol.js\";\n\nexport interface EmbeddedAppMessageEvent<TPayload = unknown> {\n name: string;\n payload: TPayload;\n event: MessageEvent;\n}\n\nexport type EmbeddedAppMessageHandler = (\n message: EmbeddedAppMessageEvent,\n) => void;\n\nexport type EmbeddedAppRequestHandler = (\n message: EmbeddedAppMessageEvent,\n) => unknown | Promise<unknown>;\n\nexport interface EmbeddedAppBridgeOptions {\n /**\n * Exact parent origin to post back to. Defaults to document.referrer's\n * origin when available. If no origin can be resolved, sends fail closed.\n */\n parentOrigin?: string;\n /**\n * Origins allowed to send messages to the embedded app. Defaults to the\n * resolved parent origin.\n */\n allowedOrigins?: string[];\n onMessage?: EmbeddedAppMessageHandler;\n onRequest?: EmbeddedAppRequestHandler;\n targetWindow?: Window | null;\n currentWindow?: Window;\n}\n\nexport interface EmbeddedAppBridge {\n parentOrigin: string | null;\n postMessage<TPayload = unknown>(name: string, payload?: TPayload): boolean;\n request<TResult = unknown, TPayload = unknown>(\n name: string,\n payload?: TPayload,\n options?: { timeoutMs?: number },\n ): Promise<TResult>;\n ready<TPayload = unknown>(payload?: TPayload): boolean;\n close<TPayload = unknown>(payload?: TPayload): boolean;\n destroy(): void;\n}\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout> | undefined;\n};\n\nfunction resolveParentOrigin(win: Window, explicit?: string): string | null {\n if (explicit) return explicit;\n if (shouldUseOpaqueParentTarget(win)) return \"*\";\n const referrerOrigin = embeddedAppOrigin(win.document?.referrer ?? \"\");\n return referrerOrigin;\n}\n\nfunction shouldUseOpaqueParentTarget(win: Window): boolean {\n try {\n const url = new URL(win.location.href);\n const chatBridge = url.searchParams.get(MCP_APP_CHAT_BRIDGE_QUERY_PARAM);\n const embedMode = url.searchParams.get(EMBED_MODE_QUERY_PARAM);\n return (\n chatBridge === \"1\" ||\n chatBridge === \"true\" ||\n embedMode === \"1\" ||\n embedMode === \"true\"\n );\n } catch {\n return false;\n }\n}\n\nfunction defaultAllowedOrigins(\n parentOrigin: string | null,\n referrerOrigin: string | null,\n): string[] {\n if (!parentOrigin) return [];\n if (parentOrigin === \"*\") {\n return [\"null\", ...(referrerOrigin ? [referrerOrigin] : [])];\n }\n return [parentOrigin];\n}\n\nfunction postToParent(\n win: Window,\n parent: Window | null,\n parentOrigin: string | null,\n envelope: AgentNativeEmbedEnvelope,\n): boolean {\n const target = parent ?? (win.parent === win ? null : win.parent);\n if (!parentOrigin) return false;\n if (!target) return false;\n target.postMessage(envelope, parentOrigin);\n return true;\n}\n\nexport function createEmbeddedAppBridge(\n options: EmbeddedAppBridgeOptions = {},\n): EmbeddedAppBridge {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n const referrerOrigin = embeddedAppOrigin(win.document?.referrer ?? \"\");\n const allowedOrigins =\n options.allowedOrigins ??\n defaultAllowedOrigins(parentOrigin, referrerOrigin);\n const pending = new Map<string, PendingRequest>();\n let destroyed = false;\n\n const postEnvelope = (envelope: AgentNativeEmbedEnvelope) =>\n postToParent(win, options.targetWindow ?? null, parentOrigin, envelope);\n\n const listener = (event: MessageEvent) => {\n if (destroyed) return;\n if (!isAllowedEmbeddedAppOrigin(event.origin, allowedOrigins)) return;\n if (!isAgentNativeEmbedEnvelope(event.data)) return;\n\n const envelope = event.data;\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.RESPONSE) {\n const requestId = envelope.requestId;\n if (!requestId) return;\n const entry = pending.get(requestId);\n if (!entry) return;\n pending.delete(requestId);\n if (entry.timer) clearTimeout(entry.timer);\n entry.resolve(envelope.payload);\n return;\n }\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.ERROR) {\n const requestId = envelope.requestId;\n if (!requestId) return;\n const entry = pending.get(requestId);\n if (!entry) return;\n pending.delete(requestId);\n if (entry.timer) clearTimeout(entry.timer);\n entry.reject(new Error(envelope.error?.message ?? \"Embedded app error\"));\n return;\n }\n\n if (!envelope.name) return;\n const message = {\n name: envelope.name,\n payload: envelope.payload,\n event,\n } satisfies EmbeddedAppMessageEvent;\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.REQUEST) {\n Promise.resolve(options.onRequest?.(message))\n .then((payload) => {\n postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.RESPONSE,\n { requestId: envelope.requestId, payload },\n ),\n );\n })\n .catch((error) => {\n postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.ERROR,\n {\n requestId: envelope.requestId,\n error: messageErrorPayload(error),\n },\n ),\n );\n });\n return;\n }\n\n if (envelope.type === AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE) {\n options.onMessage?.(message);\n }\n };\n\n win.addEventListener(\"message\", listener);\n\n return {\n parentOrigin,\n postMessage(name, payload) {\n return postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE,\n { name, payload },\n ),\n );\n },\n request<TResult = unknown, TPayload = unknown>(\n name: string,\n payload?: TPayload,\n requestOptions?: { timeoutMs?: number },\n ) {\n const requestId = createEmbeddedAppRequestId();\n return new Promise<TResult>((resolve, reject) => {\n const timeoutMs = requestOptions?.timeoutMs ?? 30_000;\n const timer =\n timeoutMs > 0\n ? setTimeout(() => {\n pending.delete(requestId);\n reject(new Error(`Embedded app request timed out: ${name}`));\n }, timeoutMs)\n : undefined;\n pending.set(requestId, {\n resolve: (value) => resolve(value as TResult),\n reject,\n timer,\n });\n const posted = postEnvelope(\n createAgentNativeEmbedEnvelope(\n AGENT_NATIVE_EMBED_MESSAGE_TYPES.REQUEST,\n { name, payload, requestId },\n ),\n );\n if (!posted) {\n pending.delete(requestId);\n if (timer) clearTimeout(timer);\n reject(new Error(\"Embedded app parent window is not available\"));\n }\n });\n },\n ready(payload) {\n return postEnvelope(\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.READY, {\n payload,\n }),\n );\n },\n close(payload) {\n return this.postMessage(\"close\", payload);\n },\n destroy() {\n destroyed = true;\n win.removeEventListener(\"message\", listener);\n for (const entry of pending.values()) {\n if (entry.timer) clearTimeout(entry.timer);\n entry.reject(new Error(\"Embedded app bridge destroyed\"));\n }\n pending.clear();\n },\n };\n}\n\nexport function sendEmbeddedAppMessage<TPayload = unknown>(\n name: string,\n payload?: TPayload,\n options: Pick<\n EmbeddedAppBridgeOptions,\n \"currentWindow\" | \"parentOrigin\" | \"targetWindow\"\n > = {},\n): boolean {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n return postToParent(\n win,\n options.targetWindow ?? null,\n parentOrigin,\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.MESSAGE, {\n name,\n payload,\n }),\n );\n}\n\nexport function announceEmbeddedAppReady<TPayload = unknown>(\n payload?: TPayload,\n options: Pick<\n EmbeddedAppBridgeOptions,\n \"currentWindow\" | \"parentOrigin\" | \"targetWindow\"\n > = {},\n): boolean {\n const win = options.currentWindow ?? window;\n const parentOrigin = resolveParentOrigin(win, options.parentOrigin);\n return postToParent(\n win,\n options.targetWindow ?? null,\n parentOrigin,\n createAgentNativeEmbedEnvelope(AGENT_NATIVE_EMBED_MESSAGE_TYPES.READY, {\n payload,\n }),\n );\n}\n"]}
|
|
@@ -62,7 +62,7 @@ export declare const extensions: import("drizzle-orm/sqlite-core").SQLiteTableWi
|
|
|
62
62
|
tableName: "tools";
|
|
63
63
|
dataType: "string";
|
|
64
64
|
columnType: "SQLiteText";
|
|
65
|
-
data: "
|
|
65
|
+
data: "private" | "org" | "public";
|
|
66
66
|
driverParam: string;
|
|
67
67
|
notNull: true;
|
|
68
68
|
hasDefault: true;
|
|
@@ -335,7 +335,7 @@ export declare const extensionShares: import("drizzle-orm/sqlite-core").SQLiteTa
|
|
|
335
335
|
tableName: string;
|
|
336
336
|
dataType: "string";
|
|
337
337
|
columnType: "SQLiteText";
|
|
338
|
-
data: "
|
|
338
|
+
data: "viewer" | "editor" | "admin";
|
|
339
339
|
driverParam: string;
|
|
340
340
|
notNull: true;
|
|
341
341
|
hasDefault: true;
|
|
@@ -112,6 +112,8 @@ export interface MCPCallerIdentity {
|
|
|
112
112
|
oauthScopes?: string[];
|
|
113
113
|
/** Present only for standard remote MCP OAuth access tokens. */
|
|
114
114
|
oauthClientId?: string;
|
|
115
|
+
/** Present only for framework-minted first-party MCP client tokens. */
|
|
116
|
+
firstPartyMcp?: boolean;
|
|
115
117
|
}
|
|
116
118
|
/** Per-request context used to turn an action's relative deep link into the
|
|
117
119
|
* absolute web URL (and desktop `agentnative://` URL) the external agent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAuChE,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAC1B,CAAC,CAAC;IACH,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"build-server.d.ts","sourceRoot":"","sources":["../../src/mcp/build-server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/build-server.js
CHANGED
|
@@ -494,7 +494,7 @@ function safeUiSegment(value, fallback) {
|
|
|
494
494
|
}
|
|
495
495
|
// ChatGPT and Claude cache MCP App resource HTML by `ui://` URI. Bump this
|
|
496
496
|
// when the shared shell changes in a way that must invalidate host caches.
|
|
497
|
-
const MCP_APP_RESOURCE_SHELL_VERSION = "shell-
|
|
497
|
+
const MCP_APP_RESOURCE_SHELL_VERSION = "shell-v51";
|
|
498
498
|
function legacyDefaultMcpAppUri(config, actionName) {
|
|
499
499
|
const app = safeUiSegment(config.appId ?? config.name, "agent-native");
|
|
500
500
|
const action = safeUiSegment(actionName, "tool");
|
|
@@ -1324,7 +1324,7 @@ function addSecretCandidate(candidates, secret) {
|
|
|
1324
1324
|
return;
|
|
1325
1325
|
candidates.push(trimmed);
|
|
1326
1326
|
}
|
|
1327
|
-
async function verifyA2AJwtForMcp(token) {
|
|
1327
|
+
async function verifyA2AJwtForMcp(token, resourceUrl) {
|
|
1328
1328
|
const jose = await import("jose");
|
|
1329
1329
|
let unverifiedPayload = null;
|
|
1330
1330
|
try {
|
|
@@ -1347,17 +1347,37 @@ async function verifyA2AJwtForMcp(token) {
|
|
|
1347
1347
|
// DB not ready or org lookup unavailable — fall back to other candidates.
|
|
1348
1348
|
}
|
|
1349
1349
|
}
|
|
1350
|
+
const firstPartyMcp = unverifiedPayload.agent_native_first_party_mcp === true;
|
|
1351
|
+
const audiences = firstPartyMcp ? mcpAudienceList(resourceUrl) : null;
|
|
1352
|
+
if (firstPartyMcp && !audiences?.length)
|
|
1353
|
+
return null;
|
|
1350
1354
|
for (const secret of candidateSecrets) {
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1355
|
+
const encodedSecret = new TextEncoder().encode(secret);
|
|
1356
|
+
for (const audience of audiences ?? [undefined]) {
|
|
1357
|
+
try {
|
|
1358
|
+
const { payload } = await jose.jwtVerify(token, encodedSecret, audience ? { audience } : undefined);
|
|
1359
|
+
return payload;
|
|
1360
|
+
}
|
|
1361
|
+
catch {
|
|
1362
|
+
// Try the next candidate without exposing which secret matched.
|
|
1363
|
+
}
|
|
1357
1364
|
}
|
|
1358
1365
|
}
|
|
1359
1366
|
return null;
|
|
1360
1367
|
}
|
|
1368
|
+
function mcpAudienceList(resource) {
|
|
1369
|
+
const raw = Array.isArray(resource) ? resource : resource ? [resource] : [];
|
|
1370
|
+
const seen = new Set();
|
|
1371
|
+
const out = [];
|
|
1372
|
+
for (const value of raw) {
|
|
1373
|
+
const normalized = value.replace(/\/+$/, "");
|
|
1374
|
+
if (normalized && !seen.has(normalized)) {
|
|
1375
|
+
seen.add(normalized);
|
|
1376
|
+
out.push(normalized);
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
return out;
|
|
1380
|
+
}
|
|
1361
1381
|
async function isConnectTokenAllowed(jti) {
|
|
1362
1382
|
if (!jti)
|
|
1363
1383
|
return false;
|
|
@@ -1442,7 +1462,7 @@ export async function verifyAuth(authHeader, ownerEmailHeader, options = {}) {
|
|
|
1442
1462
|
return { authed: false };
|
|
1443
1463
|
// Try an A2A JWT via the shared A2A_SECRET first, then the caller org's
|
|
1444
1464
|
// synced A2A secret when the token carries org_domain.
|
|
1445
|
-
const payload = await verifyA2AJwtForMcp(token);
|
|
1465
|
+
const payload = await verifyA2AJwtForMcp(token, options.resourceUrl);
|
|
1446
1466
|
if (payload) {
|
|
1447
1467
|
const tokenScope = typeof payload.scope === "string" ? payload.scope : undefined;
|
|
1448
1468
|
if (tokenScope && tokenScope !== MCP_CONNECT_SCOPE) {
|
|
@@ -1473,6 +1493,9 @@ export async function verifyAuth(authHeader, ownerEmailHeader, options = {}) {
|
|
|
1473
1493
|
orgDomain: typeof payload.org_domain === "string"
|
|
1474
1494
|
? payload.org_domain
|
|
1475
1495
|
: undefined,
|
|
1496
|
+
...(payload.agent_native_first_party_mcp === true
|
|
1497
|
+
? { firstPartyMcp: true }
|
|
1498
|
+
: {}),
|
|
1476
1499
|
},
|
|
1477
1500
|
// Verified JWT (connect-minted or A2A delegation) — a real caller.
|
|
1478
1501
|
fullSurface: true,
|