langchain-copilotkit
v0.1.1
Published
LangChain Agent Adapter for CopilotKit — connect LangChain/LangGraph agents to CopilotKit via the AG-UI protocol without a separate server
Downloads
181
Maintainers
Readme
langchain-copilotkit
LangChain Agent Adapter for CopilotKit — connect LangChain/LangGraph agents to CopilotKit via the AG-UI protocol without running a separate server.
Features
- In-process integration — no
langgraph devserver required - CopilotKit-ready —
LangChainAgentAdapterextendsAbstractAgentfrom@ag-ui/client - Full event mapping — text streaming, tool calls, state snapshots, step tracking
- HITL support — interrupt/resume with approve, reject, and natural language feedback
Installation
npm install langchain-copilotkit @langchain/core @langchain/langgraphQuick Start
import { CopilotRuntime } from "@copilotkit/runtime";
import { createDeepAgent } from "deepagents";
import { LangChainAgentAdapter } from "langchain-copilotkit";
const agent = createDeepAgent({ model: "claude-sonnet-4-6" });
const runtime = new CopilotRuntime({
agents: [new LangChainAgentAdapter({ agent })],
});Next.js App Router
// app/api/copilotkit/route.ts
import { CopilotRuntime, copilotRuntimeNextJSAppRouterEndpoint } from "@copilotkit/runtime";
import { createDeepAgent } from "deepagents";
import { LangChainAgentAdapter } from "langchain-copilotkit";
const agent = createDeepAgent({ model: "claude-sonnet-4-6" });
const runtime = new CopilotRuntime({
agents: [new LangChainAgentAdapter({ agent })],
});
export const { handleRequest: POST } = copilotRuntimeNextJSAppRouterEndpoint({
runtime,
endpoint: "/api/copilotkit",
});API
LangChainAgentAdapter
Extends AbstractAgent from @ag-ui/client.
new LangChainAgentAdapter(options)| Option | Type | Default | Description |
|-------------|------------|---------|--------------------------------------------------|
| agent | Runnable | — | A LangGraph compiled graph or any LangChain Runnable |
| stateKeys | string[] | [] | State keys to include in STATE_SNAPSHOT events |
| stateful | boolean | true | Send only new messages (set false for stateless runnables) |
Stateful Mode (default)
By default, the adapter operates in stateful mode — it sends only new user messages on subsequent turns, preventing message duplication in checkpointer-backed graphs (e.g. MemorySaver, PostgresSaver). CopilotKit sends the full message history on every turn, but the checkpoint already holds the correct history.
Set stateful: false only for stateless runnables without a checkpointer:
new LangChainAgentAdapter({
agent: compiledGraph,
stateKeys: ["files"],
})convertMessages(messages) / convertToAgUiMessages(messages)
Bidirectional conversion between AG-UI Message[] and LangChain BaseMessage[].
EventMapper
Low-level class that maps individual LangChain StreamEvent objects to AG-UI BaseEvent[].
Event Mapping
| LangChain Event | AG-UI Event(s) |
|-------------------------------|-----------------------------------------------------|
| on_chat_model_stream | TEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT |
| on_chat_model_stream (tool) | TOOL_CALL_START, TOOL_CALL_ARGS |
| on_chat_model_end | TEXT_MESSAGE_END, TOOL_CALL_END |
| on_tool_end | TOOL_CALL_RESULT |
| on_chain_start (node) | STEP_STARTED |
| on_chain_end (node) | STATE_SNAPSHOT (if stateKeys set), STEP_FINISHED |
| (run lifecycle) | RUN_STARTED, RUN_FINISHED, RUN_ERROR |
License
MIT
