@agent-native/core 0.31.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/a2a/client.js +1 -1
  2. package/dist/a2a/client.js.map +1 -1
  3. package/dist/a2a/task-store.d.ts.map +1 -1
  4. package/dist/a2a/task-store.js +5 -1
  5. package/dist/a2a/task-store.js.map +1 -1
  6. package/dist/action.js +22 -4
  7. package/dist/action.js.map +1 -1
  8. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  9. package/dist/agent/engine/ai-sdk-engine.js +5 -0
  10. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  11. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  12. package/dist/agent/engine/builder-engine.js +4 -0
  13. package/dist/agent/engine/builder-engine.js.map +1 -1
  14. package/dist/agent/production-agent.d.ts.map +1 -1
  15. package/dist/agent/production-agent.js +24 -1
  16. package/dist/agent/production-agent.js.map +1 -1
  17. package/dist/agent/run-manager.d.ts.map +1 -1
  18. package/dist/agent/run-manager.js +7 -2
  19. package/dist/agent/run-manager.js.map +1 -1
  20. package/dist/agent/run-store.d.ts.map +1 -1
  21. package/dist/agent/run-store.js +5 -1
  22. package/dist/agent/run-store.js.map +1 -1
  23. package/dist/agent/tool-search.js.map +1 -1
  24. package/dist/application-state/store.d.ts.map +1 -1
  25. package/dist/application-state/store.js +18 -7
  26. package/dist/application-state/store.js.map +1 -1
  27. package/dist/browser-sessions/store.d.ts.map +1 -1
  28. package/dist/browser-sessions/store.js +6 -1
  29. package/dist/browser-sessions/store.js.map +1 -1
  30. package/dist/chat-threads/store.d.ts.map +1 -1
  31. package/dist/chat-threads/store.js +6 -2
  32. package/dist/chat-threads/store.js.map +1 -1
  33. package/dist/checkpoints/store.d.ts.map +1 -1
  34. package/dist/checkpoints/store.js +5 -1
  35. package/dist/checkpoints/store.js.map +1 -1
  36. package/dist/client/AgentPanel.js +18 -18
  37. package/dist/client/AgentPanel.js.map +1 -1
  38. package/dist/client/agent-chat.d.ts +0 -3
  39. package/dist/client/agent-chat.d.ts.map +1 -1
  40. package/dist/client/agent-chat.js +0 -3
  41. package/dist/client/agent-chat.js.map +1 -1
  42. package/dist/client/components/CodeRequiredDialog.js +0 -7
  43. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  44. package/dist/client/composer/use-file-search.d.ts.map +1 -1
  45. package/dist/client/composer/use-file-search.js +14 -3
  46. package/dist/client/composer/use-file-search.js.map +1 -1
  47. package/dist/client/db-admin/EditableCell.js +1 -1
  48. package/dist/client/db-admin/EditableCell.js.map +1 -1
  49. package/dist/client/dev-overlay/DevOverlay.d.ts +0 -2
  50. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  51. package/dist/client/dev-overlay/DevOverlay.js +1 -1
  52. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  53. package/dist/client/mcp-app-host.d.ts.map +1 -1
  54. package/dist/client/mcp-app-host.js +19 -2
  55. package/dist/client/mcp-app-host.js.map +1 -1
  56. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  57. package/dist/client/resources/ResourcesPanel.js +0 -1
  58. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  59. package/dist/client/settings/SettingsPanel.js +2 -2
  60. package/dist/client/settings/SettingsPanel.js.map +1 -1
  61. package/dist/client/sse-event-processor.d.ts.map +1 -1
  62. package/dist/client/sse-event-processor.js +13 -3
  63. package/dist/client/sse-event-processor.js.map +1 -1
  64. package/dist/client/use-db-sync.d.ts.map +1 -1
  65. package/dist/client/use-db-sync.js +16 -0
  66. package/dist/client/use-db-sync.js.map +1 -1
  67. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  68. package/dist/client/use-run-stuck-detection.js +7 -1
  69. package/dist/client/use-run-stuck-detection.js.map +1 -1
  70. package/dist/collab/agent-presence.d.ts +0 -3
  71. package/dist/collab/agent-presence.d.ts.map +1 -1
  72. package/dist/collab/agent-presence.js +2 -4
  73. package/dist/collab/agent-presence.js.map +1 -1
  74. package/dist/collab/awareness.d.ts.map +1 -1
  75. package/dist/collab/awareness.js +3 -1
  76. package/dist/collab/awareness.js.map +1 -1
  77. package/dist/collab/storage.d.ts.map +1 -1
  78. package/dist/collab/storage.js +5 -1
  79. package/dist/collab/storage.js.map +1 -1
  80. package/dist/collab/ydoc-manager.d.ts.map +1 -1
  81. package/dist/collab/ydoc-manager.js +35 -8
  82. package/dist/collab/ydoc-manager.js.map +1 -1
  83. package/dist/extensions/content-patch.js +1 -1
  84. package/dist/extensions/content-patch.js.map +1 -1
  85. package/dist/extensions/routes.js +12 -12
  86. package/dist/extensions/routes.js.map +1 -1
  87. package/dist/extensions/slots/store.d.ts.map +1 -1
  88. package/dist/extensions/slots/store.js +5 -1
  89. package/dist/extensions/slots/store.js.map +1 -1
  90. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  91. package/dist/integrations/a2a-continuations-store.js +5 -1
  92. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  93. package/dist/integrations/adapters/email.d.ts.map +1 -1
  94. package/dist/integrations/adapters/email.js +5 -2
  95. package/dist/integrations/adapters/email.js.map +1 -1
  96. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  97. package/dist/integrations/google-docs-poller.js +2 -4
  98. package/dist/integrations/google-docs-poller.js.map +1 -1
  99. package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
  100. package/dist/integrations/pending-tasks-retry-job.js +6 -2
  101. package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
  102. package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
  103. package/dist/integrations/pending-tasks-store.js +5 -1
  104. package/dist/integrations/pending-tasks-store.js.map +1 -1
  105. package/dist/integrations/plugin.d.ts.map +1 -1
  106. package/dist/integrations/plugin.js +14 -3
  107. package/dist/integrations/plugin.js.map +1 -1
  108. package/dist/integrations/remote-commands-store.d.ts.map +1 -1
  109. package/dist/integrations/remote-commands-store.js +5 -1
  110. package/dist/integrations/remote-commands-store.js.map +1 -1
  111. package/dist/integrations/remote-devices-store.d.ts.map +1 -1
  112. package/dist/integrations/remote-devices-store.js +5 -1
  113. package/dist/integrations/remote-devices-store.js.map +1 -1
  114. package/dist/integrations/remote-push-store.d.ts.map +1 -1
  115. package/dist/integrations/remote-push-store.js +5 -1
  116. package/dist/integrations/remote-push-store.js.map +1 -1
  117. package/dist/integrations/remote-retry-job.js +1 -1
  118. package/dist/integrations/remote-retry-job.js.map +1 -1
  119. package/dist/integrations/remote-run-events-store.d.ts.map +1 -1
  120. package/dist/integrations/remote-run-events-store.js +5 -1
  121. package/dist/integrations/remote-run-events-store.js.map +1 -1
  122. package/dist/integrations/thread-mapping-store.d.ts.map +1 -1
  123. package/dist/integrations/thread-mapping-store.js +5 -1
  124. package/dist/integrations/thread-mapping-store.js.map +1 -1
  125. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  126. package/dist/integrations/webhook-handler.js.map +1 -1
  127. package/dist/jobs/scheduler.d.ts.map +1 -1
  128. package/dist/jobs/scheduler.js +31 -15
  129. package/dist/jobs/scheduler.js.map +1 -1
  130. package/dist/jobs/tools.d.ts.map +1 -1
  131. package/dist/jobs/tools.js +4 -1
  132. package/dist/jobs/tools.js.map +1 -1
  133. package/dist/mcp/build-server.d.ts.map +1 -1
  134. package/dist/mcp/build-server.js +4 -1
  135. package/dist/mcp/build-server.js.map +1 -1
  136. package/dist/mcp/connect-store.d.ts +3 -4
  137. package/dist/mcp/connect-store.d.ts.map +1 -1
  138. package/dist/mcp/connect-store.js +4 -4
  139. package/dist/mcp/connect-store.js.map +1 -1
  140. package/dist/mcp-client/routes.js +6 -1
  141. package/dist/mcp-client/routes.js.map +1 -1
  142. package/dist/oauth-tokens/store.d.ts.map +1 -1
  143. package/dist/oauth-tokens/store.js +5 -1
  144. package/dist/oauth-tokens/store.js.map +1 -1
  145. package/dist/org/accept-pending.js +1 -1
  146. package/dist/org/accept-pending.js.map +1 -1
  147. package/dist/progress/store.d.ts.map +1 -1
  148. package/dist/progress/store.js +11 -1
  149. package/dist/progress/store.js.map +1 -1
  150. package/dist/resources/handlers.d.ts.map +1 -1
  151. package/dist/resources/handlers.js +0 -2
  152. package/dist/resources/handlers.js.map +1 -1
  153. package/dist/resources/store.d.ts.map +1 -1
  154. package/dist/resources/store.js +23 -13
  155. package/dist/resources/store.js.map +1 -1
  156. package/dist/scripts/db/query.d.ts.map +1 -1
  157. package/dist/scripts/db/query.js +1 -2
  158. package/dist/scripts/db/query.js.map +1 -1
  159. package/dist/server/action-discovery.d.ts.map +1 -1
  160. package/dist/server/action-discovery.js +10 -3
  161. package/dist/server/action-discovery.js.map +1 -1
  162. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  163. package/dist/server/agent-chat-plugin.js +3 -0
  164. package/dist/server/agent-chat-plugin.js.map +1 -1
  165. package/dist/server/auth.d.ts.map +1 -1
  166. package/dist/server/auth.js +13 -9
  167. package/dist/server/auth.js.map +1 -1
  168. package/dist/server/identity-sso-store.d.ts.map +1 -1
  169. package/dist/server/identity-sso-store.js +14 -3
  170. package/dist/server/identity-sso-store.js.map +1 -1
  171. package/dist/server/poll.d.ts.map +1 -1
  172. package/dist/server/poll.js +18 -0
  173. package/dist/server/poll.js.map +1 -1
  174. package/dist/server/schema-prompt.js +1 -1
  175. package/dist/server/schema-prompt.js.map +1 -1
  176. package/dist/server/security-headers.d.ts +5 -4
  177. package/dist/server/security-headers.d.ts.map +1 -1
  178. package/dist/server/security-headers.js +5 -4
  179. package/dist/server/security-headers.js.map +1 -1
  180. package/dist/settings/store.d.ts.map +1 -1
  181. package/dist/settings/store.js +5 -1
  182. package/dist/settings/store.js.map +1 -1
  183. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
  184. package/dist/sharing/actions/set-resource-visibility.js +8 -1
  185. package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
  186. package/dist/triggers/actions.d.ts.map +1 -1
  187. package/dist/triggers/actions.js +1 -2
  188. package/dist/triggers/actions.js.map +1 -1
  189. package/dist/triggers/dispatcher.d.ts.map +1 -1
  190. package/dist/triggers/dispatcher.js +36 -8
  191. package/dist/triggers/dispatcher.js.map +1 -1
  192. package/dist/usage/store.d.ts.map +1 -1
  193. package/dist/usage/store.js +5 -1
  194. package/dist/usage/store.js.map +1 -1
  195. package/dist/vite/client.js +5 -5
  196. package/dist/vite/client.js.map +1 -1
  197. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DevOverlay.js","sourceRoot":"","sources":["../../../src/client/dev-overlay/DevOverlay.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * <DevOverlay /> — the framework dev/configuration panel.\n *\n * Templates render this once at the root of their app. The user toggles it\n * with Cmd+Ctrl+A (also exposed as `useDevOverlayShortcut`). Panels register\n * via `registerDevPanel`; values for option-style controls persist to\n * localStorage via `useDevOption`.\n *\n * Visibility note: the overlay only mounts when the host explicitly opens it\n * via the keybinding (or the `open` prop). It is dev-only by convention —\n * shipping with the keybinding active in prod is fine because nothing renders\n * unless invoked.\n */\n\nimport {\n useCallback,\n useEffect,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport {\n IconChevronDown,\n IconChevronRight,\n IconLoader2,\n IconRefresh,\n IconTrash,\n IconX,\n} from \"@tabler/icons-react\";\nimport { listDevPanels, subscribeDevPanels } from \"./registry.js\";\nimport {\n clearAllDevOverlayStorage,\n useDevOption,\n DEV_OVERLAY_STORAGE_PREFIX,\n} from \"./use-dev-option.js\";\nimport { useDevOverlayShortcut } from \"./use-dev-overlay-shortcut.js\";\nimport type {\n DevActionOption,\n DevBooleanOption,\n DevOption,\n DevPanel,\n DevSelectOption,\n DevStringOption,\n} from \"./types.js\";\nimport \"./builtins.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nconst COLLAPSED_KEY_PREFIX = `${DEV_OVERLAY_STORAGE_PREFIX}collapsed-`;\n\nexport interface DevOverlayProps {\n /**\n * Force-control the overlay's visibility. When omitted the overlay manages\n * its own state and listens to Cmd+Ctrl+A.\n */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function DevOverlay({ open, onOpenChange }: DevOverlayProps = {}) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useDevOverlayShortcut(useCallback(() => setOpen(!isOpen), [isOpen, setOpen]));\n\n // Esc closes (only when overlay is the topmost UI — skip when typing).\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [isOpen, setOpen]);\n\n if (!isOpen) return null;\n return <DevOverlayPanel onClose={() => setOpen(false)} />;\n}\n\nfunction DevOverlayPanel({ onClose }: { onClose: () => void }) {\n const panels = useSyncExternalStore(\n subscribeDevPanels,\n listDevPanels,\n listDevPanels,\n );\n const shortcutHint =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent)\n ? \"Cmd+Ctrl+A\"\n : \"Ctrl+Alt+A\";\n\n return (\n <TooltipProvider delayDuration={200}>\n <div style={styles.shell} role=\"dialog\" aria-label=\"Dev overlay\">\n <div style={styles.header}>\n <div>\n <div style={styles.headerTitle}>Dev Overlay</div>\n <div style={styles.headerSub}>\n {shortcutHint} · localStorage-backed\n </div>\n </div>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={styles.iconBtn}\n onClick={onClose}\n aria-label=\"Close\"\n >\n <IconX size={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close (Esc)</TooltipContent>\n </Tooltip>\n </div>\n\n <div style={styles.body}>\n {panels.length === 0 ? (\n <div style={styles.empty}>\n No panels registered. Call <code>registerDevPanel(...)</code> from\n your template to add options here.\n </div>\n ) : (\n panels.map((panel) => <DevPanelCard key={panel.id} panel={panel} />)\n )}\n </div>\n\n <div style={styles.footer}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={{ ...styles.footerBtn, ...styles.footerBtnDanger }}\n onClick={() => {\n clearAllDevOverlayStorage();\n }}\n >\n <IconTrash size={13} />\n Clear all dev-overlay values\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Reset every dev-overlay value back to its default\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\nfunction DevPanelCard({ panel }: { panel: DevPanel }) {\n const [collapsedRaw, setCollapsedRaw] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n window.localStorage.getItem(`${COLLAPSED_KEY_PREFIX}${panel.id}`) ===\n \"1\"\n );\n } catch {\n return false;\n }\n });\n const setCollapsed = (next: boolean) => {\n setCollapsedRaw(next);\n try {\n window.localStorage.setItem(\n `${COLLAPSED_KEY_PREFIX}${panel.id}`,\n next ? \"1\" : \"0\",\n );\n } catch {\n // ignore — collapsed state is just UX sugar\n }\n };\n\n return (\n <div style={styles.panel}>\n <button\n type=\"button\"\n style={styles.panelHeader}\n onClick={() => setCollapsed(!collapsedRaw)}\n >\n {collapsedRaw ? (\n <IconChevronRight size={14} />\n ) : (\n <IconChevronDown size={14} />\n )}\n <span style={styles.panelLabel}>{panel.label}</span>\n </button>\n {!collapsedRaw && (\n <div style={styles.panelBody}>\n {panel.description && (\n <div style={styles.panelDesc}>{panel.description}</div>\n )}\n {(panel.options ?? []).map((option) => (\n <DevOptionRow key={option.id} panelId={panel.id} option={option} />\n ))}\n {panel.render ? (\n <div style={styles.customRender}>{panel.render()}</div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n\nfunction DevOptionRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevOption;\n}) {\n if (option.type === \"boolean\") {\n return <DevBooleanRow panelId={panelId} option={option} />;\n }\n if (option.type === \"select\") {\n return <DevSelectRow panelId={panelId} option={option} />;\n }\n if (option.type === \"string\") {\n return <DevStringRow panelId={panelId} option={option} />;\n }\n return <DevActionRow option={option} />;\n}\n\nfunction DevBooleanRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevBooleanOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? false,\n );\n return (\n <label style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => {\n const next = e.target.checked;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.checkbox}\n />\n </label>\n );\n}\n\nfunction DevSelectRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevSelectOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? option.choices[0]?.value ?? \"\",\n );\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <select\n value={value}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.select}\n >\n {option.choices.map((c) => (\n <option key={c.value} value={c.value}>\n {c.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\nfunction DevStringRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevStringOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? \"\",\n );\n return (\n <div\n style={{ ...styles.row, alignItems: \"stretch\", flexDirection: \"column\" }}\n >\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"text\"\n value={value}\n placeholder={option.placeholder}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.input}\n />\n </div>\n );\n}\n\nfunction DevActionRow({ option }: { option: DevActionOption }) {\n const [busy, setBusy] = useState(false);\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <button\n type=\"button\"\n disabled={busy}\n onClick={async () => {\n setBusy(true);\n try {\n await option.onClick();\n } finally {\n setBusy(false);\n }\n }}\n style={{\n ...styles.actionBtn,\n ...(option.destructive ? styles.actionBtnDanger : {}),\n }}\n >\n {busy ? (\n <IconLoader2\n size={13}\n style={{ animation: \"spin 1s linear infinite\" }}\n />\n ) : (\n <IconRefresh size={13} />\n )}\n {option.buttonLabel ?? option.label}\n </button>\n </div>\n );\n}\n\n// Shadow / border styles tuned to read well over both light and dark app\n// chrome — the overlay is dev-only so we don't bother with theme tokens.\nconst styles: Record<string, React.CSSProperties> = {\n shell: {\n position: \"fixed\",\n top: 16,\n right: 16,\n width: 380,\n maxWidth: \"calc(100vw - 32px)\",\n // Sized to content; capped so it never spills off-screen on small windows.\n maxHeight: \"calc(100vh - 32px)\",\n background: \"rgba(20, 20, 23, 0.96)\",\n color: \"#f4f4f5\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n borderRadius: 12,\n boxShadow: \"0 24px 60px rgba(0,0,0,0.5)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, system-ui, 'Segoe UI', sans-serif\",\n fontSize: 13,\n zIndex: 2147483646,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n header: {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n },\n headerTitle: { fontWeight: 600, fontSize: 14 },\n headerSub: { fontSize: 11, opacity: 0.55, marginTop: 2 },\n iconBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: 4,\n borderRadius: 6,\n display: \"inline-flex\",\n alignItems: \"center\",\n },\n body: {\n padding: 12,\n overflowY: \"auto\",\n flex: 1,\n // Required to let `overflow-y: auto` actually scroll inside a flex column.\n // Without this, flex children grow to fit content and the scroll never\n // engages.\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n empty: {\n padding: 16,\n fontSize: 12,\n opacity: 0.7,\n background: \"rgba(255,255,255,0.03)\",\n borderRadius: 8,\n border: \"1px dashed rgba(255,255,255,0.1)\",\n },\n panel: {\n background: \"rgba(255,255,255,0.03)\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 8,\n overflow: \"hidden\",\n },\n panelHeader: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n width: \"100%\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"10px 12px\",\n cursor: \"pointer\",\n fontSize: 13,\n textAlign: \"left\",\n },\n panelLabel: { fontWeight: 600 },\n panelBody: {\n padding: \"0 12px 12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n },\n panelDesc: { fontSize: 11, opacity: 0.65, lineHeight: 1.4 },\n customRender: { marginTop: 4 },\n row: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n rowLabels: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n flex: 1,\n minWidth: 0,\n },\n rowLabel: { fontSize: 13 },\n rowDesc: { fontSize: 11, opacity: 0.6, lineHeight: 1.4 },\n checkbox: {\n width: 16,\n height: 16,\n cursor: \"pointer\",\n accentColor: \"#3b82f6\",\n },\n select: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"4px 8px\",\n fontSize: 12,\n minWidth: 120,\n cursor: \"pointer\",\n },\n input: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"6px 8px\",\n fontSize: 12,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n actionBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"rgba(59,130,246,0.15)\",\n color: \"#bfdbfe\",\n border: \"1px solid rgba(59,130,246,0.3)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 12,\n cursor: \"pointer\",\n fontWeight: 500,\n },\n actionBtnDanger: {\n background: \"rgba(239,68,68,0.15)\",\n color: \"#fecaca\",\n border: \"1px solid rgba(239,68,68,0.3)\",\n },\n footer: {\n padding: 10,\n borderTop: \"1px solid rgba(255,255,255,0.06)\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n footerBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 11,\n cursor: \"pointer\",\n },\n footerBtnDanger: { color: \"#fecaca\", borderColor: \"rgba(239,68,68,0.3)\" },\n};\n\n// Inject keyframes for the spinner once.\nif (\n typeof document !== \"undefined\" &&\n !document.getElementById(\"agent-native-dev-overlay-keyframes\")\n) {\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"agent-native-dev-overlay-keyframes\";\n styleEl.textContent = \"@keyframes spin { to { transform: rotate(360deg); } }\";\n document.head.appendChild(styleEl);\n}\n\n// `ReactNode` is intentionally re-imported here so the file is self-contained\n// when consumed via the package's exports map.\nexport type { ReactNode };\n"]}
