{"version":3,"file":"remote-run-stream.cjs","names":["GraphRunStream","#client","#thread","#runId","#abortController","StreamMux","#iterateEvents","#iterateLifecycle","#cancelAndClose"],"sources":["../../src/pregel/remote-run-stream.ts"],"sourcesContent":["import type { Channel, Event } from \"@langchain/protocol\";\nimport type { Client, ThreadStream } from \"@langchain/langgraph-sdk\";\n\nimport { GraphRunStream, SubgraphRunStream } from \"../stream/run-stream.js\";\nimport { StreamMux } from \"../stream/mux.js\";\nimport type {\n  ChatModelStreamHandle,\n  InterruptPayload,\n  ProtocolEvent,\n} from \"../stream/types.js\";\nimport type { LifecycleEntry } from \"../stream/transformers/index.js\";\n\nconst REMOTE_V3_CHANNELS: Channel[] = [\n  \"values\",\n  \"updates\",\n  \"messages\",\n  \"tools\",\n  \"custom\",\n  \"tasks\",\n  \"checkpoints\",\n  \"lifecycle\",\n  \"input\",\n];\n\n/**\n * Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.\n */\nexport class RemoteGraphRunStream<\n  TValues = Record<string, unknown>,\n  TExtensions extends Record<string, unknown> = Record<string, unknown>,\n> extends GraphRunStream<TValues, TExtensions> {\n  readonly #client: Client;\n\n  readonly #thread: ThreadStream<TExtensions>;\n\n  readonly #runId: string | undefined;\n\n  readonly #abortController: AbortController;\n\n  constructor(params: {\n    client: Client;\n    thread: ThreadStream<TExtensions>;\n    runId?: string;\n    abortController?: AbortController;\n  }) {\n    const abortController = params.abortController ?? new AbortController();\n    super(\n      [],\n      new StreamMux(),\n      0,\n      0,\n      params.thread.extensions as TExtensions,\n      abortController\n    );\n    this.#client = params.client;\n    this.#thread = params.thread;\n    this.#runId = params.runId;\n    this.#abortController = abortController;\n  }\n\n  override [Symbol.asyncIterator](): AsyncIterator<ProtocolEvent> {\n    return this.#iterateEvents()[Symbol.asyncIterator]();\n  }\n\n  override get subgraphs(): AsyncIterable<SubgraphRunStream> {\n    const subgraphs = this.#thread.subgraphs as unknown;\n    return subgraphs as AsyncIterable<SubgraphRunStream>;\n  }\n\n  override get values(): AsyncIterable<TValues> & PromiseLike<TValues> {\n    return this.#thread.values as AsyncIterable<TValues> & PromiseLike<TValues>;\n  }\n\n  override get messages(): AsyncIterable<ChatModelStreamHandle> {\n    const messages = this.#thread.messages as unknown;\n    return messages as AsyncIterable<ChatModelStreamHandle>;\n  }\n\n  override get lifecycle(): AsyncIterable<LifecycleEntry> {\n    return this.#iterateLifecycle();\n  }\n\n  override messagesFrom(node: string): AsyncIterable<ChatModelStreamHandle> {\n    const messages = this.messages;\n    return {\n      async *[Symbol.asyncIterator]() {\n        for await (const message of messages) {\n          if (message.node === node) {\n            yield message;\n          }\n        }\n      },\n    };\n  }\n\n  override get output(): Promise<TValues> {\n    return this.#thread.output as Promise<TValues>;\n  }\n\n  override get interrupted(): boolean {\n    return this.#thread.interrupted;\n  }\n\n  override get interrupts(): readonly InterruptPayload[] {\n    return this.#thread.interrupts as readonly InterruptPayload[];\n  }\n\n  override abort(reason?: unknown): void {\n    if (this.#abortController.signal.aborted) return;\n    this.#abortController.abort(reason);\n    void this.#cancelAndClose();\n  }\n\n  override get signal(): AbortSignal {\n    return this.#abortController.signal;\n  }\n\n  get thread(): ThreadStream<TExtensions> {\n    return this.#thread;\n  }\n\n  async #cancelAndClose(): Promise<void> {\n    try {\n      if (this.#runId != null) {\n        await this.#client.runs.cancel(\n          this.#thread.threadId,\n          this.#runId,\n          false\n        );\n      }\n    } catch {\n      // Best effort: closing the ThreadStream still releases client resources.\n    }\n    try {\n      await this.#thread.close();\n    } catch {\n      // Best effort.\n    }\n  }\n\n  async *#iterateEvents(): AsyncGenerator<ProtocolEvent> {\n    const subscription = await this.#thread.subscribe({\n      channels: REMOTE_V3_CHANNELS,\n    });\n    try {\n      for await (const event of subscription) {\n        yield event as unknown as ProtocolEvent;\n      }\n    } finally {\n      await subscription.unsubscribe();\n    }\n  }\n\n  async *#iterateLifecycle(): AsyncGenerator<LifecycleEntry> {\n    const subscription = await this.#thread.subscribe({\n      channels: [\"lifecycle\"],\n    });\n    try {\n      for await (const event of subscription) {\n        yield eventToLifecycleEntry(event);\n      }\n    } finally {\n      await subscription.unsubscribe();\n    }\n  }\n}\n\nfunction eventToLifecycleEntry(event: Event): LifecycleEntry {\n  return {\n    ...(event.params.data as Record<string, unknown>),\n    namespace: event.params.namespace,\n    timestamp: event.params.timestamp,\n  } as LifecycleEntry;\n}\n"],"mappings":";;;AAYA,MAAM,qBAAgC;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAKD,IAAa,uBAAb,cAGUA,mBAAAA,eAAqC;CAC7C;CAEA;CAEA;CAEA;CAEA,YAAY,QAKT;EACD,MAAM,kBAAkB,OAAO,mBAAmB,IAAI,iBAAiB;AACvE,QACE,EAAE,EACF,IAAIK,YAAAA,WAAW,EACf,GACA,GACA,OAAO,OAAO,YACd,gBACD;AACD,QAAA,SAAe,OAAO;AACtB,QAAA,SAAe,OAAO;AACtB,QAAA,QAAc,OAAO;AACrB,QAAA,kBAAwB;;CAG1B,CAAU,OAAO,iBAA+C;AAC9D,SAAO,MAAA,eAAqB,CAAC,OAAO,gBAAgB;;CAGtD,IAAa,YAA8C;AAEzD,SADkB,MAAA,OAAa;;CAIjC,IAAa,SAAwD;AACnE,SAAO,MAAA,OAAa;;CAGtB,IAAa,WAAiD;AAE5D,SADiB,MAAA,OAAa;;CAIhC,IAAa,YAA2C;AACtD,SAAO,MAAA,kBAAwB;;CAGjC,aAAsB,MAAoD;EACxE,MAAM,WAAW,KAAK;AACtB,SAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,cAAW,MAAM,WAAW,SAC1B,KAAI,QAAQ,SAAS,KACnB,OAAM;KAIb;;CAGH,IAAa,SAA2B;AACtC,SAAO,MAAA,OAAa;;CAGtB,IAAa,cAAuB;AAClC,SAAO,MAAA,OAAa;;CAGtB,IAAa,aAA0C;AACrD,SAAO,MAAA,OAAa;;CAGtB,MAAe,QAAwB;AACrC,MAAI,MAAA,gBAAsB,OAAO,QAAS;AAC1C,QAAA,gBAAsB,MAAM,OAAO;AAC9B,QAAA,gBAAsB;;CAG7B,IAAa,SAAsB;AACjC,SAAO,MAAA,gBAAsB;;CAG/B,IAAI,SAAoC;AACtC,SAAO,MAAA;;CAGT,OAAA,iBAAuC;AACrC,MAAI;AACF,OAAI,MAAA,SAAe,KACjB,OAAM,MAAA,OAAa,KAAK,OACtB,MAAA,OAAa,UACb,MAAA,OACA,MACD;UAEG;AAGR,MAAI;AACF,SAAM,MAAA,OAAa,OAAO;UACpB;;CAKV,QAAA,gBAAuD;EACrD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,oBACX,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM;YAEA;AACR,SAAM,aAAa,aAAa;;;CAIpC,QAAA,mBAA2D;EACzD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,CAAC,YAAY,EACxB,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM,sBAAsB,MAAM;YAE5B;AACR,SAAM,aAAa,aAAa;;;;AAKtC,SAAS,sBAAsB,OAA8B;AAC3D,QAAO;EACL,GAAI,MAAM,OAAO;EACjB,WAAW,MAAM,OAAO;EACxB,WAAW,MAAM,OAAO;EACzB"}