{"version":3,"file":"threadplane-langgraph.mjs","sources":["../../../../libs/langgraph/src/lib/agent-lifecycle-registry.ts","../../../../libs/langgraph/src/lib/agent.types.ts","../../../../libs/langgraph/src/lib/client/create-langgraph-client.ts","../../../../libs/langgraph/src/lib/runtime-operation-reporter.ts","../../../../libs/langgraph/src/lib/transport/fetch-stream.transport.ts","../../../../libs/langgraph/src/lib/internals/subagent-tracker.ts","../../../../libs/langgraph/src/lib/internals/stream-manager.bridge.ts","../../../../libs/langgraph/src/lib/client/client-options.ts","../../../../libs/langgraph/src/lib/internals/branch-tree.ts","../../../../libs/langgraph/src/lib/internals/extract-citations.ts","../../../../libs/langgraph/src/lib/client-tools.ts","../../../../libs/langgraph/src/lib/agent.fn.ts","../../../../libs/langgraph/src/lib/agent.provider.ts","../../../../libs/langgraph/src/lib/inject-agent.ts","../../../../libs/langgraph/src/lib/lifecycle.ts","../../../../libs/langgraph/src/lib/transport/mock-stream.transport.ts","../../../../libs/langgraph/src/lib/testing/mock-langgraph-agent.ts","../../../../libs/langgraph/src/lib/testing/fake-stream.transport.ts","../../../../libs/langgraph/src/lib/testing/provide-fake-agent.ts","../../../../libs/langgraph/src/lib/threads/threads-adapter.ts","../../../../libs/langgraph/src/lib/threads/refresh-on.ts","../../../../libs/langgraph/src/public-api.ts","../../../../libs/langgraph/src/threadplane-langgraph.ts"],"sourcesContent":["import { Injectable, signal, type Signal } from '@angular/core';\nimport type { AgentLifecycle } from './lifecycle';\n\n/**\n * Optional registry that collects per-instance agent lifecycles within\n * an Angular injection context. External instrumentation packages\n * (e.g. cockpit-telemetry) provide this token and read from it.\n *\n * `@threadplane/langgraph` does NOT provide this itself — the configured agent\n * instance writes to the registry only when an external consumer has provided it.\n */\n@Injectable()\nexport class AgentLifecycleRegistry {\n  private readonly _lifecycles = signal<readonly AgentLifecycle[]>([]);\n\n  /** Reactive list of registered lifecycles. */\n  readonly lifecycles: Signal<readonly AgentLifecycle[]> = this._lifecycles.asReadonly();\n\n  register(lifecycle: AgentLifecycle): void {\n    this._lifecycles.update((curr) => [...curr, lifecycle]);\n  }\n}\n","import { Signal } from '@angular/core';\nimport type { ResourceStatus as NgResourceStatus } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport type {\n  BagTemplate,\n  Checkpoint,\n  Command,\n  Config,\n  InferBag,\n  Interrupt,\n  Metadata,\n  ThreadState,\n  ToolProgress,\n  ToolCallWithResult,\n  StreamMode,\n} from '@langchain/langgraph-sdk';\nimport type {\n  MessageMetadata,\n  SubmitOptions,\n} from '@langchain/langgraph-sdk/ui';\nimport type { BaseMessage, AIMessage as CoreAIMessage } from '@langchain/core/messages';\nimport type {\n  AgentRuntimeTelemetrySink,\n  AgentSubmitInput,\n  AgentSubmitOptions,\n  AgentWithHistory,\n  ClientToolsCapability,\n} from '@threadplane/chat';\nimport type { AgentLifecycle } from './lifecycle';\n\n// Re-export SDK types so consumers don't need to import from langgraph-sdk directly\nexport type { BagTemplate, InferBag, Interrupt, ThreadState, SubmitOptions };\n\n/**\n * Runtime constant mirroring Angular's ResourceStatus string-union type.\n * Angular 21 ships ResourceStatus as a pure string-union type (no runtime value),\n * so we provide a const-object shim for code that needs runtime comparisons.\n */\nexport const ResourceStatus = {\n  Idle:       'idle',\n  Loading:    'loading',\n  Reloading:  'reloading',\n  Resolved:   'resolved',\n  Error:      'error',\n  Local:      'local',\n} as const satisfies Record<string, NgResourceStatus>;\n\nexport type ResourceStatus = NgResourceStatus;\n\n// ── Transport interface ──────────────────────────────────────────────────────\n\n/** An event emitted by a LangGraph stream. */\nexport interface StreamEvent {\n  /** Event type identifier (e.g., 'values', 'messages', 'error', 'interrupt'). */\n  type:\n    | 'values'\n    | `values|${string}`\n    | 'messages'\n    | `messages|${string}`\n    | `messages/${string}`\n    | `messages/${string}|${string}`\n    | 'updates'\n    | `updates|${string}`\n    | 'tools'\n    | `tools|${string}`\n    | 'custom'\n    | `custom|${string}`\n    | 'error'\n    | `error|${string}`\n    | 'metadata'\n    | 'checkpoints'\n    | `checkpoints|${string}`\n    | 'tasks'\n    | `tasks|${string}`\n    | 'debug'\n    | `debug|${string}`\n    | 'events'\n    | `events|${string}`\n    | 'interrupt'\n    | 'interrupts';\n  namespace?: string[];\n  messages?: unknown[];\n  messageMetadata?: Record<string, unknown>;\n  [key: string]: unknown;\n}\n\n/** Strategy for handling concurrent LangGraph runs on the same thread. */\nexport type LangGraphMultitaskStrategy = 'reject' | 'interrupt' | 'rollback' | 'enqueue';\n\nexport type LangGraphDurability = 'exit' | 'async' | 'sync';\nexport type LangGraphOnCompletion = 'complete' | 'continue';\nexport type LangGraphOnDisconnect = 'cancel' | 'continue';\n\n/** Options accepted by LangGraph-backed submit calls. */\nexport interface LangGraphSubmitOptions {\n  signal?: AbortSignal;\n  config?: Config;\n  context?: unknown;\n  checkpoint?: Omit<Checkpoint, 'thread_id'> | null;\n  checkpointId?: string;\n  command?: Command;\n  metadata?: Metadata;\n  checkpointDuring?: boolean;\n  durability?: LangGraphDurability;\n  interruptBefore?: '*' | string[];\n  interruptAfter?: '*' | string[];\n  onCompletion?: LangGraphOnCompletion;\n  webhook?: string;\n  onDisconnect?: LangGraphOnDisconnect;\n  afterSeconds?: number;\n  ifNotExists?: 'create' | 'reject';\n  onRunCreated?: (params: { run_id: string; thread_id?: string }) => void;\n  streamMode?: StreamMode[];\n  streamSubgraphs?: boolean;\n  streamResumable?: boolean;\n  feedbackKeys?: string[];\n  /** Convenience alias normalized to `command.resume` before invoking LangGraph. */\n  resume?: unknown;\n  /** Strategy for handling concurrent runs on the same thread. */\n  multitaskStrategy?: LangGraphMultitaskStrategy;\n}\n\n/** A queued server-side LangGraph run. */\nexport interface AgentQueueEntry<T = unknown> {\n  /** Server-side run ID. */\n  id: string;\n  /** Thread that owns the queued run. */\n  threadId: string;\n  /** Values submitted for the queued run. */\n  values: T | null | undefined;\n  /** Submit options used when the queued run was created. */\n  options?: LangGraphSubmitOptions;\n  /** Timestamp when the queued run was registered locally. */\n  createdAt: Date;\n}\n\n/** Public queue surface for pending server-side LangGraph runs. */\nexport interface AgentQueue<T = unknown> {\n  /** Read-only pending queue entries. */\n  readonly entries: ReadonlyArray<AgentQueueEntry<T>>;\n  /** Number of pending queue entries. */\n  readonly size: number;\n  /** Cancel a specific pending run by server run ID. */\n  cancel: (id: string) => Promise<boolean>;\n  /** Cancel all pending runs and clear the queue. */\n  clear: () => Promise<void>;\n}\n\n/** A checkpoint entry in the experimental branch tree. */\nexport interface AgentBranchTreeNode<T = unknown> {\n  type: 'node';\n  value: ThreadState<T>;\n  path: string[];\n}\n\n/** A branch fork where each item is an alternate checkpoint sequence. */\nexport interface AgentBranchTreeFork<T = unknown> {\n  type: 'fork';\n  items: AgentBranchTree<T>[];\n}\n\n/** Tree representation of LangGraph checkpoint history for time-travel UIs. */\nexport interface AgentBranchTree<T = unknown> {\n  type: 'sequence';\n  items: Array<AgentBranchTreeNode<T> | AgentBranchTreeFork<T>>;\n}\n\n/** A custom event emitted by the LangGraph backend via adispatch_custom_event(). */\nexport interface CustomStreamEvent {\n  /** Event name set by the backend (e.g., 'state_update'). */\n  name: string;\n  /** Arbitrary payload from the backend. */\n  data: unknown;\n}\n\n/** Transport interface for connecting to a LangGraph agent. */\nexport interface AgentTransport {\n  /** Open a streaming connection to an agent and yield events. */\n  stream(\n    assistantId: string,\n    threadId: string | null,\n    payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): AsyncIterable<StreamEvent>;\n\n  /** Optional: join an already-started run without creating a new one. */\n  joinStream?(\n    threadId: string,\n    runId: string,\n    lastEventId: string | undefined,\n    signal: AbortSignal,\n  ): AsyncIterable<StreamEvent>;\n\n  /** Optional: create a server-side queued run without joining it immediately. */\n  createQueuedRun?(\n    assistantId: string,\n    threadId: string,\n    payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): Promise<AgentQueueEntry>;\n\n  /** Optional: cancel a server-side run. */\n  cancelRun?(\n    threadId: string,\n    runId: string,\n    signal: AbortSignal,\n  ): Promise<void>;\n\n  /** Optional: load persisted checkpoint history for a thread. */\n  getHistory?(\n    threadId: string,\n    signal: AbortSignal,\n  ): Promise<ThreadState[]>;\n\n  /**\n   * Optional: update server-side thread state (e.g. to emit RemoveMessage\n   * entries for regenerate rollback). Forwards to the LangGraph\n   * `threads.updateState` API.\n   *\n   * `options.asNode` corresponds to LangGraph's `as_node` parameter — the\n   * server treats the update as if that node had just produced the values,\n   * which determines what the next pull resumes. `regenerate()` passes\n   * `asNode: '__start__'` so the next `submit(null)` resumes at the entry\n   * node and re-runs `generate` against the rolled-back state.\n   */\n  updateState?(\n    threadId: string,\n    values: Record<string, unknown>,\n    signal: AbortSignal,\n    options?: { asNode?: string },\n  ): Promise<void>;\n}\n\n// ── Options ──────────────────────────────────────────────────────────────────\n\n/** Options for creating a LangGraph-backed agent via {@link agent}. */\n// The second generic is retained for source compatibility with existing typed\n// AgentOptions references even though the options shape no longer depends on it.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n/**\n * Tuning options for the underlying LangGraph SDK `Client` constructed by the\n * default {@link FetchStreamTransport}. Ignored when a custom `transport` is\n * supplied (the transport owns its own client).\n */\nexport interface LangGraphClientOptions {\n  /**\n   * API key passed directly to the LangGraph SDK client. `null` preserves the\n   * SDK's explicit no-key behavior; omission leaves the SDK default unchanged.\n   */\n  apiKey?: string | null;\n  /**\n   * How many times a failed request — including the initial stream connect —\n   * is retried with exponential backoff before the error surfaces. Maps to the\n   * SDK's `callerOptions.maxRetries`. Omitted → the SDK default (currently 4).\n   *\n   * Set `0` to fail fast: useful for e2e tests that force a connection failure\n   * and assert the error surfaces promptly, rather than after the full\n   * multi-second backoff window.\n   */\n  maxRetries?: number;\n}\n\nexport interface AgentOptions<T, _ResolvedBag extends BagTemplate> {\n  /** Base URL of the LangGraph Platform API. Defaults to `provideAgent({ apiUrl })` when omitted. */\n  apiUrl?: string;\n  /** Agent or graph identifier on the LangGraph platform. */\n  assistantId: string;\n  /** Thread ID to connect to. Pass a Signal for reactive thread switching. */\n  threadId?: Signal<string | null> | string | null;\n  /** Called when a new thread is auto-created by the transport. */\n  onThreadId?: (id: string) => void;\n  /** Initial state values before the first stream response arrives. */\n  initialValues?: Partial<T>;\n  /** Throttle signal updates in milliseconds. `false` to disable. */\n  throttle?: number | false;\n  /** Custom message deserializer for non-standard message formats. */\n  toMessage?: (msg: unknown) => BaseMessage;\n  /** Custom transport. Defaults to FetchStreamTransport. */\n  transport?: AgentTransport;\n  /** Tuning options for the default transport's LangGraph SDK client (e.g. retry budget). */\n  clientOptions?: LangGraphClientOptions;\n  /** Optional app-owned sink. Supply one to receive runtime lifecycle events. */\n  telemetry?: AgentRuntimeTelemetrySink | false;\n  /** Tool names that indicate a subagent invocation. */\n  subagentToolNames?: string[];\n  /**\n   * A2UI client capabilities (catalog negotiation) to advertise to the graph.\n   * When set, every plain-object run payload carries them under the\n   * `a2ui_client_capabilities` state key — mirroring how `client_tools`\n   * rides the payload. Read server-side via threadplane-middleware's\n   * `a2ui_client_capabilities(state)`. Use `@threadplane/chat`'s\n   * `a2uiClientCapabilities()` for the renderer's standard value.\n   */\n  a2uiClientCapabilities?: { supportedCatalogIds: string[]; inlineCatalogs?: unknown[] };\n  /**\n   * LangGraph node names whose `messages-tuple` LLM chunks should be projected\n   * into the main chat transcript. Omit to accept all top-level message chunks.\n   * Child-graph (namespaced) chunks never reach the transcript regardless of\n   * this option — they belong to their child stream in `subagents()`.\n   *\n   * Use this when a graph has side-effect LLM nodes, such as title generation,\n   * whose streamed model output should not render as assistant chat content.\n   */\n  transcriptNodeNames?: string[];\n}\n\n// ── SubagentStreamRef ────────────────────────────────────────────────────────\n\n/** Reference to a subagent's streaming state. */\nexport interface SubagentStreamRef {\n  /** The tool call ID that spawned this subagent. */\n  toolCallId: string;\n  /** Optional human-readable subagent type/name. */\n  name?: string;\n  /** Current execution status of the subagent. */\n  status: Signal<'pending' | 'running' | 'complete' | 'error'>;\n  /** Current state values from the subagent. */\n  values: Signal<Record<string, unknown>>;\n  /** Messages from the subagent conversation. */\n  messages: Signal<BaseMessage[]>;\n}\n\n// ── LangGraphAgent ────────────────────────────────────────────────────────────\n\n/**\n * Unified LangGraph agent surface returned by `injectAgent()`.\n *\n * Extends the runtime-neutral `AgentWithHistory` contract (chat-consumable)\n * with the full LangGraph-specific API. One object drives both `<chat>` and\n * any LangGraph-specific demo. Raw LangGraph signals are prefixed with\n * `langGraph` to avoid collision with the runtime-neutral names.\n */\nexport interface LangGraphAgent<T = unknown, ResolvedBag extends BagTemplate = BagTemplate>\n  extends AgentWithHistory<T> {\n  // ── Raw LangGraph signals ────────────────────────────────────────────────\n\n  /** Raw LangChain BaseMessage list. Use `messages` for chat rendering. */\n  langGraphMessages: Signal<BaseMessage[]>;\n\n  /** All interrupts received during the current run (raw LangGraph shape). */\n  langGraphInterrupts: Signal<Interrupt<ResolvedBag['InterruptType']>[]>;\n\n  /** Raw LangGraph tool calls (with run-state). Use `toolCalls` for chat rendering. */\n  langGraphToolCalls: Signal<ToolCallWithResult[]>;\n\n  /** Raw LangGraph history (ThreadState[]). Use `history` for AgentCheckpoint[]. */\n  langGraphHistory: Signal<ThreadState<T>[]>;\n\n  /** Experimental branch tree derived from LangGraph checkpoint history. */\n  experimentalBranchTree: Signal<AgentBranchTree<T>>;\n\n  /** Submit input, resume commands, checkpoint forks, or other LangGraph run options. */\n  submit: (\n    input: AgentSubmitInput | null | undefined,\n    opts?: AgentSubmitOptions & LangGraphSubmitOptions,\n  ) => Promise<void>;\n\n  /**\n   * Client-declared, client-executed tools. Call setCatalog() to register\n   * tool specs; the catalog is automatically shipped with every run via\n   * `input.client_tools`. Pending tool calls appear in pending() after\n   * the run ends; resolve() returns a result and continues the run.\n   */\n  clientTools: ClientToolsCapability;\n\n  // ── LangGraph-specific fields preserved on the unified surface ───────────\n\n  /** Current agent state values (raw, typed per the type parameter T). */\n  value: Signal<T>;\n\n  /** True once at least one value or message has been received. */\n  hasValue: Signal<boolean>;\n\n  /** Re-submit the last input to restart the stream. */\n  reload: () => void;\n\n  /**\n   * Discards the assistant message at the given index AND all messages after\n   * it, then re-runs the agent against the trimmed conversation tail. The\n   * preceding user message (at index - 1) is preserved and re-submitted as\n   * the agent's input. No new user message is added to the history.\n   *\n   * Throws if the message at `index` is not 'assistant' role, or if the\n   * agent is currently loading another response.\n   */\n  regenerate: (assistantMessageIndex: number) => Promise<void>;\n\n  /** Progress updates for currently executing tools. */\n  toolProgress: Signal<ToolProgress[]>;\n\n  /** Pending server-side runs created via `multitaskStrategy: 'enqueue'`. */\n  queue: Signal<AgentQueue>;\n\n  /** Filtered list of subagents with status 'running'. */\n  activeSubagents: Signal<SubagentStreamRef[]>;\n\n  /** Get a subagent stream by the tool call ID that spawned it. */\n  getSubagent: (toolCallId: string) => SubagentStreamRef | undefined;\n\n  /** Get subagent streams by their configured subagent type/name. */\n  getSubagentsByType: (type: string) => SubagentStreamRef[];\n\n  /** Get subagent streams spawned by the tool calls on a specific AI message. */\n  getSubagentsByMessage: (msg: CoreAIMessage) => SubagentStreamRef[];\n\n  /** Raw custom events stream (signal of array). The runtime-neutral\n   *  `events$` Observable is derived from this. */\n  customEvents: Signal<CustomStreamEvent[]>;\n\n  /** Current branch identifier for time-travel navigation. */\n  branch: Signal<string>;\n\n  /** Set the active branch for time-travel navigation. */\n  setBranch: (branch: string) => void;\n\n  /** True while a thread switch is loading state from the server. */\n  isThreadLoading: Signal<boolean>;\n\n  /** Switch to a different thread, resetting derived state. */\n  switchThread: (threadId: string | null) => void;\n\n  /** Join an already-running stream by run ID. */\n  joinStream: (runId: string, lastEventId?: string) => Promise<void>;\n\n  /** Get metadata for a specific message by index. */\n  getMessagesMetadata: (msg: BaseMessage, idx?: number) => MessageMetadata<Record<string, unknown>> | undefined;\n\n  /** Get tool call results associated with an AI message (LangGraph types). */\n  getToolCalls: (msg: CoreAIMessage) => ToolCallWithResult[];\n\n  /**\n   * Lifecycle signals for observability/telemetry. Eight read-only signals\n   * capture key transitions (first stream chunk, first interrupt, tool\n   * call start/complete, thread create/persist, errors). All reset on\n   * `switchThread()`. See {@link AgentLifecycle}.\n   */\n  lifecycle: AgentLifecycle;\n}\n\n// ── Internal: StreamSubjects ─────────────────────────────────────────────────\n// Not exported from public-api.ts\n\nexport interface StreamSubjects<T, ResolvedBag extends BagTemplate = BagTemplate> {\n  status$:          BehaviorSubject<ResourceStatus>;\n  values$:          BehaviorSubject<T>;\n  messages$:        BehaviorSubject<BaseMessage[]>;\n  error$:           BehaviorSubject<unknown>;\n  interrupt$:       BehaviorSubject<Interrupt<ResolvedBag['InterruptType']> | undefined>;\n  interrupts$:      BehaviorSubject<Interrupt<ResolvedBag['InterruptType']>[]>;\n  branch$:          BehaviorSubject<string>;\n  history$:         BehaviorSubject<ThreadState<T>[]>;\n  isThreadLoading$: BehaviorSubject<boolean>;\n  toolProgress$:    BehaviorSubject<ToolProgress[]>;\n  toolCalls$:       BehaviorSubject<ToolCallWithResult[]>;\n  messageMetadata$: BehaviorSubject<Map<string, MessageMetadata<Record<string, unknown>>>>;\n  subagents$:       BehaviorSubject<Map<string, SubagentStreamRef>>;\n  queue$:           BehaviorSubject<AgentQueue>;\n  custom$:          BehaviorSubject<CustomStreamEvent[]>;\n}\n","import { Client } from '@langchain/langgraph-sdk';\nimport type { LangGraphClientOptions } from '../agent.types';\n\n/**\n * Construct a LangGraph SDK Client that accepts both absolute URLs\n * (`http://localhost:2024`) and relative `/api`-style paths that get\n * proxied by middleware in production. The SDK itself rejects\n * relative URLs, so this helper rewrites them against\n * `window.location.origin` when running in the browser.\n *\n * Single source of truth for the absolute-URL rewrite — the streaming\n * transport (`fetch-stream.transport.ts`) and the threads adapter\n * (`LangGraphThreadsAdapter`) both go through here.\n *\n * `clientOptions.maxRetries` maps to the SDK's `callerOptions.maxRetries`,\n * which governs how many times a failed request (including the initial\n * stream connect) is retried with exponential backoff before the error\n * surfaces. Omitted → the SDK default (currently 4). Apps under test set\n * `0` so a forced connection failure surfaces immediately instead of after\n * the full backoff window.\n *\n * @example\n * ```ts\n * const client = createLangGraphClient(environment.langGraphApiUrl);\n * const threads = await client.threads.search({ limit: 50 });\n * ```\n */\nexport function createLangGraphClient(\n  apiUrl: string,\n  clientOptions?: LangGraphClientOptions,\n): Client {\n  return constructLangGraphClient(apiUrl, clientOptions);\n}\n\n/** @internal Default-transport-only constructor with a protected SDK fetch seam. */\nexport function ɵcreateProtectedLangGraphClient(\n  apiUrl: string,\n  clientOptions: LangGraphClientOptions | undefined,\n  runtimeFetch: typeof fetch,\n): Client {\n  return constructLangGraphClient(apiUrl, clientOptions, runtimeFetch);\n}\n\nfunction constructLangGraphClient(\n  apiUrl: string,\n  clientOptions?: LangGraphClientOptions,\n  runtimeFetch?: typeof fetch,\n): Client {\n  return new Client({\n    apiUrl: toAbsoluteApiUrl(apiUrl),\n    ...(clientOptions?.apiKey !== undefined\n      ? { apiKey: clientOptions.apiKey }\n      : {}),\n    ...(clientOptions?.maxRetries !== undefined || runtimeFetch !== undefined\n      ? {\n          callerOptions: {\n            ...(clientOptions?.maxRetries !== undefined\n              ? { maxRetries: clientOptions.maxRetries }\n              : {}),\n            ...(runtimeFetch !== undefined ? { fetch: runtimeFetch } : {}),\n          },\n        }\n      : {}),\n  });\n}\n\n/** Exported separately so non-Client callers (e.g. raw fetch) can\n *  share the same normalization logic. */\nexport function toAbsoluteApiUrl(apiUrl: string): string {\n  if (apiUrl.startsWith('http://') || apiUrl.startsWith('https://')) return apiUrl;\n  return typeof window !== 'undefined' ? `${window.location.origin}${apiUrl}` : apiUrl;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type RuntimeOperationFailureReporter = (\n  code: 'unauthorized' | 'network_blocked'\n) => void;\n\n/** @internal Cockpit-only, generation-bound operation failure reporter. */\nexport const ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER =\n  new InjectionToken<RuntimeOperationFailureReporter>(\n    'ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER'\n  );\n\nconst networkFailures = new WeakSet<object>();\nconst RESPONSE_STATUS_GETTER = typeof Response === 'undefined'\n  ? undefined\n  : Object.getOwnPropertyDescriptor(Response.prototype, 'status')?.get;\nconst SIGNAL_ABORTED_GETTER = typeof AbortSignal === 'undefined'\n  ? undefined\n  : Object.getOwnPropertyDescriptor(AbortSignal.prototype, 'aborted')?.get;\n\n/** @internal SDK fetch seam used only by the default transport. */\nexport function createLangGraphRuntimeFetch(\n  reportOperationFailure: RuntimeOperationFailureReporter | undefined,\n): typeof fetch {\n  return async (input, init) => {\n    const signalState = inspectRequestSignal(init);\n    if (signalState === 'invalid') throw createSafeRequestError();\n    if (signalState === 'aborted') throw createAbortError();\n\n    let response: Response;\n    try {\n      response = await globalThis.fetch(input, init);\n    } catch {\n      const rejectedSignalState = inspectRequestSignal(init);\n      if (rejectedSignalState === 'invalid') throw createSafeRequestError();\n      if (rejectedSignalState === 'aborted') throw createAbortError();\n      const failure = new Error('The LangGraph request failed.');\n      networkFailures.add(failure);\n      throw failure;\n    }\n\n    const status = readResponseStatus(response);\n    if (status !== null && status >= 200 && status < 300) return response;\n    if (status === 401 || status === 403) {\n      safeReport(reportOperationFailure, 'unauthorized');\n    }\n    return sanitizedFailureResponse(status);\n  };\n}\n\n/** @internal Projects failures proven to originate at the default SDK boundary. */\nexport function projectLangGraphOperationFailure(\n  error: unknown,\n  signal: AbortSignal,\n  reportOperationFailure: RuntimeOperationFailureReporter | undefined,\n): never {\n  const signalState = inspectSignal(signal);\n  if (signalState === 'aborted') throw createAbortError();\n  // Branding happened at the owned fetch boundary. The final SDK catch may\n  // recognize only that unforgeable brand; it never inspects\n  // arbitrary status, name, message, body, or header fields.\n  if (isNetworkFailure(error)) safeReport(reportOperationFailure, 'network_blocked');\n  throw createSafeRequestError();\n}\n\n/** @internal Projects a completed SDK client operation at the owned fetch seam. */\nexport function sanitizeLangGraphClientOperationFailure(\n  error: unknown,\n  reportOperationFailure: RuntimeOperationFailureReporter | undefined\n): Error {\n  if (isNetworkFailure(error)) {\n    safeReport(reportOperationFailure, 'network_blocked');\n  }\n  return createSafeRequestError();\n}\n\nexport function createSafeRequestError(): Error {\n  const safe = new Error('The LangGraph request failed.');\n  safe.name = 'LangGraphRequestError';\n  return safe;\n}\n\nfunction readResponseStatus(response: Response): number | null {\n  try {\n    if (!RESPONSE_STATUS_GETTER) return null;\n    const status = RESPONSE_STATUS_GETTER.call(response) as unknown;\n    return typeof status === 'number' ? status : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction sanitizedFailureResponse(status: number | null): Response {\n  const safeStatus = status !== null && status >= 200 && status <= 599 ? status : 500;\n  return new Response(null, { status: safeStatus });\n}\n\ntype SignalState = 'absent' | 'active' | 'aborted' | 'invalid';\n\nfunction inspectRequestSignal(init: RequestInit | undefined): SignalState {\n  try {\n    return inspectSignal(init?.signal);\n  } catch {\n    return 'invalid';\n  }\n}\n\nfunction inspectSignal(signal: AbortSignal | null | undefined): SignalState {\n  if (signal == null) return 'absent';\n  if (!SIGNAL_ABORTED_GETTER) return 'invalid';\n  try {\n    const aborted = SIGNAL_ABORTED_GETTER.call(signal) as unknown;\n    if (typeof aborted !== 'boolean') return 'invalid';\n    return aborted ? 'aborted' : 'active';\n  } catch {\n    return 'invalid';\n  }\n}\n\nfunction isNetworkFailure(error: unknown): boolean {\n  try {\n    return (typeof error === 'object' && error !== null) || typeof error === 'function'\n      ? networkFailures.has(error as object)\n      : false;\n  } catch {\n    return false;\n  }\n}\n\nfunction createAbortError(): Error {\n  const error = new Error('AbortError');\n  error.name = 'AbortError';\n  return error;\n}\n\nfunction safeReport(\n  reporter: RuntimeOperationFailureReporter | undefined,\n  code: 'unauthorized' | 'network_blocked',\n): void {\n  if (!reporter) return;\n  try {\n    reporter(code);\n  } catch {\n    // Reporting is isolated from request control flow.\n  }\n}\n","import type { Client, StreamMode, ThreadState } from '@langchain/langgraph-sdk';\nimport type { AgentQueueEntry, AgentTransport, LangGraphClientOptions, LangGraphSubmitOptions, StreamEvent } from '../agent.types';\nimport {\n  createLangGraphClient,\n  ɵcreateProtectedLangGraphClient,\n} from '../client/create-langgraph-client';\nimport {\n  createLangGraphRuntimeFetch,\n  projectLangGraphOperationFailure,\n  type RuntimeOperationFailureReporter,\n} from '../runtime-operation-reporter';\n\n/**\n * Production transport that connects to a LangGraph Platform API via HTTP and SSE.\n *\n * Creates threads automatically if no threadId is provided, and streams events\n * using the LangGraph SDK client.\n *\n * @example\n * ```typescript\n * const transport = new FetchStreamTransport(\n *   'http://localhost:2024',\n *   (id) => console.log('New thread:', id),\n * );\n * ```\n */\nexport class FetchStreamTransport implements AgentTransport {\n  private client: Client;\n  private onThreadId?: (id: string) => void;\n  private readonly protectErrors: boolean;\n  private readonly reportOperationFailure?: RuntimeOperationFailureReporter;\n  /** @internal True only when this adapter installed its SDK error boundary. */\n  readonly protectsOperationErrors: boolean;\n\n  /**\n   * @param apiUrl - Base URL of the LangGraph Platform API\n   * @param onThreadId - Optional callback invoked when a new thread is created\n   * @param clientOptions - Optional SDK client tuning (e.g. `maxRetries`)\n   */\n  constructor(\n    apiUrl: string,\n    onThreadId?: (id: string) => void,\n    clientOptions?: LangGraphClientOptions,\n    /** @internal Cockpit generation-bound failure reporting hook. */\n    reportOperationFailure?: RuntimeOperationFailureReporter,\n  ) {\n    // createLangGraphClient handles the absolute-URL normalization\n    // required by the SDK when `apiUrl` is a relative `/api`-style\n    // path proxied by middleware in production.\n    this.protectErrors = typeof clientOptions?.apiKey === 'string' || reportOperationFailure !== undefined;\n    this.protectsOperationErrors = this.protectErrors;\n    this.reportOperationFailure = reportOperationFailure;\n    this.client = this.protectErrors\n      ? ɵcreateProtectedLangGraphClient(\n          apiUrl,\n          clientOptions,\n          createLangGraphRuntimeFetch(reportOperationFailure),\n        )\n      : createLangGraphClient(apiUrl, clientOptions);\n    this.onThreadId = onThreadId;\n  }\n\n  /** Open a streaming connection, creating a thread if needed. */\n  async *stream(\n    assistantId: string,\n    threadId: string | null,\n    payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): AsyncIterable<StreamEvent> {\n    let thread = threadId;\n    if (!thread) {\n      try {\n        const t = await this.client.threads.create();\n        thread = t.thread_id;\n      } catch (error) {\n        this.rethrowOperationError(error, signal);\n      }\n      try {\n        this.onThreadId?.(thread);\n      } catch (error) {\n        this.rethrowLocalError(error, signal);\n      }\n    }\n\n    let runPayload: ReturnType<typeof buildRunPayload>;\n    try {\n      runPayload = buildRunPayload(payload, signal, options);\n    } catch (error) {\n      return this.rethrowLocalError(error, signal);\n    }\n    let run: ReturnType<Client['runs']['stream']>;\n    try {\n      run = this.client.runs.stream(\n        thread,\n        assistantId,\n        runPayload,\n      );\n    } catch (error) {\n      this.rethrowOperationError(error, signal);\n    }\n    yield* this.iterateSdkRun(run, signal);\n  }\n\n  /** Join an already-started run without creating a new thread. */\n  async *joinStream(\n    threadId: string,\n    runId: string,\n    lastEventId: string | undefined,\n    signal: AbortSignal,\n  ): AsyncIterable<StreamEvent> {\n    // SDK joinStream: joins an already-started run without creating a new one.\n    let run: ReturnType<Client['runs']['joinStream']>;\n    try {\n      run = this.client.runs.joinStream(threadId, runId, {\n        signal,\n        ...(lastEventId !== undefined ? { lastEventId } : {}),\n      });\n    } catch (error) {\n      this.rethrowOperationError(error, signal);\n    }\n    yield* this.iterateSdkRun(run, signal);\n  }\n\n  /** Create a pending server-side run using LangGraph's enqueue strategy. */\n  async createQueuedRun(\n    assistantId: string,\n    threadId: string,\n    payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): Promise<AgentQueueEntry> {\n    let runPayload: ReturnType<typeof buildRunPayload> & { multitaskStrategy: 'enqueue' };\n    try {\n      runPayload = {\n        ...buildRunPayload(payload, signal, options),\n        multitaskStrategy: 'enqueue',\n      };\n    } catch (error) {\n      return this.rethrowLocalError(error, signal);\n    }\n    let run: Awaited<ReturnType<Client['runs']['create']>>;\n    try {\n      run = await this.client.runs.create(threadId, assistantId, runPayload);\n    } catch (error) {\n      return this.rethrowOperationError(error, signal);\n    }\n    try {\n      return {\n        id: run.run_id,\n        threadId: run.thread_id ?? threadId,\n        values: payload,\n        options: { multitaskStrategy: 'enqueue', signal },\n        createdAt: run.created_at ? new Date(run.created_at) : new Date(),\n      };\n    } catch (error) {\n      return this.rethrowLocalError(error, signal);\n    }\n  }\n\n  /** Cancel a server-side run. */\n  async cancelRun(threadId: string, runId: string, signal: AbortSignal): Promise<void> {\n    try {\n      await this.client.runs.cancel(threadId, runId, false, 'interrupt', { signal });\n    } catch (error) {\n      this.rethrowOperationError(error, signal);\n    }\n  }\n\n  /** Load persisted checkpoint history for a thread. */\n  async getHistory(threadId: string, signal: AbortSignal): Promise<ThreadState[]> {\n    try {\n      return await this.client.threads.getHistory(threadId, { signal });\n    } catch (error) {\n      return this.rethrowOperationError(error, signal);\n    }\n  }\n\n  /** Update server-side thread state, e.g. to remove messages for regenerate rollback. */\n  async updateState(\n    threadId: string,\n    values: Record<string, unknown>,\n    _signal: AbortSignal,\n    options?: { asNode?: string },\n  ): Promise<void> {\n    const body: { values: Record<string, unknown>; asNode?: string } = { values };\n    if (options?.asNode !== undefined) {\n      body.asNode = options.asNode;\n    }\n    try {\n      await this.client.threads.updateState(threadId, body);\n    } catch (error) {\n      this.rethrowOperationError(error, _signal);\n    }\n  }\n\n  private rethrowOperationError(error: unknown, signal: AbortSignal): never {\n    if (!this.protectErrors) throw error;\n    return projectLangGraphOperationFailure(error, signal, this.reportOperationFailure);\n  }\n\n  private rethrowLocalError(error: unknown, signal: AbortSignal): never {\n    if (!this.protectErrors) throw error;\n    return projectLangGraphOperationFailure(error, signal, undefined);\n  }\n\n  private async *iterateSdkRun(\n    run: ReturnType<Client['runs']['stream']> | ReturnType<Client['runs']['joinStream']>,\n    signal: AbortSignal,\n  ): AsyncIterable<StreamEvent> {\n    let iterator: AsyncIterator<{ event: string; data: unknown }>;\n    try {\n      iterator = run[Symbol.asyncIterator]();\n    } catch (error) {\n      return this.rethrowOperationError(error, signal);\n    }\n    while (true) {\n      let next: IteratorResult<{ event: string; data: unknown }>;\n      try {\n        next = await iterator.next();\n      } catch (error) {\n        return this.rethrowOperationError(error, signal);\n      }\n      if (next.done) return;\n      try {\n        yield normalizeSdkEvent(next.value.event as StreamEvent['type'], next.value.data);\n      } catch (error) {\n        return this.rethrowLocalError(error, signal);\n      }\n    }\n  }\n}\n\nfunction buildRunPayload(\n  input: unknown,\n  signal: AbortSignal,\n  options?: LangGraphSubmitOptions,\n): {\n  input: Record<string, unknown> | null;\n  streamMode: StreamMode[];\n  streamSubgraphs: boolean;\n  signal: AbortSignal;\n} & Omit<LangGraphSubmitOptions, 'signal' | 'resume' | 'checkpoint' | 'streamMode' | 'streamSubgraphs'> {\n  const runOptions = { ...(options ?? {}) };\n  const hasCheckpoint = Object.prototype.hasOwnProperty.call(runOptions, 'checkpoint');\n  const checkpoint = runOptions.checkpoint;\n  const streamMode = runOptions.streamMode;\n  const streamSubgraphs = runOptions.streamSubgraphs;\n  delete runOptions.signal;\n  delete runOptions.resume;\n  delete runOptions.checkpoint;\n  delete runOptions.streamMode;\n  delete runOptions.streamSubgraphs;\n\n  return {\n    ...runOptions,\n    ...(hasCheckpoint ? { checkpoint } : {}),\n    input: input as Record<string, unknown> | null,\n    streamMode: streamMode ?? defaultStreamMode(),\n    streamSubgraphs: streamSubgraphs ?? true,\n    signal,\n  };\n}\n\nfunction defaultStreamMode(): StreamMode[] {\n  // 'tools' is intentionally omitted: not supported by langgraph_api < 0.9.x\n  // Servers reject the entire request with HTTP 422 if any stream_mode in\n  // the array is unknown to them. Tool-call data is still derivable from\n  // the messages stream.\n  return ['values', 'messages-tuple', 'updates', 'custom'];\n}\n\nfunction normalizeSdkEvent(type: StreamEvent['type'], data: unknown): StreamEvent {\n  const namespace = extractNamespace(type);\n  const baseType = getBaseEventType(type);\n\n  if (baseType === 'messages' && Array.isArray(data) && data.length === 2 && isRecord(data[1])) {\n    return { type, ...(namespace ? { namespace } : {}), messages: [data[0]], messageMetadata: data[1], data };\n  }\n\n  if (isMessagesEvent(type) && Array.isArray(data)) {\n    return { type, ...(namespace ? { namespace } : {}), messages: data, data };\n  }\n\n  if (isRecord(data)) {\n    return { type, ...(namespace ? { namespace } : {}), ...data, data };\n  }\n\n  return { type, ...(namespace ? { namespace } : {}), data };\n}\n\nfunction isMessagesEvent(type: StreamEvent['type']): boolean {\n  const baseType = getBaseEventType(type);\n  return baseType === 'messages' || baseType.startsWith('messages/');\n}\n\nfunction getBaseEventType(type: StreamEvent['type']): string {\n  return String(type).split('|')[0];\n}\n\nfunction extractNamespace(type: StreamEvent['type']): string[] | undefined {\n  const parts = String(type).split('|');\n  return parts.length > 1 ? parts.slice(1) : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import type { BaseMessage } from '@langchain/core/messages';\nimport {\n  completeDelivery,\n  staticDelivery,\n  streamingDelivery,\n  type MessageDelivery,\n} from '@threadplane/chat';\n\nexport interface TrackedToolCall {\n  id?: string;\n  name: string;\n  args: Record<string, unknown> | string;\n}\n\nexport interface TrackedSubagent {\n  id: string;\n  generation: string;\n  /**\n   * How this child stream came to exist. 'tool' children are delegation tool\n   * calls (registered from the parent's AI message, keyed by tool-call id);\n   * 'subgraph' children are plain compiled-graph nodes (registered from their\n   * first namespaced stream event, keyed by the namespace segment itself).\n   */\n  kind: 'tool' | 'subgraph';\n  status: 'pending' | 'running' | 'complete' | 'error';\n  toolCall: {\n    id: string;\n    name: string;\n    args: Record<string, unknown>;\n  };\n  values: Record<string, unknown>;\n  messages: BaseMessage[];\n}\n\nexport interface SubagentTrackerOptions {\n  subagentToolNames?: string[];\n  onSubagentChange?: () => void;\n}\n\nconst DEFAULT_SUBAGENT_TOOL_NAMES = ['task'];\nlet subagentGenerationSequence = 0;\n\nfunction createSubagentGeneration(): string {\n  subagentGenerationSequence += 1;\n  return `subagent-${subagentGenerationSequence}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\n/**\n * Lightweight Angular adapter for LangGraph subagent stream state.\n *\n * This intentionally mirrors only the SDK behavior this package exposes. Using\n * the SDK UI barrel at runtime pulls StreamManager/client utilities into every\n * Angular bundle, which breaks cockpit production budgets.\n */\nexport class SubagentTracker {\n  private readonly subagentToolNames: Set<string>;\n  private readonly onSubagentChange?: () => void;\n  private readonly subagents = new Map<string, TrackedSubagent>();\n  private readonly namespaceToToolCallId = new Map<string, string>();\n  /**\n   * Child messages received under a namespace that is not yet attributed to a\n   * registered subagent. LangGraph's `tools:<id>` namespace carries an internal\n   * run UUID, not the parent's tool-call id, and the two are only reconciled\n   * once a `values` event arrives carrying the child's first human message. Any\n   * chunk streamed before that point would otherwise be dropped — which is what\n   * made subagent cards render \"0 message(s)\" despite a full child transcript.\n   *\n   * Merged by id like a real transcript, so this stays bounded by the child's\n   * distinct message count rather than by chunk volume.\n   */\n  private readonly unattributedMessages = new Map<string, BaseMessage[]>();\n  private readonly pendingMatches = new Map<string, string>();\n\n  constructor(options: SubagentTrackerOptions = {}) {\n    this.subagentToolNames = new Set(options.subagentToolNames ?? DEFAULT_SUBAGENT_TOOL_NAMES);\n    this.onSubagentChange = options.onSubagentChange;\n  }\n\n  clear(): void {\n    this.subagents.clear();\n    this.namespaceToToolCallId.clear();\n    this.pendingMatches.clear();\n    this.unattributedMessages.clear();\n    this.onSubagentChange?.();\n  }\n\n  getSubagents(): Map<string, TrackedSubagent> {\n    const visible = new Map<string, TrackedSubagent>();\n    for (const [id, subagent] of this.subagents) {\n      if (subagent.status !== 'pending') {\n        visible.set(id, subagent);\n      }\n    }\n    return visible;\n  }\n\n  registerFromToolCalls(toolCalls: TrackedToolCall[], aiMessageId?: string | null): void {\n    let changed = false;\n    for (const toolCall of toolCalls) {\n      if (!this.subagentToolNames.has(toolCall.name)) continue;\n\n      const id = toolCall.id;\n      if (!id) continue;\n\n      const args = parseToolCallArgs(toolCall.args);\n      if (!isValidSubagentType(args['subagent_type'])) continue;\n\n      const existing = this.subagents.get(id);\n      this.subagents.set(id, {\n        id,\n        generation: existing?.generation ?? createSubagentGeneration(),\n        kind: 'tool',\n        status: existing?.status ?? 'pending',\n        toolCall: {\n          id,\n          name: toolCall.name,\n          args: {\n            ...args,\n            ...(aiMessageId ? { _aiMessageId: aiMessageId } : {}),\n          },\n        },\n        values: existing?.values ?? {},\n        messages: existing?.messages ?? [],\n      });\n      changed = true;\n    }\n\n    if (changed) {\n      this.retryPendingMatches();\n      this.onSubagentChange?.();\n    }\n  }\n\n  reconstructFromMessages(messages: BaseMessage[], options: { skipIfPopulated?: boolean } = {}): void {\n    if (options.skipIfPopulated && this.subagents.size > 0) return;\n\n    for (const message of messages) {\n      const raw = message as unknown as Record<string, unknown>;\n      if (isAiMessageWithToolCalls(raw)) {\n        this.registerFromToolCalls(\n          raw['tool_calls'] as TrackedToolCall[],\n          typeof raw['id'] === 'string' ? raw['id'] : null,\n        );\n      } else if (isToolMessage(raw)) {\n        this.processToolMessage(raw['tool_call_id'], raw['content'], raw['status'] === 'error' ? 'error' : 'success');\n      }\n    }\n  }\n\n  matchSubgraphToSubagent(namespaceId: string, description: string): string | undefined {\n    if (this.namespaceToToolCallId.has(namespaceId)) {\n      return this.namespaceToToolCallId.get(namespaceId);\n    }\n\n    const mapped = new Set(this.namespaceToToolCallId.values());\n    const establish = (toolCallId: string): string => {\n      this.namespaceToToolCallId.set(namespaceId, toolCallId);\n      const subagent = this.subagents.get(toolCallId);\n      if (subagent) {\n        const buffered = this.unattributedMessages.get(namespaceId);\n        this.subagents.set(toolCallId, {\n          ...subagent,\n          status: subagent.status === 'complete' || subagent.status === 'error' ? subagent.status : 'running',\n          messages: buffered ? mergeMessages(subagent.messages, buffered) : subagent.messages,\n        });\n        this.unattributedMessages.delete(namespaceId);\n      }\n      this.onSubagentChange?.();\n      return toolCallId;\n    };\n\n    // The description rungs are only meaningful with a real description.\n    // ensureToolStreamAttribution calls this with '' precisely to skip them:\n    // without this guard, a subagent whose `description` arg is literally ''\n    // exact-matches every empty-description probe, bypassing the positional\n    // rung's one-candidate safety check.\n    if (description) {\n      for (const [toolCallId, subagent] of this.subagents) {\n        if (subagent.kind !== 'tool' || mapped.has(toolCallId)) continue;\n        if (subagent.toolCall.args['description'] === description) {\n          return establish(toolCallId);\n        }\n      }\n\n      for (const [toolCallId, subagent] of this.subagents) {\n        if (subagent.kind !== 'tool' || mapped.has(toolCallId)) continue;\n        const subagentDescription = subagent.toolCall.args['description'];\n        if (typeof subagentDescription !== 'string' || !subagentDescription) continue;\n        if (description.includes(subagentDescription) || subagentDescription.includes(description)) {\n          return establish(toolCallId);\n        }\n      }\n    }\n\n    // Last-resort fallback — tool children only, and only when there is\n    // nothing to guess between.\n    //\n    // LangGraph's `tools:<uuid>` namespace is a checkpoint id assigned\n    // independently of the parent's `call_*` tool-call id; the two are not\n    // linked anywhere on the wire (verified against a live run). So when a\n    // delegation tool carries no matchable description, position is the only\n    // signal left.\n    //\n    // That is sound with exactly one outstanding child — the shape every graph\n    // in this repo produces, since each dispatches one tool call per assistant\n    // turn. With several outstanding at once (parallel fan-out) arrival order\n    // is NOT dispatch order, and claiming the first unmapped call cross-wires\n    // the children: one card renders another's output. Leaving the stream\n    // unattributed keeps its messages buffered instead, so an empty card is\n    // the worst case rather than a confidently wrong one. It can still resolve\n    // later: as siblings complete, the candidate set shrinks back to one.\n    const candidates = [...this.subagents].filter(\n      ([toolCallId, subagent]) =>\n        subagent.kind === 'tool' &&\n        !mapped.has(toolCallId) &&\n        (subagent.status === 'pending' || subagent.status === 'running'),\n    );\n    if (candidates.length === 1) {\n      return establish(candidates[0][0]);\n    }\n\n    if (description) {\n      this.pendingMatches.set(namespaceId, description);\n    }\n    return undefined;\n  }\n\n  markRunningFromNamespace(namespaceId: string, namespace?: string[]): void {\n    const toolCallId = this.resolveToolCallId(namespaceId);\n    const subagent = this.subagents.get(toolCallId);\n    if (!subagent) return;\n\n    if (!this.namespaceToToolCallId.has(namespaceId)) {\n      this.namespaceToToolCallId.set(namespaceId, toolCallId);\n    }\n    this.subagents.set(toolCallId, {\n      ...subagent,\n      status: subagent.status === 'complete' || subagent.status === 'error' ? subagent.status : 'running',\n      values: {\n        ...subagent.values,\n        ...(namespace ? { namespace } : {}),\n      },\n    });\n    this.onSubagentChange?.();\n  }\n\n  /**\n   * Authoritative namespace→tool-call binding, from the server.\n   *\n   * `threadplane.middleware.langgraph.announce_subagent` emits a custom event\n   * pairing the child's checkpoint namespace with its tool-call id — the two\n   * halves that are never linked on the wire otherwise. Unlike the matching\n   * ladder this is not a heuristic: it overrides nothing that is already\n   * mapped, works with any number of children outstanding, and replays any\n   * chunks that streamed before the binding arrived.\n   */\n  bindChildStream(namespaceId: string, toolCallId: string): void {\n    if (this.namespaceToToolCallId.get(namespaceId) === toolCallId) return;\n    this.namespaceToToolCallId.set(namespaceId, toolCallId);\n    const subagent = this.subagents.get(toolCallId);\n    if (subagent) {\n      const buffered = this.unattributedMessages.get(namespaceId);\n      this.subagents.set(toolCallId, {\n        ...subagent,\n        status: subagent.status === 'complete' || subagent.status === 'error' ? subagent.status : 'running',\n        messages: buffered ? mergeMessages(subagent.messages, buffered) : subagent.messages,\n      });\n      this.unattributedMessages.delete(namespaceId);\n    }\n    this.onSubagentChange?.();\n  }\n\n  /**\n   * Attribute a `tools:` child stream to its parent tool call as soon as the\n   * child is seen, without requiring a description to match on.\n   *\n   * The description ladder needs two things this repo's own graphs don't\n   * reliably provide: a delegation tool that names its argument `description`,\n   * and a child whose first message is the human task. `cockpit/chat/subagents`\n   * has neither — it uses `task_description`, and its child's messages begin\n   * with the AI reply. Attribution therefore never ran, so the child's\n   * transcript was never claimed and every card rendered \"0 message(s)\".\n   *\n   * Calling the ladder with no description skips both description rungs and\n   * lands on the positional fallback (first unmapped pending/running tool\n   * child), which is correct for sequential dispatch and is the same heuristic\n   * the ladder already relied on in practice.\n   */\n  ensureToolStreamAttribution(namespaceId: string): void {\n    if (this.namespaceToToolCallId.has(namespaceId)) return;\n    this.matchSubgraphToSubagent(namespaceId, '');\n  }\n\n  /**\n   * Register a plain-subgraph child stream on its first namespaced event.\n   *\n   * Unlike tool children — announced ahead of time by the parent's tool call —\n   * a compiled child added as a plain node has no announcement: its existence\n   * is learned from the first event carrying its namespace. It starts\n   * 'running' because by the time we see an event, it is.\n   */\n  ensureSubgraphStream(key: string, name: string): void {\n    if (this.subagents.has(key)) return;\n    this.subagents.set(key, {\n      id: key,\n      generation: createSubagentGeneration(),\n      kind: 'subgraph',\n      status: 'running',\n      toolCall: { id: key, name, args: {} },\n      values: {},\n      messages: [],\n    });\n    this.onSubagentChange?.();\n  }\n\n  /**\n   * Settle still-running subgraph children when the run reaches a terminal\n   * outcome. Tool children settle through their tool result\n   * (`processToolMessage`); subgraph children have no result message, so the\n   * run's own settle is their completion signal. Paused/interrupted runs must\n   * NOT call this — a child can resume with the thread.\n   */\n  settleRunningSubgraphs(outcome: 'complete' | 'error'): void {\n    let changed = false;\n    for (const [key, subagent] of this.subagents) {\n      if (subagent.kind !== 'subgraph' || subagent.status !== 'running') continue;\n      this.subagents.set(key, { ...subagent, status: outcome });\n      changed = true;\n    }\n    if (changed) this.onSubagentChange?.();\n  }\n\n  updateSubagentValues(namespaceId: string, values: Record<string, unknown>): void {\n    const toolCallId = this.resolveToolCallId(namespaceId);\n    const subagent = this.subagents.get(toolCallId);\n    if (!subagent) return;\n\n    this.subagents.set(toolCallId, {\n      ...subagent,\n      status: subagent.status === 'complete' || subagent.status === 'error' ? subagent.status : 'running',\n      values,\n    });\n    this.onSubagentChange?.();\n  }\n\n  addMessageToSubagent(namespaceId: string, message: BaseMessage): void {\n    const toolCallId = this.resolveToolCallId(namespaceId);\n    const subagent = this.subagents.get(toolCallId);\n    if (!subagent) {\n      // Not attributed yet — hold it rather than drop it. `establish()` will\n      // replay the buffer the moment this namespace is matched to a tool call.\n      this.unattributedMessages.set(\n        namespaceId,\n        mergeMessages(this.unattributedMessages.get(namespaceId) ?? [], [message]),\n      );\n      return;\n    }\n\n    this.subagents.set(toolCallId, {\n      ...subagent,\n      status: subagent.status === 'complete' || subagent.status === 'error' ? subagent.status : 'running',\n      messages: mergeMessages(subagent.messages, [message]),\n    });\n    this.onSubagentChange?.();\n  }\n\n  processToolMessage(toolCallId: string, content: unknown, status: 'success' | 'error'): void {\n    const subagent = this.subagents.get(toolCallId);\n    if (!subagent) return;\n\n    this.subagents.set(toolCallId, {\n      ...subagent,\n      status: status === 'error' ? 'error' : 'complete',\n      values: {\n        ...subagent.values,\n        result: content,\n      },\n    });\n    this.onSubagentChange?.();\n  }\n\n  getMessageDelivery(toolCallId: string, message: BaseMessage): MessageDelivery {\n    const id = getMessageId(message) ?? toolCallId;\n    const raw = message as unknown as Record<string, unknown>;\n    const type = typeof message._getType === 'function' ? message._getType() : raw['type'];\n    if (type !== 'ai' && type !== 'assistant' && type !== 'AIMessage' && type !== 'AIMessageChunk') {\n      return staticDelivery(id);\n    }\n\n    const subagent = this.subagents.get(toolCallId);\n    if (!subagent) return staticDelivery(id);\n    if (subagent.status === 'error') return completeDelivery(subagent.generation, 'error');\n    if (subagent.status === 'complete') return completeDelivery(subagent.generation, 'success');\n    return streamingDelivery(subagent.generation);\n  }\n\n  private retryPendingMatches(): void {\n    for (const [namespaceId, description] of this.pendingMatches) {\n      if (this.matchSubgraphToSubagent(namespaceId, description)) {\n        this.pendingMatches.delete(namespaceId);\n      }\n    }\n  }\n\n  private resolveToolCallId(namespaceId: string): string {\n    return this.namespaceToToolCallId.get(namespaceId) ?? namespaceId;\n  }\n}\n\n/**\n * True when a stream event belongs to a child graph rather than the parent —\n * i.e. it carries any namespace at all. This is the single classification\n * question; which child owns the event is a separate (attribution) question.\n *\n * Kept consistent with the terminal-evidence guard, which has always refused\n * ANY namespaced event as proof the parent run finished.\n */\nexport function isChildNamespace(namespace: string[] | string | undefined): boolean {\n  if (!namespace) return false;\n  if (typeof namespace === 'string') return namespace.length > 0;\n  return namespace.length > 0;\n}\n\n/** Resolved identity of a child stream, derived from its event namespace. */\nexport interface ChildStreamRef {\n  /**\n   * Map key: the tool-call id for a single `tools:` namespace; for a nested\n   * delegation, the namespace path truncated at (and including) the\n   * innermost `tools:` segment, so trailing internal-node segments don't\n   * fragment one grandchild into several entries; else the namespace segment\n   * itself.\n   */\n  key: string;\n  /** Display name; for subgraph nodes, the node name. Unused on the tool path. */\n  name: string;\n  kind: 'tool' | 'subgraph';\n}\n\n/**\n * Derive a child stream's identity from an event namespace.\n *\n * `tools:<id>` segments identify a tool-dispatched child by its tool-call id.\n * Any other segment (e.g. `research:<uuid>` from a compiled graph added with\n * `add_node`) identifies a plain subgraph child: the full segment is the key\n * (unique per invocation) and the part before the first ':' is the node name.\n *\n * A namespace with MORE than one `tools:` segment is a nested delegation — a\n * subagent that itself dispatched a delegation tool. That stream registers as\n * its own subgraph-kind entry keyed by the namespace path truncated at the\n * innermost `tools:` segment (inclusive), so trailing internal-node segments\n * after it (the grandchild's own `model:`/`agent:` steps) don't fragment one\n * grandchild into several map entries. Subgraph entries are skipped by every\n * attribution-ladder rung, so a grandchild can neither merge into the outer\n * child's card nor mis-attach to a sibling. Linking it to its parent card (a\n * delegation tree) is deliberately not modeled; the flat map is the contract.\n */\nexport function childStreamRefFromNamespace(namespace: string[]): ChildStreamRef | undefined {\n  const toolSegments = namespace.filter((segment) => segment.startsWith('tools:'));\n  if (toolSegments.length > 1) {\n    let lastToolsIndex = -1;\n    for (let i = namespace.length - 1; i >= 0; i -= 1) {\n      if (namespace[i].startsWith('tools:')) {\n        lastToolsIndex = i;\n        break;\n      }\n    }\n    const innermost = namespace[lastToolsIndex];\n    const colon = innermost.indexOf(':');\n    return {\n      // The innermost segment's node name is 'tools' for a delegation-tool\n      // child — an intentionally generic card label; there's no\n      // subagent_type to name it from.\n      key: namespace.slice(0, lastToolsIndex + 1).join('|'),\n      name: colon > 0 ? innermost.slice(0, colon) : innermost,\n      kind: 'subgraph',\n    };\n  }\n  if (toolSegments.length === 1) {\n    return { key: toolSegments[0].slice(6), name: '', kind: 'tool' };\n  }\n  const first = namespace[0];\n  if (!first) return undefined;\n  const colon = first.indexOf(':');\n  return { key: first, name: colon > 0 ? first.slice(0, colon) : first, kind: 'subgraph' };\n}\n\nfunction parseToolCallArgs(args: Record<string, unknown> | string): Record<string, unknown> {\n  if (typeof args !== 'string') return args;\n  try {\n    const parsed = JSON.parse(args) as unknown;\n    return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n      ? parsed as Record<string, unknown>\n      : {};\n  } catch {\n    return {};\n  }\n}\n\nfunction isValidSubagentType(value: unknown): value is string {\n  return typeof value === 'string'\n    && value.length >= 3\n    && value.length <= 50\n    && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(value);\n}\n\nfunction isAiMessageWithToolCalls(value: Record<string, unknown>): boolean {\n  return (value['type'] === 'ai' || value['type'] === 'assistant')\n    && Array.isArray(value['tool_calls']);\n}\n\nfunction isToolMessage(value: Record<string, unknown>): value is Record<string, unknown> & { tool_call_id: string } {\n  return value['type'] === 'tool' && typeof value['tool_call_id'] === 'string';\n}\n\nfunction mergeMessages(existing: BaseMessage[], incoming: BaseMessage[]): BaseMessage[] {\n  const merged = [...existing];\n  for (const msg of incoming) {\n    const id = getMessageId(msg);\n    const idx = id ? merged.findIndex(m => getMessageId(m) === id) : -1;\n    if (idx >= 0) {\n      merged[idx] = accumulateChunk(merged[idx], msg);\n    } else {\n      merged.push(msg);\n    }\n  }\n  return merged;\n}\n\n/**\n * Fold a streamed chunk into the message it belongs to.\n *\n * A child graph streams `AIMessageChunk`s that are *deltas* — a handful of\n * characters each, hundreds per message. Replacing by id (the previous\n * behavior) therefore kept only the final delta, so a fully attributed\n * subagent still rendered a near-empty message. Snapshots, which carry the\n * message-so-far, still replace.\n *\n * This mirrors the parent transcript's delta handling: append unconditionally\n * rather than comparing text, because a prefix-style \"dedupe\" silently eats\n * legitimate tokens that happen to repeat the accumulated prefix.\n */\nfunction accumulateChunk(existing: BaseMessage, incoming: BaseMessage): BaseMessage {\n  if (!isChunkMessage(incoming)) return incoming;\n  const previousText = extractText((existing as unknown as Record<string, unknown>)['content']);\n  const incomingText = extractText((incoming as unknown as Record<string, unknown>)['content']);\n  if (!incomingText) return existing;\n  if (!previousText) return incoming;\n  return { ...(incoming as object), content: previousText + incomingText } as BaseMessage;\n}\n\nfunction isChunkMessage(message: BaseMessage): boolean {\n  const type = (message as unknown as Record<string, unknown>)['type'];\n  return typeof type === 'string' && type.endsWith('Chunk');\n}\n\nfunction extractText(content: unknown): string {\n  if (typeof content === 'string') return content;\n  if (!Array.isArray(content)) return '';\n  let out = '';\n  for (const block of content) {\n    if (typeof block === 'string') { out += block; continue; }\n    if (block == null || typeof block !== 'object') continue;\n    const record = block as Record<string, unknown>;\n    const blockType = record['type'];\n    if (blockType === 'text' || blockType === 'output_text' || blockType === undefined) {\n      const text = record['text'];\n      if (typeof text === 'string') out += text;\n    }\n  }\n  return out;\n}\n\nfunction getMessageId(message: BaseMessage): string | undefined {\n  return (message as unknown as { id?: string }).id;\n}\n","import { signal, type Signal } from '@angular/core';\nimport { Observable, takeUntil } from 'rxjs';\nimport {\n  ResourceStatus,\n  AgentOptions,\n  StreamSubjects,\n  StreamEvent,\n  AgentTransport,\n  SubagentStreamRef,\n  AgentQueue,\n  AgentQueueEntry,\n  LangGraphSubmitOptions,\n} from '../agent.types';\nimport { FetchStreamTransport } from '../transport/fetch-stream.transport';\nimport { BagTemplate } from '@langchain/langgraph-sdk';\nimport { getToolCallsWithResults } from '@langchain/langgraph-sdk/utils';\nimport type {\n  AgentRuntimeTelemetryEvent,\n  AgentRuntimeTelemetryProperties,\n  AgentRuntimeTelemetrySink,\n} from '@threadplane/chat';\nimport {\n  AgentError,\n  AGENT_ERROR_MESSAGES,\n  completeDelivery,\n  isAbortError,\n  staticDelivery,\n  streamingDelivery,\n  toAgentError,\n  type CompleteOutcome,\n  type MessageDelivery,\n} from '@threadplane/chat';\nimport {\n  SubagentTracker,\n  TrackedSubagent,\n  childStreamRefFromNamespace,\n  isChildNamespace,\n} from './subagent-tracker';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { Interrupt, Message as LangGraphMessage, ThreadState, ToolCallWithResult, ToolProgress } from '@langchain/langgraph-sdk';\n\n// Local copy of the trace harness — same gating as @threadplane/chat's trace.ts.\n// Duplicated here to avoid an @threadplane/chat dep on the langgraph internals path.\nfunction isLgTraceEnabled(): boolean {\n  if (typeof globalThis === 'undefined') return false;\n  const win = (globalThis as { window?: { __threadplaneChatTrace?: boolean; localStorage?: Storage } }).window;\n  if (!win) return false;\n  if (win.__threadplaneChatTrace === true) return true;\n  try { return win.localStorage?.getItem('THREADPLANE_CHAT_STREAM_TRACE') === '1'; } catch { return false; }\n}\nfunction lgTrace(...args: unknown[]): void {\n  if (isLgTraceEnabled()) {\n    // eslint-disable-next-line no-console\n    console.debug('[tplane-chat-stream]', ...args);\n  }\n}\n\nfunction captureAgentRuntimeTelemetry(\n  sink: AgentRuntimeTelemetrySink | false | undefined,\n  event: AgentRuntimeTelemetryEvent,\n  properties: AgentRuntimeTelemetryProperties,\n): void {\n  if (!sink) return;\n  try {\n    void Promise.resolve(sink({ event, properties })).catch(() => undefined);\n  } catch {\n    // Keep telemetry side effects isolated from stream control flow.\n  }\n}\n\nfunction agentRuntimeTelemetryErrorClass(error: unknown): string {\n  try {\n    if (isAbortError(error)) return 'AbortError';\n    if (error instanceof AgentError) return 'AgentError';\n    if (error instanceof Error) return 'Error';\n  } catch {\n    return 'UnknownError';\n  }\n  return 'UnknownError';\n}\n\nfunction genericSafeAgentError(): AgentError {\n  return new AgentError({\n    kind: 'server',\n    message: AGENT_ERROR_MESSAGES.server,\n    retryable: true,\n  });\n}\n\nfunction safeIsAbortError(error: unknown): boolean {\n  try {\n    return isAbortError(error);\n  } catch {\n    return false;\n  }\n}\n\nfunction safeReadEventError(event: StreamEvent): unknown {\n  try {\n    return Object.getOwnPropertyDescriptor(event, 'error')?.value;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction safeReadRecordValue(record: Record<string, unknown>, key: string): unknown {\n  try {\n    return Object.getOwnPropertyDescriptor(record, key)?.value;\n  } catch {\n    return undefined;\n  }\n}\n\nexport interface StreamManagerBridgeOptions<T, ResolvedBag extends BagTemplate = BagTemplate> {\n  options:   AgentOptions<T, ResolvedBag> & { apiUrl: string };\n  subjects:  StreamSubjects<T, ResolvedBag>;\n  threadId$: Observable<string | null>;\n  destroy$:  Observable<void>;\n  reportOperationFailure?: (code: 'unauthorized' | 'network_blocked') => void;\n}\n\ntype ResubmitOutcome = CompleteOutcome | 'not-started';\n\nexport interface StreamManagerBridge {\n  submit:                (values: unknown, opts?: LangGraphSubmitOptions) => Promise<CompleteOutcome>;\n  stop:                  () => Promise<void>;\n  switchThread:          (id: string | null) => void;\n  joinStream:            (runId: string, lastEventId?: string) => Promise<void>;\n  resubmitLast:          () => Promise<ResubmitOutcome>;\n  getReasoningDurationMs:(id: string) => number | undefined;\n  getMessageDelivery:    (id: string) => MessageDelivery;\n  getSubagentMessageDelivery: (toolCallId: string, message: BaseMessage) => MessageDelivery;\n  deliveryRevision:      Signal<number>;\n  /** Update server-side thread state (e.g. RemoveMessage for regenerate rollback). */\n  updateState:           (values: Record<string, unknown>, opts?: { asNode?: string }) => Promise<void>;\n  /** The current thread ID tracked by the bridge (null if not yet known). */\n  readonly currentThreadId: string | null;\n}\n\nexport function createStreamManagerBridge<T, ResolvedBag extends BagTemplate = BagTemplate>(\n  { options, subjects, threadId$, destroy$, reportOperationFailure }: StreamManagerBridgeOptions<T, ResolvedBag>\n): StreamManagerBridge {\n  // Intercept onThreadId to update currentThreadId when the transport\n  // auto-creates a thread. Without this, each submit() creates a new thread\n  // because currentThreadId stays null.\n  const userOnThreadId = options.onThreadId;\n  const wrappedOnThreadId = (id: string) => {\n    currentThreadId = id;\n    userOnThreadId?.(id);\n  };\n  const transport: AgentTransport =\n    options.transport ?? new FetchStreamTransport(\n      options.apiUrl,\n      wrappedOnThreadId,\n      options.clientOptions,\n      reportOperationFailure,\n    );\n\n  let currentThreadId: string | null = null;\n  let lastPayload: unknown = null;\n  let lastOptions: LangGraphSubmitOptions | undefined;\n  let abortController: AbortController | null = null;\n  let historyAbortController: AbortController | null = null;\n  let hasSeenThreadId = false;\n  const userAbortedControllers = new WeakSet<AbortController>();\n  const toolProgressMap = new Map<string, ToolProgress>();\n  // Message ids whose content is known-final (installed by a canonical\n  // replacement). Late streamed deltas for these ids are stale stragglers and\n  // are ignored — decided by identity, never by comparing text to text.\n  const canonicalMessageIds = new Set<string>();\n  const queuedRuns: AgentQueueEntry[] = [];\n  let queueDrainEpoch = 0;\n  let activeQueueDrainEpoch: number | null = null;\n  let attemptSequence = 0;\n  const messageDeliveries = new Map<string, MessageDelivery>();\n  const deliveryRevision = signal(0);\n  type DeliveryAttempt = {\n    generation: string;\n    messageIds: Set<string>;\n    finalizedMessageIds: Set<string>;\n    baselineMessageIds: Set<string>;\n    eligibleBaselineAssistantId?: string;\n    currentAssistantMessageId?: string;\n    sawAssistantChunk: boolean;\n    currentStepHasTerminalEvidence: boolean;\n    awaitingFinalSync: boolean;\n    terminalOutcome?: CompleteOutcome;\n  };\n  let activeAttempt: DeliveryAttempt | null = null;\n  const subagentManager = new SubagentTracker({\n    subagentToolNames: options.subagentToolNames,\n    onSubagentChange: publishSubagents,\n  });\n  const telemetryProperties = { transport: 'langgraph' as const, surface: 'agent' };\n  const redactOperationErrors = transport instanceof FetchStreamTransport\n    && transport.protectsOperationErrors;\n\n  function toSafeAgentError(error: unknown): AgentError {\n    if (redactOperationErrors) return genericSafeAgentError();\n    try {\n      return toAgentError(error);\n    } catch {\n      return genericSafeAgentError();\n    }\n  }\n  captureAgentRuntimeTelemetry(\n    options.telemetry,\n    'tplane:runtime_instance_created',\n    telemetryProperties,\n  );\n\n  function captureRuntimeRequestTelemetry(requestType: string): void {\n    captureAgentRuntimeTelemetry(options.telemetry, 'tplane:runtime_request_created', {\n      ...telemetryProperties,\n      requestType,\n    });\n  }\n\n  /**\n   * Tracks reasoning timing per message id. Keys are message ids; values\n   * record when reasoning content first arrived and when response text\n   * first appeared (or the canonical message arrived). Cleared on\n   * resetThreadState() and on bridge teardown.\n   */\n  const reasoningTimingMap = new Map<string, { startedAt: number; endedAt?: number }>();\n\n  function notifyDeliveryChange(): void {\n    deliveryRevision.update(revision => revision + 1);\n  }\n\n  function beginAttempt(allowBaselineTail = false): DeliveryAttempt {\n    if (activeAttempt?.awaitingFinalSync) {\n      historyAbortController?.abort();\n    }\n    if (activeAttempt && !activeAttempt.terminalOutcome) {\n      finalizeAttempt(activeAttempt, 'interrupted');\n    }\n    const baselineMessageIds = new Set<string>();\n    for (const message of subjects.messages$.value) {\n      const id = (message as unknown as Record<string, unknown>)['id'];\n      if (typeof id === 'string') baselineMessageIds.add(id);\n    }\n    attemptSequence += 1;\n    const attempt: DeliveryAttempt = {\n      generation: `attempt-${attemptSequence}-${Math.random().toString(36).slice(2, 10)}`,\n      messageIds: new Set(),\n      finalizedMessageIds: new Set(),\n      baselineMessageIds,\n      eligibleBaselineAssistantId: allowBaselineTail\n        ? getTailAssistantMessageId(subjects.messages$.value)\n        : undefined,\n      sawAssistantChunk: false,\n      currentStepHasTerminalEvidence: false,\n      awaitingFinalSync: false,\n    };\n    activeAttempt = attempt;\n    return attempt;\n  }\n\n  function isCurrentExecution(controller: AbortController, attempt: DeliveryAttempt): boolean {\n    return abortController === controller && activeAttempt === attempt;\n  }\n\n  function setDelivery(id: string, delivery: MessageDelivery): void {\n    const previous = messageDeliveries.get(id);\n    if (\n      previous?.generation === delivery.generation\n      && previous.phase === delivery.phase\n      && (previous.phase !== 'complete' || delivery.phase !== 'complete' || previous.outcome === delivery.outcome)\n    ) {\n      return;\n    }\n    messageDeliveries.set(id, delivery);\n    notifyDeliveryChange();\n  }\n\n  function finalizeMessage(attempt: DeliveryAttempt, id: string, outcome: CompleteOutcome): void {\n    setDelivery(id, completeDelivery(attempt.generation, outcome));\n    attempt.finalizedMessageIds.add(id);\n  }\n\n  function finalizeAttempt(attempt: DeliveryAttempt, outcome: CompleteOutcome): void {\n    if (attempt.terminalOutcome) return;\n    attempt.terminalOutcome = outcome;\n    for (const id of attempt.messageIds) {\n      if (attempt.finalizedMessageIds.has(id)) continue;\n      finalizeMessage(attempt, id, outcome);\n    }\n    // Subgraph children have no tool result to settle them; the run's own\n    // terminal outcome is their completion signal. Paused/interrupted runs\n    // are excluded — a child can resume with the thread.\n    if (outcome === 'success' || outcome === 'error' || outcome === 'aborted') {\n      subagentManager.settleRunningSubgraphs(outcome === 'success' ? 'complete' : 'error');\n      publishSubagents();\n    }\n  }\n\n  function finishOutcome(attempt: DeliveryAttempt): CompleteOutcome {\n    return attempt.terminalOutcome\n      ?? (attempt.currentStepHasTerminalEvidence || !attempt.sawAssistantChunk ? 'success' : 'interrupted');\n  }\n\n  async function finalizeClosedAttempt(\n    controller: AbortController,\n    attempt: DeliveryAttempt,\n  ): Promise<CompleteOutcome | null> {\n    if (attempt.terminalOutcome) return attempt.terminalOutcome;\n\n    const outcome = finishOutcome(attempt);\n    attempt.awaitingFinalSync = true;\n    try {\n      await refreshHistory(\n        true,\n        () => isCurrentExecution(controller, attempt) && !attempt.terminalOutcome,\n      );\n    } finally {\n      attempt.awaitingFinalSync = false;\n    }\n\n    if (!isCurrentExecution(controller, attempt)) return null;\n    if (!attempt.terminalOutcome) finalizeAttempt(attempt, outcome);\n    return attempt.terminalOutcome ?? outcome;\n  }\n\n  function trackAssistantMessages(messages: BaseMessage[]): void {\n    const attempt = activeAttempt;\n    if (!attempt || attempt.terminalOutcome) return;\n\n    const assistantMessages = messages.filter(message => {\n      const raw = message as unknown as Record<string, unknown>;\n      const type = normalizeMessageType(\n        typeof message._getType === 'function' ? message._getType() : raw['type'] as string | undefined,\n      );\n      const id = typeof raw['id'] === 'string' ? raw['id'] : undefined;\n      return type === 'ai' && id && !attempt.finalizedMessageIds.has(id);\n    });\n    const newAssistantMessages = assistantMessages.filter(message => {\n      const id = (message as unknown as Record<string, unknown>)['id'];\n      return typeof id === 'string' && !attempt.baselineMessageIds.has(id);\n    });\n    const currentStepMessages = newAssistantMessages.length > 0\n      ? newAssistantMessages\n      : assistantMessages.filter(message =>\n          (message as unknown as Record<string, unknown>)['id'] === attempt.eligibleBaselineAssistantId\n        );\n\n    for (const message of currentStepMessages) {\n      const id = (message as unknown as Record<string, unknown>)['id'] as string;\n\n      if (attempt.currentAssistantMessageId && attempt.currentAssistantMessageId !== id) {\n        finalizeMessage(attempt, attempt.currentAssistantMessageId, 'success');\n        attempt.currentStepHasTerminalEvidence = false;\n      }\n      attempt.currentAssistantMessageId = id;\n      attempt.messageIds.add(id);\n      attempt.sawAssistantChunk = true;\n      setDelivery(id, streamingDelivery(attempt.generation));\n    }\n  }\n\n  function invalidateQueueDrain(): void {\n    queueDrainEpoch += 1;\n    activeQueueDrainEpoch = null;\n  }\n\n  function markNormalTerminal(event: StreamEvent): void {\n    const attempt = activeAttempt;\n    if (\n      !attempt\n      || attempt.terminalOutcome\n      || !attempt.sawAssistantChunk\n      || (getEventNamespace(event)?.length ?? 0) > 0\n    ) return;\n    const baseType = getBaseEventType(event.type);\n    // These are the canonical state/snapshot signals available in the current\n    // transport contract. Iterator close alone is deliberately not terminal\n    // evidence: after assistant chunks, a close without one of these markers\n    // is classified as interrupted.\n    if (baseType === 'values' || baseType === 'messages/complete' || baseType === 'checkpoints') {\n      attempt.currentStepHasTerminalEvidence = true;\n    }\n  }\n\n  function resetThreadState(): void {\n    historyAbortController?.abort();\n    subjects.values$.next({} as T);\n    subjects.messages$.next([]);\n    subjects.history$.next([]);\n    subjects.interrupt$.next(undefined);\n    subjects.interrupts$.next([]);\n    subjects.toolProgress$.next([]);\n    subjects.toolCalls$.next([]);\n    subjects.messageMetadata$.next(new Map());\n    subjects.subagents$.next(new Map());\n    void cancelQueueEntries(takeQueuedRuns()).catch(err => subjects.error$.next(toSafeAgentError(err)));\n    publishQueue();\n    subjects.custom$.next([]);\n    subjects.isThreadLoading$.next(false);\n    toolProgressMap.clear();\n    subagentManager.clear();\n    reasoningTimingMap.clear();\n    canonicalMessageIds.clear();\n    if (activeAttempt && !activeAttempt.terminalOutcome) {\n      finalizeAttempt(activeAttempt, 'interrupted');\n    }\n    messageDeliveries.clear();\n    activeAttempt = null;\n    notifyDeliveryChange();\n  }\n\n  function setThreadId(id: string | null, resetState: boolean): void {\n    if (resetState) {\n      invalidateQueueDrain();\n      abortController?.abort();\n      lastPayload = null;\n      lastOptions = undefined;\n    }\n    currentThreadId = id;\n    if (resetState) {\n      resetThreadState();\n    }\n    void refreshHistory();\n  }\n\n  // Track threadId changes\n  threadId$.pipe(takeUntil(destroy$)).subscribe(id => {\n    const shouldReset = hasSeenThreadId && currentThreadId !== id;\n    hasSeenThreadId = true;\n    setThreadId(id, shouldReset);\n  });\n\n  destroy$.subscribe(() => {\n    invalidateQueueDrain();\n    abortController?.abort();\n    historyAbortController?.abort();\n    reasoningTimingMap.clear();\n    if (activeAttempt && !activeAttempt.terminalOutcome) {\n      finalizeAttempt(activeAttempt, 'interrupted');\n    }\n    messageDeliveries.clear();\n    activeAttempt = null;\n    notifyDeliveryChange();\n  });\n\n  async function refreshHistory(force = false, isRelevant: () => boolean = () => true): Promise<void> {\n    const getHistory = transport.getHistory?.bind(transport);\n    if (!currentThreadId || !getHistory) return;\n\n    historyAbortController?.abort();\n    const controller = new AbortController();\n    historyAbortController = controller;\n    const threadId = currentThreadId;\n    subjects.isThreadLoading$.next(true);\n\n    try {\n      const history = await waitForHistory(getHistory(threadId, controller.signal), controller.signal);\n      if (!controller.signal.aborted && currentThreadId === threadId && isRelevant()) {\n        subjects.history$.next(history as ThreadState<T>[]);\n\n        // Project the latest checkpoint into messages$ + values$:\n        //  - On first connect (`force=false`): only when messages$ is\n        //    empty, so optimistic local state isn't clobbered.\n        //  - At run completion (`force=true`): always — server state is\n        //    authoritative for node-level mutations (e.g. RemoveMessage\n        //    or id-match content replacement performed by post-process\n        //    nodes), and the streaming SDK doesn't always restream those.\n        const latest = history[0] as\n          | { values?: { messages?: BaseMessage[] } & T }\n          | undefined;\n        const shouldProject = latest?.values\n          && (force || subjects.messages$.value.length === 0);\n        if (shouldProject) {\n          const restoredMessages = latest.values?.messages ?? [];\n          const restoredValues = { ...(latest.values as T) };\n          // Strip the `messages` field from values — messages$ is the\n          // canonical surface for them; keeping a duplicate in values$\n          // would confuse downstream consumers reading both subjects.\n          delete (restoredValues as { messages?: unknown }).messages;\n          subjects.messages$.next(preserveIds(subjects.messages$.value, restoredMessages));\n          subjects.values$.next(restoredValues);\n          // Rebuild derived subjects from the new authoritative messages$.\n          // Tool-call results displayed by chat-tool-calls come from\n          // toolCalls$, which is built from messages$; without this, the\n          // panel keeps showing the streamed pre-mutation content.\n          syncToolCallsFromMessages();\n        }\n\n        // Hydrate pending interrupts from the latest checkpoint. When a\n        // thread is reloaded mid-pause (paused at an interrupt), the\n        // streaming events won't replay — interrupts live on the\n        // checkpoint's tasks[i].interrupts and must be projected manually\n        // so the interrupt panel re-renders on page reload.\n        hydrateInterruptsFromHistory(history as ThreadState<T>[], subjects);\n      }\n    } catch (err) {\n      if (!controller.signal.aborted && isRelevant() && !safeIsAbortError(err)) {\n        subjects.error$.next(toSafeAgentError(err));\n      }\n    } finally {\n      if (historyAbortController === controller) {\n        historyAbortController = null;\n        subjects.isThreadLoading$.next(false);\n      }\n    }\n  }\n\n  function waitForHistory<R>(history: Promise<R>, signal: AbortSignal): Promise<R> {\n    if (signal.aborted) return Promise.reject(createHistoryAbortError());\n\n    return new Promise<R>((resolve, reject) => {\n      const onAbort = () => {\n        cleanup();\n        reject(createHistoryAbortError());\n      };\n      const cleanup = () => signal.removeEventListener('abort', onAbort);\n      signal.addEventListener('abort', onAbort, { once: true });\n      history.then(\n        value => {\n          cleanup();\n          resolve(value);\n        },\n        error => {\n          cleanup();\n          reject(error);\n        },\n      );\n    });\n  }\n\n  function createHistoryAbortError(): Error {\n    const error = new Error('History refresh aborted.');\n    error.name = 'AbortError';\n    return error;\n  }\n\n  function publishQueue(): void {\n    subjects.queue$.next(createQueueSnapshot());\n  }\n\n  function createQueueSnapshot(): AgentQueue {\n    return {\n      entries: [...queuedRuns],\n      size: queuedRuns.length,\n      cancel: cancelQueuedRun,\n      clear: clearQueue,\n    };\n  }\n\n  async function enqueueRun(payload: unknown, opts?: LangGraphSubmitOptions): Promise<void> {\n    if (!currentThreadId) {\n      throw new Error('Cannot enqueue a run before a LangGraph thread exists.');\n    }\n    if (!transport.createQueuedRun) {\n      throw new Error('The configured LangGraph transport does not support server-side queueing.');\n    }\n\n    captureRuntimeRequestTelemetry('enqueue');\n    const controller = new AbortController();\n    const entry = await transport.createQueuedRun(\n      options.assistantId,\n      currentThreadId,\n      payload,\n      opts?.signal ?? controller.signal,\n      opts,\n    );\n    queuedRuns.push({\n      ...entry,\n      values: payload,\n      options: { ...opts, multitaskStrategy: 'enqueue' },\n      createdAt: entry.createdAt ?? new Date(),\n    });\n    publishQueue();\n  }\n\n  async function cancelQueuedRun(id: string): Promise<boolean> {\n    const index = queuedRuns.findIndex(entry => entry.id === id);\n    if (index === -1) return false;\n\n    const [entry] = queuedRuns.splice(index, 1);\n    publishQueue();\n    if (!entry || !transport.cancelRun) return false;\n    await cancelQueueEntries([entry]);\n    return true;\n  }\n\n  async function clearQueue(): Promise<void> {\n    const entries = takeQueuedRuns();\n    publishQueue();\n    await cancelQueueEntries(entries);\n  }\n\n  function takeQueuedRuns(): AgentQueueEntry[] {\n    return queuedRuns.splice(0, queuedRuns.length);\n  }\n\n  async function cancelQueueEntries(entries: AgentQueueEntry[]): Promise<void> {\n    const cancelRun = transport.cancelRun?.bind(transport);\n    if (!cancelRun) return;\n    await Promise.all(entries.map(entry =>\n      cancelRun(entry.threadId, entry.id, new AbortController().signal)\n    ));\n  }\n\n  async function drainQueue(): Promise<void> {\n    if (activeQueueDrainEpoch !== null || queuedRuns.length === 0) return;\n    queueDrainEpoch += 1;\n    const drainEpoch = queueDrainEpoch;\n    activeQueueDrainEpoch = drainEpoch;\n    try {\n      while (queuedRuns.length > 0) {\n        if (activeQueueDrainEpoch !== drainEpoch) return;\n        const entry = queuedRuns.shift();\n        publishQueue();\n        if (!entry || !transport.joinStream) continue;\n        await joinQueuedRun(entry, drainEpoch);\n      }\n    } finally {\n      if (activeQueueDrainEpoch === drainEpoch) activeQueueDrainEpoch = null;\n    }\n  }\n\n  async function joinQueuedRun(entry: AgentQueueEntry, drainEpoch: number): Promise<void> {\n    if (activeQueueDrainEpoch !== drainEpoch) return;\n    const controller = new AbortController();\n    abortController = controller;\n    const attempt = beginAttempt(true);\n    const startedAt = Date.now();\n    captureRuntimeRequestTelemetry('join_queued');\n    captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_started', telemetryProperties);\n    subjects.custom$.next([]);\n    subjects.toolProgress$.next([]);\n    toolProgressMap.clear();\n    subjects.status$.next(ResourceStatus.Loading);\n\n    try {\n      const iter = transport.joinStream\n        ? transport.joinStream(entry.threadId, entry.id, undefined, controller.signal)\n        : [];\n      for await (const event of iter) {\n        if (controller.signal.aborted || !isCurrentExecution(controller, attempt)) break;\n        processEvent(event);\n      }\n      if (!isCurrentExecution(controller, attempt)) return;\n      const outcome = await finalizeClosedAttempt(controller, attempt);\n      if (outcome === null) return;\n      if (!controller.signal.aborted) {\n        if (outcome !== 'error') {\n          subjects.status$.next(ResourceStatus.Resolved);\n        }\n        captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_ended', {\n          ...telemetryProperties,\n          durationMs: Date.now() - startedAt,\n        });\n      }\n    } catch (err) {\n      if (!isCurrentExecution(controller, attempt)) return;\n      if (attempt.terminalOutcome) return;\n      if (safeIsAbortError(err) && userAbortedControllers.has(controller)) {\n        finalizeAttempt(attempt, 'aborted');\n        subjects.error$.next(undefined);\n        subjects.status$.next(ResourceStatus.Idle);\n      } else {\n        finalizeAttempt(attempt, attempt.sawAssistantChunk ? 'interrupted' : 'error');\n        subjects.error$.next(toSafeAgentError(err));\n        subjects.status$.next(ResourceStatus.Error);\n        captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_errored', {\n          ...telemetryProperties,\n          durationMs: Date.now() - startedAt,\n          errorClass: agentRuntimeTelemetryErrorClass(err),\n        });\n      }\n    } finally {\n      if (abortController === controller) abortController = null;\n    }\n  }\n\n  async function runStream(\n    payload: unknown,\n    opts?: LangGraphSubmitOptions,\n    requestType = 'submit',\n  ): Promise<CompleteOutcome> {\n    invalidateQueueDrain();\n    abortController?.abort();\n    const controller = new AbortController();\n    abortController = controller;\n    const attempt = beginAttempt(\n      requestType === 'resubmit' || (isRecord(opts?.command) && 'resume' in opts.command),\n    );\n    const startedAt = Date.now();\n    captureRuntimeRequestTelemetry(requestType);\n    captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_started', telemetryProperties);\n\n    subjects.status$.next(ResourceStatus.Loading);\n    subjects.error$.next(undefined);\n    subjects.custom$.next([]);\n    subjects.toolProgress$.next([]);\n    toolProgressMap.clear();\n    canonicalMessageIds.clear();\n    lastPayload = payload ?? null;\n    lastOptions = opts;\n\n    // Tracks whether at least one stream event has been processed this run.\n    // Used to distinguish a mid-stream network interruption (kind:'interrupted')\n    // from a fresh connect failure (falls through to toAgentError classification).\n    let streamingStarted = false;\n\n    // Optimistically inject human messages so they appear immediately\n    // without waiting for the server to echo them back. Assign a stable id\n    // when missing — track-by-id in the chat-message-list relies on stable\n    // ids across re-emissions, otherwise the optimistic message gets torn\n    // down + recreated on every messages$.next() during streaming, which\n    // restarts caret/typing animations and causes visible flicker.\n    const inputMessages = (payload as Record<string, unknown>)?.['messages'];\n    if (Array.isArray(inputMessages) && inputMessages.length > 0) {\n      const stamped = (inputMessages as BaseMessage[]).map((m) => {\n        const raw = m as unknown as Record<string, unknown>;\n        if (typeof raw['id'] === 'string' && raw['id']) return m;\n        const id = `optimistic-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n        return { ...m, id } as BaseMessage;\n      });\n      const existing = subjects.messages$.value;\n      subjects.messages$.next([...existing, ...stamped]);\n    }\n\n    try {\n      const iter = transport.stream(\n        options.assistantId,\n        currentThreadId,\n        payload,\n        opts?.signal ?? controller.signal,\n        opts,\n      );\n\n      for await (const event of iter) {\n        if (controller.signal.aborted || !isCurrentExecution(controller, attempt)) break;\n        streamingStarted = true;\n        processEvent(event);\n      }\n\n      if (!isCurrentExecution(controller, attempt)) return finishOutcome(attempt);\n      const outcome = await finalizeClosedAttempt(controller, attempt);\n      if (outcome === null) return finishOutcome(attempt);\n\n      if (!controller.signal.aborted) {\n        if (outcome !== 'error') {\n          subjects.status$.next(ResourceStatus.Resolved);\n        }\n        await drainQueue();\n        captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_ended', {\n          ...telemetryProperties,\n          durationMs: Date.now() - startedAt,\n        });\n      }\n      return outcome;\n    } catch (err) {\n      if (!isCurrentExecution(controller, attempt)) return finishOutcome(attempt);\n      if (attempt.terminalOutcome) return attempt.terminalOutcome;\n      if (safeIsAbortError(err) && userAbortedControllers.has(controller)) {\n        finalizeAttempt(attempt, 'aborted');\n        // User explicitly called stop() — treat as graceful idle, not an error.\n        subjects.error$.next(undefined);\n        subjects.status$.next(ResourceStatus.Idle);\n      } else if (safeIsAbortError(err)) {\n        finalizeAttempt(attempt, attempt.sawAssistantChunk ? 'interrupted' : 'error');\n        // A non-user-requested abort: interrupted if a stream had started, else a\n        // connect-phase failure. Never \"aborted\" (that's reserved for user stop).\n        const e = streamingStarted\n          ? new AgentError({\n              kind: 'interrupted',\n              message: AGENT_ERROR_MESSAGES.interrupted,\n              retryable: true,\n              ...(!redactOperationErrors ? { cause: err } : {}),\n            })\n          : new AgentError({\n              kind: 'connection',\n              message: AGENT_ERROR_MESSAGES.connection,\n              retryable: true,\n              ...(!redactOperationErrors ? { cause: err } : {}),\n            });\n        subjects.error$.next(e);\n        subjects.status$.next(ResourceStatus.Error);\n        captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_errored', {\n          ...telemetryProperties,\n          durationMs: Date.now() - startedAt,\n          errorClass: agentRuntimeTelemetryErrorClass(err),\n        });\n      } else {\n        finalizeAttempt(attempt, attempt.sawAssistantChunk ? 'interrupted' : 'error');\n        subjects.error$.next(toSafeAgentError(err));\n        subjects.status$.next(ResourceStatus.Error);\n        captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_errored', {\n          ...telemetryProperties,\n          durationMs: Date.now() - startedAt,\n          errorClass: agentRuntimeTelemetryErrorClass(err),\n        });\n      }\n      return finishOutcome(attempt);\n    } finally {\n      if (abortController === controller) abortController = null;\n    }\n  }\n\n  function processEvent(event: StreamEvent): void {\n    const baseType = getBaseEventType(event.type);\n    const namespace = getEventNamespace(event);\n\n    if (baseType === 'checkpoints' || baseType === 'messages/complete') {\n      markNormalTerminal(event);\n    }\n\n    if (isMessagesEvent(event.type)) {\n      const msgs = normalizeMessages(event);\n      if (!msgs) return;\n\n      const normalized = options.toMessage\n        ? msgs.map(options.toMessage)\n        : msgs as BaseMessage[];\n\n      // Any namespaced message event is child content. It feeds the child's\n      // stream and never merges into the parent transcript — the parent\n      // transcript is what the parent graph says. Shared-state children still\n      // surface at settle through the authoritative top-level `values` sync.\n      if (isChildNamespace(namespace)) {\n        const child = namespace ? childStreamRefFromNamespace(namespace) : undefined;\n        if (child) {\n          if (child.kind === 'subgraph') {\n            subagentManager.ensureSubgraphStream(child.key, child.name);\n          } else {\n            // Claim the stream for its tool call before its tokens arrive.\n            subagentManager.ensureToolStreamAttribution(child.key);\n          }\n          for (const msg of normalized) {\n            subagentManager.addMessageToSubagent(child.key, msg);\n          }\n          publishSubagents();\n        }\n        storeMessageMetadata(normalized, event);\n        return;\n      }\n\n      // Partial and message-tuple events are incremental. Merge them by id\n      // so optimistic human messages and earlier tool messages are preserved.\n      if (event.type === 'messages/partial' || event.messageMetadata) {\n        if (!isTranscriptMessageEvent(event, options.transcriptNodeNames)) {\n          storeMessageMetadata(normalized, event);\n          syncSubagentsFromMessages(normalized);\n          return;\n        }\n        const mode: MergeMode = event.messageMetadata ? 'delta' : 'snapshot';\n        const affectedMessageIds = new Set<string>();\n        const merged = mergeMessages(\n          subjects.messages$.value,\n          normalized,\n          reasoningTimingMap,\n          mode,\n          canonicalMessageIds,\n          affectedMessageIds,\n          activeAttempt?.currentAssistantMessageId !== undefined\n            && activeAttempt.currentStepHasTerminalEvidence !== true,\n        );\n        subjects.messages$.next(merged);\n        {\n          trackAssistantMessages(merged.filter(message => {\n            const id = (message as unknown as Record<string, unknown>)['id'];\n            return typeof id === 'string' && affectedMessageIds.has(id);\n          }));\n        }\n        if (isLgTraceEnabled()) {\n          const msgs = subjects.messages$.value;\n          const last = msgs[msgs.length - 1];\n          lgTrace('bridge.messages-tuple', { id: (last as unknown as Record<string, unknown> | undefined)?.['id'], count: msgs.length });\n        }\n      } else if (normalized.length === 0) {\n        // Defensive: skip empty replacements during streaming. An empty\n        // batch shouldn't tear down the entire UI (causes message DOM\n        // teardown + streaming renderer reset = visible jank).\n      } else {\n        // Preserve existing ids by content so the final-id swap doesn't\n        // tear down the chat-message DOM (and its streaming-md renderer).\n        const affectedMessageIds = new Set<string>();\n        const preserved = preserveIds(subjects.messages$.value, normalized, affectedMessageIds);\n        subjects.messages$.next(preserved);\n        {\n          trackAssistantMessages(preserved.filter(message => {\n            const id = (message as unknown as Record<string, unknown>)['id'];\n            return typeof id === 'string' && affectedMessageIds.has(id);\n          }));\n        }\n      }\n      markNormalTerminal(event);\n      storeMessageMetadata(normalized, event);\n      syncSubagentsFromMessages(normalized);\n      syncToolCallsFromMessages();\n      return;\n    }\n\n    // normalizeSdkEvent spreads event data directly into the event object,\n    // so the values/updates payload is at event['data'] (the original data object),\n    // NOT at event['values'] or event['updates'].\n    switch (baseType) {\n      case 'values': {\n        const vals = extractEventData(event);\n        if (isChildNamespace(namespace)) {\n          // A child's state must not clobber the parent's `values$` — route it\n          // to the child stream and stop.\n          if (isRecord(vals)) updateSubagentValues(namespace, vals);\n          break;\n        }\n        if ((namespace?.length ?? 0) === 0) {\n          if (hasInterrupts(vals)) {\n            if (activeAttempt) finalizeAttempt(activeAttempt, 'paused');\n          } else {\n            markNormalTerminal(event);\n          }\n        }\n        if (vals != null) {\n          extractInterrupts(vals, subjects);\n          subjects.values$.next(vals as T);\n          // Also sync messages$ from the values state so the full message\n          // history (including human messages) is available to consumers.\n          const stateMessages = (vals as Record<string, unknown>)['messages'];\n          if (Array.isArray(stateMessages) && stateMessages.length > 0) {\n            // Defensive: only sync when state carries messages. An empty\n            // values payload shouldn't wipe the UI mid-stream.\n            const projected = options.toMessage\n              ? stateMessages.map(options.toMessage)\n              : (stateMessages as BaseMessage[]);\n            // Drop empty-content AI placeholders before merging. LangGraph\n            // emits intermediate `values` events whose `state.messages`\n            // includes an unfilled assistant turn at the tail. Keeping it\n            // would create a phantom slot that competes with the chunk-\n            // streamed AIMessageChunk arriving via messages-tuple — they'd\n            // never merge (different ids; non-overlapping content fragments)\n            // and the user sees two assistant bubbles.\n            const filtered = projected.filter((m, i) => {\n              if (i !== projected.length - 1) return true;\n              const t = normalizeMessageType(\n                typeof m._getType === 'function' ? m._getType() : (m as unknown as Record<string, unknown>)['type'] as string | undefined,\n              );\n              if (t !== 'ai') return true;\n              const text = extractText(m.content);\n              return text.length > 0;\n            });\n            // Preserve existing ids by content match (server echo / final-id swap).\n            const remapped = preserveIds(subjects.messages$.value, filtered);\n            // ALWAYS merge values-derived messages into existing rather\n            // than replacing. LangGraph emits intermediate values events\n            // during streaming where state.messages can lag behind what\n            // we've already seen via messages-tuple — replacing would\n            // drop the partial AI (or even the optimistic human) and\n            // tear down their DOM mid-stream. Merge by id keeps both,\n            // updates content where ids match, preserves the rest.\n            subjects.messages$.next(mergeMessages(subjects.messages$.value, remapped, reasoningTimingMap, 'snapshot', canonicalMessageIds));\n            if (isLgTraceEnabled()) {\n              lgTrace('bridge.values-sync', {\n                incomingLength: stateMessages.length,\n                mergedLength: subjects.messages$.value.length,\n              });\n            }\n            syncSubagentsFromMessages(stateMessages as BaseMessage[]);\n            subagentManager.reconstructFromMessages(\n              stateMessages as BaseMessage[],\n              { skipIfPopulated: true },\n            );\n            publishSubagents();\n            syncToolCallsFromMessages();\n          }\n        }\n        break;\n      }\n      case 'updates': {\n        const upd = extractEventData(event);\n        if (isChildNamespace(namespace)) {\n          // A child's updates must not spread-merge into the parent's\n          // `values$` — they only mark the child stream running.\n          markSubagentRunning(namespace);\n          break;\n        }\n        if (upd != null) {\n          extractInterrupts(upd, subjects);\n          subjects.values$.next({\n            ...subjects.values$.value,\n            ...(upd as object),\n          } as T);\n        }\n        break;\n      }\n      case 'error':\n        if (activeAttempt) finalizeAttempt(activeAttempt, 'error');\n        subjects.error$.next(toSafeAgentError(safeReadEventError(event)));\n        subjects.status$.next(ResourceStatus.Error);\n        break;\n      case 'interrupt':\n        if (activeAttempt) finalizeAttempt(activeAttempt, 'paused');\n        subjects.interrupt$.next(event['interrupt'] as Interrupt);\n        break;\n      case 'interrupts':\n        if (activeAttempt) finalizeAttempt(activeAttempt, 'paused');\n        subjects.interrupts$.next(event['interrupts'] as Interrupt[]);\n        break;\n      case 'custom': {\n        const eventData = event['data'] as Record<string, unknown> | undefined;\n        // Server-announced subagent identity (threadplane-middleware's\n        // `announce_subagent`). Consumed here rather than forwarded: it is\n        // protocol chatter, not application data.\n        if (\n          isRecord(eventData)\n          && eventData['type'] === 'threadplane.subagent_binding'\n          && typeof eventData['namespace'] === 'string'\n          && typeof eventData['tool_call_id'] === 'string'\n        ) {\n          const bound = childStreamRefFromNamespace([eventData['namespace']]);\n          if (bound?.kind === 'tool') {\n            subagentManager.bindChildStream(bound.key, eventData['tool_call_id']);\n            publishSubagents();\n          }\n          break;\n        }\n        const name = (event['name'] ?? eventData?.['name'] ?? '') as string;\n        const data = eventData?.['data'] ?? eventData;\n        const current = subjects.custom$.value;\n        subjects.custom$.next([...current, { name, data }]);\n        break;\n      }\n      case 'tools':\n        updateToolProgress(event);\n        break;\n    }\n  }\n\n  function syncToolCallsFromMessages(): void {\n    const toolCalls = getToolCallsWithResults(\n      subjects.messages$.value as unknown as LangGraphMessage[],\n    ) as ToolCallWithResult[];\n    subjects.toolCalls$.next(toolCalls);\n  }\n\n  function syncSubagentsFromMessages(messages: BaseMessage[]): void {\n    for (const message of messages) {\n      const raw = message as unknown as Record<string, unknown>;\n      if (isAiMessageWithToolCalls(raw)) {\n        subagentManager.registerFromToolCalls(\n          raw['tool_calls'] as Array<{ id?: string; name: string; args: Record<string, unknown> | string }>,\n          typeof raw['id'] === 'string' ? raw['id'] : null,\n        );\n      }\n      if (isToolMessage(raw)) {\n        const content = typeof raw['content'] === 'string'\n          ? raw['content']\n          : JSON.stringify(raw['content']);\n        const status = raw['status'] === 'error' ? 'error' : 'success';\n        subagentManager.processToolMessage(raw['tool_call_id'], content, status);\n      }\n    }\n    publishSubagents();\n  }\n\n  function updateSubagentValues(namespace: string[] | undefined, values: Record<string, unknown>): void {\n    const child = namespace ? childStreamRefFromNamespace(namespace) : undefined;\n    if (!child) return;\n\n    if (child.kind === 'tool') {\n      // Prefer the precise description match when the child's first message is\n      // the human task; otherwise claim the stream positionally so a graph that\n      // doesn't fit that shape still gets attributed.\n      const messages = values['messages'];\n      const first = Array.isArray(messages) && messages.length > 0 ? messages[0] : undefined;\n      if (isRecord(first) && (first['type'] === 'human' || first['type'] === 'user') && typeof first['content'] === 'string') {\n        subagentManager.matchSubgraphToSubagent(child.key, first['content']);\n      } else {\n        subagentManager.ensureToolStreamAttribution(child.key);\n      }\n    } else {\n      subagentManager.ensureSubgraphStream(child.key, child.name);\n    }\n    subagentManager.updateSubagentValues(child.key, values);\n    publishSubagents();\n  }\n\n  function markSubagentRunning(namespace: string[] | undefined): void {\n    const child = namespace ? childStreamRefFromNamespace(namespace) : undefined;\n    if (!child) return;\n    if (child.kind === 'subgraph') {\n      subagentManager.ensureSubgraphStream(child.key, child.name);\n    }\n    subagentManager.markRunningFromNamespace(child.key, namespace);\n    publishSubagents();\n  }\n\n  function publishSubagents(): void {\n    subjects.subagents$.next(toSubagentRefs(subagentManager.getSubagents()));\n  }\n\n  function storeMessageMetadata(messages: BaseMessage[], event: StreamEvent): void {\n    if (!event.messageMetadata) return;\n    const next = new Map(subjects.messageMetadata$.value);\n    messages.forEach((message, index) => {\n      const id = (message as unknown as Record<string, unknown>)['id'];\n      const messageId = String(id ?? index);\n      next.set(messageId, {\n        messageId,\n        firstSeenState: undefined,\n        branch: undefined,\n        branchOptions: undefined,\n        streamMetadata: event.messageMetadata,\n      });\n    });\n    subjects.messageMetadata$.next(next);\n  }\n\n  function updateToolProgress(event: StreamEvent): void {\n    const data = extractEventData(event);\n    if (!isRecord(data)) return;\n\n    const toolEvent = data['event'];\n    const name = data['name'];\n    if (typeof toolEvent !== 'string' || typeof name !== 'string') return;\n\n    const toolCallId = typeof data['toolCallId'] === 'string' ? data['toolCallId'] : undefined;\n    const key = toolCallId ?? name;\n    const existing = toolProgressMap.get(key);\n\n    switch (toolEvent) {\n      case 'on_tool_start':\n        toolProgressMap.set(key, {\n          toolCallId,\n          name,\n          state: 'starting',\n          input: data['input'],\n        });\n        break;\n      case 'on_tool_event':\n        toolProgressMap.set(key, {\n          toolCallId,\n          name,\n          ...existing,\n          state: 'running',\n          data: data['data'],\n        });\n        break;\n      case 'on_tool_end':\n        toolProgressMap.set(key, {\n          toolCallId,\n          name,\n          ...existing,\n          state: 'completed',\n          result: data['output'],\n        });\n        break;\n      case 'on_tool_error':\n        toolProgressMap.set(key, {\n          toolCallId,\n          name,\n          ...existing,\n          state: 'error',\n          error: redactOperationErrors ? 'The tool call failed.' : safeReadRecordValue(data, 'error'),\n        });\n        break;\n      default:\n        return;\n    }\n\n    subjects.toolProgress$.next([...toolProgressMap.values()]);\n  }\n\n  return {\n    submit: async (payload, opts) => {\n      if (opts?.multitaskStrategy === 'enqueue' && subjects.status$.value === ResourceStatus.Loading) {\n        await enqueueRun(payload, opts);\n        return 'success';\n      }\n      return runStream(payload, opts);\n    },\n\n    stop: async () => {\n      invalidateQueueDrain();\n      const shouldAbortAttempt = Boolean(\n        abortController && activeAttempt && !activeAttempt.terminalOutcome\n      );\n      if (shouldAbortAttempt && abortController) userAbortedControllers.add(abortController);\n      if (shouldAbortAttempt && activeAttempt) finalizeAttempt(activeAttempt, 'aborted');\n      abortController?.abort();\n      if (activeAttempt?.awaitingFinalSync) historyAbortController?.abort();\n      await clearQueue();\n      // Set Idle synchronously for an active user cancellation. Attempts that\n      // already reached a terminal outcome retain their existing status.\n      if (shouldAbortAttempt && subjects.status$.value !== ResourceStatus.Idle) {\n        subjects.status$.next(ResourceStatus.Idle);\n      }\n    },\n\n    switchThread: (id) => {\n      setThreadId(id, true);\n    },\n\n    joinStream: async (runId, lastEventId) => {\n      if (!currentThreadId) return;\n      invalidateQueueDrain();\n      abortController?.abort();\n      const controller = new AbortController();\n      abortController = controller;\n      const attempt = beginAttempt(true);\n      const threadId = currentThreadId;\n      const startedAt = Date.now();\n      captureRuntimeRequestTelemetry('join');\n      captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_started', telemetryProperties);\n      subjects.custom$.next([]);\n      subjects.toolProgress$.next([]);\n      toolProgressMap.clear();\n      subjects.status$.next(ResourceStatus.Loading);\n      subjects.error$.next(undefined);\n      try {\n        const iter = transport.joinStream\n          ? transport.joinStream(threadId, runId, lastEventId, controller.signal)\n          : [];\n        for await (const event of iter) {\n          if (controller.signal.aborted || !isCurrentExecution(controller, attempt)) break;\n          processEvent(event);\n        }\n        if (!isCurrentExecution(controller, attempt)) return;\n        const outcome = await finalizeClosedAttempt(controller, attempt);\n        if (outcome === null) return;\n        if (!controller.signal.aborted) {\n          if (outcome !== 'error') {\n            subjects.status$.next(ResourceStatus.Resolved);\n          }\n          captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_ended', {\n            ...telemetryProperties,\n            durationMs: Date.now() - startedAt,\n          });\n        }\n      } catch (err) {\n        if (!isCurrentExecution(controller, attempt)) return;\n        if (attempt.terminalOutcome) return;\n        if (safeIsAbortError(err) && userAbortedControllers.has(controller)) {\n          finalizeAttempt(attempt, 'aborted');\n          subjects.error$.next(undefined);\n          subjects.status$.next(ResourceStatus.Idle);\n        } else {\n          finalizeAttempt(attempt, attempt.sawAssistantChunk ? 'interrupted' : 'error');\n          subjects.error$.next(toSafeAgentError(err));\n          subjects.status$.next(ResourceStatus.Error);\n          captureAgentRuntimeTelemetry(options.telemetry, 'tplane:stream_errored', {\n            ...telemetryProperties,\n            durationMs: Date.now() - startedAt,\n            errorClass: agentRuntimeTelemetryErrorClass(err),\n          });\n        }\n      } finally {\n        if (abortController === controller) abortController = null;\n      }\n    },\n\n    resubmitLast: async () => {\n      if (lastPayload === null) return 'not-started';\n      return runStream(lastPayload, lastOptions, 'resubmit');\n    },\n\n    getReasoningDurationMs: (id: string): number | undefined => {\n      const entry = reasoningTimingMap.get(id);\n      if (!entry) return undefined;\n      if (entry.endedAt === undefined) return undefined;\n      return entry.endedAt - entry.startedAt;\n    },\n\n    getMessageDelivery: (id: string): MessageDelivery =>\n      messageDeliveries.get(id) ?? staticDelivery(id),\n\n    getSubagentMessageDelivery: (toolCallId: string, message: BaseMessage): MessageDelivery =>\n      subagentManager.getMessageDelivery(toolCallId, message),\n\n    deliveryRevision,\n\n    updateState: async (\n      values: Record<string, unknown>,\n      opts?: { asNode?: string },\n    ): Promise<void> => {\n      // No-op when there is no thread yet or the transport doesn't support\n      // updateState (e.g. MockAgentTransport in unit tests without a threadId).\n      if (!currentThreadId || !transport.updateState) {\n        return;\n      }\n      await transport.updateState(\n        currentThreadId,\n        values,\n        new AbortController().signal,\n        opts,\n      );\n    },\n\n    get currentThreadId(): string | null {\n      return currentThreadId;\n    },\n  };\n}\n\nfunction isTranscriptMessageEvent(\n  event: StreamEvent,\n  transcriptNodeNames: readonly string[] | undefined,\n): boolean {\n  if (!transcriptNodeNames || transcriptNodeNames.length === 0) return true;\n  const node = event.messageMetadata?.['langgraph_node'];\n  if (typeof node !== 'string') return true;\n  return transcriptNodeNames.includes(node);\n}\n\n/**\n * Extracts the payload data from a normalized SDK event.\n *\n * Handles two formats:\n * 1. SDK events (via normalizeSdkEvent): data at event['data'] (record) + spread into event\n * 2. Mock/test events: data at event[event.type] (e.g., event['values'], event['updates'])\n */\n/**\n * LangGraph emits interrupts as part of `updates`/`values` events under the\n * special `__interrupt__` key, not as standalone events. When such a payload\n * appears, mirror it onto `interrupt$` (latest) and `interrupts$` (full list)\n * so consumers can react via `agent.interrupt()` / `agent.interrupts()`.\n */\nfunction extractInterrupts<T, B extends BagTemplate>(\n  payload: unknown,\n  subjects: StreamSubjects<T, B>,\n): void {\n  if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return;\n  const raw = (payload as Record<string, unknown>)['__interrupt__'];\n  // Cast through unknown — Interrupt$ is parameterized over Bag's InterruptType,\n  // and the SDK delivers raw Interrupt payloads here.\n  if (Array.isArray(raw) && raw.length > 0) {\n    const list = raw as Interrupt[];\n    subjects.interrupts$.next(list as unknown as Parameters<typeof subjects.interrupts$.next>[0]);\n    subjects.interrupt$.next(list[list.length - 1] as unknown as Parameters<typeof subjects.interrupt$.next>[0]);\n    return;\n  }\n  // Payload has no `__interrupt__` key. Clear any stale interrupt so the UI\n  // dismisses the panel after a resume completes (LangGraph does not emit a\n  // separate \"cleared\" event — the absence of `__interrupt__` in subsequent\n  // values/updates is the signal). No-op if interrupt$ was already empty.\n  if (subjects.interrupt$.value !== undefined) {\n    subjects.interrupt$.next(undefined);\n    subjects.interrupts$.next([]);\n  }\n}\n\nfunction hasInterrupts(payload: unknown): boolean {\n  if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return false;\n  const raw = (payload as Record<string, unknown>)['__interrupt__'];\n  return Array.isArray(raw) && raw.length > 0;\n}\n\n/**\n * Projects pending interrupts from the latest history checkpoint onto the\n * interrupt$ / interrupts$ subjects. ThreadState exposes interrupts under\n * `tasks[i].interrupts` (per the LangGraph SDK schema). When the latest\n * checkpoint contains any pending interrupts, mirror them so consumers can\n * react via `agent.interrupt()` on thread reload without needing a fresh\n * stream event.\n *\n * If no interrupts are present, this is a no-op so existing streamed state\n * (mid-run) isn't clobbered by a stale history refresh.\n */\nfunction hydrateInterruptsFromHistory<T, B extends BagTemplate>(\n  history: ThreadState<T>[],\n  subjects: StreamSubjects<T, B>,\n): void {\n  const latest = history[0];\n  if (!latest || !Array.isArray(latest.tasks)) return;\n  const collected: Interrupt[] = [];\n  for (const task of latest.tasks) {\n    if (task && Array.isArray(task.interrupts) && task.interrupts.length > 0) {\n      for (const ix of task.interrupts as Interrupt[]) {\n        collected.push(ix);\n      }\n    }\n  }\n  if (collected.length > 0) {\n    subjects.interrupts$.next(\n      collected as unknown as Parameters<typeof subjects.interrupts$.next>[0],\n    );\n    subjects.interrupt$.next(\n      collected[collected.length - 1] as unknown as Parameters<\n        typeof subjects.interrupt$.next\n      >[0],\n    );\n  }\n}\n\nfunction extractEventData(event: StreamEvent): unknown {\n  // Try event['data'] first (SDK format from normalizeSdkEvent)\n  const d = event['data'];\n  if (d != null && typeof d === 'object' && !Array.isArray(d)) {\n    return d;\n  }\n  // Try event[event.type] (mock/test format: { type: 'values', values: {...} })\n  const named = event[event.type];\n  if (named != null && typeof named === 'object' && !Array.isArray(named)) {\n    return named;\n  }\n  // Fallback: reconstruct from remaining keys\n  const rest = Object.fromEntries(\n    Object.entries(event).filter(([key]) => key !== 'type' && key !== 'data'),\n  );\n  return Object.keys(rest).length > 0 ? rest : d;\n}\n\nfunction isMessagesEvent(type: StreamEvent['type']): boolean {\n  const baseType = getBaseEventType(type);\n  return baseType === 'messages' || baseType.startsWith('messages/');\n}\n\nfunction getBaseEventType(type: StreamEvent['type']): string {\n  return String(type).split('|')[0];\n}\n\nfunction getEventNamespace(event: StreamEvent): string[] | undefined {\n  if (Array.isArray(event.namespace)) return event.namespace;\n  const parts = String(event.type).split('|');\n  return parts.length > 1 ? parts.slice(1) : undefined;\n}\n\nfunction normalizeMessages(event: StreamEvent): unknown[] | null {\n  const directMessages = event['messages'];\n  if (Array.isArray(directMessages)) {\n    // Filter out non-message metadata objects (e.g. { langgraph_node, langgraph_triggers })\n    // that the LangGraph SDK includes alongside real messages in messages/* events.\n    const filtered = directMessages.filter(isMessageLike);\n    return filtered.length > 0 ? filtered : null;\n  }\n\n  const data = event['data'];\n  if (Array.isArray(data)) {\n    if (data.every(isMessageLike)) {\n      return data;\n    }\n    if (isMessageLike(data[0])) {\n      return [data[0]];\n    }\n  }\n\n  const indexedValues = Object.keys(event)\n    .filter(key => /^\\d+$/.test(key))\n    .sort((left, right) => Number(left) - Number(right))\n    .map(key => event[key]);\n\n  if (indexedValues.every(isMessageLike)) {\n    return indexedValues;\n  }\n  if (isMessageLike(indexedValues[0])) {\n    return [indexedValues[0]];\n  }\n\n  return null;\n}\n\n/**\n * Collapse adjacent AI messages where one's text is a prefix of the other.\n *\n * When complex-content streaming is in play, the same conceptual assistant\n * message can land in two slots: the canonical AI from values-sync (id\n * `resp_…` or run id) and the chunk-streamed AIMessageChunk from\n * messages-tuple (id `lc_run--…`). Both slots fill in parallel; once both\n * carry the full text we collapse them, keeping the older slot's id so\n * track-by-id stays stable in the chat list.\n */\nfunction collapseAdjacentAi(\n  messages: BaseMessage[],\n  affectedMessageIds?: Set<string>,\n  allowCrossIdAiMerge = true,\n): BaseMessage[] {\n  if (messages.length < 2) return messages;\n  const out: BaseMessage[] = [];\n  for (const msg of messages) {\n    const last = out[out.length - 1];\n    if (!last) { out.push(msg); continue; }\n    const lastType = normalizeMessageType(\n      typeof last._getType === 'function' ? last._getType() : (last as unknown as Record<string, unknown>)['type'] as string | undefined,\n    );\n    const msgType = normalizeMessageType(\n      typeof msg._getType === 'function' ? msg._getType() : (msg as unknown as Record<string, unknown>)['type'] as string | undefined,\n    );\n    if (lastType === 'ai' && msgType === 'ai') {\n      const lastText = extractText(last.content);\n      const msgText = extractText(msg.content);\n      const lastRaw = last as unknown as Record<string, unknown>;\n      const msgRaw = msg as unknown as Record<string, unknown>;\n      const differentIds = lastRaw['id'] !== msgRaw['id'];\n      if (!(differentIds && !allowCrossIdAiMerge) && (lastText.length === 0\n          || msgText.length === 0\n          || lastText === msgText\n          || lastText.startsWith(msgText)\n          || msgText.startsWith(lastText))) {\n        // Keep the longer content; preserve last (older) id and metadata.\n        const longerText = msgText.length >= lastText.length ? msgText : lastText;\n        const lastId = (last as unknown as Record<string, unknown>)['id'];\n        const msgId = (msg as unknown as Record<string, unknown>)['id'];\n        if (typeof msgId === 'string' && affectedMessageIds?.delete(msgId) && typeof lastId === 'string') {\n          affectedMessageIds.add(lastId);\n        }\n        out[out.length - 1] = { ...(last as object), content: longerText } as BaseMessage;\n        continue;\n      }\n    }\n    out.push(msg);\n  }\n  return out;\n}\n\ntype MergeMode = 'delta' | 'snapshot';\n\nfunction mergeMessages(\n  existing: BaseMessage[],\n  incoming: BaseMessage[],\n  reasoningTimingMap?: Map<string, { startedAt: number; endedAt?: number }>,\n  mode: MergeMode = 'snapshot',\n  canonicalMessageIds?: Set<string>,\n  affectedMessageIds?: Set<string>,\n  allowCrossIdAiMerge = true,\n): BaseMessage[] {\n  const merged = [...existing];\n  for (const msg of incoming) {\n    const rawIn = msg as unknown as Record<string, unknown>;\n    const id = rawIn['id'];\n    let idx = id ? merged.findIndex(m => (m as unknown as Record<string, unknown>)['id'] === id) : -1;\n    // Fallback: match by (role, content) when ids differ. This is the path\n    // that fires when the server echoes back our optimistic human message\n    // with a server-assigned id, or when partial AI tokens carry a chunk\n    // id but the final canonical message has a run id. Preserving the\n    // existing id here keeps track-by-id stable in the chat list and\n    // prevents DOM teardown + animation restarts mid-stream.\n    if (idx < 0) {\n      idx = findContentMatch(merged, msg);\n      if (idx >= 0 && !canMergeCrossIdAi(merged[idx], msg, allowCrossIdAiMerge)) {\n        idx = -1;\n      }\n    }\n    // When an AIMessageChunk arrives without an id-match or content-prefix\n    // match, treat the trailing AI message as its accumulator. The\n    // OpenAI Responses API emits per-chunk events whose ids identify the\n    // *event*, not the message, so consecutive chunks land here. Without\n    // this we'd append every chunk as a separate bubble.\n    if (idx < 0) {\n      const inType = normalizeMessageType(rawIn['type'] as string | undefined);\n      if (inType === 'ai') {\n        for (let i = merged.length - 1; i >= 0; i--) {\n          const t = normalizeMessageType(\n            typeof (merged[i] as BaseMessage)._getType === 'function'\n              ? (merged[i] as BaseMessage)._getType()\n              : (merged[i] as unknown as Record<string, unknown>)['type'] as string | undefined,\n          );\n          if (t === 'ai') {\n            if (!canMergeCrossIdAi(merged[i], msg, allowCrossIdAiMerge)) break;\n            idx = i;\n            break;\n          }\n          if (t === 'human' || t === 'tool' || t === 'system') break;\n        }\n      }\n    }\n    if (idx >= 0) {\n      const existing = merged[idx];\n      const existingId = (existing as unknown as Record<string, unknown>)['id'];\n      const incomingRaw = msg as unknown as Record<string, unknown>;\n      const targetId = (existingId ?? incomingRaw['id']) as string | undefined;\n      // Identity backstop: once a message's content is known-final, late\n      // streamed deltas for it are stale stragglers — ignore them outright.\n      if (mode === 'delta' && targetId && canonicalMessageIds?.has(targetId)\n          && !isFinalCanonicalReasoningContent(incomingRaw['content'])) {\n        continue;\n      }\n      // Keep the *existing* id so downstream track-by-id sees stable identity.\n      // For complex-content streaming (OpenAI gpt-5/o-series, Anthropic) the\n      // SDK emits per-chunk *delta* arrays — not accumulated arrays — so a\n      // straight replacement collapses the rendered bubble to just the\n      // latest token. Accumulate text-bearing content across chunks here\n      // and hand a string to consumers; downstream code already handles\n      // string content uniformly.\n      const accumulatedContent = accumulateContent(\n        existing.content as unknown,\n        incomingRaw['content'],\n        mode,\n      );\n      if (targetId && isFinalCanonicalReasoningContent(incomingRaw['content'])) {\n        canonicalMessageIds?.add(targetId);\n      }\n      // Only accumulate reasoning when the incoming message explicitly carries\n      // a `reasoning` field or complex-content array blocks with\n      // type='reasoning'/'thinking'. Never use a plain string content value\n      // as reasoning source — that would wrongly treat every assistant\n      // message text as reasoning content.\n      const incomingReasoningSource = 'reasoning' in incomingRaw\n        ? incomingRaw['reasoning']\n        : (Array.isArray(incomingRaw['content']) ? incomingRaw['content'] : undefined);\n      const accumulatedReasoning = accumulateReasoning(\n        (existing as unknown as Record<string, unknown>)['reasoning'],\n        incomingReasoningSource,\n      );\n      const idForTiming = (existingId as string | undefined) ?? (incomingRaw['id'] as string | undefined);\n      if (idForTiming && reasoningTimingMap) {\n        const hasReasoning = accumulatedReasoning.length > 0;\n        const hasText = (typeof accumulatedContent === 'string' ? accumulatedContent : '').length > 0;\n        if (hasReasoning) {\n          const entry = reasoningTimingMap.get(idForTiming) ?? { startedAt: Date.now() };\n          if (hasText && entry.endedAt === undefined) entry.endedAt = Date.now();\n          reasoningTimingMap.set(idForTiming, entry);\n        }\n      }\n      const next = { ...(msg as object), content: accumulatedContent } as BaseMessage;\n      (next as unknown as Record<string, unknown>)['reasoning'] = accumulatedReasoning;\n      if (existingId) {\n        (next as unknown as Record<string, unknown>)['id'] = existingId;\n      }\n      const changed = mode === 'delta' || messageChangedForDelivery(existing, next);\n      merged[idx] = next;\n      if (targetId && changed) affectedMessageIds?.add(targetId);\n    } else {\n      const incomingRaw = msg as unknown as Record<string, unknown>;\n      const initialReasoningSource = 'reasoning' in incomingRaw\n        ? incomingRaw['reasoning']\n        : (Array.isArray(incomingRaw['content']) ? incomingRaw['content'] : undefined);\n      const initialReasoning = accumulateReasoning(undefined, initialReasoningSource);\n      if (initialReasoning.length > 0 && reasoningTimingMap) {\n        const msgId = incomingRaw['id'] as string | undefined;\n        if (msgId && !reasoningTimingMap.has(msgId)) {\n          reasoningTimingMap.set(msgId, { startedAt: Date.now() });\n        }\n      }\n      const next = { ...(msg as object) } as BaseMessage;\n      (next as unknown as Record<string, unknown>)['reasoning'] = initialReasoning;\n      merged.push(next);\n      const nextId = (next as unknown as Record<string, unknown>)['id'];\n      if (typeof nextId === 'string') affectedMessageIds?.add(nextId);\n    }\n  }\n  return collapseAdjacentAi(merged, affectedMessageIds, allowCrossIdAiMerge);\n}\n\nfunction canMergeCrossIdAi(\n  candidate: BaseMessage,\n  incoming: BaseMessage,\n  allowCrossIdAiMerge: boolean,\n): boolean {\n  const candidateRaw = candidate as unknown as Record<string, unknown>;\n  const incomingRaw = incoming as unknown as Record<string, unknown>;\n  if (candidateRaw['id'] === incomingRaw['id']) return true;\n  return allowCrossIdAiMerge;\n}\n\n/**\n * Merge an incoming chunk's content into prior accumulated content for the\n * same message id. Behavior is governed by `mode`, which reflects the\n * DECLARED kind of the source event rather than a guess from comparing text:\n *\n * - mode 'delta' (messages-tuple / `event.messageMetadata` truthy): the\n *   payload is a genuine per-chunk delta. Append unconditionally — a\n *   prefix-comparison \"dedupe\" here would silently drop legitimate tokens\n *   that coincide with the message-so-far (e.g. every bare \"|\" while\n *   streaming a markdown table). Staleness after the message goes canonical\n *   is instead handled by identity in `mergeMessages` (canonicalMessageIds).\n * - mode 'snapshot' (messages/partial, values-sync): the payload carries the\n *   message-so-far, not a delta, so mutual prefix comparison picks the\n *   longer state and ignores stale shorter snapshots.\n *\n * In both modes, a \"final canonical\" reasoning+text array (see\n * `isFinalCanonicalReasoningContent`) always replaces whatever was\n * accumulated — it's the authoritative final message, not another chunk.\n *\n * We deliberately collapse complex content arrays to a string at this layer.\n * The langgraph-sdk client does not accumulate complex-content arrays the\n * way it accumulates strings, and per-chunk arrays carry only the latest\n * delta. Concatenating extracted text gives consumers the same uniform\n * string they get for non-reasoning models.\n */\n/**\n * Heuristic: does this content look like a \"final canonical\" array\n * carrying both reasoning and visible text blocks? OpenAI's Responses\n * API ships the final assistant message in this shape after the\n * streaming token chunks complete. Detection is narrow (requires BOTH\n * a reasoning-shape block AND a text-shape block in the same array)\n * so it doesn't trip on routine streaming chunks.\n */\nfunction isFinalCanonicalReasoningContent(content: unknown): boolean {\n  if (!Array.isArray(content)) return false;\n  let hasReasoning = false;\n  let hasText = false;\n  for (const block of content) {\n    if (block == null || typeof block !== 'object') continue;\n    const t = (block as Record<string, unknown>)['type'];\n    if (t === 'reasoning' || t === 'thinking') hasReasoning = true;\n    else if (t === 'text' || t === 'output_text') hasText = true;\n  }\n  return hasReasoning && hasText;\n}\n\nfunction accumulateContent(existing: unknown, incoming: unknown, mode: MergeMode = 'snapshot'): string {\n  const existingText = extractText(existing);\n  const incomingText = extractText(incoming);\n\n  // Always return a string. We never want array content escaping the bridge:\n  // (a) downstream consumers expect string content, and (b) findContentMatch\n  // stringifies arrays, which would prevent the canonical-message id-swap\n  // dedupe from matching the streamed-chunk message after a partial chunk.\n  if (existingText.length === 0) return incomingText;\n  if (incomingText.length === 0) return existingText;\n  // Final-canonical detection applies in both modes: the authoritative\n  // \"reasoning + text\" array replaces whatever was accumulated.\n  if (isFinalCanonicalReasoningContent(incoming)) return incomingText;\n  if (mode === 'delta') {\n    // Tuple chunks are declared deltas. Append unconditionally — any\n    // text-comparison \"dedupe\" here can silently drop legitimate tokens\n    // that coincide with the message prefix (e.g. every bare \"|\" in a\n    // markdown table). Staleness is handled by identity in mergeMessages.\n    return existingText + incomingText;\n  }\n  // Snapshot mode (messages/partial, values-sync): payloads carry the\n  // message-so-far, so mutual prefix comparison picks the longer state and\n  // ignores stale shorter snapshots.\n  if (incomingText.startsWith(existingText)) return incomingText;\n  if (existingText.startsWith(incomingText)) return existingText;\n  return existingText + incomingText;\n}\n\nfunction extractText(content: unknown): string {\n  if (typeof content === 'string') return content;\n  if (!Array.isArray(content)) return '';\n  let out = '';\n  for (const block of content) {\n    if (typeof block === 'string') { out += block; continue; }\n    if (block == null || typeof block !== 'object') continue;\n    const rec = block as Record<string, unknown>;\n    const t = rec['type'];\n    if (t === 'text' || t === 'output_text' || t === undefined) {\n      const text = rec['text'];\n      if (typeof text === 'string') out += text;\n    }\n  }\n  return out;\n}\n\nfunction extractReasoning(content: unknown): string {\n  if (typeof content === 'string') return '';\n  if (!Array.isArray(content)) return '';\n  let out = '';\n  for (const block of content) {\n    if (block == null || typeof block !== 'object') continue;\n    const rec = block as Record<string, unknown>;\n    const t = rec['type'];\n    if (t === 'reasoning' || t === 'thinking') {\n      // Direct text field — Anthropic-style \"thinking\" blocks and\n      // some LangChain-shaped reasoning blocks land here.\n      const text = rec['text'];\n      if (typeof text === 'string') out += text;\n      // OpenAI Responses API: when `reasoning.summary='auto'` was\n      // requested, reasoning blocks carry a `summary` array of\n      // `{type: 'summary_text', text: '...'}` items. Concatenate\n      // their texts in order.\n      const summary = rec['summary'];\n      if (Array.isArray(summary)) {\n        for (const item of summary) {\n          if (item == null || typeof item !== 'object') continue;\n          const itemText = (item as Record<string, unknown>)['text'];\n          if (typeof itemText === 'string') out += itemText;\n        }\n      }\n    }\n  }\n  return out;\n}\n\nfunction accumulateReasoning(existing: unknown, incoming: unknown): string {\n  const existingText = typeof existing === 'string' ? existing : extractReasoning(existing);\n  const incomingText = typeof incoming === 'string' ? incoming : extractReasoning(incoming);\n  if (existingText.length === 0) return incomingText;\n  if (incomingText.length === 0) return existingText;\n  if (incomingText.startsWith(existingText)) return incomingText;\n  if (existingText.startsWith(incomingText)) return existingText;\n  return existingText + incomingText;\n}\n\n/**\n * Replace the incoming messages' ids with the existing array's ids whenever\n * (role, content) matches positionally and the existing id differs. Keeps\n * track-by-id stable across server echoes and final-id swaps.\n */\nfunction preserveIds(\n  existing: BaseMessage[],\n  incoming: BaseMessage[],\n  affectedMessageIds?: Set<string>,\n): BaseMessage[] {\n  if (existing.length === 0) {\n    for (const message of incoming) {\n      const id = (message as unknown as Record<string, unknown>)['id'];\n      if (typeof id === 'string') affectedMessageIds?.add(id);\n    }\n    return collapseAdjacentAi(incoming, affectedMessageIds);\n  }\n  const usedExisting = new Set<number>();\n  const remapped = incoming.map((msg, i) => {\n    const inRaw = msg as unknown as Record<string, unknown>;\n    const inId = inRaw['id'];\n    // First try same-position match (the dominant case).\n    let matchIdx = -1;\n    if (i < existing.length && !usedExisting.has(i) && sameRoleAndContent(existing[i], msg)) {\n      matchIdx = i;\n    } else {\n      // Fallback: any unused existing message with matching role+content.\n      matchIdx = existing.findIndex((m, j) => !usedExisting.has(j) && sameRoleAndContent(m, msg));\n    }\n    if (matchIdx < 0) {\n      if (typeof inId === 'string') affectedMessageIds?.add(inId);\n      return msg;\n    }\n    usedExisting.add(matchIdx);\n    const existingId = (existing[matchIdx] as unknown as Record<string, unknown>)['id'];\n    const remappedMessage = !existingId || existingId === inId\n      ? msg\n      : { ...(msg as object), id: existingId } as BaseMessage;\n    if (typeof existingId === 'string' && messageChangedForDelivery(existing[matchIdx], remappedMessage)) {\n      affectedMessageIds?.add(existingId);\n    }\n    return remappedMessage;\n  });\n  return collapseAdjacentAi(remapped, affectedMessageIds);\n}\n\nfunction messageChangedForDelivery(existing: BaseMessage, incoming: BaseMessage): boolean {\n  const existingRaw = existing as unknown as Record<string, unknown>;\n  const incomingRaw = incoming as unknown as Record<string, unknown>;\n  const existingType = normalizeMessageType(\n    typeof existing._getType === 'function' ? existing._getType() : existingRaw['type'] as string | undefined,\n  );\n  const incomingType = normalizeMessageType(\n    typeof incoming._getType === 'function' ? incoming._getType() : incomingRaw['type'] as string | undefined,\n  );\n  if (existingType !== incomingType || extractText(existing.content) !== extractText(incoming.content)) {\n    return true;\n  }\n  const existingReasoning = typeof existingRaw['reasoning'] === 'string'\n    ? existingRaw['reasoning']\n    : extractReasoning(existingRaw['reasoning']);\n  const incomingReasoning = typeof incomingRaw['reasoning'] === 'string'\n    ? incomingRaw['reasoning']\n    : extractReasoning(incomingRaw['reasoning']);\n  if (existingReasoning !== incomingReasoning) return true;\n  return JSON.stringify(existingRaw['tool_calls'] ?? null) !== JSON.stringify(incomingRaw['tool_calls'] ?? null);\n}\n\nfunction sameRoleAndContent(a: BaseMessage, b: BaseMessage): boolean {\n  const aType = normalizeMessageType(\n    typeof a._getType === 'function' ? a._getType() : (a as unknown as Record<string, unknown>)['type'] as string | undefined,\n  );\n  const bType = normalizeMessageType(\n    typeof b._getType === 'function' ? b._getType() : (b as unknown as Record<string, unknown>)['type'] as string | undefined,\n  );\n  if (aType !== bType) return false;\n  const aContent = typeof a.content === 'string' ? a.content : JSON.stringify(a.content);\n  const bContent = typeof b.content === 'string' ? b.content : JSON.stringify(b.content);\n  if (aContent === bContent) return true;\n  // For AI messages we accept prefix relationships (streaming → final).\n  if (aType === 'ai' && typeof aContent === 'string' && typeof bContent === 'string') {\n    return aContent.length > 0 && (bContent.startsWith(aContent) || aContent.startsWith(bContent));\n  }\n  return false;\n}\n\nfunction findContentMatch(merged: BaseMessage[], incoming: BaseMessage): number {\n  const inRaw = incoming as unknown as Record<string, unknown>;\n  const inType = normalizeMessageType(\n    typeof incoming._getType === 'function' ? incoming._getType() : (inRaw['type'] as string | undefined),\n  );\n  const inContent = typeof incoming.content === 'string' ? incoming.content : JSON.stringify(incoming.content);\n  // Only worth matching for human messages (where the optimistic→echo\n  // mismatch happens) and for AI messages where content is a strict prefix\n  // of the existing (token-streaming + final-id swap pattern).\n  for (let i = merged.length - 1; i >= 0; i--) {\n    const m = merged[i] as unknown as Record<string, unknown>;\n    const mType = normalizeMessageType(\n      typeof (merged[i] as BaseMessage)._getType === 'function'\n        ? (merged[i] as BaseMessage)._getType()\n        : (m['type'] as string | undefined),\n    );\n    if (mType !== inType) continue;\n    const mContent = typeof (merged[i] as BaseMessage).content === 'string'\n      ? (merged[i] as BaseMessage).content as string\n      : JSON.stringify((merged[i] as BaseMessage).content);\n    if (inType === 'human' && mContent === inContent) return i;\n    if (inType === 'ai') {\n      // Skip empty placeholders. We don't want a pre-existing empty AI\n      // (created by an early values-sync emission with `state.messages`\n      // including an unfilled assistant turn) to absorb the first chunk\n      // arriving via messages-tuple — that strands subsequent chunks in a\n      // separate slot whose content no longer prefix-matches the canonical.\n      const aSafe = typeof mContent === 'string' ? mContent : '';\n      const bSafe = typeof inContent === 'string' ? inContent : '';\n      if (aSafe.length === 0 || bSafe.length === 0) continue;\n      if (mContent === inContent || aSafe.startsWith(bSafe) || bSafe.startsWith(aSafe)) return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Normalize message type so AIMessage and AIMessageChunk compare equal.\n * The LangGraph SDK emits type='AIMessageChunk' on the messages-tuple\n * streaming path and type='ai' on the values-sync path for the same\n * canonical assistant message — distinguishing them prevents the\n * content-prefix dedupe from collapsing the duplicate bubbles.\n */\nfunction normalizeMessageType(t: string | undefined): string | undefined {\n  if (!t) return t;\n  if (t === 'AIMessageChunk' || t === 'AIMessage' || t === 'assistant') return 'ai';\n  if (t === 'HumanMessage' || t === 'HumanMessageChunk' || t === 'user') return 'human';\n  if (t === 'ToolMessage') return 'tool';\n  if (t === 'SystemMessage') return 'system';\n  return t;\n}\n\nfunction getTailAssistantMessageId(messages: BaseMessage[]): string | undefined {\n  const tail = messages[messages.length - 1];\n  if (!tail) return undefined;\n  const raw = tail as unknown as Record<string, unknown>;\n  const type = normalizeMessageType(\n    typeof tail._getType === 'function' ? tail._getType() : raw['type'] as string | undefined,\n  );\n  return type === 'ai' && typeof raw['id'] === 'string' ? raw['id'] : undefined;\n}\n\nfunction toSubagentRefs(\n  subagents: Map<string, TrackedSubagent>,\n): Map<string, SubagentStreamRef> {\n  const refs = new Map<string, SubagentStreamRef>();\n  subagents.forEach((subagent, key) => {\n    refs.set(key, {\n      toolCallId: subagent.id,\n      // Tool children are named by their `subagent_type` arg; subgraph\n      // children by their node name (stored as the synthetic toolCall name).\n      name: typeof subagent.toolCall.args['subagent_type'] === 'string'\n        ? subagent.toolCall.args['subagent_type']\n        : subagent.kind === 'subgraph'\n          ? subagent.toolCall.name\n          : undefined,\n      status: signal(subagent.status),\n      values: signal(subagent.values),\n      messages: signal(subagent.messages as unknown as BaseMessage[]),\n    });\n  });\n  return refs;\n}\n\nfunction isAiMessageWithToolCalls(value: Record<string, unknown>): boolean {\n  return (value['type'] === 'ai' || value['type'] === 'assistant')\n    && Array.isArray(value['tool_calls']);\n}\n\nfunction isToolMessage(value: Record<string, unknown>): value is Record<string, unknown> & { tool_call_id: string } {\n  return value['type'] === 'tool' && typeof value['tool_call_id'] === 'string';\n}\n\nfunction isMessageLike(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object'\n    && value !== null\n    && (\n      'content' in value\n      || 'type' in value\n      || 'id' in value\n    );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport const _internalsForTesting = {\n  extractText,\n  extractReasoning,\n  accumulateContent,\n  accumulateReasoning,\n  collapseAdjacentAi,\n  mergeMessages,\n  preserveIds,\n  normalizeMessageType,\n  isFinalCanonicalReasoningContent,\n};\n","import { InjectionToken } from '@angular/core';\nimport type { LangGraphClientOptions } from '../agent.types';\n\n/**\n * App-wide LangGraph SDK client tuning (e.g. `maxRetries`). Provide once at the\n * app root; both the agent's default {@link FetchStreamTransport} and the\n * {@link LangGraphThreadsAdapter} read it so the retry budget is configured in\n * one place. A call-site `agent({ clientOptions })` or per-agent\n * `provideAgent({ clientOptions })` overrides it for that agent.\n * Absent → the SDK default.\n */\nexport const LANGGRAPH_CLIENT_OPTIONS = new InjectionToken<LangGraphClientOptions>(\n  'LANGGRAPH_CLIENT_OPTIONS',\n);\n\n/**\n * First-defined-wins resolution across precedence layers (highest first).\n * Whole-object semantics — no per-field merge — so the winning layer is the\n * single source for every option. Returns undefined when all layers are absent.\n */\nexport function resolveClientOptions(\n  ...layers: Array<LangGraphClientOptions | undefined | null>\n): LangGraphClientOptions | undefined {\n  for (const layer of layers) {\n    if (layer) return layer;\n  }\n  return undefined;\n}\n","import type { ThreadState } from '@langchain/langgraph-sdk';\nimport type { AgentBranchTree, AgentBranchTreeFork } from '../agent.types';\n\nconst ROOT_ID = '$';\n\n/**\n * Builds a branch-aware checkpoint tree from LangGraph thread history.\n *\n * This mirrors the small SDK UI branching data shape without importing the\n * SDK UI runtime helper, keeping Angular bundles independent of React UI code.\n */\nexport function buildBranchTree<T>(history: ThreadState<T>[] = []): AgentBranchTree<T> {\n  if (history.length <= 1) {\n    return {\n      type: 'sequence',\n      items: history.map(value => ({ type: 'node', value, path: [] })),\n    };\n  }\n\n  const nodeIds = new Set<string>();\n  const childrenMap: Record<string, ThreadState<T>[]> = {};\n\n  for (const state of history) {\n    const parentId = state.parent_checkpoint?.checkpoint_id ?? ROOT_ID;\n    childrenMap[parentId] ??= [];\n    childrenMap[parentId].push(state);\n\n    const checkpointId = state.checkpoint?.checkpoint_id;\n    if (checkpointId != null) {\n      nodeIds.add(checkpointId);\n    }\n  }\n\n  const orphanRoot = findLatestOrphanRoot(childrenMap, nodeIds);\n  if (orphanRoot != null) {\n    childrenMap[ROOT_ID] = childrenMap[orphanRoot];\n  }\n\n  const rootSequence: AgentBranchTree<T> = { type: 'sequence', items: [] };\n  const queue: Array<{ id: string; sequence: AgentBranchTree<T>; path: string[] }> = [\n    { id: ROOT_ID, sequence: rootSequence, path: [] },\n  ];\n  const visited = new Set<string>();\n\n  while (queue.length > 0) {\n    const task = queue.shift();\n    if (!task || visited.has(task.id)) continue;\n    visited.add(task.id);\n\n    const children = childrenMap[task.id];\n    if (!children?.length) continue;\n\n    let fork: AgentBranchTreeFork<T> | undefined;\n    if (children.length > 1) {\n      fork = { type: 'fork', items: [] };\n      task.sequence.items.push(fork);\n    }\n\n    for (const value of children) {\n      const id = value.checkpoint?.checkpoint_id;\n      if (id == null) continue;\n\n      let sequence = task.sequence;\n      let path = task.path;\n      if (fork != null) {\n        sequence = { type: 'sequence', items: [] };\n        fork.items.unshift(sequence);\n        path = [...task.path, id];\n      }\n\n      sequence.items.push({ type: 'node', value, path });\n      queue.push({ id, sequence, path });\n    }\n  }\n\n  return rootSequence;\n}\n\nfunction findLatestOrphanRoot<T>(\n  childrenMap: Record<string, ThreadState<T>[]>,\n  nodeIds: Set<string>,\n): string | undefined {\n  if (childrenMap[ROOT_ID] != null) return undefined;\n\n  return Object.keys(childrenMap)\n    .filter(parentId => !nodeIds.has(parentId))\n    .map(parentId => ({\n      parentId,\n      lastId: findLatestDescendantId(parentId, childrenMap),\n    }))\n    .sort((left, right) => left.lastId.localeCompare(right.lastId))\n    .at(-1)?.parentId;\n}\n\nfunction findLatestDescendantId<T>(\n  parentId: string,\n  childrenMap: Record<string, ThreadState<T>[]>,\n): string {\n  const queue = [parentId];\n  const seen = new Set<string>();\n  let latestId = parentId;\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current || seen.has(current)) continue;\n    seen.add(current);\n\n    for (const child of childrenMap[current] ?? []) {\n      const childId = child.checkpoint?.checkpoint_id;\n      if (childId == null) continue;\n      if (childId.localeCompare(latestId) > 0) {\n        latestId = childId;\n      }\n      queue.push(childId);\n    }\n  }\n\n  return latestId;\n}\n","// libs/langgraph/src/lib/internals/extract-citations.ts\nimport type { Citation } from '@threadplane/chat';\n\ninterface KwargsLike {\n  additional_kwargs?: Record<string, unknown> | undefined;\n}\n\n/**\n * Normalize {@link Citation}s out of a message's `additional_kwargs` (reading\n * `citations` or `sources`). Exposed for advanced consumers building custom\n * adapters or bridging non-LangGraph message shapes into the neutral\n * `Citation[]` form.\n *\n * @param msg Any object with an `additional_kwargs` bag (e.g. a LangChain message).\n * @returns The normalized citations, or `undefined` when none are present.\n * @example\n * ```ts\n * const citations = extractCitations(lcMessage);\n * ```\n */\nexport function extractCitations(msg: KwargsLike): Citation[] | undefined {\n  const raw = msg.additional_kwargs?.['citations'] ?? msg.additional_kwargs?.['sources'];\n  if (!Array.isArray(raw) || raw.length === 0) return undefined;\n  return raw.map((entry, i) => normalizeCitation(entry, i + 1));\n}\n\nfunction normalizeCitation(entry: unknown, fallbackIndex: number): Citation {\n  if (typeof entry === 'string') {\n    return { id: `c${fallbackIndex}`, index: fallbackIndex, url: entry };\n  }\n  const e = (entry ?? {}) as Record<string, unknown>;\n  const str = (key: string): string | undefined =>\n    typeof e[key] === 'string' ? (e[key] as string) : undefined;\n  const firstStr = (...keys: string[]): string | undefined => {\n    for (const k of keys) {\n      const v = str(k);\n      if (v !== undefined) return v;\n    }\n    return undefined;\n  };\n  const publishedAt = e['publishedAt'];\n  const normalizedPublishedAt =\n    typeof publishedAt === 'string' || typeof publishedAt === 'number' || publishedAt instanceof Date\n      ? publishedAt\n      : undefined;\n  return {\n    id: str('id') ?? str('refId') ?? `c${fallbackIndex}`,\n    index: typeof e['index'] === 'number' ? (e['index'] as number) : fallbackIndex,\n    title: firstStr('title', 'name'),\n    url: firstStr('url', 'href', 'source'),\n    snippet: firstStr('snippet', 'content', 'excerpt'),\n    sourceType: str('sourceType'),\n    iconUrl: str('iconUrl'),\n    publishedAt: normalizedPublishedAt,\n    extra:\n      typeof e['extra'] === 'object' && e['extra'] !== null\n        ? (e['extra'] as Record<string, unknown>)\n        : undefined,\n  };\n}\n","import { computed, signal } from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport {\n  selectPendingClientToolCalls,\n  type CompleteOutcome,\n  type ClientToolsCapability,\n  type ClientToolResult,\n  type ClientToolSpec,\n} from '@threadplane/chat';\nimport type { ToolCall } from '@threadplane/chat';\nimport type { LangGraphSubmitOptions } from './agent.types';\n\n/**\n * A patch written onto a local ToolCall when a client tool resolves.\n * Mirrors the fields the AG-UI adapter writes directly onto its WritableSignal.\n */\nexport interface ClientToolResultPatch {\n  result: unknown;\n  error?: unknown;\n  status?: ToolCall['status'];\n}\n\n/**\n * Minimal store surface consumed by createClientToolsCapability.\n * Typed narrowly so the factory is easy to fake in tests.\n */\nexport interface ClientToolsStore {\n  toolCalls: Signal<readonly ToolCall[]>;\n  isLoading: Signal<boolean>;\n  /**\n   * Write a client-tool outcome onto the local ToolCall with the given id.\n   * The LangGraph `toolCalls` signal is a read-only projection of the SDK's\n   * stream, so the adapter layers these patches over the projection rather\n   * than mutating it in place. This freezes the transcript card: toToolViewSpec\n   * spreads the result into the mounted ask component's props on the next\n   * render, letting it branch to a resolved/frozen state.\n   */\n  applyClientResult(id: string, patch: ClientToolResultPatch): void;\n}\n\n/**\n * The run-issuing function used by createClientToolsCapability.\n * Accepts a payload (input) and optional LangGraph submit options.\n * Corresponds to StreamManagerBridge.submit.\n */\nexport type SubmitFn = (\n  payload: unknown,\n  opts?: LangGraphSubmitOptions,\n  batch?: StagedToolMessageBatch,\n) => Promise<CompleteOutcome>;\n\n/** Serialize a tool result value to a string for the ToolMessage content. */\nfunction safeStringify(v: unknown): string {\n  return typeof v === 'string' ? v : JSON.stringify(v);\n}\n\n/**\n * Merge client_tools into a run payload.\n *\n * If payload is null we keep it null — a null payload signals a no-input\n * resume (used by regenerate and command resumes) and the server must\n * receive null, not an object. The catalog can only be injected when the\n * payload is a plain object that the graph's add_messages reducer can\n * process; it cannot be injected into a command-resume (null payload) or\n * into an already-typed non-record payload.\n *\n * Returns a new object; never mutates the original.\n */\nexport function mergeClientTools(\n  payload: unknown,\n  catalog: readonly ClientToolSpec[],\n): unknown {\n  if (catalog.length === 0) return payload;\n  if (payload === null || payload === undefined) return payload;\n  if (typeof payload !== 'object' || Array.isArray(payload)) return payload;\n  return { ...(payload as Record<string, unknown>), client_tools: catalog };\n}\n\n/**\n * Merge A2UI client capabilities into a run payload under the\n * `a2ui_client_capabilities` state key. Same payload semantics as\n * {@link mergeClientTools}: null/undefined payloads (command resumes,\n * regenerates) and non-record payloads pass through untouched, and the\n * original object is never mutated. Because LangGraph thread state\n * persists across runs, the capabilities stamped by any run remain\n * readable by later runs on the same thread.\n */\nexport function mergeA2uiClientCapabilities(\n  payload: unknown,\n  capabilities: { supportedCatalogIds: string[]; inlineCatalogs?: unknown[] } | undefined,\n): unknown {\n  if (!capabilities) return payload;\n  if (payload === null || payload === undefined) return payload;\n  if (typeof payload !== 'object' || Array.isArray(payload)) return payload;\n  return { ...(payload as Record<string, unknown>), a2ui_client_capabilities: capabilities };\n}\n\n/**\n * Wire shape for a settled client-tool result awaiting durability. `id` is\n * deterministic for the tool-call ID so overlapping handoffs and retries\n * update the same logical ToolMessage.\n */\nexport interface BufferedToolMessage {\n  readonly id: string;\n  readonly type: 'tool';\n  readonly role: 'tool';\n  readonly tool_call_id: string;\n  readonly content: string;\n}\n\n/**\n * Non-destructive snapshot of staged messages. Callers acknowledge only after\n * the exact handoff succeeds; acknowledgment removes only captured entries and\n * becomes a no-op after a thread-reset generation change.\n */\nexport interface StagedToolMessageBatch {\n  readonly generation: number;\n  readonly messages: readonly BufferedToolMessage[];\n  acknowledge(): void;\n}\n\nexport interface LangGraphClientToolsCapability extends ClientToolsCapability {\n  readonly catalog: Signal<readonly ClientToolSpec[]>;\n  snapshotToolMessages(): StagedToolMessageBatch;\n  clearStagedToolMessages(): void;\n}\n\n/** Writes settled tool messages into server thread state without starting a run. */\nexport type PersistToolMessagesFn = (\n  messages: readonly BufferedToolMessage[],\n) => Promise<void>;\n\n/** Reads the thread a write would currently land on. */\nexport type CurrentThreadIdFn = () => string | null;\n\n/**\n * A buffered tool message plus the thread it was settled on. The stamp is\n * internal bookkeeping and never reaches the wire — only `message` is sent.\n */\ninterface StagedToolMessage {\n  readonly threadId: string | null;\n  readonly message: BufferedToolMessage;\n}\n\n/**\n * Prepend staged tool messages to a run payload's message list.\n *\n * Mirrors mergeClientTools: a null payload signals a no-input resume and must\n * stay null, so staged messages cannot ride along and are left buffered.\n */\nexport function mergeStagedToolMessages(\n  payload: unknown,\n  staged: readonly BufferedToolMessage[],\n): unknown {\n  if (staged.length === 0) return payload;\n  if (payload === null || payload === undefined) return payload;\n  if (typeof payload !== 'object' || Array.isArray(payload)) return payload;\n  const record = payload as Record<string, unknown>;\n  const existing = Array.isArray(record['messages']) ? record['messages'] : [];\n  return { ...record, messages: [...staged, ...existing] };\n}\n\n/**\n * Creates a ClientToolsCapability backed by a LangGraph submit function and\n * a store of tool-call signals. Extracted into a factory so it can be\n * unit-tested in isolation without standing up a full Angular DI environment.\n *\n * The capability:\n *  - Maintains a catalog of client tool specs (setCatalog). The caller\n *    is responsible for threading the catalog into every run payload via\n *    mergeClientTools() before calling manager.submit — see agent.fn.ts.\n *  - Exposes a `pending` computed signal: tool calls whose name is in the\n *    catalog, have no backend result, and haven't been resolved client-side\n *    yet — but ONLY when the run is not in progress (isLoading===false).\n *    The backend ends the run without emitting a ToolMessage result for\n *    client tools, so `result` stays undefined on those entries.\n *  - settle(id, result): marks the call as resolved, writes the local result,\n *    and stages a ToolMessage with a deterministic ID without issuing a run.\n *  - flush(): snapshots the whole staged group into ONE persistFn call without\n *    starting a run — the settlement path for tool groups that never continue.\n *    Successful persistence acknowledges the captured entries; failed writes\n *    retain them. When persistFn is absent, a non-empty flush rejects without\n *    changing the staged results. Flushes are chained so entries settled after\n *    one snapshot receive their own write. Concurrent persistence,\n *    continuation, and ordinary submits may safely carry the same stable IDs.\n *  - clearStagedToolMessages(): discards staged results on a thread switch and\n *    advances the generation so late acknowledgments cannot affect new state.\n *  - resolve(id, result): settles the result, then issues a NEW run on the SAME\n *    thread by calling submitFn with a non-destructive ToolMessage snapshot:\n *      input: {\n *        messages: [{ type: 'tool', role: 'tool', tool_call_id: id, content }],\n *        client_tools: catalog(),\n *      }\n *    The snapshot remains staged unless that continuation reports success.\n *    LangGraph's `add_messages` reducer reuses each stable message ID on safe\n *    overlap or replay. Including `client_tools` ensures the model sees the\n *    full tool catalog on the continuation run.\n *\n * Catalog shipping: the catalog is NOT injected by this factory's\n * submitFn call in resolve() — the resolved-tool run builds the payload\n * directly. For normal submit/regenerate runs, the agent.fn.ts wrapper\n * uses mergeClientTools() to inject `client_tools` into the payload\n * before forwarding to manager.submit. This keeps injection concerns\n * co-located with the run-issuing call sites.\n */\nexport function createClientToolsCapability(\n  submitFn: SubmitFn,\n  store: ClientToolsStore,\n  persistFn?: PersistToolMessagesFn,\n  currentThreadIdFn?: CurrentThreadIdFn,\n): LangGraphClientToolsCapability {\n  const catalog = signal<readonly ClientToolSpec[]>([]);\n  const resolvedIds = signal<ReadonlySet<string>>(new Set());\n  const toolMessageBuffer: StagedToolMessage[] = [];\n  let flushInFlight: Promise<void> | undefined;\n  // Bumped whenever a thread reset discards staged state. Every snapshot keeps\n  // its generation, making acknowledgments from the prior thread no-ops.\n  let bufferGeneration = 0;\n  // Tool calls belonging to threads we have left. A handler still running when\n  // the user switches threads settles AFTER the switch, by which point both the\n  // store and the current thread id already describe the NEW thread — the id is\n  // the only durable way left to recognise the result as stale.\n  const retiredToolCallIds = new Set<string>();\n\n  const pending = computed<readonly ToolCall[]>(() => {\n    // Client tools are only actionable after the run ends (the backend\n    // signals this by ending the run WITHOUT emitting a ToolMessage result\n    // for client tools).\n    return selectPendingClientToolCalls({\n      isLoading: store.isLoading(),\n      toolCalls: store.toolCalls(),\n      catalogNames: new Set(catalog().map((s) => s.name)),\n      resolvedIds: resolvedIds(),\n    });\n  });\n\n  function settleResult(id: string, result: ClientToolResult): void {\n    // Mark as resolved first so pending() drops it immediately.\n    resolvedIds.update((s) => new Set(s).add(id));\n\n    // Cast rather than rely on discriminant narrowing: consumer apps that\n    // compile this source with `strictNullChecks: false` don't narrow the\n    // ClientToolResult union in a ternary.\n    const ok = result.ok;\n    const value = (result as { value: unknown }).value;\n    const error = (result as { error: string }).error;\n\n    // Write the outcome onto the LOCAL ToolCall (via the adapter's override\n    // layer). The client tool DID produce a result client-side, so this is\n    // semantically correct — and it freezes the transcript card: the mounted\n    // ask component re-renders with its own emitted value as props and can\n    // branch to a resolved/frozen state. Without this, the LOCAL tool call\n    // never gets a result (only the backend ToolMessage does) so the card\n    // stays interactive forever.\n    store.applyClientResult(id, {\n      result: ok ? value : { error },\n      ...(ok ? {} : { error, status: 'error' as const }),\n    });\n\n    const content = ok\n      ? safeStringify(value)\n      : `Error: ${error}`;\n\n    // The tool call belongs to a thread the user has already left, so there is\n    // nowhere valid to send this result: the current thread has no matching\n    // tool call, and the old thread is no longer the write target.\n    if (retiredToolCallIds.has(id)) {\n      console.warn(\n        `Discarding client tool result for ${id}: its thread is no longer active.`,\n      );\n      return;\n    }\n\n    // Message shape: both `type` and `role` are set for compatibility —\n    // the LangGraph server's add_messages coercion reads `role` (Python\n    // side), while the bridge's local optimistic-message path reads `type`\n    // (via toMessage's normalizeMessageType). This mirrors the human-message\n    // shape used in buildSubmitUpdate (agent.fn.ts line 732).\n    toolMessageBuffer.push({\n      threadId: currentThreadIdFn?.() ?? null,\n      message: {\n        id: `client-tool-result-${id}`,\n        type: 'tool',\n        role: 'tool',\n        tool_call_id: id,\n        content,\n      },\n    });\n  }\n\n  /**\n   * Returns a non-destructive snapshot of entries still valid for the thread a\n   * write would land on right now. Captured entries remain staged, so\n   * overlapping operations may carry the same deterministic message IDs.\n   * Acknowledgment removes only the exact captured entries while the snapshot\n   * generation is current. An entry stamped for another thread is dropped\n   * rather than misdelivered.\n   *\n   * A null on either side means \"thread not tracked yet\" (no threadId option\n   * and no run has reported one); those are kept, since there is no evidence of\n   * a switch and dropping them would lose results on untracked transports.\n   */\n  function snapshotToolMessages(): StagedToolMessageBatch {\n    const current = currentThreadIdFn?.() ?? null;\n    for (let index = toolMessageBuffer.length - 1; index >= 0; index -= 1) {\n      const entry = toolMessageBuffer[index];\n      const stale =\n        entry.threadId !== null && current !== null && entry.threadId !== current;\n      if (stale) {\n        console.warn(\n          `Discarding a client tool result staged for thread ${entry.threadId}; ` +\n            `the active thread is now ${current}.`,\n        );\n        toolMessageBuffer.splice(index, 1);\n      }\n    }\n\n    const generation = bufferGeneration;\n    const entries = [...toolMessageBuffer];\n    const messages = entries.map(({ message }) => ({ ...message }));\n    let acknowledged = false;\n\n    return {\n      generation,\n      messages,\n      acknowledge(): void {\n        if (acknowledged || generation !== bufferGeneration) return;\n        acknowledged = true;\n        for (const entry of entries) {\n          const index = toolMessageBuffer.indexOf(entry);\n          if (index !== -1) toolMessageBuffer.splice(index, 1);\n        }\n      },\n    };\n  }\n\n  /**\n   * Persist one snapshot. Only that snapshot is acknowledged after persistence\n   * succeeds; failure leaves its exact entries staged for retry or submit.\n   */\n  function runFlush(): Promise<void> {\n    const batch = snapshotToolMessages();\n    if (batch.messages.length === 0) return Promise.resolve();\n    if (!persistFn) {\n      return Promise.reject(\n        new Error(\n          'Cannot flush staged client tool results. ' +\n            'Custom LangGraph transports using terminal client tools must implement updateState().',\n        ),\n      );\n    }\n    return persistFn(batch.messages)\n      .then(() => {\n        batch.acknowledge();\n      })\n      .catch((err: unknown) => {\n        console.warn(\n          `Client tool flush failed; ${batch.messages.length} result(s) remain staged for the next run.`,\n          err,\n        );\n      });\n  }\n\n  const capability: LangGraphClientToolsCapability = {\n    catalog,\n\n    setCatalog(specs: readonly ClientToolSpec[]): void {\n      catalog.set([...specs]);\n    },\n\n    pending,\n\n    settle(id: string, result: ClientToolResult): void {\n      settleResult(id, result);\n    },\n\n    snapshotToolMessages(): StagedToolMessageBatch {\n      return snapshotToolMessages();\n    },\n\n    /**\n     * Discard everything staged. Called when the active thread changes: a\n     * ToolMessage only makes sense against the thread whose AIMessage produced\n     * its tool_call_id, so carrying it over would poison the new thread.\n     */\n    clearStagedToolMessages(): void {\n      // Retire the outgoing thread's tool calls so a handler that settles after\n      // the switch is recognised as stale. Read the store BEFORE it resets —\n      // agent.fn.ts calls this ahead of manager.switchThread for that reason.\n      for (const toolCall of store.toolCalls()) retiredToolCallIds.add(toolCall.id);\n      toolMessageBuffer.length = 0;\n      // Invalidate every outstanding snapshot acknowledgment from the old thread.\n      bufferGeneration += 1;\n    },\n\n    flush(): Promise<void> {\n      // Only this method owns the queue tail. Results settled after an active\n      // snapshot need their own write, and every caller must remain behind all\n      // callers already queued. The chain terminates when a fresh snapshot is\n      // empty.\n      const queued = flushInFlight\n        ? flushInFlight.then(() => runFlush(), () => runFlush())\n        : runFlush();\n      flushInFlight = queued;\n\n      const clearTail = (): void => {\n        if (flushInFlight === queued) flushInFlight = undefined;\n      };\n      // Both handlers return normally, so this bookkeeping branch cannot\n      // create an unhandled rejection when the caller observes `queued`.\n      void queued.then(clearTail, clearTail);\n      return queued;\n    },\n\n    resolve(id: string, result: ClientToolResult): void {\n      settleResult(id, result);\n      // Issue a new run with a non-destructive snapshot. The exact batch is\n      // acknowledged only when that continuation succeeds; failures retain it\n      // for retry. Stable IDs make overlap with flush or submit safe under\n      // LangGraph's add_messages reducer. `client_tools` keeps the full catalog\n      // visible to the continuation.\n      const batch = snapshotToolMessages();\n      const toolPayload = {\n        messages: batch.messages,\n        client_tools: catalog(),\n      };\n\n      void submitFn(toolPayload, undefined, batch).then((outcome) => {\n        if (outcome === 'success') batch.acknowledge();\n      });\n    },\n  };\n\n  return capability;\n}\n","import {\n  inject, DestroyRef, computed, effect,\n  isSignal, signal, Signal,\n} from '@angular/core';\nimport { AGENT_CONFIG } from './agent.provider';\nimport type { AgentLifecycle } from './lifecycle';\nimport { AgentLifecycleRegistry } from './agent-lifecycle-registry';\nimport { toSignal, toObservable } from '@angular/core/rxjs-interop';\nimport {\n  BehaviorSubject, Subject, of,\n  throttleTime, asyncScheduler,\n} from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport type { Observable } from 'rxjs';\nimport type { BaseMessage, AIMessage as CoreAIMessage } from '@langchain/core/messages';\n\n/**\n * Wire-shape of a `RemoveMessage` instruction. LangGraph's `add_messages`\n * reducer (Python side) coerces incoming dicts via a strict check that\n * expects `role` + `content` keys; without them, the dict-to-Message\n * conversion throws and the whole `updateState` request 400s. Construct\n * the shape directly with the required keys so we get correct semantics\n * without importing the `RemoveMessage` class from `@langchain/core/messages`\n * (the class import pulls in the full BaseMessage hierarchy, ~30-50 kB,\n * which Cockpit's example-app bundle budget rejects).\n */\ntype RemoveMessageInstruction = {\n  type: 'remove';\n  role: 'remove';\n  id: string;\n  content: '';\n};\nimport type { Command, Interrupt, ToolCallWithResult } from '@langchain/langgraph-sdk';\nimport type { BagTemplate, InferBag } from '@langchain/langgraph-sdk';\nimport type {\n  AgentEvent,\n  AgentCheckpoint,\n  AgentError,\n  AgentInterrupt,\n  AgentStatus,\n  Message,\n  Role,\n  Subagent,\n  ToolCall,\n  ToolCallStatus,\n  ContentBlock,\n  AgentSubmitInput,\n  AgentSubmitOptions,\n  MessageDelivery,\n} from '@threadplane/chat';\nimport { staticDelivery } from '@threadplane/chat';\n\nimport {\n  AgentOptions,\n  LangGraphAgent,\n  CustomStreamEvent,\n  StreamSubjects,\n  SubagentStreamRef,\n  ResourceStatus,\n  AgentQueue,\n  LangGraphSubmitOptions,\n} from './agent.types';\nimport type { ThreadState, ToolProgress } from '@langchain/langgraph-sdk';\nimport type { MessageMetadata } from '@langchain/langgraph-sdk/ui';\nimport { createStreamManagerBridge } from './internals/stream-manager.bridge';\nimport { LANGGRAPH_CLIENT_OPTIONS, resolveClientOptions } from './client/client-options';\nimport { buildBranchTree } from './internals/branch-tree';\nimport { extractCitations } from './internals/extract-citations';\nimport {\n  createClientToolsCapability,\n  mergeA2uiClientCapabilities,\n  mergeClientTools,\n  mergeStagedToolMessages,\n} from './client-tools';\nimport type { ClientToolResultPatch, StagedToolMessageBatch } from './client-tools';\nimport { ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER } from './runtime-operation-reporter';\n\n/**\n * Walk LangGraph history (newest-first) and pair each AIMessage id with\n * the most recent checkpoint that contains it as the tail message in\n * `values.messages`.\n *\n * Implementation: iterate oldest → newest (i.e. reverse the input array)\n * so later writes overwrite earlier ones; the final map has each\n * AIMessage paired with the newest containing checkpoint where it is\n * still the tail. Checkpoints with no AIMessage in scope are skipped.\n * Checkpoints with no checkpoint_id are skipped.\n */\nexport function computeMessageCheckpoints(\n  history: ReadonlyArray<ThreadState<unknown>>,\n): ReadonlyMap<string, string> {\n  const out = new Map<string, string>();\n  for (let i = history.length - 1; i >= 0; i--) {\n    const state = history[i];\n    const cpId = state.checkpoint?.checkpoint_id;\n    if (typeof cpId !== 'string' || cpId.length === 0) continue;\n    const values = state.values as { messages?: unknown[] } | undefined;\n    const msgs = Array.isArray(values?.messages) ? values.messages : [];\n    for (let j = msgs.length - 1; j >= 0; j--) {\n      const m = msgs[j] as { id?: string; _getType?: () => string; type?: string };\n      const type = typeof m._getType === 'function' ? m._getType() : m.type;\n      if (type === 'ai' && typeof m.id === 'string') {\n        out.set(m.id, cpId);\n        break;\n      }\n    }\n  }\n  return out;\n}\n\n/**\n * Internal factory that constructs a LangGraph-backed Angular agent.\n *\n * @internal Consumers do not call this directly. Configure the adapter with\n * `provideAgent({...})` in `app.config.ts` (or a component's `providers`), then\n * retrieve the agent with `injectAgent()`. This factory is the construction\n * logic invoked by `provideAgent`'s DI factory.\n *\n * Must run within an Angular injection context. Returns a unified\n * {@link LangGraphAgent} whose properties are Angular Signals that update\n * in real time as LangGraph streams messages, values, tool calls, interrupts,\n * subagent state, and checkpoint history.\n *\n * @typeParam T - The state shape returned by the agent\n * @typeParam Bag - Optional bag template for typed interrupts and submit payloads\n * @param options - Configuration for the LangGraph agent\n * @returns A {@link LangGraphAgent} with reactive signals and action methods\n *\n * @example\n * ```typescript\n * // app.config.ts — configure once\n * providers: [\n *   provideAgent({\n *     assistantId: 'chat',\n *     apiUrl: 'http://localhost:2024',\n *     threadId: signal(savedThreadId),\n *     onThreadId: (id) => localStorage.setItem('threadId', id),\n *   }),\n * ];\n *\n * // component — retrieve from DI\n * const chat = injectAgent();\n *\n * // Access signals in template\n * // chat.messages(), chat.status(), chat.error()\n * ```\n */\nexport function agent<\n  T = Record<string, unknown>,\n  Bag extends BagTemplate = BagTemplate,\n>(\n  options: AgentOptions<T, InferBag<T, Bag>>,\n): LangGraphAgent<T, InferBag<T, Bag>> {\n  // Injection context required\n  const destroyRef   = inject(DestroyRef);\n  const globalConfig = inject(AGENT_CONFIG, { optional: true });\n  const sharedClientOptions = inject(LANGGRAPH_CLIENT_OPTIONS, { optional: true });\n  const reportOperationFailure = inject(ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER, { optional: true });\n  const destroy$     = new Subject<void>();\n  destroyRef.onDestroy(() => { destroy$.next(); destroy$.complete(); });\n\n  // Merge: call-site options take precedence over global provider config\n  const apiUrl    = options.apiUrl    ?? globalConfig?.apiUrl    ?? '';\n  const transport = options.transport ?? globalConfig?.transport;\n  // clientOptions precedence: agent({...}) call-site → provideAgent config →\n  // app-wide LANGGRAPH_CLIENT_OPTIONS token → SDK default.\n  const clientOptions = resolveClientOptions(\n    options.clientOptions,\n    globalConfig?.clientOptions,\n    sharedClientOptions,\n  );\n\n  const init = (options.initialValues ?? {}) as T;\n\n  // All subjects created before the bridge\n  const status$          = new BehaviorSubject<ResourceStatus>(ResourceStatus.Idle);\n  const values$          = new BehaviorSubject<T>(init);\n  const messages$        = new BehaviorSubject<BaseMessage[]>([]);\n  const error$           = new BehaviorSubject<unknown>(undefined);\n  const interrupt$       = new BehaviorSubject<Interrupt<InferBag<T, Bag>['InterruptType']> | undefined>(undefined);\n  const interrupts$      = new BehaviorSubject<Interrupt<InferBag<T, Bag>['InterruptType']>[]>([]);\n  const branch$          = new BehaviorSubject<string>('');\n  const history$         = new BehaviorSubject<ThreadState<T>[]>([]);\n  const isThreadLoading$ = new BehaviorSubject<boolean>(false);\n  const toolProgress$    = new BehaviorSubject<ToolProgress[]>([]);\n  const toolCalls$       = new BehaviorSubject<ToolCallWithResult[]>([]);\n  const messageMetadata$ = new BehaviorSubject<Map<string, MessageMetadata<Record<string, unknown>>>>(new Map());\n  const subagents$       = new BehaviorSubject<Map<string, SubagentStreamRef>>(new Map());\n  const queue$           = new BehaviorSubject<AgentQueue>({\n    entries: [],\n    size: 0,\n    cancel: async () => false,\n    clear: async () => undefined,\n  });\n  const custom$          = new BehaviorSubject<CustomStreamEvent[]>([]);\n  const hasValue$        = new BehaviorSubject<boolean>(false);\n\n  // Forward reference. The client-tools capability is built much further down\n  // (it needs `manager`, which needs these subjects), but the thread-change\n  // seam lives here. A holder keeps the binding itself a `const` while its\n  // member is filled in later.\n  const clientToolStaging: { clear?: () => void } = {};\n  let retryableToolMessageBatch: StagedToolMessageBatch | undefined;\n\n  function resetDerivedThreadState(): void {\n    status$.next(ResourceStatus.Idle);\n    error$.next(undefined);\n    hasValue$.next(false);\n    // Staged client-tool results belong to the thread whose AIMessage produced\n    // their tool_call_ids. Carrying them into a different thread would prepend\n    // a ToolMessage that matches no tool call there — a 400 on that turn.\n    // Runs BEFORE manager.switchThread resets the store, so the capability can\n    // still read the outgoing thread's tool calls.\n    clientToolStaging.clear?.();\n  }\n\n  // Track hasValue — becomes true once values or messages arrive\n  values$.pipe(takeUntil(destroy$)).subscribe(v => {\n    if (v != null && Object.keys(v as object).length > 0) hasValue$.next(true);\n  });\n  messages$.pipe(takeUntil(destroy$)).subscribe(m => { if (m.length > 0) hasValue$.next(true); });\n\n  const subjects: StreamSubjects<T, InferBag<T, Bag>> = {\n    status$, values$, messages$, error$,\n    interrupt$, interrupts$, branch$, history$,\n    isThreadLoading$, toolProgress$, toolCalls$, messageMetadata$, subagents$, queue$, custom$,\n  };\n\n  // threadId$ — resolved before bridge creation (injection context required for toObservable)\n  const threadId$ = isSignal(options.threadId)\n    ? toObservable(options.threadId as Signal<string | null>)\n    : of((options.threadId as string | null | undefined) ?? null);\n\n  let hasSeenThreadId = false;\n  let lastThreadId: string | null = null;\n  threadId$.pipe(takeUntil(destroy$)).subscribe((id) => {\n    if (hasSeenThreadId && lastThreadId !== id) {\n      resetDerivedThreadState();\n    }\n    hasSeenThreadId = true;\n    lastThreadId = id;\n  });\n\n  // ── Lifecycle instrumentation ─────────────────────────────────────────────\n  // Eight signals tracking key transitions for telemetry/observability.\n  // All reset together via resetLifecycle(); see switchThread() below.\n  const lcStreamStartedAt      = signal<number | null>(null);\n  const lcStreamErrorAt        = signal<{ at: number; classification: string } | null>(null);\n  const lcInterruptReceivedAt  = signal<number | null>(null);\n  const lcInterruptResolvedAt  = signal<number | null>(null);\n  const lcThreadCreatedAt      = signal<number | null>(null);\n  const lcThreadPersistedAt    = signal<number | null>(null);\n  const lcToolCallStartedAt    = signal<number | null>(null);\n  const lcToolCallCompletedAt  = signal<number | null>(null);\n\n  const lifecycle: AgentLifecycle = {\n    streamStartedAt:     lcStreamStartedAt,\n    streamErrorAt:       lcStreamErrorAt,\n    interruptReceivedAt: lcInterruptReceivedAt,\n    interruptResolvedAt: lcInterruptResolvedAt,\n    threadCreatedAt:     lcThreadCreatedAt,\n    threadPersistedAt:   lcThreadPersistedAt,\n    toolCallStartedAt:   lcToolCallStartedAt,\n    toolCallCompletedAt: lcToolCallCompletedAt,\n  };\n\n  // Register with optional lifecycle registry. External instrumentation\n  // (e.g. cockpit-telemetry) provides AgentLifecycleRegistry to receive\n  // per-agent lifecycles created within this injection context.\n  const lifecycleRegistry = inject(AgentLifecycleRegistry, { optional: true });\n  lifecycleRegistry?.register(lifecycle);\n\n  function resetLifecycle(): void {\n    lcStreamStartedAt.set(null);\n    lcStreamErrorAt.set(null);\n    lcInterruptReceivedAt.set(null);\n    lcInterruptResolvedAt.set(null);\n    lcThreadCreatedAt.set(null);\n    lcThreadPersistedAt.set(null);\n    lcToolCallStartedAt.set(null);\n    lcToolCallCompletedAt.set(null);\n  }\n\n  // First chunk: first values$ or messages$ emission with content.\n  values$.pipe(takeUntil(destroy$)).subscribe(v => {\n    if (lcStreamStartedAt() === null && v != null && Object.keys(v as object).length > 0) {\n      lcStreamStartedAt.set(Date.now());\n    }\n  });\n  messages$.pipe(takeUntil(destroy$)).subscribe(m => {\n    if (lcStreamStartedAt() === null && m.length > 0) lcStreamStartedAt.set(Date.now());\n  });\n  // Stream error: capture timestamp + classification (Error name or 'unknown').\n  error$.pipe(takeUntil(destroy$)).subscribe(e => {\n    if (e == null) return;\n    const classification = e instanceof Error ? e.name : typeof e === 'string' ? 'string' : 'unknown';\n    lcStreamErrorAt.set({ at: Date.now(), classification });\n  });\n  // First non-null interrupt within this thread.\n  interrupt$.pipe(takeUntil(destroy$)).subscribe(ix => {\n    if (ix != null && lcInterruptReceivedAt() === null) lcInterruptReceivedAt.set(Date.now());\n  });\n  // First tool call append; first completed/error result transition.\n  const seenToolCallStates = new Map<string, string>();\n  toolCalls$.pipe(takeUntil(destroy$)).subscribe(tcs => {\n    if (tcs.length > 0 && lcToolCallStartedAt() === null) lcToolCallStartedAt.set(Date.now());\n    if (lcToolCallCompletedAt() !== null) return;\n    for (const tc of tcs) {\n      const prev = seenToolCallStates.get(tc.id);\n      if (prev !== tc.state && (tc.state === 'completed' || tc.state === 'error')) {\n        lcToolCallCompletedAt.set(Date.now());\n        seenToolCallStates.set(tc.id, tc.state);\n        break;\n      }\n      seenToolCallStates.set(tc.id, tc.state);\n    }\n  });\n  // Thread restored from server: history$ populates with content for a\n  // pre-existing threadId.\n  history$.pipe(takeUntil(destroy$)).subscribe(h => {\n    if (h.length > 0 && lcThreadPersistedAt() === null) lcThreadPersistedAt.set(Date.now());\n  });\n\n  const manager = createStreamManagerBridge({\n    options: { ...options, apiUrl, transport, clientOptions },\n    subjects,\n    threadId$,\n    destroy$: destroy$.asObservable(),\n    ...(transport === undefined && reportOperationFailure !== null\n      ? { reportOperationFailure }\n      : {}),\n  });\n\n  // Throttle helper — default 16ms (~60fps) to batch SSE token updates into\n  // at most one signal update per frame, preventing change detection storms.\n  const ms = typeof options.throttle === 'number' ? options.throttle : 16;\n  const maybeThrottle = <V>(obs: BehaviorSubject<V>) =>\n    ms > 0\n      ? obs.pipe(throttleTime(ms, asyncScheduler, { leading: true, trailing: true }))\n      : obs.asObservable();\n\n  // Convert to Angular Signals (must happen in injection context)\n  const value        = toSignal(maybeThrottle(values$),   { initialValue: init });\n  // No throttle on messages$: we need every token emission to propagate to\n  // Angular so streaming markdown actually streams. The bridge already\n  // batches per-tuple at the SDK level; further throttling at the signal\n  // boundary collapses tokens together and breaks visible token-by-token\n  // rendering. Same-frame multiple emissions are coalesced by Angular's\n  // CD anyway.\n  const rawMessages  = toSignal(messages$, { initialValue: [] as BaseMessage[] });\n  const statusSig    = toSignal(status$,          { initialValue: ResourceStatus.Idle });\n  // Cast justified: error$ accepts only AgentError | undefined (bridge catch normalizes all errors via\n  // toAgentError before calling next(); resetDerivedThreadState passes undefined). The BehaviorSubject\n  // is typed unknown to satisfy StreamSubjects<unknown> invariance at the subjects-bag assignment.\n  const errorSig     = toSignal(error$,           { initialValue: undefined }) as Signal<AgentError | undefined>;\n  const hasValueSig  = toSignal(hasValue$,        { initialValue: false });\n  const interruptSig = toSignal(interrupt$,       { initialValue: undefined });\n  const interruptsSig= toSignal(interrupts$,      { initialValue: [] });\n  const branchSig    = toSignal(branch$,          { initialValue: '' });\n  const historySig   = toSignal(history$,         { initialValue: [] });\n  const threadLoadSig= toSignal(isThreadLoading$, { initialValue: false });\n  const toolProgSig  = toSignal(toolProgress$,    { initialValue: [] });\n  const rawToolCalls = toSignal(toolCalls$,       { initialValue: [] });\n  const subagentsSig = toSignal(subagents$,       { initialValue: new Map<string, SubagentStreamRef>() });\n  const queueSig     = toSignal(queue$,           { initialValue: queue$.value });\n  const customSig    = toSignal(custom$,           { initialValue: [] as CustomStreamEvent[] });\n\n  const isLoading    = computed(() => statusSig() === ResourceStatus.Loading);\n  const activeSubagents = computed(() =>\n    [...subagentsSig().values()].filter(s => s.status() === 'running')\n  );\n\n  // ── Runtime-neutral projections ───────────────────────────────────────────\n\n  // Project BaseMessage → Message on every recompute. We deliberately do\n  // NOT cache: the LangGraph SDK mutates the same AIMessage instance in\n  // place during token streaming (appends content to the same object), so\n  // any identity-based cache returns stale projections and Angular's\n  // `@let content = messageContent(message)` short-circuits — DOM never\n  // updates per token. DOM stability is provided by `track message.id`\n  // in chat-message-list, not by Message identity.\n  const messagesNeutral = computed<Message[]>(() => {\n    manager.deliveryRevision();\n    return rawMessages().map((m) =>\n      toMessage(m, manager.getReasoningDurationMs, manager.getMessageDelivery)\n    );\n  });\n\n  // Client-tool resolutions written client-side. The raw `toolCalls$` stream\n  // (and thus `rawToolCalls`) only ever carries backend results — a resolved\n  // client tool (`ask`/`view`) never receives a backend ToolMessage on its\n  // LOCAL call. These overrides layer the client-side outcome over the raw\n  // projection so the transcript card can freeze (see chat-tool-views\n  // toToolViewSpec, which spreads `result` into the mounted component's props).\n  const clientResultOverrides = signal<ReadonlyMap<string, ClientToolResultPatch>>(new Map());\n\n  const toolCallsNeutral = computed<ToolCall[]>(() => {\n    const overrides = clientResultOverrides();\n    return rawToolCalls().map((tc) => {\n      const neutral = toToolCall(tc);\n      const patch = overrides.get(neutral.id);\n      return patch ? { ...neutral, ...patch } : neutral;\n    });\n  });\n\n  const statusNeutral = computed<AgentStatus>(() => mapStatus(statusSig()));\n\n  const stateNeutral = computed<Record<string, unknown>>(() => {\n    const v = value();\n    return v && typeof v === 'object' ? (v as Record<string, unknown>) : {};\n  });\n\n  const interruptNeutral = computed<AgentInterrupt | undefined>(() => {\n    const ix = interruptSig();\n    return ix ? toInterrupt(ix) : undefined;\n  });\n\n  const subagentsNeutral = computed<Map<string, Subagent>>(() => {\n    const out = new Map<string, Subagent>();\n    subagentsSig().forEach((sa, key) => out.set(key, toSubagent(sa, manager)));\n    return out;\n  });\n\n  const historyNeutral = computed<AgentCheckpoint[]>(() =>\n    historySig().map(toCheckpoint),\n  );\n  const messageCheckpointsSig = computed<ReadonlyMap<string, string>>(() =>\n    computeMessageCheckpoints(historySig() as ThreadState<unknown>[]),\n  );\n  const experimentalBranchTree = computed(() =>\n    buildBranchTree(historySig() as ThreadState<T>[]),\n  );\n\n  const events$ = buildEvents$(customSig);\n\n  // ── Client tools capability ──────────────────────────────────────────────\n  // The capability takes a direct reference to manager.submit so it can issue\n  // follow-up runs (resolve) without going through the full submit() wrapper.\n  // The catalog is injected into every outbound payload via mergeClientTools()\n  // in the submit wrapper below and in the resolve path inside the capability.\n  //\n  // flush() needs a durable write that does NOT start a run. The bridge's\n  // updateState() silently no-ops when the transport has no updateState, so\n  // only supply a persist function when the effective transport supports it —\n  // an omitted transport means the bridge builds a FetchStreamTransport, which\n  // does. When persistFn is undefined, a non-empty flush() rejects while the\n  // results stay staged; an ordinary non-null submit remains their in-memory\n  // fallback path.\n  const canPersistToolMessages = !transport || typeof transport.updateState === 'function';\n  const clientToolsCap = createClientToolsCapability(\n    (payload, opts, batch) => {\n      retryableToolMessageBatch = batch;\n      return manager.submit(payload, opts);\n    },\n    {\n      toolCalls: toolCallsNeutral,\n      isLoading,\n      applyClientResult: (id, patch) =>\n        clientResultOverrides.update((m) => new Map(m).set(id, patch)),\n    },\n    canPersistToolMessages\n      ? async (messages) => {\n          // Throw rather than let the bridge no-op: without a thread there is\n          // nothing to write to, and flush() must keep the buffer staged.\n          if (!manager.currentThreadId) {\n            throw new Error('no threadId for client tool flush');\n          }\n          // No asNode: add_messages appends the ToolMessages and the graph's\n          // resume point is left untouched, so no run is started.\n          await manager.updateState({ messages: [...messages] });\n        }\n      : undefined,\n    // Stamps each staged result with the thread it was settled on, so a write\n    // can never land on a thread the user has since moved to.\n    () => manager.currentThreadId,\n  );\n  clientToolStaging.clear = () => {\n    retryableToolMessageBatch = undefined;\n    clientToolsCap.clearStagedToolMessages();\n  };\n\n  async function resubmitWithToolRecovery(): Promise<void> {\n    const batch = retryableToolMessageBatch;\n    const outcome = await manager.resubmitLast();\n    if (outcome === 'success') batch?.acknowledge();\n  }\n\n  return {\n    // ── Runtime-neutral surface (AgentWithHistory) ────────────────────────\n    messages:  messagesNeutral,\n    status:    statusNeutral,\n    isLoading,\n    error:     errorSig,\n    toolCalls: toolCallsNeutral,\n    state:     stateNeutral as Signal<T>,\n    interrupt: interruptNeutral,\n    subagents: subagentsNeutral,\n    events$,\n    history:            historyNeutral,\n    messageCheckpoints: messageCheckpointsSig,\n    submit: async (input: AgentSubmitInput | null | undefined, opts?: AgentSubmitOptions & LangGraphSubmitOptions) => {\n      // Lifecycle: first submit with no existing threadId → thread create.\n      if (lcThreadCreatedAt() === null && lastThreadId == null) {\n        lcThreadCreatedAt.set(Date.now());\n      }\n      // Lifecycle: any resume submit marks an interrupt resolution.\n      if (input?.resume !== undefined || opts?.resume !== undefined) {\n        lcInterruptResolvedAt.set(Date.now());\n      }\n      const request = buildSubmitRequest(input, opts);\n      // Thread the client-tools catalog into every outbound payload so the\n      // backend middleware can merge them into the model's tool list. Null\n      // payloads (regenerate re-runs, command resumes) are left unchanged.\n      //\n      // Snapshot results settled but not yet durable (flush unavailable or a\n      // prior flush failed) so they ride along without being forgotten. The\n      // exact snapshot is acknowledged only when this operation succeeds;\n      // overlaps may safely carry the same deterministic message IDs. A null\n      // payload cannot carry results, so it leaves staging unchanged.\n      const batch = request.payload === null || request.payload === undefined\n        ? undefined\n        : clientToolsCap.snapshotToolMessages();\n      const staged = batch?.messages ?? [];\n      const withStaged = staged.length > 0\n        ? mergeStagedToolMessages(request.payload, staged)\n        : request.payload;\n      const payload = mergeA2uiClientCapabilities(\n        mergeClientTools(withStaged, clientToolsCap.catalog()),\n        options.a2uiClientCapabilities,\n      );\n      const createsQueuedRun =\n        request.options?.multitaskStrategy === 'enqueue' && isLoading();\n      if (!createsQueuedRun) {\n        retryableToolMessageBatch = batch;\n      }\n      const outcome = await manager.submit(payload, request.options);\n      if (outcome === 'success') batch?.acknowledge();\n    },\n    stop: () => manager.stop(),\n\n    retry: async () => {\n      if (isLoading()) return;          // no-op while a run is in flight\n      error$.next(undefined);           // clear the error before re-running\n      await resubmitWithToolRecovery();\n    },\n\n    clientTools: clientToolsCap,\n\n    regenerate: async (assistantMessageIndex: number): Promise<void> => {\n      if (isLoading()) {\n        throw new Error('Cannot regenerate while agent is loading another response');\n      }\n      const msgs = messagesNeutral();\n      const target = msgs[assistantMessageIndex];\n      if (!target || target.role !== 'assistant') {\n        throw new Error(`Message at index ${assistantMessageIndex} is not an assistant message`);\n      }\n\n      // Find the user message immediately preceding the target assistant message.\n      const userIdx = msgs\n        .slice(0, assistantMessageIndex)\n        .map((m, i) => ({ m, i }))\n        .reverse()\n        .find(({ m }) => m.role === 'user')?.i;\n      if (userIdx === undefined) {\n        throw new Error('No user message found before the target assistant message');\n      }\n\n      // Snapshot the raw BaseMessages that will be REMOVED (everything after userIdx).\n      const rawToRemove = messages$.value.slice(userIdx + 1);\n\n      // Truncate local buffer INCLUSIVE of the user message. The computed\n      // messagesNeutral signal immediately reflects this — user message is\n      // preserved in the UI while the new response streams in.\n      messages$.next(messages$.value.slice(0, userIdx + 1));\n\n      // Build RemoveMessage wire-shape instructions for server-side rollback.\n      // LangGraph's add_messages reducer recognises `{ type: 'remove', id }`\n      // and removes those entries from the thread state — ensuring the\n      // runtime re-runs against the same trimmed state rather than appending\n      // new messages on top.\n      const removeList: RemoveMessageInstruction[] = rawToRemove\n        .map(m => {\n          const raw = m as unknown as Record<string, unknown>;\n          const id = typeof raw['id'] === 'string' ? raw['id'] : undefined;\n          return id\n            ? { type: 'remove' as const, role: 'remove' as const, id, content: '' as const }\n            : null;\n        })\n        .filter((rm): rm is RemoveMessageInstruction => rm !== null);\n\n      // RemoveMessage rollback + reposition the graph to the entry node\n      // via `as_node: '__start__'`. After the original run, the thread is\n      // at `__end__` with `next: []` — submitting `null` would be a no-op\n      // because there is nothing pending to execute. Setting `asNode` to\n      // the start node tells LangGraph to treat the update as if `__start__`\n      // had just produced the values, so the next pull resumes at the entry\n      // node and runs `generate` against the rolled-back state.\n      //\n      // We always pass `asNode` even when removeList is empty (rare, but\n      // possible if the assistant message had no id) so the regenerate\n      // submit below still runs the graph.\n      await manager.updateState(\n        { messages: removeList },\n        { asNode: '__start__' },\n      );\n\n      // Re-run the graph with no new input. With the thread now repositioned\n      // at `__start__`, this resumes at the entry node and produces a fresh\n      // assistant message — the trailing user message becomes the active\n      // prompt without being re-appended.\n      retryableToolMessageBatch = undefined;\n      await manager.submit(null, undefined);\n    },\n\n    // ── Raw LangGraph signals ─────────────────────────────────────────────\n    langGraphMessages:   rawMessages as Signal<BaseMessage[]>,\n    langGraphInterrupts: interruptsSig,\n    langGraphToolCalls:  rawToolCalls,\n    langGraphHistory:    historySig,\n    experimentalBranchTree,\n\n    // ── Other LangGraph-specific fields ──────────────────────────────────\n    value:           value as Signal<T>,\n    hasValue:        hasValueSig,\n    reload:          () => {\n      void resubmitWithToolRecovery();\n    },\n    toolProgress:    toolProgSig,\n    queue:           queueSig,\n    activeSubagents,\n    getSubagent:     (toolCallId) => subagentsSig().get(toolCallId),\n    getSubagentsByType: (type) =>\n      [...subagentsSig().values()].filter(sa => sa.name === type),\n    getSubagentsByMessage: (msg) => resolveSubagentsByMessage(msg, subagentsSig()),\n    customEvents:    customSig,\n    branch:          branchSig,\n    setBranch:       (b) => branch$.next(b),\n    isThreadLoading: threadLoadSig,\n    switchThread:    (id) => {\n      resetDerivedThreadState();\n      resetLifecycle();\n      seenToolCallStates.clear();\n      manager.switchThread(id);\n    },\n    lifecycle,\n    joinStream:          (id, last) => manager.joinStream(id, last),\n    getMessagesMetadata: (msg, idx) => {\n      const id = (msg as unknown as Record<string, unknown>)['id'];\n      const key = id != null ? String(id) : idx != null ? String(idx) : undefined;\n      return key ? messageMetadata$.value.get(key) : undefined;\n    },\n    getToolCalls: (msg) => {\n      const id = (msg as unknown as Record<string, unknown>)['id'];\n      return id == null\n        ? []\n        : toolCalls$.value.filter(tc => (tc.aiMessage as unknown as Record<string, unknown>)['id'] === id);\n    },\n  };\n}\n\n// ── Private translation helpers (moved from to-agent.ts) ─────────────────────\n\n/**\n * Build an Observable<AgentEvent> that bridges LangGraph's\n * `Signal<CustomStreamEvent[]>` (append-only array) into a stream of newly\n * emitted events. Each effect firing compares against a cursor tracking the\n * previously-seen length and emits only the tail slice.\n */\nfunction buildEvents$(customSig: Signal<CustomStreamEvent[]>): Observable<AgentEvent> {\n  const subject = new Subject<AgentEvent>();\n  let seen = 0;\n  effect(() => {\n    const all = customSig();\n    if (all.length < seen) {\n      // Stream reset (new session, thread switch, etc.). Rewind cursor.\n      seen = 0;\n    }\n    for (let i = seen; i < all.length; i++) {\n      subject.next(toAgentEvent(all[i]));\n    }\n    seen = all.length;\n  });\n  return subject.asObservable();\n}\n\nfunction toAgentEvent(e: CustomStreamEvent): AgentEvent {\n  if (e.name === 'state_update' && isRecord(e.data)) {\n    return { type: 'state_update', data: e.data };\n  }\n  return { type: 'custom', name: e.name, data: e.data };\n}\n\nfunction mapStatus(s: ResourceStatus): AgentStatus {\n  switch (s) {\n    case ResourceStatus.Error: return 'error';\n    case ResourceStatus.Loading:\n    case ResourceStatus.Reloading:\n      return 'running';\n    default:\n      return 'idle';\n  }\n}\n\nfunction toMessage(\n  m: BaseMessage,\n  getReasoningDurationMs?: (id: string) => number | undefined,\n  getDelivery?: (id: string) => MessageDelivery,\n): Message {\n  const raw = m as unknown as Record<string, unknown>;\n  const typeVal = typeof m._getType === 'function'\n    ? m._getType()\n    : (raw['type'] as string | undefined) ?? 'ai';\n  const role: Role =\n    typeVal === 'human' ? 'user' :\n    typeVal === 'tool'  ? 'tool' :\n    typeVal === 'system' ? 'system' :\n    'assistant';\n  const id = (m.id as string | undefined) ?? (raw['id'] as string | undefined) ?? randomId();\n  const reasoning = typeof raw['reasoning'] === 'string' && (raw['reasoning'] as string).length > 0\n    ? (raw['reasoning'] as string)\n    : undefined;\n  const reasoningDurationMs = reasoning && getReasoningDurationMs\n    ? getReasoningDurationMs(id)\n    : undefined;\n  const result: Message = {\n    id,\n    role,\n    delivery: getDelivery?.(id) ?? staticDelivery(id),\n    content: extractTextContent(m.content),\n    toolCallId: raw['tool_call_id'] as string | undefined,\n    name: raw['name'] as string | undefined,\n    reasoning,\n    reasoningDurationMs,\n    extra: raw,\n  };\n  const citations = extractCitations(raw as { additional_kwargs?: Record<string, unknown> });\n  if (citations) result.citations = citations;\n  if (role === 'assistant') {\n    const tcIds = getToolCallIds(m as CoreAIMessage);\n    if (tcIds.length > 0) result.toolCallIds = tcIds;\n  }\n  return result;\n}\n\n/**\n * Extract user-visible text from a `BaseMessage.content` value.\n *\n * LangChain's `BaseMessage.content` is `string | MessageContentComplex[]`.\n * Reasoning-capable models (OpenAI gpt-5/o-series, Anthropic) emit complex\n * arrays of typed blocks: `{type: 'text', text}`, `{type: 'reasoning', ...}`,\n * tool-use blocks, etc. We render only the visible text portions and skip\n * anything else. JSON-stringifying the whole array (the previous behaviour)\n * would dump raw `[{\"type\":\"text\",...}]` into the chat bubble.\n */\nfunction extractTextContent(content: unknown): string {\n  if (typeof content === 'string') return content;\n  if (!Array.isArray(content)) return '';\n  let out = '';\n  for (const block of content) {\n    if (typeof block === 'string') {\n      out += block;\n      continue;\n    }\n    if (!isRecord(block)) continue;\n    const t = block['type'];\n    // Common text-bearing block shapes across providers.\n    if (t === 'text' || t === 'output_text' || t === undefined) {\n      const text = block['text'];\n      if (typeof text === 'string') out += text;\n    }\n    // Skip reasoning, tool_use, image, etc. — not chat-bubble content.\n  }\n  return out;\n}\n\nfunction toToolCall(tc: ToolCallWithResult): ToolCall {\n  const stateMap: Record<string, ToolCallStatus> = {\n    pending: 'pending',\n    completed: 'complete',\n    error: 'error',\n  };\n  const status: ToolCallStatus = stateMap[tc.state] ?? 'running';\n  const result = tc.result as (Record<string, unknown> | undefined);\n  return {\n    id: tc.id,\n    name: tc.call.name,\n    args: tc.call.args,\n    status,\n    result: result?.['content'],\n    error: tc.state === 'error' ? result?.['content'] : undefined,\n  };\n}\n\nfunction toInterrupt(ix: Interrupt<unknown>): AgentInterrupt {\n  const raw = ix as unknown as Record<string, unknown>;\n  return {\n    id: (raw['id'] as string | undefined) ?? randomId(),\n    value: raw['value'] ?? ix,\n    resumable: true,\n  };\n}\n\nfunction toSubagent(\n  sa: SubagentStreamRef,\n  manager: ReturnType<typeof createStreamManagerBridge>,\n): Subagent {\n  return {\n    toolCallId: sa.toolCallId,\n    name: sa.name,\n    status: sa.status,\n    messages: computed(() => {\n      manager.deliveryRevision();\n      return sa.messages().map((m) =>\n        toMessage(\n          m,\n          undefined,\n          () => manager.getSubagentMessageDelivery(sa.toolCallId, m),\n        )\n      );\n    }) as Signal<Message[]>,\n    state: sa.values as Signal<Record<string, unknown>>,\n  };\n}\n\n/**\n * Resolve the subagents spawned by an AI message's tool calls.\n *\n * Anchors on the contract field `SubagentStreamRef.toolCallId`, not the map\n * KEY: the key is an adapter detail (LangGraph keys by the tool-call id,\n * AG-UI keys activities by `<toolCallId>-sub`) and only the field is\n * guaranteed to equal the id on the message's `tool_calls` — the same rule\n * `<chat-tool-calls>` applies when it re-indexes `agent.subagents()`.\n *\n * @internal Exported for unit tests only — not part of the public API.\n */\nexport function resolveSubagentsByMessage(\n  msg: CoreAIMessage,\n  subagents: ReadonlyMap<string, SubagentStreamRef>,\n): SubagentStreamRef[] {\n  const byToolCallId = new Map<string, SubagentStreamRef>();\n  subagents.forEach(sa => byToolCallId.set(sa.toolCallId, sa));\n  return getToolCallIds(msg)\n    .map(id => byToolCallId.get(id))\n    .filter((subagent): subagent is SubagentStreamRef => subagent != null);\n}\n\nfunction getToolCallIds(msg: CoreAIMessage): string[] {\n  const raw = msg as unknown as Record<string, unknown>;\n  const toolCalls = raw['tool_calls'];\n  if (!Array.isArray(toolCalls)) return [];\n  return toolCalls\n    .map(toolCall => isRecord(toolCall) && typeof toolCall['id'] === 'string' ? toolCall['id'] : undefined)\n    .filter((id): id is string => id != null);\n}\n\nfunction buildSubmitRequest(\n  input: AgentSubmitInput | null | undefined,\n  opts?: AgentSubmitOptions & LangGraphSubmitOptions,\n): { payload: unknown; options?: AgentSubmitOptions & LangGraphSubmitOptions } {\n  return {\n    payload: buildSubmitPayload(input),\n    options: normalizeSubmitOptions(input, opts),\n  };\n}\n\nfunction buildSubmitPayload(input: AgentSubmitInput | null | undefined): unknown {\n  if (input == null) return null;\n  if (input.resume !== undefined) return null;\n  return buildSubmitUpdate(input) ?? {};\n}\n\nfunction normalizeSubmitOptions(\n  input: AgentSubmitInput | null | undefined,\n  opts?: AgentSubmitOptions & LangGraphSubmitOptions,\n): (AgentSubmitOptions & LangGraphSubmitOptions) | undefined {\n  const inputResume = input?.resume;\n  const optionResume = opts?.resume;\n  const resume = inputResume !== undefined ? inputResume : optionResume;\n  if (resume === undefined) return opts;\n\n  const next = { ...(opts ?? {}) };\n  delete next.resume;\n  const command = next.command;\n  const update = buildSubmitUpdate(input);\n  const commandUpdate = mergeCommandUpdate(command?.update, update);\n  return {\n    ...next,\n    command: {\n      ...command,\n      resume,\n      ...(commandUpdate === undefined ? {} : { update: commandUpdate }),\n    },\n  };\n}\n\nfunction buildSubmitUpdate(input: AgentSubmitInput | null | undefined): Record<string, unknown> | undefined {\n  if (input == null) return undefined;\n  if (input.message !== undefined) {\n    const content = typeof input.message === 'string'\n      ? input.message\n      : input.message.map((b: ContentBlock) => (b.type === 'text' ? b.text : JSON.stringify(b))).join('');\n    // `type: 'human'` is what `toMessage()` reads via `_getType` || raw['type'];\n    // `role: 'human'` is what the LangGraph server expects in submit payloads.\n    // Include both so the optimistic local copy projects as a 'user' bubble\n    // (otherwise toMessage falls through to the 'ai' default and renders the\n    // user's question as an assistant message).\n    return { messages: [{ type: 'human', role: 'human', content }], ...(input.state ?? {}) };\n  }\n  return input.state;\n}\n\nfunction mergeCommandUpdate(\n  existing: Command['update'] | undefined,\n  update: Record<string, unknown> | undefined,\n): Command['update'] | undefined {\n  if (update === undefined) return existing;\n  if (existing == null) return update;\n  if (isRecord(existing)) return { ...existing, ...update };\n  if (Array.isArray(existing)) return [...existing, ...Object.entries(update)];\n  return update;\n}\n\nfunction randomId(): string {\n  return Math.random().toString(36).slice(2);\n}\n\nfunction toCheckpoint(state: ThreadState<unknown>): AgentCheckpoint {\n  return {\n    id:    state.checkpoint?.checkpoint_id ?? undefined,\n    label: state.next?.[0] ?? undefined,\n    values: isRecord(state.values) ? state.values : {},\n  };\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n  return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n","import { InjectionToken, inject, type Provider, type Signal } from '@angular/core';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { BagTemplate } from '@langchain/langgraph-sdk';\nimport type { AgentRef, AgentRuntimeTelemetrySink } from '@threadplane/chat';\nimport { agent } from './agent.fn';\nimport type {\n  AgentTransport,\n  LangGraphAgent,\n  LangGraphClientOptions,\n} from './agent.types';\n\n/**\n * Configuration for an agent instance.\n * Combines connection defaults with per-component options so the\n * agent can be constructed once at provider time and injected\n * everywhere it is needed.\n */\n// The second generic mirrors AgentOptions so consumers can pin a Bag\n// template; it is currently unused inside this shape.\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface AgentConfig<\n  T = Record<string, unknown>,\n  _Bag extends BagTemplate = BagTemplate,\n> {\n  /** Base URL of the LangGraph Platform API (e.g., `'http://localhost:2024'`). */\n  apiUrl?: string;\n  /** Agent or graph identifier on the LangGraph platform. */\n  assistantId?: string;\n  /** Thread ID to connect to. Pass a Signal for reactive thread switching. */\n  threadId?: Signal<string | null> | string | null;\n  /** Called when a new thread is auto-created by the transport. */\n  onThreadId?: (id: string) => void;\n  /** Initial state values before the first stream response arrives. */\n  initialValues?: Partial<T>;\n  /** Throttle signal updates in milliseconds. `false` to disable. */\n  throttle?: number | false;\n  /** Custom message deserializer for non-standard message formats. */\n  toMessage?: (msg: unknown) => BaseMessage;\n  /** Custom transport. Defaults to {@link FetchStreamTransport}. */\n  transport?: AgentTransport;\n  /** Tuning options for the default transport's LangGraph SDK client (e.g. retry budget). */\n  clientOptions?: LangGraphClientOptions;\n  /** Optional app-owned sink. Supply one to receive runtime lifecycle events. */\n  telemetry?: AgentRuntimeTelemetrySink | false;\n  /** Tool names that indicate a subagent invocation. */\n  subagentToolNames?: string[];\n  /**\n   * LangGraph node names whose `messages-tuple` LLM chunks should be projected\n   * into the main chat transcript. Omit to accept all top-level message chunks.\n   * Child-graph (namespaced) chunks never reach the transcript regardless of\n   * this option — they belong to their child stream in `subagents()`.\n   */\n  transcriptNodeNames?: string[];\n}\n\n/**\n * @internal — exported only so the legacy in-tree `agent({...})` factory (and\n * its tests) can read provider-supplied defaults. Not part of the public API;\n * consumers should construct config inline at `provideAgent({...})`.\n */\nexport const AGENT_CONFIG = new InjectionToken<AgentConfig>('AGENT_CONFIG');\n\n/**\n * @internal — exported for spec access only. Consumers must use `injectAgent()`.\n */\nexport const AGENT = new InjectionToken<LangGraphAgent>('AGENT');\n\n/** @internal — shared factory that reads AGENT_CONFIG and constructs the singleton. */\nfunction agentFactory<T>(): LangGraphAgent<T> {\n  // useFactory runs in an injection context, so the legacy `agent()`\n  // factory's `inject(DestroyRef)` calls work.\n  const config = inject(AGENT_CONFIG) as AgentConfig<T>;\n  if (config.assistantId === undefined) {\n    throw new Error(\n      'provideAgent: `assistantId` is required to construct the AGENT singleton.',\n    );\n  }\n  return agent<T>({\n    assistantId: config.assistantId,\n    ...(config.apiUrl !== undefined ? { apiUrl: config.apiUrl } : {}),\n    ...(config.threadId !== undefined ? { threadId: config.threadId } : {}),\n    ...(config.onThreadId !== undefined ? { onThreadId: config.onThreadId } : {}),\n    ...(config.initialValues !== undefined ? { initialValues: config.initialValues } : {}),\n    ...(config.throttle !== undefined ? { throttle: config.throttle } : {}),\n    ...(config.toMessage !== undefined ? { toMessage: config.toMessage } : {}),\n    ...(config.transport !== undefined ? { transport: config.transport } : {}),\n    ...(config.clientOptions !== undefined ? { clientOptions: config.clientOptions } : {}),\n    ...(config.telemetry !== undefined ? { telemetry: config.telemetry } : {}),\n    ...(config.subagentToolNames !== undefined ? { subagentToolNames: config.subagentToolNames } : {}),\n    ...(config.transcriptNodeNames !== undefined ? { transcriptNodeNames: config.transcriptNodeNames } : {}),\n  });\n}\n\nfunction isAgentRef<T>(x: unknown): x is AgentRef<T> {\n  return typeof x === 'object' && x !== null && 'token' in x;\n}\n\n/**\n * Wire the LangGraph adapter into Angular's dependency injection.\n *\n * Registers a singleton `LangGraphAgent` constructed from `config`. Retrieve it\n * in any component with `injectAgent()`. Provide this at the application root\n * (`app.config.ts`) for an app-wide agent.\n *\n * To use a different agent in a component subtree, re-provide\n * `provideAgent({...})` in that component's `providers: []` array —\n * Angular's hierarchical DI scopes the singleton accordingly.\n *\n * **Static vs factory config.** Pass a plain `AgentConfig` object when the\n * config is known up front. Pass a `() => AgentConfig` factory when the config\n * depends on runtime/DI state — the factory runs inside an Angular injection\n * context, so it may call `inject()` to read services, route params, or\n * component-scoped signals.\n *\n * **Typed state via AgentRef.** Pass a typed ref as the first argument to flow\n * the state shape from `provideAgent` to `injectAgent` without repeating the\n * generic at every call site.\n *\n * @example Factory config reading route params\n * ```ts\n * providers: [\n *   provideAgent(() => {\n *     const route = inject(ActivatedRoute);\n *     return { assistantId: 'chat', threadId: toSignal(route.paramMap) };\n *   }),\n * ];\n * ```\n * @example Typed state via AgentRef\n * ```ts\n * export const TRIP = createAgentRef<TripState>('trip');\n * // app.config.ts:\n * providers: [provideAgent(TRIP, { assistantId: 'trip-graph' })]\n * // component:\n * const agent = injectAgent(TRIP); // LangGraphAgent<TripState>\n * ```\n */\nexport function provideAgent<T = Record<string, unknown>>(\n  ref: AgentRef<T>,\n  configOrFactory: AgentConfig<T> | (() => AgentConfig<T>),\n): Provider[];\nexport function provideAgent<T = Record<string, unknown>>(\n  configOrFactory: AgentConfig<T> | (() => AgentConfig<T>),\n): Provider[];\nexport function provideAgent<T = Record<string, unknown>>(\n  refOrConfig: AgentRef<T> | AgentConfig<T> | (() => AgentConfig<T>),\n  maybeConfig?: AgentConfig<T> | (() => AgentConfig<T>),\n): Provider[] {\n  const ref = isAgentRef<T>(refOrConfig) ? refOrConfig : undefined;\n  const configOrFactory = (ref ? maybeConfig : refOrConfig) as\n    | AgentConfig<T>\n    | (() => AgentConfig<T>);\n\n  // Resolve the factory (if any) lazily, inside the injection context of the\n  // AGENT_CONFIG useFactory below — never at decoration time.\n  const resolveConfig = (): AgentConfig<T> =>\n    typeof configOrFactory === 'function' ? (configOrFactory as () => AgentConfig<T>)() : configOrFactory;\n\n  const providers: Provider[] = [\n    // AGENT_CONFIG resolves the config once (running the factory in an\n    // injection context if a factory was passed). AGENT reads the resolved\n    // config from here, so the factory is invoked exactly once.\n    { provide: AGENT_CONFIG, useFactory: resolveConfig },\n    { provide: AGENT, useFactory: agentFactory<T> },\n  ];\n  if (ref) providers.push({ provide: ref.token, useExisting: AGENT });\n  return providers;\n}\n","import { inject } from '@angular/core';\nimport type { BagTemplate } from '@langchain/langgraph-sdk';\nimport type { AgentRef } from '@threadplane/chat';\nimport { AGENT } from './agent.provider';\nimport type { LangGraphAgent } from './agent.types';\n\n/**\n * Retrieve the LangGraph-backed Agent from the current Angular injection context.\n *\n * Mirrors `@threadplane/ag-ui`'s `injectAgent()` so consumer code is identical\n * regardless of which adapter is wired in `app.config.ts`. The agent is a\n * singleton scoped to the injector that called `provideAgent()` — re-provide\n * in a child component's `providers: []` to scope a different agent to that\n * subtree (Angular's hierarchical DI handles the rest).\n *\n * **Typed state via AgentRef.** Pass the same ref that was supplied to\n * `provideAgent(ref, …)` to carry the state type through DI without repeating\n * the generic at every call site. The no-arg form defaults to\n * `LangGraphAgent<Record<string, unknown>>`.\n *\n * @example Typed state via AgentRef\n * ```ts\n * const agent = injectAgent(TRIP); // LangGraphAgent<TripState>\n * ```\n */\nexport function injectAgent(): LangGraphAgent<Record<string, unknown>>;\nexport function injectAgent<T, ResolvedBag extends BagTemplate = BagTemplate>(\n  ref: AgentRef<T>,\n): LangGraphAgent<T, ResolvedBag>;\nexport function injectAgent<T = Record<string, unknown>, ResolvedBag extends BagTemplate = BagTemplate>(\n  ref?: AgentRef<T>,\n): LangGraphAgent<T, ResolvedBag> {\n  return inject(ref ? ref.token : AGENT) as LangGraphAgent<T, ResolvedBag>;\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\nexport interface AgentLifecycle {\n  /** Epoch ms of the first stream chunk arrival. Resets on switchThread(). */\n  readonly streamStartedAt: Signal<number | null>;\n  /** Epoch ms + classification of the most recent stream error. Resets on switchThread(). */\n  readonly streamErrorAt: Signal<{ at: number; classification: string } | null>;\n  /** Epoch ms of the first interrupt$ non-null in this stream. Resets on switchThread(). */\n  readonly interruptReceivedAt: Signal<number | null>;\n  /** Epoch ms of the most recent submit({ resume }) call. Resets on switchThread(). */\n  readonly interruptResolvedAt: Signal<number | null>;\n  /** Epoch ms when the agent's \"create new thread\" branch fired. Resets on switchThread(). */\n  readonly threadCreatedAt: Signal<number | null>;\n  /** Epoch ms when an existing thread was restored from server (proves persistence). Resets on switchThread(). */\n  readonly threadPersistedAt: Signal<number | null>;\n  /** Epoch ms of the first tool call append. Resets on switchThread(). */\n  readonly toolCallStartedAt: Signal<number | null>;\n  /** Epoch ms of the first tool call result transition. Resets on switchThread(). */\n  readonly toolCallCompletedAt: Signal<number | null>;\n}\n\nexport const AGENT_LIFECYCLE = new InjectionToken<AgentLifecycle>('AGENT_LIFECYCLE');\n","import type { AgentQueueEntry, AgentTransport, LangGraphSubmitOptions, StreamEvent } from '../agent.types';\nimport type { ThreadState } from '@langchain/langgraph-sdk';\n\n/**\n * Test transport for deterministic agent testing without a real LangGraph server.\n *\n * Script event batches upfront, then emit them manually or step through them\n * in your test specs. Supports error injection and close control.\n *\n * @example\n * ```typescript\n * const transport = new MockAgentTransport([\n *   [{ type: 'values', messages: [aiMsg('Hello')] }],\n *   [{ type: 'values', messages: [aiMsg('Done')] }],\n * ]);\n * ```\n */\nexport class MockAgentTransport implements AgentTransport {\n  history: ThreadState[] = [];\n  readonly historyCalls: string[] = [];\n  readonly streams: Array<{ threadId: string | null; payload: unknown; options?: LangGraphSubmitOptions }> = [];\n  readonly createdQueuedRuns: AgentQueueEntry[] = [];\n  readonly cancelledRuns: Array<{ threadId: string; runId: string }> = [];\n  readonly joinedRuns: Array<{ threadId: string; runId: string }> = [];\n  private script: StreamEvent[][];\n  private scriptIndex = 0;\n  private streaming = false;\n  private eventQueue: StreamEvent[] = [];\n  // Each resolver simply wakes the stream loop to re-check state.\n  private resolvers: Array<() => void> = [];\n  private closed = false;\n  private pendingError: Error | null = null;\n\n  /** @param script - Array of event batches. Each batch is emitted as a group. */\n  constructor(script: StreamEvent[][] = []) {\n    this.script = script;\n  }\n\n  /** Advance to the next scripted batch. Pass the returned events to `emit()`. */\n  nextBatch(): StreamEvent[] {\n    if (this.scriptIndex >= this.script.length) return [];\n    return this.script[this.scriptIndex++];\n  }\n\n  /** Manually emit events into the stream. */\n  emit(events: StreamEvent[]): void {\n    this.eventQueue.push(...events);\n    this.flush();\n  }\n\n  /** Inject an error into the stream. */\n  emitError(err: Error): void {\n    this.pendingError = err;\n    this.flush();\n  }\n\n  /** Close the stream. Remaining queued events are drained before completion. */\n  close(): void {\n    this.closed = true;\n    this.flush();\n  }\n\n  /** Returns true if a stream is currently active. */\n  isStreaming(): boolean {\n    return this.streaming;\n  }\n\n  async *stream(\n    _assistantId: string,\n    _threadId: string | null,\n    _payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): AsyncIterable<StreamEvent> {\n    this.streams.push({ threadId: _threadId, payload: _payload, options });\n    this.streaming = true;\n    try {\n      while (!this.closed && !signal.aborted) {\n        if (this.pendingError) throw this.pendingError;\n        if (this.eventQueue.length > 0) {\n          const event = this.eventQueue.shift();\n          if (event) yield event;\n        } else {\n          // Wait until flush() wakes us, then loop again to check state.\n          await new Promise<void>((resolve) => {\n            if (signal.aborted) { resolve(); return; }\n            this.resolvers.push(resolve);\n          });\n        }\n      }\n      if (signal.aborted) return;\n      // Drain remaining events after close()\n      while (this.eventQueue.length > 0) {\n        const event = this.eventQueue.shift();\n        if (event) yield event;\n      }\n    } finally {\n      this.streaming = false;\n    }\n  }\n\n  async createQueuedRun(\n    _assistantId: string,\n    threadId: string,\n    payload: unknown,\n    signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): Promise<AgentQueueEntry> {\n    void signal;\n    const entry: AgentQueueEntry = {\n      id: `queued-run-${this.createdQueuedRuns.length + 1}`,\n      threadId,\n      values: payload,\n      options: { ...options, multitaskStrategy: 'enqueue' },\n      createdAt: new Date(),\n    };\n    this.createdQueuedRuns.push(entry);\n    return entry;\n  }\n\n  async cancelRun(threadId: string, runId: string, signal: AbortSignal): Promise<void> {\n    void signal;\n    this.cancelledRuns.push({ threadId, runId });\n  }\n\n  async getHistory(threadId: string, signal: AbortSignal): Promise<ThreadState[]> {\n    void signal;\n    this.historyCalls.push(threadId);\n    return this.history;\n  }\n\n  async *joinStream(\n    threadId: string,\n    runId: string,\n    lastEventId: string | undefined,\n    signal: AbortSignal,\n  ): AsyncIterable<StreamEvent> {\n    void lastEventId;\n    void signal;\n    this.joinedRuns.push({ threadId, runId });\n    yield { type: 'values', values: { queued: true } };\n  }\n\n  private flush(): void {\n    const resolve = this.resolvers.shift();\n    if (resolve) resolve();\n  }\n}\n","import { computed, signal, WritableSignal } from '@angular/core';\nimport type {\n  LangGraphAgent,\n  SubagentStreamRef,\n  AgentQueue,\n  Interrupt,\n  ThreadState,\n  CustomStreamEvent,\n  AgentBranchTree,\n} from '../agent.types';\nimport type { ToolProgress, ToolCallWithResult } from '@langchain/langgraph-sdk';\nimport type { BaseMessage, AIMessage as CoreAIMessage } from '@langchain/core/messages';\nimport type { MessageMetadata } from '@langchain/langgraph-sdk/ui';\nimport { mockAgent } from '@threadplane/chat';\nimport type {\n  MockAgent,\n  MockAgentOptions,\n  AgentError,\n  AgentInterrupt,\n  AgentCheckpoint,\n  AgentStatus,\n  Message,\n  Subagent,\n  ToolCall,\n} from '@threadplane/chat';\n\n/**\n * A LangGraphAgent mock with writable signals for easy test control.\n *\n * Builds on the runtime-neutral {@link MockAgent} from `@threadplane/chat`\n * (which supplies the neutral `Agent`-contract writable signals plus\n * `submit`/`stop`/`regenerate` call tracking) and layers the LangGraph-specific\n * writable signals on top.\n *\n * Cast the result of `mockLangGraphAgent()` to this type to access\n * writable signals without unsafe casts in test files.\n */\nexport interface MockLangGraphAgent extends LangGraphAgent<any, any> {\n  // Neutral writable signals — re-declared writable. (Dual-extends of MockAgent\n  // and LangGraphAgent is impossible because they declare incompatible\n  // `lifecycle` shapes, so we extend LangGraphAgent and layer the MockAgent\n  // call-tracking surface explicitly below.)\n  messages: WritableSignal<Message[]>;\n  status: WritableSignal<AgentStatus>;\n  isLoading: WritableSignal<boolean>;\n  error: WritableSignal<AgentError | undefined>;\n  toolCalls: WritableSignal<ToolCall[]>;\n  interrupt: WritableSignal<AgentInterrupt | undefined>;\n  subagents: WritableSignal<Map<string, Subagent>>;\n  history: WritableSignal<AgentCheckpoint[]>;\n\n  // MockAgent call-tracking surface (delegated to mockAgent at runtime).\n  submitCalls: MockAgent['submitCalls'];\n  stopCount: MockAgent['stopCount'];\n  _internal: MockAgent['_internal'];\n\n  // LangGraph-specific writable signals.\n  langGraphMessages: WritableSignal<BaseMessage[]>;\n  hasValue: WritableSignal<boolean>;\n  value: WritableSignal<any>;\n  langGraphInterrupts: WritableSignal<Interrupt<any>[]>;\n  langGraphToolCalls: WritableSignal<ToolCallWithResult[]>;\n  toolProgress: WritableSignal<ToolProgress[]>;\n  queue: WritableSignal<AgentQueue>;\n  branch: WritableSignal<string>;\n  langGraphHistory: WritableSignal<ThreadState<any>[]>;\n  experimentalBranchTree: WritableSignal<AgentBranchTree<any>>;\n  isThreadLoading: WritableSignal<boolean>;\n  activeSubagents: WritableSignal<SubagentStreamRef[]>;\n  customEvents: WritableSignal<CustomStreamEvent[]>;\n}\n\n/**\n * Creates a mock LangGraphAgent with writable signals for testing.\n * Control state by writing to the returned writable signals directly.\n *\n * Neutral `Agent`-contract signals come from {@link mockAgent}; LangGraph-specific\n * signals are declared here and layered on top.\n *\n * @example\n * ```ts\n * const agent = mockLangGraphAgent({ isThreadLoading: true });\n * agent.messages.set([{ id: '1', role: 'assistant', content: 'Hi' }]);\n * ```\n */\nexport function mockLangGraphAgent(\n  initial: MockAgentOptions & {\n    langGraphMessages?: BaseMessage[];\n    hasValue?: boolean;\n    isThreadLoading?: boolean;\n  } = {}\n): MockLangGraphAgent {\n  const base = mockAgent({\n    ...initial,\n    withInterrupt: true,\n    withSubagents: true,\n    history: initial.history ?? [],\n  });\n\n  // ── LangGraph-specific writable signals (defaults copied verbatim) ────────\n  const langGraphMessages$ = signal<BaseMessage[]>(initial.langGraphMessages ?? []);\n  const hasValue$ = signal<boolean>(initial.hasValue ?? false);\n  const value$ = signal<any>(null);\n  const langGraphInterrupts$ = signal<Interrupt<any>[]>([]);\n  const langGraphToolCalls$ = signal<ToolCallWithResult[]>([]);\n  const toolProgress$ = signal<ToolProgress[]>([]);\n  const queue$ = signal<AgentQueue>({\n    entries: [],\n    size: 0,\n    cancel: async () => false,\n    clear: async () => undefined,\n  });\n  const branch$ = signal<string>('');\n  const langGraphHistory$ = signal<ThreadState<any>[]>([]);\n  const experimentalBranchTree$ = signal<AgentBranchTree<any>>({ type: 'sequence', items: [] });\n  const isThreadLoading$ = signal<boolean>(initial.isThreadLoading ?? false);\n  const activeSubagents$ = signal<SubagentStreamRef[]>([]);\n  const customEvents$ = signal<CustomStreamEvent[]>([]);\n\n  // `state` derives from the raw LangGraph value (preserves current behavior).\n  const state$ = computed<Record<string, unknown>>(() => {\n    const v = value$();\n    return v && typeof v === 'object' ? (v as Record<string, unknown>) : {};\n  });\n\n  const mock: MockLangGraphAgent = {\n    ...base,\n\n    // ── Neutral surface: override `state` to derive from the LangGraph value ─\n    state: state$ as never,\n\n    // ── Raw LangGraph signals ─────────────────────────────────────────────\n    langGraphMessages: langGraphMessages$,\n    langGraphInterrupts: langGraphInterrupts$,\n    langGraphToolCalls: langGraphToolCalls$,\n    langGraphHistory: langGraphHistory$,\n    experimentalBranchTree: experimentalBranchTree$,\n\n    // ── Other AgentRef fields preserved ──────────────────────────────────\n    value: value$,\n    hasValue: hasValue$,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    reload: () => {},\n    toolProgress: toolProgress$,\n    queue: queue$,\n    activeSubagents: activeSubagents$,\n    getSubagent: (toolCallId: string) =>\n      activeSubagents$().find(subagent => subagent.toolCallId === toolCallId),\n    getSubagentsByType: (type: string) =>\n      activeSubagents$().filter(subagent => subagent.name === type),\n    getSubagentsByMessage: (msg: CoreAIMessage) => {\n      const toolCalls = (msg as unknown as Record<string, unknown>)['tool_calls'];\n      if (!Array.isArray(toolCalls)) return [];\n      const ids = toolCalls\n        .map(toolCall => {\n          if (toolCall == null || typeof toolCall !== 'object' || Array.isArray(toolCall)) return undefined;\n          const id = (toolCall as Record<string, unknown>)['id'];\n          return typeof id === 'string' ? id : undefined;\n        })\n        .filter((id): id is string => id != null);\n      return activeSubagents$().filter(subagent => ids.includes(subagent.toolCallId));\n    },\n    customEvents: customEvents$,\n    branch: branch$,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setBranch: (_branch: string) => {},\n    isThreadLoading: isThreadLoading$,\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    switchThread: (_threadId: string | null) => {},\n    joinStream: (_runId: string, _lastEventId?: string) => Promise.resolve(),\n    getMessagesMetadata: (_msg: BaseMessage, _idx?: number): MessageMetadata<Record<string, unknown>> | undefined => undefined,\n    getToolCalls: (_msg: CoreAIMessage): ToolCallWithResult[] => [],\n    lifecycle: {\n      streamStartedAt:     signal<number | null>(null),\n      streamErrorAt:       signal<{ at: number; classification: string } | null>(null),\n      interruptReceivedAt: signal<number | null>(null),\n      interruptResolvedAt: signal<number | null>(null),\n      threadCreatedAt:     signal<number | null>(null),\n      threadPersistedAt:   signal<number | null>(null),\n      toolCallStartedAt:   signal<number | null>(null),\n      toolCallCompletedAt: signal<number | null>(null),\n    },\n  } as MockLangGraphAgent;\n\n  return mock;\n}\n","import type {\n  AgentQueueEntry,\n  AgentTransport,\n  LangGraphSubmitOptions,\n  StreamEvent,\n} from '../agent.types';\nimport type { ThreadState } from '@langchain/langgraph-sdk';\nimport type { FakeAgentConfig } from '@threadplane/chat/testing';\n\nconst DEFAULT_TOKENS = ['Hello', ' from', ' the', ' fake', ' LangGraph', ' agent.'];\n\n/**\n * In-process AgentTransport that auto-streams a canned assistant reply.\n *\n * Backs `provideFakeAgent()`. Unlike `MockAgentTransport` (passive, driven\n * manually from specs), this transport emits its tokens automatically on\n * `stream()`, then completes — suitable for offline demos and integration tests.\n *\n * NOT for production use.\n */\nexport class FakeStreamTransport implements AgentTransport {\n  private readonly tokens: string[];\n  private readonly reasoningTokens: string[];\n  private readonly delayMs: number;\n\n  constructor(config: FakeAgentConfig = {}) {\n    this.tokens = config.tokens ?? DEFAULT_TOKENS;\n    this.reasoningTokens = config.reasoningTokens ?? [];\n    // Default 60ms matches @threadplane/ag-ui's FakeAgent so both adapters'\n    // provideFakeAgent() stream at the same cadence for the same config.\n    this.delayMs = config.delayMs ?? 60;\n  }\n\n  async *stream(\n    _assistantId: string,\n    _threadId: string | null,\n    _payload: unknown,\n    signal: AbortSignal,\n    _options?: LangGraphSubmitOptions,\n  ): AsyncIterable<StreamEvent> {\n    const id = 'fake-ai-1';\n\n    let reasoning = '';\n    for (const chunk of this.reasoningTokens) {\n      if (signal.aborted) return;\n      reasoning += chunk;\n      yield {\n        type: 'messages',\n        messages: [\n          { id, type: 'ai', content: '', additional_kwargs: { reasoning_content: reasoning } },\n        ],\n      } as unknown as StreamEvent;\n      if (this.delayMs > 0) await delay(this.delayMs);\n    }\n\n    let content = '';\n    for (const tok of this.tokens) {\n      if (signal.aborted) return;\n      content += tok;\n      yield {\n        type: 'messages',\n        messages: [{ id, type: 'ai', content }],\n      } as unknown as StreamEvent;\n      if (this.delayMs > 0) await delay(this.delayMs);\n    }\n  }\n\n  async createQueuedRun(\n    _assistantId: string,\n    threadId: string,\n    payload: unknown,\n    _signal: AbortSignal,\n    options?: LangGraphSubmitOptions,\n  ): Promise<AgentQueueEntry> {\n    return {\n      id: 'fake-queued-run',\n      threadId,\n      values: payload,\n      options: { ...options, multitaskStrategy: 'enqueue' },\n      createdAt: new Date(),\n    };\n  }\n\n  async cancelRun(_threadId: string, _runId: string, _signal: AbortSignal): Promise<void> {\n    // No-op: the fake has no real runs to cancel.\n    return;\n  }\n\n  async getHistory(_threadId: string, _signal: AbortSignal): Promise<ThreadState[]> {\n    return [];\n  }\n\n  async *joinStream(): AsyncIterable<StreamEvent> {\n    // No queued-run replay in the fake; yields nothing.\n    yield* [];\n  }\n}\n\nfunction delay(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { type Provider } from '@angular/core';\nimport type { FakeAgentConfig } from '@threadplane/chat/testing';\nimport { provideAgent } from '../agent.provider';\nimport { FakeStreamTransport } from './fake-stream.transport';\n\n/**\n * Wire an in-process fake LangGraph agent into Angular DI.\n *\n * Streams a canned assistant reply (see FakeAgentConfig) with no backend —\n * the symmetric counterpart to @threadplane/ag-ui's provideFakeAgent(). For\n * advanced manual scripting (tool calls, interrupts, multi-batch), provide\n * the agent yourself with\n * `provideAgent({ assistantId, transport: new MockAgentTransport(...) })`.\n *\n * @example\n * ```ts\n * TestBed.configureTestingModule({\n *   providers: [provideFakeAgent({ tokens: ['Hi from the fake LangGraph agent'] })],\n * });\n * ```\n */\nexport function provideFakeAgent(config: FakeAgentConfig = {}): Provider[] {\n  return provideAgent({\n    assistantId: 'fake',\n    transport: new FakeStreamTransport(config),\n  });\n}\n","import { Injectable, InjectionToken, inject, signal, type Signal, type WritableSignal } from '@angular/core';\nimport type { Client, Thread as SdkThread } from '@langchain/langgraph-sdk';\nimport type { Thread } from '@threadplane/chat';\nimport {\n  createLangGraphClient,\n  ɵcreateProtectedLangGraphClient,\n} from '../client/create-langgraph-client';\nimport { LANGGRAPH_CLIENT_OPTIONS } from '../client/client-options';\nimport {\n  createLangGraphRuntimeFetch,\n  createSafeRequestError,\n  sanitizeLangGraphClientOperationFailure,\n  ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER,\n} from '../runtime-operation-reporter';\n\n/**\n * Configuration consumed by {@link LangGraphThreadsAdapter}. Provide\n * via {@link LANGGRAPH_THREADS_CONFIG} (typically in app.config.ts):\n *\n * ```ts\n * providers: [\n *   { provide: LANGGRAPH_THREADS_CONFIG, useValue: {\n *       apiUrl: environment.langGraphApiUrl,\n *   }},\n * ],\n * ```\n *\n * The adapter expects backends to write the thread title to\n * `metadata.title`. Spec 2026-05-19-llm-generated-labels-design.md\n * originally proposed `metadata.thread_title` for cockpit caps but\n * we converged on `title` to match the canonical demo and avoid a\n * per-cap configuration knob.\n */\nexport interface LangGraphThreadsConfig {\n  /** Base URL for the LangGraph Platform API. Accepts both absolute\n   *  URLs and relative `/api`-style paths. */\n  apiUrl: string;\n  /** Fallback label for threads whose title hasn't been written yet\n   *  (e.g. created but never sent). Defaults to `'Untitled'`. */\n  titleFallback?: string;\n}\n\nexport const LANGGRAPH_THREADS_CONFIG = new InjectionToken<LangGraphThreadsConfig>(\n  'LANGGRAPH_THREADS_CONFIG',\n);\n\n/** Optional adapter clients can pass an explicit Client (e.g. for\n *  testing). When omitted, the adapter constructs one via\n *  {@link createLangGraphClient}. */\nexport const LANGGRAPH_CLIENT = new InjectionToken<Client>('LANGGRAPH_CLIENT');\n\n/**\n * SDK-backed thread store. Wraps `client.threads.*` and maps SDK\n * threads to the framework's {@link Thread} type for direct use with\n * `<chat-thread-list>` / `<chat-sidenav>`.\n *\n * Consumers wire the framework's `ThreadActionAdapter` to instance\n * methods (rename/delete/archive/pin/...) so the right-click menu\n * round-trips through the LangGraph SDK without per-app boilerplate.\n *\n * @example\n * ```ts\n * const svc = inject(LangGraphThreadsAdapter);\n * const actions: ThreadActionAdapter = {\n *   rename: (id, t) => svc.rename(id, t),\n *   delete: (id) => svc.delete(id),\n * };\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class LangGraphThreadsAdapter {\n  private readonly config = inject(LANGGRAPH_THREADS_CONFIG);\n  private readonly clientState = (() => {\n    const clientOptions = inject(LANGGRAPH_CLIENT_OPTIONS, { optional: true }) ?? undefined;\n    const reportOperationFailure =\n      inject(ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER, { optional: true }) ??\n      undefined;\n    const injectedClient = inject(LANGGRAPH_CLIENT, { optional: true });\n    const ownsProtectedClient =\n      injectedClient === null &&\n      (typeof clientOptions?.apiKey === 'string' ||\n        reportOperationFailure !== undefined);\n    return {\n      client:\n        injectedClient ??\n        (ownsProtectedClient\n          ? ɵcreateProtectedLangGraphClient(\n              this.config.apiUrl,\n              clientOptions,\n              createLangGraphRuntimeFetch(reportOperationFailure)\n            )\n          : createLangGraphClient(this.config.apiUrl, clientOptions)),\n      protectErrors:\n        typeof clientOptions?.apiKey === 'string' || ownsProtectedClient,\n      reportOperationFailure: ownsProtectedClient\n        ? reportOperationFailure\n        : undefined,\n    };\n  })();\n  private readonly client: Client = this.clientState.client;\n\n  private readonly fallback: string = this.config.titleFallback ?? 'Untitled';\n\n  private readonly _threads: WritableSignal<Thread[]> = signal<Thread[]>([]);\n  private readonly _archived: WritableSignal<Thread[]> = signal<Thread[]>([]);\n\n  /** Active (non-archived) threads, sorted with pinned first. */\n  readonly threads: Signal<Thread[]> = this._threads.asReadonly();\n  /** Threads whose `metadata.archived === true`. */\n  readonly archivedThreads: Signal<Thread[]> = this._archived.asReadonly();\n\n  /** Fetch the latest thread list from the server. Failures are\n   *  logged via `console.error` (not swallowed silently — silent\n   *  catches have masked prod issues in the past).\n   *\n   *  Invocation and resolution are logged at `console.debug` so prod\n   *  inspection can distinguish \"never called\" from \"called but\n   *  resolved empty\" from \"called and threw.\" This was prompted by a\n   *  demo.threadplane.ai cold-load bug where the sidenav stayed empty\n   *  with no visible signal. Tighten the log volume if it becomes\n   *  noisy. */\n  async refresh(): Promise<void> {\n    console.debug('[LangGraphThreadsAdapter.refresh] invoked');\n    try {\n      const list = await this.client.threads.search({ limit: 50 });\n      console.debug('[LangGraphThreadsAdapter.refresh] resolved', list.length);\n      const mapped = list.map((t) => this.toThread(t));\n      this._threads.set(\n        mapped\n          .filter((t) => t.status !== 'archived')\n          .sort((a, b) => {\n            const aP = a.pinned === true;\n            const bP = b.pinned === true;\n            if (aP !== bP) return Number(bP) - Number(aP);\n            if (aP && bP) {\n              const aO = typeof a['pinnedOrder'] === 'number' ? (a['pinnedOrder'] as number) : Infinity;\n              const bO = typeof b['pinnedOrder'] === 'number' ? (b['pinnedOrder'] as number) : Infinity;\n              return aO - bO;\n            }\n            return 0;\n          }),\n      );\n      this._archived.set(mapped.filter((t) => t.status === 'archived'));\n    } catch (e) {\n      console.error('[LangGraphThreadsAdapter.refresh] failed:', this.safeError(e));\n    }\n  }\n\n  /** Fetch a single thread by id. Returns `null` when the server\n   *  returns 404 (thread doesn't exist) so callers can distinguish\n   *  \"missing\" from \"couldn't reach the server\" — genuine network\n   *  errors rethrow. Used by URL-based thread routing to validate a\n   *  pasted/shared thread id before activating it. */\n  async getThread(threadId: string): Promise<Thread | null> {\n    try {\n      const t = await this.client.threads.get(threadId);\n      return this.toThread(t);\n    } catch (e) {\n      // SDK throws HTTPError-like objects without a typed error class;\n      // sniff status on the error or its nested response. Treat both\n      // 404 (server says \"no such thread\") and 422 (server says \"id\n      // isn't even a valid UUID\") as \"missing\" — both warrant the\n      // same caller behavior (redirect to a fresh chat).\n      const status = safeThreadErrorStatus(e);\n      if (status === 404 || status === 422) return null;\n      throw this.safeError(e);\n    }\n  }\n\n  async create(metadata: Record<string, unknown> = {}): Promise<string | null> {\n    try {\n      const t = await this.client.threads.create({ metadata });\n      await this.refresh();\n      return t.thread_id;\n    } catch (e) {\n      console.error('[LangGraphThreadsAdapter.create] failed:', this.safeError(e));\n      return null;\n    }\n  }\n\n  async delete(threadId: string): Promise<void> {\n    await this.request(() => this.client.threads.delete(threadId));\n    await this.refresh();\n  }\n\n  async rename(threadId: string, newTitle: string): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { title: newTitle } }));\n    await this.refresh();\n  }\n\n  async archive(threadId: string): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { archived: true } }));\n    await this.refresh();\n  }\n\n  async unarchive(threadId: string): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { archived: false } }));\n    await this.refresh();\n  }\n\n  async pin(threadId: string): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { pinned: true } }));\n    await this.refresh();\n  }\n\n  async unpin(threadId: string): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { pinned: false } }));\n    await this.refresh();\n  }\n\n  async moveToProject(threadId: string, projectId: string | null): Promise<void> {\n    await this.request(() => this.client.threads.update(threadId, { metadata: { projectId } }));\n    await this.refresh();\n  }\n\n  /** Re-stamp `metadata.pinnedOrder = 0,1,2,...` for the pinned slice\n   *  to reflect the new ordering. */\n  async reorderPinned(threadId: string, beforeId: string | null): Promise<void> {\n    const current = this._threads().filter((t) => t.pinned === true);\n    const moved = current.find((t) => t.id === threadId);\n    if (!moved) return;\n    const rest = current.filter((t) => t.id !== threadId);\n    const next: Thread[] = [];\n    for (const t of rest) {\n      if (t.id === beforeId) next.push(moved);\n      next.push(t);\n    }\n    if (beforeId === null) next.push(moved);\n\n    await this.request(() =>\n      Promise.all(\n        next.map((t, idx) =>\n          this.client.threads.update(t.id, { metadata: { pinnedOrder: idx } }),\n        ),\n      ),\n    );\n    await this.refresh();\n  }\n\n  private async request<T>(operation: () => Promise<T>): Promise<T> {\n    try {\n      return await operation();\n    } catch (error) {\n      throw this.safeError(error);\n    }\n  }\n\n  private safeError(error: unknown): unknown {\n    if (!this.clientState.protectErrors) return error;\n    if (this.clientState.reportOperationFailure !== undefined) {\n      return sanitizeLangGraphClientOperationFailure(\n        error,\n        this.clientState.reportOperationFailure\n      );\n    }\n    return createSafeRequestError();\n  }\n\n  private toThread(t: SdkThread): Thread {\n    const meta = (t.metadata ?? {}) as Record<string, unknown>;\n    const rawTitle = meta['title'];\n    const archived = meta['archived'] === true;\n    const pinned = meta['pinned'] === true;\n    const projectId = typeof meta['projectId'] === 'string' && (meta['projectId'] as string).length > 0\n      ? (meta['projectId'] as string)\n      : null;\n    const pinnedOrder = typeof meta['pinnedOrder'] === 'number' ? (meta['pinnedOrder'] as number) : undefined;\n    return {\n      id: t.thread_id,\n      title: typeof rawTitle === 'string' && rawTitle.length > 0 ? rawTitle : this.fallback,\n      status: archived ? 'archived' : 'active',\n      pinned,\n      projectId,\n      pinnedOrder,\n      updatedAt: t.updated_at ? Date.parse(t.updated_at) : undefined,\n    };\n  }\n}\n\nfunction safeThreadErrorStatus(error: unknown): number | null {\n  try {\n    if ((typeof error !== 'object' || error === null) && typeof error !== 'function') return null;\n    const own = Object.getOwnPropertyDescriptor(error, 'status');\n    if (own && 'value' in own && typeof own.value === 'number') return own.value;\n    const responseDescriptor = Object.getOwnPropertyDescriptor(error, 'response');\n    if (!responseDescriptor || !('value' in responseDescriptor)) return null;\n    const response = responseDescriptor.value as unknown;\n    if ((typeof response !== 'object' || response === null) && typeof response !== 'function') return null;\n    const nested = Object.getOwnPropertyDescriptor(response, 'status');\n    return nested && 'value' in nested && typeof nested.value === 'number'\n      ? nested.value\n      : null;\n  } catch {\n    return null;\n  }\n}\n","import { effect, type Signal } from '@angular/core';\nimport type { LangGraphAgent } from '../agent.types';\n\n/**\n * Call `fn` whenever the agent's status transitions out of `'running'`\n * (i.e. when a run completes — success, error, or interrupt). Useful\n * for refreshing thread lists, telemetry, or any other state that\n * lags the agent.\n *\n * Must be called within an injection context (constructor or\n * `runInInjectionContext`) — uses Angular's `effect` under the hood.\n *\n * @example\n * ```ts\n * constructor() {\n *   refreshOnRunEnd(this.agent, () => this.threads.refresh());\n * }\n * ```\n */\nexport function refreshOnRunEnd(agent: LangGraphAgent, fn: () => void | Promise<void>): void {\n  let lastStatus = agent.status();\n  effect(() => {\n    const status = agent.status();\n    if (lastStatus === 'running' && status !== 'running') {\n      void fn();\n    }\n    lastStatus = status;\n  });\n}\n\n/**\n * Call `fn` whenever any of the watched signals transitions from a\n * truthy \"active\" value to a non-active value. Generic version of\n * {@link refreshOnRunEnd} for callers tracking custom state machines.\n *\n * Must be called within an injection context.\n */\nexport function refreshOnTransition<T>(\n  watch: Signal<T>,\n  isActive: (v: T) => boolean,\n  fn: () => void | Promise<void>,\n): void {\n  let lastActive = isActive(watch());\n  effect(() => {\n    const active = isActive(watch());\n    if (lastActive && !active) void fn();\n    lastActive = active;\n  });\n}\n","// Provider\nexport { provideAgent } from './lib/agent.provider';\nexport type { AgentConfig } from './lib/agent.provider';\n\n// Symmetric inject helper — matches @threadplane/ag-ui's injectAgent()\nexport { injectAgent } from './lib/inject-agent';\n\n// Lifecycle monitoring\nexport { AGENT_LIFECYCLE } from './lib/lifecycle';\nexport type { AgentLifecycle } from './lib/lifecycle';\nexport { AgentLifecycleRegistry } from './lib/agent-lifecycle-registry';\n\n// Public types\nexport type {\n  AgentOptions,\n  LangGraphClientOptions,\n  AgentBranchTree,\n  AgentBranchTreeFork,\n  AgentBranchTreeNode,\n  AgentQueue,\n  AgentQueueEntry,\n  LangGraphAgent,\n  LangGraphMultitaskStrategy,\n  LangGraphSubmitOptions,\n  AgentTransport,\n  CustomStreamEvent,\n  StreamEvent,\n  SubagentStreamRef,\n} from './lib/agent.types';\n\n// Re-export from SDK (consumers import from angular, not langgraph-sdk)\nexport type { BagTemplate, InferBag, Interrupt, ThreadState, SubmitOptions }\n  from './lib/agent.types';\n\n// Re-export ResourceStatus shim for convenience\nexport { ResourceStatus } from './lib/agent.types';\n\n// Test utilities (always exported — tree-shaken in prod builds)\nexport { MockAgentTransport } from './lib/transport/mock-stream.transport';\nexport { FetchStreamTransport } from './lib/transport/fetch-stream.transport';\n\n// Mock test utility for LangGraph agent\nexport { mockLangGraphAgent } from './lib/testing/mock-langgraph-agent';\nexport type { MockLangGraphAgent } from './lib/testing/mock-langgraph-agent';\nexport { provideFakeAgent } from './lib/testing/provide-fake-agent';\n// Low-level auto-emitting fake transport backing provideFakeAgent — exported\n// for advanced manual wiring (parity with @threadplane/ag-ui's FakeAgent).\nexport { FakeStreamTransport } from './lib/testing/fake-stream.transport';\n\n// Citation normalizer — useful for advanced consumers building custom adapters\n// or bridging non-LangGraph message shapes into tplane Citation[].\nexport { extractCitations } from './lib/internals/extract-citations';\n\n// SDK Client helper — handles the SDK's absolute-URL requirement so\n// `/api`-style relative paths work in browser contexts.\nexport { createLangGraphClient, toAbsoluteApiUrl } from './lib/client/create-langgraph-client';\nexport { LANGGRAPH_CLIENT_OPTIONS } from './lib/client/client-options';\nexport { ɵLANGGRAPH_RUNTIME_OPERATION_REPORTER } from './lib/runtime-operation-reporter';\nexport type { RuntimeOperationFailureReporter as ɵLangGraphRuntimeOperationFailureReporter } from './lib/runtime-operation-reporter';\n\n// SDK-backed thread store — drop-in replacement for the\n// hand-rolled ThreadsService that consumers used to duplicate.\nexport {\n  LangGraphThreadsAdapter,\n  LANGGRAPH_THREADS_CONFIG,\n  LANGGRAPH_CLIENT,\n} from './lib/threads/threads-adapter';\nexport type { LangGraphThreadsConfig } from './lib/threads/threads-adapter';\n\n// Lifecycle helper for hooking refreshes onto agent state transitions.\nexport { refreshOnRunEnd, refreshOnTransition } from './lib/threads/refresh-on';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getBaseEventType","isRecord","isMessagesEvent","isAiMessageWithToolCalls","isToolMessage","mergeMessages","extractText","takeUntil"],"mappings":"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"}