{"version":3,"file":"copilotkit-angular-mcp-apps.mjs","sources":["../../src/mcp-apps/lib/mcp-apps-content.ts","../../src/mcp-apps/lib/mcp-apps-request-queue.ts","../../src/mcp-apps/lib/mcp-apps-config.ts","../../src/mcp-apps/lib/mcp-apps-widget.ts","../../src/mcp-apps/lib/mcp-apps-activity-renderer.ts","../../src/mcp-apps/lib/provide-mcp-apps.ts","../../src/mcp-apps/copilotkit-angular-mcp-apps.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n\nconst annotationsSchema = z.looseObject({\n  audience: z.array(z.enum([\"user\", \"assistant\"])).optional(),\n  priority: z.number().min(0).max(1).optional(),\n  lastModified: z.string().optional(),\n});\n\nconst base64Schema = z\n  .string()\n  .refine(\n    (value) =>\n      value.length % 4 === 0 &&\n      /^[A-Za-z0-9+/]*={0,2}$/.test(value) &&\n      !/=/.test(value.slice(0, -2)),\n    \"Expected base64-encoded data\",\n  );\n\nconst resourceContentsSchema = z.union([\n  z.looseObject({\n    uri: z.string(),\n    mimeType: z.string().optional(),\n    text: z.string(),\n  }),\n  z.looseObject({\n    uri: z.string(),\n    mimeType: z.string().optional(),\n    blob: base64Schema,\n  }),\n]);\n\nconst contentItemSchema = z.discriminatedUnion(\"type\", [\n  z.looseObject({\n    type: z.literal(\"text\"),\n    text: z.string(),\n    annotations: annotationsSchema.optional(),\n  }),\n  z.looseObject({\n    type: z.literal(\"image\"),\n    data: base64Schema,\n    mimeType: z.string(),\n    annotations: annotationsSchema.optional(),\n  }),\n  z.looseObject({\n    type: z.literal(\"audio\"),\n    data: base64Schema,\n    mimeType: z.string(),\n    annotations: annotationsSchema.optional(),\n  }),\n  z.looseObject({\n    type: z.literal(\"resource\"),\n    resource: resourceContentsSchema,\n    annotations: annotationsSchema.optional(),\n  }),\n  z.looseObject({\n    type: z.literal(\"resource_link\"),\n    uri: z.string(),\n    name: z.string(),\n    description: z.string().optional(),\n    mimeType: z.string().optional(),\n    annotations: annotationsSchema.optional(),\n  }),\n]);\n\nconst callToolResultSchema = z.looseObject({\n  content: z.array(contentItemSchema).default([]),\n  structuredContent: z.record(z.string(), z.unknown()).optional(),\n  isError: z.boolean().optional(),\n  _meta: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Content schema for `activityType: \"mcp-apps\"` activity messages: a snapshot\n * of an MCP Apps tool call, carrying the middleware server hash, optional\n * stable server id, the ui:// resource to render, and its tool exchange.\n *\n * Kept local and declared with the `zod/v4` API so the Angular browser bundle\n * validates protocol data without taking a direct MCP client SDK dependency.\n */\nexport const mcpAppsSnapshotContentSchema = z.looseObject({\n  serverHash: z.string(),\n  serverId: z.string().optional(),\n  resourceUri: z.string(),\n  result: callToolResultSchema,\n  toolInput: z.record(z.string(), z.unknown()).optional(),\n});\n\n/** Parsed content of an `mcp-apps` activity message. */\nexport type MCPAppsSnapshotContent = z.infer<\n  typeof mcpAppsSnapshotContentSchema\n>;\n","const DEFAULT_IDLE_TIMEOUT_MS = 30_000;\nconst DEFAULT_IDLE_POLL_INTERVAL_MS = 500;\n\nexport interface MCPAppsQueueAgent {\n  threadId?: string;\n  isRunning: boolean;\n  subscribe(callbacks: {\n    onRunFinalized: () => void;\n    onRunFailed: () => void;\n  }): { unsubscribe(): void };\n}\n\nexport interface MCPAppsRequestQueueOptions {\n  idleTimeoutMs?: number;\n  idlePollIntervalMs?: number;\n}\n\nexport interface MCPAppsQueueRequest<T> {\n  agent: MCPAppsQueueAgent;\n  ownerId: string;\n  execute: (signal: AbortSignal) => Promise<T>;\n  dropAfterThreadSwitch?: boolean;\n}\n\ntype QueueItem = {\n  agent: MCPAppsQueueAgent;\n  capturedThreadId: string;\n  controller: AbortController;\n  dropAfterThreadSwitch: boolean;\n  execute: (signal: AbortSignal) => Promise<unknown>;\n  ownerId: string;\n  reject: (error: Error) => void;\n  resolve: (result: unknown) => void;\n};\n\n/** Raised when a renderer cancels MCP work that it owns. */\nexport class MCPAppsQueueCancelledError extends Error {\n  constructor() {\n    super(\"MCP Apps request cancelled because its renderer was destroyed.\");\n    this.name = \"MCPAppsQueueCancelledError\";\n  }\n}\n\n/** Raised when an agent does not become idle within the configured limit. */\nexport class MCPAppsQueueTimeoutError extends Error {\n  constructor(timeoutMs: number) {\n    super(`Timed out waiting ${timeoutMs}ms for the agent to become idle.`);\n    this.name = \"MCPAppsQueueTimeoutError\";\n  }\n}\n\n/** Raised when a queued follow-up no longer belongs to the active thread. */\nexport class MCPAppsQueueThreadChangedError extends Error {\n  constructor(originThreadId: string, currentThreadId: string) {\n    super(\n      `Dropped MCP Apps follow-up after thread changed from \"${originThreadId}\" to \"${currentThreadId}\".`,\n    );\n    this.name = \"MCPAppsQueueThreadChangedError\";\n  }\n}\n\n/**\n * Serializes MCP requests per agent thread while retaining renderer ownership.\n *\n * An owner can abort its queued and active waits without affecting requests\n * created by another renderer. Follow-ups can additionally opt into a\n * thread-identity check immediately before execution.\n */\nexport class MCPAppsRequestQueue {\n  private readonly queues = new Map<\n    MCPAppsQueueAgent,\n    Map<string, QueueItem[]>\n  >();\n  private readonly processing = new Map<MCPAppsQueueAgent, Set<string>>();\n  private readonly idleTimeoutMs: number;\n  private readonly idlePollIntervalMs: number;\n\n  constructor(options: MCPAppsRequestQueueOptions = {}) {\n    this.idleTimeoutMs = positiveDuration(\n      options.idleTimeoutMs,\n      DEFAULT_IDLE_TIMEOUT_MS,\n      \"idleTimeoutMs\",\n    );\n    this.idlePollIntervalMs = positiveDuration(\n      options.idlePollIntervalMs,\n      DEFAULT_IDLE_POLL_INTERVAL_MS,\n      \"idlePollIntervalMs\",\n    );\n  }\n\n  /** Enqueues one request and resolves it in FIFO order for its thread. */\n  enqueue<T>(request: MCPAppsQueueRequest<T>): Promise<T> {\n    const capturedThreadId = request.agent.threadId || \"default\";\n\n    return new Promise<T>((resolve, reject) => {\n      const agentQueues =\n        this.queues.get(request.agent) ?? new Map<string, QueueItem[]>();\n      const queue = agentQueues.get(capturedThreadId) ?? [];\n      const item: QueueItem = {\n        agent: request.agent,\n        capturedThreadId,\n        controller: new AbortController(),\n        dropAfterThreadSwitch: request.dropAfterThreadSwitch ?? false,\n        execute: request.execute,\n        ownerId: request.ownerId,\n        reject,\n        resolve: (result) => resolve(result as T),\n      };\n\n      queue.push(item);\n      agentQueues.set(capturedThreadId, queue);\n      this.queues.set(request.agent, agentQueues);\n      void this.processQueue(request.agent, capturedThreadId);\n    });\n  }\n\n  /** Cancels only requests associated with the supplied renderer owner. */\n  cancelOwner(ownerId: string): void {\n    for (const agentQueues of this.queues.values()) {\n      for (const queue of agentQueues.values()) {\n        for (const item of queue) {\n          if (item.ownerId === ownerId && !item.controller.signal.aborted) {\n            item.controller.abort();\n            item.reject(new MCPAppsQueueCancelledError());\n          }\n        }\n      }\n    }\n  }\n\n  private async processQueue(\n    agent: MCPAppsQueueAgent,\n    threadId: string,\n  ): Promise<void> {\n    const processingThreads = this.processing.get(agent) ?? new Set<string>();\n    if (processingThreads.has(threadId)) return;\n    processingThreads.add(threadId);\n    this.processing.set(agent, processingThreads);\n\n    try {\n      const queue = this.queues.get(agent)?.get(threadId);\n      if (!queue) return;\n\n      while (queue.length > 0) {\n        const item = queue[0]!;\n\n        try {\n          this.throwIfCancelled(item.controller.signal);\n          await this.waitForAgentIdle(item.agent, item.controller.signal);\n          this.throwIfCancelled(item.controller.signal);\n\n          const currentThreadId = item.agent.threadId || \"default\";\n          if (\n            item.dropAfterThreadSwitch &&\n            currentThreadId !== item.capturedThreadId\n          ) {\n            throw new MCPAppsQueueThreadChangedError(\n              item.capturedThreadId,\n              currentThreadId,\n            );\n          }\n\n          const result = await raceWithAbort(\n            item.execute(item.controller.signal),\n            item.controller.signal,\n          );\n          item.resolve(result);\n        } catch (error) {\n          item.reject(asError(error));\n        } finally {\n          queue.shift();\n        }\n      }\n    } finally {\n      const agentQueues = this.queues.get(agent);\n      agentQueues?.delete(threadId);\n      if (agentQueues?.size === 0) this.queues.delete(agent);\n\n      processingThreads.delete(threadId);\n      if (processingThreads.size === 0) this.processing.delete(agent);\n    }\n  }\n\n  private waitForAgentIdle(\n    agent: MCPAppsQueueAgent,\n    signal: AbortSignal,\n  ): Promise<void> {\n    if (!agent.isRunning) return Promise.resolve();\n\n    return new Promise<void>((resolve, reject) => {\n      let settled = false;\n      let subscription: { unsubscribe(): void } | undefined;\n      let interval: ReturnType<typeof setInterval> | undefined;\n\n      const cleanup = () => {\n        clearTimeout(timeout);\n        if (interval !== undefined) clearInterval(interval);\n        subscription?.unsubscribe();\n        signal.removeEventListener(\"abort\", cancel);\n      };\n      const finish = () => {\n        if (settled) return;\n        settled = true;\n        cleanup();\n        resolve();\n      };\n      const fail = (error: Error) => {\n        if (settled) return;\n        settled = true;\n        cleanup();\n        reject(error);\n      };\n      const cancel = () => fail(new MCPAppsQueueCancelledError());\n      const timeout = setTimeout(\n        () => fail(new MCPAppsQueueTimeoutError(this.idleTimeoutMs)),\n        this.idleTimeoutMs,\n      );\n\n      signal.addEventListener(\"abort\", cancel, { once: true });\n      subscription = agent.subscribe({\n        onRunFinalized: finish,\n        onRunFailed: finish,\n      });\n      interval = setInterval(() => {\n        if (!agent.isRunning) finish();\n      }, this.idlePollIntervalMs);\n\n      if (signal.aborted) cancel();\n    });\n  }\n\n  private throwIfCancelled(signal: AbortSignal): void {\n    if (signal.aborted) throw new MCPAppsQueueCancelledError();\n  }\n}\n\nfunction positiveDuration(\n  value: number | undefined,\n  fallback: number,\n  name: string,\n): number {\n  const resolved = value ?? fallback;\n  if (!Number.isFinite(resolved) || resolved <= 0) {\n    throw new RangeError(`${name} must be a positive finite number.`);\n  }\n  return resolved;\n}\n\nfunction raceWithAbort<T>(\n  promise: Promise<T>,\n  signal: AbortSignal,\n): Promise<T> {\n  if (signal.aborted) return Promise.reject(new MCPAppsQueueCancelledError());\n\n  return new Promise<T>((resolve, reject) => {\n    const cancel = () => reject(new MCPAppsQueueCancelledError());\n    signal.addEventListener(\"abort\", cancel, { once: true });\n    promise.then(\n      (value) => {\n        signal.removeEventListener(\"abort\", cancel);\n        resolve(value);\n      },\n      (error: unknown) => {\n        signal.removeEventListener(\"abort\", cancel);\n        reject(error);\n      },\n    );\n  });\n}\n\nfunction asError(error: unknown): Error {\n  return error instanceof Error ? error : new Error(String(error));\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport interface MCPAppsHostInfo {\n  name: string;\n  version: string;\n}\n\nexport interface MCPAppsConfig {\n  /** Maximum time to wait for a busy agent before a queued request fails. */\n  idleTimeoutMs?: number;\n  /** Maximum time to wait for the sandbox proxy initialization handshake. */\n  initializationTimeoutMs?: number;\n  /** Host identity announced during the MCP Apps initialization handshake. */\n  hostInfo?: MCPAppsHostInfo;\n  /** Additional protocol capabilities announced to embedded MCP Apps. */\n  hostCapabilities?: Record<string, unknown>;\n  /** Additional non-secret UI context announced to embedded MCP Apps. */\n  hostContext?: Record<string, unknown>;\n}\n\nexport const DEFAULT_MCP_APPS_CONFIG: Readonly<Required<MCPAppsConfig>> = {\n  idleTimeoutMs: 30_000,\n  initializationTimeoutMs: 30_000,\n  hostInfo: {\n    name: \"CopilotKit MCP Apps Host\",\n    version: \"1.0.0\",\n  },\n  hostCapabilities: {\n    openLinks: {},\n    serverTools: {},\n    logging: {},\n  },\n  hostContext: {\n    theme: \"light\",\n    platform: \"web\",\n  },\n};\n\n/** Holds renderer behavior configuration registered via `provideMCPApps`. */\nexport const MCP_APPS_CONFIG = new InjectionToken<Required<MCPAppsConfig>>(\n  \"MCP_APPS_CONFIG\",\n  { factory: () => ({ ...DEFAULT_MCP_APPS_CONFIG }) },\n);\n","import { isPlatformBrowser } from \"@angular/common\";\nimport type { AbstractAgent, RunAgentResult } from \"@ag-ui/client\";\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  PLATFORM_ID,\n  afterRenderEffect,\n  computed,\n  inject,\n  input,\n  signal,\n  viewChild,\n} from \"@angular/core\";\nimport { CopilotKit } from \"@copilotkit/angular\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { type MCPAppsSnapshotContent } from \"./mcp-apps-content\";\nimport {\n  MCPAppsQueueCancelledError,\n  MCPAppsQueueThreadChangedError,\n  MCPAppsRequestQueue,\n} from \"./mcp-apps-request-queue\";\nimport { MCP_APPS_CONFIG } from \"./mcp-apps-config\";\n\nconst PROTOCOL_VERSION = \"2025-06-18\";\n\nconst queuesByIdleTimeout = new Map<number, MCPAppsRequestQueue>();\n\ninterface FetchedResource {\n  uri: string;\n  mimeType?: string;\n  text?: string;\n  blob?: string;\n  _meta?: {\n    ui?: {\n      prefersBorder?: boolean;\n      csp?: { resourceDomains?: string[] };\n    };\n  };\n}\n\ninterface JSONRPCMessage {\n  jsonrpc: \"2.0\";\n  id?: string | number;\n  method: string;\n  params?: Record<string, unknown>;\n}\n\n/**\n * Renders one MCP App snapshot through the same agent-mediated protocol used\n * by the other CopilotKit frontends. Each instance owns its queued work and\n * sandbox listener, while requests remain serialized per agent thread.\n */\n@Component({\n  selector: \"copilot-mcp-apps-widget\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div class=\"copilot-mcp-apps-container\">\n      @if (loading()) {\n        <p class=\"copilot-mcp-apps-status\" role=\"status\" aria-live=\"polite\">\n          Loading MCP App…\n        </p>\n      }\n      @if (error()) {\n        <p class=\"copilot-mcp-apps-error\" role=\"alert\">{{ error() }}</p>\n      }\n      <iframe\n        #appFrame\n        class=\"copilot-mcp-apps-frame\"\n        data-testid=\"mcp-app-iframe\"\n        title=\"Interactive MCP application\"\n      ></iframe>\n    </div>\n  `,\n  styles: `\n    .copilot-mcp-apps-container {\n      position: relative;\n      width: 100%;\n      min-height: 100px;\n      overflow: hidden;\n    }\n\n    .copilot-mcp-apps-frame {\n      display: block;\n      width: 100%;\n      min-height: 100px;\n      border: 0;\n      background: transparent;\n    }\n\n    .copilot-mcp-apps-status,\n    .copilot-mcp-apps-error {\n      margin: 0;\n      padding: 16px;\n    }\n\n    .copilot-mcp-apps-status {\n      color: #525252;\n    }\n\n    .copilot-mcp-apps-error {\n      color: #991b1b;\n    }\n  `,\n})\nexport class CopilotMCPAppsWidget {\n  private readonly config = inject(MCP_APPS_CONFIG);\n  private readonly copilotKit = inject(CopilotKit);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly ownerId = randomUUID();\n  private readonly queue = queueForTimeout(this.config.idleTimeoutMs);\n  private renderVersion = 0;\n\n  readonly data = input.required<MCPAppsSnapshotContent>();\n  readonly agent = input<AbstractAgent | undefined>();\n\n  private readonly renderSession = computed(\n    () => ({ agent: this.agent(), data: this.data() }),\n    {\n      equal: (previous, current) =>\n        previous.agent === current.agent &&\n        areStructurallyEqual(previous.data, current.data),\n    },\n  );\n\n  private readonly appFrame =\n    viewChild.required<ElementRef<HTMLIFrameElement>>(\"appFrame\");\n  protected readonly loading = signal(true);\n  protected readonly error = signal(\"\");\n\n  constructor() {\n    afterRenderEffect((onCleanup) => {\n      const frame = this.appFrame().nativeElement;\n      const { data, agent } = this.renderSession();\n      const version = ++this.renderVersion;\n      const controller = new AbortController();\n\n      this.queue.cancelOwner(this.ownerId);\n      this.resetFrame(frame);\n\n      onCleanup(() => {\n        controller.abort();\n        this.queue.cancelOwner(this.ownerId);\n        frame.removeAttribute(\"srcdoc\");\n        frame.removeAttribute(\"src\");\n        frame.removeAttribute(\"data-mcp-app-initialized\");\n      });\n\n      if (!isPlatformBrowser(this.platformId)) {\n        this.loading.set(false);\n        return;\n      }\n\n      void this.renderApp(frame, data, agent, controller, version);\n    });\n  }\n\n  private async renderApp(\n    frame: HTMLIFrameElement,\n    data: MCPAppsSnapshotContent,\n    agent: AbstractAgent | undefined,\n    controller: AbortController,\n    version: number,\n  ): Promise<void> {\n    if (!agent) {\n      this.fail(\"No agent is available to load this MCP App.\", frame, version);\n      return;\n    }\n\n    try {\n      const runResult = await this.queue.enqueue({\n        agent,\n        ownerId: this.ownerId,\n        execute: () =>\n          agent.runAgent({\n            forwardedProps: {\n              __proxiedMCPRequest: {\n                serverHash: data.serverHash,\n                serverId: data.serverId,\n                method: \"resources/read\",\n                params: { uri: data.resourceUri },\n              },\n            },\n          }),\n      });\n      this.throwIfStale(controller.signal, version);\n\n      const resource = findResource(runResult, data.resourceUri);\n      const html = resource.text\n        ? resource.text\n        : resource.blob\n          ? decodeBase64(resource.blob)\n          : undefined;\n      if (!html) {\n        throw new Error(\"The MCP App resource has no text or blob content.\");\n      }\n\n      frame.removeAttribute(\"data-mcp-app-initialized\");\n      const sandboxReady = this.connectSandbox(\n        frame,\n        data,\n        agent,\n        controller.signal,\n        version,\n      );\n      frame.setAttribute(\n        \"sandbox\",\n        \"allow-scripts allow-same-origin allow-forms\",\n      );\n      frame.removeAttribute(\"src\");\n      frame.srcdoc = buildSandboxHTML(resource._meta?.ui?.csp?.resourceDomains);\n\n      await sandboxReady;\n      this.throwIfStale(controller.signal, version);\n      this.sendNotification(frame, \"ui/notifications/sandbox-resource-ready\", {\n        html,\n      });\n      this.loading.set(false);\n    } catch (error) {\n      if (isCancellation(error)) return;\n      this.fail(asError(error).message, frame, version);\n    }\n  }\n\n  private connectSandbox(\n    frame: HTMLIFrameElement,\n    data: MCPAppsSnapshotContent,\n    agent: AbstractAgent,\n    abortSignal: AbortSignal,\n    version: number,\n  ): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      let ready = false;\n      const timeout = setTimeout(() => {\n        cleanup();\n        reject(\n          new Error(\n            `Timed out waiting ${this.config.initializationTimeoutMs}ms for the MCP App sandbox.`,\n          ),\n        );\n      }, this.config.initializationTimeoutMs);\n      const cancel = () => {\n        cleanup();\n        reject(new MCPAppsQueueCancelledError());\n      };\n      const onMessage = (event: MessageEvent) => {\n        if (event.source !== frame.contentWindow) return;\n        const message = parseJSONRPCMessage(event.data);\n        if (!message) return;\n\n        if (message.method === \"ui/notifications/sandbox-proxy-ready\") {\n          if (!ready) {\n            ready = true;\n            clearTimeout(timeout);\n            resolve();\n          }\n          return;\n        }\n\n        void this.handleMessage(\n          frame,\n          data,\n          agent,\n          message,\n          abortSignal,\n          version,\n        );\n      };\n      const cleanup = () => {\n        clearTimeout(timeout);\n        window.removeEventListener(\"message\", onMessage);\n        abortSignal.removeEventListener(\"abort\", cancel);\n      };\n\n      window.addEventListener(\"message\", onMessage);\n      abortSignal.addEventListener(\"abort\", cancel, { once: true });\n      if (abortSignal.aborted) cancel();\n\n      // Keep protocol messages connected after initialization. Cleanup occurs\n      // when this render session's abort signal fires.\n      abortSignal.addEventListener(\n        \"abort\",\n        () => window.removeEventListener(\"message\", onMessage),\n        { once: true },\n      );\n    });\n  }\n\n  private async handleMessage(\n    frame: HTMLIFrameElement,\n    data: MCPAppsSnapshotContent,\n    agent: AbstractAgent,\n    message: JSONRPCMessage,\n    abortSignal: AbortSignal,\n    version: number,\n  ): Promise<void> {\n    if (abortSignal.aborted || version !== this.renderVersion) return;\n\n    if (message.id !== undefined) {\n      switch (message.method) {\n        case \"ui/initialize\":\n          frame.setAttribute(\"data-mcp-app-initialized\", \"true\");\n          this.sendResponse(frame, message.id, {\n            protocolVersion: PROTOCOL_VERSION,\n            hostInfo: this.config.hostInfo,\n            hostCapabilities: this.config.hostCapabilities,\n            hostContext: this.config.hostContext,\n          });\n          return;\n        case \"ui/message\":\n          await this.handleUIMessage(frame, agent, message, version);\n          return;\n        case \"ui/open-link\":\n          this.handleOpenLink(frame, message);\n          return;\n        case \"tools/call\":\n          await this.handleToolCall(frame, data, agent, message, abortSignal);\n          return;\n        default:\n          this.sendError(\n            frame,\n            message.id,\n            -32601,\n            `Method not found: ${message.method}`,\n          );\n          return;\n      }\n    }\n\n    switch (message.method) {\n      case \"ui/notifications/initialized\":\n        if (data.toolInput) {\n          this.sendNotification(frame, \"ui/notifications/tool-input\", {\n            arguments: data.toolInput,\n          });\n        }\n        this.sendNotification(\n          frame,\n          \"ui/notifications/tool-result\",\n          data.result as Record<string, unknown>,\n        );\n        break;\n      case \"ui/notifications/size-changed\": {\n        const height = message.params?.height;\n        if (\n          typeof height === \"number\" &&\n          Number.isFinite(height) &&\n          height > 0\n        ) {\n          frame.style.height = `${Math.ceil(Math.min(height, 5000))}px`;\n        }\n        break;\n      }\n      case \"notifications/message\":\n        console.info(\"[CopilotKit MCP App]\", message.params ?? {});\n        break;\n    }\n  }\n\n  private async handleUIMessage(\n    frame: HTMLIFrameElement,\n    agent: AbstractAgent,\n    message: JSONRPCMessage & { id?: string | number },\n    version: number,\n  ): Promise<void> {\n    const id = message.id!;\n    const role = message.params?.role === \"assistant\" ? \"assistant\" : \"user\";\n    const content = Array.isArray(message.params?.content)\n      ? message.params.content\n          .filter(isTextContent)\n          .map((part) => part.text)\n          .join(\"\\n\")\n      : \"\";\n\n    if (content) {\n      agent.addMessage({ id: randomUUID(), role, content });\n    }\n    this.sendResponse(frame, id, { isError: false });\n\n    const shouldFollowUp =\n      typeof message.params?.followUp === \"boolean\"\n        ? message.params.followUp\n        : role === \"user\";\n    if (!shouldFollowUp || !content) return;\n\n    try {\n      await this.queue.enqueue({\n        agent,\n        ownerId: this.ownerId,\n        dropAfterThreadSwitch: true,\n        execute: () => this.copilotKit.core.runAgent({ agent }),\n      });\n    } catch (error) {\n      if (isCancellation(error)) return;\n      this.fail(\n        `MCP App follow-up failed: ${asError(error).message}`,\n        frame,\n        version,\n      );\n    }\n  }\n\n  private handleOpenLink(\n    frame: HTMLIFrameElement,\n    message: JSONRPCMessage,\n  ): void {\n    const id = message.id!;\n    const url = safeExternalURL(message.params?.url);\n    if (!url) {\n      this.sendError(frame, id, -32602, \"A valid HTTP(S) URL is required.\");\n      return;\n    }\n    window.open(url, \"_blank\", \"noopener,noreferrer\");\n    this.sendResponse(frame, id, { isError: false });\n  }\n\n  private async handleToolCall(\n    frame: HTMLIFrameElement,\n    data: MCPAppsSnapshotContent,\n    agent: AbstractAgent,\n    message: JSONRPCMessage,\n    abortSignal: AbortSignal,\n  ): Promise<void> {\n    const id = message.id!;\n    try {\n      const runResult = await this.queue.enqueue({\n        agent,\n        ownerId: this.ownerId,\n        execute: () =>\n          agent.runAgent({\n            forwardedProps: {\n              __proxiedMCPRequest: {\n                serverHash: data.serverHash,\n                serverId: data.serverId,\n                method: \"tools/call\",\n                params: message.params,\n              },\n            },\n          }),\n      });\n      if (!abortSignal.aborted)\n        this.sendResponse(frame, id, runResult.result ?? {});\n    } catch (error) {\n      if (isCancellation(error)) return;\n      this.sendError(frame, id, -32603, asError(error).message);\n    }\n  }\n\n  private sendResponse(\n    frame: HTMLIFrameElement,\n    id: string | number,\n    result: unknown,\n  ): void {\n    frame.contentWindow?.postMessage({ jsonrpc: \"2.0\", id, result }, \"*\");\n  }\n\n  private sendError(\n    frame: HTMLIFrameElement,\n    id: string | number,\n    code: number,\n    message: string,\n  ): void {\n    frame.contentWindow?.postMessage(\n      { jsonrpc: \"2.0\", id, error: { code, message } },\n      \"*\",\n    );\n  }\n\n  private sendNotification(\n    frame: HTMLIFrameElement,\n    method: string,\n    params: Record<string, unknown>,\n  ): void {\n    frame.contentWindow?.postMessage({ jsonrpc: \"2.0\", method, params }, \"*\");\n  }\n\n  private fail(\n    message: string,\n    frame: HTMLIFrameElement,\n    version: number,\n  ): void {\n    if (version !== this.renderVersion) return;\n    this.loading.set(false);\n    this.error.set(message);\n    frame.removeAttribute(\"srcdoc\");\n    frame.removeAttribute(\"src\");\n    frame.removeAttribute(\"data-mcp-app-initialized\");\n  }\n\n  private resetFrame(frame: HTMLIFrameElement): void {\n    this.loading.set(true);\n    this.error.set(\"\");\n    frame.style.removeProperty(\"height\");\n    frame.removeAttribute(\"srcdoc\");\n    frame.removeAttribute(\"src\");\n    frame.removeAttribute(\"data-mcp-app-initialized\");\n  }\n\n  private throwIfStale(abortSignal: AbortSignal, version: number): void {\n    if (abortSignal.aborted || version !== this.renderVersion) {\n      throw new MCPAppsQueueCancelledError();\n    }\n  }\n}\n\nfunction queueForTimeout(idleTimeoutMs: number): MCPAppsRequestQueue {\n  let queue = queuesByIdleTimeout.get(idleTimeoutMs);\n  if (!queue) {\n    queue = new MCPAppsRequestQueue({ idleTimeoutMs });\n    queuesByIdleTimeout.set(idleTimeoutMs, queue);\n  }\n  return queue;\n}\n\nfunction findResource(\n  runResult: RunAgentResult,\n  resourceUri: string,\n): FetchedResource {\n  const result = runResult.result as\n    | { contents?: FetchedResource[] }\n    | undefined;\n  const resource = result?.contents?.find(\n    (candidate) => candidate.uri === resourceUri,\n  );\n  if (!resource) {\n    throw new Error(\n      `No matching MCP App resource was returned for \"${resourceUri}\".`,\n    );\n  }\n  return resource;\n}\n\nfunction parseJSONRPCMessage(value: unknown): JSONRPCMessage | undefined {\n  if (\n    !isRecord(value) ||\n    value.jsonrpc !== \"2.0\" ||\n    typeof value.method !== \"string\"\n  ) {\n    return undefined;\n  }\n  if (\n    value.id !== undefined &&\n    typeof value.id !== \"string\" &&\n    typeof value.id !== \"number\"\n  ) {\n    return undefined;\n  }\n  if (value.params !== undefined && !isRecord(value.params)) return undefined;\n  return value as unknown as JSONRPCMessage;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction isTextContent(\n  value: unknown,\n): value is { type: \"text\"; text: string } {\n  return (\n    isRecord(value) && value.type === \"text\" && typeof value.text === \"string\"\n  );\n}\n\nfunction safeExternalURL(value: unknown): string | undefined {\n  if (typeof value !== \"string\") return undefined;\n  try {\n    const url = new URL(value, window.location.href);\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return undefined;\n    if (url.username || url.password) return undefined;\n    return url.href;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction decodeBase64(value: string): string {\n  try {\n    const binary = atob(value);\n    const bytes = Uint8Array.from(binary, (character) =>\n      character.charCodeAt(0),\n    );\n    return new TextDecoder().decode(bytes);\n  } catch {\n    throw new Error(\"The MCP App resource contains invalid base64 content.\");\n  }\n}\n\nfunction isCancellation(error: unknown): boolean {\n  return (\n    error instanceof MCPAppsQueueCancelledError ||\n    error instanceof MCPAppsQueueThreadChangedError\n  );\n}\n\nfunction asError(error: unknown): Error {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\n/** Compares JSON-compatible activity snapshots without relying on object identity. */\nfunction areStructurallyEqual(left: unknown, right: unknown): boolean {\n  if (Object.is(left, right)) return true;\n  if (Array.isArray(left) || Array.isArray(right)) {\n    return (\n      Array.isArray(left) &&\n      Array.isArray(right) &&\n      left.length === right.length &&\n      left.every((value, index) => areStructurallyEqual(value, right[index]))\n    );\n  }\n  if (!isRecord(left) || !isRecord(right)) return false;\n\n  const leftKeys = Object.keys(left);\n  const rightKeys = Object.keys(right);\n  return (\n    leftKeys.length === rightKeys.length &&\n    leftKeys.every(\n      (key) =>\n        Object.prototype.hasOwnProperty.call(right, key) &&\n        areStructurallyEqual(left[key], right[key]),\n    )\n  );\n}\n\nfunction buildSandboxHTML(extraCspDomains?: string[]): string {\n  const baseScriptSrc =\n    \"'self' 'wasm-unsafe-eval' 'unsafe-inline' 'unsafe-eval' blob: data: http://localhost:* https://localhost:*\";\n  const baseFrameSrc = \"* blob: data: http://localhost:* https://localhost:*\";\n  const extra = extraCspDomains?.length ? ` ${extraCspDomains.join(\" \")}` : \"\";\n  const scriptSrc = baseScriptSrc + extra;\n  const frameSrc = baseFrameSrc + extra;\n\n  return `<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\" />\n<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self'; img-src * data: blob: 'unsafe-inline'; media-src * blob: data:; font-src * blob: data:; script-src ${scriptSrc}; style-src * blob: data: 'unsafe-inline'; connect-src *; frame-src ${frameSrc}; base-uri 'self';\" />\n<style>html,body{margin:0;padding:0;height:100%;width:100%;overflow:hidden}*{box-sizing:border-box}iframe{background-color:transparent;border:none;padding:0;overflow:hidden;width:100%;height:100%}</style>\n</head>\n<body>\n<script>\nif(window.self===window.top){throw new Error(\"This file must be used in an iframe.\")}\nconst inner=document.createElement(\"iframe\");\ninner.style=\"width:100%;height:100%;border:none;\";\ninner.setAttribute(\"sandbox\",\"allow-scripts allow-same-origin allow-forms\");\ndocument.body.appendChild(inner);\nwindow.addEventListener(\"message\",async(event)=>{\nif(event.source===window.parent){\nif(event.data&&event.data.method===\"ui/notifications/sandbox-resource-ready\"){\nconst{html,sandbox}=event.data.params;\nif(typeof sandbox===\"string\")inner.setAttribute(\"sandbox\",sandbox);\nif(typeof html===\"string\")inner.srcdoc=html;\n}else if(inner&&inner.contentWindow){\ninner.contentWindow.postMessage(event.data,\"*\");\n}\n}else if(event.source===inner.contentWindow){window.parent.postMessage(event.data,\"*\")}\n});\nwindow.parent.postMessage({jsonrpc:\"2.0\",method:\"ui/notifications/sandbox-proxy-ready\",params:{}},\"*\");\n</script>\n</body>\n</html>`;\n}\n","import type { AbstractAgent, ActivityMessage } from \"@ag-ui/client\";\nimport { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport type {\n  ActivityRenderer,\n  RenderActivityMessageConfig,\n} from \"@copilotkit/angular\";\nimport {\n  mcpAppsSnapshotContentSchema,\n  type MCPAppsSnapshotContent,\n} from \"./mcp-apps-content\";\nimport { CopilotMCPAppsWidget } from \"./mcp-apps-widget\";\n\n/**\n * Activity renderer for `mcp-apps` snapshots. Renders the referenced MCP App\n * inline via {@link CopilotMCPAppsWidget}. Resource and tool requests are\n * proxied through the activity's selected AG-UI agent.\n */\n@Component({\n  selector: \"copilot-mcp-apps-activity-renderer\",\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CopilotMCPAppsWidget],\n  template: `\n    <copilot-mcp-apps-widget [data]=\"content()\" [agent]=\"agent()\" />\n  `,\n})\nexport class CopilotMCPAppsActivityRenderer implements ActivityRenderer<MCPAppsSnapshotContent> {\n  readonly activityType = input.required<string>();\n  readonly content = input.required<MCPAppsSnapshotContent>();\n  readonly message = input.required<ActivityMessage>();\n  readonly agent = input<AbstractAgent | undefined>();\n}\n\n/**\n * Ready-to-register render config for `mcp-apps` activity messages. Pass it\n * to `provideCopilotKit({ renderActivityMessages: [...] })`.\n */\nexport const mcpAppsActivityRendererConfig: RenderActivityMessageConfig<MCPAppsSnapshotContent> =\n  {\n    activityType: \"mcp-apps\",\n    content: mcpAppsSnapshotContentSchema,\n    component: CopilotMCPAppsActivityRenderer,\n  };\n","import {\n  makeEnvironmentProviders,\n  type EnvironmentProviders,\n} from \"@angular/core\";\nimport { ɵCOPILOTKIT_BUILT_IN_ACTIVITY_RENDERERS } from \"@copilotkit/angular\";\nimport { mcpAppsActivityRendererConfig } from \"./mcp-apps-activity-renderer\";\nimport {\n  DEFAULT_MCP_APPS_CONFIG,\n  MCP_APPS_CONFIG,\n  type MCPAppsConfig,\n  type MCPAppsHostInfo,\n} from \"./mcp-apps-config\";\n\nexport type { MCPAppsConfig, MCPAppsHostInfo } from \"./mcp-apps-config\";\nexport { DEFAULT_MCP_APPS_CONFIG, MCP_APPS_CONFIG } from \"./mcp-apps-config\";\n\n/**\n * Configures and registers the built-in MCP Apps renderer.\n *\n * MCP resource and tool requests always travel through the selected AG-UI\n * agent. Server URLs deliberately are not accepted by this browser provider.\n * Application renderers retain precedence over this built-in registration.\n */\nexport function provideMCPApps(\n  config: MCPAppsConfig = {},\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    {\n      provide: MCP_APPS_CONFIG,\n      useValue: {\n        ...DEFAULT_MCP_APPS_CONFIG,\n        ...config,\n        hostInfo: {\n          ...DEFAULT_MCP_APPS_CONFIG.hostInfo,\n          ...config.hostInfo,\n        },\n        hostCapabilities: {\n          ...DEFAULT_MCP_APPS_CONFIG.hostCapabilities,\n          ...config.hostCapabilities,\n        },\n        hostContext: {\n          ...DEFAULT_MCP_APPS_CONFIG.hostContext,\n          ...config.hostContext,\n        },\n      } satisfies Required<MCPAppsConfig>,\n    },\n    {\n      provide: ɵCOPILOTKIT_BUILT_IN_ACTIVITY_RENDERERS,\n      multi: true,\n      useValue: mcpAppsActivityRendererConfig,\n    },\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["asError","ɵCOPILOTKIT_BUILT_IN_ACTIVITY_RENDERERS"],"mappings":"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"}