@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.
Files changed (169) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +16 -0
  3. package/corpus/core/package.json +6 -6
  4. package/corpus/core/src/a2a/client.ts +7 -3
  5. package/corpus/core/src/client/AgentPanel.tsx +12 -1
  6. package/corpus/core/src/client/MultiTabAssistantChat.tsx +263 -13
  7. package/corpus/core/src/client/api-path.ts +28 -0
  8. package/corpus/core/src/client/embed-auth.ts +26 -0
  9. package/corpus/core/src/client/mcp-app-host.ts +6 -0
  10. package/corpus/core/src/client/mcp-apps/McpAppRenderer.tsx +227 -33
  11. package/corpus/core/src/client/resources/use-mcp-servers.ts +1 -0
  12. package/corpus/core/src/client/settings/DemoModeSection.tsx +3 -1
  13. package/corpus/core/src/client/use-agent-chat-home-handoff.ts +16 -4
  14. package/corpus/core/src/client/use-chat-threads.ts +86 -5
  15. package/corpus/core/src/demo/fetch-interceptor.ts +1 -1
  16. package/corpus/core/src/embedding/agent.ts +6 -1
  17. package/corpus/core/src/embedding/bridge.ts +34 -1
  18. package/corpus/core/src/mcp/build-server.ts +38 -10
  19. package/corpus/core/src/mcp/embed-app.ts +120 -45
  20. package/corpus/core/src/mcp/index.ts +5 -0
  21. package/corpus/core/src/mcp/org-directory.ts +70 -11
  22. package/corpus/core/src/mcp/server.ts +14 -0
  23. package/corpus/core/src/mcp-client/config.ts +12 -0
  24. package/corpus/core/src/mcp-client/index.ts +2 -0
  25. package/corpus/core/src/mcp-client/manager.ts +268 -9
  26. package/corpus/core/src/mcp-client/remote-store.ts +154 -0
  27. package/corpus/core/src/mcp-client/routes.ts +2 -0
  28. package/corpus/core/src/server/agent-chat-plugin.ts +8 -0
  29. package/corpus/core/src/server/index.ts +1 -0
  30. package/corpus/core/src/shared/mcp-embed-headers.ts +44 -3
  31. package/corpus/core/src/vite/client.ts +53 -0
  32. package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +17 -10
  33. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +15 -6
  34. package/corpus/templates/assets/AGENTS.md +7 -5
  35. package/corpus/templates/assets/actions/generate-asset.ts +161 -0
  36. package/corpus/templates/assets/actions/list-assets.ts +4 -2
  37. package/corpus/templates/assets/actions/navigate.ts +2 -1
  38. package/corpus/templates/assets/actions/open-asset-picker.ts +84 -3
  39. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -2
  40. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +27 -4
  41. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +35 -5
  42. package/corpus/templates/assets/app/routes/_index.tsx +12 -0
  43. package/corpus/templates/assets/app/routes/chat.$threadId.tsx +1 -0
  44. package/corpus/templates/assets/app/routes/library.tsx +243 -40
  45. package/corpus/templates/chat/actions/navigate.ts +3 -0
  46. package/corpus/templates/chat/app/components/layout/Layout.tsx +7 -2
  47. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +27 -4
  48. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +38 -6
  49. package/corpus/templates/chat/app/routes/_index.tsx +13 -0
  50. package/corpus/templates/chat/app/routes/chat.$threadId.tsx +1 -0
  51. package/corpus/templates/clips/desktop/src-tauri/src/native_speech.rs +9 -0
  52. package/corpus/templates/design/AGENTS.md +10 -5
  53. package/corpus/templates/design/actions/connect-assets-mcp.ts +131 -0
  54. package/corpus/templates/design/actions/insert-asset.ts +219 -0
  55. package/corpus/templates/design/actions/view-screen.ts +3 -1
  56. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +1 -1
  57. package/corpus/templates/design/app/pages/DesignEditor.tsx +53 -0
  58. package/corpus/templates/design/server/plugins/agent-chat.ts +5 -1
  59. package/corpus/templates/design/server/plugins/assets-mcp.ts +60 -0
  60. package/corpus/templates/dispatch/app/routes/chat.$threadId.tsx +26 -0
  61. package/dist/a2a/client.d.ts +1 -0
  62. package/dist/a2a/client.d.ts.map +1 -1
  63. package/dist/a2a/client.js +5 -3
  64. package/dist/a2a/client.js.map +1 -1
  65. package/dist/client/AgentPanel.d.ts +6 -2
  66. package/dist/client/AgentPanel.d.ts.map +1 -1
  67. package/dist/client/AgentPanel.js +4 -4
  68. package/dist/client/AgentPanel.js.map +1 -1
  69. package/dist/client/MultiTabAssistantChat.d.ts +22 -1
  70. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  71. package/dist/client/MultiTabAssistantChat.js +215 -13
  72. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  73. package/dist/client/api-path.d.ts.map +1 -1
  74. package/dist/client/api-path.js +27 -0
  75. package/dist/client/api-path.js.map +1 -1
  76. package/dist/client/embed-auth.d.ts.map +1 -1
  77. package/dist/client/embed-auth.js +27 -0
  78. package/dist/client/embed-auth.js.map +1 -1
  79. package/dist/client/mcp-app-host.d.ts.map +1 -1
  80. package/dist/client/mcp-app-host.js +5 -0
  81. package/dist/client/mcp-app-host.js.map +1 -1
  82. package/dist/client/mcp-apps/McpAppRenderer.d.ts +1 -0
  83. package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  84. package/dist/client/mcp-apps/McpAppRenderer.js +179 -33
  85. package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
  86. package/dist/client/resources/use-mcp-servers.d.ts +1 -0
  87. package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
  88. package/dist/client/resources/use-mcp-servers.js.map +1 -1
  89. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  90. package/dist/client/settings/DemoModeSection.js +3 -1
  91. package/dist/client/settings/DemoModeSection.js.map +1 -1
  92. package/dist/client/use-agent-chat-home-handoff.d.ts +7 -1
  93. package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
  94. package/dist/client/use-agent-chat-home-handoff.js +9 -5
  95. package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
  96. package/dist/client/use-chat-threads.d.ts +6 -0
  97. package/dist/client/use-chat-threads.d.ts.map +1 -1
  98. package/dist/client/use-chat-threads.js +79 -5
  99. package/dist/client/use-chat-threads.js.map +1 -1
  100. package/dist/demo/fetch-interceptor.js +1 -1
  101. package/dist/demo/fetch-interceptor.js.map +1 -1
  102. package/dist/embedding/agent.d.ts +1 -1
  103. package/dist/embedding/agent.d.ts.map +1 -1
  104. package/dist/embedding/agent.js +1 -1
  105. package/dist/embedding/agent.js.map +1 -1
  106. package/dist/embedding/bridge.d.ts.map +1 -1
  107. package/dist/embedding/bridge.js +27 -1
  108. package/dist/embedding/bridge.js.map +1 -1
  109. package/dist/extensions/schema.d.ts +2 -2
  110. package/dist/mcp/build-server.d.ts +2 -0
  111. package/dist/mcp/build-server.d.ts.map +1 -1
  112. package/dist/mcp/build-server.js +32 -9
  113. package/dist/mcp/build-server.js.map +1 -1
  114. package/dist/mcp/embed-app.d.ts.map +1 -1
  115. package/dist/mcp/embed-app.js +120 -45
  116. package/dist/mcp/embed-app.js.map +1 -1
  117. package/dist/mcp/index.d.ts +1 -0
  118. package/dist/mcp/index.d.ts.map +1 -1
  119. package/dist/mcp/index.js +1 -0
  120. package/dist/mcp/index.js.map +1 -1
  121. package/dist/mcp/org-directory.d.ts +1 -0
  122. package/dist/mcp/org-directory.d.ts.map +1 -1
  123. package/dist/mcp/org-directory.js +59 -11
  124. package/dist/mcp/org-directory.js.map +1 -1
  125. package/dist/mcp/server.d.ts.map +1 -1
  126. package/dist/mcp/server.js +9 -0
  127. package/dist/mcp/server.js.map +1 -1
  128. package/dist/mcp-client/config.d.ts +12 -0
  129. package/dist/mcp-client/config.d.ts.map +1 -1
  130. package/dist/mcp-client/config.js.map +1 -1
  131. package/dist/mcp-client/index.d.ts +1 -1
  132. package/dist/mcp-client/index.d.ts.map +1 -1
  133. package/dist/mcp-client/index.js +1 -1
  134. package/dist/mcp-client/index.js.map +1 -1
  135. package/dist/mcp-client/manager.d.ts +2 -0
  136. package/dist/mcp-client/manager.d.ts.map +1 -1
  137. package/dist/mcp-client/manager.js +201 -9
  138. package/dist/mcp-client/manager.js.map +1 -1
  139. package/dist/mcp-client/remote-store.d.ts +27 -0
  140. package/dist/mcp-client/remote-store.d.ts.map +1 -1
  141. package/dist/mcp-client/remote-store.js +105 -0
  142. package/dist/mcp-client/remote-store.js.map +1 -1
  143. package/dist/mcp-client/routes.d.ts +1 -0
  144. package/dist/mcp-client/routes.d.ts.map +1 -1
  145. package/dist/mcp-client/routes.js +1 -0
  146. package/dist/mcp-client/routes.js.map +1 -1
  147. package/dist/provider-api/actions/github-repo-files.d.ts +2 -2
  148. package/dist/provider-api/actions/query-staged-dataset.d.ts +3 -3
  149. package/dist/provider-api/corpus-jobs.d.ts +8 -8
  150. package/dist/server/agent-chat-plugin.d.ts +2 -0
  151. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  152. package/dist/server/agent-chat-plugin.js +8 -0
  153. package/dist/server/agent-chat-plugin.js.map +1 -1
  154. package/dist/server/index.d.ts +1 -1
  155. package/dist/server/index.d.ts.map +1 -1
  156. package/dist/server/index.js +1 -1
  157. package/dist/server/index.js.map +1 -1
  158. package/dist/shared/mcp-embed-headers.d.ts +3 -1
  159. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  160. package/dist/shared/mcp-embed-headers.js +40 -3
  161. package/dist/shared/mcp-embed-headers.js.map +1 -1
  162. package/dist/sharing/actions/list-resource-shares.d.ts +1 -1
  163. package/dist/sharing/actions/set-resource-visibility.d.ts +2 -2
  164. package/dist/sharing/actions/share-resource.d.ts +1 -1
  165. package/dist/sharing/schema.d.ts +1 -1
  166. package/dist/vite/client.d.ts.map +1 -1
  167. package/dist/vite/client.js +44 -0
  168. package/dist/vite/client.js.map +1 -1
  169. 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: "public" | "private" | "org";
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: "admin" | "viewer" | "editor";
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":"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"}
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;IACvB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;kEAGkE;AAClE,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GACtC,OAAO,CAgBT;AA8YD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,cAAc,GAAG,SAAS,GAC/B;IACD,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CA2BA;AA+hBD;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,WAAW,CAAC,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwe7B;AAOD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAc1C;AAyCD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,GAAG,SAAS,CAIpB;AA+FD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAO,GACxE,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,CA4ID;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS7B"}
@@ -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-v46";
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
- try {
1352
- const { payload } = await jose.jwtVerify(token, new TextEncoder().encode(secret));
1353
- return payload;
1354
- }
1355
- catch {
1356
- // Try the next candidate without exposing which secret matched.
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,