@assistant-ui/react-langgraph 0.0.3 → 0.0.4

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/dist/index.d.mts CHANGED
@@ -34,22 +34,22 @@ type LangChainEvent = {
34
34
 
35
35
  declare const useLangGraphRuntime: ({ threadId, stream, }: {
36
36
  threadId?: string | undefined;
37
- stream: (message: LangChainMessage) => Promise<AsyncGenerator<{
37
+ stream: (messages: LangChainMessage[]) => Promise<AsyncGenerator<{
38
38
  event: string;
39
39
  data: any;
40
40
  }>>;
41
41
  }) => ExternalStoreRuntime;
42
42
 
43
43
  declare const useLangGraphMessages: <TMessage>({ stream, }: {
44
- stream: (message: TMessage) => Promise<AsyncGenerator<{
44
+ stream: (messages: TMessage[]) => Promise<AsyncGenerator<{
45
45
  event: string;
46
46
  data: any;
47
47
  }>>;
48
48
  }) => {
49
49
  messages: TMessage[];
50
- sendMessage: (message: TMessage) => Promise<void>;
50
+ sendMessage: (messages: TMessage[]) => Promise<void>;
51
51
  };
52
52
 
53
53
  declare const convertLangchainMessages: useExternalMessageConverter.Callback<LangChainMessage>;
54
54
 
55
- export { type LangChainEvent, type LangChainMessage, type LangChainToolCall, type LangChainToolCallChunk, convertLangchainMessages, useLangGraphRuntime as useLangChainLangGraphRuntime, useLangGraphMessages, useLangGraphRuntime };
55
+ export { type LangChainEvent, type LangChainMessage, type LangChainToolCall, type LangChainToolCallChunk, convertLangchainMessages, useLangGraphMessages, useLangGraphRuntime };
package/dist/index.d.ts CHANGED
@@ -34,22 +34,22 @@ type LangChainEvent = {
34
34
 
35
35
  declare const useLangGraphRuntime: ({ threadId, stream, }: {
36
36
  threadId?: string | undefined;
37
- stream: (message: LangChainMessage) => Promise<AsyncGenerator<{
37
+ stream: (messages: LangChainMessage[]) => Promise<AsyncGenerator<{
38
38
  event: string;
39
39
  data: any;
40
40
  }>>;
41
41
  }) => ExternalStoreRuntime;
42
42
 
43
43
  declare const useLangGraphMessages: <TMessage>({ stream, }: {
44
- stream: (message: TMessage) => Promise<AsyncGenerator<{
44
+ stream: (messages: TMessage[]) => Promise<AsyncGenerator<{
45
45
  event: string;
46
46
  data: any;
47
47
  }>>;
48
48
  }) => {
49
49
  messages: TMessage[];
50
- sendMessage: (message: TMessage) => Promise<void>;
50
+ sendMessage: (messages: TMessage[]) => Promise<void>;
51
51
  };
52
52
 
53
53
  declare const convertLangchainMessages: useExternalMessageConverter.Callback<LangChainMessage>;
54
54
 
55
- export { type LangChainEvent, type LangChainMessage, type LangChainToolCall, type LangChainToolCallChunk, convertLangchainMessages, useLangGraphRuntime as useLangChainLangGraphRuntime, useLangGraphMessages, useLangGraphRuntime };
55
+ export { type LangChainEvent, type LangChainMessage, type LangChainToolCall, type LangChainToolCallChunk, convertLangchainMessages, useLangGraphMessages, useLangGraphRuntime };
package/dist/index.js CHANGED
@@ -21,7 +21,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  convertLangchainMessages: () => convertLangchainMessages,
24
- useLangChainLangGraphRuntime: () => useLangGraphRuntime,
25
24
  useLangGraphMessages: () => useLangGraphMessages,
26
25
  useLangGraphRuntime: () => useLangGraphRuntime
27
26
  });
@@ -83,23 +82,23 @@ var useLangGraphMessages = ({
83
82
  }) => {
84
83
  const [messages, setMessages] = (0, import_react.useState)([]);
85
84
  const sendMessage = (0, import_react.useCallback)(
86
- async (message) => {
87
- if (message !== null) {
88
- setMessages((currentMessages) => [...currentMessages, message]);
85
+ async (messages2) => {
86
+ if (messages2.length > 0) {
87
+ setMessages((currentMessages) => [...currentMessages, ...messages2]);
89
88
  }
90
- const response = await stream(message);
89
+ const response = await stream(messages2);
91
90
  const completeMessages = [];
92
91
  let partialMessages = /* @__PURE__ */ new Map();
93
92
  for await (const chunk of response) {
94
93
  if (chunk.event === "messages/partial") {
95
- for (const message2 of chunk.data) {
96
- if (!message2.id) throw new Error("Partial message missing id");
97
- partialMessages.set(message2.id, message2);
94
+ for (const message of chunk.data) {
95
+ if (!message.id) throw new Error("Partial message missing id");
96
+ partialMessages.set(message.id, message);
98
97
  }
99
98
  } else if (chunk.event === "messages/complete") {
100
- for (const message2 of chunk.data) {
101
- if (!message2.id) continue;
102
- partialMessages.delete(message2.id);
99
+ for (const message of chunk.data) {
100
+ if (!message.id) continue;
101
+ partialMessages.delete(message.id);
103
102
  }
104
103
  completeMessages.push(...chunk.data);
105
104
  } else {
@@ -125,10 +124,10 @@ var useLangGraphRuntime = ({
125
124
  stream
126
125
  });
127
126
  const [isRunning, setIsRunning] = (0, import_react2.useState)(false);
128
- const handleSendMessage = async (message) => {
127
+ const handleSendMessage = async (messages2) => {
129
128
  try {
130
129
  setIsRunning(true);
131
- await sendMessage(message);
130
+ await sendMessage(messages2);
132
131
  } catch (error) {
133
132
  console.error("Error streaming messages:", error);
134
133
  } finally {
@@ -147,25 +146,28 @@ var useLangGraphRuntime = ({
147
146
  onNew: (msg) => {
148
147
  if (msg.content.length !== 1 || msg.content[0]?.type !== "text")
149
148
  throw new Error("Only text messages are supported");
150
- return handleSendMessage({
151
- type: "human",
152
- content: msg.content[0].text
153
- });
149
+ return handleSendMessage([
150
+ {
151
+ type: "human",
152
+ content: msg.content[0].text
153
+ }
154
+ ]);
154
155
  },
155
156
  onAddToolResult: async ({ toolCallId, toolName, result }) => {
156
- await handleSendMessage({
157
- type: "tool",
158
- name: toolName,
159
- tool_call_id: toolCallId,
160
- content: JSON.stringify(result)
161
- });
157
+ await handleSendMessage([
158
+ {
159
+ type: "tool",
160
+ name: toolName,
161
+ tool_call_id: toolCallId,
162
+ content: JSON.stringify(result)
163
+ }
164
+ ]);
162
165
  }
163
166
  });
164
167
  };
165
168
  // Annotate the CommonJS export names for ESM import in node:
166
169
  0 && (module.exports = {
167
170
  convertLangchainMessages,
168
- useLangChainLangGraphRuntime,
169
171
  useLangGraphMessages,
170
172
  useLangGraphRuntime
171
173
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/useLangGraphRuntime.ts","../src/convertLangchainMessages.ts","../src/useLangGraphMessages.ts"],"sourcesContent":["export { useLangGraphRuntime } from \"./useLangGraphRuntime\";\n\nexport { useLangGraphMessages } from \"./useLangGraphMessages\";\nexport { convertLangchainMessages } from \"./convertLangchainMessages\";\nexport type {\n LangChainMessage,\n LangChainEvent,\n LangChainToolCall,\n LangChainToolCallChunk,\n} from \"./types\";\n\n/**\n * @deprecated Use `useLangGraphRuntime` instead. This will be removed in 0.1.0.\n */\nexport { useLangGraphRuntime as useLangChainLangGraphRuntime } from \"./useLangGraphRuntime\";\n","import { useState } from \"react\";\nimport { LangChainMessage } from \"./types\";\nimport {\n useExternalMessageConverter,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { convertLangchainMessages } from \"./convertLangchainMessages\";\nimport { useLangGraphMessages } from \"./useLangGraphMessages\";\nimport { ExternalStoreRuntime } from \"@assistant-ui/react\";\n\nexport const useLangGraphRuntime = ({\n threadId,\n stream,\n}: {\n threadId?: string | undefined;\n stream: (message: LangChainMessage) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}): ExternalStoreRuntime => {\n const { messages, sendMessage } = useLangGraphMessages({\n stream,\n });\n\n const [isRunning, setIsRunning] = useState(false);\n const handleSendMessage = async (message: LangChainMessage) => {\n try {\n setIsRunning(true);\n await sendMessage(message);\n } catch (error) {\n console.error(\"Error streaming messages:\", error);\n } finally {\n setIsRunning(false);\n }\n };\n\n const threadMessages = useExternalMessageConverter({\n callback: convertLangchainMessages,\n messages,\n isRunning,\n });\n\n return useExternalStoreRuntime({\n threadId,\n isRunning,\n messages: threadMessages,\n onNew: (msg) => {\n if (msg.content.length !== 1 || msg.content[0]?.type !== \"text\")\n throw new Error(\"Only text messages are supported\");\n return handleSendMessage({\n type: \"human\",\n content: msg.content[0].text,\n });\n },\n onAddToolResult: async ({ toolCallId, toolName, result }) => {\n await handleSendMessage({\n type: \"tool\",\n name: toolName,\n tool_call_id: toolCallId,\n content: JSON.stringify(result),\n });\n },\n });\n};\n","\"use client\";\n\nimport { useExternalMessageConverter } from \"@assistant-ui/react\";\nimport { LangChainMessage } from \"./types\";\nimport { ToolCallContentPart } from \"@assistant-ui/react\";\n\nexport const convertLangchainMessages: useExternalMessageConverter.Callback<\n LangChainMessage\n> = (message) => {\n switch (message.type) {\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"ai\":\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n {\n type: \"text\",\n text: message.content,\n },\n ...(message.tool_calls?.map(\n (chunk): ToolCallContentPart => ({\n type: \"tool-call\",\n toolCallId: chunk.id,\n toolName: chunk.name,\n args: chunk.args,\n argsText:\n message.tool_call_chunks?.find((c) => c.id === chunk.id)\n ?.args ?? JSON.stringify(chunk.args),\n }),\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 };\n }\n};\n","import { useState, useCallback } from \"react\";\n\nexport const useLangGraphMessages = <TMessage>({\n stream,\n}: {\n stream: (message: TMessage) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}) => {\n const [messages, setMessages] = useState<TMessage[]>([]);\n\n const sendMessage = useCallback(\n async (message: TMessage) => {\n if (message !== null) {\n setMessages((currentMessages) => [...currentMessages, message]);\n }\n\n const response = await stream(message);\n\n const completeMessages: TMessage[] = [];\n let partialMessages: Map<string, TMessage> = new Map();\n for await (const chunk of response) {\n if (chunk.event === \"messages/partial\") {\n for (const message of chunk.data) {\n if (!message.id) throw new Error(\"Partial message missing id\");\n\n partialMessages.set(message.id, message);\n }\n } else if (chunk.event === \"messages/complete\") {\n for (const message of chunk.data) {\n if (!message.id) continue;\n partialMessages.delete(message.id);\n }\n\n completeMessages.push(...chunk.data);\n } else {\n continue;\n }\n\n setMessages([...completeMessages, ...partialMessages.values()]);\n }\n if (partialMessages.size > 0) {\n throw new Error(\"A partial message was not marked as complete\");\n }\n },\n [stream],\n );\n\n return { messages, sendMessage };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAyB;AAEzB,IAAAA,gBAGO;;;ACCA,IAAM,2BAET,CAAC,YAAY;AACf,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,UAChB;AAAA,UACA,GAAI,QAAQ,YAAY;AAAA,YACtB,CAAC,WAAgC;AAAA,cAC/B,MAAM;AAAA,cACN,YAAY,MAAM;AAAA,cAClB,UAAU,MAAM;AAAA,cAChB,MAAM,MAAM;AAAA,cACZ,UACE,QAAQ,kBAAkB,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,GACnD,QAAQ,KAAK,UAAU,MAAM,IAAI;AAAA,YACzC;AAAA,UACF,KAAK,CAAC;AAAA,QACR;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ;AAAA,QAClB,YAAY,QAAQ;AAAA,QACpB,QAAQ,QAAQ;AAAA,MAClB;AAAA,EACJ;AACF;;;ACpDA,mBAAsC;AAE/B,IAAM,uBAAuB,CAAW;AAAA,EAC7C;AACF,MAOM;AACJ,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAqB,CAAC,CAAC;AAEvD,QAAM,kBAAc;AAAA,IAClB,OAAO,YAAsB;AAC3B,UAAI,YAAY,MAAM;AACpB,oBAAY,CAAC,oBAAoB,CAAC,GAAG,iBAAiB,OAAO,CAAC;AAAA,MAChE;AAEA,YAAM,WAAW,MAAM,OAAO,OAAO;AAErC,YAAM,mBAA+B,CAAC;AACtC,UAAI,kBAAyC,oBAAI,IAAI;AACrD,uBAAiB,SAAS,UAAU;AAClC,YAAI,MAAM,UAAU,oBAAoB;AACtC,qBAAWC,YAAW,MAAM,MAAM;AAChC,gBAAI,CAACA,SAAQ,GAAI,OAAM,IAAI,MAAM,4BAA4B;AAE7D,4BAAgB,IAAIA,SAAQ,IAAIA,QAAO;AAAA,UACzC;AAAA,QACF,WAAW,MAAM,UAAU,qBAAqB;AAC9C,qBAAWA,YAAW,MAAM,MAAM;AAChC,gBAAI,CAACA,SAAQ,GAAI;AACjB,4BAAgB,OAAOA,SAAQ,EAAE;AAAA,UACnC;AAEA,2BAAiB,KAAK,GAAG,MAAM,IAAI;AAAA,QACrC,OAAO;AACL;AAAA,QACF;AAEA,oBAAY,CAAC,GAAG,kBAAkB,GAAG,gBAAgB,OAAO,CAAC,CAAC;AAAA,MAChE;AACA,UAAI,gBAAgB,OAAO,GAAG;AAC5B,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO,EAAE,UAAU,YAAY;AACjC;;;AF1CO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAQ4B;AAC1B,QAAM,EAAE,UAAU,YAAY,IAAI,qBAAqB;AAAA,IACrD;AAAA,EACF,CAAC;AAED,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,oBAAoB,OAAO,YAA8B;AAC7D,QAAI;AACF,mBAAa,IAAI;AACjB,YAAM,YAAY,OAAO;AAAA,IAC3B,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAAA,IAClD,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,qBAAiB,2CAA4B;AAAA,IACjD,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF,CAAC;AAED,aAAO,uCAAwB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO,CAAC,QAAQ;AACd,UAAI,IAAI,QAAQ,WAAW,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS;AACvD,cAAM,IAAI,MAAM,kCAAkC;AACpD,aAAO,kBAAkB;AAAA,QACvB,MAAM;AAAA,QACN,SAAS,IAAI,QAAQ,CAAC,EAAE;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IACA,iBAAiB,OAAO,EAAE,YAAY,UAAU,OAAO,MAAM;AAC3D,YAAM,kBAAkB;AAAA,QACtB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,QACd,SAAS,KAAK,UAAU,MAAM;AAAA,MAChC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["import_react","message"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/useLangGraphRuntime.ts","../src/convertLangchainMessages.ts","../src/useLangGraphMessages.ts"],"sourcesContent":["export { useLangGraphRuntime } from \"./useLangGraphRuntime\";\n\nexport { useLangGraphMessages } from \"./useLangGraphMessages\";\nexport { convertLangchainMessages } from \"./convertLangchainMessages\";\nexport type {\n LangChainMessage,\n LangChainEvent,\n LangChainToolCall,\n LangChainToolCallChunk,\n} from \"./types\";\n","import { useState } from \"react\";\nimport { LangChainMessage } from \"./types\";\nimport {\n useExternalMessageConverter,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { convertLangchainMessages } from \"./convertLangchainMessages\";\nimport { useLangGraphMessages } from \"./useLangGraphMessages\";\nimport { ExternalStoreRuntime } from \"@assistant-ui/react\";\n\nexport const useLangGraphRuntime = ({\n threadId,\n stream,\n}: {\n threadId?: string | undefined;\n stream: (messages: LangChainMessage[]) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}): ExternalStoreRuntime => {\n const { messages, sendMessage } = useLangGraphMessages({\n stream,\n });\n\n const [isRunning, setIsRunning] = useState(false);\n const handleSendMessage = async (messages: LangChainMessage[]) => {\n try {\n setIsRunning(true);\n await sendMessage(messages);\n } catch (error) {\n console.error(\"Error streaming messages:\", error);\n } finally {\n setIsRunning(false);\n }\n };\n\n const threadMessages = useExternalMessageConverter({\n callback: convertLangchainMessages,\n messages,\n isRunning,\n });\n\n return useExternalStoreRuntime({\n threadId,\n isRunning,\n messages: threadMessages,\n onNew: (msg) => {\n if (msg.content.length !== 1 || msg.content[0]?.type !== \"text\")\n throw new Error(\"Only text messages are supported\");\n return handleSendMessage([\n {\n type: \"human\",\n content: msg.content[0].text,\n },\n ]);\n },\n onAddToolResult: async ({ toolCallId, toolName, result }) => {\n await handleSendMessage([\n {\n type: \"tool\",\n name: toolName,\n tool_call_id: toolCallId,\n content: JSON.stringify(result),\n },\n ]);\n },\n });\n};\n","\"use client\";\n\nimport { useExternalMessageConverter } from \"@assistant-ui/react\";\nimport { LangChainMessage } from \"./types\";\nimport { ToolCallContentPart } from \"@assistant-ui/react\";\n\nexport const convertLangchainMessages: useExternalMessageConverter.Callback<\n LangChainMessage\n> = (message) => {\n switch (message.type) {\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"ai\":\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n {\n type: \"text\",\n text: message.content,\n },\n ...(message.tool_calls?.map(\n (chunk): ToolCallContentPart => ({\n type: \"tool-call\",\n toolCallId: chunk.id,\n toolName: chunk.name,\n args: chunk.args,\n argsText:\n message.tool_call_chunks?.find((c) => c.id === chunk.id)\n ?.args ?? JSON.stringify(chunk.args),\n }),\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 };\n }\n};\n","import { useState, useCallback } from \"react\";\n\nexport const useLangGraphMessages = <TMessage>({\n stream,\n}: {\n stream: (messages: TMessage[]) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}) => {\n const [messages, setMessages] = useState<TMessage[]>([]);\n\n const sendMessage = useCallback(\n async (messages: TMessage[]) => {\n if (messages.length > 0) {\n setMessages((currentMessages) => [...currentMessages, ...messages]);\n }\n\n const response = await stream(messages);\n\n const completeMessages: TMessage[] = [];\n let partialMessages: Map<string, TMessage> = new Map();\n for await (const chunk of response) {\n if (chunk.event === \"messages/partial\") {\n for (const message of chunk.data) {\n if (!message.id) throw new Error(\"Partial message missing id\");\n\n partialMessages.set(message.id, message);\n }\n } else if (chunk.event === \"messages/complete\") {\n for (const message of chunk.data) {\n if (!message.id) continue;\n partialMessages.delete(message.id);\n }\n\n completeMessages.push(...chunk.data);\n } else {\n continue;\n }\n\n setMessages([...completeMessages, ...partialMessages.values()]);\n }\n if (partialMessages.size > 0) {\n throw new Error(\"A partial message was not marked as complete\");\n }\n },\n [stream],\n );\n\n return { messages, sendMessage };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAyB;AAEzB,IAAAA,gBAGO;;;ACCA,IAAM,2BAET,CAAC,YAAY;AACf,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,UAChB;AAAA,UACA,GAAI,QAAQ,YAAY;AAAA,YACtB,CAAC,WAAgC;AAAA,cAC/B,MAAM;AAAA,cACN,YAAY,MAAM;AAAA,cAClB,UAAU,MAAM;AAAA,cAChB,MAAM,MAAM;AAAA,cACZ,UACE,QAAQ,kBAAkB,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,GACnD,QAAQ,KAAK,UAAU,MAAM,IAAI;AAAA,YACzC;AAAA,UACF,KAAK,CAAC;AAAA,QACR;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ;AAAA,QAClB,YAAY,QAAQ;AAAA,QACpB,QAAQ,QAAQ;AAAA,MAClB;AAAA,EACJ;AACF;;;ACpDA,mBAAsC;AAE/B,IAAM,uBAAuB,CAAW;AAAA,EAC7C;AACF,MAOM;AACJ,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAqB,CAAC,CAAC;AAEvD,QAAM,kBAAc;AAAA,IAClB,OAAOC,cAAyB;AAC9B,UAAIA,UAAS,SAAS,GAAG;AACvB,oBAAY,CAAC,oBAAoB,CAAC,GAAG,iBAAiB,GAAGA,SAAQ,CAAC;AAAA,MACpE;AAEA,YAAM,WAAW,MAAM,OAAOA,SAAQ;AAEtC,YAAM,mBAA+B,CAAC;AACtC,UAAI,kBAAyC,oBAAI,IAAI;AACrD,uBAAiB,SAAS,UAAU;AAClC,YAAI,MAAM,UAAU,oBAAoB;AACtC,qBAAW,WAAW,MAAM,MAAM;AAChC,gBAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,4BAA4B;AAE7D,4BAAgB,IAAI,QAAQ,IAAI,OAAO;AAAA,UACzC;AAAA,QACF,WAAW,MAAM,UAAU,qBAAqB;AAC9C,qBAAW,WAAW,MAAM,MAAM;AAChC,gBAAI,CAAC,QAAQ,GAAI;AACjB,4BAAgB,OAAO,QAAQ,EAAE;AAAA,UACnC;AAEA,2BAAiB,KAAK,GAAG,MAAM,IAAI;AAAA,QACrC,OAAO;AACL;AAAA,QACF;AAEA,oBAAY,CAAC,GAAG,kBAAkB,GAAG,gBAAgB,OAAO,CAAC,CAAC;AAAA,MAChE;AACA,UAAI,gBAAgB,OAAO,GAAG;AAC5B,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO,EAAE,UAAU,YAAY;AACjC;;;AF1CO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAQ4B;AAC1B,QAAM,EAAE,UAAU,YAAY,IAAI,qBAAqB;AAAA,IACrD;AAAA,EACF,CAAC;AAED,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,oBAAoB,OAAOC,cAAiC;AAChE,QAAI;AACF,mBAAa,IAAI;AACjB,YAAM,YAAYA,SAAQ;AAAA,IAC5B,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAAA,IAClD,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,qBAAiB,2CAA4B;AAAA,IACjD,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF,CAAC;AAED,aAAO,uCAAwB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO,CAAC,QAAQ;AACd,UAAI,IAAI,QAAQ,WAAW,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS;AACvD,cAAM,IAAI,MAAM,kCAAkC;AACpD,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,UACN,SAAS,IAAI,QAAQ,CAAC,EAAE;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,iBAAiB,OAAO,EAAE,YAAY,UAAU,OAAO,MAAM;AAC3D,YAAM,kBAAkB;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,SAAS,KAAK,UAAU,MAAM;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["import_react","messages","messages"]}
package/dist/index.mjs CHANGED
@@ -57,23 +57,23 @@ var useLangGraphMessages = ({
57
57
  }) => {
58
58
  const [messages, setMessages] = useState([]);
59
59
  const sendMessage = useCallback(
60
- async (message) => {
61
- if (message !== null) {
62
- setMessages((currentMessages) => [...currentMessages, message]);
60
+ async (messages2) => {
61
+ if (messages2.length > 0) {
62
+ setMessages((currentMessages) => [...currentMessages, ...messages2]);
63
63
  }
64
- const response = await stream(message);
64
+ const response = await stream(messages2);
65
65
  const completeMessages = [];
66
66
  let partialMessages = /* @__PURE__ */ new Map();
67
67
  for await (const chunk of response) {
68
68
  if (chunk.event === "messages/partial") {
69
- for (const message2 of chunk.data) {
70
- if (!message2.id) throw new Error("Partial message missing id");
71
- partialMessages.set(message2.id, message2);
69
+ for (const message of chunk.data) {
70
+ if (!message.id) throw new Error("Partial message missing id");
71
+ partialMessages.set(message.id, message);
72
72
  }
73
73
  } else if (chunk.event === "messages/complete") {
74
- for (const message2 of chunk.data) {
75
- if (!message2.id) continue;
76
- partialMessages.delete(message2.id);
74
+ for (const message of chunk.data) {
75
+ if (!message.id) continue;
76
+ partialMessages.delete(message.id);
77
77
  }
78
78
  completeMessages.push(...chunk.data);
79
79
  } else {
@@ -99,10 +99,10 @@ var useLangGraphRuntime = ({
99
99
  stream
100
100
  });
101
101
  const [isRunning, setIsRunning] = useState2(false);
102
- const handleSendMessage = async (message) => {
102
+ const handleSendMessage = async (messages2) => {
103
103
  try {
104
104
  setIsRunning(true);
105
- await sendMessage(message);
105
+ await sendMessage(messages2);
106
106
  } catch (error) {
107
107
  console.error("Error streaming messages:", error);
108
108
  } finally {
@@ -121,24 +121,27 @@ var useLangGraphRuntime = ({
121
121
  onNew: (msg) => {
122
122
  if (msg.content.length !== 1 || msg.content[0]?.type !== "text")
123
123
  throw new Error("Only text messages are supported");
124
- return handleSendMessage({
125
- type: "human",
126
- content: msg.content[0].text
127
- });
124
+ return handleSendMessage([
125
+ {
126
+ type: "human",
127
+ content: msg.content[0].text
128
+ }
129
+ ]);
128
130
  },
129
131
  onAddToolResult: async ({ toolCallId, toolName, result }) => {
130
- await handleSendMessage({
131
- type: "tool",
132
- name: toolName,
133
- tool_call_id: toolCallId,
134
- content: JSON.stringify(result)
135
- });
132
+ await handleSendMessage([
133
+ {
134
+ type: "tool",
135
+ name: toolName,
136
+ tool_call_id: toolCallId,
137
+ content: JSON.stringify(result)
138
+ }
139
+ ]);
136
140
  }
137
141
  });
138
142
  };
139
143
  export {
140
144
  convertLangchainMessages,
141
- useLangGraphRuntime as useLangChainLangGraphRuntime,
142
145
  useLangGraphMessages,
143
146
  useLangGraphRuntime
144
147
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useLangGraphRuntime.ts","../src/convertLangchainMessages.ts","../src/useLangGraphMessages.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { LangChainMessage } from \"./types\";\nimport {\n useExternalMessageConverter,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { convertLangchainMessages } from \"./convertLangchainMessages\";\nimport { useLangGraphMessages } from \"./useLangGraphMessages\";\nimport { ExternalStoreRuntime } from \"@assistant-ui/react\";\n\nexport const useLangGraphRuntime = ({\n threadId,\n stream,\n}: {\n threadId?: string | undefined;\n stream: (message: LangChainMessage) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}): ExternalStoreRuntime => {\n const { messages, sendMessage } = useLangGraphMessages({\n stream,\n });\n\n const [isRunning, setIsRunning] = useState(false);\n const handleSendMessage = async (message: LangChainMessage) => {\n try {\n setIsRunning(true);\n await sendMessage(message);\n } catch (error) {\n console.error(\"Error streaming messages:\", error);\n } finally {\n setIsRunning(false);\n }\n };\n\n const threadMessages = useExternalMessageConverter({\n callback: convertLangchainMessages,\n messages,\n isRunning,\n });\n\n return useExternalStoreRuntime({\n threadId,\n isRunning,\n messages: threadMessages,\n onNew: (msg) => {\n if (msg.content.length !== 1 || msg.content[0]?.type !== \"text\")\n throw new Error(\"Only text messages are supported\");\n return handleSendMessage({\n type: \"human\",\n content: msg.content[0].text,\n });\n },\n onAddToolResult: async ({ toolCallId, toolName, result }) => {\n await handleSendMessage({\n type: \"tool\",\n name: toolName,\n tool_call_id: toolCallId,\n content: JSON.stringify(result),\n });\n },\n });\n};\n","\"use client\";\n\nimport { useExternalMessageConverter } from \"@assistant-ui/react\";\nimport { LangChainMessage } from \"./types\";\nimport { ToolCallContentPart } from \"@assistant-ui/react\";\n\nexport const convertLangchainMessages: useExternalMessageConverter.Callback<\n LangChainMessage\n> = (message) => {\n switch (message.type) {\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"ai\":\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n {\n type: \"text\",\n text: message.content,\n },\n ...(message.tool_calls?.map(\n (chunk): ToolCallContentPart => ({\n type: \"tool-call\",\n toolCallId: chunk.id,\n toolName: chunk.name,\n args: chunk.args,\n argsText:\n message.tool_call_chunks?.find((c) => c.id === chunk.id)\n ?.args ?? JSON.stringify(chunk.args),\n }),\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 };\n }\n};\n","import { useState, useCallback } from \"react\";\n\nexport const useLangGraphMessages = <TMessage>({\n stream,\n}: {\n stream: (message: TMessage) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}) => {\n const [messages, setMessages] = useState<TMessage[]>([]);\n\n const sendMessage = useCallback(\n async (message: TMessage) => {\n if (message !== null) {\n setMessages((currentMessages) => [...currentMessages, message]);\n }\n\n const response = await stream(message);\n\n const completeMessages: TMessage[] = [];\n let partialMessages: Map<string, TMessage> = new Map();\n for await (const chunk of response) {\n if (chunk.event === \"messages/partial\") {\n for (const message of chunk.data) {\n if (!message.id) throw new Error(\"Partial message missing id\");\n\n partialMessages.set(message.id, message);\n }\n } else if (chunk.event === \"messages/complete\") {\n for (const message of chunk.data) {\n if (!message.id) continue;\n partialMessages.delete(message.id);\n }\n\n completeMessages.push(...chunk.data);\n } else {\n continue;\n }\n\n setMessages([...completeMessages, ...partialMessages.values()]);\n }\n if (partialMessages.size > 0) {\n throw new Error(\"A partial message was not marked as complete\");\n }\n },\n [stream],\n );\n\n return { messages, sendMessage };\n};\n"],"mappings":"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","names":["useState","message","useState"]}
1
+ {"version":3,"sources":["../src/useLangGraphRuntime.ts","../src/convertLangchainMessages.ts","../src/useLangGraphMessages.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { LangChainMessage } from \"./types\";\nimport {\n useExternalMessageConverter,\n useExternalStoreRuntime,\n} from \"@assistant-ui/react\";\nimport { convertLangchainMessages } from \"./convertLangchainMessages\";\nimport { useLangGraphMessages } from \"./useLangGraphMessages\";\nimport { ExternalStoreRuntime } from \"@assistant-ui/react\";\n\nexport const useLangGraphRuntime = ({\n threadId,\n stream,\n}: {\n threadId?: string | undefined;\n stream: (messages: LangChainMessage[]) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}): ExternalStoreRuntime => {\n const { messages, sendMessage } = useLangGraphMessages({\n stream,\n });\n\n const [isRunning, setIsRunning] = useState(false);\n const handleSendMessage = async (messages: LangChainMessage[]) => {\n try {\n setIsRunning(true);\n await sendMessage(messages);\n } catch (error) {\n console.error(\"Error streaming messages:\", error);\n } finally {\n setIsRunning(false);\n }\n };\n\n const threadMessages = useExternalMessageConverter({\n callback: convertLangchainMessages,\n messages,\n isRunning,\n });\n\n return useExternalStoreRuntime({\n threadId,\n isRunning,\n messages: threadMessages,\n onNew: (msg) => {\n if (msg.content.length !== 1 || msg.content[0]?.type !== \"text\")\n throw new Error(\"Only text messages are supported\");\n return handleSendMessage([\n {\n type: \"human\",\n content: msg.content[0].text,\n },\n ]);\n },\n onAddToolResult: async ({ toolCallId, toolName, result }) => {\n await handleSendMessage([\n {\n type: \"tool\",\n name: toolName,\n tool_call_id: toolCallId,\n content: JSON.stringify(result),\n },\n ]);\n },\n });\n};\n","\"use client\";\n\nimport { useExternalMessageConverter } from \"@assistant-ui/react\";\nimport { LangChainMessage } from \"./types\";\nimport { ToolCallContentPart } from \"@assistant-ui/react\";\n\nexport const convertLangchainMessages: useExternalMessageConverter.Callback<\n LangChainMessage\n> = (message) => {\n switch (message.type) {\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: [{ type: \"text\", text: message.content }],\n };\n case \"ai\":\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n {\n type: \"text\",\n text: message.content,\n },\n ...(message.tool_calls?.map(\n (chunk): ToolCallContentPart => ({\n type: \"tool-call\",\n toolCallId: chunk.id,\n toolName: chunk.name,\n args: chunk.args,\n argsText:\n message.tool_call_chunks?.find((c) => c.id === chunk.id)\n ?.args ?? JSON.stringify(chunk.args),\n }),\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 };\n }\n};\n","import { useState, useCallback } from \"react\";\n\nexport const useLangGraphMessages = <TMessage>({\n stream,\n}: {\n stream: (messages: TMessage[]) => Promise<\n AsyncGenerator<{\n event: string;\n data: any;\n }>\n >;\n}) => {\n const [messages, setMessages] = useState<TMessage[]>([]);\n\n const sendMessage = useCallback(\n async (messages: TMessage[]) => {\n if (messages.length > 0) {\n setMessages((currentMessages) => [...currentMessages, ...messages]);\n }\n\n const response = await stream(messages);\n\n const completeMessages: TMessage[] = [];\n let partialMessages: Map<string, TMessage> = new Map();\n for await (const chunk of response) {\n if (chunk.event === \"messages/partial\") {\n for (const message of chunk.data) {\n if (!message.id) throw new Error(\"Partial message missing id\");\n\n partialMessages.set(message.id, message);\n }\n } else if (chunk.event === \"messages/complete\") {\n for (const message of chunk.data) {\n if (!message.id) continue;\n partialMessages.delete(message.id);\n }\n\n completeMessages.push(...chunk.data);\n } else {\n continue;\n }\n\n setMessages([...completeMessages, ...partialMessages.values()]);\n }\n if (partialMessages.size > 0) {\n throw new Error(\"A partial message was not marked as complete\");\n }\n },\n [stream],\n );\n\n return { messages, sendMessage };\n};\n"],"mappings":";AAAA,SAAS,YAAAA,iBAAgB;AAEzB;AAAA,EACE;AAAA,EACA;AAAA,OACK;;;ACCA,IAAM,2BAET,CAAC,YAAY;AACf,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAI,QAAQ;AAAA,QACZ,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ;AAAA,UAChB;AAAA,UACA,GAAI,QAAQ,YAAY;AAAA,YACtB,CAAC,WAAgC;AAAA,cAC/B,MAAM;AAAA,cACN,YAAY,MAAM;AAAA,cAClB,UAAU,MAAM;AAAA,cAChB,MAAM,MAAM;AAAA,cACZ,UACE,QAAQ,kBAAkB,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,GACnD,QAAQ,KAAK,UAAU,MAAM,IAAI;AAAA,YACzC;AAAA,UACF,KAAK,CAAC;AAAA,QACR;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ;AAAA,QAClB,YAAY,QAAQ;AAAA,QACpB,QAAQ,QAAQ;AAAA,MAClB;AAAA,EACJ;AACF;;;ACpDA,SAAS,UAAU,mBAAmB;AAE/B,IAAM,uBAAuB,CAAW;AAAA,EAC7C;AACF,MAOM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAI,SAAqB,CAAC,CAAC;AAEvD,QAAM,cAAc;AAAA,IAClB,OAAOC,cAAyB;AAC9B,UAAIA,UAAS,SAAS,GAAG;AACvB,oBAAY,CAAC,oBAAoB,CAAC,GAAG,iBAAiB,GAAGA,SAAQ,CAAC;AAAA,MACpE;AAEA,YAAM,WAAW,MAAM,OAAOA,SAAQ;AAEtC,YAAM,mBAA+B,CAAC;AACtC,UAAI,kBAAyC,oBAAI,IAAI;AACrD,uBAAiB,SAAS,UAAU;AAClC,YAAI,MAAM,UAAU,oBAAoB;AACtC,qBAAW,WAAW,MAAM,MAAM;AAChC,gBAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,4BAA4B;AAE7D,4BAAgB,IAAI,QAAQ,IAAI,OAAO;AAAA,UACzC;AAAA,QACF,WAAW,MAAM,UAAU,qBAAqB;AAC9C,qBAAW,WAAW,MAAM,MAAM;AAChC,gBAAI,CAAC,QAAQ,GAAI;AACjB,4BAAgB,OAAO,QAAQ,EAAE;AAAA,UACnC;AAEA,2BAAiB,KAAK,GAAG,MAAM,IAAI;AAAA,QACrC,OAAO;AACL;AAAA,QACF;AAEA,oBAAY,CAAC,GAAG,kBAAkB,GAAG,gBAAgB,OAAO,CAAC,CAAC;AAAA,MAChE;AACA,UAAI,gBAAgB,OAAO,GAAG;AAC5B,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,IACF;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SAAO,EAAE,UAAU,YAAY;AACjC;;;AF1CO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAQ4B;AAC1B,QAAM,EAAE,UAAU,YAAY,IAAI,qBAAqB;AAAA,IACrD;AAAA,EACF,CAAC;AAED,QAAM,CAAC,WAAW,YAAY,IAAIC,UAAS,KAAK;AAChD,QAAM,oBAAoB,OAAOC,cAAiC;AAChE,QAAI;AACF,mBAAa,IAAI;AACjB,YAAM,YAAYA,SAAQ;AAAA,IAC5B,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAAA,IAClD,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,iBAAiB,4BAA4B;AAAA,IACjD,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,wBAAwB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO,CAAC,QAAQ;AACd,UAAI,IAAI,QAAQ,WAAW,KAAK,IAAI,QAAQ,CAAC,GAAG,SAAS;AACvD,cAAM,IAAI,MAAM,kCAAkC;AACpD,aAAO,kBAAkB;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,UACN,SAAS,IAAI,QAAQ,CAAC,EAAE;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,iBAAiB,OAAO,EAAE,YAAY,UAAU,OAAO,MAAM;AAC3D,YAAM,kBAAkB;AAAA,QACtB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,SAAS,KAAK,UAAU,MAAM;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["useState","messages","useState","messages"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-langgraph",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {