@assistant-ui/react-langchain 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,17 +1,10 @@
1
- ## `@assistant-ui/react-langchain`
1
+ # `@assistant-ui/react-langchain`
2
2
 
3
- Adapter that wraps [`useStream`](https://docs.langchain.com/oss/javascript/langgraph-sdk/react-stream) from `@langchain/react` and exposes it as an assistant-ui runtime, with hooks for reading interrupts, submitting raw state updates, and reading arbitrary LangGraph custom state keys.
3
+ Adapter that wraps [`useStream`](https://docs.langchain.com/oss/javascript/langgraph-sdk/react-stream) from `@langchain/react` and exposes it as an assistant-ui runtime. Bridges LangChain's `useStream` to an `AssistantRuntime` with hooks for interrupts, raw state submission, and reading custom LangGraph state keys.
4
4
 
5
- > assistant-ui also ships [`@assistant-ui/react-langgraph`](https://www.npmjs.com/package/@assistant-ui/react-langgraph), which integrates with `@langchain/langgraph-sdk` directly and has a broader feature set (subgraph events, UI messages, message metadata, cancellation). The two packages are independent adapters targeting different upstream libraries — pick whichever matches your upstream choice. See the [comparison](https://www.assistant-ui.com/docs/runtimes/langchain/comparison).
5
+ ## When to use this
6
6
 
7
- ## Features
8
-
9
- - Bridges LangChain's `useStream` to an assistant-ui `AssistantRuntime`
10
- - Tool invocations flow through assistant-ui's `useToolInvocations`
11
- - `useLangChainInterruptState` — read the current LangGraph interrupt
12
- - `useLangChainSubmit` — submit raw state updates (e.g. resume commands)
13
- - `useLangChainState<T>(key)` — read custom state keys like `todos` / `files` reactively
14
- - Optional assistant-cloud thread persistence
7
+ assistant-ui also ships `@assistant-ui/react-langgraph`, which integrates with `@langchain/langgraph-sdk` directly and has a broader feature set (subgraph events, UI messages, message metadata, cancellation). The two packages are independent adapters targeting different upstream libraries; pick whichever matches the SDK you already use.
15
8
 
16
9
  ## Installation
17
10
 
@@ -21,13 +14,12 @@ npm install @assistant-ui/react @assistant-ui/react-langchain @langchain/react
21
14
 
22
15
  ## Usage
23
16
 
24
- ### Basic setup
25
-
26
17
  ```tsx
27
18
  import { useStreamRuntime } from "@assistant-ui/react-langchain";
28
- import { AssistantRuntimeProvider, Thread } from "@assistant-ui/react";
19
+ import { AssistantRuntimeProvider } from "@assistant-ui/react";
20
+ import { Thread } from "@/components/assistant-ui/thread";
29
21
 
30
- function App() {
22
+ export function App() {
31
23
  const runtime = useStreamRuntime({
32
24
  assistantId: "agent",
33
25
  apiUrl: "http://localhost:2024",
@@ -41,71 +33,6 @@ function App() {
41
33
  }
42
34
  ```
43
35
 
44
- `useStreamRuntime` accepts every option `useStream` from `@langchain/react` does, plus:
45
-
46
- - `cloud` — an `AssistantCloud` instance for persisting threads
47
- - `adapters` — `{ attachments, speech, feedback }`
48
- - `messagesKey` — the state key that holds messages (default `"messages"`)
49
-
50
- ### Reading custom state keys
51
-
52
- LangGraph agents often expose structured state beyond messages (plans, todos, scratch files, generative-UI artifacts). Read them directly with `useLangChainState` — mirrors `useStream().values[key]` upstream and updates when the stream emits new state.
53
-
54
- ```tsx
55
- import { useLangChainState } from "@assistant-ui/react-langchain";
56
-
57
- type Todo = { id: string; title: string; done: boolean };
58
-
59
- function TodoList() {
60
- const todos = useLangChainState<Todo[]>("todos", []);
61
-
62
- return (
63
- <ul>
64
- {todos.map((t) => (
65
- <li key={t.id}>{t.title}</li>
66
- ))}
67
- </ul>
68
- );
69
- }
70
- ```
71
-
72
- Signatures:
36
+ `useStreamRuntime` accepts every option `@langchain/react`'s `useStream` does, plus `cloud` for thread persistence, an `adapters` bag, and a `messagesKey` override.
73
37
 
74
- ```ts
75
- useLangChainState<T>(key: string): T | undefined;
76
- useLangChainState<T>(key: string, defaultValue: T): T;
77
- ```
78
-
79
- ### Interrupts
80
-
81
- ```tsx
82
- import {
83
- useLangChainInterruptState,
84
- useLangChainSubmit,
85
- } from "@assistant-ui/react-langchain";
86
- import { Command } from "@langchain/langgraph-sdk";
87
-
88
- function InterruptPrompt() {
89
- const interrupt = useLangChainInterruptState();
90
- const submit = useLangChainSubmit();
91
-
92
- if (!interrupt) return null;
93
-
94
- return (
95
- <div>
96
- <pre>{JSON.stringify(interrupt.value, null, 2)}</pre>
97
- <button onClick={() => submit(null, { command: new Command({ resume: "yes" }) })}>
98
- Approve
99
- </button>
100
- </div>
101
- );
102
- }
103
- ```
104
-
105
- ### Message conversion
106
-
107
- The adapter ships `convertLangChainBaseMessage` for cases where you want to reuse the internal converter directly (e.g. when building a custom `ExternalStoreAdapter`).
108
-
109
- ```ts
110
- import { convertLangChainBaseMessage } from "@assistant-ui/react-langchain";
111
- ```
38
+ Full reference for `useLangChainState`, `useLangChainInterruptState`, `useLangChainSubmit`, and `convertLangChainBaseMessage` at [assistant-ui.com/docs/runtimes/langchain](https://www.assistant-ui.com/docs/runtimes/langchain).
@@ -1,4 +1,9 @@
1
- import type { useExternalMessageConverter } from "@assistant-ui/core/react";
2
- import type { LangChainBaseMessage } from "./types.js";
3
- export declare const convertLangChainBaseMessage: useExternalMessageConverter.Callback<LangChainBaseMessage>;
1
+ import { LangChainBaseMessage } from "./types.js";
2
+ import { useExternalMessageConverter } from "@assistant-ui/core/react";
3
+
4
+ //#region src/convertMessages.d.ts
5
+ declare const getMessageType: (message: LangChainBaseMessage) => string;
6
+ declare const convertLangChainBaseMessage: useExternalMessageConverter.Callback<LangChainBaseMessage>;
7
+ //#endregion
8
+ export { convertLangChainBaseMessage, getMessageType };
4
9
  //# sourceMappingURL=convertMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertMessages.d.ts","sourceRoot":"","sources":["../src/convertMessages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,OAAO,KAAK,EAAE,oBAAoB,EAAyB,mBAAgB;AAyD3E,eAAO,MAAM,2BAA2B,EAAE,2BAA2B,CAAC,QAAQ,CAC5E,oBAAoB,CA0ErB,CAAC"}
1
+ {"version":3,"file":"convertMessages.d.ts","names":[],"sources":["../src/convertMessages.ts"],"mappings":";;;;cAMa,cAAA,GAAkB,OAA6B,EAApB,oBAAoB;AAAA,cAuD/C,2BAAA,EAA6B,2BAAA,CAA4B,QAAQ,CAC5E,oBAAA"}
@@ -1,115 +1,103 @@
1
1
  "use client";
2
+ //#region src/convertMessages.ts
2
3
  const getMessageType = (message) => {
3
- if (typeof message._getType === "function")
4
- return message._getType();
5
- if ("type" in message)
6
- return message.type;
7
- throw new Error("Cannot determine message type");
4
+ if (typeof message._getType === "function") return message._getType();
5
+ if ("type" in message) return message.type;
6
+ throw new Error("Cannot determine message type");
8
7
  };
9
8
  const contentToParts = (content) => {
10
- if (typeof content === "string")
11
- return [{ type: "text", text: content }];
12
- const parts = content;
13
- return parts
14
- .map((part) => {
15
- const type = part.type;
16
- switch (type) {
17
- case "text":
18
- case "text_delta":
19
- return { type: "text", text: part.text };
20
- case "image_url":
21
- if (typeof part.image_url === "string") {
22
- return { type: "image", image: part.image_url };
23
- }
24
- return { type: "image", image: part.image_url.url };
25
- case "thinking":
26
- return { type: "reasoning", text: part.thinking };
27
- case "reasoning":
28
- return {
29
- type: "reasoning",
30
- text: part.summary.map((s) => s.text).join("\n\n\n"),
31
- };
32
- case "tool_use":
33
- case "input_json_delta":
34
- return null;
35
- default:
36
- return null;
37
- }
38
- })
39
- .filter((p) => p !== null);
9
+ if (typeof content === "string") return [{
10
+ type: "text",
11
+ text: content
12
+ }];
13
+ return content.map((part) => {
14
+ switch (part.type) {
15
+ case "text":
16
+ case "text_delta": return {
17
+ type: "text",
18
+ text: part.text
19
+ };
20
+ case "image_url":
21
+ if (typeof part.image_url === "string") return {
22
+ type: "image",
23
+ image: part.image_url
24
+ };
25
+ return {
26
+ type: "image",
27
+ image: part.image_url.url
28
+ };
29
+ case "thinking": return {
30
+ type: "reasoning",
31
+ text: part.thinking
32
+ };
33
+ case "reasoning": return {
34
+ type: "reasoning",
35
+ text: part.summary.map((s) => s.text).join("\n\n\n")
36
+ };
37
+ case "tool_use":
38
+ case "input_json_delta": return null;
39
+ default: return null;
40
+ }
41
+ }).filter((p) => p !== null);
40
42
  };
41
43
  const getCustomMetadata = (additionalKwargs) => additionalKwargs?.metadata ?? {};
42
44
  const getStringContent = (content) => {
43
- if (typeof content === "string")
44
- return content;
45
- const parts = content;
46
- return parts
47
- .filter((c) => c.type === "text")
48
- .map((c) => c.text)
49
- .join("");
45
+ if (typeof content === "string") return content;
46
+ return content.filter((c) => c.type === "text").map((c) => c.text).join("");
50
47
  };
51
- export const convertLangChainBaseMessage = (message) => {
52
- const type = getMessageType(message);
53
- switch (type) {
54
- case "system":
55
- return {
56
- role: "system",
57
- id: message.id,
58
- content: [{ type: "text", text: getStringContent(message.content) }],
59
- metadata: {
60
- custom: getCustomMetadata(message.additional_kwargs),
61
- },
62
- };
63
- case "human":
64
- return {
65
- role: "user",
66
- id: message.id,
67
- content: contentToParts(message.content),
68
- metadata: {
69
- custom: getCustomMetadata(message.additional_kwargs),
70
- },
71
- };
72
- case "ai": {
73
- const toolCallParts = message.tool_calls?.map((tc) => ({
74
- type: "tool-call",
75
- toolCallId: tc.id,
76
- toolName: tc.name,
77
- args: tc.args,
78
- argsText: JSON.stringify(tc.args),
79
- })) ?? [];
80
- const assistantStatus = typeof message.status === "object" ? message.status : undefined;
81
- return {
82
- role: "assistant",
83
- id: message.id,
84
- content: [...contentToParts(message.content), ...toolCallParts],
85
- metadata: {
86
- custom: getCustomMetadata(message.additional_kwargs),
87
- },
88
- ...(assistantStatus && { status: assistantStatus }),
89
- };
90
- }
91
- case "tool":
92
- return {
93
- role: "tool",
94
- toolName: message.name ?? "",
95
- toolCallId: message.tool_call_id ?? "",
96
- result: message.content,
97
- artifact: message.artifact,
98
- isError: message.status === "error",
99
- };
100
- default:
101
- return {
102
- role: "system",
103
- id: message.id,
104
- content: [
105
- {
106
- type: "text",
107
- text: typeof message.content === "string"
108
- ? message.content
109
- : JSON.stringify(message.content),
110
- },
111
- ],
112
- };
113
- }
48
+ const convertLangChainBaseMessage = (message) => {
49
+ switch (getMessageType(message)) {
50
+ case "system": return {
51
+ role: "system",
52
+ id: message.id,
53
+ content: [{
54
+ type: "text",
55
+ text: getStringContent(message.content)
56
+ }],
57
+ metadata: { custom: getCustomMetadata(message.additional_kwargs) }
58
+ };
59
+ case "human": return {
60
+ role: "user",
61
+ id: message.id,
62
+ content: contentToParts(message.content),
63
+ metadata: { custom: getCustomMetadata(message.additional_kwargs) }
64
+ };
65
+ case "ai": {
66
+ const toolCallParts = message.tool_calls?.map((tc) => ({
67
+ type: "tool-call",
68
+ toolCallId: tc.id,
69
+ toolName: tc.name,
70
+ args: tc.args,
71
+ argsText: JSON.stringify(tc.args)
72
+ })) ?? [];
73
+ const assistantStatus = typeof message.status === "object" ? message.status : void 0;
74
+ return {
75
+ role: "assistant",
76
+ id: message.id,
77
+ content: [...contentToParts(message.content), ...toolCallParts],
78
+ metadata: { custom: getCustomMetadata(message.additional_kwargs) },
79
+ ...assistantStatus && { status: assistantStatus }
80
+ };
81
+ }
82
+ case "tool": return {
83
+ role: "tool",
84
+ toolName: message.name ?? "",
85
+ toolCallId: message.tool_call_id ?? "",
86
+ result: message.content,
87
+ artifact: message.artifact,
88
+ isError: message.status === "error"
89
+ };
90
+ default: return {
91
+ role: "system",
92
+ id: message.id,
93
+ content: [{
94
+ type: "text",
95
+ text: typeof message.content === "string" ? message.content : JSON.stringify(message.content)
96
+ }]
97
+ };
98
+ }
114
99
  };
100
+ //#endregion
101
+ export { convertLangChainBaseMessage, getMessageType };
102
+
115
103
  //# sourceMappingURL=convertMessages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertMessages.js","sourceRoot":"","sources":["../src/convertMessages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convertMessages.js","names":["parts"],"sources":["../src/convertMessages.ts"],"sourcesContent":["\"use client\";\n\nimport type { useExternalMessageConverter } from \"@assistant-ui/core/react\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport type { LangChainBaseMessage, LangChainContentBlock } from \"./types\";\n\nexport const getMessageType = (message: LangChainBaseMessage): string => {\n if (typeof message._getType === \"function\") return message._getType();\n if (\"type\" in message)\n return (message as Record<string, unknown>).type as string;\n throw new Error(\"Cannot determine message type\");\n};\n\nconst contentToParts = (content: unknown) => {\n if (typeof content === \"string\")\n return [{ type: \"text\" as const, text: content }];\n\n const parts = content as readonly LangChainContentBlock[];\n return parts\n .map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"text_delta\":\n return { type: \"text\" as const, text: part.text };\n case \"image_url\":\n if (typeof part.image_url === \"string\") {\n return { type: \"image\" as const, image: part.image_url };\n }\n return { type: \"image\" as const, image: part.image_url.url };\n case \"thinking\":\n return { type: \"reasoning\" as const, text: part.thinking };\n case \"reasoning\":\n return {\n type: \"reasoning\" as const,\n text: part.summary.map((s) => s.text).join(\"\\n\\n\\n\"),\n };\n case \"tool_use\":\n case \"input_json_delta\":\n return null;\n default:\n return null;\n }\n })\n .filter((p) => p !== null);\n};\n\nconst getCustomMetadata = (\n additionalKwargs: Record<string, unknown> | undefined,\n): Record<string, unknown> =>\n (additionalKwargs?.metadata as Record<string, unknown>) ?? {};\n\nconst getStringContent = (content: unknown): string => {\n if (typeof content === \"string\") return content;\n const parts = content as readonly LangChainContentBlock[];\n return parts\n .filter((c): c is { type: \"text\"; text: string } => c.type === \"text\")\n .map((c) => c.text)\n .join(\"\");\n};\n\nexport const convertLangChainBaseMessage: useExternalMessageConverter.Callback<\n LangChainBaseMessage\n> = (message) => {\n const type = getMessageType(message);\n\n switch (type) {\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n content: [{ type: \"text\", text: getStringContent(message.content) }],\n metadata: {\n custom: getCustomMetadata(message.additional_kwargs),\n },\n };\n\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: contentToParts(message.content),\n metadata: {\n custom: getCustomMetadata(message.additional_kwargs),\n },\n };\n\n case \"ai\": {\n const toolCallParts =\n message.tool_calls?.map((tc) => ({\n type: \"tool-call\" as const,\n toolCallId: tc.id,\n toolName: tc.name,\n args: tc.args as ReadonlyJSONObject,\n argsText: JSON.stringify(tc.args),\n })) ?? [];\n\n const assistantStatus =\n typeof message.status === \"object\" ? message.status : undefined;\n\n return {\n role: \"assistant\",\n id: message.id,\n content: [...contentToParts(message.content), ...toolCallParts],\n metadata: {\n custom: getCustomMetadata(message.additional_kwargs),\n },\n ...(assistantStatus && { status: assistantStatus }),\n };\n }\n\n case \"tool\":\n return {\n role: \"tool\",\n toolName: message.name ?? \"\",\n toolCallId: message.tool_call_id ?? \"\",\n result: message.content,\n artifact: message.artifact,\n isError: message.status === \"error\",\n };\n\n default:\n return {\n role: \"system\",\n id: message.id,\n content: [\n {\n type: \"text\",\n text:\n typeof message.content === \"string\"\n ? message.content\n : JSON.stringify(message.content),\n },\n ],\n };\n }\n};\n"],"mappings":";;AAMA,MAAa,kBAAkB,YAA0C;CACvE,IAAI,OAAO,QAAQ,aAAa,YAAY,OAAO,QAAQ,SAAS;CACpE,IAAI,UAAU,SACZ,OAAQ,QAAoC;CAC9C,MAAM,IAAI,MAAM,+BAA+B;AACjD;AAEA,MAAM,kBAAkB,YAAqB;CAC3C,IAAI,OAAO,YAAY,UACrB,OAAO,CAAC;EAAE,MAAM;EAAiB,MAAM;CAAQ,CAAC;CAGlD,OAAOA,QACJ,KAAK,SAAS;EAEb,QADa,KAAK,MAClB;GACE,KAAK;GACL,KAAK,cACH,OAAO;IAAE,MAAM;IAAiB,MAAM,KAAK;GAAK;GAClD,KAAK;IACH,IAAI,OAAO,KAAK,cAAc,UAC5B,OAAO;KAAE,MAAM;KAAkB,OAAO,KAAK;IAAU;IAEzD,OAAO;KAAE,MAAM;KAAkB,OAAO,KAAK,UAAU;IAAI;GAC7D,KAAK,YACH,OAAO;IAAE,MAAM;IAAsB,MAAM,KAAK;GAAS;GAC3D,KAAK,aACH,OAAO;IACL,MAAM;IACN,MAAM,KAAK,QAAQ,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,QAAQ;GACrD;GACF,KAAK;GACL,KAAK,oBACH,OAAO;GACT,SACE,OAAO;EACX;CACF,CAAC,EACA,QAAQ,MAAM,MAAM,IAAI;AAC7B;AAEA,MAAM,qBACJ,qBAEC,kBAAkB,YAAwC,CAAC;AAE9D,MAAM,oBAAoB,YAA6B;CACrD,IAAI,OAAO,YAAY,UAAU,OAAO;CAExC,OAAOA,QACJ,QAAQ,MAA2C,EAAE,SAAS,MAAM,EACpE,KAAK,MAAM,EAAE,IAAI,EACjB,KAAK,EAAE;AACZ;AAEA,MAAa,+BAER,YAAY;CAGf,QAFa,eAAe,OAEjB,GAAX;EACE,KAAK,UACH,OAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM,iBAAiB,QAAQ,OAAO;GAAE,CAAC;GACnE,UAAU,EACR,QAAQ,kBAAkB,QAAQ,iBAAiB,EACrD;EACF;EAEF,KAAK,SACH,OAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,SAAS,eAAe,QAAQ,OAAO;GACvC,UAAU,EACR,QAAQ,kBAAkB,QAAQ,iBAAiB,EACrD;EACF;EAEF,KAAK,MAAM;GACT,MAAM,gBACJ,QAAQ,YAAY,KAAK,QAAQ;IAC/B,MAAM;IACN,YAAY,GAAG;IACf,UAAU,GAAG;IACb,MAAM,GAAG;IACT,UAAU,KAAK,UAAU,GAAG,IAAI;GAClC,EAAE,KAAK,CAAC;GAEV,MAAM,kBACJ,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS,KAAA;GAExD,OAAO;IACL,MAAM;IACN,IAAI,QAAQ;IACZ,SAAS,CAAC,GAAG,eAAe,QAAQ,OAAO,GAAG,GAAG,aAAa;IAC9D,UAAU,EACR,QAAQ,kBAAkB,QAAQ,iBAAiB,EACrD;IACA,GAAI,mBAAmB,EAAE,QAAQ,gBAAgB;GACnD;EACF;EAEA,KAAK,QACH,OAAO;GACL,MAAM;GACN,UAAU,QAAQ,QAAQ;GAC1B,YAAY,QAAQ,gBAAgB;GACpC,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,SAAS,QAAQ,WAAW;EAC9B;EAEF,SACE,OAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,SAAS,CACP;IACE,MAAM;IACN,MACE,OAAO,QAAQ,YAAY,WACvB,QAAQ,UACR,KAAK,UAAU,QAAQ,OAAO;GACtC,CACF;EACF;CACJ;AACF"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- export { useStreamRuntime, useLangChainInterruptState, useLangChainState, useLangChainSubmit, } from "./useStreamRuntime.js";
2
- export type { UseStreamRuntimeOptions } from "./useStreamRuntime.js";
3
- export { convertLangChainBaseMessage } from "./convertMessages.js";
4
- export type { LangChainBaseMessage, LangChainContentBlock, LangChainToolCall, } from "./types.js";
5
- //# sourceMappingURL=index.d.ts.map
1
+ import { LangChainBaseMessage, LangChainContentBlock, LangChainToolCall } from "./types.js";
2
+ import { convertLangChainBaseMessage } from "./convertMessages.js";
3
+ import { UseStreamRuntimeOptions, useLangChainInterruptState, useLangChainSend, useLangChainSendCommand, useLangChainState, useLangChainSubmit, useStreamRuntime } from "./useStreamRuntime.js";
4
+ export { type LangChainBaseMessage, type LangChainContentBlock, type LangChainToolCall, type UseStreamRuntimeOptions, convertLangChainBaseMessage, useLangChainInterruptState, useLangChainSend, useLangChainSendCommand, useLangChainState, useLangChainSubmit, useStreamRuntime };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { useStreamRuntime, useLangChainInterruptState, useLangChainState, useLangChainSubmit, } from "./useStreamRuntime.js";
2
- export { convertLangChainBaseMessage } from "./convertMessages.js";
3
- //# sourceMappingURL=index.js.map
1
+ import { convertLangChainBaseMessage } from "./convertMessages.js";
2
+ import { useLangChainInterruptState, useLangChainSend, useLangChainSendCommand, useLangChainState, useLangChainSubmit, useStreamRuntime } from "./useStreamRuntime.js";
3
+ export { convertLangChainBaseMessage, useLangChainInterruptState, useLangChainSend, useLangChainSendCommand, useLangChainState, useLangChainSubmit, useStreamRuntime };
package/dist/types.d.ts CHANGED
@@ -1,32 +1,34 @@
1
- import type { MessageStatus } from "@assistant-ui/core";
1
+ import { MessageStatus } from "@assistant-ui/core";
2
+
3
+ //#region src/types.d.ts
2
4
  /** Known content block types from @langchain/core messages. */
3
- export type LangChainContentBlock = {
4
- type: "text";
5
- text: string;
5
+ type LangChainContentBlock = {
6
+ type: "text";
7
+ text: string;
6
8
  } | {
7
- type: "text_delta";
8
- text: string;
9
+ type: "text_delta";
10
+ text: string;
9
11
  } | {
10
- type: "image_url";
11
- image_url: string | {
12
- url: string;
13
- };
12
+ type: "image_url";
13
+ image_url: string | {
14
+ url: string;
15
+ };
14
16
  } | {
15
- type: "thinking";
16
- thinking: string;
17
+ type: "thinking";
18
+ thinking: string;
17
19
  } | {
18
- type: "reasoning";
19
- summary: Array<{
20
- type: "summary_text";
21
- text: string;
22
- }>;
20
+ type: "reasoning";
21
+ summary: Array<{
22
+ type: "summary_text";
23
+ text: string;
24
+ }>;
23
25
  } | {
24
- type: "tool_use" | "input_json_delta";
26
+ type: "tool_use" | "input_json_delta";
25
27
  };
26
- export type LangChainToolCall = {
27
- id: string;
28
- name: string;
29
- args: Record<string, unknown>;
28
+ type LangChainToolCall = {
29
+ id: string;
30
+ name: string;
31
+ args: Record<string, unknown>;
30
32
  };
31
33
  /**
32
34
  * Minimal duck-typed interface for BaseMessage class instances returned by
@@ -35,19 +37,17 @@ export type LangChainToolCall = {
35
37
  * Uses `unknown` for `content` to remain compatible with
36
38
  * `@langchain/core`'s `MessageContent` union.
37
39
  */
38
- export type LangChainBaseMessage = {
39
- _getType: () => string;
40
- content: unknown;
41
- id?: string | undefined;
42
- name?: string | undefined;
43
- additional_kwargs?: Record<string, unknown> | undefined;
44
- /** Present on AIMessage */
45
- tool_calls?: readonly LangChainToolCall[] | undefined;
46
- /** Present on ToolMessage */
47
- tool_call_id?: string | undefined;
48
- /** Completion status (AIMessage) or outcome status (ToolMessage) */
49
- status?: MessageStatus | "success" | "error" | undefined;
50
- /** Present on ToolMessage */
51
- artifact?: unknown;
40
+ type LangChainBaseMessage = {
41
+ _getType: () => string;
42
+ content: unknown;
43
+ id?: string | undefined;
44
+ name?: string | undefined;
45
+ additional_kwargs?: Record<string, unknown> | undefined; /** Present on AIMessage */
46
+ tool_calls?: readonly LangChainToolCall[] | undefined; /** Present on ToolMessage */
47
+ tool_call_id?: string | undefined; /** Completion status (AIMessage) or outcome status (ToolMessage) */
48
+ status?: MessageStatus | "success" | "error" | undefined; /** Present on ToolMessage */
49
+ artifact?: unknown;
52
50
  };
51
+ //#endregion
52
+ export { LangChainBaseMessage, LangChainContentBlock, LangChainToolCall };
53
53
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD,GACD;IAAE,IAAI,EAAE,UAAU,GAAG,kBAAkB,CAAA;CAAE,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD,2BAA2B;IAC3B,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAAC;IACtD,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,oEAAoE;IACpE,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACzD,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";;;;KAGY,qBAAA;EACN,IAAA;EAAc,IAAA;AAAA;EACd,IAAA;EAAoB,IAAA;AAAA;EACpB,IAAA;EAAmB,SAAA;IAAsB,GAAA;EAAA;AAAA;EACzC,IAAA;EAAkB,QAAA;AAAA;EAElB,IAAA;EACA,OAAA,EAAS,KAAK;IAAG,IAAA;IAAsB,IAAA;EAAA;AAAA;EAEvC,IAAA;AAAA;AAAA,KAEM,iBAAA;EACV,EAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAM;AAAA;;;;AAAA;AAUd;;;KAAY,oBAAA;EACV,QAAA;EACA,OAAA;EACA,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA,+BAHpB;EAKA,UAAA,YAAsB,iBAAA,gBAHtB;EAKA,YAAA,uBAJoB;EAMpB,MAAA,GAAS,aAAA,oCAJa;EAMtB,QAAA;AAAA"}
package/dist/types.js CHANGED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1,16 +1,39 @@
1
- import type { AttachmentAdapter, FeedbackAdapter, SpeechSynthesisAdapter } from "@assistant-ui/core";
2
- import type { AssistantCloud } from "assistant-cloud";
3
- import { type UseStreamOptions } from "@langchain/react";
4
- export type UseStreamRuntimeOptions = UseStreamOptions & {
5
- cloud?: AssistantCloud | undefined;
6
- adapters?: {
7
- attachments?: AttachmentAdapter | undefined;
8
- speech?: SpeechSynthesisAdapter | undefined;
9
- feedback?: FeedbackAdapter | undefined;
10
- } | undefined;
11
- /** The key in the LangGraph state that contains messages. Defaults to "messages". */
12
- messagesKey?: string | undefined;
1
+ import { LangChainBaseMessage } from "./types.js";
2
+ import { UseStreamOptions } from "@langchain/react";
3
+ import { AttachmentAdapter, FeedbackAdapter, RemoteThreadListAdapter, SpeechSynthesisAdapter } from "@assistant-ui/core";
4
+ import { AssistantCloud } from "assistant-cloud";
5
+
6
+ //#region src/useStreamRuntime.d.ts
7
+ type LangChainRuntimeExtraOptions = {
8
+ cloud?: AssistantCloud | undefined;
9
+ adapters?: {
10
+ attachments?: AttachmentAdapter | undefined;
11
+ speech?: SpeechSynthesisAdapter | undefined;
12
+ feedback?: FeedbackAdapter | undefined;
13
+ } | undefined;
14
+ /**
15
+ * When the user sends a new message while previous tool calls are
16
+ * still pending, automatically submit `tool` messages that cancel
17
+ * them so the agent's tool-call accounting stays consistent.
18
+ * Defaults to `true`.
19
+ */
20
+ autoCancelPendingToolCalls?: boolean | undefined;
21
+ /**
22
+ * Routes the Cancel button's click to `useStream().stop()`. On by
23
+ * default. Pass `false` to disable the Cancel button.
24
+ */
25
+ unstable_allowCancellation?: boolean | undefined;
26
+ /**
27
+ * Custom `RemoteThreadListAdapter`. When provided, replaces the
28
+ * cloud-backed thread list adapter.
29
+ */
30
+ unstable_threadListAdapter?: RemoteThreadListAdapter | undefined; /** Custom thread-creation hook, forwarded to the cloud adapter. */
31
+ create?: (() => Promise<{
32
+ externalId: string | undefined;
33
+ }>) | undefined; /** Custom thread-deletion hook, forwarded to the cloud adapter. */
34
+ delete?: ((threadId: string) => Promise<void>) | undefined;
13
35
  };
36
+ type UseStreamRuntimeOptions = UseStreamOptions extends infer O ? O extends UseStreamOptions ? O & LangChainRuntimeExtraOptions : never : never;
14
37
  /**
15
38
  * Creates an assistant-ui runtime backed by LangChain's `useStream` hook.
16
39
  * Accepts the same options as `useStream` from `@langchain/react`, plus
@@ -35,19 +58,33 @@ export type UseStreamRuntimeOptions = UseStreamOptions & {
35
58
  * }
36
59
  * ```
37
60
  */
38
- export declare const useStreamRuntime: ({ cloud, ...options }: UseStreamRuntimeOptions) => import("@assistant-ui/core").AssistantRuntime;
61
+ declare const useStreamRuntime: (rawOptions: UseStreamRuntimeOptions) => import("@assistant-ui/core").AssistantRuntime;
39
62
  /**
40
63
  * Read the current LangGraph interrupt state from the runtime extras.
41
64
  */
42
- export declare const useLangChainInterruptState: () => {
43
- value?: unknown;
65
+ declare const useLangChainInterruptState: () => {
66
+ value?: unknown;
44
67
  } | undefined;
45
68
  /**
46
69
  * Returns a function to submit raw state updates to the LangGraph agent,
47
70
  * bypassing the normal message flow. Useful for sending interrupt resume
48
71
  * commands.
49
72
  */
50
- export declare const useLangChainSubmit: () => (values: Record<string, unknown> | null | undefined, options?: Record<string, unknown>) => Promise<void>;
73
+ declare const useLangChainSubmit: () => (values: Record<string, unknown> | null | undefined, options?: Record<string, unknown>) => Promise<void>;
74
+ /**
75
+ * Submit a list of LangChain-shaped messages on the current thread.
76
+ * Parity helper for migrating from `useLangGraphSend`. Routes to
77
+ * `useStream().submit({ [messagesKey]: messages }, options)`.
78
+ */
79
+ declare const useLangChainSend: () => (messages: readonly LangChainBaseMessage[], options?: Record<string, unknown>) => Promise<void>;
80
+ /**
81
+ * Submit a `useStream` command (e.g. interrupt resume). Parity helper
82
+ * for migrating from `useLangGraphSendCommand`. Note that v1's command
83
+ * shape (`{ resume?, goto?, update? }`) differs from the legacy
84
+ * `{ resume: string }` form — to carry a payload, use the input or
85
+ * `stream.respond` instead.
86
+ */
87
+ declare const useLangChainSendCommand: () => (command: Record<string, unknown>) => Promise<void>;
51
88
  /**
52
89
  * Read a custom LangGraph state key from the current thread. Mirrors
53
90
  * `useStream().values[key]` from `@langchain/react` and updates when the
@@ -59,6 +96,8 @@ export declare const useLangChainSubmit: () => (values: Record<string, unknown>
59
96
  * const files = useLangChainState<Record<string, string>>("files", {});
60
97
  * ```
61
98
  */
62
- export declare function useLangChainState<T>(key: string): T | undefined;
63
- export declare function useLangChainState<T>(key: string, defaultValue: T): T;
99
+ declare function useLangChainState<T>(key: string): T | undefined;
100
+ declare function useLangChainState<T>(key: string, defaultValue: T): T;
101
+ //#endregion
102
+ export { UseStreamRuntimeOptions, useLangChainInterruptState, useLangChainSend, useLangChainSendCommand, useLangChainState, useLangChainSubmit, useStreamRuntime };
64
103
  //# sourceMappingURL=useStreamRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStreamRuntime.d.ts","sourceRoot":"","sources":["../src/useStreamRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA6BpE,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG;IACvD,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EACL;QACE,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;QAC5C,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;QAC5C,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;KACxC,GACD,SAAS,CAAC;IACd,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AA8KF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,gBAAgB,GAAI,uBAG9B,uBAAuB,kDAazB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B;YA3PhB,OAAO;aAiQ7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAG3B,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAMpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;AACjE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"useStreamRuntime.d.ts","names":[],"sources":["../src/useStreamRuntime.ts"],"mappings":";;;;;;KAkDK,4BAAA;EACH,KAAA,GAAQ,cAAA;EACR,QAAA;IAEM,WAAA,GAAc,iBAAA;IACd,MAAA,GAAS,sBAAA;IACT,QAAA,GAAW,eAAA;EAAA;EADF;;;;;;EAUf,0BAAA;EAdA;;;;EAmBA,0BAAA;EAfM;;;;EAoBN,0BAAA,GAA6B,uBAAA,cAL7B;EAOA,MAAA,UAAgB,OAAA;IAAU,UAAA;EAAA,iBAAV;EAEhB,MAAA,KAAW,QAAA,aAAqB,OAAA;AAAA;AAAA,KAsBtB,uBAAA,GAA0B,gBAAA,mBAClC,CAAA,SAAU,gBAAA,GACR,CAAA,GAAI,4BAAA;;;AAxB+B;AAsBzC;;;;;;;;;;;;;;;;AAEsC;AA4OtC;;;;cAAa,gBAAA,GAAoB,UAAA,EAAY,uBAAuB,kCAAA,gBAAA;;;;cAgCvD,0BAAA;EAMZ,KAAA;AAAA;;;;AAOD;;cAAa,kBAAA,SAGT,MAAA,EAAQ,MAAA,sCACR,OAAA,GAAU,MAAA,sBAAuB,OAAA;;;;;;cAaxB,gBAAA,SAGT,QAAA,WAAmB,oBAAA,IACnB,OAAA,GAAU,MAAA,sBAAuB,OAAA;;;;;;AAjBA;AAarC;cAoBa,uBAAA,SAEH,OAAA,EAAS,MAAA,sBAAuB,OAAA;;;;;;;;;;;;iBAc1B,iBAAA,GAAA,CAAqB,GAAA,WAAc,CAAC;AAAA,iBACpC,iBAAA,GAAA,CAAqB,GAAA,UAAa,YAAA,EAAc,CAAA,GAAI,CAAC"}