@ag-ui/langgraph 0.0.25-alpha.0 → 0.0.25

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.ts CHANGED
@@ -1,199 +1,203 @@
1
- import { TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, ThinkingTextMessageStartEvent, ThinkingTextMessageContentEvent, ThinkingTextMessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ThinkingStartEvent, ThinkingEndEvent, StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent, RawEvent, CustomEvent, RunStartedEvent, RunFinishedEvent, RunErrorEvent, StepStartedEvent, StepFinishedEvent, AgentConfig, AbstractAgent, RunAgentInput as RunAgentInput$1, FetchRunHistoryOptions, FetchRunHistoryResult, HttpAgentConfig, HttpAgent } from '@ag-ui/client';
2
- import { BaseCheckpointSaver } from '@langchain/langgraph';
3
- import * as _langchain_langgraph_sdk_dist_types_stream from '@langchain/langgraph-sdk/dist/types.stream';
4
- import * as _langchain_langgraph_sdk from '@langchain/langgraph-sdk';
5
- import { Message, AssistantGraph, Client, Config, Assistant, StreamMode, ThreadState, Thread } from '@langchain/langgraph-sdk';
6
- import { Subscriber, Observable } from 'rxjs';
7
- import { MessageType } from '@langchain/core/messages';
8
- import { RunAgentInput } from '@ag-ui/core';
9
- import { RunsStreamPayload } from '@langchain/langgraph-sdk/dist/types';
1
+ import { AbstractAgent, AgentConfig, CustomEvent, HttpAgent, MessagesSnapshotEvent, RawEvent, ReasoningEncryptedValueEvent, ReasoningEndEvent, ReasoningMessageContentEvent, ReasoningMessageEndEvent, ReasoningMessageStartEvent, ReasoningStartEvent, RunAgentInput, RunErrorEvent, RunFinishedEvent, RunStartedEvent, StateDeltaEvent, StateSnapshotEvent, StepFinishedEvent, StepStartedEvent, TextMessageContentEvent, TextMessageEndEvent, TextMessageStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, ToolCallStartEvent } from "@ag-ui/client";
2
+ import * as _langchain_langgraph_sdk0 from "@langchain/langgraph-sdk";
3
+ import { Assistant, AssistantGraph, Client, Config, Message, StreamMode, Thread, ThreadState } from "@langchain/langgraph-sdk";
4
+ import * as _langchain_langgraph_sdk_dist_types_stream0 from "@langchain/langgraph-sdk/dist/types.stream";
5
+ import { Observable, Subscriber } from "rxjs";
6
+ import { MessageType } from "@langchain/core/messages";
7
+ import { RunAgentInput as RunAgentInput$1 } from "@ag-ui/core";
8
+ import { RunsStreamPayload } from "@langchain/langgraph-sdk/dist/types";
10
9
 
10
+ //#region src/types.d.ts
11
11
  declare enum LangGraphEventTypes {
12
- OnChainStart = "on_chain_start",
13
- OnChainStream = "on_chain_stream",
14
- OnChainEnd = "on_chain_end",
15
- OnChatModelStart = "on_chat_model_start",
16
- OnChatModelStream = "on_chat_model_stream",
17
- OnChatModelEnd = "on_chat_model_end",
18
- OnToolStart = "on_tool_start",
19
- OnToolEnd = "on_tool_end",
20
- OnCustomEvent = "on_custom_event",
21
- OnInterrupt = "on_interrupt"
12
+ OnChainStart = "on_chain_start",
13
+ OnChainStream = "on_chain_stream",
14
+ OnChainEnd = "on_chain_end",
15
+ OnChatModelStart = "on_chat_model_start",
16
+ OnChatModelStream = "on_chat_model_stream",
17
+ OnChatModelEnd = "on_chat_model_end",
18
+ OnToolStart = "on_tool_start",
19
+ OnToolEnd = "on_tool_end",
20
+ OnCustomEvent = "on_custom_event",
21
+ OnInterrupt = "on_interrupt"
22
22
  }
23
23
  type LangGraphToolWithName = {
24
- type: "function";
25
- name?: string;
26
- function: {
27
- name: string;
28
- description: string;
29
- parameters: any;
30
- };
24
+ type: "function";
25
+ name?: string;
26
+ function: {
27
+ name: string;
28
+ description: string;
29
+ parameters: any;
30
+ };
31
31
  };
32
- type State<TDefinedState = Record<string, any>> = {
33
- [k in keyof TDefinedState]: TDefinedState[k] | null;
34
- } & Record<string, any>;
32
+ type State<TDefinedState = Record<string, any>> = { [k in keyof TDefinedState]: TDefinedState[k] | null } & Record<string, any>;
35
33
  interface StateEnrichment {
36
- messages: Message[];
34
+ messages: Message[];
35
+ tools: LangGraphToolWithName[];
36
+ 'ag-ui': {
37
37
  tools: LangGraphToolWithName[];
38
- 'ag-ui': {
39
- tools: LangGraphToolWithName[];
40
- context: RunAgentInput['context'];
41
- };
38
+ context: RunAgentInput$1['context'];
39
+ };
42
40
  }
43
41
  type SchemaKeys = {
44
- input: string[] | null;
45
- output: string[] | null;
46
- context: string[] | null;
47
- config: string[] | null;
42
+ input: string[] | null;
43
+ output: string[] | null;
44
+ context: string[] | null;
45
+ config: string[] | null;
48
46
  } | null;
49
47
  type MessageInProgress = {
50
- id: string;
51
- toolCallId?: string | null;
52
- toolCallName?: string | null;
48
+ id: string;
49
+ toolCallId?: string | null;
50
+ toolCallName?: string | null;
53
51
  };
54
- type ThinkingInProgress = {
55
- index: number;
56
- type?: LangGraphReasoning['type'];
52
+ type ReasoningInProgress = {
53
+ index: number;
54
+ type?: LangGraphReasoning['type'];
55
+ messageId: string;
56
+ signature?: string;
57
57
  };
58
58
  interface RunMetadata {
59
- id: string;
60
- schemaKeys?: SchemaKeys;
61
- nodeName?: string;
62
- prevNodeName?: string | null;
63
- exitingNode?: boolean;
64
- manuallyEmittedState?: State | null;
65
- threadId?: string;
66
- graphInfo?: AssistantGraph;
67
- hasFunctionStreaming?: boolean;
68
- serverRunIdKnown?: boolean;
59
+ id: string;
60
+ schemaKeys?: SchemaKeys;
61
+ nodeName?: string;
62
+ prevNodeName?: string | null;
63
+ exitingNode?: boolean;
64
+ manuallyEmittedState?: State | null;
65
+ threadId?: string;
66
+ graphInfo?: AssistantGraph;
67
+ hasFunctionStreaming?: boolean;
68
+ serverRunIdKnown?: boolean;
69
+ hasPredictState?: boolean;
69
70
  }
70
71
  type MessagesInProgressRecord = Record<string, MessageInProgress | null>;
71
72
  interface ToolCall {
72
- id: string;
73
- name: string;
74
- args: Record<string, unknown>;
73
+ id: string;
74
+ name: string;
75
+ args: Record<string, unknown>;
75
76
  }
76
77
  type BaseLangGraphPlatformMessage = Omit<Message, "isResultMessage" | "isTextMessage" | "isImageMessage" | "isActionExecutionMessage" | "isAgentStateMessage" | "type" | "createdAt"> & {
77
- content: string;
78
- role: string;
79
- additional_kwargs?: Record<string, unknown>;
80
- type: MessageType;
78
+ content: string;
79
+ role: string;
80
+ additional_kwargs?: Record<string, unknown>;
81
+ type: MessageType;
81
82
  };
82
83
  interface LangGraphPlatformResultMessage extends BaseLangGraphPlatformMessage {
83
- tool_call_id: string;
84
- name: string;
84
+ tool_call_id: string;
85
+ name: string;
85
86
  }
86
87
  interface LangGraphPlatformActionExecutionMessage extends BaseLangGraphPlatformMessage {
87
- tool_calls: ToolCall[];
88
+ tool_calls: ToolCall[];
88
89
  }
89
90
  type LangGraphPlatformMessage = LangGraphPlatformActionExecutionMessage | LangGraphPlatformResultMessage | BaseLangGraphPlatformMessage;
90
91
  declare enum CustomEventNames {
91
- ManuallyEmitMessage = "manually_emit_message",
92
- ManuallyEmitToolCall = "manually_emit_tool_call",
93
- ManuallyEmitState = "manually_emit_state",
94
- Exit = "exit"
92
+ ManuallyEmitMessage = "manually_emit_message",
93
+ ManuallyEmitToolCall = "manually_emit_tool_call",
94
+ ManuallyEmitState = "manually_emit_state",
95
+ Exit = "exit"
95
96
  }
96
97
  interface PredictStateTool {
97
- tool: string;
98
- state_key: string;
99
- tool_argument: string;
98
+ tool: string;
99
+ state_key: string;
100
+ tool_argument: string;
100
101
  }
101
102
  interface LangGraphReasoning {
102
- type: 'text';
103
- text: string;
104
- index: number;
103
+ type: 'text';
104
+ text: string;
105
+ index: number;
106
+ signature?: string;
105
107
  }
106
-
107
- type ProcessedEvents = TextMessageStartEvent | TextMessageContentEvent | TextMessageEndEvent | ThinkingTextMessageStartEvent | ThinkingTextMessageContentEvent | ThinkingTextMessageEndEvent | ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent | ToolCallResultEvent | ThinkingStartEvent | ThinkingEndEvent | StateSnapshotEvent | StateDeltaEvent | MessagesSnapshotEvent | RawEvent | CustomEvent | RunStartedEvent | RunFinishedEvent | RunErrorEvent | StepStartedEvent | StepFinishedEvent;
108
- type RunAgentExtendedInput<TStreamMode extends StreamMode | StreamMode[] = StreamMode, TSubgraphs extends boolean = false> = Omit<RunAgentInput$1, "forwardedProps"> & {
109
- forwardedProps?: Omit<RunsStreamPayload<TStreamMode, TSubgraphs>, "input"> & {
110
- nodeName?: string;
111
- threadMetadata?: Record<string, any>;
112
- };
108
+ //#endregion
109
+ //#region src/agent.d.ts
110
+ type ProcessedEvents = TextMessageStartEvent | TextMessageContentEvent | TextMessageEndEvent | ReasoningStartEvent | ReasoningMessageStartEvent | ReasoningMessageContentEvent | ReasoningMessageEndEvent | ReasoningEndEvent | ReasoningEncryptedValueEvent | ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent | ToolCallResultEvent | StateSnapshotEvent | StateDeltaEvent | MessagesSnapshotEvent | RawEvent | CustomEvent | RunStartedEvent | RunFinishedEvent | RunErrorEvent | StepStartedEvent | StepFinishedEvent;
111
+ type RunAgentExtendedInput<TStreamMode extends StreamMode | StreamMode[] = StreamMode, TSubgraphs extends boolean = false> = Omit<RunAgentInput, "forwardedProps"> & {
112
+ forwardedProps?: Omit<RunsStreamPayload<TStreamMode, TSubgraphs>, "input"> & {
113
+ nodeName?: string;
114
+ threadMetadata?: Record<string, any>;
115
+ };
113
116
  };
114
117
  interface RegenerateInput extends RunAgentExtendedInput {
115
- messageCheckpoint: Message;
118
+ messageCheckpoint: Message;
116
119
  }
117
120
  interface LangGraphAgentConfig extends AgentConfig {
118
- client?: Client;
119
- deploymentUrl: string;
120
- langsmithApiKey?: string;
121
- propertyHeaders?: Record<string, string>;
122
- assistantConfig?: Config;
123
- agentName?: string;
124
- graphId: string;
121
+ client?: Client;
122
+ deploymentUrl: string;
123
+ langsmithApiKey?: string;
124
+ propertyHeaders?: Record<string, string>;
125
+ assistantConfig?: Config;
126
+ agentName?: string;
127
+ graphId: string;
125
128
  }
126
129
  declare class LangGraphAgent extends AbstractAgent {
127
- client: Client;
128
- assistantConfig?: Config;
129
- agentName?: string;
130
- graphId: string;
131
- assistant?: Assistant;
132
- messagesInProcess: MessagesInProgressRecord;
133
- thinkingProcess: null | ThinkingInProgress;
134
- activeRun?: RunMetadata;
135
- private cancelRequested;
136
- private cancelSent;
137
- subscriber: Subscriber<ProcessedEvents>;
138
- constantSchemaKeys: string[];
139
- config: LangGraphAgentConfig;
140
- constructor(config: LangGraphAgentConfig);
141
- clone(): any;
142
- dispatchEvent(event: ProcessedEvents): boolean;
143
- run(input: RunAgentInput$1): Observable<ProcessedEvents>;
144
- runAgentStream(input: RunAgentExtendedInput, subscriber: Subscriber<ProcessedEvents>): Promise<void>;
145
- prepareRegenerateStream(input: RegenerateInput, streamMode: StreamMode | StreamMode[]): Promise<void | {
146
- streamResponse: _langchain_langgraph_sdk_dist_types_stream.TypedAsyncGenerator<"messages" | "values" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "custom" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk.DefaultValues, _langchain_langgraph_sdk.DefaultValues, unknown>;
147
- state: ThreadState<State>;
148
- streamMode: StreamMode | StreamMode[];
149
- }>;
150
- prepareStream(input: RunAgentExtendedInput, streamMode: StreamMode | StreamMode[]): Promise<void | {
151
- streamResponse: _langchain_langgraph_sdk_dist_types_stream.TypedAsyncGenerator<"messages" | "values" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "custom" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk.DefaultValues, _langchain_langgraph_sdk.DefaultValues, unknown>;
152
- state: ThreadState<State>;
153
- streamMode: StreamMode | StreamMode[];
154
- } | {
155
- streamResponse: _langchain_langgraph_sdk_dist_types_stream.TypedAsyncGenerator<"messages" | "values" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "custom" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk.DefaultValues, _langchain_langgraph_sdk.DefaultValues, unknown>;
156
- state: ThreadState<State>;
157
- }>;
158
- handleStreamEvents(stream: Awaited<ReturnType<typeof this.prepareStream> | ReturnType<typeof this.prepareRegenerateStream>>, threadId: string, subscriber: Subscriber<ProcessedEvents>, input: RunAgentExtendedInput, streamModes: StreamMode | StreamMode[]): Promise<void>;
159
- handleSingleEvent(event: any): void;
160
- abortRun(): void;
161
- handleThinkingEvent(reasoningData: LangGraphReasoning): void;
162
- getStateSnapshot(threadState: ThreadState<State>): State;
163
- getOrCreateThread(threadId: string, threadMetadata?: Record<string, any>): Promise<Thread>;
164
- getThread(threadId: string): Promise<Thread<_langchain_langgraph_sdk.DefaultValues>>;
165
- createThread(payload?: Parameters<typeof this$1.client.threads.create>[0]): Promise<Thread<_langchain_langgraph_sdk.DefaultValues>>;
166
- mergeConfigs({ configs, assistant, schemaKeys, }: {
167
- configs: Config[];
168
- assistant: Assistant;
169
- schemaKeys: SchemaKeys;
170
- }): Promise<Config>;
171
- getMessageInProgress(runId: string): MessageInProgress | null;
172
- setMessageInProgress(runId: string, data: MessageInProgress): void;
173
- getAssistant(): Promise<Assistant>;
174
- getSchemaKeys(): Promise<SchemaKeys>;
175
- langGraphDefaultMergeState(state: State, messages: Message[], input: RunAgentExtendedInput): State<StateEnrichment>;
176
- handleNodeChange(nodeName: string | undefined): void;
177
- startStep(nodeName: string): void;
178
- endStep(): void;
179
- protected fetchRunHistory(options: FetchRunHistoryOptions): Promise<FetchRunHistoryResult | undefined>;
180
- getCheckpointByMessage(messageId: string, threadId: string, checkpoint?: null | {
181
- checkpoint_id?: null | string;
182
- checkpoint_ns: string;
183
- }): Promise<ThreadState>;
184
- }
185
-
186
- interface LangGraphHttpAgentConfig extends HttpAgentConfig {
187
- checkpointer?: BaseCheckpointSaver;
130
+ client: Client;
131
+ assistantConfig?: Config;
132
+ agentName?: string;
133
+ graphId: string;
134
+ assistant?: Assistant;
135
+ messagesInProcess: MessagesInProgressRecord;
136
+ reasoningProcess: null | ReasoningInProgress;
137
+ activeRun?: RunMetadata;
138
+ private cancelRequested;
139
+ private cancelSent;
140
+ private eventsStreamActive;
141
+ subscriber: Subscriber<ProcessedEvents>;
142
+ constantSchemaKeys: string[];
143
+ config: LangGraphAgentConfig;
144
+ constructor(config: LangGraphAgentConfig);
145
+ clone(): any;
146
+ dispatchEvent(event: ProcessedEvents): boolean;
147
+ run(input: RunAgentInput): Observable<ProcessedEvents>;
148
+ runAgentStream(input: RunAgentExtendedInput, subscriber: Subscriber<ProcessedEvents>): Promise<void>;
149
+ prepareRegenerateStream(input: RegenerateInput, streamMode: StreamMode | StreamMode[]): Promise<void | {
150
+ streamResponse: _langchain_langgraph_sdk_dist_types_stream0.TypedAsyncGenerator<"messages" | "values" | "custom" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk0.DefaultValues, _langchain_langgraph_sdk0.DefaultValues, unknown>;
151
+ state: ThreadState<State>;
152
+ streamMode: StreamMode | StreamMode[];
153
+ }>;
154
+ prepareStream(input: RunAgentExtendedInput, streamMode: StreamMode | StreamMode[]): Promise<void | {
155
+ streamResponse: _langchain_langgraph_sdk_dist_types_stream0.TypedAsyncGenerator<"messages" | "values" | "custom" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk0.DefaultValues, _langchain_langgraph_sdk0.DefaultValues, unknown>;
156
+ state: ThreadState<State>;
157
+ streamMode: StreamMode | StreamMode[];
158
+ } | {
159
+ streamResponse: _langchain_langgraph_sdk_dist_types_stream0.TypedAsyncGenerator<"messages" | "values" | "custom" | "updates" | "events" | "debug" | "tasks" | "checkpoints" | "messages-tuple" | StreamMode[], false, _langchain_langgraph_sdk0.DefaultValues, _langchain_langgraph_sdk0.DefaultValues, unknown>;
160
+ state: ThreadState<State>;
161
+ }>;
162
+ handleStreamEvents(stream: Awaited<ReturnType<typeof this.prepareStream> | ReturnType<typeof this.prepareRegenerateStream>>, threadId: string, subscriber: Subscriber<ProcessedEvents>, input: RunAgentExtendedInput, streamModes: StreamMode | StreamMode[]): Promise<void>;
163
+ handleSingleEvent(event: any): void;
164
+ /**
165
+ * Process [AIMessageChunk, metadata] tuples from messages-tuple stream mode
166
+ * and convert them into AG-UI text message and tool call events.
167
+ * Uses the same messagesInProcess tracking as events-mode streaming.
168
+ */
169
+ private handleMessagesTupleEvent;
170
+ abortRun(): void;
171
+ handleReasoningEvent(reasoningData: LangGraphReasoning): void;
172
+ getStateSnapshot(threadState: ThreadState<State>): State;
173
+ getOrCreateThread(threadId: string, threadMetadata?: Record<string, any>): Promise<Thread>;
174
+ getThread(threadId: string): Promise<Thread<_langchain_langgraph_sdk0.DefaultValues>>;
175
+ createThread(payload?: Parameters<typeof this.client.threads.create>[0]): Promise<Thread<_langchain_langgraph_sdk0.DefaultValues>>;
176
+ mergeConfigs({
177
+ configs,
178
+ assistant,
179
+ schemaKeys
180
+ }: {
181
+ configs: Config[];
182
+ assistant: Assistant;
183
+ schemaKeys: SchemaKeys;
184
+ }): Promise<Config>;
185
+ getMessageInProgress(runId: string): MessageInProgress | null;
186
+ setMessageInProgress(runId: string, data: MessageInProgress): void;
187
+ getAssistant(): Promise<Assistant>;
188
+ getSchemaKeys(): Promise<SchemaKeys>;
189
+ langGraphDefaultMergeState(state: State, messages: Message[], input: RunAgentExtendedInput): State<StateEnrichment>;
190
+ handleNodeChange(nodeName: string | undefined): void;
191
+ startStep(nodeName: string): void;
192
+ endStep(): void;
193
+ getCheckpointByMessage(messageId: string, threadId: string, checkpoint?: null | {
194
+ checkpoint_id?: null | string;
195
+ checkpoint_ns: string;
196
+ }): Promise<ThreadState>;
188
197
  }
189
- declare class LangGraphHttpAgent extends HttpAgent {
190
- protected checkpointer?: BaseCheckpointSaver;
191
- constructor(config: LangGraphHttpAgentConfig);
192
- protected fetchRunHistory(options: FetchRunHistoryOptions): Promise<FetchRunHistoryResult | undefined>;
193
- private convertMessages;
194
- private convertMessage;
195
- private mapRole;
196
- clone(): LangGraphHttpAgent;
197
- }
198
-
199
- export { CustomEventNames, LangGraphAgent, type LangGraphAgentConfig, LangGraphEventTypes, LangGraphHttpAgent, type LangGraphHttpAgentConfig, type LangGraphPlatformMessage, type LangGraphReasoning, type LangGraphToolWithName, type MessageInProgress, type MessagesInProgressRecord, type PredictStateTool, type ProcessedEvents, type RunMetadata, type SchemaKeys, type State, type StateEnrichment, type ThinkingInProgress, type ToolCall };
198
+ //#endregion
199
+ //#region src/index.d.ts
200
+ declare class LangGraphHttpAgent extends HttpAgent {}
201
+ //#endregion
202
+ export { CustomEventNames, LangGraphAgent, LangGraphAgentConfig, LangGraphEventTypes, LangGraphHttpAgent, LangGraphPlatformMessage, LangGraphReasoning, LangGraphToolWithName, MessageInProgress, MessagesInProgressRecord, PredictStateTool, ProcessedEvents, ReasoningInProgress, RunMetadata, SchemaKeys, State, StateEnrichment, ToolCall };
203
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/agent.ts","../src/index.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
- "use strict";var Y=Object.defineProperty,Et=Object.defineProperties,vt=Object.getOwnPropertyDescriptor,_t=Object.getOwnPropertyDescriptors,Tt=Object.getOwnPropertyNames,V=Object.getOwnPropertySymbols;var et=Object.prototype.hasOwnProperty,dt=Object.prototype.propertyIsEnumerable;var ct=(r,n)=>(n=Symbol[r])?n:Symbol.for("Symbol."+r);var ht=(r,n,t)=>n in r?Y(r,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[n]=t,p=(r,n)=>{for(var t in n||(n={}))et.call(n,t)&&ht(r,t,n[t]);if(V)for(var t of V(n))dt.call(n,t)&&ht(r,t,n[t]);return r},E=(r,n)=>Et(r,_t(n));var nt=(r,n)=>{var t={};for(var e in r)et.call(r,e)&&n.indexOf(e)<0&&(t[e]=r[e]);if(r!=null&&V)for(var e of V(r))n.indexOf(e)<0&&dt.call(r,e)&&(t[e]=r[e]);return t};var Rt=(r,n)=>{for(var t in n)Y(r,t,{get:n[t],enumerable:!0})},It=(r,n,t,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of Tt(n))!et.call(r,s)&&s!==t&&Y(r,s,{get:()=>n[s],enumerable:!(e=vt(n,s))||e.enumerable});return r};var Mt=r=>It(Y({},"__esModule",{value:!0}),r);var z=(r,n,t)=>(n=r[ct("asyncIterator")])?n.call(r):(r=r[ct("iterator")](),n={},t=(e,s)=>(s=r[e])&&(n[e]=a=>new Promise((i,o,h)=>(a=s.call(r,a),h=a.done,Promise.resolve(a.value).then(c=>i({value:c,done:h}),o)))),t("next"),t("return"),n);var kt={};Rt(kt,{CustomEventNames:()=>gt,LangGraphAgent:()=>rt,LangGraphEventTypes:()=>ut,LangGraphHttpAgent:()=>ot});module.exports=Mt(kt);var St=require("@ag-ui/client");var ft=require("rxjs"),yt=require("@langchain/langgraph-sdk"),B=require("@ag-ui/client");var ut=(d=>(d.OnChainStart="on_chain_start",d.OnChainStream="on_chain_stream",d.OnChainEnd="on_chain_end",d.OnChatModelStart="on_chat_model_start",d.OnChatModelStream="on_chat_model_stream",d.OnChatModelEnd="on_chat_model_end",d.OnToolStart="on_tool_start",d.OnToolEnd="on_tool_end",d.OnCustomEvent="on_custom_event",d.OnInterrupt="on_interrupt",d))(ut||{}),gt=(s=>(s.ManuallyEmitMessage="manually_emit_message",s.ManuallyEmitToolCall="manually_emit_tool_call",s.ManuallyEmitState="manually_emit_state",s.Exit="exit",s))(gt||{});var l=require("@ag-ui/client");var st=["messages","tools"];function Z(r,n){return Object.fromEntries(Object.entries(r).filter(([t])=>n.includes(t)))}function pt({mode:r,state:n,schemaKeys:t}){let e=r==="start"?n:null;return e&&(t!=null&&t.input)&&(e=Z(e,[...st,...t.input])),e}function Ct(r){var t;let n=[];for(let e of r)if(e.type==="text"&&e.text)n.push({type:"text",text:e.text});else if(e.type==="image_url"){let s=typeof e.image_url=="string"?e.image_url:(t=e.image_url)==null?void 0:t.url;if(!s)continue;if(s.startsWith("data:")){let[a,i]=s.split(",",2),o=a.includes(":")?a.split(":")[1].split(";")[0]:"image/png";n.push({type:"binary",mimeType:o,data:i||""})}else n.push({type:"binary",mimeType:"image/png",url:s})}return n}function xt(r){let n=[];for(let t of r)if(t.type==="text")n.push({type:"text",text:t.text});else if(t.type==="binary"){let e;if(t.url)e=t.url;else if(t.data)e=`data:${t.mimeType};base64,${t.data}`;else if(t.id)e=t.id;else continue;n.push({type:"image_url",image_url:{url:e}})}return n}function at(r){return r.map(n=>{var t;switch(n.type){case"human":let e;return Array.isArray(n.content)?e=Ct(n.content):e=Q(F(n.content)),{id:n.id,role:"user",content:e};case"ai":let s=F(n.content);return{id:n.id,role:"assistant",content:s?Q(s):"",toolCalls:(t=n.tool_calls)==null?void 0:t.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args)}}))};case"system":return{id:n.id,role:"system",content:Q(F(n.content))};case"tool":return{id:n.id,role:"tool",content:Q(F(n.content)),toolCallId:n.tool_call_id};default:throw new Error("message type returned from LangGraph is not supported.")}})}function it(r){return r.map((n,t)=>{var e,s;switch(n.role){case"user":let a;return typeof n.content=="string"?a=n.content:Array.isArray(n.content)?a=xt(n.content):a=String(n.content),{id:n.id,role:n.role,content:a,type:"human"};case"assistant":return{id:n.id,type:"ai",role:n.role,content:(e=n.content)!=null?e:"",tool_calls:((s=n.toolCalls)!=null?s:[]).map(i=>({id:i.id,name:i.function.name,args:JSON.parse(i.function.arguments),type:"tool_call"}))};case"system":return{id:n.id,role:n.role,content:n.content,type:"system"};case"tool":return{content:n.content,role:n.role,type:n.role,tool_call_id:n.toolCallId,id:n.id};default:throw console.error(`Message role ${n.role} is not implemented`),new Error("message role is not supported.")}})}function Q(r){return typeof r=="string"?r:JSON.stringify(r)}function mt(r){var t,e,s,a,i;let n=(t=r.chunk)==null?void 0:t.content;if(n&&Array.isArray(n)&&n.length&&n[0])return n[0].thinking?{text:n[0].thinking,type:"text",index:n[0].index}:null;if((a=(s=(e=r.chunk.additional_kwargs)==null?void 0:e.reasoning)==null?void 0:s.summary)!=null&&a[0]){let o=(i=r.chunk.additional_kwargs)==null?void 0:i.reasoning.summary[0];return!o||!o.text?null:{type:"text",text:o.text,index:o.index}}return null}function F(r){var n;if(!r)return null;if(typeof r=="string")return r;if(Array.isArray(r)&&r.length){let t=(n=r.find(e=>e.type==="text"))==null?void 0:n.text;return t!=null?t:null}return null}var rt=class extends l.AbstractAgent{constructor(t){var e,s;super(t);this.cancelRequested=!1;this.cancelSent=!1;this.constantSchemaKeys=st;this.config=t,this.messagesInProcess={},this.agentName=t.agentName,this.graphId=t.graphId,this.assistantConfig=t.assistantConfig,this.thinkingProcess=null,this.client=(s=t==null?void 0:t.client)!=null?s:new yt.Client({apiUrl:t.deploymentUrl,apiKey:t.langsmithApiKey,defaultHeaders:p({},(e=t.propertyHeaders)!=null?e:{})})}clone(){return Object.assign(super.clone(),{config:this.config,messagesInProcess:structuredClone(this.messagesInProcess),agentName:this.agentName,graphId:this.graphId,assistantConfig:this.assistantConfig,thinkingProcess:this.thinkingProcess?structuredClone(this.thinkingProcess):null,constantSchemaKeys:[...this.constantSchemaKeys],client:this.client,assistant:this.assistant,activeRun:this.activeRun?structuredClone(this.activeRun):void 0,cancelRequested:this.cancelRequested,cancelSent:this.cancelSent})}dispatchEvent(t){return this.subscriber.next(t),!0}run(t){return new ft.Observable(e=>(this.runAgentStream(t,e),()=>{}))}async runAgentStream(t,e){var o,h,c;this.activeRun={id:t.runId,threadId:t.threadId,hasFunctionStreaming:!1},this.cancelRequested=!1,this.cancelSent=!1,this.subscriber=e,this.assistant||(this.assistant=await this.getAssistant());let s=(o=t.threadId)!=null?o:(0,B.randomUUID)(),a=(c=(h=t.forwardedProps)==null?void 0:h.streamMode)!=null?c:["events","values","updates"],i=await this.prepareStream(E(p({},t),{threadId:s}),a);if(!i)return e.error("No stream to regenerate");await this.handleStreamEvents(i,s,e,t,Array.isArray(a)?a:[a])}async prepareRegenerateStream(t,e){var c,d,g;let{threadId:s,messageCheckpoint:a}=t,i=await this.getCheckpointByMessage(a.id,s);if(this.assistant||(this.assistant=await this.getAssistant()),!i)return this.subscriber.error("No checkpoint found for message");let o=await this.client.threads.updateState(s,{values:this.langGraphDefaultMergeState(i.values,[],t),checkpointId:i.checkpoint.checkpoint_id,asNode:(d=(c=i.next)==null?void 0:c[0])!=null?d:"__start__"}),h=E(p({},(g=t.forwardedProps)!=null?g:{}),{input:this.langGraphDefaultMergeState(i.values,[a],t),checkpointId:o.checkpoint.checkpoint_id,streamMode:e});return{streamResponse:this.client.runs.stream(s,this.assistant.assistant_id,h),state:i,streamMode:e}}async prepareStream(t,e){var L,w,b,S,G,O,$,X,D,_;let{threadId:s,state:a,messages:i,tools:o,context:h,forwardedProps:c}=t;this.activeRun.manuallyEmittedState=null;let d=c==null?void 0:c.nodeName,g=s!=null?s:(0,B.randomUUID)();this.assistant||(this.assistant=await this.getAssistant());let y=await this.getOrCreateThread(g,c==null?void 0:c.threadMetadata);this.activeRun.threadId=y.thread_id;let v=(L=await this.client.threads.getState(y.thread_id))!=null?L:{values:{}},R=(w=v.values.messages)!=null?w:[],x=it(i),M=this.langGraphDefaultMergeState(E(p({},a),{messages:R}),x,t),k=E(p({},v),{values:E(p({},M),{messages:[...R,...(b=M.messages)!=null?b:[]]})}),A=k.values;if(this.activeRun.schemaKeys=await this.getSchemaKeys(),((S=v.values.messages)!=null?S:[]).length>i.filter(T=>T.role!=="system").length){let T=null;for(let P=i.length-1;P>=0;P--)if(i[P].role==="user"){T=it([i[P]])[0];break}return T?this.prepareRegenerateStream(E(p({},t),{messageCheckpoint:T}),e):this.subscriber.error("No user message found in messages to regenerate")}this.activeRun.graphInfo=await this.client.assistants.getGraph(this.assistant.assistant_id);let m=!((G=c==null?void 0:c.command)!=null&&G.resume)&&g&&this.activeRun.nodeName!="__end__"&&this.activeRun.nodeName?"continue":"start";if(m==="continue"){let T=this.activeRun.graphInfo.edges.find(P=>P.target===this.activeRun.nodeName);await this.client.threads.updateState(g,{values:a,asNode:T==null?void 0:T.source})}let I=pt({mode:m,state:A,schemaKeys:this.activeRun.schemaKeys}),f,J=[this.assistantConfig,c==null?void 0:c.config].filter(Boolean);J.length&&(f=await this.mergeConfigs({configs:J,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys}));let u=c,{command:N}=u,W=nt(u,["command"]);if(N!=null&&N.resume&&typeof N.resume=="string")try{N.resume=JSON.parse(N.resume)}catch(T){}let j=E(p({},W),{command:N,streamMode:e,input:I,config:f,context:p(p({},h),(O=f==null?void 0:f.configurable)!=null?O:{})}),C=(D=(X=($=v.tasks)==null?void 0:$[0])==null?void 0:X.interrupts)!=null?D:[];return C!=null&&C.length&&!((_=c==null?void 0:c.command)!=null&&_.resume)?(this.dispatchEvent({type:l.EventType.RUN_STARTED,threadId:g,runId:t.runId}),this.handleNodeChange(d),C.forEach(T=>{this.dispatchEvent({type:l.EventType.CUSTOM,name:"on_interrupt",value:typeof T.value=="string"?T.value:JSON.stringify(T.value),rawEvent:T})}),this.dispatchEvent({type:l.EventType.RUN_FINISHED,threadId:g,runId:t.runId}),this.subscriber.complete()):{streamResponse:this.client.runs.stream(g,this.assistant.assistant_id,j),state:k}}async handleStreamEvents(t,e,s,a,i){var R,x,M,k,A,m,I,f,C,L,w,b,S,G;let{forwardedProps:o}=a,h=o==null?void 0:o.nodeName;this.subscriber=s;let c=!1;if(!t)return;let{streamResponse:d,state:g}=t;this.activeRun.prevNodeName=null;let y={},v=g;try{this.dispatchEvent({type:l.EventType.RUN_STARTED,threadId:e,runId:this.activeRun.id}),this.handleNodeChange(h);try{for(var J=z(d),N,W,j;N=!(W=await J.next()).done;N=!1){let _=W.value;if(this.cancelRequested&&!this.cancelSent&&((R=this.activeRun)!=null&&R.threadId)&&((x=this.activeRun)!=null&&x.id)){try{await this.client.runs.cancel(this.activeRun.threadId,this.activeRun.id)}catch(q){}finally{this.cancelSent=!0}try{await((M=d==null?void 0:d.return)==null?void 0:M.call(d))}catch(q){}break}let T=(k=a.forwardedProps)==null?void 0:k.streamSubgraphs,P=T&&(_.event.startsWith("events")||_.event.startsWith("values"));if(!i.includes(_.event)&&!P&&_.event!=="error")continue;let K=_;if(_.event==="error"){this.dispatchEvent({type:l.EventType.RUN_ERROR,message:_.data.message,rawEvent:_});break}if(_.event==="updates")continue;if(_.event==="values"){y=K.data;continue}else if(T&&K.event.startsWith("values|")){y=p(p({},y),K.data);continue}let U=K.data,tt=(A=U.metadata)!=null?A:{},H=tt.langgraph_node,lt=U.event;if(tt.run_id&&(this.activeRun.id=tt.run_id,this.activeRun.serverRunIdKnown=!0,this.cancelRequested&&!this.cancelSent&&((m=this.activeRun)!=null&&m.threadId)))try{await this.client.runs.cancel(this.activeRun.threadId,this.activeRun.id)}catch(q){}finally{this.cancelSent=!0}if(H&&H!==this.activeRun.nodeName&&this.handleNodeChange(H),c=c||lt==="on_custom_event"&&U.name==="exit",lt==="on_chain_end"&&this.activeRun.nodeName===H&&(this.activeRun.exitingNode=!0),this.activeRun.exitingNode&&(this.activeRun.manuallyEmittedState=null),(I=this.activeRun.graphInfo)!=null&&I.nodes.some(q=>q.id===H)&&this.handleNodeChange(H),v.values=(f=this.activeRun.manuallyEmittedState)!=null?f:y,!this.activeRun.nodeName)continue;(JSON.stringify(v)!==JSON.stringify(g)||this.activeRun.prevNodeName!=this.activeRun.nodeName||this.activeRun.exitingNode)&&!this.getMessageInProgress(this.activeRun.id)&&(g=v,this.activeRun.prevNodeName=this.activeRun.nodeName,this.dispatchEvent({type:l.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(g),rawEvent:K})),this.dispatchEvent({type:l.EventType.RAW,event:U}),this.handleSingleEvent(U)}}catch(W){j=[W]}finally{try{N&&(W=J.return)&&await W.call(J)}finally{if(j)throw j[0]}}g=await this.client.threads.getState(e);let u=g.tasks,O=(L=(C=u==null?void 0:u[0])==null?void 0:C.interrupts)!=null?L:[],$=g.next.length===0,X=(b=(w=g.metadata)==null?void 0:w.writes)!=null?b:{},D=this.activeRun.nodeName;return O!=null&&O.length||(D=$?"__end__":(S=g.next[0])!=null?S:Object.keys(X)[0]),O.forEach(_=>{this.dispatchEvent({type:l.EventType.CUSTOM,name:"on_interrupt",value:typeof _.value=="string"?_.value:JSON.stringify(_.value),rawEvent:_})}),this.handleNodeChange(D),this.handleNodeChange(void 0),this.dispatchEvent({type:l.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(g)}),this.dispatchEvent({type:l.EventType.MESSAGES_SNAPSHOT,messages:at((G=g.values.messages)!=null?G:[])}),this.dispatchEvent({type:l.EventType.RUN_FINISHED,threadId:e,runId:this.activeRun.id}),this.cancelRequested=!1,this.cancelSent=!1,this.activeRun=void 0,s.complete()}catch(u){return s.error(u)}}handleSingleEvent(t){var e,s,a,i,o,h,c,d,g,y,v,R,x,M;switch(t.event){case"on_chat_model_stream":let k=(e=t.metadata["emit-messages"])!=null?e:!0,A=(s=t.metadata["emit-tool-calls"])!=null?s:!0;if(t.data.chunk.response_metadata.finish_reason)return;let m=this.getMessageInProgress(this.activeRun.id),I=!!(m!=null&&m.id),f=(a=t.data.chunk.tool_call_chunks)==null?void 0:a[0],J=(i=t.metadata.predict_state)==null?void 0:i.some(u=>u.tool===(f==null?void 0:f.name)),N=!I&&(f==null?void 0:f.name),W=I&&(m==null?void 0:m.toolCallId)&&(f==null?void 0:f.args),j=I&&(m==null?void 0:m.toolCallId)&&!f;(j||W||N)&&(this.activeRun.hasFunctionStreaming=!0);let C=mt(t.data),L=F(t.data.chunk.content),w=!!(!f&&L),b=I&&!(m!=null&&m.toolCallId)&&!w;if(C){this.handleThinkingEvent(C);break}if(!C&&this.thinkingProcess&&(this.dispatchEvent({type:l.EventType.THINKING_TEXT_MESSAGE_END}),this.dispatchEvent({type:l.EventType.THINKING_END}),this.thinkingProcess=null),J&&this.dispatchEvent({type:l.EventType.CUSTOM,name:"PredictState",value:t.metadata.predict_state}),j){this.dispatchEvent({type:l.EventType.TOOL_CALL_END,toolCallId:m==null?void 0:m.toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(b){this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_END,messageId:m.id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(N&&A){this.dispatchEvent({type:l.EventType.TOOL_CALL_START,toolCallId:f.id,toolCallName:f.name,parentMessageId:t.data.chunk.id,rawEvent:t})&&this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:f.id,toolCallName:f.name});break}if(W&&A){this.dispatchEvent({type:l.EventType.TOOL_CALL_ARGS,toolCallId:m==null?void 0:m.toolCallId,delta:f.args,rawEvent:t});break}if(w&&k){m||(this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_START,role:"assistant",messageId:t.data.chunk.id,rawEvent:t}),this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:null,toolCallName:null}),m=this.getMessageInProgress(this.activeRun.id)),this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_CONTENT,messageId:m.id,delta:L,rawEvent:t});break}break;case"on_chat_model_end":if((o=this.getMessageInProgress(this.activeRun.id))!=null&&o.toolCallId){this.dispatchEvent({type:l.EventType.TOOL_CALL_END,toolCallId:this.getMessageInProgress(this.activeRun.id).toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if((h=this.getMessageInProgress(this.activeRun.id))!=null&&h.id){this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_END,messageId:this.getMessageInProgress(this.activeRun.id).id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}break;case"on_custom_event":if(t.name==="manually_emit_message"){this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_START,role:"assistant",messageId:t.data.message_id,rawEvent:t}),this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_CONTENT,messageId:t.data.message_id,delta:t.data.message,rawEvent:t}),this.dispatchEvent({type:l.EventType.TEXT_MESSAGE_END,messageId:t.data.message_id,rawEvent:t});break}if(t.name==="manually_emit_tool_call"){this.dispatchEvent({type:l.EventType.TOOL_CALL_START,toolCallId:t.data.id,toolCallName:t.data.name,parentMessageId:t.data.id,rawEvent:t}),this.dispatchEvent({type:l.EventType.TOOL_CALL_ARGS,toolCallId:t.data.id,delta:t.data.args,rawEvent:t}),this.dispatchEvent({type:l.EventType.TOOL_CALL_END,toolCallId:t.data.id,rawEvent:t});break}t.name==="manually_emit_state"&&(this.activeRun.manuallyEmittedState=t.data,this.dispatchEvent({type:l.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot({values:this.activeRun.manuallyEmittedState}),rawEvent:t})),this.dispatchEvent({type:l.EventType.CUSTOM,name:t.name,value:t.data,rawEvent:t});break;case"on_tool_end":let S=(c=t.data)==null?void 0:c.output;if(S&&!S.tool_call_id&&((g=(d=S.update)==null?void 0:d.messages)!=null&&g.find(u=>u.type==="tool"))&&(S=(v=(y=S.update)==null?void 0:y.messages)==null?void 0:v.find(u=>u.type==="tool")),S&&((x=(R=S.update)==null?void 0:R.messages)!=null&&x.length)){(M=S.update)==null||M.messages.filter(u=>u.type==="tool").forEach(u=>{var O;this.activeRun.hasFunctionStreaming||(this.dispatchEvent({type:l.EventType.TOOL_CALL_START,toolCallId:u.tool_call_id,toolCallName:(O=u.name)!=null?O:"",parentMessageId:u.id,rawEvent:t}),this.dispatchEvent({type:l.EventType.TOOL_CALL_ARGS,toolCallId:u.tool_call_id,delta:JSON.stringify(t.data.input),rawEvent:t})),this.dispatchEvent({type:l.EventType.TOOL_CALL_RESULT,toolCallId:u.tool_call_id,content:typeof(u==null?void 0:u.content)=="string"?u==null?void 0:u.content:JSON.stringify(u==null?void 0:u.content),messageId:(0,B.randomUUID)(),rawEvent:t,role:"tool"})});break}this.activeRun.hasFunctionStreaming||(this.dispatchEvent({type:l.EventType.TOOL_CALL_START,toolCallId:S.tool_call_id,toolCallName:S.name,parentMessageId:S.id,rawEvent:t}),this.dispatchEvent({type:l.EventType.TOOL_CALL_ARGS,toolCallId:S.tool_call_id,delta:JSON.stringify(t.data.input),rawEvent:t}),this.dispatchEvent({type:l.EventType.TOOL_CALL_END,toolCallId:S.tool_call_id,rawEvent:t}));let G=Array.isArray(S.content)?S.content.map(u=>typeof u=="string"?u:u.type==="text"?u.text:JSON.stringify(u)).join(""):S.content;this.dispatchEvent({type:l.EventType.TOOL_CALL_RESULT,toolCallId:S.tool_call_id,content:G,messageId:(0,B.randomUUID)(),role:"tool",rawEvent:t});break}}abortRun(){var s,a;this.cancelRequested=!0;let t=(s=this.activeRun)==null?void 0:s.threadId,e=(a=this.activeRun)==null?void 0:a.id;t&&e&&!this.cancelSent&&this.client.runs.cancel(t,e).then(()=>{this.cancelSent=!0}).catch(()=>{}),super.abortRun()}handleThinkingEvent(t){var s;if(!t||!t.type||!t.text)return;let e=t.index;(s=this.thinkingProcess)!=null&&s.index&&this.thinkingProcess.index!==e&&(this.thinkingProcess.type&&this.dispatchEvent({type:l.EventType.THINKING_TEXT_MESSAGE_END}),this.dispatchEvent({type:l.EventType.THINKING_END}),this.thinkingProcess=null),this.thinkingProcess||(this.dispatchEvent({type:l.EventType.THINKING_START}),this.thinkingProcess={index:e}),this.thinkingProcess.type!==t.type&&(this.dispatchEvent({type:l.EventType.THINKING_TEXT_MESSAGE_START}),this.thinkingProcess.type=t.type),this.thinkingProcess.type&&this.dispatchEvent({type:l.EventType.THINKING_TEXT_MESSAGE_CONTENT,delta:t.text})}getStateSnapshot(t){let e=t.values,s=this.activeRun.schemaKeys;return s!=null&&s.output&&(e=Z(e,[...this.constantSchemaKeys,...s.output])),e}async getOrCreateThread(t,e){let s;try{try{s=await this.getThread(t)}catch(a){s=await this.createThread({threadId:t,metadata:e})}}catch(a){throw new Error(`Failed to create thread: ${a.message}`)}return s}async getThread(t){return this.client.threads.get(t)}async createThread(t){return this.client.threads.create(t)}async mergeConfigs({configs:t,assistant:e,schemaKeys:s}){return t.reduce((a,i)=>{var y;let o=a.configurable;i.configurable&&(o=s!=null&&s.config?Z(i==null?void 0:i.configurable,[...this.constantSchemaKeys,...(y=s==null?void 0:s.config)!=null?y:[]]):i==null?void 0:i.configurable);let h=E(p(p({},a),i),{configurable:o}),c=a.recursion_limit==null&&i.recursion_limit===25,d=JSON.stringify(h)!==JSON.stringify(a),g=c&&JSON.stringify(E(p({},h),{recursion_limit:null}))===JSON.stringify(E(p({},a),{recursion_limit:null}));return d&&!g?p(p({},a),h):a},e.config)}getMessageInProgress(t){return this.messagesInProcess[t]}setMessageInProgress(t,e){this.messagesInProcess=E(p({},this.messagesInProcess),{[t]:p(p({},this.messagesInProcess[t]),e)})}async getAssistant(){try{let t=await this.client.assistants.search(),e=t.find(s=>s.graph_id===this.graphId);if(!e){let s=`
2
- No agent found with graph ID ${this.graphId} found..
1
+ let e=require(`@ag-ui/client`),t=require(`rxjs`),n=require(`@langchain/langgraph-sdk`),r=function(e){return e.OnChainStart=`on_chain_start`,e.OnChainStream=`on_chain_stream`,e.OnChainEnd=`on_chain_end`,e.OnChatModelStart=`on_chat_model_start`,e.OnChatModelStream=`on_chat_model_stream`,e.OnChatModelEnd=`on_chat_model_end`,e.OnToolStart=`on_tool_start`,e.OnToolEnd=`on_tool_end`,e.OnCustomEvent=`on_custom_event`,e.OnInterrupt=`on_interrupt`,e}({}),i=function(e){return e.ManuallyEmitMessage=`manually_emit_message`,e.ManuallyEmitToolCall=`manually_emit_tool_call`,e.ManuallyEmitState=`manually_emit_state`,e.Exit=`exit`,e}({});const a=[`messages`,`tools`];function o(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>t.includes(e)))}function s({mode:e,state:t,schemaKeys:n}){let r=e===`start`?t:null;return r&&n?.input&&(r=o(r,[...a,...n.input])),r}function c(e){let t=[];for(let n of e)if(n.type===`text`&&n.text)t.push({type:`text`,text:n.text});else if(n.type===`image_url`){let e=typeof n.image_url==`string`?n.image_url:n.image_url?.url;if(!e)continue;if(e.startsWith(`data:`)){let[n,r]=e.split(`,`,2),i=n.includes(`:`)?n.split(`:`)[1].split(`;`)[0]:`image/png`;t.push({type:`binary`,mimeType:i,data:r||``})}else t.push({type:`binary`,mimeType:`image/png`,url:e})}return t}function l(e){let t=[];for(let n of e)if(n.type===`text`)t.push({type:`text`,text:n.text});else if(n.type===`binary`){let e;if(n.url)e=n.url;else if(n.data)e=`data:${n.mimeType};base64,${n.data}`;else if(n.id)e=n.id;else continue;t.push({type:`image_url`,image_url:{url:e}})}return t}function u(e){return e.map(e=>{switch(e.type){case`human`:let t;return t=Array.isArray(e.content)?c(e.content):f(h(e.content)),{id:e.id,role:`user`,content:t};case`ai`:let n=h(e.content);return{id:e.id,role:`assistant`,content:n?f(n):``,toolCalls:e.tool_calls?.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.args)}}))};case`system`:return{id:e.id,role:`system`,content:f(h(e.content))};case`tool`:return{id:e.id,role:`tool`,content:f(h(e.content)),toolCallId:e.tool_call_id};default:throw Error(`message type returned from LangGraph is not supported.`)}})}function d(e){return e.map((e,t)=>{switch(e.role){case`user`:let t;return t=typeof e.content==`string`?e.content:Array.isArray(e.content)?l(e.content):String(e.content),{id:e.id,role:e.role,content:t,type:`human`};case`assistant`:return{id:e.id,type:`ai`,role:e.role,content:e.content??``,tool_calls:(e.toolCalls??[]).map(e=>({id:e.id,name:e.function.name,args:JSON.parse(e.function.arguments),type:`tool_call`}))};case`system`:return{id:e.id,role:e.role,content:e.content,type:`system`};case`tool`:return{content:e.content,role:e.role,type:e.role,tool_call_id:e.toolCallId,id:e.id};default:throw console.error(`Message role ${e.role} is not implemented`),Error(`message role is not supported.`)}})}function f(e){return typeof e==`string`?e:JSON.stringify(e)}function p(e){let t=e.chunk?.content;if(t&&Array.isArray(t)&&t.length&&t[0]){let e=t[0];if(e.type===`thinking`&&e.thinking){let t={text:e.thinking,type:`text`,index:e.index??0};return e.signature&&(t.signature=e.signature),t}if(e.type===`reasoning`&&e.reasoning)return{text:e.reasoning,type:`text`,index:e.index??0};if(e.type===`reasoning`&&e.summary?.[0]?.text)return{type:`text`,text:e.summary[0].text,index:e.summary[0].index??0}}if(e.chunk?.additional_kwargs?.reasoning?.summary?.[0]){let t=e.chunk.additional_kwargs.reasoning.summary[0];return!t||!t.text?null:{type:`text`,text:t.text,index:t.index??0}}return null}function m(e){let t=e.chunk?.content;return!t||!Array.isArray(t)||!t.length||!t[0]?null:t[0].type===`redacted_thinking`&&t[0].data?t[0].data:null}function h(e){return e?typeof e==`string`?e:Array.isArray(e)&&e.length?e.find(e=>e.type===`text`)?.text??null:null:null}var g=class extends e.AbstractAgent{constructor(e){super(e),this.cancelRequested=!1,this.cancelSent=!1,this.eventsStreamActive=!1,this.constantSchemaKeys=a,this.config=e,this.messagesInProcess={},this.agentName=e.agentName,this.graphId=e.graphId,this.assistantConfig=e.assistantConfig,this.reasoningProcess=null,this.client=e?.client??new n.Client({apiUrl:e.deploymentUrl,apiKey:e.langsmithApiKey,defaultHeaders:{...e.propertyHeaders??{}}})}clone(){return Object.assign(super.clone(),{config:this.config,messagesInProcess:structuredClone(this.messagesInProcess),agentName:this.agentName,graphId:this.graphId,assistantConfig:this.assistantConfig,reasoningProcess:this.reasoningProcess?structuredClone(this.reasoningProcess):null,constantSchemaKeys:[...this.constantSchemaKeys],client:this.client,assistant:this.assistant,activeRun:this.activeRun?structuredClone(this.activeRun):void 0,cancelRequested:this.cancelRequested,cancelSent:this.cancelSent})}dispatchEvent(e){return this.subscriber.next(e),!0}run(e){return new t.Observable(t=>(this.runAgentStream(e,t),()=>{}))}async runAgentStream(t,n){this.activeRun={id:t.runId,threadId:t.threadId,hasFunctionStreaming:!1,hasPredictState:!1},this.cancelRequested=!1,this.cancelSent=!1,this.eventsStreamActive=!1,this.subscriber=n,this.assistant||=await this.getAssistant();let r=t.threadId??(0,e.randomUUID)(),i=t.forwardedProps?.streamMode??[`events`,`values`,`updates`,`messages-tuple`],a=await this.prepareStream({...t,threadId:r},i);if(!a)return n.error(`No stream to regenerate`);await this.handleStreamEvents(a,r,n,t,Array.isArray(i)?i:[i])}async prepareRegenerateStream(e,t){let{threadId:n,messageCheckpoint:r}=e,i=await this.getCheckpointByMessage(r.id,n);if(this.assistant||=await this.getAssistant(),!i)return this.subscriber.error(`No checkpoint found for message`);let a=await this.client.threads.updateState(n,{values:this.langGraphDefaultMergeState(i.values,[],e),checkpointId:i.checkpoint.checkpoint_id,asNode:i.next?.[0]??`__start__`}),o={...e.forwardedProps??{},input:this.langGraphDefaultMergeState(i.values,[r],e),checkpointId:a.checkpoint.checkpoint_id,streamMode:t};return{streamResponse:this.client.runs.stream(n,this.assistant.assistant_id,o),state:i,streamMode:t}}async prepareStream(t,n){let{threadId:i,state:a,messages:o,tools:c,context:l,forwardedProps:u}=t;this.activeRun.manuallyEmittedState=null;let f=u?.nodeName,p=i??(0,e.randomUUID)();this.assistant||=await this.getAssistant();let m=await this.getOrCreateThread(p,u?.threadMetadata);this.activeRun.threadId=m.thread_id;let h=await this.client.threads.getState(m.thread_id)??{values:{}},g=h.values.messages??[],_=d(o),v=this.langGraphDefaultMergeState({...a,messages:g},_,t),y={...h,values:{...v,messages:[...g,...v.messages??[]]}},b=y.values;if(this.activeRun.schemaKeys=await this.getSchemaKeys(),(h.values.messages??[]).length>o.filter(e=>e.role!==`system`).length){let e=null;for(let t=o.length-1;t>=0;t--)if(o[t].role===`user`){e=d([o[t]])[0];break}return e?this.prepareRegenerateStream({...t,messageCheckpoint:e},n):this.subscriber.error(`No user message found in messages to regenerate`)}this.activeRun.graphInfo=await this.client.assistants.getGraph(this.assistant.assistant_id);let x=!u?.command?.resume&&p&&this.activeRun.nodeName!=`__end__`&&this.activeRun.nodeName?`continue`:`start`;if(x===`continue`){let e=this.activeRun.graphInfo.edges.find(e=>e.target===this.activeRun.nodeName);await this.client.threads.updateState(p,{values:a,asNode:e?.source})}let S=s({mode:x,state:b,schemaKeys:this.activeRun.schemaKeys}),C,w=[this.assistantConfig,u?.config].filter(Boolean);w.length&&(C=await this.mergeConfigs({configs:w,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys}));let{command:T,...E}=u;if(T?.resume&&typeof T.resume==`string`)try{T.resume=JSON.parse(T.resume)}catch{}let D={...E,command:T,streamMode:n,input:S,config:C,context:{...l,...C?.configurable??{}}},O=h.tasks?.[0]?.interrupts??[];return O?.length&&!u?.command?.resume?(this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:p,runId:t.runId}),this.handleNodeChange(f),O.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:r.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:p,runId:t.runId}),this.subscriber.complete()):{streamResponse:this.client.runs.stream(p,this.assistant.assistant_id,D),state:y}}async handleStreamEvents(t,n,a,o,s){let{forwardedProps:c}=o,l=c?.nodeName;this.subscriber=a;let d=!1;if(!t)return;let{streamResponse:f,state:p}=t;this.activeRun.prevNodeName=null;let m={},h=p;try{this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:n,runId:this.activeRun.id}),this.handleNodeChange(l);for await(let t of f){if(this.cancelRequested&&!this.cancelSent&&this.activeRun?.threadId&&this.activeRun?.id){try{await this.client.runs.cancel(this.activeRun.threadId,this.activeRun.id)}catch{}finally{this.cancelSent=!0}try{await f?.return?.()}catch{}break}let n=o.forwardedProps?.streamSubgraphs,a=n&&(t.event.startsWith(`events`)||t.event.startsWith(`values`)),c=t.event===`messages`&&(Array.isArray(s)?s:[s]).includes(`messages-tuple`);if(!s.includes(t.event)&&!a&&!c&&t.event!==`error`)continue;let l=t;if(t.event===`error`){this.dispatchEvent({type:e.EventType.RUN_ERROR,message:t.data.message,rawEvent:t});break}if(t.event===`updates`)continue;if(t.event===`values`){m=l.data;continue}else if(n&&l.event.startsWith(`values|`)){m={...m,...l.data};continue}let u=l.data,g=u.metadata??{},_=g.langgraph_node,v=u.event;if(g.run_id&&(this.activeRun.id=g.run_id,this.activeRun.serverRunIdKnown=!0,this.cancelRequested&&!this.cancelSent&&this.activeRun?.threadId))try{await this.client.runs.cancel(this.activeRun.threadId,this.activeRun.id)}catch{}finally{this.cancelSent=!0}if(_&&_!==this.activeRun.nodeName&&this.handleNodeChange(_),d||=v===r.OnCustomEvent&&u.name===i.Exit,v===r.OnChainEnd&&this.activeRun.nodeName===_&&(this.activeRun.exitingNode=!0),this.activeRun.exitingNode&&(this.activeRun.manuallyEmittedState=null),this.activeRun.graphInfo?.nodes.some(e=>e.id===_)&&this.handleNodeChange(_),h.values=this.activeRun.manuallyEmittedState??m,!this.activeRun.nodeName)continue;let y=JSON.stringify(h)!==JSON.stringify(p),b=this.activeRun.exitingNode&&this.activeRun.hasPredictState;(y||this.activeRun.prevNodeName!=this.activeRun.nodeName||this.activeRun.exitingNode)&&!this.getMessageInProgress(this.activeRun.id)&&!b?(p=h,this.activeRun.prevNodeName=this.activeRun.nodeName,this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(p),rawEvent:l})):b&&console.debug(`[ag-ui/langgraph] Suppressing STATE_SNAPSHOT on node exit (node=${this.activeRun.nodeName}, hasPredictState=${this.activeRun.hasPredictState})`),this.dispatchEvent({type:e.EventType.RAW,event:u}),this.handleSingleEvent(u)}p=await this.client.threads.getState(n);let t=p.tasks?.[0]?.interrupts??[],c=p.next.length===0,g=p.metadata?.writes??{},_=this.activeRun.nodeName;return t?.length||(_=c?`__end__`:p.next[0]??Object.keys(g)[0]),t.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:r.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.handleNodeChange(_),this.handleNodeChange(void 0),this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(p)}),this.dispatchEvent({type:e.EventType.MESSAGES_SNAPSHOT,messages:u(p.values.messages??[])}),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:n,runId:this.activeRun.id}),this.cancelRequested=!1,this.cancelSent=!1,this.activeRun=void 0,a.complete()}catch(e){return a.error(e)}}handleSingleEvent(t){if(Array.isArray(t)){this.eventsStreamActive||this.handleMessagesTupleEvent(t);return}switch(t.event===r.OnChatModelStream&&(this.eventsStreamActive=!0),t.event){case r.OnChatModelStream:let n=t.metadata?.[`emit-messages`]??!0,a=t.metadata?.[`emit-tool-calls`]??!0;if(t.data.chunk.response_metadata.finish_reason)return;let o=this.getMessageInProgress(this.activeRun.id),s=!!o?.id,c=t.data.chunk.tool_call_chunks?.[0],l=t.metadata?.predict_state?.some(e=>e.tool===c?.name),u=!s&&c?.name,d=s&&o?.toolCallId&&c?.args,f=s&&o?.toolCallId&&!c;(f||d||u)&&(this.activeRun.hasFunctionStreaming=!0);let g=p(t.data),_=m(t.data),v=h(t.data.chunk.content),y=!!(!c&&v),b=s&&!o?.toolCallId&&!y;if(g){this.handleReasoningEvent(g);break}if(_&&this.reasoningProcess){this.dispatchEvent({type:e.EventType.REASONING_ENCRYPTED_VALUE,subtype:`message`,entityId:this.reasoningProcess.messageId,encryptedValue:_});break}if(!g&&this.reasoningProcess&&(this.reasoningProcess.signature&&this.dispatchEvent({type:e.EventType.REASONING_ENCRYPTED_VALUE,subtype:`message`,entityId:this.reasoningProcess.messageId,encryptedValue:this.reasoningProcess.signature}),this.dispatchEvent({type:e.EventType.REASONING_MESSAGE_END,messageId:this.reasoningProcess.messageId}),this.dispatchEvent({type:e.EventType.REASONING_END,messageId:this.reasoningProcess.messageId}),this.reasoningProcess=null),l&&(this.activeRun.hasPredictState=!0,this.dispatchEvent({type:e.EventType.CUSTOM,name:`PredictState`,value:t.metadata?.predict_state})),f){this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:o?.toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(b){this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:o.id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(u&&a){this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:c.id,toolCallName:c.name,parentMessageId:t.data.chunk.id,rawEvent:t})&&this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:c.id,toolCallName:c.name});break}if(d&&a){this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:o?.toolCallId,delta:c.args,rawEvent:t});break}if(y&&n){o||=(this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_START,role:`assistant`,messageId:t.data.chunk.id,rawEvent:t}),this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:null,toolCallName:null}),this.getMessageInProgress(this.activeRun.id)),this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_CONTENT,messageId:o.id,delta:v,rawEvent:t});break}break;case r.OnChatModelEnd:if(this.getMessageInProgress(this.activeRun.id)?.toolCallId){this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:this.getMessageInProgress(this.activeRun.id).toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(this.getMessageInProgress(this.activeRun.id)?.id){this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:this.getMessageInProgress(this.activeRun.id).id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}break;case r.OnCustomEvent:if(t.name===i.ManuallyEmitMessage){this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_START,role:`assistant`,messageId:t.data.message_id,rawEvent:t}),this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_CONTENT,messageId:t.data.message_id,delta:t.data.message,rawEvent:t}),this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:t.data.message_id,rawEvent:t});break}if(t.name===i.ManuallyEmitToolCall){this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:t.data.id,toolCallName:t.data.name,parentMessageId:t.data.id,rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:t.data.id,delta:t.data.args,rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:t.data.id,rawEvent:t});break}t.name===i.ManuallyEmitState&&(this.activeRun.manuallyEmittedState=t.data,this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot({values:this.activeRun.manuallyEmittedState}),rawEvent:t})),this.dispatchEvent({type:e.EventType.CUSTOM,name:t.name,value:t.data,rawEvent:t});break;case r.OnToolEnd:this.activeRun.hasPredictState=!1;let x=t.data?.output;if(x&&!x.tool_call_id&&x.update?.messages?.find(e=>e.type===`tool`)&&(x=x.update?.messages?.find(e=>e.type===`tool`)),x&&x.update?.messages?.length){x.update?.messages.filter(e=>e.type===`tool`).forEach(n=>{this.activeRun.hasFunctionStreaming||(this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:n.tool_call_id,toolCallName:n.name??``,parentMessageId:n.id,rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:n.tool_call_id,delta:JSON.stringify(t.data.input),rawEvent:t})),this.dispatchEvent({type:e.EventType.TOOL_CALL_RESULT,toolCallId:n.tool_call_id,content:typeof n?.content==`string`?n?.content:JSON.stringify(n?.content),messageId:(0,e.randomUUID)(),rawEvent:t,role:`tool`})});break}this.activeRun.hasFunctionStreaming||(this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:x.tool_call_id,toolCallName:x.name,parentMessageId:x.id,rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:x.tool_call_id,delta:JSON.stringify(t.data.input),rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:x.tool_call_id,rawEvent:t}));let S=Array.isArray(x.content)?x.content.map(e=>typeof e==`string`?e:e.type===`text`?e.text:JSON.stringify(e)).join(``):x.content;this.dispatchEvent({type:e.EventType.TOOL_CALL_RESULT,toolCallId:x.tool_call_id,content:S,messageId:(0,e.randomUUID)(),role:`tool`,rawEvent:t});break}}handleMessagesTupleEvent(t){let n=t[0];if(n.type&&n.type!==`AIMessageChunk`)return;let r=typeof n.content==`string`?n.content:Array.isArray(n.content)?n.content.find(e=>e.type===`text`)?.text:null,i=n.tool_call_chunks,a=n.response_metadata?.finish_reason===`stop`,o=this.getMessageInProgress(this.activeRun.id);if(i?.length>0){let t=i[0];t.name?(o?.id&&!o?.toolCallId&&(this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:o.id}),this.messagesInProcess[this.activeRun.id]=null),this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:t.id||n.id,toolCallName:t.name,parentMessageId:n.id}),this.setMessageInProgress(this.activeRun.id,{id:n.id,toolCallId:t.id||n.id,toolCallName:t.name}),this.activeRun.hasFunctionStreaming=!0):t.args&&o?.toolCallId&&this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:o.toolCallId,delta:t.args});return}if(a){o?.toolCallId?this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:o.toolCallId}):o?.id&&this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:o.id}),this.messagesInProcess[this.activeRun.id]=null;return}!r&&!i?.length||r&&(o||(this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_START,role:`assistant`,messageId:n.id}),this.setMessageInProgress(this.activeRun.id,{id:n.id,toolCallId:null,toolCallName:null})),this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_CONTENT,messageId:(this.getMessageInProgress(this.activeRun.id)??{id:n.id}).id,delta:r}))}abortRun(){this.cancelRequested=!0;let e=this.activeRun?.threadId,t=this.activeRun?.id;e&&t&&!this.cancelSent&&this.client.runs.cancel(e,t).then(()=>{this.cancelSent=!0}).catch(()=>{}),super.abortRun()}handleReasoningEvent(t){if(!t||!t.type||!t.text)return;let n=t.index;if(this.reasoningProcess?.index&&this.reasoningProcess.index!==n&&(this.reasoningProcess.type&&this.dispatchEvent({type:e.EventType.REASONING_MESSAGE_END,messageId:this.reasoningProcess.messageId}),this.dispatchEvent({type:e.EventType.REASONING_END,messageId:this.reasoningProcess.messageId}),this.reasoningProcess=null),!this.reasoningProcess){let t=(0,e.randomUUID)();this.dispatchEvent({type:e.EventType.REASONING_START,messageId:t}),this.reasoningProcess={index:n,messageId:t}}this.reasoningProcess.type!==t.type&&(this.dispatchEvent({type:e.EventType.REASONING_MESSAGE_START,messageId:this.reasoningProcess.messageId,role:`reasoning`}),this.reasoningProcess.type=t.type),t.signature&&(this.reasoningProcess.signature=t.signature),this.reasoningProcess.type&&this.dispatchEvent({type:e.EventType.REASONING_MESSAGE_CONTENT,messageId:this.reasoningProcess.messageId,delta:t.text})}getStateSnapshot(e){let t=e.values,n=this.activeRun.schemaKeys;return n?.output&&(t=o(t,[...this.constantSchemaKeys,...n.output])),t}async getOrCreateThread(e,t){let n;try{try{n=await this.getThread(e)}catch{n=await this.createThread({threadId:e,metadata:t})}}catch(e){throw Error(`Failed to create thread: ${e.message}`)}return n}async getThread(e){return this.client.threads.get(e)}async createThread(e){return this.client.threads.create(e)}async mergeConfigs({configs:e,assistant:t,schemaKeys:n}){return e.reduce((e,t)=>{let r=e.configurable;t.configurable&&(r=n?.config?o(t?.configurable,[...this.constantSchemaKeys,...n?.config??[]]):t?.configurable);let i={...e,...t,configurable:r},a=e.recursion_limit==null&&t.recursion_limit===25,s=JSON.stringify(i)!==JSON.stringify(e),c=a&&JSON.stringify({...i,recursion_limit:null})===JSON.stringify({...e,recursion_limit:null});return s&&!c?{...e,...i}:e},t.config)}getMessageInProgress(e){return this.messagesInProcess[e]}setMessageInProgress(e,t){this.messagesInProcess={...this.messagesInProcess,[e]:{...this.messagesInProcess[e],...t}}}async getAssistant(){try{let e=await this.client.assistants.search(),t=e.find(e=>e.graph_id===this.graphId);if(!t){let t=`
2
+ No agent found with graph ID ${this.graphId} found..\n
3
3
 
4
-
5
- These are the available agents: [${t.map(a=>`${a.graph_id} (ID: ${a.assistant_id})`).join(", ")}]
6
- `;throw console.error(s),new Error(s)}return e}catch(t){let e=new Error(`Failed to retrieve assistant: ${t.message}`);throw this.dispatchEvent({type:l.EventType.RUN_ERROR,message:e.message}),this.subscriber.error(),e}}async getSchemaKeys(){var t,e,s,a;try{let i=await this.client.assistants.getSchemas(this.assistant.assistant_id),o=null,h=[];if("context_schema"in i&&((t=i.context_schema)!=null&&t.properties)&&(h=Object.keys(i.context_schema.properties)),(e=i.config_schema)!=null&&e.properties&&(o=Object.keys(i.config_schema.properties)),!((s=i.input_schema)!=null&&s.properties)||!((a=i.output_schema)!=null&&a.properties))return{config:[],input:null,output:null,context:h};let c=Object.keys(i.input_schema.properties),d=Object.keys(i.output_schema.properties);return{input:c&&c.length?[...c,...this.constantSchemaKeys]:null,output:d&&d.length?[...d,...this.constantSchemaKeys]:null,context:h,config:o}}catch(i){return{config:[],input:this.constantSchemaKeys,output:this.constantSchemaKeys,context:[]}}}langGraphDefaultMergeState(t,e,s){var c,d;e.length>0&&"role"in e[0]&&e[0].role==="system"&&(e=e.slice(1));let a=t.messages||[],i=new Set(a.map(g=>g.id)),o=e.filter(g=>!i.has(g.id)),h=[...(c=t.tools)!=null?c:[],...(d=s.tools)!=null?d:[]].reduce((g,y)=>{let v=y;return y.type||(v={type:"function",name:y.name,function:{name:y.name,description:y.description,parameters:y.parameters}}),g.find(R=>R.name===v.name||R.function.name===v.function.name)?g:[...g,v]},[]);return E(p({},t),{messages:o,tools:h,"ag-ui":{tools:h,context:s.context}})}handleNodeChange(t){var e,s;t==="__end__"&&(t=void 0),t!==((e=this.activeRun)==null?void 0:e.nodeName)&&((s=this.activeRun)!=null&&s.nodeName&&this.endStep(),t&&this.startStep(t)),this.activeRun.nodeName=t}startStep(t){this.dispatchEvent({type:l.EventType.STEP_STARTED,stepName:t})}endStep(){this.dispatchEvent({type:l.EventType.STEP_FINISHED,stepName:this.activeRun.nodeName})}async fetchRunHistory(t){var e;try{let{threadId:s}=t,a=await this.client.threads.getHistory(s);if(!a||a.length===0)return{runs:[]};let i=a[0],o=i.values.messages||[],h=at(o);return{runs:[{runId:((e=i.checkpoint)==null?void 0:e.thread_id)||s,messages:h}]}}catch(s){console.error("Failed to fetch run history:",s);return}}async getCheckpointByMessage(t,e,s){var M,A;let a=s!=null&&s.checkpoint_id?{checkpoint:{checkpoint_id:s.checkpoint_id}}:void 0,o=[...await this.client.threads.getHistory(e,a)].reverse(),h=o.find(m=>{var I;return(I=m.values.messages)==null?void 0:I.some(f=>f.id===t)});if(!h)throw new Error("Message not found");let c=(M=h.values.messages)!=null?M:[],d=c.findIndex(m=>m.id===t);if(c.slice(d+1).length)return this.getCheckpointByMessage(t,e,h.parent_checkpoint);let y=o.indexOf(h),k=h.values,{messages:v}=k,R=nt(k,["messages"]),x=(A=o[y-1])!=null?A:E(p({},h),{values:{}});return E(p({},x),{values:p(p({},x.values),R)})}};var ot=class extends St.HttpAgent{constructor(n){super(n),this.checkpointer=n.checkpointer}async fetchRunHistory(n){var i,o;if(this.checkpointer)try{let{threadId:h}=n,c=[];try{for(var t=z(this.checkpointer.list({configurable:{thread_id:h}})),e,s,a;e=!(s=await t.next()).done;e=!1){let R=s.value;c.push(R)}}catch(s){a=[s]}finally{try{e&&(s=t.return)&&await s.call(t)}finally{if(a)throw a[0]}}if(c.length===0)return{runs:[]};let d=await this.checkpointer.getTuple({configurable:{thread_id:h}});if(!(d!=null&&d.checkpoint))return{runs:[]};let y=(d.checkpoint.channel_values||{}).messages||[],v=this.convertMessages(y);return{runs:[{runId:((o=(i=d.config)==null?void 0:i.configurable)==null?void 0:o.checkpoint_id)||h,messages:v}]}}catch(h){console.error("Failed to fetch run history from checkpointer:",h);return}}convertMessages(n){return n.map(t=>this.convertMessage(t)).filter(Boolean)}convertMessage(n){let t=n,e=t._getType,s=this.mapRole((e==null?void 0:e())||t.type);if(!s)return null;let a=t.content,i=t.tool_calls,o={id:t.id||crypto.randomUUID(),role:s,content:typeof a=="string"?a:JSON.stringify(a)};return s==="tool"&&t.tool_call_id?E(p({},o),{role:"tool",toolCallId:t.tool_call_id}):s==="assistant"?i!=null&&i.length?E(p({},o),{role:"assistant",toolCalls:i.map(h=>({id:h.id,type:"function",function:{name:h.name,arguments:JSON.stringify(h.args)}}))}):E(p({},o),{role:"assistant",content:o.content}):s==="user"?E(p({},o),{role:"user",content:o.content}):s==="system"?E(p({},o),{role:"system",content:o.content}):s==="developer"?E(p({},o),{role:"developer",content:o.content}):null}mapRole(n){switch(n){case"human":return"user";case"ai":return"assistant";case"system":return"system";case"tool":return"tool";default:return null}}clone(){let n=super.clone();return n.checkpointer=this.checkpointer,n}};0&&(module.exports={CustomEventNames,LangGraphAgent,LangGraphEventTypes,LangGraphHttpAgent});
4
+ These are the available agents: [${e.map(e=>`${e.graph_id} (ID: ${e.assistant_id})`).join(`, `)}]
5
+ `;throw console.error(t),Error(t)}return t}catch(t){let n=Error(`Failed to retrieve assistant: ${t.message}`);throw this.dispatchEvent({type:e.EventType.RUN_ERROR,message:n.message}),this.subscriber.error(),n}}async getSchemaKeys(){try{let e=await this.client.assistants.getSchemas(this.assistant.assistant_id),t=null,n=[];if(`context_schema`in e&&e.context_schema?.properties&&(n=Object.keys(e.context_schema.properties)),e.config_schema?.properties&&(t=Object.keys(e.config_schema.properties)),!e.input_schema?.properties||!e.output_schema?.properties)return{config:[],input:null,output:null,context:n};let r=Object.keys(e.input_schema.properties),i=Object.keys(e.output_schema.properties);return{input:r&&r.length?[...r,...this.constantSchemaKeys]:null,output:i&&i.length?[...i,...this.constantSchemaKeys]:null,context:n,config:t}}catch{return{config:[],input:this.constantSchemaKeys,output:this.constantSchemaKeys,context:[]}}}langGraphDefaultMergeState(e,t,n){t.length>0&&`role`in t[0]&&t[0].role===`system`&&(t=t.slice(1));let r=e.messages||[],i=new Set(r.map(e=>e.id)),a=t.filter(e=>!i.has(e.id)),o=[...e.tools??[],...n.tools??[]].reduce((e,t)=>{let n=t;return t.type||(n={type:`function`,name:t.name,function:{name:t.name,description:t.description,parameters:t.parameters}}),e.find(e=>e.name===n.name||e.function.name===n.function.name)?e:[...e,n]},[]);return{...e,messages:a,tools:o,"ag-ui":{tools:o,context:n.context},copilotkit:{...e.copilotkit,actions:o}}}handleNodeChange(e){e===`__end__`&&(e=void 0),e!==this.activeRun?.nodeName&&(this.activeRun?.nodeName&&this.endStep(),e&&this.startStep(e)),this.activeRun.nodeName=e}startStep(t){this.dispatchEvent({type:e.EventType.STEP_STARTED,stepName:t})}endStep(){this.dispatchEvent({type:e.EventType.STEP_FINISHED,stepName:this.activeRun.nodeName})}async getCheckpointByMessage(e,t,n){let r=n?.checkpoint_id?{checkpoint:{checkpoint_id:n.checkpoint_id}}:void 0,i=[...await this.client.threads.getHistory(t,r)].reverse(),a=i.find(t=>t.values.messages?.some(t=>t.id===e));if(!a)throw Error(`Message not found`);let o=a.values.messages??[],s=o.findIndex(t=>t.id===e);if(o.slice(s+1).length)return this.getCheckpointByMessage(e,t,a.parent_checkpoint);let c=i.indexOf(a),{messages:l,...u}=a.values,d=i[c-1]??{...a,values:{}};return{...d,values:{...d.values,...u}}}},_=class extends e.HttpAgent{};exports.CustomEventNames=i,exports.LangGraphAgent=g,exports.LangGraphEventTypes=r,exports.LangGraphHttpAgent=_;
7
6
  //# sourceMappingURL=index.js.map