1
+ {"version":3,"file":"DevOverlay.js","sourceRoot":"","sources":["../../../src/client/dev-overlay/DevOverlay.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * <DevOverlay /> — the framework dev/configuration panel.\n *\n * Templates render this once at the root of their app. The user toggles it\n * with Cmd+Ctrl+A (also exposed as `useDevOverlayShortcut`). Panels register\n * via `registerDevPanel`; values for option-style controls persist to\n * localStorage via `useDevOption`.\n *\n * Visibility note: the overlay only mounts when the host explicitly opens it\n * via the keybinding (or the `open` prop). It is dev-only by convention —\n * shipping with the keybinding active in prod is fine because nothing renders\n * unless invoked.\n */\n\nimport { useCallback, useEffect, useState, useSyncExternalStore } from \"react\";\nimport {\n IconChevronDown,\n IconChevronRight,\n IconLoader2,\n IconRefresh,\n IconTrash,\n IconX,\n} from \"@tabler/icons-react\";\nimport { listDevPanels, subscribeDevPanels } from \"./registry.js\";\nimport {\n clearAllDevOverlayStorage,\n useDevOption,\n DEV_OVERLAY_STORAGE_PREFIX,\n} from \"./use-dev-option.js\";\nimport { useDevOverlayShortcut } from \"./use-dev-overlay-shortcut.js\";\nimport type {\n DevActionOption,\n DevBooleanOption,\n DevOption,\n DevPanel,\n DevSelectOption,\n DevStringOption,\n} from \"./types.js\";\nimport \"./builtins.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nconst COLLAPSED_KEY_PREFIX = `${DEV_OVERLAY_STORAGE_PREFIX}collapsed-`;\n\nexport interface DevOverlayProps {\n /**\n * Force-control the overlay's visibility. When omitted the overlay manages\n * its own state and listens to Cmd+Ctrl+A.\n */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function DevOverlay({ open, onOpenChange }: DevOverlayProps = {}) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useDevOverlayShortcut(useCallback(() => setOpen(!isOpen), [isOpen, setOpen]));\n\n // Esc closes (only when overlay is the topmost UI — skip when typing).\n useEffect(() => {\n if (!isOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable)\n ) {\n return;\n }\n setOpen(false);\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [isOpen, setOpen]);\n\n if (!isOpen) return null;\n return <DevOverlayPanel onClose={() => setOpen(false)} />;\n}\n\nfunction DevOverlayPanel({ onClose }: { onClose: () => void }) {\n const panels = useSyncExternalStore(\n subscribeDevPanels,\n listDevPanels,\n listDevPanels,\n );\n const shortcutHint =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent)\n ? \"Cmd+Ctrl+A\"\n : \"Ctrl+Alt+A\";\n\n return (\n <TooltipProvider delayDuration={200}>\n <div style={styles.shell} role=\"dialog\" aria-label=\"Dev overlay\">\n <div style={styles.header}>\n <div>\n <div style={styles.headerTitle}>Dev Overlay</div>\n <div style={styles.headerSub}>\n {shortcutHint} · localStorage-backed\n </div>\n </div>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={styles.iconBtn}\n onClick={onClose}\n aria-label=\"Close\"\n >\n <IconX size={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Close (Esc)</TooltipContent>\n </Tooltip>\n </div>\n\n <div style={styles.body}>\n {panels.length === 0 ? (\n <div style={styles.empty}>\n No panels registered. Call <code>registerDevPanel(...)</code> from\n your template to add options here.\n </div>\n ) : (\n panels.map((panel) => <DevPanelCard key={panel.id} panel={panel} />)\n )}\n </div>\n\n <div style={styles.footer}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n style={{ ...styles.footerBtn, ...styles.footerBtnDanger }}\n onClick={() => {\n clearAllDevOverlayStorage();\n }}\n >\n <IconTrash size={13} />\n Clear all dev-overlay values\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Reset every dev-overlay value back to its default\n </TooltipContent>\n </Tooltip>\n </div>\n </div>\n </TooltipProvider>\n );\n}\n\nfunction DevPanelCard({ panel }: { panel: DevPanel }) {\n const [collapsedRaw, setCollapsedRaw] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n try {\n return (\n window.localStorage.getItem(`${COLLAPSED_KEY_PREFIX}${panel.id}`) ===\n \"1\"\n );\n } catch {\n return false;\n }\n });\n const setCollapsed = (next: boolean) => {\n setCollapsedRaw(next);\n try {\n window.localStorage.setItem(\n `${COLLAPSED_KEY_PREFIX}${panel.id}`,\n next ? \"1\" : \"0\",\n );\n } catch {\n // ignore — collapsed state is just UX sugar\n }\n };\n\n return (\n <div style={styles.panel}>\n <button\n type=\"button\"\n style={styles.panelHeader}\n onClick={() => setCollapsed(!collapsedRaw)}\n >\n {collapsedRaw ? (\n <IconChevronRight size={14} />\n ) : (\n <IconChevronDown size={14} />\n )}\n <span style={styles.panelLabel}>{panel.label}</span>\n </button>\n {!collapsedRaw && (\n <div style={styles.panelBody}>\n {panel.description && (\n <div style={styles.panelDesc}>{panel.description}</div>\n )}\n {(panel.options ?? []).map((option) => (\n <DevOptionRow key={option.id} panelId={panel.id} option={option} />\n ))}\n {panel.render ? (\n <div style={styles.customRender}>{panel.render()}</div>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n\nfunction DevOptionRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevOption;\n}) {\n if (option.type === \"boolean\") {\n return <DevBooleanRow panelId={panelId} option={option} />;\n }\n if (option.type === \"select\") {\n return <DevSelectRow panelId={panelId} option={option} />;\n }\n if (option.type === \"string\") {\n return <DevStringRow panelId={panelId} option={option} />;\n }\n return <DevActionRow option={option} />;\n}\n\nfunction DevBooleanRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevBooleanOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? false,\n );\n return (\n <label style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => {\n const next = e.target.checked;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.checkbox}\n />\n </label>\n );\n}\n\nfunction DevSelectRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevSelectOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? option.choices[0]?.value ?? \"\",\n );\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <select\n value={value}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.select}\n >\n {option.choices.map((c) => (\n <option key={c.value} value={c.value}>\n {c.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\nfunction DevStringRow({\n panelId,\n option,\n}: {\n panelId: string;\n option: DevStringOption;\n}) {\n const [value, setValue] = useDevOption(\n panelId,\n option.id,\n option.default ?? \"\",\n );\n return (\n <div\n style={{ ...styles.row, alignItems: \"stretch\", flexDirection: \"column\" }}\n >\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <input\n type=\"text\"\n value={value}\n placeholder={option.placeholder}\n onChange={(e) => {\n const next = e.target.value;\n setValue(next);\n option.onChange?.(next);\n }}\n style={styles.input}\n />\n </div>\n );\n}\n\nfunction DevActionRow({ option }: { option: DevActionOption }) {\n const [busy, setBusy] = useState(false);\n return (\n <div style={styles.row}>\n <div style={styles.rowLabels}>\n <div style={styles.rowLabel}>{option.label}</div>\n {option.description && (\n <div style={styles.rowDesc}>{option.description}</div>\n )}\n </div>\n <button\n type=\"button\"\n disabled={busy}\n onClick={async () => {\n setBusy(true);\n try {\n await option.onClick();\n } finally {\n setBusy(false);\n }\n }}\n style={{\n ...styles.actionBtn,\n ...(option.destructive ? styles.actionBtnDanger : {}),\n }}\n >\n {busy ? (\n <IconLoader2\n size={13}\n style={{ animation: \"spin 1s linear infinite\" }}\n />\n ) : (\n <IconRefresh size={13} />\n )}\n {option.buttonLabel ?? option.label}\n </button>\n </div>\n );\n}\n\n// Shadow / border styles tuned to read well over both light and dark app\n// chrome — the overlay is dev-only so we don't bother with theme tokens.\nconst styles: Record<string, React.CSSProperties> = {\n shell: {\n position: \"fixed\",\n top: 16,\n right: 16,\n width: 380,\n maxWidth: \"calc(100vw - 32px)\",\n // Sized to content; capped so it never spills off-screen on small windows.\n maxHeight: \"calc(100vh - 32px)\",\n background: \"rgba(20, 20, 23, 0.96)\",\n color: \"#f4f4f5\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n borderRadius: 12,\n boxShadow: \"0 24px 60px rgba(0,0,0,0.5)\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, system-ui, 'Segoe UI', sans-serif\",\n fontSize: 13,\n zIndex: 2147483646,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n header: {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n padding: \"14px 16px\",\n borderBottom: \"1px solid rgba(255,255,255,0.06)\",\n },\n headerTitle: { fontWeight: 600, fontSize: 14 },\n headerSub: { fontSize: 11, opacity: 0.55, marginTop: 2 },\n iconBtn: {\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: 4,\n borderRadius: 6,\n display: \"inline-flex\",\n alignItems: \"center\",\n },\n body: {\n padding: 12,\n overflowY: \"auto\",\n flex: 1,\n // Required to let `overflow-y: auto` actually scroll inside a flex column.\n // Without this, flex children grow to fit content and the scroll never\n // engages.\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n },\n empty: {\n padding: 16,\n fontSize: 12,\n opacity: 0.7,\n background: \"rgba(255,255,255,0.03)\",\n borderRadius: 8,\n border: \"1px dashed rgba(255,255,255,0.1)\",\n },\n panel: {\n background: \"rgba(255,255,255,0.03)\",\n border: \"1px solid rgba(255,255,255,0.06)\",\n borderRadius: 8,\n overflow: \"hidden\",\n },\n panelHeader: {\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n width: \"100%\",\n background: \"transparent\",\n border: \"none\",\n color: \"inherit\",\n padding: \"10px 12px\",\n cursor: \"pointer\",\n fontSize: 13,\n textAlign: \"left\",\n },\n panelLabel: { fontWeight: 600 },\n panelBody: {\n padding: \"0 12px 12px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 10,\n },\n panelDesc: { fontSize: 11, opacity: 0.65, lineHeight: 1.4 },\n customRender: { marginTop: 4 },\n row: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n },\n rowLabels: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n flex: 1,\n minWidth: 0,\n },\n rowLabel: { fontSize: 13 },\n rowDesc: { fontSize: 11, opacity: 0.6, lineHeight: 1.4 },\n checkbox: {\n width: 16,\n height: 16,\n cursor: \"pointer\",\n accentColor: \"#3b82f6\",\n },\n select: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"4px 8px\",\n fontSize: 12,\n minWidth: 120,\n cursor: \"pointer\",\n },\n input: {\n background: \"rgba(255,255,255,0.06)\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n borderRadius: 6,\n padding: \"6px 8px\",\n fontSize: 12,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n actionBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"rgba(59,130,246,0.15)\",\n color: \"#bfdbfe\",\n border: \"1px solid rgba(59,130,246,0.3)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 12,\n cursor: \"pointer\",\n fontWeight: 500,\n },\n actionBtnDanger: {\n background: \"rgba(239,68,68,0.15)\",\n color: \"#fecaca\",\n border: \"1px solid rgba(239,68,68,0.3)\",\n },\n footer: {\n padding: 10,\n borderTop: \"1px solid rgba(255,255,255,0.06)\",\n display: \"flex\",\n justifyContent: \"flex-end\",\n },\n footerBtn: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n background: \"transparent\",\n color: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 6,\n padding: \"5px 10px\",\n fontSize: 11,\n cursor: \"pointer\",\n },\n footerBtnDanger: { color: \"#fecaca\", borderColor: \"rgba(239,68,68,0.3)\" },\n};\n\n// Inject keyframes for the spinner once.\nif (\n typeof document !== \"undefined\" &&\n !document.getElementById(\"agent-native-dev-overlay-keyframes\")\n) {\n const styleEl = document.createElement(\"style\");\n styleEl.id = \"agent-native-dev-overlay-keyframes\";\n styleEl.textContent = \"@keyframes spin { to { transform: rotate(360deg); } }\";\n document.head.appendChild(styleEl);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-app-host.d.ts","sourceRoot":"","sources":["../../src/client/mcp-app-host.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,uCAAuC;;;;;;CAM1C,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAC1C,CAAC,OAAO,uCAAuC,CAAC,CAAC,MAAM,OAAO,uCAAuC,CAAC,CAAC;AAEzG,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEhF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;CAClB;AAsdD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CA6D1B;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAKhE;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAYhE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAU1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAKxE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAM1B;AAID,oDAAoD;AACpD,wBAAgB,wBAAwB,IAAI,IAAI,CAQ/C"}
1
+ {"version":3,"file":"mcp-app-host.d.ts","sourceRoot":"","sources":["../../src/client/mcp-app-host.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,uCAAuC;;;;;;CAM1C,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAC1C,CAAC,OAAO,uCAAuC,CAAC,CAAC,MAAM,OAAO,uCAAuC,CAAC,CAAC;AAEzG,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEhF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;CAClB;AAseD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CA6D1B;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAKhE;AAED,wBAAgB,oBAAoB,IAAI,yBAAyB,CAYhE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAU1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAKxE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAM1B;AAID,oDAAoD;AACpD,wBAAgB,wBAAwB,IAAI,IAAI,CAQ/C"}
@@ -84,7 +84,17 @@ function hasWrapperBridge() {
84
84
  function isTrustedParentMessage(event) {
85
85
  if (!isInChildFrame())
86
86
  return false;
87
- return event.source === window.parent;
87
+ if (event.source !== window.parent)
88
+ return false;
89
+ // Defense in depth: once the parent's real origin is known (captured from the
90
+ // browser-stamped event.origin during the frameOrigin handshake, so it can't
91
+ // be spoofed), also require inbound messages to come from that origin. When
92
+ // it isn't known yet (null) or is opaque ("null"), fall back to source-only.
93
+ const expectedOrigin = getFrameOrigin();
94
+ if (expectedOrigin && expectedOrigin !== "null") {
95
+ return event.origin === expectedOrigin;
96
+ }
97
+ return true;
88
98
  }
89
99
  function requestId() {
90
100
  return `mcp-host-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
@@ -329,7 +339,14 @@ async function ensureDirectMcpAppInitialized() {
329
339
  updateSnapshotFromInitialize(result);
330
340
  postJsonRpcNotification("ui/notifications/initialized", {});
331
341
  return true;
332
- })().catch(() => false);
342
+ })().catch(() => {
343
+ // Reset so the next call retries the handshake. Otherwise one timed-out
344
+ // ui/initialize (e.g. host briefly unresponsive) leaves a permanently
345
+ // resolved `Promise<false>` cached here, and every later bridge call
346
+ // fails until full page reload.
347
+ directMcpAppInit = null;
348
+ return false;
349
+ });
333
350
  }
334
351
  return directMcpAppInit;
335
352
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-app-host.js","sourceRoot":"","sources":["../../src/client/mcp-app-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,YAAY,EAAE,4BAA4B;IAC1C,oBAAoB,EAAE,wCAAwC;IAC9D,SAAS,EAAE,8BAA8B;IACzC,oBAAoB,EAAE,wCAAwC;IAC9D,QAAQ,EAAE,8BAA8B;CAChC,CAAC;AAwEX,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,+BAA+B,GAAG,YAAY,CAAC;AAErD,IAAI,QAAQ,GAA8B;IACxC,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;CACd,CAAC;AACF,MAAM,2BAA2B,GAA8B;IAC7D,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;CACd,CAAC;AACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAClD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAC;AAChE,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AACrD,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAC1E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,iCAAiC,EAAE;QAAE,4BAA4B,EAAE,CAAC;IACxE,IAAI,0BAA0B,EAAE,IAAI,iBAAiB,EAAE;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,CACL,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,GAAG;QAC1C,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,KAAK,GAAG,CACpD,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB;IAC7B,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GACR,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACxB,EAAE,CAAC;IACL,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,sBAAsB,EAAE;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAmB;IACjD,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,MAAM;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,IAAgC;IACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5B,QAAQ,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAE,IAAI,CAAC,OAA6B;YACrC,CAAC,CAAC,QAAQ,CAAC,OAAO;QACpB,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YACvC,CAAC,CAAE,IAAI,CAAC,YAAuC;YAC/C,CAAC,CAAC,QAAQ,CAAC,YAAY;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO;KACtE,CAAC;IACF,MAAM,EAAE,CAAC;AACX,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAe;IACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO;IAC9B,cAAc,CAAC;QACb,OAAO,EAAE,MAAM,CAAC,WAAW;QAC3B,YAAY,EAAE,MAAM,CAAC,gBAAgB;QACrC,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe;KACnD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,8BAA8B,CAAC,MAAuB;IAC7D,cAAc,CAAC;QACb,OAAO,EAAE;YACP,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,qBAAqB,EACnB,OAAO,MAAM,CAAC,kBAAkB,KAAK,UAAU;gBAC7C,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC;gBACjC,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;QACD,YAAY,EAAE;YACZ,kBAAkB,EAAE,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU;YAC/D,QAAQ,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU;YACnD,YAAY,EACV,OAAO,MAAM,CAAC,kBAAkB,KAAK,UAAU;gBAC7C,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC;gBACjC,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,IAAI;SACb;QACD,OAAO,EAAE,MAAM,CAAC,SAAS;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAiC;IACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO;IAClE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B;IACnD,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE;QAAE,OAAO;IAChB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ;YACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YACpB,CAAC,CAAC,+BAA+B,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAgC;IACjE,IAAI,OAAO,CAAC,MAAM,KAAK,uCAAuC;QAAE,OAAO;IACvE,cAAc,CAAC;QACb,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB;IACpC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO;IAE/B,IAAI,OAAO,CAAC,IAAI,KAAK,uCAAuC,CAAC,YAAY,EAAE,CAAC;QAC1E,cAAc,CAAE,OAA8B,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,uCAAuC,CAAC,QAAQ,EAAE,CAAC;QACtE,cAAc,CAAE,OAA+B,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;YACnE,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC,eAAe,EAAE,IAAI,iBAAiB;QAAE,OAAO;IACpD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9C,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CACtB,IAGuE,EACvE,IAA6B;IAE7B,cAAc,EAAE,CAAC;IACjB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,qBAAqB,EAAE;QAAE,OAAO,KAAK,CAAC;IAEhE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,EAAE,GACN,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS;QAClD,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,SAAS,EAAE,CAAC;IAClB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA2B;IACtD,cAAc,EAAE,CAAC;IACjB,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE;oBACJ,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;oBACnC,MAAM,EAAE,IAAI;oBACZ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;wBACtC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;wBAC/C,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAwBD,SAAS,gBAAgB;IACvB,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,MAAM,GAAI,MAA0C,CAAC,MAAM,CAAC;IAClE,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QACzC,CAAC,CAAE,MAA0B;QAC7B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc,EAAE,MAAgB;IAC/D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAc,EACd,MAAgB;IAEhB,cAAc,EAAE,CAAC;IACjB,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACtD,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,6BAA6B;IAC1C,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,qBAAqB,EAAE;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,gBAAgB,EAAE;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,8BAA8B,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE;gBACvD,eAAe,EAAE,+BAA+B;gBAChD,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;gBACvD,eAAe,EAAE;oBACf,qBAAqB,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC;iBACvD;aACF,CAAC,CAAC;YACH,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACrC,uBAAuB,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,8BAA8B;IAC3C,MAAM,EAAE,GAAG,MAAM,6BAA6B,EAAE,CAAC;IACjD,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,IAGuE,EACvE,IAA6B;IAE7B,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,8BAA8B,CAAC,YAAY,CAAC,CAAC;QAC7C,IACE,IAAI,KAAK,uCAAuC,CAAC,oBAAoB;YACrE,OAAO,YAAY,CAAC,cAAc,KAAK,UAAU,EACjD,CAAC;YACD,YAAY,CAAC,cAAc,CAAC;gBAC1B,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC;gBACxC,uBAAuB,EAAE;oBACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;wBACtC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;wBAC/C,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,IAAI,KAAK,uCAAuC,CAAC,SAAS;YAC1D,OAAO,YAAY,CAAC,YAAY,KAAK,UAAU;YAC/C,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,EAC5B,CAAC;YACD,MAAM,YAAY,CAAC,YAAY,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,GAAG;gBACd,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,IAAI,KAAK,uCAAuC,CAAC,oBAAoB;YACrE,OAAO,YAAY,CAAC,kBAAkB,KAAK,UAAU;YACrD,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;YACD,MAAM,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,8BAA8B,CAAC,YAAY,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,8BAA8B,EAAE,CAAC;IACvC,MAAM,MAAM,GACV,IAAI,KAAK,uCAAuC,CAAC,oBAAoB;QACnE,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,IAAI,KAAK,uCAAuC,CAAC,SAAS;YAC1D,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,yBAAyB,CAAC;IAClC,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAA2B;IAE3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,gBAAgB,EAAE;QAAE,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEzD,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;YAClC,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,OAAO;YAC5B,CAAC,CAAC;gBACE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC/B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;aAC1D;YACH,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC3D,IACE,YAAY;YACZ,OAAO,YAAY,CAAC,mBAAmB,KAAK,UAAU,EACtD,CAAC;YACD,8BAA8B,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,OAAO,YAAY,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;gBACtD,YAAY,CAAC,cAAc,CAAC;oBAC1B,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC;oBACxC,sBAAsB,EAAE,OAAO;oBAC/B,uBAAuB,EAAE;wBACvB,OAAO,EAAE,cAAc;wBACvB,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;4BACtC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;4BAC/C,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF,CAAC,CAAC;YACL,CAAC;YACD,MAAM,YAAY,CAAC,mBAAmB,CAAC;gBACrC,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,8BAA8B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,yBAAyB,EAAE;gBAClD,OAAO,EAAE,cAAc;gBACvB,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;oBACtC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;oBAC/C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,4BAA4B;QAC9B,CAAC;QACD,MAAM,kBAAkB,CAAC,YAAY,EAAE;YACrC,IAAI,EAAE,MAAM;YACZ,OAAO;SACR,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,cAAc,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM;QAAE,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,cAAc,EAAE,CAAC;IACjB,OAAO,oBAAoB,CACzB,CAAC,QAAQ,EAAE,EAAE;QACX,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EACD,GAAG,EAAE,CAAC,QAAQ,EACd,GAAG,EAAE,CAAC,2BAA2B,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAgC;IAEhC,OAAO,eAAe,CACpB,uCAAuC,CAAC,oBAAoB,EAC5D;QACE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;KACR,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,eAAe,CAAC,uCAAuC,CAAC,SAAS,EAAE;QACxE,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAuB;IAEvB,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,eAAe,CACpB,uCAAuC,CAAC,oBAAoB,EAC5D,EAAE,IAAI,EAAE,CACT,CAAC;AACJ,CAAC;AAED,cAAc,EAAE,CAAC;AAEjB,oDAAoD;AACpD,MAAM,UAAU,wBAAwB;IACtC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,gBAAgB,GAAG,IAAI,CAAC;IACxB,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,IAAI,eAAe,EAAE,EAAE,CAAC;IACtB,MAAM,CAAC,gBAAgB,CACrB,oBAAoB,EACpB,GAAG,EAAE;QACH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,MAAM;YAAE,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;AACJ,CAAC","sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { getFrameOrigin } from \"./frame.js\";\nimport {\n getEmbedAuthToken,\n isEmbedAuthActive,\n markEmbedMcpChatBridgeActive,\n isEmbedMcpChatBridgeActive,\n readEmbedMcpChatBridgeFlagFromUrl,\n} from \"./embed-auth.js\";\nimport {\n EMBED_MODE_QUERY_PARAM,\n EMBED_TOKEN_QUERY_PARAM,\n MCP_APP_CHAT_BRIDGE_QUERY_PARAM,\n} from \"../shared/embed-auth.js\";\n\nexport const AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES = {\n HOST_CONTEXT: \"agentNative.mcpHostContext\",\n UPDATE_MODEL_CONTEXT: \"agentNative.mcpHost.updateModelContext\",\n OPEN_LINK: \"agentNative.mcpHost.openLink\",\n REQUEST_DISPLAY_MODE: \"agentNative.mcpHost.requestDisplayMode\",\n RESPONSE: \"agentNative.mcpHost.response\",\n} as const;\n\nexport type AgentNativeMcpAppHostMessageType =\n (typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES)[keyof typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES];\n\nexport type McpAppDisplayMode = \"inline\" | \"pip\" | \"fullscreen\" | (string & {});\n\nexport interface McpAppModelContextContentPart {\n type: string;\n [key: string]: unknown;\n}\n\nexport interface McpAppModelContextUpdate {\n content?: McpAppModelContextContentPart[];\n structuredContent?: unknown;\n}\n\nexport interface McpAppHostChatMessage {\n message: string;\n context?: string;\n content?: McpAppModelContextContentPart[];\n structuredContent?: unknown;\n}\n\nexport interface McpAppHostCapabilities {\n updateModelContext?: boolean;\n openLink?: boolean;\n displayModes?: McpAppDisplayMode[];\n [key: string]: unknown;\n}\n\nexport interface McpAppHostContext {\n capabilities?: McpAppHostCapabilities;\n [key: string]: unknown;\n}\n\nexport interface McpAppHostContextSnapshot {\n context: McpAppHostContext | null;\n capabilities: McpAppHostCapabilities | null;\n version: unknown;\n}\n\ntype PendingRequest = {\n resolve: (ok: boolean) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype PendingJsonRpcRequest = {\n resolve: (result: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype HostContextMessage = {\n type: typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.HOST_CONTEXT;\n data?: {\n context?: unknown;\n capabilities?: unknown;\n version?: unknown;\n };\n};\n\ntype HostResponseMessage = {\n type: typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.RESPONSE;\n data?: {\n requestId?: unknown;\n ok?: unknown;\n result?: unknown;\n error?: unknown;\n };\n};\n\nconst REQUEST_TIMEOUT_MS = 5000;\nconst DIRECT_MCP_APP_PROTOCOL_VERSION = \"2026-01-26\";\n\nlet snapshot: McpAppHostContextSnapshot = {\n context: null,\n capabilities: null,\n version: null,\n};\nconst EMPTY_HOST_CONTEXT_SNAPSHOT: McpAppHostContextSnapshot = {\n context: null,\n capabilities: null,\n version: null,\n};\nconst listeners = new Set<() => void>();\nconst pending = new Map<string, PendingRequest>();\nconst jsonRpcPending = new Map<string, PendingJsonRpcRequest>();\nlet directMcpAppInit: Promise<boolean> | null = null;\nlet listenerInstalled = false;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isBrowserWindow(): boolean {\n return (\n typeof window !== \"undefined\" && typeof window.postMessage === \"function\"\n );\n}\n\nfunction isInChildFrame(): boolean {\n if (!isBrowserWindow()) return false;\n try {\n return window.parent !== window;\n } catch {\n return false;\n }\n}\n\nfunction isMcpAppBridgeEnabled(): boolean {\n if (!isBrowserWindow()) return false;\n if (readEmbedMcpChatBridgeFlagFromUrl()) markEmbedMcpChatBridgeActive();\n if (isEmbedMcpChatBridgeActive() && isEmbedAuthActive()) return true;\n const params = new URLSearchParams(window.location.search || \"\");\n return (\n params.get(EMBED_MODE_QUERY_PARAM) === \"1\" &&\n (params.has(EMBED_TOKEN_QUERY_PARAM) || Boolean(getEmbedAuthToken())) &&\n params.get(MCP_APP_CHAT_BRIDGE_QUERY_PARAM) === \"1\"\n );\n}\n\nfunction isClaudeMcpContentHost(): boolean {\n if (!isBrowserWindow()) return false;\n try {\n return /(^|\\.)claudemcpcontent\\.com$/i.test(window.location.hostname || \"\");\n } catch {\n return false;\n }\n}\n\nfunction hasWrapperBridge(): boolean {\n if (!isBrowserWindow()) return false;\n const params = new URLSearchParams(window.location.search || \"\");\n const mode =\n params.get(\"embedMode\") ??\n params.get(\"renderMode\") ??\n params.get(\"embed_mode\") ??\n \"\";\n if (mode === \"iframe\" || mode === \"nested\") return true;\n if (params.get(\"nested\") === \"1\" || params.get(\"frame\") === \"iframe\") {\n return true;\n }\n if (isClaudeMcpContentHost()) return false;\n return Boolean(getFrameOrigin());\n}\n\nfunction isTrustedParentMessage(event: MessageEvent): boolean {\n if (!isInChildFrame()) return false;\n return event.source === window.parent;\n}\n\nfunction requestId(): string {\n return `mcp-host-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction jsonRpcRequestId(): string {\n return `mcp-ui-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction notify() {\n for (const listener of listeners) listener();\n}\n\nfunction updateSnapshot(data: HostContextMessage[\"data\"]): void {\n if (!isRecord(data)) return;\n snapshot = {\n context: isRecord(data.context)\n ? (data.context as McpAppHostContext)\n : snapshot.context,\n capabilities: isRecord(data.capabilities)\n ? (data.capabilities as McpAppHostCapabilities)\n : snapshot.capabilities,\n version: data.version !== undefined ? data.version : snapshot.version,\n };\n notify();\n}\n\nfunction updateSnapshotFromInitialize(result: unknown): void {\n if (!isRecord(result)) return;\n updateSnapshot({\n context: result.hostContext,\n capabilities: result.hostCapabilities,\n version: result.hostInfo ?? result.protocolVersion,\n });\n}\n\nfunction updateSnapshotFromOpenAiBridge(bridge: OpenAiAppBridge): void {\n updateSnapshot({\n context: {\n displayMode: bridge.displayMode,\n availableDisplayModes:\n typeof bridge.requestDisplayMode === \"function\"\n ? [\"inline\", \"fullscreen\", \"pip\"]\n : [],\n maxHeight: bridge.maxHeight,\n locale: bridge.locale,\n theme: bridge.theme,\n view: bridge.view,\n },\n capabilities: {\n updateModelContext: typeof bridge.setWidgetState === \"function\",\n openLink: typeof bridge.openExternal === \"function\",\n displayModes:\n typeof bridge.requestDisplayMode === \"function\"\n ? [\"inline\", \"fullscreen\", \"pip\"]\n : [],\n openai: true,\n },\n version: bridge.userAgent,\n });\n}\n\nfunction resolvePending(data: HostResponseMessage[\"data\"]): void {\n if (!isRecord(data) || typeof data.requestId !== \"string\") return;\n const request = pending.get(data.requestId);\n if (!request) return;\n pending.delete(data.requestId);\n clearTimeout(request.timeout);\n request.resolve(data.ok === true);\n}\n\nfunction resolveJsonRpc(data: Record<string, unknown>): void {\n const id = typeof data.id === \"string\" ? data.id : String(data.id ?? \"\");\n if (!id) return;\n const request = jsonRpcPending.get(id);\n if (!request) return;\n jsonRpcPending.delete(id);\n clearTimeout(request.timeout);\n if (isRecord(data.error)) {\n const message =\n typeof data.error.message === \"string\"\n ? data.error.message\n : \"MCP Apps host request failed.\";\n request.reject(new Error(message));\n return;\n }\n request.resolve(data.result ?? {});\n}\n\nfunction handleJsonRpcNotification(message: Record<string, unknown>): void {\n if (message.method !== \"ui/notifications/host-context-changed\") return;\n updateSnapshot({\n context: isRecord(message.params) ? message.params : undefined,\n });\n}\n\nfunction onMessage(event: MessageEvent): void {\n if (!isTrustedParentMessage(event)) return;\n const message = event.data;\n if (!isRecord(message)) return;\n\n if (message.type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.HOST_CONTEXT) {\n updateSnapshot((message as HostContextMessage).data);\n return;\n }\n\n if (message.type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.RESPONSE) {\n resolvePending((message as HostResponseMessage).data);\n return;\n }\n\n if (message.jsonrpc === \"2.0\") {\n if (\"id\" in message && (\"result\" in message || \"error\" in message)) {\n resolveJsonRpc(message);\n return;\n }\n if (typeof message.method === \"string\") {\n handleJsonRpcNotification(message);\n }\n }\n}\n\nfunction ensureListener(): void {\n if (!isBrowserWindow() || listenerInstalled) return;\n window.addEventListener(\"message\", onMessage);\n listenerInstalled = true;\n}\n\nfunction postHostRequest(\n type:\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n data: Record<string, unknown>,\n): Promise<boolean> | false {\n ensureListener();\n if (!isInChildFrame() || !isMcpAppBridgeEnabled()) return false;\n\n if (!hasWrapperBridge()) {\n return postDirectHostRequest(type, data);\n }\n\n const id =\n typeof data.requestId === \"string\" && data.requestId\n ? data.requestId\n : requestId();\n const payload = { ...data, requestId: id };\n\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n pending.delete(id);\n resolve(false);\n }, REQUEST_TIMEOUT_MS);\n pending.set(id, { resolve, timeout });\n\n try {\n window.parent.postMessage({ type, data: payload }, \"*\");\n } catch {\n pending.delete(id);\n clearTimeout(timeout);\n resolve(false);\n }\n });\n}\n\nfunction postWrapperHostChat(chat: McpAppHostChatMessage): Promise<boolean> {\n ensureListener();\n const id = requestId();\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n pending.delete(id);\n resolve(false);\n }, REQUEST_TIMEOUT_MS);\n pending.set(id, { resolve, timeout });\n\n try {\n window.parent.postMessage(\n {\n type: \"agentNative.submitChat\",\n data: {\n requestId: id,\n message: chat.message,\n context: chat.context?.trim() || \"\",\n submit: true,\n ...(chat.content?.length ? { content: chat.content } : {}),\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n },\n },\n \"*\",\n );\n } catch {\n pending.delete(id);\n clearTimeout(timeout);\n resolve(false);\n }\n });\n}\n\ninterface OpenAiAppBridge {\n widgetState?: unknown;\n displayMode?: unknown;\n maxHeight?: unknown;\n locale?: unknown;\n theme?: unknown;\n view?: unknown;\n userAgent?: unknown;\n setWidgetState?: (state: unknown) => void;\n sendFollowUpMessage?: (args: {\n prompt: string;\n scrollToBottom?: boolean;\n }) => unknown | Promise<unknown>;\n openExternal?: (args: {\n href: string;\n redirectUrl?: boolean;\n }) => unknown | Promise<unknown>;\n requestDisplayMode?: (args: {\n mode: McpAppDisplayMode;\n }) => unknown | Promise<unknown>;\n}\n\nfunction readOpenAiBridge(): OpenAiAppBridge | null {\n if (!isBrowserWindow()) return null;\n const bridge = (window as unknown as { openai?: unknown }).openai;\n return bridge && typeof bridge === \"object\"\n ? (bridge as OpenAiAppBridge)\n : null;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction postJsonRpcNotification(method: string, params?: unknown): void {\n if (!isInChildFrame()) return;\n try {\n window.parent.postMessage({ jsonrpc: \"2.0\", method, params }, \"*\");\n } catch {\n // Best-effort lifecycle notification.\n }\n}\n\nfunction postJsonRpcRequest(\n method: string,\n params?: unknown,\n): Promise<unknown> | false {\n ensureListener();\n if (!isInChildFrame()) return false;\n\n const id = jsonRpcRequestId();\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n jsonRpcPending.delete(id);\n reject(new Error(\"MCP Apps host did not respond.\"));\n }, REQUEST_TIMEOUT_MS);\n jsonRpcPending.set(id, { resolve, reject, timeout });\n\n try {\n window.parent.postMessage({ jsonrpc: \"2.0\", id, method, params }, \"*\");\n } catch (err) {\n jsonRpcPending.delete(id);\n clearTimeout(timeout);\n reject(err instanceof Error ? err : new Error(String(err)));\n }\n });\n}\n\nasync function ensureDirectMcpAppInitialized(): Promise<boolean> {\n if (!isInChildFrame() || !isMcpAppBridgeEnabled()) return false;\n if (hasWrapperBridge()) return true;\n\n const openAiBridge = readOpenAiBridge();\n if (openAiBridge) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n return true;\n }\n\n if (!directMcpAppInit) {\n directMcpAppInit = (async () => {\n const result = await postJsonRpcRequest(\"ui/initialize\", {\n protocolVersion: DIRECT_MCP_APP_PROTOCOL_VERSION,\n appInfo: { name: \"Agent Native App\", version: \"1.0.0\" },\n appCapabilities: {\n availableDisplayModes: [\"inline\", \"fullscreen\", \"pip\"],\n },\n });\n updateSnapshotFromInitialize(result);\n postJsonRpcNotification(\"ui/notifications/initialized\", {});\n return true;\n })().catch(() => false);\n }\n\n return directMcpAppInit;\n}\n\nasync function waitForDirectMcpAppInitialized(): Promise<void> {\n const ok = await ensureDirectMcpAppInitialized();\n if (!ok) throw new Error(\"MCP Apps host bridge is not available.\");\n}\n\nasync function postDirectHostRequest(\n type:\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n data: Record<string, unknown>,\n): Promise<boolean> {\n const openAiBridge = readOpenAiBridge();\n if (openAiBridge) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT &&\n typeof openAiBridge.setWidgetState === \"function\"\n ) {\n openAiBridge.setWidgetState({\n ...objectValue(openAiBridge.widgetState),\n agentNativeModelContext: {\n ...(Array.isArray(data.content) ? { content: data.content } : {}),\n ...(data.structuredContent !== undefined\n ? { structuredContent: data.structuredContent }\n : {}),\n },\n });\n return true;\n }\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK &&\n typeof openAiBridge.openExternal === \"function\" &&\n typeof data.url === \"string\"\n ) {\n await openAiBridge.openExternal({\n href: data.url,\n redirectUrl: false,\n });\n return true;\n }\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE &&\n typeof openAiBridge.requestDisplayMode === \"function\" &&\n typeof data.mode === \"string\"\n ) {\n await openAiBridge.requestDisplayMode({ mode: data.mode });\n updateSnapshotFromOpenAiBridge(openAiBridge);\n return true;\n }\n }\n\n await waitForDirectMcpAppInitialized();\n const method =\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n ? \"ui/update-model-context\"\n : type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n ? \"ui/open-link\"\n : \"ui/request-display-mode\";\n await postJsonRpcRequest(method, data);\n return true;\n}\n\nexport function sendMcpAppHostMessage(\n chat: McpAppHostChatMessage,\n): Promise<boolean> | false {\n if (!chat.message.trim() || !isInChildFrame() || !isMcpAppBridgeEnabled()) {\n return false;\n }\n\n if (hasWrapperBridge()) return postWrapperHostChat(chat);\n\n return (async () => {\n const openAiBridge = readOpenAiBridge();\n const context = chat.context?.trim() || null;\n const content = chat.content?.length\n ? chat.content\n : [{ type: \"text\", text: chat.message }];\n const contextContent = context\n ? [\n { type: \"text\", text: context },\n ...content.filter((part) => part && part.type !== \"text\"),\n ]\n : content.filter((part) => part && part.type !== \"text\");\n if (\n openAiBridge &&\n typeof openAiBridge.sendFollowUpMessage === \"function\"\n ) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n if (typeof openAiBridge.setWidgetState === \"function\") {\n openAiBridge.setWidgetState({\n ...objectValue(openAiBridge.widgetState),\n agentNativeChatContext: context,\n agentNativeModelContext: {\n content: contextContent,\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n },\n });\n }\n await openAiBridge.sendFollowUpMessage({\n prompt: chat.message,\n scrollToBottom: true,\n });\n return true;\n }\n\n await waitForDirectMcpAppInitialized();\n try {\n await postJsonRpcRequest(\"ui/update-model-context\", {\n content: contextContent,\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n });\n } catch {\n // Best effort: a host without model-context support should still receive\n // the visible chat message.\n }\n await postJsonRpcRequest(\"ui/message\", {\n role: \"user\",\n content,\n });\n return true;\n })().catch(() => false);\n}\n\nexport function getMcpAppHostContext(): McpAppHostContextSnapshot {\n ensureListener();\n const bridge = readOpenAiBridge();\n if (bridge) updateSnapshotFromOpenAiBridge(bridge);\n return snapshot;\n}\n\nexport function useMcpAppHostContext(): McpAppHostContextSnapshot {\n ensureListener();\n return useSyncExternalStore(\n (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n () => snapshot,\n () => EMPTY_HOST_CONTEXT_SNAPSHOT,\n );\n}\n\nexport function updateMcpAppModelContext(\n update: McpAppModelContextUpdate,\n): Promise<boolean> | false {\n return postHostRequest(\n AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT,\n {\n ...(Array.isArray(update.content) ? { content: update.content } : {}),\n ...(update.structuredContent !== undefined\n ? { structuredContent: update.structuredContent }\n : {}),\n },\n );\n}\n\nexport function openMcpAppHostLink(url: string): Promise<boolean> | false {\n if (!url) return false;\n return postHostRequest(AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK, {\n url,\n });\n}\n\nexport function requestMcpAppDisplayMode(\n mode: McpAppDisplayMode,\n): Promise<boolean> | false {\n if (!mode) return false;\n return postHostRequest(\n AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n { mode },\n );\n}\n\nensureListener();\n\n/** Internal test helper. Do not use in app code. */\nexport function _resetMcpAppHostForTests(): void {\n for (const request of pending.values()) clearTimeout(request.timeout);\n for (const request of jsonRpcPending.values()) clearTimeout(request.timeout);\n pending.clear();\n jsonRpcPending.clear();\n directMcpAppInit = null;\n snapshot = { context: null, capabilities: null, version: null };\n listeners.clear();\n}\n\nif (isBrowserWindow()) {\n window.addEventListener(\n \"openai:set_globals\",\n () => {\n const bridge = readOpenAiBridge();\n if (bridge) updateSnapshotFromOpenAiBridge(bridge);\n },\n { passive: true },\n );\n}\n"]}
1
+ {"version":3,"file":"mcp-app-host.js","sourceRoot":"","sources":["../../src/client/mcp-app-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { getFrameOrigin } from \"./frame.js\";\nimport {\n getEmbedAuthToken,\n isEmbedAuthActive,\n markEmbedMcpChatBridgeActive,\n isEmbedMcpChatBridgeActive,\n readEmbedMcpChatBridgeFlagFromUrl,\n} from \"./embed-auth.js\";\nimport {\n EMBED_MODE_QUERY_PARAM,\n EMBED_TOKEN_QUERY_PARAM,\n MCP_APP_CHAT_BRIDGE_QUERY_PARAM,\n} from \"../shared/embed-auth.js\";\n\nexport const AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES = {\n HOST_CONTEXT: \"agentNative.mcpHostContext\",\n UPDATE_MODEL_CONTEXT: \"agentNative.mcpHost.updateModelContext\",\n OPEN_LINK: \"agentNative.mcpHost.openLink\",\n REQUEST_DISPLAY_MODE: \"agentNative.mcpHost.requestDisplayMode\",\n RESPONSE: \"agentNative.mcpHost.response\",\n} as const;\n\nexport type AgentNativeMcpAppHostMessageType =\n (typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES)[keyof typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES];\n\nexport type McpAppDisplayMode = \"inline\" | \"pip\" | \"fullscreen\" | (string & {});\n\nexport interface McpAppModelContextContentPart {\n type: string;\n [key: string]: unknown;\n}\n\nexport interface McpAppModelContextUpdate {\n content?: McpAppModelContextContentPart[];\n structuredContent?: unknown;\n}\n\nexport interface McpAppHostChatMessage {\n message: string;\n context?: string;\n content?: McpAppModelContextContentPart[];\n structuredContent?: unknown;\n}\n\nexport interface McpAppHostCapabilities {\n updateModelContext?: boolean;\n openLink?: boolean;\n displayModes?: McpAppDisplayMode[];\n [key: string]: unknown;\n}\n\nexport interface McpAppHostContext {\n capabilities?: McpAppHostCapabilities;\n [key: string]: unknown;\n}\n\nexport interface McpAppHostContextSnapshot {\n context: McpAppHostContext | null;\n capabilities: McpAppHostCapabilities | null;\n version: unknown;\n}\n\ntype PendingRequest = {\n resolve: (ok: boolean) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype PendingJsonRpcRequest = {\n resolve: (result: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype HostContextMessage = {\n type: typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.HOST_CONTEXT;\n data?: {\n context?: unknown;\n capabilities?: unknown;\n version?: unknown;\n };\n};\n\ntype HostResponseMessage = {\n type: typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.RESPONSE;\n data?: {\n requestId?: unknown;\n ok?: unknown;\n result?: unknown;\n error?: unknown;\n };\n};\n\nconst REQUEST_TIMEOUT_MS = 5000;\nconst DIRECT_MCP_APP_PROTOCOL_VERSION = \"2026-01-26\";\n\nlet snapshot: McpAppHostContextSnapshot = {\n context: null,\n capabilities: null,\n version: null,\n};\nconst EMPTY_HOST_CONTEXT_SNAPSHOT: McpAppHostContextSnapshot = {\n context: null,\n capabilities: null,\n version: null,\n};\nconst listeners = new Set<() => void>();\nconst pending = new Map<string, PendingRequest>();\nconst jsonRpcPending = new Map<string, PendingJsonRpcRequest>();\nlet directMcpAppInit: Promise<boolean> | null = null;\nlet listenerInstalled = false;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isBrowserWindow(): boolean {\n return (\n typeof window !== \"undefined\" && typeof window.postMessage === \"function\"\n );\n}\n\nfunction isInChildFrame(): boolean {\n if (!isBrowserWindow()) return false;\n try {\n return window.parent !== window;\n } catch {\n return false;\n }\n}\n\nfunction isMcpAppBridgeEnabled(): boolean {\n if (!isBrowserWindow()) return false;\n if (readEmbedMcpChatBridgeFlagFromUrl()) markEmbedMcpChatBridgeActive();\n if (isEmbedMcpChatBridgeActive() && isEmbedAuthActive()) return true;\n const params = new URLSearchParams(window.location.search || \"\");\n return (\n params.get(EMBED_MODE_QUERY_PARAM) === \"1\" &&\n (params.has(EMBED_TOKEN_QUERY_PARAM) || Boolean(getEmbedAuthToken())) &&\n params.get(MCP_APP_CHAT_BRIDGE_QUERY_PARAM) === \"1\"\n );\n}\n\nfunction isClaudeMcpContentHost(): boolean {\n if (!isBrowserWindow()) return false;\n try {\n return /(^|\\.)claudemcpcontent\\.com$/i.test(window.location.hostname || \"\");\n } catch {\n return false;\n }\n}\n\nfunction hasWrapperBridge(): boolean {\n if (!isBrowserWindow()) return false;\n const params = new URLSearchParams(window.location.search || \"\");\n const mode =\n params.get(\"embedMode\") ??\n params.get(\"renderMode\") ??\n params.get(\"embed_mode\") ??\n \"\";\n if (mode === \"iframe\" || mode === \"nested\") return true;\n if (params.get(\"nested\") === \"1\" || params.get(\"frame\") === \"iframe\") {\n return true;\n }\n if (isClaudeMcpContentHost()) return false;\n return Boolean(getFrameOrigin());\n}\n\nfunction isTrustedParentMessage(event: MessageEvent): boolean {\n if (!isInChildFrame()) return false;\n if (event.source !== window.parent) return false;\n // Defense in depth: once the parent's real origin is known (captured from the\n // browser-stamped event.origin during the frameOrigin handshake, so it can't\n // be spoofed), also require inbound messages to come from that origin. When\n // it isn't known yet (null) or is opaque (\"null\"), fall back to source-only.\n const expectedOrigin = getFrameOrigin();\n if (expectedOrigin && expectedOrigin !== \"null\") {\n return event.origin === expectedOrigin;\n }\n return true;\n}\n\nfunction requestId(): string {\n return `mcp-host-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction jsonRpcRequestId(): string {\n return `mcp-ui-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction notify() {\n for (const listener of listeners) listener();\n}\n\nfunction updateSnapshot(data: HostContextMessage[\"data\"]): void {\n if (!isRecord(data)) return;\n snapshot = {\n context: isRecord(data.context)\n ? (data.context as McpAppHostContext)\n : snapshot.context,\n capabilities: isRecord(data.capabilities)\n ? (data.capabilities as McpAppHostCapabilities)\n : snapshot.capabilities,\n version: data.version !== undefined ? data.version : snapshot.version,\n };\n notify();\n}\n\nfunction updateSnapshotFromInitialize(result: unknown): void {\n if (!isRecord(result)) return;\n updateSnapshot({\n context: result.hostContext,\n capabilities: result.hostCapabilities,\n version: result.hostInfo ?? result.protocolVersion,\n });\n}\n\nfunction updateSnapshotFromOpenAiBridge(bridge: OpenAiAppBridge): void {\n updateSnapshot({\n context: {\n displayMode: bridge.displayMode,\n availableDisplayModes:\n typeof bridge.requestDisplayMode === \"function\"\n ? [\"inline\", \"fullscreen\", \"pip\"]\n : [],\n maxHeight: bridge.maxHeight,\n locale: bridge.locale,\n theme: bridge.theme,\n view: bridge.view,\n },\n capabilities: {\n updateModelContext: typeof bridge.setWidgetState === \"function\",\n openLink: typeof bridge.openExternal === \"function\",\n displayModes:\n typeof bridge.requestDisplayMode === \"function\"\n ? [\"inline\", \"fullscreen\", \"pip\"]\n : [],\n openai: true,\n },\n version: bridge.userAgent,\n });\n}\n\nfunction resolvePending(data: HostResponseMessage[\"data\"]): void {\n if (!isRecord(data) || typeof data.requestId !== \"string\") return;\n const request = pending.get(data.requestId);\n if (!request) return;\n pending.delete(data.requestId);\n clearTimeout(request.timeout);\n request.resolve(data.ok === true);\n}\n\nfunction resolveJsonRpc(data: Record<string, unknown>): void {\n const id = typeof data.id === \"string\" ? data.id : String(data.id ?? \"\");\n if (!id) return;\n const request = jsonRpcPending.get(id);\n if (!request) return;\n jsonRpcPending.delete(id);\n clearTimeout(request.timeout);\n if (isRecord(data.error)) {\n const message =\n typeof data.error.message === \"string\"\n ? data.error.message\n : \"MCP Apps host request failed.\";\n request.reject(new Error(message));\n return;\n }\n request.resolve(data.result ?? {});\n}\n\nfunction handleJsonRpcNotification(message: Record<string, unknown>): void {\n if (message.method !== \"ui/notifications/host-context-changed\") return;\n updateSnapshot({\n context: isRecord(message.params) ? message.params : undefined,\n });\n}\n\nfunction onMessage(event: MessageEvent): void {\n if (!isTrustedParentMessage(event)) return;\n const message = event.data;\n if (!isRecord(message)) return;\n\n if (message.type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.HOST_CONTEXT) {\n updateSnapshot((message as HostContextMessage).data);\n return;\n }\n\n if (message.type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.RESPONSE) {\n resolvePending((message as HostResponseMessage).data);\n return;\n }\n\n if (message.jsonrpc === \"2.0\") {\n if (\"id\" in message && (\"result\" in message || \"error\" in message)) {\n resolveJsonRpc(message);\n return;\n }\n if (typeof message.method === \"string\") {\n handleJsonRpcNotification(message);\n }\n }\n}\n\nfunction ensureListener(): void {\n if (!isBrowserWindow() || listenerInstalled) return;\n window.addEventListener(\"message\", onMessage);\n listenerInstalled = true;\n}\n\nfunction postHostRequest(\n type:\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n data: Record<string, unknown>,\n): Promise<boolean> | false {\n ensureListener();\n if (!isInChildFrame() || !isMcpAppBridgeEnabled()) return false;\n\n if (!hasWrapperBridge()) {\n return postDirectHostRequest(type, data);\n }\n\n const id =\n typeof data.requestId === \"string\" && data.requestId\n ? data.requestId\n : requestId();\n const payload = { ...data, requestId: id };\n\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n pending.delete(id);\n resolve(false);\n }, REQUEST_TIMEOUT_MS);\n pending.set(id, { resolve, timeout });\n\n try {\n window.parent.postMessage({ type, data: payload }, \"*\");\n } catch {\n pending.delete(id);\n clearTimeout(timeout);\n resolve(false);\n }\n });\n}\n\nfunction postWrapperHostChat(chat: McpAppHostChatMessage): Promise<boolean> {\n ensureListener();\n const id = requestId();\n return new Promise((resolve) => {\n const timeout = setTimeout(() => {\n pending.delete(id);\n resolve(false);\n }, REQUEST_TIMEOUT_MS);\n pending.set(id, { resolve, timeout });\n\n try {\n window.parent.postMessage(\n {\n type: \"agentNative.submitChat\",\n data: {\n requestId: id,\n message: chat.message,\n context: chat.context?.trim() || \"\",\n submit: true,\n ...(chat.content?.length ? { content: chat.content } : {}),\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n },\n },\n \"*\",\n );\n } catch {\n pending.delete(id);\n clearTimeout(timeout);\n resolve(false);\n }\n });\n}\n\ninterface OpenAiAppBridge {\n widgetState?: unknown;\n displayMode?: unknown;\n maxHeight?: unknown;\n locale?: unknown;\n theme?: unknown;\n view?: unknown;\n userAgent?: unknown;\n setWidgetState?: (state: unknown) => void;\n sendFollowUpMessage?: (args: {\n prompt: string;\n scrollToBottom?: boolean;\n }) => unknown | Promise<unknown>;\n openExternal?: (args: {\n href: string;\n redirectUrl?: boolean;\n }) => unknown | Promise<unknown>;\n requestDisplayMode?: (args: {\n mode: McpAppDisplayMode;\n }) => unknown | Promise<unknown>;\n}\n\nfunction readOpenAiBridge(): OpenAiAppBridge | null {\n if (!isBrowserWindow()) return null;\n const bridge = (window as unknown as { openai?: unknown }).openai;\n return bridge && typeof bridge === \"object\"\n ? (bridge as OpenAiAppBridge)\n : null;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction postJsonRpcNotification(method: string, params?: unknown): void {\n if (!isInChildFrame()) return;\n try {\n window.parent.postMessage({ jsonrpc: \"2.0\", method, params }, \"*\");\n } catch {\n // Best-effort lifecycle notification.\n }\n}\n\nfunction postJsonRpcRequest(\n method: string,\n params?: unknown,\n): Promise<unknown> | false {\n ensureListener();\n if (!isInChildFrame()) return false;\n\n const id = jsonRpcRequestId();\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n jsonRpcPending.delete(id);\n reject(new Error(\"MCP Apps host did not respond.\"));\n }, REQUEST_TIMEOUT_MS);\n jsonRpcPending.set(id, { resolve, reject, timeout });\n\n try {\n window.parent.postMessage({ jsonrpc: \"2.0\", id, method, params }, \"*\");\n } catch (err) {\n jsonRpcPending.delete(id);\n clearTimeout(timeout);\n reject(err instanceof Error ? err : new Error(String(err)));\n }\n });\n}\n\nasync function ensureDirectMcpAppInitialized(): Promise<boolean> {\n if (!isInChildFrame() || !isMcpAppBridgeEnabled()) return false;\n if (hasWrapperBridge()) return true;\n\n const openAiBridge = readOpenAiBridge();\n if (openAiBridge) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n return true;\n }\n\n if (!directMcpAppInit) {\n directMcpAppInit = (async () => {\n const result = await postJsonRpcRequest(\"ui/initialize\", {\n protocolVersion: DIRECT_MCP_APP_PROTOCOL_VERSION,\n appInfo: { name: \"Agent Native App\", version: \"1.0.0\" },\n appCapabilities: {\n availableDisplayModes: [\"inline\", \"fullscreen\", \"pip\"],\n },\n });\n updateSnapshotFromInitialize(result);\n postJsonRpcNotification(\"ui/notifications/initialized\", {});\n return true;\n })().catch(() => {\n // Reset so the next call retries the handshake. Otherwise one timed-out\n // ui/initialize (e.g. host briefly unresponsive) leaves a permanently\n // resolved `Promise<false>` cached here, and every later bridge call\n // fails until full page reload.\n directMcpAppInit = null;\n return false as boolean;\n });\n }\n\n return directMcpAppInit;\n}\n\nasync function waitForDirectMcpAppInitialized(): Promise<void> {\n const ok = await ensureDirectMcpAppInitialized();\n if (!ok) throw new Error(\"MCP Apps host bridge is not available.\");\n}\n\nasync function postDirectHostRequest(\n type:\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n | typeof AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n data: Record<string, unknown>,\n): Promise<boolean> {\n const openAiBridge = readOpenAiBridge();\n if (openAiBridge) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT &&\n typeof openAiBridge.setWidgetState === \"function\"\n ) {\n openAiBridge.setWidgetState({\n ...objectValue(openAiBridge.widgetState),\n agentNativeModelContext: {\n ...(Array.isArray(data.content) ? { content: data.content } : {}),\n ...(data.structuredContent !== undefined\n ? { structuredContent: data.structuredContent }\n : {}),\n },\n });\n return true;\n }\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK &&\n typeof openAiBridge.openExternal === \"function\" &&\n typeof data.url === \"string\"\n ) {\n await openAiBridge.openExternal({\n href: data.url,\n redirectUrl: false,\n });\n return true;\n }\n if (\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE &&\n typeof openAiBridge.requestDisplayMode === \"function\" &&\n typeof data.mode === \"string\"\n ) {\n await openAiBridge.requestDisplayMode({ mode: data.mode });\n updateSnapshotFromOpenAiBridge(openAiBridge);\n return true;\n }\n }\n\n await waitForDirectMcpAppInitialized();\n const method =\n type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT\n ? \"ui/update-model-context\"\n : type === AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK\n ? \"ui/open-link\"\n : \"ui/request-display-mode\";\n await postJsonRpcRequest(method, data);\n return true;\n}\n\nexport function sendMcpAppHostMessage(\n chat: McpAppHostChatMessage,\n): Promise<boolean> | false {\n if (!chat.message.trim() || !isInChildFrame() || !isMcpAppBridgeEnabled()) {\n return false;\n }\n\n if (hasWrapperBridge()) return postWrapperHostChat(chat);\n\n return (async () => {\n const openAiBridge = readOpenAiBridge();\n const context = chat.context?.trim() || null;\n const content = chat.content?.length\n ? chat.content\n : [{ type: \"text\", text: chat.message }];\n const contextContent = context\n ? [\n { type: \"text\", text: context },\n ...content.filter((part) => part && part.type !== \"text\"),\n ]\n : content.filter((part) => part && part.type !== \"text\");\n if (\n openAiBridge &&\n typeof openAiBridge.sendFollowUpMessage === \"function\"\n ) {\n updateSnapshotFromOpenAiBridge(openAiBridge);\n if (typeof openAiBridge.setWidgetState === \"function\") {\n openAiBridge.setWidgetState({\n ...objectValue(openAiBridge.widgetState),\n agentNativeChatContext: context,\n agentNativeModelContext: {\n content: contextContent,\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n },\n });\n }\n await openAiBridge.sendFollowUpMessage({\n prompt: chat.message,\n scrollToBottom: true,\n });\n return true;\n }\n\n await waitForDirectMcpAppInitialized();\n try {\n await postJsonRpcRequest(\"ui/update-model-context\", {\n content: contextContent,\n ...(chat.structuredContent !== undefined\n ? { structuredContent: chat.structuredContent }\n : {}),\n });\n } catch {\n // Best effort: a host without model-context support should still receive\n // the visible chat message.\n }\n await postJsonRpcRequest(\"ui/message\", {\n role: \"user\",\n content,\n });\n return true;\n })().catch(() => false);\n}\n\nexport function getMcpAppHostContext(): McpAppHostContextSnapshot {\n ensureListener();\n const bridge = readOpenAiBridge();\n if (bridge) updateSnapshotFromOpenAiBridge(bridge);\n return snapshot;\n}\n\nexport function useMcpAppHostContext(): McpAppHostContextSnapshot {\n ensureListener();\n return useSyncExternalStore(\n (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n () => snapshot,\n () => EMPTY_HOST_CONTEXT_SNAPSHOT,\n );\n}\n\nexport function updateMcpAppModelContext(\n update: McpAppModelContextUpdate,\n): Promise<boolean> | false {\n return postHostRequest(\n AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.UPDATE_MODEL_CONTEXT,\n {\n ...(Array.isArray(update.content) ? { content: update.content } : {}),\n ...(update.structuredContent !== undefined\n ? { structuredContent: update.structuredContent }\n : {}),\n },\n );\n}\n\nexport function openMcpAppHostLink(url: string): Promise<boolean> | false {\n if (!url) return false;\n return postHostRequest(AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.OPEN_LINK, {\n url,\n });\n}\n\nexport function requestMcpAppDisplayMode(\n mode: McpAppDisplayMode,\n): Promise<boolean> | false {\n if (!mode) return false;\n return postHostRequest(\n AGENT_NATIVE_MCP_APP_HOST_MESSAGE_TYPES.REQUEST_DISPLAY_MODE,\n { mode },\n );\n}\n\nensureListener();\n\n/** Internal test helper. Do not use in app code. */\nexport function _resetMcpAppHostForTests(): void {\n for (const request of pending.values()) clearTimeout(request.timeout);\n for (const request of jsonRpcPending.values()) clearTimeout(request.timeout);\n pending.clear();\n jsonRpcPending.clear();\n directMcpAppInit = null;\n snapshot = { context: null, capabilities: null, version: null };\n listeners.clear();\n}\n\nif (isBrowserWindow()) {\n window.addEventListener(\n \"openai:set_globals\",\n () => {\n const bridge = readOpenAiBridge();\n if (bridge) updateSnapshotFromOpenAiBridge(bridge);\n },\n { passive: true },\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AAssCA,wBAAgB,cAAc,4CA+uB7B"}
1
+ {"version":3,"file":"ResourcesPanel.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourcesPanel.tsx"],"names":[],"mappings":"AAosCA,wBAAgB,cAAc,4CA+uB7B"}
@@ -559,7 +559,6 @@ Workspace resources are for files users intentionally add, edit, or manage. Agen
559
559
  `;
560
560
  const WORKSPACE_RESOURCE_OWNER = "__workspace__";
561
561
  const SHARED_RESOURCE_OWNER = "__shared__";
562
- // BuilderBrowserCard moved to settings/BrowserSection.tsx
563
562
  export function ResourcesPanel() {
564
563
  const { data: org } = useOrg();
565
564
  // Non-admin org members get read-only access to organization resources.