{"version":3,"file":"subgraphs.cjs","names":["#session","#messagesIterable","MultiCursorBuffer","StreamingMessageAssembler","#startProjection","#valuesProjection","#outputPromise","#toolCallsIterable","ToolCallAssembler","toClientAssembledToolCall","#subgraphsIterable","#subagentsIterable","#ensureMediaDispatcher","#audioBuffer","#imagesBuffer","#videoBuffer","#filesBuffer","#mediaDispatcherStarted","MediaAssembler","#source","#parentNamespace","#discovered","#pendingToolStarts","#pendingToolCallHandles","#queue","#waiters","#processToolEvent","#sourcePump","#processEvent","#emit","#closed","#start"],"sources":["../../../../src/client/stream/handles/subgraphs.ts"],"sourcesContent":["import type {\n  Channel,\n  Event,\n  LifecycleCause,\n  LifecycleEvent,\n  MessagesEvent,\n  SubscribeParams,\n  ToolsEvent,\n  ValuesEvent,\n} from \"@langchain/protocol\";\nimport type { SubscriptionHandle } from \"../index.js\";\nimport { MultiCursorBuffer } from \"../multi-cursor-buffer.js\";\nimport { StreamingMessageAssembler } from \"../messages.js\";\nimport type { StreamingMessage, StreamingMessageHandle } from \"../messages.js\";\nimport { ToolCallAssembler, toClientAssembledToolCall } from \"./tools.js\";\nimport type { ClientAssembledToolCall } from \"./tools.js\";\nimport { MediaAssembler } from \"../media.js\";\nimport type {\n  AudioMedia,\n  FileMedia,\n  ImageMedia,\n  VideoMedia,\n} from \"../media.js\";\nimport type {\n  EventForChannel,\n  EventForChannels,\n  SubscribeOptions,\n  YieldForChannel,\n  YieldForChannels,\n} from \"../types.js\";\nimport type { SubagentHandle } from \"./subagents.js\";\n\n/**\n * Minimal subscription surface that {@link SubgraphHandle} and\n * {@link SubagentHandle} delegate to. Typed to match the\n * `Session.subscribe` raw-channel overloads without importing the\n * full `Session` class (avoids circular dependency).\n */\nexport interface Subscribable {\n  subscribe<TChannel extends Channel>(\n    channel: TChannel,\n    options?: SubscribeOptions\n  ): Promise<\n    SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n  >;\n  subscribe<const TChannels extends readonly Channel[]>(\n    channels: TChannels,\n    options?: SubscribeOptions\n  ): Promise<\n    SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n  >;\n  subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n}\n\n/**\n * Discovered subgraph within a streaming session.\n *\n * Mirrors the in-process `SubgraphRunStream` pattern: each subgraph\n * has `name`, `index`, `namespace`, and lazy getters for projections\n * scoped to this subgraph's namespace.\n *\n * ```ts\n * for await (const sub of session.subgraphs) {\n *   for await (const msg of sub.messages) { ... }\n *   const state = await sub.output;\n * }\n * ```\n */\nexport class SubgraphHandle {\n  readonly name: string;\n  readonly index: number;\n  readonly namespace: string[];\n  /**\n   * Non-empty when upstream attached a `cause` to this subgraph's\n   * `lifecycle.started` event. Population is product-specific and\n   * performed by stream transformers on the runtime side (e.g.\n   * deepagents' `SubagentTransformer` emits\n   * `{ type: \"toolCall\", tool_call_id }`). Generic clients should\n   * treat `cause.type` as an open enum — the protocol allows future\n   * variants (`send`, `edge`, ...) to be forwarded verbatim without\n   * a SDK bump.\n   */\n  readonly cause?: LifecycleCause;\n  readonly graphName?: string;\n  /**\n   * Raw `tool-started` event that triggered this subgraph, when\n   * `cause.type === \"toolCall\"` and the matching event has been\n   * observed on the `tools` channel.\n   */\n  toolStartedEvent?: ToolsEvent;\n  readonly #session: Subscribable;\n\n  #messagesIterable?: AsyncIterable<StreamingMessage>;\n  #valuesProjection?: AsyncIterable<unknown> & PromiseLike<unknown>;\n  #toolCallsIterable?: AsyncIterable<ClientAssembledToolCall>;\n  #subgraphsIterable?: AsyncIterable<SubgraphHandle>;\n  #subagentsIterable?: AsyncIterable<SubagentHandle>;\n  #outputPromise?: Promise<unknown>;\n\n  #mediaDispatcherStarted = false;\n  #audioBuffer?: MultiCursorBuffer<AudioMedia>;\n  #imagesBuffer?: MultiCursorBuffer<ImageMedia>;\n  #videoBuffer?: MultiCursorBuffer<VideoMedia>;\n  #filesBuffer?: MultiCursorBuffer<FileMedia>;\n\n  constructor(\n    name: string,\n    index: number,\n    namespace: string[],\n    session: Subscribable,\n    options?: {\n      cause?: LifecycleCause;\n      graphName?: string;\n      toolStartedEvent?: ToolsEvent;\n    }\n  ) {\n    this.name = name;\n    this.index = index;\n    this.namespace = namespace;\n    this.cause = options?.cause;\n    this.graphName = options?.graphName;\n    this.toolStartedEvent = options?.toolStartedEvent;\n    this.#session = session;\n  }\n\n  get messages(): AsyncIterable<StreamingMessageHandle> {\n    if (this.#messagesIterable) return this.#messagesIterable;\n    const buffer = new MultiCursorBuffer<StreamingMessage>();\n    this.#messagesIterable = buffer;\n    const assembler = new StreamingMessageAssembler();\n    void this.#startProjection(\n      [\"messages\"],\n      (event) => {\n        if (event.method !== \"messages\") return;\n        const msg = assembler.consume(event as MessagesEvent);\n        if (msg) buffer.push(msg);\n      },\n      () => buffer.close()\n    );\n    return buffer;\n  }\n\n  get values(): AsyncIterable<unknown> & PromiseLike<unknown> {\n    if (this.#valuesProjection) return this.#valuesProjection;\n    const buffer = new MultiCursorBuffer<unknown>();\n    let lastValue: unknown;\n    let resolveOutput!: (value: unknown) => void;\n    const outputPromise = new Promise<unknown>((resolve) => {\n      resolveOutput = resolve;\n    });\n    this.#outputPromise = outputPromise;\n    const projection = Object.assign(buffer, {\n      then: <TResult1 = unknown, TResult2 = never>(\n        onfulfilled?:\n          | ((value: unknown) => TResult1 | PromiseLike<TResult1>)\n          | null,\n        onrejected?:\n          | ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n          | null\n      ): Promise<TResult1 | TResult2> =>\n        outputPromise.then(onfulfilled, onrejected),\n    }) as AsyncIterable<unknown> & PromiseLike<unknown>;\n    this.#valuesProjection = projection;\n    void this.#startProjection(\n      [\"values\"],\n      (event) => {\n        if (event.method !== \"values\") return;\n        const data = (event as ValuesEvent).params.data;\n        lastValue = data;\n        buffer.push(data);\n      },\n      () => {\n        resolveOutput(lastValue);\n        buffer.close();\n      }\n    );\n    return projection;\n  }\n\n  get toolCalls(): AsyncIterable<ClientAssembledToolCall> {\n    if (this.#toolCallsIterable) return this.#toolCallsIterable;\n    const buffer = new MultiCursorBuffer<ClientAssembledToolCall>();\n    this.#toolCallsIterable = buffer;\n    const assembler = new ToolCallAssembler();\n    void this.#startProjection(\n      [\"tools\"],\n      (event) => {\n        if (event.method !== \"tools\") return;\n        const tc = assembler.consume(event as ToolsEvent);\n        if (tc) buffer.push(toClientAssembledToolCall(tc));\n      },\n      () => buffer.close()\n    );\n    return buffer;\n  }\n\n  get subgraphs(): AsyncIterable<SubgraphHandle> {\n    if (this.#subgraphsIterable) return this.#subgraphsIterable;\n    const buffer = new MultiCursorBuffer<SubgraphHandle>();\n    this.#subgraphsIterable = buffer;\n    void (async () => {\n      const rawHandle = await this.#session.subscribe({\n        channels: [\"lifecycle\", \"tools\"],\n        namespaces: [this.namespace],\n      });\n      const discovery = new SubgraphDiscoveryHandle(\n        rawHandle,\n        this.#session,\n        this.namespace\n      );\n      for await (const sub of discovery) {\n        buffer.push(sub);\n      }\n      buffer.close();\n    })();\n    return buffer;\n  }\n\n  get subagents(): AsyncIterable<SubagentHandle> {\n    if (this.#subagentsIterable) return this.#subagentsIterable;\n    const buffer = new MultiCursorBuffer<SubagentHandle>();\n    this.#subagentsIterable = buffer;\n    void (async () => {\n      const rawHandle = await this.#session.subscribe({\n        channels: [\"tools\", \"lifecycle\"],\n        namespaces: [this.namespace],\n      });\n      const { SubagentDiscoveryHandle: Discovery } =\n        await import(\"./subagents.js\");\n      const discovery = new Discovery(rawHandle, this.#session);\n      for await (const sub of discovery) {\n        buffer.push(sub);\n      }\n      buffer.close();\n    })();\n    return buffer;\n  }\n\n  get audio(): AsyncIterable<AudioMedia> {\n    this.#ensureMediaDispatcher();\n    return this.#audioBuffer!;\n  }\n\n  get images(): AsyncIterable<ImageMedia> {\n    this.#ensureMediaDispatcher();\n    return this.#imagesBuffer!;\n  }\n\n  get video(): AsyncIterable<VideoMedia> {\n    this.#ensureMediaDispatcher();\n    return this.#videoBuffer!;\n  }\n\n  get files(): AsyncIterable<FileMedia> {\n    this.#ensureMediaDispatcher();\n    return this.#filesBuffer!;\n  }\n\n  get output(): Promise<unknown> {\n    void this.values;\n    return this.#outputPromise!;\n  }\n\n  #ensureMediaDispatcher(): void {\n    if (this.#mediaDispatcherStarted) return;\n    this.#mediaDispatcherStarted = true;\n    const audio = new MultiCursorBuffer<AudioMedia>();\n    const images = new MultiCursorBuffer<ImageMedia>();\n    const video = new MultiCursorBuffer<VideoMedia>();\n    const files = new MultiCursorBuffer<FileMedia>();\n    this.#audioBuffer = audio;\n    this.#imagesBuffer = images;\n    this.#videoBuffer = video;\n    this.#filesBuffer = files;\n    const assembler = new MediaAssembler({\n      onAudio: (m: AudioMedia) => audio.push(m),\n      onImage: (m: ImageMedia) => images.push(m),\n      onVideo: (m: VideoMedia) => video.push(m),\n      onFile: (m: FileMedia) => files.push(m),\n    });\n    void this.#startProjection(\n      [\"messages\"],\n      (event) => {\n        if (event.method !== \"messages\") return;\n        assembler.consume(event as MessagesEvent);\n      },\n      () => {\n        assembler.close();\n        audio.close();\n        images.close();\n        video.close();\n        files.close();\n      }\n    );\n  }\n\n  /**\n   * Create a raw channel subscription scoped to this subgraph's namespace.\n   */\n  subscribe<TChannel extends Channel>(\n    channel: TChannel,\n    options?: SubscribeOptions\n  ): Promise<\n    SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n  >;\n  subscribe<const TChannels extends readonly Channel[]>(\n    channels: TChannels,\n    options?: SubscribeOptions\n  ): Promise<\n    SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n  >;\n  subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n  subscribe(\n    paramsOrChannels: SubscribeParams | Channel | string | readonly Channel[],\n    options: SubscribeOptions = {}\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ): Promise<any> {\n    if (\n      typeof paramsOrChannels === \"object\" &&\n      !Array.isArray(paramsOrChannels) &&\n      \"channels\" in paramsOrChannels\n    ) {\n      return this.#session.subscribe({\n        ...paramsOrChannels,\n        namespaces: paramsOrChannels.namespaces ?? [this.namespace],\n      });\n    }\n\n    return this.#session.subscribe(paramsOrChannels as Channel, {\n      ...options,\n      namespaces: options.namespaces ?? [this.namespace],\n    });\n  }\n\n  async #startProjection(\n    channels: Channel[],\n    onEvent: (event: Event) => void,\n    onDone: () => void\n  ): Promise<void> {\n    try {\n      const rawHandle = await this.#session.subscribe({\n        channels,\n        namespaces: [this.namespace],\n      });\n      for await (const event of rawHandle) {\n        onEvent(event);\n      }\n    } finally {\n      onDone();\n    }\n  }\n}\n\n/**\n * Async iterable that yields {@link SubgraphHandle} instances as new\n * subgraph namespaces are discovered from `lifecycle` events.\n *\n * Mirrors the in-process `run.subgraphs` pattern. A new subgraph is\n * discovered when a `lifecycle` event with `event: \"started\"` is\n * received at a namespace depth of exactly `parentDepth + 1`.\n */\nexport class SubgraphDiscoveryHandle implements AsyncIterable<SubgraphHandle> {\n  readonly #source: SubscriptionHandle<Event>;\n  readonly #session: Subscribable;\n  readonly #parentNamespace: string[];\n  readonly #discovered = new Set<string>();\n  readonly #pendingToolStarts = new Map<string, ToolsEvent>();\n  readonly #pendingToolCallHandles = new Map<string, SubgraphHandle>();\n  readonly #queue: SubgraphHandle[] = [];\n  readonly #waiters: Array<(value: IteratorResult<SubgraphHandle>) => void> =\n    [];\n  #sourcePump?: Promise<void>;\n  #closed = false;\n\n  constructor(\n    source: SubscriptionHandle<Event>,\n    session: Subscribable,\n    parentNamespace: string[] = []\n  ) {\n    this.#source = source;\n    this.#session = session;\n    this.#parentNamespace = parentNamespace;\n  }\n\n  #emit(handle: SubgraphHandle): void {\n    const waiter = this.#waiters.shift();\n    if (waiter) {\n      waiter({ done: false, value: handle });\n    } else {\n      this.#queue.push(handle);\n    }\n  }\n\n  #processToolEvent(event: Event): boolean {\n    if (event.method !== \"tools\") return false;\n    const tools = event as ToolsEvent;\n    const data = tools.params.data as Record<string, unknown>;\n    if (data.event !== \"tool-started\") return true;\n\n    const toolCallId = data.tool_call_id as string | undefined;\n    if (!toolCallId) return true;\n\n    const pendingHandle = this.#pendingToolCallHandles.get(toolCallId);\n    if (pendingHandle) {\n      pendingHandle.toolStartedEvent = tools;\n      this.#pendingToolCallHandles.delete(toolCallId);\n      return true;\n    }\n\n    this.#pendingToolStarts.set(toolCallId, tools);\n    return true;\n  }\n\n  #processEvent(event: Event): SubgraphHandle | undefined {\n    if (this.#processToolEvent(event)) return undefined;\n    if (event.method !== \"lifecycle\") return undefined;\n    const lifecycle = event as LifecycleEvent;\n    if (lifecycle.params.data.event !== \"started\") return undefined;\n\n    const ns = event.params.namespace;\n    if (ns.length !== this.#parentNamespace.length + 1) return undefined;\n\n    const isChild = this.#parentNamespace.every((seg, i) => ns[i] === seg);\n    if (!isChild) return undefined;\n\n    const nsKey = ns.join(\"/\");\n    if (this.#discovered.has(nsKey)) return undefined;\n    this.#discovered.add(nsKey);\n\n    const lastSegment = ns[ns.length - 1] ?? \"\";\n    const colonIdx = lastSegment.lastIndexOf(\":\");\n    let name: string;\n    let index: number;\n    if (colonIdx >= 0) {\n      name = lastSegment.slice(0, colonIdx);\n      const suffix = lastSegment.slice(colonIdx + 1);\n      index = /^\\d+$/.test(suffix) ? Number(suffix) : 0;\n    } else {\n      name = lastSegment;\n      index = 0;\n    }\n\n    const data = lifecycle.params.data as unknown as Record<string, unknown>;\n    const cause =\n      data.cause && typeof data.cause === \"object\"\n        ? (data.cause as LifecycleCause)\n        : undefined;\n    let toolStartedEvent: ToolsEvent | undefined;\n    if (cause?.type === \"toolCall\") {\n      const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n      if (toolCallId) {\n        toolStartedEvent = this.#pendingToolStarts.get(toolCallId);\n        this.#pendingToolStarts.delete(toolCallId);\n      }\n    }\n\n    const handle = new SubgraphHandle(name, index, [...ns], this.#session, {\n      cause,\n      graphName: data.graph_name as string | undefined,\n      toolStartedEvent,\n    });\n    if (cause?.type === \"toolCall\" && toolStartedEvent == null) {\n      const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n      if (toolCallId) this.#pendingToolCallHandles.set(toolCallId, handle);\n    }\n    return handle;\n  }\n\n  #start(): void {\n    if (this.#sourcePump) return;\n    this.#sourcePump = (async () => {\n      for await (const event of this.#source) {\n        const handle = this.#processEvent(event);\n        if (!handle) continue;\n        this.#emit(handle);\n      }\n      this.#pendingToolStarts.clear();\n      this.#pendingToolCallHandles.clear();\n      this.#closed = true;\n      while (this.#waiters.length > 0) {\n        this.#waiters.shift()?.({ done: true, value: undefined });\n      }\n    })();\n  }\n\n  async close(): Promise<void> {\n    this.#closed = true;\n    await this.#source.unsubscribe();\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<SubgraphHandle> {\n    this.#start();\n    return {\n      next: async () => {\n        if (this.#queue.length > 0) {\n          return { done: false, value: this.#queue.shift()! };\n        }\n        if (this.#closed) {\n          return { done: true, value: undefined };\n        }\n        return await new Promise<IteratorResult<SubgraphHandle>>((resolve) => {\n          this.#waiters.push(resolve);\n        });\n      },\n      return: async () => {\n        await this.close();\n        return { done: true, value: undefined };\n      },\n    };\n  }\n}\n"],"mappings":"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"}