LangChain Reference home pageLangChain ReferenceLangChain Reference
  • GitHub
  • Main Docs
Deep Agents
LangChain
LangGraph
Integrations
LangSmith
  • Overview
  • Getting started
  • injectStream
  • Selectors
  • Interrupts & headless tools
  • Subagents & subgraphs
  • Fork & edit from a checkpoint
  • Submission queue
  • Multimodal media
  • Transports
  • Dependency injection
  • Type safety
  • Migrating to v1
LangGraph SDK
  • Client
  • Auth
  • React
  • Logging
  • React Ui
  • Server
LangGraph Checkpoint
LangGraph Checkpoint MongoDB
LangGraph Checkpoint Postgres
LangGraph Checkpoint Redis
  • Shallow
  • Store
LangGraph Checkpoint SQLite
LangGraph Checkpoint Validation
  • Cli
LangGraph API
LangGraph CLI
LangGraph CUA
  • Utils
LangGraph Supervisor
LangGraph Swarm
โŒ˜I

LangChain Assistant

Ask a question to get started

Enter to sendโ€ขShift+Enter new line

Menu

OverviewGetting startedinjectStreamSelectorsInterrupts & headless toolsSubagents & subgraphsFork & edit from a checkpointSubmission queueMultimodal mediaTransportsDependency injectionType safetyMigrating to v1
LangGraph SDK
ClientAuthReactLoggingReact UiServer
LangGraph Checkpoint
LangGraph Checkpoint MongoDB
LangGraph Checkpoint Postgres
LangGraph Checkpoint Redis
ShallowStore
LangGraph Checkpoint SQLite
LangGraph Checkpoint Validation
Cli
LangGraph API
LangGraph CLI
LangGraph CUA
Utils
LangGraph Supervisor
LangGraph Swarm
Language
Theme
JavaScript@langchain/angularAgentServerAdapter
Interfaceโ—Since v1.0

AgentServerAdapter

Copy
interface AgentServerAdapter

Bases

TransportAdapter

Properties

Methods

View source on GitHub
property
threadId: string
method
closeโ†’ Promise<void>
method
eventsโ†’ AsyncIterable<Message>
method
getHistoryโ†’ Promise<__type[]>
method
getStateโ†’ Promise<__type | null>
method
openโ†’ Promise<void>
method
openEventStreamโ†’ EventStreamHandle
method
sendโ†’ Promise<void | CommandResponse | ErrorResponse>
method
setThreadId

Public v1 name for TransportAdapter plus optional high-level capabilities. Renamed to reflect that this interface now denotes the full agent-server protocol contract (not merely wire transport): any object that satisfies it can back a useStream call. See plan-custom-transport.md ยง4 for the rollout.

The extra optional methods let adapters surface thread state and history without the framework needing to issue a parallel HTTP request โ€” useStream.hydrate() calls getState?() when present and falls back to client.threads.getState otherwise. Adapters that don't know how to produce these values can simply omit them.

The legacy TransportAdapter export is retained for back-compat and resolves to the same structural type; new code should prefer AgentServerAdapter.

Thread ID this transport currently targets.

Shuts down the transport and releases any underlying resources.

Streams incoming protocol messages from the remote peer. Used by WebSocket transports where all events share one connection.

Fetch a slice of checkpoint history for the bound thread. Used by branching and time-travel UIs. Optional โ€” omitting it turns those UIs into no-ops rather than surfacing an error.

Fetch the latest checkpointed state for the bound thread via GET /threads/:threadId/state (or an adapter-specific override). When omitted, StreamController.hydrate falls back to client.threads.getState().

Opens the underlying connection (e.g. WebSocket handshake). For HTTP/SSE transports this is a no-op.

Opens an independent filtered SSE event stream. Each call creates a new server connection with the given filter. Returns undefined when the transport does not support per-subscription streams (e.g. WebSocket), in which case the caller should fall back to command-based subscriptions over events.

Replay contract. Implementations MUST buffer events emitted for the thread/run and replay them through every newly-opened stream whose filter matches. The SDK's shared-stream rotation relies on this: when a subscription's filter widens the union, the SDK opens a fresh stream and expects to receive the run's full history from seq=0 (deduplication is handled client-side via event_id). The SDK also defers the open until after run.start has committed the thread server-side to avoid a 404: Thread not found, which means events emitted during that window MUST be delivered to the late opener. The protocol v2 server implements this via a bounded per-run replay buffer; custom adapters should mirror that.

Sends a command and optionally returns an immediate response.

Rebind this transport to a different thread.

client.threads.stream(threadId, { transport }) calls this (when implemented) whenever the framework binds or re-binds the active thread โ€” including the lazily-minted id from the first submit() on a threadId: null controller. Implementing it lets an adapter be constructed once (optionally with no threadId) and reused as the active thread becomes known, so the framework doesn't have to tear down and rebuild a custom transport when the thread id appears.

Optional: adapters that bake threadId at construction can omit it, in which case the per-call threadId is ignored (prior behaviour).