@ag-ui/langgraph 0.0.41-alpha.0 → 0.0.42-alpha.0
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 +14 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
package/dist/index.d.mts
CHANGED
|
@@ -108,6 +108,7 @@ interface LangGraphReasoning {
|
|
|
108
108
|
text: string;
|
|
109
109
|
index: number;
|
|
110
110
|
signature?: string;
|
|
111
|
+
id?: string;
|
|
111
112
|
}
|
|
112
113
|
//#endregion
|
|
113
114
|
//#region src/agent.d.ts
|
|
@@ -165,6 +166,7 @@ declare class LangGraphAgent extends AbstractAgent {
|
|
|
165
166
|
messagesInProcess: MessagesInProgressRecord;
|
|
166
167
|
emittedToolCallStartIds: Set<string>;
|
|
167
168
|
reasoningProcess: null | ReasoningInProgress;
|
|
169
|
+
private pendingReasoningId?;
|
|
168
170
|
activeRun?: RunMetadata;
|
|
169
171
|
private subgraphs;
|
|
170
172
|
private currentSubgraph;
|
|
@@ -241,7 +243,7 @@ declare class LangGraphAgent extends AbstractAgent {
|
|
|
241
243
|
*
|
|
242
244
|
* Typed as `any` (rather than `BaseChatModel`) to tolerate `@langchain/core` version
|
|
243
245
|
* skew between this package and the consumer — e.g. `ChatOpenAI` shipping its own
|
|
244
|
-
* peer-pinned core. The factory only needs `bindTools` + `
|
|
246
|
+
* peer-pinned core. The factory only needs `bindTools` + `stream`, which is checked
|
|
245
247
|
* at runtime.
|
|
246
248
|
*/
|
|
247
249
|
type A2UISubagentModel = any;
|
|
@@ -260,6 +262,17 @@ interface GenerateA2UIArgs {
|
|
|
260
262
|
/** Optional natural-language description of the changes to apply on update. */
|
|
261
263
|
changes?: string;
|
|
262
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Run the structured-output subagent once and return the captured `render_a2ui`
|
|
267
|
+
* args — or `null` if the model produced no call.
|
|
268
|
+
*
|
|
269
|
+
* Uses `stream` (not `invoke`) so the nested `render_a2ui` tool-call arg deltas
|
|
270
|
+
* surface natively as the graph's `OnChatModelStream` events — which the generic
|
|
271
|
+
* `agent.ts` translator already turns into inner TOOL_CALL_START/ARGS/END,
|
|
272
|
+
* painting the surface progressively. This adapter emits NO A2UI-specific
|
|
273
|
+
* events: it merely consumes the stream to accumulate the final structured args
|
|
274
|
+
* for the recovery loop.
|
|
275
|
+
*/
|
|
263
276
|
/**
|
|
264
277
|
* Build a LangGraph tool that delegates A2UI surface generation to a subagent.
|
|
265
278
|
*
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/agent.ts","../src/a2ui-tool.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;aAIY,mBAAA;EACV,YAAA;EACA,aAAA;EACA,UAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;EACA,WAAA;EACA,aAAA;EACA,WAAA;AAAA;AAAA,KAGU,qBAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA;IACE,IAAA;IACA,WAAA;IACA,UAAA;EAAA;AAAA;AAAA,KAIQ,KAAA,iBAAsB,MAAA,+BACpB,aAAA,GAAgB,aAAA,CAAc,CAAA,aACxC,MAAA;AAAA,UACa,eAAA;EACf,QAAA,EAAU,OAAA;EACV,KAAA,EAAO,qBAAA;EACP,OAAA;IACE,KAAA,EAAO,qBAAA;IACP,OAAA,EAAS,eAAA;IAGT,gBAAA;EAAA;AAAA;AAAA,KAIQ,UAAA;EACV,KAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA;AAAA;AAAA,KAGU,iBAAA;EACV,EAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAGU,mBAAA;EACV,KAAA;EACA,IAAA,GAAO,kBAAA;EACP,SAAA;EACA,SAAA;AAAA;AAAA,UAGe,WAAA;EACf,EAAA;EACA,UAAA,GAAa,UAAA;EACb,QAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA,GAAuB,KAAA;EACvB,QAAA;EACA,SAAA,GAAY,cAAA;EACZ,oBAAA;EAEA,gBAAA;EAKA,iBAAA;AAAA;AAAA,KAGU,wBAAA,GAA2B,MAAA,SAAe,iBAAA;AAAA,UAGrC,QAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGH,4BAAA,GAA+B,IAAA,CAClC,OAAA;EASA,OAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;EACpB,IAAA,EAAM,WAAA;AAAA;AAAA,UAGE,8BAAA,SAAuC,4BAAA;EAC/C,YAAA;EACA,IAAA;AAAA;AAAA,UAGQ,uCAAA,SAAgD,4BAAA;EACxD,UAAA,EAAY,QAAA;AAAA;AAAA,KAGF,wBAAA,GACR,uCAAA,GACA,8BAAA,GACA,4BAAA;AAAA,aAEQ,gBAAA;EACV,mBAAA;EACA,oBAAA;EACA,iBAAA;EACA,IAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,SAAA;EACA,aAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/agent.ts","../src/a2ui-tool.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { Observable, Subscriber } from "rxjs";
|
|
|
6
6
|
import { MessageType } from "@langchain/core/messages";
|
|
7
7
|
import { RunAgentInput as RunAgentInput$1 } from "@ag-ui/core";
|
|
8
8
|
import { RunsStreamPayload } from "@langchain/langgraph-sdk/dist/types";
|
|
9
|
-
import * as
|
|
9
|
+
import * as _langchain_core_tools1 from "@langchain/core/tools";
|
|
10
10
|
import { A2UIAttemptRecord, A2UIGuidelines, A2UIRecoveryConfig, A2UIToolParams, A2UIValidationCatalog, A2UI_OPERATIONS_KEY, BASIC_CATALOG_ID } from "@ag-ui/a2ui-toolkit";
|
|
11
11
|
|
|
12
12
|
//#region src/types.d.ts
|
|
@@ -108,6 +108,7 @@ interface LangGraphReasoning {
|
|
|
108
108
|
text: string;
|
|
109
109
|
index: number;
|
|
110
110
|
signature?: string;
|
|
111
|
+
id?: string;
|
|
111
112
|
}
|
|
112
113
|
//#endregion
|
|
113
114
|
//#region src/agent.d.ts
|
|
@@ -165,6 +166,7 @@ declare class LangGraphAgent extends AbstractAgent {
|
|
|
165
166
|
messagesInProcess: MessagesInProgressRecord;
|
|
166
167
|
emittedToolCallStartIds: Set<string>;
|
|
167
168
|
reasoningProcess: null | ReasoningInProgress;
|
|
169
|
+
private pendingReasoningId?;
|
|
168
170
|
activeRun?: RunMetadata;
|
|
169
171
|
private subgraphs;
|
|
170
172
|
private currentSubgraph;
|
|
@@ -241,7 +243,7 @@ declare class LangGraphAgent extends AbstractAgent {
|
|
|
241
243
|
*
|
|
242
244
|
* Typed as `any` (rather than `BaseChatModel`) to tolerate `@langchain/core` version
|
|
243
245
|
* skew between this package and the consumer — e.g. `ChatOpenAI` shipping its own
|
|
244
|
-
* peer-pinned core. The factory only needs `bindTools` + `
|
|
246
|
+
* peer-pinned core. The factory only needs `bindTools` + `stream`, which is checked
|
|
245
247
|
* at runtime.
|
|
246
248
|
*/
|
|
247
249
|
type A2UISubagentModel = any;
|
|
@@ -260,6 +262,17 @@ interface GenerateA2UIArgs {
|
|
|
260
262
|
/** Optional natural-language description of the changes to apply on update. */
|
|
261
263
|
changes?: string;
|
|
262
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Run the structured-output subagent once and return the captured `render_a2ui`
|
|
267
|
+
* args — or `null` if the model produced no call.
|
|
268
|
+
*
|
|
269
|
+
* Uses `stream` (not `invoke`) so the nested `render_a2ui` tool-call arg deltas
|
|
270
|
+
* surface natively as the graph's `OnChatModelStream` events — which the generic
|
|
271
|
+
* `agent.ts` translator already turns into inner TOOL_CALL_START/ARGS/END,
|
|
272
|
+
* painting the surface progressively. This adapter emits NO A2UI-specific
|
|
273
|
+
* events: it merely consumes the stream to accumulate the final structured args
|
|
274
|
+
* for the recovery loop.
|
|
275
|
+
*/
|
|
263
276
|
/**
|
|
264
277
|
* Build a LangGraph tool that delegates A2UI surface generation to a subagent.
|
|
265
278
|
*
|
|
@@ -268,7 +281,7 @@ interface GenerateA2UIArgs {
|
|
|
268
281
|
* @param params Shared `A2UIToolParams` (model + behavior knobs). The toolkit
|
|
269
282
|
* owns the shape and fills defaults via `resolveA2UIToolParams`.
|
|
270
283
|
*/
|
|
271
|
-
declare function getA2UITools<TModel = A2UISubagentModel>(params: A2UIToolParams<TModel>):
|
|
284
|
+
declare function getA2UITools<TModel = A2UISubagentModel>(params: A2UIToolParams<TModel>): _langchain_core_tools1.DynamicStructuredTool<any, GenerateA2UIArgs, unknown, string, unknown, string>;
|
|
272
285
|
//#endregion
|
|
273
286
|
//#region src/index.d.ts
|
|
274
287
|
declare class LangGraphHttpAgent extends HttpAgent {}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/agent.ts","../src/a2ui-tool.ts","../src/index.ts"],"mappings":";;;;;;;;;;;;aAIY,mBAAA;EACV,YAAA;EACA,aAAA;EACA,UAAA;EACA,gBAAA;EACA,iBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;EACA,WAAA;EACA,aAAA;EACA,WAAA;AAAA;AAAA,KAGU,qBAAA;EACV,IAAA;EACA,IAAA;EACA,QAAA;IACE,IAAA;IACA,WAAA;IACA,UAAA;EAAA;AAAA;AAAA,KAIQ,KAAA,iBAAsB,MAAA,+BACpB,aAAA,GAAgB,aAAA,CAAc,CAAA,aACxC,MAAA;AAAA,UACa,eAAA;EACf,QAAA,EAAU,OAAA;EACV,KAAA,EAAO,qBAAA;EACP,OAAA;IACE,KAAA,EAAO,qBAAA;IACP,OAAA,EAAS,eAAA;IAGT,gBAAA;EAAA;AAAA;AAAA,KAIQ,UAAA;EACV,KAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA;AAAA;AAAA,KAGU,iBAAA;EACV,EAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAGU,mBAAA;EACV,KAAA;EACA,IAAA,GAAO,kBAAA;EACP,SAAA;EACA,SAAA;AAAA;AAAA,UAGe,WAAA;EACf,EAAA;EACA,UAAA,GAAa,UAAA;EACb,QAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA,GAAuB,KAAA;EACvB,QAAA;EACA,SAAA,GAAY,cAAA;EACZ,oBAAA;EAEA,gBAAA;EAKA,iBAAA;AAAA;AAAA,KAGU,wBAAA,GAA2B,MAAA,SAAe,iBAAA;AAAA,UAGrC,QAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGH,4BAAA,GAA+B,IAAA,CAClC,OAAA;EASA,OAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;EACpB,IAAA,EAAM,WAAA;AAAA;AAAA,UAGE,8BAAA,SAAuC,4BAAA;EAC/C,YAAA;EACA,IAAA;AAAA;AAAA,UAGQ,uCAAA,SAAgD,4BAAA;EACxD,UAAA,EAAY,QAAA;AAAA;AAAA,KAGF,wBAAA,GACR,uCAAA,GACA,8BAAA,GACA,4BAAA;AAAA,aAEQ,gBAAA;EACV,mBAAA;EACA,oBAAA;EACA,iBAAA;EACA,IAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,SAAA;EACA,aAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/agent.ts","../src/a2ui-tool.ts","../src/index.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
let e=require(`@ag-ui/client`),t=require(`rxjs`),n=require(`@langchain/langgraph-sdk`),r=require(`@langchain/core/tools`),i=require(`@langchain/core/messages`),a=require(`@ag-ui/a2ui-toolkit`),o=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.OnToolError=`on_tool_error`,e.OnCustomEvent=`on_custom_event`,e.OnInterrupt=`on_interrupt`,e}({}),s=function(e){return e.ManuallyEmitMessage=`manually_emit_message`,e.ManuallyEmitToolCall=`manually_emit_tool_call`,e.ManuallyEmitState=`manually_emit_state`,e.Exit=`exit`,e}({});const c=[`messages`,`tools`];function l(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>t.includes(e)))}function u({mode:e,state:t,schemaKeys:n}){let r=e===`start`?t:null;return r&&n?.input&&(r=l(r,[...c,...n.input])),r}const d=new Set([`image`,`audio`,`video`,`document`]);function f(e){return e.type===`data`?`data:${e.mimeType};base64,${e.value}`:e.type===`url`?e.value:null}function p(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:`image`,source:{type:`data`,value:r||``,mimeType:i}})}else t.push({type:`image`,source:{type:`url`,value:e}})}return t}function m(e){let t=[];for(let n of e)if(n.type===`text`)t.push({type:`text`,text:n.text});else if(d.has(n.type)){let e=f(n.source);e?t.push({type:`image_url`,image_url:{url:e}}):console.warn(`[convertAguiMultimodalToLangchain] Dropping ${n.type} content: source could not be converted to URL`)}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{console.warn(`[convertAguiMultimodalToLangchain] Dropping BinaryInputContent: no url, data, or id provided`);continue}t.push({type:`image_url`,image_url:{url:e}})}return t}function h(e){return e.map(e=>{switch(e.type){case`human`:let t;return t=Array.isArray(e.content)?p(e.content):_(b(e.content)),{id:e.id,role:`user`,content:t};case`generic`:case`ai`:let n=b(e.content);return{id:e.id,role:`assistant`,content:n?_(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:_(b(e.content))};case`tool`:return{id:e.id,role:`tool`,content:_(b(e.content)),toolCallId:e.tool_call_id};default:throw Error(`message type returned from LangGraph is not supported.`)}})}function g(e){return e.filter(e=>e.role!==`reasoning`&&e.role!==`developer`).map((e,t)=>{switch(e.role){case`user`:let t;return t=typeof e.content==`string`?e.content:Array.isArray(e.content)?m(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 _(e){return typeof e==`string`?e:JSON.stringify(e)}function v(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.type===`reasoning_content`&&e.reasoning_content?.text)return{type:`text`,text:e.reasoning_content.text,index:e.reasoning_content.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 y(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 b(e){return e?typeof e==`string`?e:Array.isArray(e)&&e.length?e.find(e=>e.type===`text`)?.text??null:null:null}const x=`root`;var S=class extends e.AbstractAgent{constructor(e){super(e),this.headers={},this.emittedToolCallStartIds=new Set,this.subgraphs=new Set,this.currentSubgraph=x,this.cancelRequested=!1,this.cancelSent=!1,this.eventsStreamActive=!1,this.constantSchemaKeys=c,this.config=e,this.messagesInProcess={},this.agentName=e.agentName,this.graphId=e.graphId,this.assistantConfig=e.assistantConfig,this.reasoningProcess=null;let t=this,r=e.headerFactory??(()=>t.headers);e?.client&&e.headerFactory&&console.debug("[@ag-ui/langgraph] Both `config.client` and `config.headerFactory` were set. Custom clients bypass the adapter's onRequest hook — `headerFactory` will not be invoked. Either omit `client` to enable adapter-managed header forwarding, or wire headers into your custom client directly."),this.client=e?.client??new n.Client({apiUrl:e.deploymentUrl,apiKey:e.langsmithApiKey,defaultHeaders:{...e.propertyHeaders??{}},onRequest:(e,t)=>{let n=r();return!n||Object.keys(n).length===0?t:{...t,headers:{...t.headers,...n}}}})}clone(){let e=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],headers:{...this.headers},client:this.client,assistant:this.assistant,activeRun:this.activeRun?structuredClone(this.activeRun):void 0,cancelRequested:this.cancelRequested,cancelSent:this.cancelSent,subgraphs:this.subgraphs?new Set(this.subgraphs):new Set,currentSubgraph:x});if(!this.config.client){let t=this.config.headerFactory??(()=>e.headers);e.client=new n.Client({apiUrl:this.config.deploymentUrl,apiKey:this.config.langsmithApiKey,defaultHeaders:{...this.config.propertyHeaders??{}},onRequest:(e,n)=>{let r=t();return!r||Object.keys(r).length===0?n:{...n,headers:{...n.headers,...r}}}})}return e}dispatchEvent(e){return this.subscriber.next(e),!0}run(e){return new t.Observable(t=>(this.runAgentStream(e,t).catch(e=>{console.error(`[LangGraph] runAgentStream error:`,e),t.closed||t.error(e)}),()=>{}))}async runAgentStream(t,n){this.activeRun={id:t.runId,threadId:t.threadId,hasFunctionStreaming:!1,modelMadeToolCall:!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,forwardedProps:i}=e,a=await this.getCheckpointByMessage(r.id,n);if(this.assistant||=await this.getAssistant(),!a)return this.subscriber.error(`No checkpoint found for message`);let o=await this.client.threads.updateState(n,{values:this.langGraphDefaultMergeState(a.values,[],e),checkpointId:a.checkpoint.checkpoint_id,asNode:a.next?.[0]??`__start__`}),s,c=[this.assistantConfig,i?.config].filter(Boolean);c.length&&(s=await this.mergeConfigs({configs:c,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys??null}));let l={...e.forwardedProps??{},input:this.langGraphDefaultMergeState(a.values,[r],e),checkpointId:o.checkpoint.checkpoint_id,streamMode:t,config:s};return{streamResponse:this.client.runs.stream(n,this.assistant.assistant_id,l),state:a,streamMode:t}}async prepareStream(t,n){let{threadId:r,state:i,messages:a,tools:s,context:c,forwardedProps:l}=t;this.activeRun.manuallyEmittedState=null;let d=l?.nodeName,f=r??(0,e.randomUUID)();this.assistant||=await this.getAssistant();let p=await this.getOrCreateThread(f,l?.threadMetadata);this.activeRun.threadId=p.thread_id;let m=await this.client.threads.getState(p.thread_id)??{values:{}},h=m.values.messages??[],_=g(a),v=this.langGraphDefaultMergeState({...i,messages:h},_,t),y={...m,values:{...v,messages:[...h,...v.messages??[]]}},b=y.values;this.activeRun.schemaKeys=await this.getSchemaKeys();let x=h.filter(e=>e.type!==`system`).length,S=a.filter(e=>e.role!==`system`).length;if(!l?.command?.resume&&x>S){let e=null;for(let t=a.length-1;t>=0;t--)if(a[t].role===`user`){e=g([a[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 C=!l?.command?.resume&&f&&this.activeRun.nodeName!=`__end__`&&this.activeRun.nodeName?`continue`:`start`;if(C===`continue`){let e=this.activeRun.graphInfo.edges.find(e=>e.target===this.activeRun.nodeName);await this.client.threads.updateState(f,{values:i,asNode:e?.source})}let w=u({mode:C,state:b,schemaKeys:this.activeRun.schemaKeys}),T,E=[this.assistantConfig,l?.config].filter(Boolean);E.length&&(T=await this.mergeConfigs({configs:E,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys}));let{command:D,...O}=l;if(D?.resume&&typeof D.resume==`string`)try{D.resume=JSON.parse(D.resume)}catch{}let k=new Set(this.activeRun.schemaKeys?.context??[]),A=T?.configurable??{},j={},M={};for(let[e,t]of Object.entries(A))k.has(e)?j[e]=t:M[e]=t;let N={...j},P=T?{...T,configurable:Object.keys(M).length>0?M:void 0}:void 0,F=Object.keys(N).length>0,I=P?.configurable!=null&&Object.keys(P.configurable).length>0;if(F&&I){let e=Object.keys(M);e.length>0&&console.warn(`[@ag-ui/langgraph] Dropping configurable keys not in context_schema: [${e.join(`, `)}]. Use context instead.`)}let L=(()=>{if(!P)return;if(I&&!F)return P;let{configurable:e,...t}=P;return Object.keys(t).length>0?t:void 0})(),R=Object.fromEntries(Object.entries(this.headers??{}).filter(([e])=>e.toLowerCase().startsWith(`x-`))),z=Object.keys(R).length>0?{...L??{},configurable:{...L?.configurable??{},copilotkit_forwarded_headers:R}}:L,B={...O,command:D,streamMode:n,input:w,config:z,...F?{context:N}:{}},V=(m.tasks??[]).flatMap(e=>e.interrupts??[]);return V?.length&&!l?.command?.resume?(this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:f,runId:t.runId}),this.handleNodeChange(d),V.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:o.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:f,runId:t.runId}),this.subscriber.complete()):{streamResponse:this.client.runs.stream(f,this.assistant.assistant_id,B),state:y}}async handleStreamEvents(t,n,r,i,a){let{forwardedProps:c}=i,l=c?.nodeName;this.subscriber=r;let u=!1;if(!t)return;this.emittedToolCallStartIds=new Set;let{streamResponse:d,state:f}=t;this.activeRun.prevNodeName=null;let p={},m=f;try{this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:n,runId:this.activeRun.id}),this.handleNodeChange(l);for await(let t of d){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 d?.return?.()}catch{}break}let r=i.forwardedProps?.streamSubgraphs??!0,c=r&&(t.event.startsWith(`events`)||t.event.startsWith(`values`)),l=t.event===`messages`&&(Array.isArray(a)?a:[a]).includes(`messages-tuple`);if(!a.includes(t.event)&&!c&&!l&&t.event!==`error`)continue;let h=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`){p={...p,...h.data};continue}else if(r&&h.event.startsWith(`values|`)){p={...p,...h.data};continue}let g=h.data,_=g.metadata??{},v=_.langgraph_node,y=g.event,b=_.langgraph_checkpoint_ns??``,S=b.split(`|`)[0].split(`:`)[0];b.includes(`|`)&&S&&this.subgraphs.add(S);let C=S&&this.subgraphs.has(S)?S:x;if(C!==this.currentSubgraph&&(this.currentSubgraph=C,await this.getStateAndMessagesSnapshots(n)),_.run_id&&(this.activeRun.id=_.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(v&&v!==this.activeRun.nodeName&&this.handleNodeChange(v),u||=y===o.OnCustomEvent&&g.name===s.Exit,y===o.OnChainEnd&&g.data?.output!=null){let e=g.data.output;if(typeof e==`object`&&!Array.isArray(e))p={...p,...e};else if(Array.isArray(e))for(let t of e)t&&typeof t==`object`&&t.lg_name===`Command`&&t.update&&typeof t.update==`object`&&(p={...p,...t.update})}if(y===o.OnChainEnd&&this.activeRun.nodeName===v&&(this.activeRun.exitingNode=!0),this.activeRun.exitingNode&&(this.activeRun.manuallyEmittedState&&typeof this.activeRun.manuallyEmittedState==`object`&&(p={...p,...this.activeRun.manuallyEmittedState}),this.activeRun.manuallyEmittedState=null),this.activeRun.graphInfo?.nodes.some(e=>e.id===v)&&this.handleNodeChange(v),m.values=this.activeRun.manuallyEmittedState??p,!this.activeRun.nodeName)continue;let w=JSON.stringify(m)!==JSON.stringify(f);!this.activeRun.modelMadeToolCall&&(w||this.activeRun.prevNodeName!=this.activeRun.nodeName||this.activeRun.exitingNode)&&!this.getMessageInProgress(this.activeRun.id)&&(f=m,this.activeRun.prevNodeName=this.activeRun.nodeName,this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(f),rawEvent:h})),this.dispatchEvent({type:e.EventType.RAW,event:g}),this.handleSingleEvent(g)}f=await this.client.threads.getState(n);let t=(f.tasks??[]).flatMap(e=>e.interrupts??[]),c=f.next.length===0,h=f.metadata?.writes??{},g=this.activeRun.nodeName;return t?.length||(g=c?`__end__`:f.next[0]??Object.keys(h)[0]),t.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:o.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.handleNodeChange(g),this.handleNodeChange(void 0),await this.getStateAndMessagesSnapshots(n),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:n,runId:this.activeRun.id}),this.cancelRequested=!1,this.cancelSent=!1,this.activeRun=void 0,r.complete()}catch(e){return r.error(e)}}async getStateAndMessagesSnapshots(t){let n=await this.client.threads.getState(t);this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(n)});let r=n.values.messages??[];this.dispatchEvent({type:e.EventType.MESSAGES_SNAPSHOT,messages:h(r)})}handleSingleEvent(t){if(Array.isArray(t)){this.eventsStreamActive||this.handleMessagesTupleEvent(t);return}switch(t.event===o.OnChatModelStream&&(this.eventsStreamActive=!0),t.event){case o.OnChatModelStream:let n=t.metadata[`emit-messages`]??!0,r=t.metadata[`emit-tool-calls`]??!0;if(t.data.chunk.response_metadata.finish_reason)return;let i=this.getMessageInProgress(this.activeRun.id),a=!!i?.id,c=t.data.chunk.tool_call_chunks?.[0],l=t.metadata.predict_state?.some(e=>e.tool===c?.name),u=!a&&c?.name,d=a&&i?.toolCallId&&c?.args,f=a&&i?.toolCallId&&!c;(f||d||u)&&(this.activeRun.hasFunctionStreaming=!0);let p=v(t.data),m=y(t.data),h=b(t.data.chunk.content),g=!!(!c&&h),_=a&&!i?.toolCallId&&!g;if(p){this.handleReasoningEvent(p);break}if(m&&this.reasoningProcess){this.dispatchEvent({type:e.EventType.REASONING_ENCRYPTED_VALUE,subtype:`message`,entityId:this.reasoningProcess.messageId,encryptedValue:m});break}if(!p&&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.modelMadeToolCall=!0,this.dispatchEvent({type:e.EventType.CUSTOM,name:`PredictState`,value:t.metadata.predict_state})),f){this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:i?.toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(_){this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:i.id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(u&&r){this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:c.id,toolCallName:c.name,parentMessageId:t.data.chunk.id,rawEvent:t})&&(this.emittedToolCallStartIds.add(c.id),this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:c.id,toolCallName:c.name}));break}if(d&&r){this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:i?.toolCallId,delta:c.args,rawEvent:t});break}if(g&&n){i||=(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:i.id,delta:h,rawEvent:t});break}break;case o.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 o.OnCustomEvent:if(t.name===s.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===s.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===s.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 o.OnToolEnd: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`})}),this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;break}this.emittedToolCallStartIds.has(x.tool_call_id)||(this.emittedToolCallStartIds.add(x.tool_call_id),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}),this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;break;case o.OnToolError:this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;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=l(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?l(t?.configurable,[...this.constantSchemaKeys,...n?.config??[],...n?.context??[]]):t?.configurable);let i={...e,...t,configurable:r},a=e.recursion_limit==null&&t.recursion_limit===25,o=JSON.stringify(i)!==JSON.stringify(e),s=a&&JSON.stringify({...i,recursion_limit:null})===JSON.stringify({...e,recursion_limit:null});return o&&!s?{...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({graphId:this.graphId,limit:1}),t=e.find(e=>e.graph_id===this.graphId);if(!t){let t=`
|
|
1
|
+
let e=require(`@ag-ui/client`),t=require(`rxjs`),n=require(`@langchain/langgraph-sdk`),r=require(`@langchain/core/tools`),i=require(`@langchain/core/messages`),a=require(`@ag-ui/a2ui-toolkit`),o=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.OnToolError=`on_tool_error`,e.OnCustomEvent=`on_custom_event`,e.OnInterrupt=`on_interrupt`,e}({}),s=function(e){return e.ManuallyEmitMessage=`manually_emit_message`,e.ManuallyEmitToolCall=`manually_emit_tool_call`,e.ManuallyEmitState=`manually_emit_state`,e.Exit=`exit`,e}({});const c=[`messages`,`tools`];function l(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>t.includes(e)))}function u({mode:e,state:t,schemaKeys:n}){let r=e===`start`?t:null;return r&&n?.input&&(r=l(r,[...c,...n.input])),r}const d=new Set([`image`,`audio`,`video`,`document`]);function f(e){return e.type===`data`?`data:${e.mimeType};base64,${e.value}`:e.type===`url`?e.value:null}function p(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:`image`,source:{type:`data`,value:r||``,mimeType:i}})}else t.push({type:`image`,source:{type:`url`,value:e}})}return t}function m(e){let t=[];for(let n of e)if(n.type===`text`)t.push({type:`text`,text:n.text});else if(d.has(n.type)){let e=f(n.source);e?t.push({type:`image_url`,image_url:{url:e}}):console.warn(`[convertAguiMultimodalToLangchain] Dropping ${n.type} content: source could not be converted to URL`)}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{console.warn(`[convertAguiMultimodalToLangchain] Dropping BinaryInputContent: no url, data, or id provided`);continue}t.push({type:`image_url`,image_url:{url:e}})}return t}function h(e){return typeof e==`object`&&!!e&&e.type===`reasoning`}function g(e){if(Array.isArray(e.summary)){let t=e.summary.map(e=>e?.text).filter(e=>!!e);if(t.length)return t.join(`
|
|
2
|
+
`)}return e.reasoning??e.text??``}function _(e,t,n=0){let r=g(e),i=e.encrypted_content;if(!e.id&&!r&&!i)return null;let a={id:String(e.id??`${t}-reasoning-${n}`),role:`reasoning`,content:r};return i&&(a.encryptedValue=i),a}function v(e){let t={type:`reasoning`,id:e.id,summary:e.content?[{type:`summary_text`,text:e.content}]:[]};return e.encryptedValue&&(t.encrypted_content=e.encryptedValue),t}function y(e){let t=[];for(let n of e)switch(n.type){case`human`:{let e;e=Array.isArray(n.content)?p(n.content):x(w(n.content)),t.push({id:n.id,role:`user`,content:e});break}case`generic`:case`ai`:{Array.isArray(n.content)&&n.content.forEach((e,r)=>{if(h(e)){let i=_(e,n.id,r);i&&t.push(i)}});let e=w(n.content);t.push({id:n.id,role:`assistant`,content:e?x(e):``,toolCalls:n.tool_calls?.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.args??{})}}))});break}case`system`:t.push({id:n.id,role:`system`,content:x(w(n.content))});break;case`tool`:t.push({id:n.id,role:`tool`,content:x(w(n.content)),toolCallId:n.tool_call_id});break;default:throw Error(`message type returned from LangGraph is not supported.`)}return t}function b(e){let t=[],n=[];for(let r of e)switch(r.role){case`reasoning`:n.push(v(r));continue;case`developer`:continue;case`user`:{n=[];let e;e=typeof r.content==`string`?r.content:Array.isArray(r.content)?m(r.content):String(r.content),t.push({id:r.id,role:r.role,content:e,type:`human`});break}case`assistant`:{let e;if(n.length){let t=[...n];r.content&&t.push({type:`text`,text:r.content}),e=t,n=[]}else e=r.content??``;t.push({id:r.id,type:`ai`,role:r.role,content:e,tool_calls:(r.toolCalls??[]).map(e=>({id:e.id,name:e.function.name,args:e.function.arguments?JSON.parse(e.function.arguments):{},type:`tool_call`}))});break}case`system`:n=[],t.push({id:r.id,role:r.role,content:r.content,type:`system`});break;case`tool`:n=[],t.push({content:r.content,role:r.role,type:r.role,tool_call_id:r.toolCallId,id:r.id});break;default:throw console.error(`Message role ${r.role} is not implemented`),Error(`message role is not supported.`)}return t}function x(e){return typeof e==`string`?e:JSON.stringify(e)}function S(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`&&Array.isArray(e.summary)){if(e.summary.length===0&&e.id)return{type:`text`,text:``,index:e.index??0,id:String(e.id)};let t=e.summary[0];if(t&&typeof t==`object`&&(t.text||e.id)){let n={type:`text`,text:t.text??``,index:t.index??0};return e.id&&(t.index??0)===0&&(n.id=String(e.id)),n}}if(e.type===`reasoning_content`&&e.reasoning_content?.text)return{type:`text`,text:e.reasoning_content.text,index:e.reasoning_content.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 C(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 w(e){return e?typeof e==`string`?e:Array.isArray(e)&&e.length?e.find(e=>e.type===`text`)?.text??null:null:null}const T=`root`;var E=class extends e.AbstractAgent{constructor(e){super(e),this.headers={},this.emittedToolCallStartIds=new Set,this.subgraphs=new Set,this.currentSubgraph=T,this.cancelRequested=!1,this.cancelSent=!1,this.eventsStreamActive=!1,this.constantSchemaKeys=c,this.config=e,this.messagesInProcess={},this.agentName=e.agentName,this.graphId=e.graphId,this.assistantConfig=e.assistantConfig,this.reasoningProcess=null;let t=this,r=e.headerFactory??(()=>t.headers);e?.client&&e.headerFactory&&console.debug("[@ag-ui/langgraph] Both `config.client` and `config.headerFactory` were set. Custom clients bypass the adapter's onRequest hook — `headerFactory` will not be invoked. Either omit `client` to enable adapter-managed header forwarding, or wire headers into your custom client directly."),this.client=e?.client??new n.Client({apiUrl:e.deploymentUrl,apiKey:e.langsmithApiKey,defaultHeaders:{...e.propertyHeaders??{}},onRequest:(e,t)=>{let n=r();return!n||Object.keys(n).length===0?t:{...t,headers:{...t.headers,...n}}}})}clone(){let e=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],headers:{...this.headers},client:this.client,assistant:this.assistant,activeRun:this.activeRun?structuredClone(this.activeRun):void 0,cancelRequested:this.cancelRequested,cancelSent:this.cancelSent,subgraphs:this.subgraphs?new Set(this.subgraphs):new Set,currentSubgraph:T});if(!this.config.client){let t=this.config.headerFactory??(()=>e.headers);e.client=new n.Client({apiUrl:this.config.deploymentUrl,apiKey:this.config.langsmithApiKey,defaultHeaders:{...this.config.propertyHeaders??{}},onRequest:(e,n)=>{let r=t();return!r||Object.keys(r).length===0?n:{...n,headers:{...n.headers,...r}}}})}return e}dispatchEvent(e){return this.subscriber.next(e),!0}run(e){return new t.Observable(t=>(this.runAgentStream(e,t).catch(e=>{console.error(`[LangGraph] runAgentStream error:`,e),t.closed||t.error(e)}),()=>{}))}async runAgentStream(t,n){this.activeRun={id:t.runId,threadId:t.threadId,hasFunctionStreaming:!1,modelMadeToolCall:!1},this.pendingReasoningId=void 0,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,forwardedProps:i}=e,a=await this.getCheckpointByMessage(r.id,n);if(this.assistant||=await this.getAssistant(),!a)return this.subscriber.error(`No checkpoint found for message`);let o=await this.client.threads.updateState(n,{values:this.langGraphDefaultMergeState(a.values,[],e),checkpointId:a.checkpoint.checkpoint_id,asNode:a.next?.[0]??`__start__`}),s,c=[this.assistantConfig,i?.config].filter(Boolean);c.length&&(s=await this.mergeConfigs({configs:c,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys??null}));let l={...e.forwardedProps??{},input:this.langGraphDefaultMergeState(a.values,[r],e),checkpointId:o.checkpoint.checkpoint_id,streamMode:t,config:s};return{streamResponse:this.client.runs.stream(n,this.assistant.assistant_id,l),state:a,streamMode:t}}async prepareStream(t,n){let{threadId:r,state:i,messages:a,tools:s,context:c,forwardedProps:l}=t;this.activeRun.manuallyEmittedState=null;let d=l?.nodeName,f=r??(0,e.randomUUID)();this.assistant||=await this.getAssistant();let p=await this.getOrCreateThread(f,l?.threadMetadata);this.activeRun.threadId=p.thread_id;let m=await this.client.threads.getState(p.thread_id)??{values:{}},h=m.values.messages??[],g=b(a),_=this.langGraphDefaultMergeState({...i,messages:h},g,t),v={...m,values:{..._,messages:[...h,..._.messages??[]]}},y=v.values;this.activeRun.schemaKeys=await this.getSchemaKeys();let x=h.filter(e=>e.type!==`system`).length,S=a.filter(e=>e.role!==`system`).length;if(!l?.command?.resume&&x>S){let e=new Set(h.map(e=>e.id).filter(e=>!!e)),r=a.filter(e=>e.role!==`tool`&&!!e.id).map(e=>e.id);if(!(r.length>0&&r.every(t=>e.has(t)))){let r=null,i;for(let e=a.length-1;e>=0;e--)if(a[e].role===`user`){i=a[e].id,r=b([a[e]])[0];break}if(r&&i&&e.has(i))return this.prepareRegenerateStream({...t,messageCheckpoint:r},n)}}this.activeRun.graphInfo=await this.client.assistants.getGraph(this.assistant.assistant_id);let C=!l?.command?.resume&&f&&this.activeRun.nodeName!=`__end__`&&this.activeRun.nodeName?`continue`:`start`;if(C===`continue`){let e=this.activeRun.graphInfo.edges.find(e=>e.target===this.activeRun.nodeName);await this.client.threads.updateState(f,{values:i,asNode:e?.source})}let w=u({mode:C,state:y,schemaKeys:this.activeRun.schemaKeys}),T,E=[this.assistantConfig,l?.config].filter(Boolean);E.length&&(T=await this.mergeConfigs({configs:E,assistant:this.assistant,schemaKeys:this.activeRun.schemaKeys}));let{command:D,...O}=l??{};if(D?.resume&&typeof D.resume==`string`)try{D.resume=JSON.parse(D.resume)}catch{}let k=new Set(this.activeRun.schemaKeys?.context??[]),A=T?.configurable??{},j={},M={};for(let[e,t]of Object.entries(A))k.has(e)?j[e]=t:M[e]=t;let N={...j},P=T?{...T,configurable:Object.keys(M).length>0?M:void 0}:void 0,F=Object.keys(N).length>0,I=P?.configurable!=null&&Object.keys(P.configurable).length>0;if(F&&I){let e=Object.keys(M);e.length>0&&console.warn(`[@ag-ui/langgraph] Dropping configurable keys not in context_schema: [${e.join(`, `)}]. Use context instead.`)}let L=(()=>{if(!P)return;if(I&&!F)return P;let{configurable:e,...t}=P;return Object.keys(t).length>0?t:void 0})(),R=Object.fromEntries(Object.entries(this.headers??{}).filter(([e])=>e.toLowerCase().startsWith(`x-`))),z=Object.keys(R).length>0?{...L??{},configurable:{...L?.configurable??{},copilotkit_forwarded_headers:R}}:L,B={...O,command:D,streamMode:n,input:w,config:z,...F?{context:N}:{}},V=(m.tasks??[]).flatMap(e=>e.interrupts??[]);return V?.length&&!l?.command?.resume?(this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:f,runId:t.runId}),this.handleNodeChange(d),V.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:o.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:f,runId:t.runId}),this.subscriber.complete()):{streamResponse:this.client.runs.stream(f,this.assistant.assistant_id,B),state:v}}async handleStreamEvents(t,n,r,i,a){let{forwardedProps:c}=i,l=c?.nodeName;this.subscriber=r;let u=!1;if(!t)return;this.emittedToolCallStartIds=new Set;let{streamResponse:d,state:f}=t;this.activeRun.prevNodeName=null;let p={},m=f;try{this.dispatchEvent({type:e.EventType.RUN_STARTED,threadId:n,runId:this.activeRun.id}),this.handleNodeChange(l);for await(let t of d){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 d?.return?.()}catch{}break}let r=i.forwardedProps?.streamSubgraphs??!0,c=r&&(t.event.startsWith(`events`)||t.event.startsWith(`values`)),l=t.event===`messages`&&(Array.isArray(a)?a:[a]).includes(`messages-tuple`);if(!a.includes(t.event)&&!c&&!l&&t.event!==`error`)continue;let h=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`){p={...p,...h.data};continue}else if(r&&h.event.startsWith(`values|`)){p={...p,...h.data};continue}let g=h.data,_=g.metadata??{},v=_.langgraph_node,y=g.event,b=_.langgraph_checkpoint_ns??``,x=b.split(`|`)[0].split(`:`)[0];b.includes(`|`)&&x&&this.subgraphs.add(x);let S=x&&this.subgraphs.has(x)?x:T;if(S!==this.currentSubgraph&&(this.currentSubgraph=S,await this.getStateAndMessagesSnapshots(n)),_.run_id&&(this.activeRun.id=_.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(v&&v!==this.activeRun.nodeName&&this.handleNodeChange(v),u||=y===o.OnCustomEvent&&g.name===s.Exit,y===o.OnChainEnd&&g.data?.output!=null){let e=g.data.output;if(typeof e==`object`&&!Array.isArray(e))p={...p,...e};else if(Array.isArray(e))for(let t of e)t&&typeof t==`object`&&t.lg_name===`Command`&&t.update&&typeof t.update==`object`&&(p={...p,...t.update})}if(y===o.OnChainEnd&&this.activeRun.nodeName===v&&(this.activeRun.exitingNode=!0),this.activeRun.exitingNode&&(this.activeRun.manuallyEmittedState&&typeof this.activeRun.manuallyEmittedState==`object`&&(p={...p,...this.activeRun.manuallyEmittedState}),this.activeRun.manuallyEmittedState=null),this.activeRun.graphInfo?.nodes.some(e=>e.id===v)&&this.handleNodeChange(v),m.values=this.activeRun.manuallyEmittedState??p,!this.activeRun.nodeName)continue;let C=JSON.stringify(m)!==JSON.stringify(f);!this.activeRun.modelMadeToolCall&&(C||this.activeRun.prevNodeName!=this.activeRun.nodeName||this.activeRun.exitingNode)&&!this.getMessageInProgress(this.activeRun.id)&&(f=m,this.activeRun.prevNodeName=this.activeRun.nodeName,this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(f),rawEvent:h})),this.dispatchEvent({type:e.EventType.RAW,event:g}),this.handleSingleEvent(g)}f=await this.client.threads.getState(n);let t=(f.tasks??[]).flatMap(e=>e.interrupts??[]),c=f.next.length===0,h=f.metadata?.writes??{},g=this.activeRun.nodeName;return t?.length||(g=c?`__end__`:f.next[0]??Object.keys(h)[0]),t.forEach(t=>{this.dispatchEvent({type:e.EventType.CUSTOM,name:o.OnInterrupt,value:typeof t.value==`string`?t.value:JSON.stringify(t.value),rawEvent:t})}),this.handleNodeChange(g),this.handleNodeChange(void 0),await this.getStateAndMessagesSnapshots(n),this.dispatchEvent({type:e.EventType.RUN_FINISHED,threadId:n,runId:this.activeRun.id}),this.cancelRequested=!1,this.cancelSent=!1,this.activeRun=void 0,r.complete()}catch(e){return r.error(e)}}async getStateAndMessagesSnapshots(t){let n=await this.client.threads.getState(t);this.dispatchEvent({type:e.EventType.STATE_SNAPSHOT,snapshot:this.getStateSnapshot(n)});let r=n.values.messages??[];this.dispatchEvent({type:e.EventType.MESSAGES_SNAPSHOT,messages:y(r)})}handleSingleEvent(t){if(Array.isArray(t)){this.eventsStreamActive||this.handleMessagesTupleEvent(t);return}switch(t.event===o.OnChatModelStream&&(this.eventsStreamActive=!0),t.event){case o.OnChatModelStream:let n=t.metadata[`emit-messages`]??!0,r=t.metadata[`emit-tool-calls`]??!0;if(t.data.chunk.response_metadata.finish_reason)return;let i=this.getMessageInProgress(this.activeRun.id),a=!!i?.id,c=t.data.chunk.tool_call_chunks?.[0],l=t.metadata.predict_state?.some(e=>e.tool===c?.name),u=!a&&c?.name,d=a&&i?.toolCallId&&c?.args,f=a&&i?.toolCallId&&!c;(f||d||u)&&(this.activeRun.hasFunctionStreaming=!0);let p=S(t.data),m=C(t.data),h=w(t.data.chunk.content),g=!!(!c&&h),_=a&&!i?.toolCallId&&!g;if(p){this.handleReasoningEvent(p);break}if(m&&this.reasoningProcess){this.dispatchEvent({type:e.EventType.REASONING_ENCRYPTED_VALUE,subtype:`message`,entityId:this.reasoningProcess.messageId,encryptedValue:m});break}if(!p&&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.modelMadeToolCall=!0,this.dispatchEvent({type:e.EventType.CUSTOM,name:`PredictState`,value:t.metadata.predict_state})),f){this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:i?.toolCallId,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(_){this.dispatchEvent({type:e.EventType.TEXT_MESSAGE_END,messageId:i.id,rawEvent:t})&&(this.messagesInProcess[this.activeRun.id]=null);break}if(u&&r){this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:c.id,toolCallName:c.name,parentMessageId:t.data.chunk.id,rawEvent:t})&&(this.emittedToolCallStartIds.add(c.id),this.setMessageInProgress(this.activeRun.id,{id:t.data.chunk.id,toolCallId:c.id,toolCallName:c.name}));break}if(d&&r){this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:i?.toolCallId,delta:c.args,rawEvent:t});break}if(g&&n){i||=(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:i.id,delta:h,rawEvent:t});break}break;case o.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 o.OnCustomEvent:if(t.name===s.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===s.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===s.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 o.OnToolEnd:let v=t.data?.output;if(v&&!v.tool_call_id&&v.update?.messages?.find(e=>e.type===`tool`)&&(v=v.update?.messages?.find(e=>e.type===`tool`)),v&&v.update?.messages?.length){v.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`})}),this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;break}this.emittedToolCallStartIds.has(v.tool_call_id)||(this.emittedToolCallStartIds.add(v.tool_call_id),this.dispatchEvent({type:e.EventType.TOOL_CALL_START,toolCallId:v.tool_call_id,toolCallName:v.name,parentMessageId:v.id,rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_ARGS,toolCallId:v.tool_call_id,delta:JSON.stringify(t.data.input),rawEvent:t}),this.dispatchEvent({type:e.EventType.TOOL_CALL_END,toolCallId:v.tool_call_id,rawEvent:t}));let y=Array.isArray(v.content)?v.content.map(e=>typeof e==`string`?e:e.type===`text`?e.text:JSON.stringify(e)).join(``):v.content;this.dispatchEvent({type:e.EventType.TOOL_CALL_RESULT,toolCallId:v.tool_call_id,content:y,messageId:(0,e.randomUUID)(),role:`tool`,rawEvent:t}),this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;break;case o.OnToolError:this.activeRun.modelMadeToolCall=!1,this.activeRun.hasFunctionStreaming=!1;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)return;if(!t.text){t.id&&(this.pendingReasoningId=t.id);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 r=t.id??this.pendingReasoningId??(0,e.randomUUID)();this.pendingReasoningId=void 0,this.dispatchEvent({type:e.EventType.REASONING_START,messageId:r}),this.reasoningProcess={index:n,messageId:r}}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=l(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?l(t?.configurable,[...this.constantSchemaKeys,...n?.config??[],...n?.context??[]]):t?.configurable);let i={...e,...t,configurable:r},a=e.recursion_limit==null&&t.recursion_limit===25,o=JSON.stringify(i)!==JSON.stringify(e),s=a&&JSON.stringify({...i,recursion_limit:null})===JSON.stringify({...e,recursion_limit:null});return o&&!s?{...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({graphId:this.graphId,limit:1}),t=e.find(e=>e.graph_id===this.graphId);if(!t){let t=`
|
|
2
3
|
No agent found with graph ID ${this.graphId} found..\n
|
|
3
4
|
|
|
4
5
|
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=[...n.tools??[],...e.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]},[]),s=n.forwardedProps?.injectA2UITool,c={tools:o,context:n.context};return s!==void 0&&(c.inject_a2ui_tool=s),{...e,messages:a,tools:o,"ag-ui":c,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}}}};function
|
|
6
|
+
`;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=[...n.tools??[],...e.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]},[]),s=n.forwardedProps?.injectA2UITool,c={tools:o,context:n.context};return s!==void 0&&(c.inject_a2ui_tool=s),{...e,messages:a,tools:o,"ag-ui":c,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}}}};const D=a.RENDER_A2UI_TOOL_DEF.function.name;async function O(e,t,n){let r=null,a=await e.stream([new i.SystemMessage(t),...n]);for await(let e of a)r=r===null?e:r.concat(e);let o=r?.tool_calls??[];for(let e of o)if(e.name==null||e.name===D)return e.args??{};return null}function k(e){let{model:t,guidelines:n,defaultSurfaceId:i,defaultCatalogId:o,toolName:s,toolDescription:c,catalog:l,recovery:u,onA2UIAttempt:d}=(0,a.resolveA2UIToolParams)(e),f=t;return(0,r.tool)(async(e,t)=>{let r=t.state??{},s=(r.messages??[]).slice(0,-1),c=(0,a.prepareA2UIRequest)({intent:e.intent,targetSurfaceId:e.target_surface_id,changes:e.changes,messages:s,state:r,guidelines:n});if(c.error)return(0,a.wrapErrorEnvelope)(c.error);if(!f.bindTools)return(0,a.wrapErrorEnvelope)(`Provided model does not support bindTools`);let p=f.bindTools([a.RENDER_A2UI_TOOL_DEF],{tool_choice:{type:`function`,function:{name:`render_a2ui`}}}),{envelope:m}=await(0,a.runA2UIGenerationWithRecovery)({basePrompt:c.prompt,catalog:l,config:u,onAttempt:d,invokeSubagent:e=>O(p,e,s),buildEnvelope:t=>(0,a.buildA2UIEnvelope)({args:t,isUpdate:c.isUpdate,targetSurfaceId:e.target_surface_id,prior:c.prior,defaultSurfaceId:i,defaultCatalogId:o})});return m},{name:s,description:c,schema:{type:`object`,properties:{intent:{type:`string`,enum:[`create`,`update`],description:a.GENERATE_A2UI_ARG_DESCRIPTIONS.intent},target_surface_id:{type:`string`,description:a.GENERATE_A2UI_ARG_DESCRIPTIONS.target_surface_id},changes:{type:`string`,description:a.GENERATE_A2UI_ARG_DESCRIPTIONS.changes}}}})}var A=class extends e.HttpAgent{};exports.A2UI_OPERATIONS_KEY=a.A2UI_OPERATIONS_KEY,exports.BASIC_CATALOG_ID=a.BASIC_CATALOG_ID,exports.CustomEventNames=s,exports.LangGraphAgent=E,exports.LangGraphEventTypes=o,exports.LangGraphHttpAgent=A,exports.getA2UITools=k;
|
|
6
7
|
//# sourceMappingURL=index.js.map
|