{"version":3,"file":"runtime.cjs","names":["pkg","DebugEventBus","resolveForwardHeadersPolicy","createLogger","InMemoryAgentRunner","RUNTIME_MODE_SSE","IntelligenceAgentRunner","RUNTIME_MODE_INTELLIGENCE"],"sources":["../../../../src/v2/runtime/core/runtime.ts"],"sourcesContent":["import type {\n  MaybePromise,\n  NonEmptyRecord,\n  RuntimeMode,\n} from \"@copilotkit/shared\";\nimport {\n  RUNTIME_MODE_SSE,\n  RUNTIME_MODE_INTELLIGENCE,\n} from \"@copilotkit/shared\";\nimport { createLicenseChecker } from \"@copilotkit/license-verifier\";\nimport type { LicenseChecker } from \"@copilotkit/license-verifier\";\nimport { resolveDebugConfig } from \"@copilotkit/shared\";\nimport type { ResolvedDebugConfig, DebugConfig } from \"@copilotkit/shared\";\nimport { resolveForwardHeadersPolicy } from \"../handlers/header-utils\";\nimport type {\n  ForwardHeadersConfig,\n  ResolvedForwardHeadersPolicy,\n} from \"../handlers/header-utils\";\nimport type { AbstractAgent } from \"@ag-ui/client\";\nimport type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { A2UIMiddlewareConfig } from \"@ag-ui/a2ui-middleware\";\nimport pkg from \"../../../../package.json\";\nimport type {\n  BeforeRequestMiddleware,\n  AfterRequestMiddleware,\n} from \"./middleware\";\nimport { createLogger } from \"../../../lib/logger\";\nimport type { CopilotRuntimeLogger } from \"../../../lib/logger\";\nimport { logRuntimeTelemetryDisclosure } from \"../../../lib/telemetry-disclosure\";\nimport type { TranscriptionService } from \"../transcription-service/transcription-service\";\nimport { DebugEventBus } from \"./debug-event-bus\";\nimport type { AgentRunner } from \"../runner/agent-runner\";\nimport { InMemoryAgentRunner } from \"../runner/in-memory\";\nimport { IntelligenceAgentRunner } from \"../runner/intelligence\";\nimport type { CopilotKitIntelligence } from \"../intelligence-platform\";\n// Type-only: @copilotkit/channels-core is the pure-ESM type source, so a value import would break this\n// package's CJS output. The channels are validated + activated (wired to delivery\n// transports) by `startChannels` from @copilotkit/channels-intelligence, called\n// by the Channel-listener bootstrap — not here.\nimport type { Channel } from \"@copilotkit/channels-core\";\nimport telemetry from \"../telemetry/telemetry-client\";\n\nexport const VERSION = pkg.version;\n\ninterface BaseCopilotRuntimeMiddlewareOptions {\n  /** If set, middleware only applies to these named agents. Applies to all agents if omitted. */\n  agents?: string[];\n}\n\nexport type McpAppsServerConfig = MCPClientConfig & {\n  /** Agent to bind this server to. If omitted, the server is available to all agents. */\n  agentId?: string;\n};\n\nexport interface McpAppsConfig {\n  /** List of MCP server configurations. */\n  servers: McpAppsServerConfig[];\n}\n\nexport interface OpenGenerativeUIOptions extends BaseCopilotRuntimeMiddlewareOptions {}\n\nexport type OpenGenerativeUIConfig = boolean | OpenGenerativeUIOptions;\n\ninterface CopilotRuntimeMiddlewares {\n  /**\n   * Auto-apply A2UIMiddleware to agents at run time.\n   * Pass an object to enable and customise behaviour, or omit to disable.\n   */\n  a2ui?: BaseCopilotRuntimeMiddlewareOptions &\n    A2UIMiddlewareConfig & {\n      /**\n       * Explicit on/off switch. Omit (or set `true`) to enable; set `false`\n       * to disable A2UI for this runtime while keeping the rest of the config\n       * (e.g. a `schema`/`catalog`) in place. A bare `a2ui: {}` stays enabled\n       * for backwards compatibility.\n       */\n      enabled?: boolean;\n    };\n  /** Auto-apply MCPAppsMiddleware to agents at run time. */\n  mcpApps?: McpAppsConfig;\n  /** Auto-apply OpenGenerativeUIMiddleware to agents at run time. */\n  openGenerativeUI?: OpenGenerativeUIConfig;\n}\n\n/**\n * Context passed to agent factory functions for per-request agent resolution.\n */\nexport interface AgentFactoryContext {\n  /** The incoming HTTP request. */\n  request: Request;\n}\n\n/**\n * A function that dynamically creates agents on a per-request basis.\n * Useful for multi-tenant scenarios or request-scoped agent configuration.\n */\nexport type AgentsFactory = (\n  ctx: AgentFactoryContext,\n) => MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>;\n\n/**\n * Agents can be provided as:\n * - A static record of agents\n * - A Promise that resolves to a record of agents\n * - A factory function that receives request context and returns agents (or a Promise of agents)\n */\nexport type AgentsConfig =\n  | MaybePromise<NonEmptyRecord<Record<string, AbstractAgent>>>\n  | AgentsFactory;\n\n/**\n * Resolve an AgentsConfig value to a concrete record of agents.\n * If the config is a factory function, it is called with the given request context.\n * Otherwise it is awaited directly (static record or Promise).\n */\nexport async function resolveAgents(\n  agents: AgentsConfig,\n  request?: Request,\n): Promise<Record<string, AbstractAgent>> {\n  if (typeof agents === \"function\") {\n    if (!request) {\n      throw new Error(\n        \"Agent factory function requires a request context, but none was provided.\",\n      );\n    }\n    return agents({ request });\n  }\n  return agents;\n}\n\ninterface BaseCopilotRuntimeOptions extends CopilotRuntimeMiddlewares {\n  /**\n   * Map of available agents, or a factory function for per-request agent resolution.\n   *\n   * Static record:\n   * ```ts\n   * agents: { support: new SupportAgent(), technical: new TechnicalAgent() }\n   * ```\n   *\n   * Factory function (called per-request):\n   * ```ts\n   * agents: ({ request }) => {\n   *   const tenantId = request.headers.get(\"x-tenant-id\");\n   *   return { default: createAgentForTenant(tenantId) };\n   * }\n   * ```\n   */\n  agents: AgentsConfig;\n  /** Optional transcription service for audio processing. */\n  transcriptionService?: TranscriptionService;\n  /** Optional *before* middleware – callback function or webhook URL. */\n  beforeRequestMiddleware?: BeforeRequestMiddleware;\n  /** Optional *after* middleware – callback function or webhook URL. */\n  afterRequestMiddleware?: AfterRequestMiddleware;\n  /** Signed license token for server-side feature verification. Falls back to COPILOTKIT_LICENSE_TOKEN env var. */\n  licenseToken?: string;\n  /** Enable debug logging for the event pipeline. */\n  debug?: DebugConfig;\n  /**\n   * Policy controlling which inbound HTTP headers are forwarded onto the\n   * outgoing agent call. By default a built-in denylist strips known\n   * infrastructure/proxy/platform headers (`x-forwarded-*`, `x-real-ip`,\n   * `x-vercel-*`, `x-copilotcloud-*`, etc.) while `authorization` and custom\n   * `x-*` application headers continue to forward (#5712). Set\n   * `{ useDefaultDenylist: false }` to restore the previous wide-open behavior.\n   */\n  forwardHeaders?: ForwardHeadersConfig;\n}\n\nexport interface CopilotRuntimeUser {\n  id: string;\n  name: string;\n}\n\nexport type IdentifyUserCallback = (\n  request: Request,\n) => MaybePromise<CopilotRuntimeUser>;\n\nexport interface CopilotSseRuntimeOptions extends BaseCopilotRuntimeOptions {\n  /** The runner to use for running agents in SSE mode. */\n  runner?: AgentRunner;\n  intelligence?: undefined;\n  generateThreadNames?: undefined;\n  /** Intelligence Channels require the Intelligence runtime; not available in SSE mode. */\n  channels?: undefined;\n}\n\nexport interface CopilotIntelligenceRuntimeOptions extends BaseCopilotRuntimeOptions {\n  /** Configures Intelligence mode for durable threads and realtime events. */\n  intelligence: CopilotKitIntelligence;\n  /** Resolves the authenticated user for intelligence requests. */\n  identifyUser: IdentifyUserCallback;\n  /** Auto-generate short names for newly created threads. */\n  generateThreadNames?: boolean;\n  /** Max delay (ms) for WebSocket reconnect backoff. @default 10_000 */\n  maxReconnectMs?: number;\n  /** Max delay (ms) for channel rejoin backoff. @default 30_000 */\n  maxRejoinMs?: number;\n  /** Lock TTL in seconds. Clamped to a maximum of 3600 (1 hour). @default 20 */\n  lockTtlSeconds?: number;\n  /** Custom Redis key prefix for the thread lock. */\n  lockKeyPrefix?: string;\n  /** Interval in seconds at which the runtime renews the thread lock. Clamped to a maximum of 3000 (50 minutes). @default 15 */\n  lockHeartbeatIntervalSeconds?: number;\n  /**\n   * Intelligence Channels declared by this runtime. Each is a\n   * `createChannel({ name })` instance. Only available on the Intelligence runtime\n   * path. Names are validated (required, lowercase kebab-case, unique) and wired\n   * to delivery/egress transports when activated via `startChannels` from\n   * `@copilotkit/channels-intelligence` — not at construction.\n   */\n  channels?: Channel[];\n}\n\nexport type CopilotRuntimeOptions =\n  | CopilotSseRuntimeOptions\n  | CopilotIntelligenceRuntimeOptions;\n\nexport interface CopilotRuntimeLike {\n  agents: CopilotRuntimeOptions[\"agents\"];\n  transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n  beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n  afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n  runner: AgentRunner;\n  a2ui: CopilotRuntimeOptions[\"a2ui\"];\n  mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n  openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n  intelligence?: CopilotKitIntelligence;\n  identifyUser?: IdentifyUserCallback;\n  mode: RuntimeMode;\n  licenseChecker?: LicenseChecker;\n  debugEventBus?: DebugEventBus;\n  debug: ResolvedDebugConfig;\n  debugLogger?: CopilotRuntimeLogger;\n  /**\n   * Resolved inbound-header forwarding policy read by the /run and /connect call\n   * sites. Optional on the published interface so an external `CopilotRuntimeLike`\n   * implementor predating this field stays source-compatible (non-breaking minor\n   * release). Concrete runtimes (`BaseCopilotRuntime`) always resolve and set it;\n   * the call sites coalesce a missing value to the default resolved policy\n   * (`resolveForwardHeadersPolicy(undefined)` — default-on denylist).\n   */\n  forwardHeadersPolicy?: ResolvedForwardHeadersPolicy;\n}\n\nexport interface CopilotSseRuntimeLike extends CopilotRuntimeLike {\n  intelligence?: undefined;\n  mode: typeof RUNTIME_MODE_SSE;\n}\n\nexport interface CopilotIntelligenceRuntimeLike extends CopilotRuntimeLike {\n  intelligence: CopilotKitIntelligence;\n  identifyUser: IdentifyUserCallback;\n  generateThreadNames: boolean;\n  lockTtlSeconds: number;\n  lockKeyPrefix?: string;\n  lockHeartbeatIntervalSeconds: number;\n  channels: Channel[];\n  mode: typeof RUNTIME_MODE_INTELLIGENCE;\n}\n\nabstract class BaseCopilotRuntime implements CopilotRuntimeLike {\n  public agents: CopilotRuntimeOptions[\"agents\"];\n  public transcriptionService: CopilotRuntimeOptions[\"transcriptionService\"];\n  public beforeRequestMiddleware: CopilotRuntimeOptions[\"beforeRequestMiddleware\"];\n  public afterRequestMiddleware: CopilotRuntimeOptions[\"afterRequestMiddleware\"];\n  public runner: AgentRunner;\n  public a2ui: CopilotRuntimeOptions[\"a2ui\"];\n  public mcpApps: CopilotRuntimeOptions[\"mcpApps\"];\n  public openGenerativeUI: CopilotRuntimeOptions[\"openGenerativeUI\"];\n  public licenseChecker?: LicenseChecker;\n  public readonly debugEventBus?: DebugEventBus;\n  public debug: ResolvedDebugConfig;\n  public debugLogger?: CopilotRuntimeLogger;\n  public readonly forwardHeadersPolicy: ResolvedForwardHeadersPolicy;\n\n  /**\n   * License token resolved once with the env fallback, so telemetry\n   * attribution (below) and subclass feature gating\n   * (CopilotIntelligenceRuntime's licenseChecker) read the exact same value\n   * instead of each re-applying `?? COPILOTKIT_LICENSE_TOKEN`.\n   */\n  protected readonly resolvedLicenseToken?: string;\n\n  abstract readonly intelligence?: CopilotKitIntelligence;\n  abstract readonly mode: RuntimeMode;\n\n  constructor(options: BaseCopilotRuntimeOptions, runner: AgentRunner) {\n    logRuntimeTelemetryDisclosure();\n\n    const {\n      agents,\n      transcriptionService,\n      beforeRequestMiddleware,\n      afterRequestMiddleware,\n      a2ui,\n      mcpApps,\n      openGenerativeUI,\n    } = options;\n\n    this.agents = agents;\n    this.transcriptionService = transcriptionService;\n    this.beforeRequestMiddleware = beforeRequestMiddleware;\n    this.afterRequestMiddleware = afterRequestMiddleware;\n    this.a2ui = a2ui || undefined;\n    this.mcpApps = mcpApps;\n    this.openGenerativeUI = openGenerativeUI;\n    this.runner = runner;\n\n    // Resolve the license token once (matching the license-verifier's env\n    // fallback) so telemetry attribution and subclass feature gating share\n    // one value.\n    this.resolvedLicenseToken =\n      options.licenseToken ?? process.env.COPILOTKIT_LICENSE_TOKEN;\n\n    // Attribute telemetry to the licensed customer for *every* runtime mode.\n    // Done in the shared base (not the subclasses) so SSE and Intelligence\n    // runtimes behave identically — previously only CopilotIntelligenceRuntime\n    // set this, so self-hosted SSE users never got a telemetry_id on their\n    // runtime events even with a license token configured.\n    if (this.resolvedLicenseToken) {\n      telemetry.setLicenseToken(this.resolvedLicenseToken);\n    }\n\n    if (process.env.NODE_ENV !== \"production\") {\n      this.debugEventBus = new DebugEventBus();\n    }\n    // Resolve the inbound-header forwarding policy once (mirroring the\n    // `debug` → `ResolvedDebugConfig` resolve-once above) so both the /run and\n    // /connect call sites read the exact same resolved policy off the runtime\n    // and can never diverge.\n    this.forwardHeadersPolicy = resolveForwardHeadersPolicy(\n      options.forwardHeaders,\n    );\n    this.debug = resolveDebugConfig(options.debug);\n    if (this.debug.enabled) {\n      this.debugLogger = createLogger({\n        level: \"debug\",\n        component: \"copilotkit-debug\",\n      });\n    }\n  }\n}\n\nexport class CopilotSseRuntime\n  extends BaseCopilotRuntime\n  implements CopilotSseRuntimeLike\n{\n  readonly intelligence = undefined;\n  readonly mode = RUNTIME_MODE_SSE;\n\n  constructor(options: CopilotSseRuntimeOptions) {\n    // Runtime guard mirroring the discriminated-union type: the SSE runtime has\n    // no Intelligence delivery path, so `channels` cannot be honored here. The\n    // type forbids it, but a JS / `as any` caller passing `{ agents, channels }`\n    // would otherwise land here and have `channels` silently dropped — fail\n    // loud instead.\n    const channels = (options as { channels?: unknown[] }).channels;\n    if (Array.isArray(channels) && channels.length > 0) {\n      throw new Error(\n        \"`channels` requires the Intelligence runtime (pass `intelligence`); \" +\n          \"Intelligence Channels are not available in SSE mode.\",\n      );\n    }\n    super(options, options.runner ?? new InMemoryAgentRunner());\n  }\n}\n\nexport class CopilotIntelligenceRuntime\n  extends BaseCopilotRuntime\n  implements CopilotIntelligenceRuntimeLike\n{\n  readonly intelligence: CopilotKitIntelligence;\n  readonly identifyUser: IdentifyUserCallback;\n  readonly generateThreadNames: boolean;\n  readonly lockTtlSeconds: number;\n  readonly lockKeyPrefix?: string;\n  readonly lockHeartbeatIntervalSeconds: number;\n  readonly channels: Channel[];\n  readonly mode = RUNTIME_MODE_INTELLIGENCE;\n\n  /** Maximum allowed lock TTL in seconds (1 hour). */\n  static readonly MAX_LOCK_TTL_SECONDS = 3_600;\n  /** Maximum allowed heartbeat interval in seconds (50 minutes). */\n  static readonly MAX_HEARTBEAT_INTERVAL_SECONDS = 3_000;\n\n  constructor(options: CopilotIntelligenceRuntimeOptions) {\n    super(\n      options,\n      new IntelligenceAgentRunner({\n        url: options.intelligence.ɵgetRunnerWsUrl(),\n        authToken: options.intelligence.ɵgetRunnerAuthToken(),\n        maxReconnectMs: options.maxReconnectMs,\n        maxRejoinMs: options.maxRejoinMs,\n      }),\n    );\n    this.intelligence = options.intelligence;\n    this.identifyUser = options.identifyUser;\n    this.generateThreadNames = options.generateThreadNames ?? true;\n    // Telemetry attribution is handled by the base constructor for all modes;\n    // here we only need the token for feature gating. Reuse the base-resolved\n    // value so gating and attribution can never disagree.\n    this.licenseChecker = createLicenseChecker(this.resolvedLicenseToken);\n    this.lockTtlSeconds = Math.min(\n      options.lockTtlSeconds ?? 20,\n      CopilotIntelligenceRuntime.MAX_LOCK_TTL_SECONDS,\n    );\n    this.lockKeyPrefix = options.lockKeyPrefix;\n    this.lockHeartbeatIntervalSeconds = Math.min(\n      options.lockHeartbeatIntervalSeconds ?? 15,\n      CopilotIntelligenceRuntime.MAX_HEARTBEAT_INTERVAL_SECONDS,\n    );\n    // Declared Intelligence Channels. Lowercase kebab-case name-shape validation\n    // (`assertValidChannelNames`) lives in the channels-intelligence launcher —\n    // it can't run here because it's a value import from the pure-ESM\n    // `@copilotkit/channels-intelligence`, which this CJS package must not pull in.\n    // Name UNIQUENESS across declared Channels is enforced by\n    // `ChannelManager.activate()`, not the launcher: the managed path activates\n    // one Channel per launcher call, so the launcher never sees the full set.\n    // Fail fast on the most common misconfiguration (a missing name) right here\n    // at construction, though, rather than only at activation.\n    this.channels = options.channels ?? [];\n    for (const c of this.channels) {\n      if (!c.name) {\n        throw new Error(\n          \"Intelligence Channel is missing a `name` — pass createChannel({ name }) for each Channel in `channels`\",\n        );\n      }\n    }\n  }\n}\n\nfunction hasIntelligenceOptions(\n  options: CopilotRuntimeOptions,\n): options is CopilotIntelligenceRuntimeOptions {\n  return \"intelligence\" in options && !!options.intelligence;\n}\n\nexport function isIntelligenceRuntime(\n  runtime: CopilotRuntimeLike,\n): runtime is CopilotIntelligenceRuntimeLike {\n  return runtime.mode === RUNTIME_MODE_INTELLIGENCE && !!runtime.intelligence;\n}\n\n/**\n * Single source of truth for \"is A2UI on for this runtime?\". Both the run path\n * (which applies `A2UIMiddleware`) and the `/info` response (which tells the\n * client whether to mount the A2UI renderer + catalog context) MUST go through\n * this, so they can never disagree — the divergence between them was the root\n * of CopilotKit/CopilotKit#5369.\n *\n * Backwards compatible: any config object is enabled (matching the historical\n * `!!runtime.a2ui`); only an explicit `enabled: false` turns it off.\n */\nexport function isA2UIEnabled(\n  a2ui: CopilotRuntimeOptions[\"a2ui\"],\n): a2ui is NonNullable<CopilotRuntimeOptions[\"a2ui\"]> {\n  return !!a2ui && a2ui.enabled !== false;\n}\n\n/**\n * Compile-time phantom brand marking a {@link CopilotRuntime} that was\n * constructed with at least one declared Intelligence Channel. It has no runtime\n * representation — the shim never sets this property; it exists purely so\n * `createCopilotRuntimeHandler` can tell, at the type level, that the resulting\n * handler will carry a non-optional `.channels` control surface.\n */\nexport interface RuntimeWithDeclaredChannels {\n  /**\n   * @internal Phantom brand key. Never present at runtime; do not read or set.\n   */\n  readonly __copilotkitChannelsDeclared: true;\n}\n\n/**\n * Instance shape of the {@link CopilotRuntime} compatibility shim. Extends\n * {@link CopilotRuntimeLike} with the Intelligence-only accessors the shim\n * surfaces (all `undefined` in SSE mode). Declared explicitly so the exported\n * `CopilotRuntime` name resolves as a type as well as a value.\n */\nexport interface CopilotRuntime extends CopilotRuntimeLike {\n  /** Auto-generate short thread names; `undefined` in SSE mode. */\n  generateThreadNames?: boolean;\n  /** Thread lock TTL in seconds; `undefined` in SSE mode. */\n  lockTtlSeconds?: number;\n  /** Custom Redis key prefix for the thread lock; `undefined` in SSE mode. */\n  lockKeyPrefix?: string;\n  /** Thread lock heartbeat interval in seconds; `undefined` in SSE mode. */\n  lockHeartbeatIntervalSeconds?: number;\n  /** Declared Intelligence Channels; `undefined` in SSE mode. */\n  channels?: Channel[];\n}\n\n/**\n * Constructor type for the {@link CopilotRuntime} compatibility shim.\n *\n * The first overload fires when the caller passes `intelligence` together with a\n * non-empty `channels` tuple: it returns a {@link RuntimeWithDeclaredChannels}-\n * branded runtime, which `createCopilotRuntimeHandler` maps to a handler whose\n * `.channels` is non-optional. Every other configuration (SSE, or Intelligence\n * without channels, or an empty `channels: []`) falls through to the second\n * overload and stays unbranded, so its handler keeps `.channels` optional.\n *\n * A class constructor cannot vary its return type across overloads (it is pinned\n * to the instance type), so the branding lives on this construct-signature\n * interface instead of on the class itself.\n */\nexport interface CopilotRuntimeConstructor {\n  new (\n    options: Omit<CopilotIntelligenceRuntimeOptions, \"channels\"> & {\n      channels: readonly [Channel, ...Channel[]];\n    },\n  ): CopilotRuntime & RuntimeWithDeclaredChannels;\n  new (options: CopilotRuntimeOptions): CopilotRuntime;\n}\n\n/**\n * Compatibility shim that preserves the legacy `CopilotRuntime` entrypoint.\n * New code should prefer `CopilotSseRuntime` or `CopilotIntelligenceRuntime`.\n *\n * Exported to consumers as the {@link CopilotRuntime} value (typed as\n * {@link CopilotRuntimeConstructor}) rather than as a class, so that the\n * channel-presence brand can flow from construction into the handler type.\n */\nclass CopilotRuntimeShim implements CopilotRuntime {\n  private delegate: CopilotRuntimeLike;\n\n  constructor(options: CopilotRuntimeOptions) {\n    this.delegate = hasIntelligenceOptions(options)\n      ? new CopilotIntelligenceRuntime(options)\n      : new CopilotSseRuntime(options);\n  }\n\n  get agents(): CopilotRuntimeOptions[\"agents\"] {\n    return this.delegate.agents;\n  }\n\n  get transcriptionService(): CopilotRuntimeOptions[\"transcriptionService\"] {\n    return this.delegate.transcriptionService;\n  }\n\n  get beforeRequestMiddleware(): CopilotRuntimeOptions[\"beforeRequestMiddleware\"] {\n    return this.delegate.beforeRequestMiddleware;\n  }\n\n  get afterRequestMiddleware(): CopilotRuntimeOptions[\"afterRequestMiddleware\"] {\n    return this.delegate.afterRequestMiddleware;\n  }\n\n  get runner(): AgentRunner {\n    return this.delegate.runner;\n  }\n\n  get a2ui(): CopilotRuntimeOptions[\"a2ui\"] {\n    return this.delegate.a2ui;\n  }\n\n  get mcpApps(): CopilotRuntimeOptions[\"mcpApps\"] {\n    return this.delegate.mcpApps;\n  }\n\n  get openGenerativeUI(): CopilotRuntimeOptions[\"openGenerativeUI\"] {\n    return this.delegate.openGenerativeUI;\n  }\n\n  get intelligence(): CopilotKitIntelligence | undefined {\n    return this.delegate.intelligence;\n  }\n\n  get generateThreadNames(): boolean | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.generateThreadNames\n      : undefined;\n  }\n\n  get identifyUser(): IdentifyUserCallback | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.identifyUser\n      : undefined;\n  }\n\n  get lockTtlSeconds(): number | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.lockTtlSeconds\n      : undefined;\n  }\n\n  get lockKeyPrefix(): string | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.lockKeyPrefix\n      : undefined;\n  }\n\n  get lockHeartbeatIntervalSeconds(): number | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.lockHeartbeatIntervalSeconds\n      : undefined;\n  }\n\n  get channels(): Channel[] | undefined {\n    return isIntelligenceRuntime(this.delegate)\n      ? this.delegate.channels\n      : undefined;\n  }\n\n  get mode(): RuntimeMode {\n    return this.delegate.mode;\n  }\n\n  get licenseChecker() {\n    return this.delegate.licenseChecker;\n  }\n\n  get debugEventBus() {\n    return this.delegate.debugEventBus;\n  }\n\n  get debug(): ResolvedDebugConfig {\n    return this.delegate.debug;\n  }\n\n  get debugLogger(): CopilotRuntimeLogger | undefined {\n    return this.delegate.debugLogger;\n  }\n\n  get forwardHeadersPolicy(): ResolvedForwardHeadersPolicy {\n    return this.delegate.forwardHeadersPolicy;\n  }\n}\n\n/**\n * The public `CopilotRuntime` constructor. Backed by {@link CopilotRuntimeShim}\n * but typed as {@link CopilotRuntimeConstructor} so that constructing with a\n * non-empty `channels` array yields a {@link RuntimeWithDeclaredChannels}-branded\n * runtime type.\n *\n * The `as unknown as` cast is required (not dishonest widening): the brand is a\n * phantom, compile-time-only marker with no runtime representation, so the shim\n * instances legitimately do not carry the brand property. Behavior is identical\n * to the former `class CopilotRuntime` — this only refines the static type.\n */\nexport const CopilotRuntime: CopilotRuntimeConstructor =\n  CopilotRuntimeShim as unknown as CopilotRuntimeConstructor;\n"],"mappings":"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"}