@picoflow/ezgraph 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -42,6 +42,7 @@ returns exactly one response:
42
42
  | ------------------------------- | -------------------------------------------------------------------------------------- |
43
43
  | `stay(feedback)` | Validation failed; continue collecting in the current node. |
44
44
  | `go(TargetNode)` | Enter another registered conversational node now. |
45
+ | `go(Child1Node, Child2Node)` | Schedule multiple registered nodes concurrently; use an explicit join to continue. |
45
46
  | `direct(content)` | Return exact code-owned content, such as a policy decision, price table, or ticket ID. |
46
47
  | `directTo(TargetNode, content)` | Return exact content and make the target the next user-turn node. |
47
48
  | `finish(content)` | Return exact final content and complete the conversation. |
@@ -166,13 +167,78 @@ For deterministic policy that needs state owned by another node, read
166
167
  `this.graph.graphState()`. To write another node's channel, use
167
168
  `this.graph.saveNodeState(TargetNode, patch)`.
168
169
 
170
+ ## Run internal LLM tasks
171
+
172
+ Use the same `LlmNode` for conversation, sequential internal generation,
173
+ nested calls, and parallel workers. Its prompt, tools, configuration, and
174
+ response/error hooks always run through `LlmRunner`, including node-first graph
175
+ fallback, temporary alternate models, cancellation, timeout, and usage accounting.
176
+ Execution ownership belongs to the graph or caller, not to a different superclass.
177
+
178
+ ```ts
179
+ import { LlmNode } from "@picoflow/ezgraph";
180
+
181
+ class JokeNode extends LlmNode<MyGraphState, { joke?: string }> {
182
+ getPrompt() {
183
+ return "You are a concise comedian. Tell one short joke about parallel execution.";
184
+ }
185
+
186
+ protected onResponse(response: string) {
187
+ this.saveState({ joke: response });
188
+ }
189
+ }
190
+ ```
191
+
192
+ Instructions and input data belong in `getPrompt(state)`. The optional
193
+ `onResponse(output, state)` receives accepted model text or the unwrapped value
194
+ from `taskResult(value)`, including successful model recovery. It is not called
195
+ for intermediate tool feedback or routing outcomes such as `go()`/`finish()`.
196
+ Return nothing to keep the original output, return text to replace it, or return
197
+ a response/routing helper. Validate domain output before saving it. A hook error
198
+ is an application error, not a provider failure to retry.
199
+
200
+ `graph.registerTurns(...)` (or `registerTurnNodes(...)`) designates the nodes that
201
+ own user-facing conversation. Other registered nodes in that graph execute as
202
+ internal work, whether sequential or parallel. In fixed-entry graphs without a
203
+ turn registry, existing nodes retain conversational behavior; use
204
+ `graph.workers(JokeNode, OtherWorker)` to register internal placements explicitly.
205
+ Connect internal successors with `graph.addEdge(...)`; scheduling does not change
206
+ the node's contract.
207
+
208
+ Internal LLM history is ephemeral and initially empty. The runner applies
209
+ `emptyHistorySeed` (default `"Start"`, or `null` for system-only calls). It neither
210
+ reads nor appends conversation history and does not offer `terminate_session`.
211
+ Internal execution publishes only its own node entry and usage; runtime writes
212
+ to another node, shared context, or persisted history are rejected. Parallel
213
+ workers publish independent node entries, and a join owns shared decisions.
214
+
215
+ Tools use `stay(feedback)` to continue, `direct(content)` for final code-owned
216
+ content, or `taskResult(value)` for typed output in either execution mode. A
217
+ third type parameter declares that output:
218
+ `LlmNode<MyGraphState, { title?: string }, { title: string }>`; its `onResponse`
219
+ receives `string | { title: string }`. Conversational structured output is JSON
220
+ unless the hook renders it as text. Internal execution rejects `go`, `directTo`,
221
+ `finish`, and response builders containing conversation effects, including from
222
+ tools or graph-wide recovery. It never silently drops a conversation transition.
223
+
224
+ A nested `child.invoke(state)` automatically runs as internal work, with tools
225
+ registered in the runtime. The parent explicitly combines/publishes the child's
226
+ update (including usage) and owns continuation. A standalone caller can request
227
+ internal execution with `node.invoke(state, { mode: "internal" })`; a nested call
228
+ cannot escalate to conversation ownership. Calling `run(state)` directly bypasses
229
+ invocation ownership and is not a supported managed execution entry point.
230
+
231
+ Direct `llmGateway` calls remain available to custom `GraphNode` implementations,
232
+ but they do not automatically exercise the managed LLM lifecycle.
233
+
169
234
  ## Handle model failures
170
235
 
171
- `LlmNode` supports the same response/error hooks as PicoFlow. The
236
+ `LlmNode` supports response/error hooks in every execution mode. The
172
237
  three error hooks also exist on `BaseGraph` as graph-wide fallback policy:
173
238
 
174
239
  | Hook | Behavior |
175
240
  | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
241
+ | `onResponse(output, state)` | Consumes accepted text or a typed tool result in any execution mode. Save local state; return nothing to preserve output, text to render it, or an allowed response/routing helper. |
176
242
  | `checkResponse(candidate)` | Receives the raw AI message before tool dispatch or acceptance. `true` rejects and retries; `false` accepts. Node-only. |
177
243
  | `onLlmBlocked(context)` | Handles prompt blocks and blocked candidates, including candidates with text or tools. Node first, then graph on `null`; two `null` results propagate `LlmResponseBlockedError`. |
178
244
  | `shouldRetryLlmError(context)` | Controls retries for thrown invocation errors. Node first, then graph on `undefined`, then the configured retry budget. `false` stops immediately. |
@@ -262,20 +328,10 @@ and direct gateway calls retain their existing behavior, including
262
328
  `GraphNode.onEmptyModelResponse()`. Typed `DecisionNode` validation and
263
329
  `onDecisionError()` remain separate.
264
330
 
265
- The shared loop is exported as `LlmRunner` from `llm-runner.ts`. When migrating
266
- from `ConversationRunner`, update imports and subclasses to the new names:
267
-
268
- | Previous name | Current name |
269
- | --- | --- |
270
- | `ConversationRunner` | `LlmRunner` |
271
- | `ConversationRunResult` | `LlmRunResult` |
272
- | `ConversationPolicy` / `DEFAULT_CONVERSATION_POLICY` | `LlmPolicy` / `DEFAULT_LLM_POLICY` |
273
- | `ConversationLlmLifecycle` | `LlmLifecycle` |
274
- | `runConversation()` | `runLlm()` |
275
- | `conversationLlmLifecycle()` | `llmLifecycle()` |
276
- | `conversationPolicy` | `llmPolicy` |
277
-
278
- These are API renames; the previous names are no longer exported.
331
+ The shared model/tool loop is exported as `LlmRunner`. Its result is
332
+ `LlmRunResult`; `LlmPolicy` and `DEFAULT_LLM_POLICY` describe the call policy.
333
+ Custom `GraphNode` subclasses can use `runLlm()`, and `LlmNode` connects its
334
+ response/error hooks through `llmLifecycle()`.
279
335
 
280
336
  ## Add typed decisions with Jev
281
337
 
@@ -355,6 +411,32 @@ ordinary conversational handoffs; fixed worker edges remain ordinary LangGraph
355
411
  edges. Register `TerminateSessionNode` and connect it to `END` when a graph
356
412
  contains conversational nodes.
357
413
 
414
+ For conditional fan-out, return `go(Child1Node, Child2Node)` from the successful
415
+ tool handler, `onResponse()`, or deterministic `GraphNode.run()`. Save parent-owned
416
+ data before returning. A multi-target builder has no `withState()` or
417
+ `withMessage()` because there is no single destination for those effects;
418
+ `withUsage()`, tool feedback, tool cleanup, and current-history messages still work.
419
+ Single-target `go(TargetNode).withState(...)` remains unchanged.
420
+
421
+ Register the children as internal work (leave them out of `registerTurns()`, or
422
+ use `workers()` in a fixed-entry graph), and declare a barrier for the next stage:
423
+
424
+ ```ts
425
+ // In the parent, only after accepting and saving the input:
426
+ return go(Child1Node, Child2Node);
427
+
428
+ // In buildGraph(), after registering all nodes:
429
+ graph.addEdge([Child1Node, Child2Node], NextConversationNode);
430
+ ```
431
+
432
+ Both children use the same `LlmNode` contract, save only their own local state,
433
+ and publish their own usage. The multi-target transition consumes the current
434
+ input but leaves `currentNode` with its existing conversation owner. The join
435
+ waits for both children; a conversational node there becomes the next turn owner.
436
+ Do not attach unconditional child edges to a conversational parent when work
437
+ should run only on acceptance: those edges also run on ordinary replies or
438
+ termination, independently of `go()`.
439
+
358
440
  ```ts
359
441
  import "reflect-metadata";
360
442
  import { END } from "@langchain/langgraph";
@@ -1 +1 @@
1
- const uI=f;(function(o,S){const ui={o:0xe0,S:0xdb,d:0xc1,T:0xb4},uq=f,d=o();while(!![]){try{const T=parseInt(uq(0xa0))/0x1+parseInt(uq(ui.o))/0x2+parseInt(uq(ui.S))/0x3+parseInt(uq(ui.d))/0x4+-parseInt(uq(0xce))/0x5+parseInt(uq(0xd6))/0x6+parseInt(uq(ui.T))/0x7*(-parseInt(uq(0xa3))/0x8);if(T===S)break;else d['push'](d['shift']());}catch(n){d['push'](d['shift']());}}}(u,0x8258d));var P=Object['defineProperty'],y=(o,S)=>P(o,uI(0xc5),{'value':S,'configurable':!0x0});import{HumanMessage as Q}from'@langchain/core/messages';function u(){const ur=['z2v0','jYbJB21WBgv0zwqGD2L0Ag91DcbWCM9KDwnPBMCGC3rHDguU','C2f2zvn0yxrL','zgvSzxrLu2vZC2LVBG','mtmZyKPmquzc','C2LNBMfS','yxbWBgLJyxrPB24VANnVBG','zg9JDw1LBNq','y2HHDfjLC3vSDa','CNvU','z3jHCgG','u0vtu0LptL9jrcbPCYbYzxf1AxjLzc4','ANnVBG','jYbYzxn0B3jLihjLDhvYBMvKihnJAgvTysb2zxjZAw9Uia','BwfW','CMvZDg9YzvnLC3nPB25eB2n1BwvUDa','z3jHCgHZ','mti2mZCWmhbWs2TtCq','y29UzMLN','C3rYAw5N','CMvZCg9UC2vnB2rL','BMfTzq','CMvSzwfZzvr1CM4','DxnLCK1LC3nHz2uGBxvZDcbIzsbHig5VBI1LBxb0EsbZDhjPBMCU','C2vZC2LVBK1HBMfNzxi','BM9Kzxm','y3jLyxrL','CMvZCg9UC2u','jYbPCYbUB3qGCMvNAxn0zxjLzc4','ChjLCgfYzuLUChv0','ntG5nda1y0DYtxje','zgvJAxnPB25qCM92AwrLCNm','yxr0ywnOrgvJAxnPB25qCM92AwrLCLjLC29SDMvY','DgvZDa','C2vZC2LVBKLK','C3rYzwfT','y29UzMXPy3rszxn1Bhq','ChjVDMLKzxjZ','mJK0odeYnhbwwMLgBq','Aw52B2TL','CMvXDwLYzxnvC2vYtwvZC2fNzq','zxHWzwn0zwrszxzPC2LVBG','y29Kzq','mtu3otGZmgfArvHPzG','ANnVBLjLC3vSDa','DxnLCK1LC3nHz2u','CMvNAxn0zxjhCMfWAa','zgvSzxrL','mtiWnJCYnfHLC1jRra','CMvNAxn0CNK','Aw5MBgLNAhrtzxnZAw9UCW','BgXTq29UzMLN','z3jHCgHoyw1L','z2v0u2vZC2LVBG','Aw5WDxrdB25ZDw1Lza','CMvZB2X2zq','D2L0Afr1CM5ty29Wzq','vw5HyMXLihrVihbLCNnPC3qGC2vZC2LVBIbLCNjVCIbSB2C6','oYbLEhbLy3rLzca','r3jHCgGGjW','zxjYB3i','z2v0r3jHCgHezwzPBML0Aw9U','C2vZC2LVBNm','odGXodyXqKPzvuvt','y29TCgXLDgvK','zNjVBunVBMzPzW','oteYntyWuwjHww5m','BgXTr2f0zxDHEuzHy3rVCNK','u2vZC2LVBIaN','jYbPCYbHBhjLywr5ihbYB2nLC3nPBMCGysb0DxjUlG','DMfSAwrHDgvtzxnZAw9Uswq','C2nOzw1HvMvYC2LVBG','CMvZDg9YzvnLC3nPB25eB2m','z2v0r3jHCgHZ','DhjPBq','yMvNAw5uDxjU','y2XVC2u','y29TCgXLDgvKu2vZC2LVBLjLC3vSDa','BwvZC2fNzq'];u=function(){return ur;};return u();}function f(w,k){w=w-0x9d;const Q=u();let O=Q[w];if(f['pjzpNm']===undefined){var Y=function(I){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',v='';for(let s=0x0,P,p,t=0x0;p=I['charAt'](t++);~p&&(P=s%0x4?P*0x40+p:p,s++%0x4)?J+=String['fromCharCode'](0xff&P>>(-0x2*s&0x6)):0x0){p=W['indexOf'](p);}for(let C=0x0,a=J['length'];C<a;C++){v+='%'+('00'+J['charCodeAt'](C)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(v);};f['bOrkSb']=Y,f['wJSDQu']={},f['pjzpNm']=!![];}const M=Q[0x0],m=w+M,q=f['wJSDQu'][m];return!q?(O=f['bOrkSb'](O),f['wJSDQu'][m]=O):O=q,O;}import{randomUUID as Y}from'node:crypto';import{GraphRegistry as m,registeredGraphId as I,registeredGraphSchemaVersion as W}from'./graph-registry.js';import{LangChainLlmGateway as J}from'./langchain-llm-gateway.js';import{SessionLogError as v,createSessionLogs as s,drainSessionLogs as p,restoreSessionLogs as t,withSessionLogs as a}from'./session-log.js';import{withTurnContext as K}from'./turn-context.js';import{SessionManager as i,SessionTurnError as L,SESSION_BUSY as l,SESSION_COMPLETED as g}from'./persistence/session-manager.js';import{parseJsonObjectResponse as Z}from'./json-response.js';import{DecisionProviderRegistry as X}from'./decision/decision-provider.js';class M{static{y(this,'GraphEngine');}[uI(0xe1)]=new m();[uI(0x9f)];[uI(0xa4)];['decisionProviders'];[uI(0xe2)]=new Set();constructor(o={}){const uL={o:0xc8,S:0xcf,d:0xcf,T:0xa4,n:0xde},uW=uI;this[uW(0x9f)]=o[uW(uL.o)]??new i(),this[uW(uL.S)]=new X(o[uW(uL.d)]??[]),this['llmGatewayFactory']=o[uW(uL.T)]??(S=>new J(S,o[uW(0xd5)]?{'providers':o[uW(0xd5)]}:{})),this[uW(uL.n)](o['graphs']??[]);}static async[uI(0xca)](o={}){const ul={o:0xc0,S:0xc0,d:0xd5,T:0xcf},uJ=uI,S=await i[uJ(0xa2)](o['configManager']);return new M({'sessionManager':S,...o['llmGatewayFactory']?{'llmGatewayFactory':o[uJ(0xa4)]}:{},...o[uJ(ul.o)]?{'graphs':o[uJ(ul.S)]}:{},...o[uJ(ul.d)]?{'providers':o[uJ(0xd5)]}:{},...o[uJ(ul.T)]?{'decisionProviders':o['decisionProviders']}:{}});}[uI(0xde)](o){const uR={o:0xbe},uj={o:0x9e,S:0xd0},uv=uI,S=o[uv(uR.o)](d=>{const us=uv,T=new d(this[us(0xa4)](d[us(uj.o)]()[us(0xe3)]));return T[us(uj.S)]?.(n=>this['decisionProviders'][us(0xe7)](n)),T[us(0xba)],T;});return this[uv(0xe1)]['register'](S),this;}[uI(0xaa)](){return this['registry']['names']();}[uI(0xe5)](o){const uZ={o:0x9f},uP=uI;return this[uP(uZ.o)]['getSession'](w(o));}async[uI(0xb9)](o){const uX={o:0xcc,S:0xdd,d:0xab,T:0xa5,n:0xa6,c:0xe2,G:0xb5},ux={o:0x9f,S:0xac,d:0xb7,T:0xba,n:0xa9,c:0xa9,G:0xa8,r:0xeb,h:0xa8,b:0xea,D:0x9f,e:0xc4,u0:0xc2,u1:0xba,u2:0xba,u3:0xd7,u4:0xb1,u5:0xbc,u6:0xa1,u7:0xda,u8:0x9d,u9:0xe9,uu:0xdf},up=uI,S=this[up(0xe1)][up(0xb0)](o[up(0xe4)]);if(!S)return{'status':0x190,'body':{'success':!0x1,'completed':!0x0,'message':'Graph\x20\x27'+(o['graphName']??'')+up(uX.o)}};const T=typeof o[up(uX.S)]==up(0xc3)?o['userMessage'][up(uX.d)]():void 0x0;if(S[up(0xd8)]!==!0x1&&!T)return{'status':0x190,'body':{'success':!0x1,'completed':!0x1,'message':up(0xc7)}};let n;try{n=o[up(0xd2)]?w(o['sessionId']):Y();}catch(u0){return{'status':0x190,'body':{'success':!0x1,'completed':!0x1,'message':u0 instanceof Error?u0[up(0xaf)]:String(u0)}};}const c=I(S),G=W(S),h={'graphId':c,'graphSchemaVersion':G,'llmConfig':S['llmConfig']},b=s();if(this['inflightSessions']['has'](n))return this[up(0xd4)](n,l,up(uX.T)+n+up(uX.n));this[up(uX.c)]['add'](n);const D={'session':n,...o[up(0xb5)]===void 0x0?{}:{'signal':o[up(uX.G)]}};return this['withTurnScope'](D,b,async()=>{const ut=up;let u1=!0x0,u2,u3;try{const u4=Y(),u5=await this[ut(ux.o)][ut(ux.S)](n,u4,h);u2=u4,u3=u5[ut(0xd9)];const u6=u5[ut(ux.d)][ut(ux.T)][ut(0xc9)]?u5[ut(0xb7)]:void 0x0;u6&&u6[ut(0xba)][ut(0xa8)]!==G&&(u1=!0x1);const u7=u6?S[ut(ux.n)]?await S[ut(ux.c)](u6):u6:void 0x0;if(u7&&u7[ut(0xba)][ut(ux.G)]!==G)throw new Error(ut(ux.r)+c+ut(0xbd)+u7[ut(0xba)][ut(ux.h)]+ut(ux.b)+G+'.');u6&&u7&&u7['graph'][ut(0xa8)]!==u6[ut(0xba)][ut(ux.G)]&&await this[ut(ux.o)]['persistMigratedSession'](u7,{'owner':u4,'expectedRevision':u3}),u1=!0x0;const u8=u7?this[ut(ux.o)][ut(0xbf)](u7,c):void 0x0;if(u8?.[ut(0xa1)])return await this[ut(ux.D)][ut(0xc6)](n,u4,u3),this[ut(0xae)](S[ut(ux.e)],n);const u9={...T?S[ut(0xcd)](u8,new Q(T)):u8??{},'config':{...u8?.[ut(ux.u0)]??{},...o[ut(0xc2)]??{}},'inputConsumed':!0x1,'response':''};let uu;if(S['graph'][ut(0xd3)]){const uw=await S[ut(ux.u1)][ut(0xd3)](u9,{'streamMode':'values'});for await(const uf of uw){if(uu=uf,uu[ut(0xe6)]!==!0x0)continue;const uk=p(b);let uQ;try{uQ=await this['sessions']['saveState'](n,uu,h,uk,{'owner':u4,...u3===void 0x0?{}:{'expectedRevision':u3},'keepTurn':!0x0});}catch(uO){throw t(b,uk),uO;}u3=uQ['revision'];}}else uu=await S[ut(ux.u2)][ut(ux.u3)](u9);if(!uu)throw new Error('Graph\x20\x27'+c+ut(ux.u4));return await this[ut(ux.o)][ut(0xb2)](n,uu,h,b,{'owner':u4,...u3===void 0x0?{}:{'expectedRevision':u3}}),S[ut(0xc4)]===ut(ux.u5)?this[ut(0xdc)](n,uu[ut(0xcb)]):this['chatResult'](n,uu[ut(0xcb)],uu[ut(ux.u6)]);}catch(uY){if(uY instanceof L)return this['conflictResult'](n,uY[ut(ux.u7)],uY['message']);const uM=uY instanceof Error?uY['message']:String(uY);if(v({'chat_service':uM}),u2)try{await this[ut(0x9f)]['endFailedTurn'](n,u2,h,u1?b:void 0x0,u3);}catch(um){console[ut(ux.u8)](ut(ux.u9),um);}return{'status':0x190,'session':n,'body':{'success':!0x1,'completed':!0x1,'message':uM,'session':n}};}finally{this['inflightSessions'][ut(ux.uu)](n);}});}[uI(0xe8)](o,S,d){return K(o,()=>a(S,d));}async[uI(0xb3)](o){const uS={o:0xbb},uC=uI;if(!o)return{'status':0x190,'body':{'success':!0x1,'message':uC(uS.o)}};try{const S=w(o);return await this['sessions'][uC(0xb3)](S),{'status':0xc8,'body':{'success':!0x0,'session':S}};}catch(d){return{'status':0x190,'body':{'success':!0x1,'session':o,'message':d instanceof Error?d[uC(0xaf)]:String(d)}};}}async[uI(0xad)](){const ua=uI;await this[ua(0x9f)][ua(0xad)]();}['conflictResult'](o,S,d){return{'status':0x199,'session':o,'body':{'success':!0x1,'completed':!0x1,'message':d,'code':S,'session':o}};}[uI(0xae)](o,S){const un={o:0xd4},uB=uI,d='This\x20conversation\x20is\x20already\x20complete.';return o===uB(0xbc)?this[uB(un.o)](S,g,d):this['chatResult'](S,d,!0x0);}[uI(0xdc)](o,S){const uy=uI;return{'status':0xc8,'session':o,'contentType':uy(0xb6),'body':Z(S)};}[uI(0xb8)](o,S,d){return{'status':0xc8,'session':o,'body':{'success':!0x0,'completed':d,'message':S,'bot':S,'session':o}};}}function w(o){const uV={o:0xd1},uK=uI,S=o[uK(0xab)]();if(!/^[A-Za-z0-9_-]{1,128}$/[uK(uV.o)](S))throw new Error('SESSION_ID\x20must\x20be\x201-128\x20letters,\x20numbers,\x20underscores,\x20or\x20hyphens.');return S;}y(w,uI(0xa7));export{M as GraphEngine};
1
+ const dJ=b;(function(L,D){const dW={L:0xe0,D:0xdb,a:0xc1,e:0xb4},dY=b,a=L();while(!![]){try{const e=parseInt(dY(0xa0))/0x1+parseInt(dY(dW.L))/0x2+parseInt(dY(dW.D))/0x3+parseInt(dY(dW.a))/0x4+-parseInt(dY(0xce))/0x5+parseInt(dY(0xd6))/0x6+parseInt(dY(dW.e))/0x7*(-parseInt(dY(0xa3))/0x8);if(e===D)break;else a['push'](a['shift']());}catch(K){a['push'](a['shift']());}}}(d,0x8258d));var P=Object['defineProperty'],y=(L,D)=>P(L,dJ(0xc5),{'value':D,'configurable':!0x0});import{HumanMessage as v}from'@langchain/core/messages';function d(){const dS=['z2v0','jYbJB21WBgv0zwqGD2L0Ag91DcbWCM9KDwnPBMCGC3rHDguU','C2f2zvn0yxrL','zgvSzxrLu2vZC2LVBG','mtmZyKPmquzc','C2LNBMfS','yxbWBgLJyxrPB24VANnVBG','zg9JDw1LBNq','y2HHDfjLC3vSDa','CNvU','z3jHCgG','u0vtu0LptL9jrcbPCYbYzxf1AxjLzc4','ANnVBG','jYbYzxn0B3jLihjLDhvYBMvKihnJAgvTysb2zxjZAw9Uia','BwfW','CMvZDg9YzvnLC3nPB25eB2n1BwvUDa','z3jHCgHZ','mti2mZCWmhbWs2TtCq','y29UzMLN','C3rYAw5N','CMvZCg9UC2vnB2rL','BMfTzq','CMvSzwfZzvr1CM4','DxnLCK1LC3nHz2uGBxvZDcbIzsbHig5VBI1LBxb0EsbZDhjPBMCU','C2vZC2LVBK1HBMfNzxi','BM9Kzxm','y3jLyxrL','CMvZCg9UC2u','jYbPCYbUB3qGCMvNAxn0zxjLzc4','ChjLCgfYzuLUChv0','ntG5nda1y0DYtxje','zgvJAxnPB25qCM92AwrLCNm','yxr0ywnOrgvJAxnPB25qCM92AwrLCLjLC29SDMvY','DgvZDa','C2vZC2LVBKLK','C3rYzwfT','y29UzMXPy3rszxn1Bhq','ChjVDMLKzxjZ','mJK0odeYnhbwwMLgBq','Aw52B2TL','CMvXDwLYzxnvC2vYtwvZC2fNzq','zxHWzwn0zwrszxzPC2LVBG','y29Kzq','mtu3otGZmgfArvHPzG','ANnVBLjLC3vSDa','DxnLCK1LC3nHz2u','CMvNAxn0zxjhCMfWAa','zgvSzxrL','mtiWnJCYnfHLC1jRra','CMvNAxn0CNK','Aw5MBgLNAhrtzxnZAw9UCW','BgXTq29UzMLN','z3jHCgHoyw1L','z2v0u2vZC2LVBG','Aw5WDxrdB25ZDw1Lza','CMvZB2X2zq','D2L0Afr1CM5ty29Wzq','vw5HyMXLihrVihbLCNnPC3qGC2vZC2LVBIbLCNjVCIbSB2C6','oYbLEhbLy3rLzca','r3jHCgGGjW','zxjYB3i','z2v0r3jHCgHezwzPBML0Aw9U','C2vZC2LVBNm','odGXodyXqKPzvuvt','y29TCgXLDgvK','zNjVBunVBMzPzW','oteYntyWuwjHww5m','BgXTr2f0zxDHEuzHy3rVCNK','u2vZC2LVBIaN','jYbPCYbHBhjLywr5ihbYB2nLC3nPBMCGysb0DxjUlG','DMfSAwrHDgvtzxnZAw9Uswq','C2nOzw1HvMvYC2LVBG','CMvZDg9YzvnLC3nPB25eB2m','z2v0r3jHCgHZ','DhjPBq','yMvNAw5uDxjU','y2XVC2u','y29TCgXLDgvKu2vZC2LVBLjLC3vSDa','BwvZC2fNzq'];d=function(){return dS;};return d();}function b(v,s){v=v-0x9d;const z=d();let F=z[v];if(b['pjzpNm']===undefined){var X=function(x){const p='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let f='',u='';for(let c=0x0,Z,H,r=0x0;H=x['charAt'](r++);~H&&(Z=c%0x4?Z*0x40+H:H,c++%0x4)?f+=String['fromCharCode'](0xff&Z>>(-0x2*c&0x6)):0x0){H=p['indexOf'](H);}for(let R=0x0,M=f['length'];R<M;R++){u+='%'+('00'+f['charCodeAt'](R)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(u);};b['bOrkSb']=X,b['wJSDQu']={},b['pjzpNm']=!![];}const V=z[0x0],Y=v+V,J=b['wJSDQu'][Y];return!J?(F=b['bOrkSb'](F),b['wJSDQu'][Y]=F):F=J,F;}import{randomUUID as s}from'node:crypto';import{GraphRegistry as X,registeredGraphId as Y,registeredGraphSchemaVersion as J}from'./graph-registry.js';import{LangChainLlmGateway as p}from'./langchain-llm-gateway.js';import{SessionLogError as f,createSessionLogs as u,drainSessionLogs as c,restoreSessionLogs as Z,withSessionLogs as r}from'./session-log.js';import{withTurnContext as W}from'./turn-context.js';import{SessionManager as I,SessionTurnError as g,SESSION_BUSY as i,SESSION_COMPLETED as h}from'./persistence/session-manager.js';import{parseJsonObjectResponse as t}from'./json-response.js';import{DecisionProviderRegistry as m}from'./decision/decision-provider.js';class M{static{y(this,'GraphEngine');}[dJ(0xe1)]=new X();[dJ(0x9f)];[dJ(0xa4)];['decisionProviders'];[dJ(0xe2)]=new Set();constructor(L={}){const dI={L:0xc8,D:0xcf,a:0xcf,e:0xa4,K:0xde},dx=dJ;this[dx(0x9f)]=L[dx(dI.L)]??new I(),this[dx(dI.D)]=new m(L[dx(dI.a)]??[]),this['llmGatewayFactory']=L[dx(dI.e)]??(D=>new p(D,L[dx(0xd5)]?{'providers':L[dx(0xd5)]}:{})),this[dx(dI.K)](L['graphs']??[]);}static async[dJ(0xca)](L={}){const dy={L:0xc0,D:0xc0,a:0xd5,e:0xcf},dp=dJ,D=await I[dp(0xa2)](L['configManager']);return new M({'sessionManager':D,...L['llmGatewayFactory']?{'llmGatewayFactory':L[dp(0xa4)]}:{},...L[dp(dy.L)]?{'graphs':L[dp(dy.D)]}:{},...L[dp(dy.a)]?{'providers':L[dp(0xd5)]}:{},...L[dp(dy.e)]?{'decisionProviders':L['decisionProviders']}:{}});}[dJ(0xde)](L){const di={L:0xbe},dg={L:0x9e,D:0xd0},df=dJ,D=L[df(di.L)](a=>{const du=df,K=new a(this[du(0xa4)](a[du(dg.L)]()[du(0xe3)]));return K[du(dg.D)]?.(o=>this['decisionProviders'][du(0xe7)](o)),K[du(0xba)],K;});return this[df(0xe1)]['register'](D),this;}[dJ(0xaa)](){return this['registry']['names']();}[dJ(0xe5)](L){const dt={L:0x9f},dc=dJ;return this[dc(dt.L)]['getSession'](w(L));}async[dJ(0xb9)](L){const dL={L:0xcc,D:0xdd,a:0xab,e:0xa5,K:0xa6,o:0xe2,Q:0xb5},dm={L:0x9f,D:0xac,a:0xb7,e:0xba,K:0xa9,o:0xa9,Q:0xa8,S:0xeb,l:0xa8,n:0xea,T:0x9f,G:0xc4,d0:0xc2,d1:0xba,d2:0xba,d3:0xd7,d4:0xb1,d5:0xbc,d6:0xa1,d7:0xda,d8:0x9d,d9:0xe9,dd:0xdf},dZ=dJ,D=this[dZ(0xe1)][dZ(0xb0)](L[dZ(0xe4)]);if(!D)return{'status':0x190,'body':{'success':!0x1,'completed':!0x0,'message':'Graph\x20\x27'+(L['graphName']??'')+dZ(dL.L)}};const a=typeof L[dZ(dL.D)]==dZ(0xc3)?L['userMessage'][dZ(dL.a)]():void 0x0;if(D[dZ(0xd8)]!==!0x1&&!a)return{'status':0x190,'body':{'success':!0x1,'completed':!0x1,'message':dZ(0xc7)}};let K;try{K=L[dZ(0xd2)]?w(L['sessionId']):s();}catch(G){return{'status':0x190,'body':{'success':!0x1,'completed':!0x1,'message':G instanceof Error?G[dZ(0xaf)]:String(G)}};}const o=Y(D),Q=J(D),S={'graphId':o,'graphSchemaVersion':Q,'llmConfig':D['llmConfig']},n=u();if(this['inflightSessions']['has'](K))return this[dZ(0xd4)](K,i,dZ(dL.e)+K+dZ(dL.K));this[dZ(dL.o)]['add'](K);const T={'session':K,...L[dZ(0xb5)]===void 0x0?{}:{'signal':L[dZ(dL.Q)]}};return this['withTurnScope'](T,n,async()=>{const dH=dZ;let d0=!0x0,d1,d2;try{const d3=s(),d4=await this[dH(dm.L)][dH(dm.D)](K,d3,S);d1=d3,d2=d4[dH(0xd9)];const d5=d4[dH(dm.a)][dH(dm.e)][dH(0xc9)]?d4[dH(0xb7)]:void 0x0;d5&&d5[dH(0xba)][dH(0xa8)]!==Q&&(d0=!0x1);const d6=d5?D[dH(dm.K)]?await D[dH(dm.o)](d5):d5:void 0x0;if(d6&&d6[dH(0xba)][dH(dm.Q)]!==Q)throw new Error(dH(dm.S)+o+dH(0xbd)+d6[dH(0xba)][dH(dm.l)]+dH(dm.n)+Q+'.');d5&&d6&&d6['graph'][dH(0xa8)]!==d5[dH(0xba)][dH(dm.Q)]&&await this[dH(dm.L)]['persistMigratedSession'](d6,{'owner':d3,'expectedRevision':d2}),d0=!0x0;const d7=d6?this[dH(dm.L)][dH(0xbf)](d6,o):void 0x0;if(d7?.[dH(0xa1)])return await this[dH(dm.T)][dH(0xc6)](K,d3,d2),this[dH(0xae)](D[dH(dm.G)],K);const d8={...a?D[dH(0xcd)](d7,new v(a)):d7??{},'config':{...d7?.[dH(dm.d0)]??{},...L[dH(0xc2)]??{}},'inputConsumed':!0x1,'response':''};let d9;if(D['graph'][dH(0xd3)]){const dd=await D[dH(dm.d1)][dH(0xd3)](d8,{'streamMode':'values'});for await(const db of dd){if(d9=db,d9[dH(0xe6)]!==!0x0)continue;const dv=c(n);let ds;try{ds=await this['sessions']['saveState'](K,d9,S,dv,{'owner':d3,...d2===void 0x0?{}:{'expectedRevision':d2},'keepTurn':!0x0});}catch(dz){throw Z(n,dv),dz;}d2=ds['revision'];}}else d9=await D[dH(dm.d2)][dH(dm.d3)](d8);if(!d9)throw new Error('Graph\x20\x27'+o+dH(dm.d4));return await this[dH(dm.L)][dH(0xb2)](K,d9,S,n,{'owner':d3,...d2===void 0x0?{}:{'expectedRevision':d2}}),D[dH(0xc4)]===dH(dm.d5)?this[dH(0xdc)](K,d9[dH(0xcb)]):this['chatResult'](K,d9[dH(0xcb)],d9[dH(dm.d6)]);}catch(dF){if(dF instanceof g)return this['conflictResult'](K,dF[dH(dm.d7)],dF['message']);const dX=dF instanceof Error?dF['message']:String(dF);if(f({'chat_service':dX}),d1)try{await this[dH(0x9f)]['endFailedTurn'](K,d1,S,d0?n:void 0x0,d2);}catch(dV){console[dH(dm.d8)](dH(dm.d9),dV);}return{'status':0x190,'session':K,'body':{'success':!0x1,'completed':!0x1,'message':dX,'session':K}};}finally{this['inflightSessions'][dH(dm.dd)](K);}});}[dJ(0xe8)](L,D,a){return W(L,()=>r(D,a));}async[dJ(0xb3)](L){const dB={L:0xbb},dr=dJ;if(!L)return{'status':0x190,'body':{'success':!0x1,'message':dr(dB.L)}};try{const D=w(L);return await this['sessions'][dr(0xb3)](D),{'status':0xc8,'body':{'success':!0x0,'session':D}};}catch(a){return{'status':0x190,'body':{'success':!0x1,'session':L,'message':a instanceof Error?a[dr(0xaf)]:String(a)}};}}async[dJ(0xad)](){const dR=dJ;await this[dR(0x9f)][dR(0xad)]();}['conflictResult'](L,D,a){return{'status':0x199,'session':L,'body':{'success':!0x1,'completed':!0x1,'message':a,'code':D,'session':L}};}[dJ(0xae)](L,D){const de={L:0xd4},dM=dJ,a='This\x20conversation\x20is\x20already\x20complete.';return L===dM(0xbc)?this[dM(de.L)](D,h,a):this['chatResult'](D,a,!0x0);}[dJ(0xdc)](L,D){const dq=dJ;return{'status':0xc8,'session':L,'contentType':dq(0xb6),'body':t(D)};}[dJ(0xb8)](L,D,a){return{'status':0xc8,'session':L,'body':{'success':!0x0,'completed':a,'message':D,'bot':D,'session':L}};}}function w(L){const dQ={L:0xd1},dP=dJ,D=L[dP(0xab)]();if(!/^[A-Za-z0-9_-]{1,128}$/[dP(dQ.L)](D))throw new Error('SESSION_ID\x20must\x20be\x201-128\x20letters,\x20numbers,\x20underscores,\x20or\x20hyphens.');return D;}y(w,dJ(0xa7));export{M as GraphEngine};
@@ -1 +1 @@
1
- var E=Object.defineProperty;var i=(r,e)=>E(r,"name",{value:e,configurable:!0});import"reflect-metadata";import{AIMessage as l,HumanMessage as R}from"@langchain/core/messages";import{Command as p,END as f,isCommand as v}from"@langchain/langgraph";import{GraphLlm as u}from"./graph-llm.config.js";import{GraphStateSupport as T}from"./graph-state-support.js";import{LlmRunner as O,DEFAULT_LLM_POLICY as L,DEFAULT_MAX_AGENT_ROUNDS as H,EmptyModelResponseError as $}from"./llm-runner.js";import{currentTurnSignal as x}from"./turn-context.js";import{combineGraphNodeUpdates as A}from"./node-outcome.js";import{parseJsonObjectResponse as C}from"./json-response.js";import{stableClassId as g}from"./stable-id.js";import{SessionLogWarning as b}from"./session-log.js";import{isToolResponse as S,stay as G}from"./tool-response.js";import{invocationGraphState as k,hasNodeInvocation as I,invocationHistory as M,invocationNodeState as P,invocationUpdate as _,appendInvocationHistory as D,replaceInvocationNodeState as U,invocationContext as j,saveInvocationContext as J,replaceInvocationContext as q,saveInvocationNodeState as F,withNodeInvocation as z}from"./node-invocation.js";import{DecisionConfigurationError as W,resolveDecisionOptions as X}from"./decision/decision-types.js";import{GRAPH_NODE_LOCAL_STATE as we}from"./node-outcome.js";const Y=Symbol("GRAPH_NODE_CLASS"),y=Symbol("graph-node-tool-handlers");function ue(r){if(!r.trim())throw new Error("A tool handler requires a tool name.");return(e,t)=>{const o=Reflect.getOwnMetadata(y,e)??[];if(o.some(n=>n.toolName===r))throw new Error(`Tool '${r}' already has a handler.`);o.push({toolName:r,methodName:t}),Reflect.defineMetadata(y,o,e)}}i(ue,"Tool");class N{static{i(this,"GraphNode")}llmGateway;runtime;static[Y]=!0;static id(){return this.name}name;id;constructor(e,t){this.llmGateway=e,this.runtime=t;const o=new.target;this.name=o.name,this.id=g(o,"graph node")}get graph(){return this.runtime}defineTool(){return[]}getLlmConfig(){return{}}route(e){throw new Error(`Graph node '${this.id}' does not define a branch route.`)}async handleTool(e,t,o){const n=this.toolHandler(t.name);if(!n)return this.rejectToolCall(t.name,`Unsupported tool '${t.name}'.`);const d=this.runtime.requireTool(n.toolName),s=Q(t.args);if(!s.ok)return this.rejectToolCall(n.toolName,s.error);const a=d.schema.safeParse(s.value);if(!a.success)return this.rejectToolCall(n.toolName,V(a.error));const h=a.data,c=this[n.methodName];if(!c)throw new Error(`Tool '${n.toolName}' is decorated on missing method '${String(n.methodName)}'.`);const m=await c.call(this,h,o,e);if(S(m))return m;throw new Error(`Tool '${n.toolName}' on '${this.id}' must return a ToolResponse.`)}rejectToolCall(e,t){return b({tool_call:t,node:this.id,tool:e}),G(JSON.stringify({accepted:!1,error:t}))}usesChatModel(){return!0}onInvalidJsonResponse(e){throw e.error}onEmptyModelResponse(e){throw new $(e.reason)}invoke=i(e=>this.runtime.withInvocation(this.id,e,async()=>{const t=this.resolveNodeResponse(await this.run(e)),o=K(t),n=await this.resolveJsonResponse(e,o);if(this.runtime.stageNodeEntries(n.nodes),n.context!==void 0&&this.runtime.stageContext(n.context),this.usesChatModel()){const s=this.runtime.resolveLlmConfig(this.getLlmConfig()),a=B(s,this.runtime.resolveLlmConfig()),h=(e.nodes??{})[this.id];(!a||h?.model!==void 0)&&this.runtime.saveNode(this.id,{model:a?void 0:u.modelMetadata(s)})}const d=A(n,this.runtime.stagedUpdate());return v(t)?new p({update:d,...t.goto===void 0?{}:{goto:t.goto},...t.graph===void 0?{}:{graph:t.graph},...t.resume===void 0?{}:{resume:t.resume}}):d}),"invoke");obtainTools(){return this.toolHandlers().map(({toolName:e})=>this.runtime.requireTool(e)).sort((e,t)=>e.name==="terminate_session"?1:t.name==="terminate_session"?-1:0)}validateTools(){this.obtainTools()}llmConfig(){return this.runtime.resolveLlmConfig(this.getLlmConfig())}llmCallOptions(){return this.runtime.llmCallOptions()}async runLlm(e,t){const o=await this.runAgentLoop(e,t);if(!o.stopReason)return o;const n=await this.onEmptyModelResponse({state:e,conversation:o,reason:o.stopReason});return{...o,response:n}}llmLifecycle(){}runAgentLoop(e,t){const o=this.llmLifecycle();return new O(this.llmGateway).run({...o===void 0?{}:{lifecycle:o},systemPrompt:this.getPrompt(e),history:this.history(e),tools:this.obtainTools(),llmConfig:this.llmConfig(),executeTool:i(n=>this.handleTool(e,n,t),"executeTool"),maxAgentRounds:this.runtime.maxAgentRounds,emptyHistorySeed:this.runtime.llmPolicy.emptyHistorySeed,emptyResponseRecovery:this.runtime.llmPolicy.emptyResponseRecovery,callOptions:this.llmCallOptions()})}historySpace(){return this.runtime.historySpace(this.id)}history(e){return this.runtime.hasInvocation()?this.runtime.invocationHistory(this.historySpace()):e.histories[this.historySpace()]??[]}historyUpdate(e){return{histories:{[this.historySpace()]:e}}}respond(e){return{...this.runtime.respond(e),...this.historyUpdate([new l(e)])}}complete(e){return{...this.runtime.complete(e),...this.historyUpdate([new l(e)])}}resolveNodeResponse(e){if(!S(e))return e;if(e.kind==="stay")throw new Error(`Graph node '${this.id}' can only return stay() from a tool handler.`);if(e.cleanup)throw new Error(`Graph node '${this.id}' can only use withCleanup() from a tool handler.`);if(e.feedback!==void 0)throw new Error(`Graph node '${this.id}' can only use withToolFeedback() from a tool handler.`);if(e.messages&&this.graph.appendHistory(this.historySpace(),e.messages),e.kind==="go"||e.kind==="directTo"){if(!e.target)throw new Error(`Graph node '${this.id}' selected ${e.kind}() without a target.`);const t=g(e.target,"graph node"),o=this.graph.historySpace(t);if(e.state&&this.graph.saveNodeState(e.target,e.state),e.message&&this.graph.appendHistory(o,[e.message]),e.kind==="directTo"){const n=w(this.id,e);return this.graph.appendHistory(o,[new l(n)]),new p({update:{currentNode:t,response:n,inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:f})}return new p({update:{currentNode:t,response:"",inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:t})}if(e.message)throw new Error(`Graph node '${this.id}' can only use withMessage() with go() or directTo().`);if(e.kind==="direct"){const t=w(this.id,e);return this.graph.appendHistory(this.historySpace(),[new l(t)]),new p({update:{currentNode:this.id,response:t,inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:f})}if(e.kind==="finish"){const t=w(this.id,e);return this.graph.appendHistory(this.historySpace(),[new l(t)]),new p({update:{...this.graph.complete(t),...e.usage===void 0?{}:{tokens:e.usage}},goto:f})}throw new Error(`Graph node '${this.id}' returned an unsupported response kind '${e.kind}'.`)}state(e){return this.runtime.hasInvocation()?this.runtime.nodeState(this.id):e.nodes[this.id]??{}}getState(){return this.runtime.nodeState(this.id)}saveState(e){this.runtime.saveNode(this.id,e)}save(e){return this.runtime.saveNode(this.id,e)}remove(...e){return this.runtime.removeNode(this.id,...e)}toolHandler(e){return this.toolHandlers().find(t=>t.toolName===e)}async resolveJsonResponse(e,t){if(!this.runtime.expectsJsonResponse()||t.completed!==!0)return t;try{return C(t.response??""),t}catch(o){const n=await this.onInvalidJsonResponse({state:e,update:t,response:t.response??"",error:o instanceof Error?o:new Error(String(o))});return(n.completed===!0||n.response)&&C(n.response??""),n}}toolHandlers(){let e=Object.getPrototypeOf(this);const t=[];for(;e&&e!==N.prototype;){const n=Reflect.getOwnMetadata(y,e)??[];t.push(...n),e=Object.getPrototypeOf(e)}const o=new Set;for(const n of t){if(o.has(n.toolName))throw new Error(`Graph node '${this.id}' has more than one handler for tool '${n.toolName}'.`);o.add(n.toolName)}return t}}function B(r,e){return r.model===e.model&&JSON.stringify(u.parameters(r))===JSON.stringify(u.parameters(e))}i(B,"sameLlmConfig");class fe extends T{static{i(this,"GraphNodeRuntime")}defaultLlmConfig;historySpaces;responseMode;maxAgentRounds;llmPolicy;decisionOptions;decisionErrorHandler;llmLifecycle;assertContextChannel;tools=new Map;constructor(e,t,o={},n="chat",d=H,s=L,a={},h,c,m){super(e),this.defaultLlmConfig=t,this.historySpaces=o,this.responseMode=n,this.maxAgentRounds=d,this.llmPolicy=s,this.decisionOptions=a,this.decisionErrorHandler=h,this.llmLifecycle=c,this.assertContextChannel=m}llmCallOptions(){const{llmTimeoutMs:e}=this.llmPolicy,t=x();return{...e===void 0?{}:{timeoutMs:e},...t===void 0?{}:{signal:t}}}expectsJsonResponse(){return this.responseMode==="json"}historySpace(e){return e?this.historySpaces[e]??"default":"default"}resolveLlmConfig(e={}){return u.resolveConfig(this.defaultLlmConfig,e)}resolveDecisionOptions(e={}){return X(this.decisionOptions,e)}decisionProviderResolver;attachDecisionProviderResolver(e){this.decisionProviderResolver=e}resolveDecisionProvider(e){if(!this.decisionProviderResolver)throw new W(`Decision provider '${e}' cannot be resolved before the graph is attached to an engine.`);return this.decisionProviderResolver(e)}async handleDecisionError(e){return await this.decisionErrorHandler?.(e)??null}registerTools(e,t){for(const o of t){const n=this.tools.get(o.name);if(n)throw new Error(`Tool '${o.name}' is defined by both '${n.owner}' and '${e}'.`);this.tools.set(o.name,{definition:o,owner:e})}}requireTool(e){const t=this.tools.get(e);if(!t)throw new Error(`Tool '${e}' is not defined in this graph.`);return t.definition}input(e){return this.latestInput({messages:e.histories[this.historySpace(e.currentNode)]??[]})}getConversation(e){const o=(this.hasInvocation()?this.invocationHistory(e):[]).filter(n=>R.isInstance(n)&&n.additional_kwargs?.ezgraphInternal!==!0).map(n=>typeof n.content=="string"?n.content:JSON.stringify(n.content));return{request:o.at(-1)??"",priorRequests:o.slice(-5,-1)}}respond(e){return this.responseUpdate(e)}complete(e){return this.endUpdate(e)}withInvocation(e,t,o){return z(this,e,t,o)}nodeState(e){return P(this,e)}hasInvocation(){return I(this)}graphState(){return k(this)}getContext(){return j(this)}saveContext(e){this.assertContextChannel?.(),J(this,e)}stageContext(e){this.assertContextChannel?.(),q(this,e)}appendHistory(e,t){D(this,e,t)}invocationHistory(e){return M(this,e)}stagedUpdate(){return _(this)}stageNodeEntries(e){for(const[t,o]of Object.entries(e??{}))!o||typeof o!="object"||Array.isArray(o)||U(this,t,o)}saveNode(e,t){return F(this,e,t),{nodes:{[e]:this.nodeState(e)}}}saveNodeState(e,t){this.saveNode(g(e,"graph node"),t)}removeNode(e,...t){return this.saveNode(e,Object.fromEntries(t.map(o=>[o,void 0])))}}function K(r){if(!v(r))return r;if(Array.isArray(r.update))throw new Error("GraphNode Command updates must be state objects.");return r.update??{}}i(K,"commandUpdate");function w(r,e){if(!e.response?.trim())throw new Error(`Graph node '${r}' selected ${e.kind}() without a response.`);return e.response}i(w,"requireNodeResponse");function Q(r){if(typeof r!="string")return{ok:!0,value:r};try{return{ok:!0,value:JSON.parse(r)}}catch(e){return{ok:!1,error:`Tool arguments were not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}i(Q,"coerceToolArgs");function V(r){return r.issues.map(e=>e.path.length>0?`${e.path.join(".")}: ${e.message}`:e.message).join("; ")}i(V,"formatToolArgumentError");export{Y as GRAPH_NODE_CLASS,we as GRAPH_NODE_LOCAL_STATE,N as GraphNode,fe as GraphNodeRuntime,ue as Tool};
1
+ var R=Object.defineProperty;var d=(r,e)=>R(r,"name",{value:e,configurable:!0});import"reflect-metadata";import{AIMessage as c,HumanMessage as T}from"@langchain/core/messages";import{Command as p,END as y,isCommand as u}from"@langchain/langgraph";import{GraphLlm as f}from"./graph-llm.config.js";import{GraphStateSupport as L}from"./graph-state-support.js";import{LlmRunner as O,DEFAULT_LLM_POLICY as I,DEFAULT_MAX_AGENT_ROUNDS as H,EmptyModelResponseError as k}from"./llm-runner.js";import{currentTurnSignal as x}from"./turn-context.js";import{combineGraphNodeUpdates as $}from"./node-outcome.js";import{parseJsonObjectResponse as N}from"./json-response.js";import{stableClassId as v}from"./stable-id.js";import{SessionLogWarning as b}from"./session-log.js";import{goTargetIds as A,isToolResponse as S,stay as M}from"./tool-response.js";import{invocationGraphState as G,hasNodeInvocation as P,invocationHistory as _,invocationNodeState as j,invocationUpdate as D,appendInvocationHistory as U,replaceInvocationNodeState as J,invocationContext as q,saveInvocationContext as F,replaceInvocationContext as W,saveInvocationNodeState as z,withNodeInvocation as X,invocationMode as Y,invocationIsLocalOnly as B,assertInvocationWrite as g}from"./node-invocation.js";import{DecisionConfigurationError as K,resolveDecisionOptions as Q}from"./decision/decision-types.js";import{GRAPH_NODE_LOCAL_STATE as Se}from"./node-outcome.js";const V=Symbol("GRAPH_NODE_CLASS"),w=Symbol("graph-node-tool-handlers");function ve(r){if(!r.trim())throw new Error("A tool handler requires a tool name.");return(e,t)=>{const o=Reflect.getOwnMetadata(w,e)??[];if(o.some(n=>n.toolName===r))throw new Error(`Tool '${r}' already has a handler.`);o.push({toolName:r,methodName:t}),Reflect.defineMetadata(w,o,e)}}d(ve,"Tool");class E{static{d(this,"GraphNode")}llmGateway;runtime;static[V]=!0;static id(){return this.name}name;id;constructor(e,t){this.llmGateway=e,this.runtime=t;const o=new.target;this.name=o.name,this.id=v(o,"graph node")}get graph(){return this.runtime}defineTool(){return[]}getLlmConfig(){return{}}route(e){throw new Error(`Graph node '${this.id}' does not define a branch route.`)}async handleTool(e,t,o){const n=this.toolHandler(t.name);if(!n)return this.rejectToolCall(t.name,`Unsupported tool '${t.name}'.`);const i=this.runtime.requireTool(n.toolName),a=te(t.args);if(!a.ok)return this.rejectToolCall(n.toolName,a.error);const s=i.schema.safeParse(a.value);if(!s.success)return this.rejectToolCall(n.toolName,oe(s.error));const h=s.data,l=this[n.methodName];if(!l)throw new Error(`Tool '${n.toolName}' is decorated on missing method '${String(n.methodName)}'.`);const m=await l.call(this,h,o,e);if(S(m))return m;throw new Error(`Tool '${n.toolName}' on '${this.id}' must return a ToolResponse.`)}rejectToolCall(e,t){return b({tool_call:t,node:this.id,tool:e}),M(JSON.stringify({accepted:!1,error:t}))}usesChatModel(){return!0}onInvalidJsonResponse(e){throw e.error}onEmptyModelResponse(e){throw new k(e.reason)}invoke=d((e,t={})=>this.runtime.withInvocation(this.id,e,async()=>{const o=this.resolveNodeResponse(await this.run(e)),n=ee(o),i=await this.resolveJsonResponse(e,n);if(this.runtime.stageNodeEntries(i.nodes),i.context!==void 0&&this.runtime.stageContext(i.context),this.usesChatModel()){const s=this.runtime.resolveLlmConfig(this.getLlmConfig()),h=Z(s,this.runtime.resolveLlmConfig()),l=(e.nodes??{})[this.id];(!h||l?.model!==void 0)&&this.runtime.saveNode(this.id,{model:h?void 0:f.modelMetadata(s)})}const a=$(i,this.runtime.stagedUpdate());if(this.runtime.isLocalOnlyInvocation()&&(u(o)||Object.keys(a).some(s=>s!=="nodes"&&s!=="tokens")||Object.keys(a.nodes??{}).some(s=>s!==this.id)))throw new Error(`Internal LLM node '${this.id}' may publish only its own node state and token usage.`);return this.validateNodeResult(a,u(o)),u(o)?new p({update:a,...o.goto===void 0?{}:{goto:o.goto},...o.graph===void 0?{}:{graph:o.graph},...o.resume===void 0?{}:{resume:o.resume}}):a},t,this.managesLlmExecution()),"invoke");managesLlmExecution(){return!1}validateNodeResult(e,t){}obtainTools(e={}){return this.toolHandlers().filter(({toolName:t})=>this.includeTool(t,e)).map(({toolName:t})=>this.runtime.requireTool(t)).sort((t,o)=>t.name==="terminate_session"?1:o.name==="terminate_session"?-1:0)}validateTools(e={}){this.obtainTools(e)}includeTool(e,t){return!0}llmConfig(){return this.runtime.resolveLlmConfig(this.getLlmConfig())}llmCallOptions(){return this.runtime.llmCallOptions()}async runLlm(e,t){const o=await this.runAgentLoop(e,t);if(!o.stopReason)return o;const n=await this.onEmptyModelResponse({state:e,conversation:o,reason:o.stopReason});return{...o,response:n}}llmLifecycle(){}runAgentLoop(e,t){const o=this.llmLifecycle();return new O(this.llmGateway).run({...o===void 0?{}:{lifecycle:o},systemPrompt:this.getPrompt(e),history:this.llmHistory(e),tools:this.obtainTools(),llmConfig:this.llmConfig(),executeTool:d(n=>this.handleTool(e,n,t),"executeTool"),maxAgentRounds:this.runtime.maxAgentRounds,emptyHistorySeed:this.runtime.llmPolicy.emptyHistorySeed,emptyResponseRecovery:this.runtime.llmPolicy.emptyResponseRecovery,callOptions:this.llmCallOptions()})}llmHistory(e){return this.history(e)}historySpace(){return this.runtime.historySpace(this.id)}history(e){return this.runtime.hasInvocation()?this.runtime.invocationHistory(this.historySpace()):e.histories[this.historySpace()]??[]}historyUpdate(e){return{histories:{[this.historySpace()]:e}}}respond(e){return{...this.runtime.respond(e),...this.historyUpdate([new c(e)])}}complete(e){return{...this.runtime.complete(e),...this.historyUpdate([new c(e)])}}resolveNodeResponse(e){if(!S(e))return e;if(e.targets!==void 0&&e.kind!=="go")throw new Error("Multiple targets are only supported by go().");if(e.kind==="stay")throw new Error(`Graph node '${this.id}' can only return stay() from a tool handler.`);if(e.cleanup)throw new Error(`Graph node '${this.id}' can only use withCleanup() from a tool handler.`);if(e.feedback!==void 0)throw new Error(`Graph node '${this.id}' can only use withToolFeedback() from a tool handler.`);if(e.messages&&this.graph.appendHistory(this.historySpace(),e.messages),e.kind==="go"||e.kind==="directTo"){const t=e.kind==="go"?A(e):void 0;if(t&&t.length>1)return new p({update:{response:"",inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:[...t]});if(!e.target)throw new Error(`Graph node '${this.id}' selected ${e.kind}() without a target.`);const o=t?.[0]??v(e.target,"graph node"),n=this.graph.historySpace(o);if(e.state&&this.graph.saveNodeState(e.target,e.state),e.message&&this.graph.appendHistory(n,[e.message]),e.kind==="directTo"){const i=C(this.id,e);return this.graph.appendHistory(n,[new c(i)]),new p({update:{currentNode:o,response:i,inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:y})}return new p({update:{currentNode:o,response:"",inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:o})}if(e.message)throw new Error(`Graph node '${this.id}' can only use withMessage() with go() or directTo().`);if(e.kind==="direct"){const t=C(this.id,e);return this.graph.appendHistory(this.historySpace(),[new c(t)]),new p({update:{currentNode:this.id,response:t,inputConsumed:!0,completed:!1,...e.usage===void 0?{}:{tokens:e.usage}},goto:y})}if(e.kind==="finish"){const t=C(this.id,e);return this.graph.appendHistory(this.historySpace(),[new c(t)]),new p({update:{...this.graph.complete(t),...e.usage===void 0?{}:{tokens:e.usage}},goto:y})}throw new Error(`Graph node '${this.id}' returned an unsupported response kind '${e.kind}'.`)}state(e){return this.runtime.hasInvocation()?this.runtime.nodeState(this.id):e.nodes[this.id]??{}}getState(){return this.runtime.nodeState(this.id)}saveState(e){this.runtime.saveNode(this.id,e)}save(e){return this.runtime.saveNode(this.id,e)}remove(...e){return this.runtime.removeNode(this.id,...e)}toolHandler(e){return this.toolHandlers().find(t=>t.toolName===e)}async resolveJsonResponse(e,t){if(!this.runtime.expectsJsonResponse()||t.completed!==!0)return t;try{return N(t.response??""),t}catch(o){const n=await this.onInvalidJsonResponse({state:e,update:t,response:t.response??"",error:o instanceof Error?o:new Error(String(o))});return(n.completed===!0||n.response)&&N(n.response??""),n}}toolHandlers(){let e=Object.getPrototypeOf(this);const t=[];for(;e&&e!==E.prototype;){const n=Reflect.getOwnMetadata(w,e)??[];t.push(...n),e=Object.getPrototypeOf(e)}const o=new Set;for(const n of t){if(o.has(n.toolName))throw new Error(`Graph node '${this.id}' has more than one handler for tool '${n.toolName}'.`);o.add(n.toolName)}return t}}function Z(r,e){return r.model===e.model&&JSON.stringify(f.parameters(r))===JSON.stringify(f.parameters(e))}d(Z,"sameLlmConfig");class we extends L{static{d(this,"GraphNodeRuntime")}defaultLlmConfig;historySpaces;responseMode;maxAgentRounds;llmPolicy;decisionOptions;decisionErrorHandler;llmLifecycle;assertContextChannel;tools=new Map;constructor(e,t,o={},n="chat",i=H,a=I,s={},h,l,m){super(e),this.defaultLlmConfig=t,this.historySpaces=o,this.responseMode=n,this.maxAgentRounds=i,this.llmPolicy=a,this.decisionOptions=s,this.decisionErrorHandler=h,this.llmLifecycle=l,this.assertContextChannel=m}llmCallOptions(){const{llmTimeoutMs:e}=this.llmPolicy,t=x();return{...e===void 0?{}:{timeoutMs:e},...t===void 0?{}:{signal:t}}}expectsJsonResponse(){return this.responseMode==="json"}historySpace(e){return e?this.historySpaces[e]??"default":"default"}resolveLlmConfig(e={}){return f.resolveConfig(this.defaultLlmConfig,e)}resolveDecisionOptions(e={}){return Q(this.decisionOptions,e)}decisionProviderResolver;attachDecisionProviderResolver(e){this.decisionProviderResolver=e}resolveDecisionProvider(e){if(!this.decisionProviderResolver)throw new K(`Decision provider '${e}' cannot be resolved before the graph is attached to an engine.`);return this.decisionProviderResolver(e)}async handleDecisionError(e){return await this.decisionErrorHandler?.(e)??null}registerTools(e,t){for(const o of t){const n=this.tools.get(o.name);if(n)throw new Error(`Tool '${o.name}' is defined by both '${n.owner}' and '${e}'.`);this.tools.set(o.name,{definition:o,owner:e})}}requireTool(e){const t=this.tools.get(e);if(!t)throw new Error(`Tool '${e}' is not defined in this graph.`);return t.definition}input(e){return this.latestInput({messages:e.histories[this.historySpace(e.currentNode)]??[]})}getConversation(e){const o=(this.hasInvocation()?this.invocationHistory(e):[]).filter(n=>T.isInstance(n)&&n.additional_kwargs?.ezgraphInternal!==!0).map(n=>typeof n.content=="string"?n.content:JSON.stringify(n.content));return{request:o.at(-1)??"",priorRequests:o.slice(-5,-1)}}respond(e){return this.hasInvocation()&&g(this),this.responseUpdate(e)}complete(e){return this.hasInvocation()&&g(this),this.endUpdate(e)}withInvocation(e,t,o,n={},i=!1){return X(this,e,t,o,n,i)}invocationMode(){return Y(this)}isLocalOnlyInvocation(){return B(this)}nodeState(e){return j(this,e)}hasInvocation(){return P(this)}graphState(){return G(this)}getContext(){return q(this)}saveContext(e){g(this),this.assertContextChannel?.(),F(this,e)}stageContext(e){g(this),this.assertContextChannel?.(),W(this,e)}appendHistory(e,t){U(this,e,t)}invocationHistory(e){return _(this,e)}stagedUpdate(){return D(this)}stageNodeEntries(e){for(const[t,o]of Object.entries(e??{}))!o||typeof o!="object"||Array.isArray(o)||J(this,t,o)}saveNode(e,t){return z(this,e,t),{nodes:{[e]:this.nodeState(e)}}}saveNodeState(e,t){this.saveNode(v(e,"graph node"),t)}removeNode(e,...t){return this.saveNode(e,Object.fromEntries(t.map(o=>[o,void 0])))}}function ee(r){if(!u(r))return r;if(Array.isArray(r.update))throw new Error("GraphNode Command updates must be state objects.");return r.update??{}}d(ee,"commandUpdate");function C(r,e){if(!e.response?.trim())throw new Error(`Graph node '${r}' selected ${e.kind}() without a response.`);return e.response}d(C,"requireNodeResponse");function te(r){if(typeof r!="string")return{ok:!0,value:r};try{return{ok:!0,value:JSON.parse(r)}}catch(e){return{ok:!1,error:`Tool arguments were not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}d(te,"coerceToolArgs");function oe(r){return r.issues.map(e=>e.path.length>0?`${e.path.join(".")}: ${e.message}`:e.message).join("; ")}d(oe,"formatToolArgumentError");export{V as GRAPH_NODE_CLASS,Se as GRAPH_NODE_LOCAL_STATE,E as GraphNode,we as GraphNodeRuntime,ve as Tool};
@@ -1 +1 @@
1
- function w(){const T=['CMvZB2X2zu1VzgvSrgvZy3jPChrVCG','DMfSAwrHDgvdB25MAwC','zw50CMLLCW','CgfYyw1Z','ntuYndy4DNHqAfjm','CgfYyw1LDgvYtwfWCgLUz3m','C2v0ugf0Aa','BgfUz0nOywLUtw9KzwXjBML0AwfSAxPHDgLVBG','Aw5PDgLHBgL6zq','ntCXmZCYohLHBhDsra','ndbUuejIqM8','ChjVDMLKzxjnB2rLBa','ChjVDMLKzxi','B2jQzwn0','ChjVDMLKzxjbzgfWDgvY','BMfTzq','C2XPy2u','ntKXnJCXELjNrNDU','nZDVtujpzhK','mZeYotq1m1vtC294qG','q2f0ywXVzYbWyxjHBwv0zxiGBwfWCgLUzYaN','C3bSAxq','nde1nZq5nxn1CKL2Aq','q2f0ywXVzYbWyxjHBwv0zxiGBwfWCgLUzYbWyxrOCYbJyw5UB3qGyMuGzw1WDhKU','mJqWndK2nwzoDNfWqq','AxnbCNjHEq','mJm2nJa5nePzAg10ta'];w=function(){return T;};return w();}const Z=k;(function(I,W){const o={I:0x17a,W:0x16b,J:0x178,P:0x166},R=k,J=I();while(!![]){try{const P=parseInt(R(0x173))/0x1+-parseInt(R(0x17c))/0x2+-parseInt(R(o.I))/0x3+-parseInt(R(o.W))/0x4+parseInt(R(o.J))/0x5+parseInt(R(o.P))/0x6*(parseInt(R(0x174))/0x7)+parseInt(R(0x16c))/0x8*(parseInt(R(0x175))/0x9);if(P===W)break;else J['push'](J['shift']());}catch(p){J['push'](J['shift']());}}}(w,0xb9e87));var s=Object['defineProperty'],l=(I,W)=>s(I,Z(0x171),{'value':W,'configurable':!0x0});import{GraphLlm as Q,ModelCatalog as O}from'./graph-llm.config.js';function k(u,f){u=u-0x165;const Q=w();let O=Q[u];if(k['uapbbH']===undefined){var Y=function(I){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',v='';for(let s=0x0,P,p,t=0x0;p=I['charAt'](t++);~p&&(P=s%0x4?P*0x40+p:p,s++%0x4)?J+=String['fromCharCode'](0xff&P>>(-0x2*s&0x6)):0x0){p=W['indexOf'](p);}for(let C=0x0,a=J['length'];C<a;C++){v+='%'+('00'+J['charCodeAt'](C)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(v);};k['ujitrk']=Y,k['tGlJwF']={},k['uapbbH']=!![];}const M=Q[0x0],m=u+M,q=k['tGlJwF'][m];return!q?(O=k['ujitrk'](O),k['tGlJwF'][m]=O):O=q,O;}import{modelProviderAdapter as Y}from'./model-provider.js';import{OPENAI_AUTH_PROVIDER as M,initializeOpenAIAuthProvider as q}from'./openai-auth-provider.js';function C(I,W=[]){const S={I:0x17e,W:0x17d,J:0x165,P:0x167,p:0x16d,t:0x16e,a:0x170,B:0x16a,y:0x16e},x=Z,J=Q[x(S.I)](I),P=O[x(S.W)](J),B={};for(const [K,L]of Object[x(0x17f)](J[x(S.J)])){const j=P[x(S.P)][K];j!==null&&u(B,j??K,L);}if(P[x(0x16e)]===M)return q(P[x(S.p)],B);const y=Y(P[x(S.t)],W)??P[x(S.a)];return y?y[x(S.B)]({'provider':P[x(S.y)],'model':P[x(S.p)],'options':B}):{'model':P[x(S.p)],'options':{'modelProvider':P[x(0x16e)],...B}};}l(C,Z(0x169));function u(I,W,J){const d={I:0x16f,W:0x17b,J:0x176,P:0x179},X=Z,P=W[X(0x177)]('.');let B=I;for(const K of P[X(0x172)](0x0,-0x1)){const L=B[K];if(L===void 0x0){const j={};B[K]=j,B=j;}else{if(typeof L==X(d.I)&&L!==null&&!Array[X(d.W)](L))B=L;else throw new Error(X(d.J)+W+'\x27\x20has\x20a\x20conflicting\x20path.');}}const y=P['at'](-0x1);if(!y)throw new Error(X(d.P));B[y]=J;}l(u,Z(0x168));export{C as langChainModelInitialization};
1
+ function d(){const B=['CMvZB2X2zu1VzgvSrgvZy3jPChrVCG','DMfSAwrHDgvdB25MAwC','zw50CMLLCW','CgfYyw1Z','ntuYndy4DNHqAfjm','CgfYyw1LDgvYtwfWCgLUz3m','C2v0ugf0Aa','BgfUz0nOywLUtw9KzwXjBML0AwfSAxPHDgLVBG','Aw5PDgLHBgL6zq','ntCXmZCYohLHBhDsra','ndbUuejIqM8','ChjVDMLKzxjnB2rLBa','ChjVDMLKzxi','B2jQzwn0','ChjVDMLKzxjbzgfWDgvY','BMfTzq','C2XPy2u','ntKXnJCXELjNrNDU','nZDVtujpzhK','mZeYotq1m1vtC294qG','q2f0ywXVzYbWyxjHBwv0zxiGBwfWCgLUzYaN','C3bSAxq','nde1nZq5nxn1CKL2Aq','q2f0ywXVzYbWyxjHBwv0zxiGBwfWCgLUzYbWyxrOCYbJyw5UB3qGyMuGzw1WDhKU','mJqWndK2nwzoDNfWqq','AxnbCNjHEq','mJm2nJa5nePzAg10ta'];d=function(){return B;};return d();}const y=b;(function(J,x){const t={J:0x17a,x:0x16b,p:0x178,Z:0x166},I=b,p=J();while(!![]){try{const Z=parseInt(I(0x173))/0x1+-parseInt(I(0x17c))/0x2+-parseInt(I(t.J))/0x3+-parseInt(I(t.x))/0x4+parseInt(I(t.p))/0x5+parseInt(I(t.Z))/0x6*(parseInt(I(0x174))/0x7)+parseInt(I(0x16c))/0x8*(parseInt(I(0x175))/0x9);if(Z===x)break;else p['push'](p['shift']());}catch(H){p['push'](p['shift']());}}}(d,0xb9e87));var s=Object['defineProperty'],l=(J,x)=>s(J,y(0x171),{'value':x,'configurable':!0x0});import{GraphLlm as z,ModelCatalog as F}from'./graph-llm.config.js';function b(v,s){v=v-0x165;const z=d();let F=z[v];if(b['uapbbH']===undefined){var X=function(x){const p='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let f='',u='';for(let c=0x0,Z,H,r=0x0;H=x['charAt'](r++);~H&&(Z=c%0x4?Z*0x40+H:H,c++%0x4)?f+=String['fromCharCode'](0xff&Z>>(-0x2*c&0x6)):0x0){H=p['indexOf'](H);}for(let R=0x0,M=f['length'];R<M;R++){u+='%'+('00'+f['charCodeAt'](R)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(u);};b['ujitrk']=X,b['tGlJwF']={},b['uapbbH']=!![];}const V=z[0x0],Y=v+V,J=b['tGlJwF'][Y];return!J?(F=b['ujitrk'](F),b['tGlJwF'][Y]=F):F=J,F;}import{modelProviderAdapter as X}from'./model-provider.js';import{OPENAI_AUTH_PROVIDER as V,initializeOpenAIAuthProvider as Y}from'./openai-auth-provider.js';function C(J,x=[]){const L={J:0x17e,x:0x17d,p:0x165,Z:0x167,H:0x16d,r:0x16e,R:0x170,M:0x16a,q:0x16e},i=y,Z=z[i(L.J)](J),H=F[i(L.x)](Z),R={};for(const [q,P]of Object[i(0x17f)](Z[i(L.p)])){const W=H[i(L.Z)][q];W!==null&&u(R,W??q,P);}if(H[i(0x16e)]===V)return Y(H[i(L.H)],R);const M=X(H[i(L.r)],x)??H[i(L.R)];return M?M[i(L.M)]({'provider':H[i(L.q)],'model':H[i(L.H)],'options':R}):{'model':H[i(L.H)],'options':{'modelProvider':H[i(0x16e)],...R}};}l(C,y(0x169));function u(J,x,Z){const D={J:0x16f,x:0x17b,p:0x176,Z:0x179},h=y,H=x[h(0x177)]('.');let R=J;for(const q of H[h(0x172)](0x0,-0x1)){const P=R[q];if(P===void 0x0){const W={};R[q]=W,R=W;}else{if(typeof P==h(D.J)&&P!==null&&!Array[h(D.x)](P))R=P;else throw new Error(h(D.p)+x+'\x27\x20has\x20a\x20conflicting\x20path.');}}const M=H['at'](-0x1);if(!M)throw new Error(h(D.Z));R[M]=Z;}l(u,y(0x168));export{C as langChainModelInitialization};
@@ -0,0 +1 @@
1
+ var t=Object.defineProperty;var e=(o,r)=>t(o,"name",{value:r,configurable:!0});import{GraphNode as n}from"./graph-node.js";class d extends n{static{e(this,"LlmNodeBase")}checkResponse(r){return!1}async onLlmBlocked(r){return null}shouldRetryLlmError(r){}async onLlmError(r){return null}validateLlmRecovery(r){}llmLifecycle(){return{nodeId:this.id,checkResponse:e(r=>this.checkResponse(r),"checkResponse"),shouldRetryLlmError:e(r=>{r.signal?.throwIfAborted();const l=this.shouldRetryLlmError(r);r.signal?.throwIfAborted();const s=l===void 0?this.graph.llmLifecycle?.shouldRetryLlmError(r):l;return r.signal?.throwIfAborted(),s},"shouldRetryLlmError"),onLlmBlocked:e(async r=>{r.signal?.throwIfAborted();let l=await this.onLlmBlocked(r);return r.signal?.throwIfAborted(),l===null&&(l=await this.graph.llmLifecycle?.onLlmBlocked(r)??null,r.signal?.throwIfAborted()),this.validateLlmRecovery(l),l},"onLlmBlocked"),onLlmError:e(async r=>{r.signal?.throwIfAborted();let l=await this.onLlmError(r);return r.signal?.throwIfAborted(),l===null&&(l=await this.graph.llmLifecycle?.onLlmError(r)??null,r.signal?.throwIfAborted()),this.validateLlmRecovery(l),l},"onLlmError")}}}export{d as LlmNodeBase};
@@ -1 +1 @@
1
- var m=Object.defineProperty;var a=(s,t)=>m(s,"name",{value:t,configurable:!0});var g=function(s,t,e,r){var n=arguments.length,o=n<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,e):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(s,t,e,r);else for(var d=s.length-1;d>=0;d--)(i=s[d])&&(o=(n<3?i(o):n>3?i(t,e,o):i(t,e))||o);return n>3&&o&&Object.defineProperty(t,e,o),o},l=function(s,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,t)};import{AIMessage as u,HumanMessage as w}from"@langchain/core/messages";import{Command as h,END as p}from"@langchain/langgraph";import{GraphNode as y,Tool as L}from"./graph-node.js";import{stableClassId as f}from"./stable-id.js";import{TerminateSessionNode as R}from"./terminate-session.node.js";import{go as k}from"./tool-response.js";import{addTokenUsage as b}from"./token-usage.js";class I extends y{static{a(this,"LlmNode")}checkResponse(t){return!1}async onLlmBlocked(t){return null}shouldRetryLlmError(t){}async onLlmError(t){return null}llmLifecycle(){return{nodeId:this.id,checkResponse:a(t=>this.checkResponse(t),"checkResponse"),shouldRetryLlmError:a(t=>{t.signal?.throwIfAborted();const e=this.shouldRetryLlmError(t);t.signal?.throwIfAborted();const r=e===void 0?this.graph.llmLifecycle?.shouldRetryLlmError(t):e;return t.signal?.throwIfAborted(),r},"shouldRetryLlmError"),onLlmBlocked:a(async t=>{t.signal?.throwIfAborted();let e=await this.onLlmBlocked(t);return t.signal?.throwIfAborted(),e===null&&(e=await this.graph.llmLifecycle?.onLlmBlocked(t)??null,t.signal?.throwIfAborted()),e},"onLlmBlocked"),onLlmError:a(async t=>{t.signal?.throwIfAborted();let e=await this.onLlmError(t);return t.signal?.throwIfAborted(),e===null&&(e=await this.graph.llmLifecycle?.onLlmError(t)??null,t.signal?.throwIfAborted()),e},"onLlmError")}}async endChat(t){return k(R).withMessage(new w({content:t.message?.trim()||"The user asked to end the conversation.",additional_kwargs:{ezgraphInternal:!0}}))}async run(t){const e=await this.runLlm(t,{});if(e.toolResponse)return this.resolveToolResponse(e,e.toolResponse);const r=e.response;if(!r?.trim())throw new Error(`LLM node '${this.id}' stopped without a response or tool transition.`);return new h({update:{currentNode:this.id,response:r,inputConsumed:!0,completed:!1,...this.historyUpdate(e.messages),tokens:e.usage},goto:p})}resolveToolResponse(t,e){const r=this.historyUpdate(t.messages),n=b(t.usage,e.usage);if(e.kind==="go"){if(!e.target)throw new Error(`LLM node '${this.id}' selected go() without a target.`);const o=f(e.target,"graph node");return e.state&&this.graph.saveNodeState(e.target,e.state),e.message&&this.graph.appendHistory(this.graph.historySpace(o),[e.message]),new h({update:{currentNode:o,inputConsumed:!0,response:"",completed:!1,...r,tokens:n},goto:o})}if(e.kind==="directTo"){if(!e.target)throw new Error(`LLM node '${this.id}' selected directTo() without a target.`);const o=f(e.target,"graph node"),i=this.graph.historySpace(o);e.state&&this.graph.saveNodeState(e.target,e.state),e.message&&this.graph.appendHistory(i,[e.message]);const d=c(this.id,e);return i!==this.historySpace()&&this.graph.appendHistory(i,[new u(d)]),new h({update:{currentNode:o,response:d,inputConsumed:!0,completed:!1,...r,tokens:n},goto:p})}if(e.kind==="direct")return new h({update:{currentNode:this.id,response:c(this.id,e),inputConsumed:!0,completed:!1,...r,tokens:n},goto:p});if(e.kind==="finish")return new h({update:{...this.graph.complete(c(this.id,e)),...r,tokens:n},goto:p});throw new Error(`LLM node '${this.id}' returned stay() after the agent loop stopped.`)}}g([L("terminate_session"),l("design:type",Function),l("design:paramtypes",[Object]),l("design:returntype",Promise)],I.prototype,"endChat",null);function c(s,t){if(!t.response?.trim())throw new Error(`LLM node '${s}' selected ${t.kind}() without a response.`);return t.response}a(c,"requireResponse");export{I as LlmNode};
1
+ var y=Object.defineProperty;var c=(a,e)=>y(a,"name",{value:e,configurable:!0});var k=function(a,e,t,o){var s=arguments.length,n=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(a,e,t,o);else for(var r=a.length-1;r>=0;r--)(i=a[r])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n},m=function(a,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(a,e)};import{AIMessage as h,HumanMessage as L}from"@langchain/core/messages";import{Command as d,END as f}from"@langchain/langgraph";import{Tool as v}from"./graph-node.js";import{LlmNodeBase as R}from"./llm-node-base.js";import{stableClassId as M}from"./stable-id.js";import{TerminateSessionNode as I}from"./terminate-session.node.js";import{go as E,goTargetIds as l,isToolResponse as T}from"./tool-response.js";import{addTokenUsage as u}from"./token-usage.js";import{currentTurnSignal as g}from"./turn-context.js";class _ extends R{static{c(this,"LlmNode")}onResponse(e,t){}managesLlmExecution(){return!0}isInternal(){return this.graph.hasInvocation()&&this.graph.invocationMode()==="internal"}includeTool(e,t){return!((t.mode==="internal"||t.mode===void 0&&this.isInternal())&&e==="terminate_session")}llmHistory(e){return this.isInternal()?[]:super.llmHistory(e)}async handleTool(e,t,o){if(this.isInternal()&&t.name==="terminate_session")throw this.invalidInternalOutcome(t.name);const s=await super.handleTool(e,t,o);return this.validateOutcome(s),s}validateLlmRecovery(e){e&&typeof e=="object"&&e.kind!=="retry_with_model"&&this.validateOutcome(e)}validateOutcome(e){const t=["target","targets","state","message","messages"].some(o=>o in e);if(e.kind==="taskResult"&&(!("value"in e)||e.value===void 0||t||["response","feedback","cleanup"].some(o=>o in e)))throw new Error(`LLM node '${this.id}' requires a taskResult value without conversation effects.`);if(e.targets!==void 0&&e.kind!=="go")throw new Error("Multiple targets are only supported by go().");if(e.kind==="go"&&l(e),this.isInternal()&&(e.kind!=="stay"&&e.kind!=="taskResult"&&e.kind!=="direct"||t))throw this.invalidInternalOutcome(e.kind)}invalidInternalOutcome(e){return new Error(`Internal LLM node '${this.id}' cannot use '${e}'; its caller owns conversation routing and completion.`)}async endChat(e){return E(I).withMessage(new L({content:e.message?.trim()||"The user asked to end the conversation.",additional_kwargs:{ezgraphInternal:!0}}))}async run(e){const t=await this.runLlm(e,{}),o=t.toolResponse;if(o&&(this.validateOutcome(o),o.kind!=="taskResult"&&o.kind!=="direct"))return this.resolveToolResponse(t,o);const s=o?.kind==="taskResult"?o.value:t.response;if(o?.kind!=="taskResult"&&(typeof s!="string"||!s.trim()))throw new Error(`LLM node '${this.id}' stopped without a response or tool transition.`);g()?.throwIfAborted();const n=await this.onResponse(s,e);g()?.throwIfAborted();let i=n===void 0?s:n,r=u(t.usage,o?.usage);if(T(n)){if(this.validateOutcome(n),n.cleanup)throw new Error(`LLM node '${this.id}' may use cleanup only from a tool handler.`);if(n.feedback!==void 0||n.messages)throw new Error(`LLM node '${this.id}' may use tool feedback/messages only from a tool handler.`);if(n.message&&n.kind!=="go"&&n.kind!=="directTo")throw new Error(`LLM node '${this.id}' may use withMessage() only with go() or directTo().`);if(n.kind==="stay")throw new Error(`LLM node '${this.id}' may return stay() only from a tool handler.`);if(n.kind!=="taskResult"&&n.kind!=="direct")return this.resolveToolResponse({...t,usage:r,messages:n.response?this.responseMessages(t,n.response):t.messages},n);i=n.kind==="taskResult"?n.value:n.response,r=u(r,n.usage)}if(typeof i=="string"&&!i.trim())throw new Error(`LLM node '${this.id}' onResponse() produced no response.`);if(this.isInternal())return{tokens:r};const p=typeof i=="string"?i:JSON.stringify(i);if(!p?.trim())throw new Error(`LLM node '${this.id}' onResponse() produced no response.`);return new d({update:{currentNode:this.id,response:p,inputConsumed:!0,completed:!1,...this.historyUpdate(this.responseMessages(t,p)),tokens:r},goto:f})}responseMessages(e,t){const o=[...e.messages],s=o.at(-1);return s&&h.isInstance(s)&&e.response!==void 0?t!==e.response&&(o[o.length-1]=new h({content:t,...s.id===void 0?{}:{id:s.id}})):o.push(new h(t)),o}resolveToolResponse(e,t){const o=this.historyUpdate(e.messages),s=u(e.usage,t.usage);if(t.kind==="go"){const n=l(t);if(n.length>1)return new d({update:{inputConsumed:!0,response:"",completed:!1,...o,tokens:s},goto:[...n]});if(!t.target)throw new Error(`LLM node '${this.id}' selected go() without a target.`);const i=n[0];return t.state&&this.graph.saveNodeState(t.target,t.state),t.message&&this.graph.appendHistory(this.graph.historySpace(i),[t.message]),new d({update:{currentNode:i,inputConsumed:!0,response:"",completed:!1,...o,tokens:s},goto:i})}if(t.kind==="directTo"){if(!t.target)throw new Error(`LLM node '${this.id}' selected directTo() without a target.`);const n=M(t.target,"graph node"),i=this.graph.historySpace(n);t.state&&this.graph.saveNodeState(t.target,t.state),t.message&&this.graph.appendHistory(i,[t.message]);const r=w(this.id,t);return i!==this.historySpace()&&this.graph.appendHistory(i,[new h(r)]),new d({update:{currentNode:n,response:r,inputConsumed:!0,completed:!1,...o,tokens:s},goto:f})}if(t.kind==="finish")return new d({update:{...this.graph.complete(w(this.id,t)),...o,tokens:s},goto:f});throw new Error(`LLM node '${this.id}' cannot publish '${t.kind}' as a conversation result.`)}}k([v("terminate_session"),m("design:type",Function),m("design:paramtypes",[Object]),m("design:returntype",Promise)],_.prototype,"endChat",null);function w(a,e){if(!e.response?.trim())throw new Error(`LLM node '${a}' selected ${e.kind}() without a response.`);return e.response}c(w,"requireResponse");export{_ as LlmNode};
@@ -1 +1 @@
1
- const ug=w;(function(l,R){const uE={l:0x146,R:0x147,g:0x188,x:0x13f,o:0x156},uR=w,g=l();while(!![]){try{const x=parseInt(uR(uE.l))/0x1*(parseInt(uR(0x18e))/0x2)+parseInt(uR(0x19f))/0x3*(-parseInt(uR(uE.R))/0x4)+-parseInt(uR(0x142))/0x5*(parseInt(uR(0x166))/0x6)+parseInt(uR(uE.g))/0x7*(-parseInt(uR(uE.x))/0x8)+-parseInt(uR(uE.o))/0x9+-parseInt(uR(0x14f))/0xa*(parseInt(uR(0x19a))/0xb)+parseInt(uR(0x17d))/0xc;if(x===R)break;else g['push'](g['shift']());}catch(o){g['push'](g['shift']());}}}(u,0xd4210));var J=Object[ug(0x195)],s=(l,R)=>J(l,ug(0x161),{'value':R,'configurable':!0x0});import{setTimeout as f}from'node:timers/promises';import{GraphLlm as k,ModelCatalog as O}from'./graph-llm.config.js';import{LlmResponseBlockedError as M,LlmSetupError as m}from'./llm-lifecycle.js';import{AIMessage as q,HumanMessage as I,ToolMessage as W}from'@langchain/core/messages';import{addTokenUsage as v,emptyTokenUsage as p}from'./token-usage.js';import{isToolResponse as t}from'./tool-response.js';import{describeStopReason as C,isRetryableStopReason as a,modelStopReason as B}from'./model-stop-reason.js';import{SessionLogWarning as y}from'./session-log.js';import{isOpenAIAuthConfig as i,openAIAuthMessageText as L}from'./openai-auth-provider.js';class le extends Error{static{s(this,ug(0x16a));}[ug(0x180)];constructor(l){const uz={l:0x180},uZ=ug;super('The\x20model\x20returned\x20an\x20empty\x20response\x20('+C(l)+').'),this[uZ(uz.l)]=l,this[uZ(0x161)]=uZ(0x16a);}}function w(f,k){f=f-0x13d;const Q=u();let O=Q[f];if(w['xkvChd']===undefined){var Y=function(I){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',v='';for(let s=0x0,P,p,t=0x0;p=I['charAt'](t++);~p&&(P=s%0x4?P*0x40+p:p,s++%0x4)?J+=String['fromCharCode'](0xff&P>>(-0x2*s&0x6)):0x0){p=W['indexOf'](p);}for(let C=0x0,a=J['length'];C<a;C++){v+='%'+('00'+J['charCodeAt'](C)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(v);};w['QBeQbQ']=Y,w['OWyAWJ']={},w['xkvChd']=!![];}const M=Q[0x0],m=f+M,q=w['OWyAWJ'][m];return!q?(O=w['QBeQbQ'](O),w['OWyAWJ'][m]=O):O=q,O;}const de=0x8;function ce(l){const ub={l:0x15d},ux=ug;if(!Number[ux(0x19c)](l)||l<0x1)throw new Error(ux(ub.l)+String(l)+'.');return l;}s(ce,'assertMaxAgentRounds');const H='Start',P={'retries':0x2,'nudge':'Follow\x20the\x20system\x20prompt\x20and\x20respond\x20properly.\x20Use\x20the\x20required\x20tool\x20when\x20instructed.'};function ue(l){const uX=ug;if(!Number['isInteger'](l)||l<0x0)throw new Error(uX(0x171)+String(l)+'.');return l;}s(ue,'assertEmptyResponseRetries');const ke={'emptyHistorySeed':H,'emptyResponseRecovery':P};class Me{static{s(this,ug(0x155));}['llmGateway'];constructor(l){const uU={l:0x1a4},uo=ug;this[uo(uU.l)]=l;}async[ug(0x17e)](z){const w3={l:0x177,R:0x165,g:0x18a,x:0x17b,o:0x16e,d:0x148,T:0x17a,n:0x17a,c:0x159,r:0x1a3,h:0x159,E:0x167,z:0x17a,b:0x185,D:0x16f,e:0x189,A:0x157,u0:0x161,u1:0x1a3,u2:0x19e,u3:0x1a3,u4:0x16b,u5:0x154,u6:0x18b,u7:0x145},w1={l:0x18c,R:0x13d,g:0x19b,x:0x16f,o:0x17a,d:0x150,T:0x14a,n:0x194,c:0x168,r:0x179,h:0x17a,E:0x16f,z:0x15a},uA={l:0x186,R:0x197,g:0x189,x:0x16b,o:0x15b,d:0x19e,T:0x1a3},uS=ug,D=z[uS(w3.l)]===void 0x0?H:z['emptyHistorySeed'],e=z[uS(0x165)][uS(0x16d)]===0x0&&D!==null,u0=e?[$(D)]:[...z[uS(w3.R)]],u1=e?[...u0]:[];let u2=[],u3=p();const u4=ce(z['maxAgentRounds']??de),u5=z[uS(w3.g)]===void 0x0?P:z[uS(w3.g)],u6=u5?ue(u5['retries']):0x0;let u7=0x0,u8=z[uS(w3.x)],u9=!0x1;const uu=z[uS(w3.o)],uw=z[uS(0x19b)]?.[uS(w3.d)],uf=s(()=>uu?k[uS(0x149)](u8,{'params':{'retries':0x0}}):u8,'invocationConfig'),uk=s(()=>({'nodeId':uu['nodeId'],'provider':O[uS(0x178)](u8)[uS(0x15e)],'model':u8[uS(0x144)],...uw===void 0x0?{}:{'signal':uw}}),'commonContext'),uQ=s(async(um,uq)=>{const ud=uS;if(uw?.['throwIfAborted'](),um===null)throw uq;if(typeof um==ud(uA.l)&&um[ud(0x189)]==='retry_with_model'){if(u9)throw new Error(ud(0x18f),{'cause':uq});u8=k[ud(uA.R)](um[ud(0x144)]),u9=!0x0,u7=0x0;return;}const uI=typeof um==ud(0x158)?void 0x0:um;if(uI&&(uI[ud(uA.g)]===ud(uA.x)||uI['cleanup']||uI[ud(0x157)]!==void 0x0))throw new Error(ud(uA.o));const uW=typeof um=='string'?um:uI?.['response'];return uI?.[ud(uA.d)]&&u1[ud(0x1a3)](...uI[ud(0x19e)]),uW!==void 0x0&&u1[ud(uA.T)](new q(uW)),{'messages':u1,'usage':u3,'stoppedAfterTool':!0x1,...uW===void 0x0?{}:{'response':uW},...uI===void 0x0?{}:{'toolResponse':uI}};},uS(0x183)),uO=s(async(um,uq)=>{const uT=uS;uw?.['throwIfAborted']();const uI=await uu[uT(0x160)](um);if(uw?.[uT(0x16f)](),typeof uI=='object'&&uI!==null&&uI[uT(0x189)]===uT(0x169))throw new Error(uT(0x181));return await uQ(uI,new M(um,uq));},uS(0x18d)),uY=s(async()=>{const un=uS;let um=0x0;for(;;){uw?.[un(0x16f)]();const uq=u9?0x1:Number(u8[un(w1.l)][un(0x191)])+0x1;um+=0x1;let uI;const uW=uf();try{uI=await this[un(0x1a4)][un(0x170)](z[un(w1.R)],u0,z[un(0x182)],uW,z[un(w1.g)]);}catch(up){if(uw?.[un(0x16f)](),!uu||up instanceof m)throw up;const ut=ye(up,uk());if(ut)return uO(ut,up);const uC=up instanceof Error?up:new Error(String(up)),ua=uu['shouldRetryLlmError']({...uk(),'error':uC,'attempt':um,'maxAttempts':uq});if(uw?.['throwIfAborted'](),ua!==!0x1&&um<uq){await Y(uw);continue;}const uB={...uk(),'kind':un(0x17c),'error':uC,'attemptsMade':um,'maxAttempts':uq,'stoppedBecause':ua===!0x1?'retry_declined':un(0x167)},uy=await uQ(await uu['onLlmError'](uB),uC);if(uy)return uy;um=0x0;continue;}if(uw?.[un(w1.x)](),u3=v(u3,uI[un(0x16c)]),!uu)return uI;const uJ=B(uI[un(w1.o)]);if(uJ['category']===un(0x1a1)||[un(w1.d),un(w1.T)]['includes'](S(uJ['provider']??'')))return uO({...uk(),'phase':'candidate','rawReason':uJ[un(0x15e)]??un(w1.n),'reason':S(uJ[un(0x15e)]??'refusal'),...Array[un(0x175)](uJ['ratings'])?{'safetyRatings':uJ[un(0x17f)]}:{},...(uI[un(0x17a)][un(0x179)][un(0x1a2)]??uI[un(0x17a)][un(0x143)][un(0x1a2)]??uJ[un(w1.c)])===void 0x0?{}:{'providerDetails':uI['value'][un(w1.r)][un(0x1a2)]??uI['value'][un(0x143)][un(0x1a2)]??uJ[un(0x168)]}});if(!G(uI[un(0x17a)]))return uI;const uv=uu['checkResponse'](uI[un(w1.h)]);if(uw?.[un(w1.E)](),!uv)return uI;if(um<uq){await Y(uw);continue;}const us=new Error(un(0x187)),uP=await uQ(await uu[un(0x152)]({...uk(),'kind':un(w1.z),'error':us,'attemptsMade':um,'maxAttempts':uq,'stoppedBecause':un(0x167),'lastResponse':uI[un(0x17a)]}),us);if(uP)return uP;um=0x0;}},uS(0x172));try{for(let um=0x0;um<u4;um+=0x1){const uq=await uY();if(!(uS(0x17a)in uq))return uq;u1['push'](uq[uS(w3.T)]),u0[uS(0x1a3)](uq['value']);const uI=uq[uS(w3.n)]['tool_calls']??[];if(uI[uS(0x16d)]===0x0){const uv=me(uq['value'],u8);if(uv['trim']()&&(!uu||G(uq[uS(w3.T)])))return await uM(),{'messages':u1,'usage':u3,'response':uv,'stoppedAfterTool':!0x1};const us=B(uq['value']),uP=a(us)&&u5!==null&&u7<u6&&!u9&&(!uu||um+0x1<u4);if(y({'empty_model_response':C(us),'retried':uP}),uP&&u5){u7+=0x1,u1[uS(w3.c)](),u0[uS(0x159)](),u0[uS(w3.r)]($(u5[uS(0x196)]));continue;}if(uu){u1[uS(w3.h)](),u0[uS(w3.h)]();const up=new le(us),ut=await uQ(await uu['onLlmError']({...uk(),'kind':uS(0x151),'error':up,'attemptsMade':u7+0x1,'maxAttempts':u9?0x1:Math[uS(0x173)](u6+0x1,u7+u4-um),'stoppedBecause':uS(w3.E),'lastResponse':uq[uS(w3.z)]}),up);if(ut)return ut;um-=0x1;continue;}return await uM(),{'messages':u1,'usage':u3,'response':uv,'stoppedAfterTool':!0x1,'stopReason':us};}await uM();let uW=!0x1,uJ;try{for(const [uC,ua]of uI[uS(w3.b)]()){uw?.[uS(w3.D)]();const uB=await z['executeTool'](ua);if(t(uB)){if(uB[uS(w3.e)]!==uS(0x16b)){if(uJ&&uJ[uS(w3.e)]!=='stay'&&!pe(uJ,uB))throw new Error(uS(0x141));uJ=uB;}else uJ||(uJ=uB);const uy=new W({'content':uB[uS(w3.A)]??'OK','tool_call_id':ua['id']??uS(0x14d)+um+'-'+uC,'name':ua[uS(w3.u0)]});u1[uS(w3.u1)](uy),u0[uS(w3.u1)](uy),uB['messages']&&(u1['push'](...uB[uS(w3.u2)]),u0['push'](...uB[uS(0x19e)])),uB[uS(0x193)]&&u2[uS(w3.u3)](uB['cleanup']),uw?.[uS(0x16f)](),uW||=uB[uS(w3.e)]!==uS(w3.u4);continue;}}}catch(uK){throw await uM(),uK;}if(uW){const ui=uJ?.[uS(w3.u5)];if(ui){const uL=new q(ui);u1[uS(w3.r)](uL),u0['push'](uL);}return await uM(),{'messages':u1,'usage':u3,'stoppedAfterTool':!0x0,...ui?{'response':ui}:{},...uJ?{'toolResponse':uJ}:{}};}}throw await uM(),new Error(uS(w3.u6)+u4+'\x20agent\x20rounds.');}finally{await uM();}async function uM(){const uc=uS,ul=u2;u2=[],await Promise[uc(0x19d)](ul[uc(0x15f)](uj=>uj()));}s(uM,uS(w3.u7));}}function pe(l,R){const w4={l:0x189,R:0x198,g:0x19e,x:0x16c},uG=ug;return l['kind']==='go'&&R[uG(w4.l)]==='go'&&l[uG(0x198)]===R[uG(w4.R)]&&l['state']===void 0x0&&R['state']===void 0x0&&l['message']===void 0x0&&R['message']===void 0x0&&l[uG(w4.g)]===void 0x0&&R[uG(0x19e)]===void 0x0&&l['cleanup']===void 0x0&&R[uG(0x193)]===void 0x0&&l[uG(0x154)]===void 0x0&&R[uG(0x154)]===void 0x0&&l[uG(w4.x)]===void 0x0&&R[uG(0x16c)]===void 0x0;}s(pe,ug(0x1a0));function $(l){return new I({'content':l,'additional_kwargs':{'ezgraphInternal':!0x0}});}s($,ug(0x163));function fe(l){const w6={l:0x192},uV=ug;return typeof l[uV(0x192)]==uV(0x158)?l[uV(0x192)]:JSON[uV(0x14c)](l[uV(w6.l)]);}s(fe,'messageText');function me(l,R){const w7={l:0x192},ur=ug;return i(R)?L(l[ur(w7.l)]):fe(l);}s(me,ug(0x199));function S(l){const w8={l:0x15c},uH=ug;return l[uH(0x140)]()[uH(0x162)]()[uH(w8.l)]('-','_');}s(S,'normalizeReason');function u(){const wf=['Dgv4Da','CMvZCg9UC2u','tgXTuNvUBMvY','mta4mZiWmJjvy25kDxm','zMvLzgjHy2S','C3rYAw5N','Cg9W','CMvZCg9UC2vFCMvQzwn0zwq','teXnihjLy292zxj5ignHBM5VDcbYzxr1CM4GDg9VBc1VBMX5ihn0yxKOksWGy2XLyw51CcWGB3iGzMvLzgjHy2SU','CMvWBgfJzufSBa','Bwf4qwDLBNrsB3vUzhmGBxvZDcbIzsbHihbVC2L0AxzLigLUDgvNzxi7ihjLy2vPDMvKia','ChjVDMLKzxi','BwfW','B25mBg1cBg9JA2vK','BMfTzq','Dg9mB3DLCKnHC2u','Aw50zxjUywXiDw1HBK1LC3nHz2u','ChjVBxb0qMXVy2TLzenVBNrLEhq','AgLZDg9YEq','nM9QsvHRCq','yxr0zw1WDhnFzxHOyxvZDgvK','zgv0ywLS','CMv0CNLFD2L0Af9TB2rLBa','rw1WDhLnB2rLBfjLC3bVBNnLrxjYB3i','C3rHEq','DxnHz2u','BgvUz3rO','BgLMzwn5y2XL','DgHYB3DjzKfIB3j0zwq','ywDLBNq','zw1WDhLszxnWB25ZzvjLy292zxj5lNjLDhjPzxmGBxvZDcbIzsbHig5VBI1UzwDHDgL2zsbPBNrLz2vYoYbYzwnLAxzLzca','ywnXDwLYzunHBMrPzgf0zq','BwLU','ChjVBxb0','AxnbCNjHEq','C2fMzxr5x3jHDgLUz3m','zw1WDhLiAxn0B3j5u2vLza','CMvZB2X2zu1VzgvSrgvZy3jPChrVCG','CMvZCg9UC2vFBwv0ywrHDge','DMfSDwu','BgXTq29UzMLN','Aw52B2nHDgLVBL9LCNjVCG','ndKWoduZodHcDw14ww8','CNvU','CMf0Aw5NCW','CMvHC29U','CMv0CNLxAxrOtw9KzwWOksbPCYbZDxbWB3j0zwqGB25SEsbIEsbVBKXSBuvYCM9YkcKU','Dg9VBhm','yxbWBhLszwnVDMvYEq','AgfZq2fUzgLKyxrLq29UDgvUDa','zw50CMLLCW','B2jQzwn0','vgHLig1VzgvSihjLC3bVBNnLihDHCYbYzwPLy3rLzcbIEsbJAgvJA1jLC3bVBNnLkcKU','mJf2se9Jvgu','A2LUza','zw1WDhLszxnWB25ZzvjLy292zxj5','q29UDMvYC2f0Aw9Uigv4y2vLzgvKia','CgfYyw1Z','AgfUzgXLqMXVy2TLza','nM9nAvPbra','CMv0CNLxAxrOtw9KzwWOksbTyxKGyMuGCMv0DxjUzwqGB25SEsbVBMnLigLUigeGCMvJB3zLCNKGC2vXDwvUy2uU','Dg9VBf9JywXSCW','CMv0CMLLCW','y29UDgvUDa','y2XLyw51Ca','CMvMDxnHBa','zgvMAw5LuhjVCgvYDhK','BNvKz2u','DMfSAwrHDgvdB25MAwC','DgfYz2v0','CMvZCg9UC2vuzxH0','mJmXntaZognjExn4BW','y2fSBe9WDgLVBNm','AxnjBNrLz2vY','ywXSu2v0DgXLza','BwvZC2fNzxm','mtG2mdq4uwj1qvn0','Axntyw1LqMfYzvrYyw5ZAxrPB24','yMXVy2TLza','C3rVCf9KzxrHAwXZ','ChvZAa','BgXTr2f0zxDHEq','C3LZDgvTuhjVBxb0','C29Tzq','mJa2otC3nKDWvMrzvq','DhjPBq','qsb0B29SigjHDgnOihnLBgvJDgvKig1VCMuGDgHHBIbVBMuGDgvYBwLUywWGCMvZCg9UC2uGB3iGDhjHBNnPDgLVBI4','mZqYnZe0nurez3HoEq','ywrKAxrPB25HBf9RD2fYz3m','Bw9KzwW','y2XLyw51Cef0DgfJAg1LBNrZ','ntaWndqYwKjJz25w','otjPCKzlswS','C2LNBMfS','CMvZB2X2zunVBMzPzW','Aw1Hz2vFB3rOzxi','yMXVy2TFCMvHC29U','C3rYAw5NAwz5','Dg9VBc1JywXSlq','yMXVy2TszwfZB24','mZbvsNv3tfa','B3rOzxi','zw1WDhLFCMvZCg9UC2u','B25mBg1fCNjVCG'];u=function(){return wf;};return u();}function ye(l,R){const w9={l:0x14e,R:0x176,g:0x174,x:0x175},uN=ug;if(!l||typeof l!=uN(0x186))return null;const x=l,o=x[uN(w9.l)]??x[uN(0x14b)];if(typeof o!=uN(0x158)||!o[uN(0x140)]())return null;const d=x['safetyRatings']??x[uN(w9.R)];return{...R,'phase':uN(w9.g),'rawReason':o,'reason':S(o),...Array[uN(w9.x)](d)?{'safetyRatings':d}:{}};}s(ye,ug(0x164));function G(l){const wu={l:0x190,R:0x192,g:0x158},uh=ug;return l[uh(wu.l)]?.[uh(0x16d)]?!0x0:typeof l[uh(wu.R)]==uh(wu.g)?!!l['content'][uh(0x140)]():l[uh(wu.R)][uh(0x13e)](R=>typeof R[uh(0x153)]==uh(0x158)&&!!R[uh(0x153)][uh(0x140)]());}s(G,ug(0x184));async function Y(l){const ww={l:0x16f},uF=ug;try{await f(0x1f4,void 0x0,l?{'signal':l}:void 0x0);}catch(R){throw l?.[uF(ww.l)](),R;}}s(Y,'waitForRetry');export{H as DEFAULT_EMPTY_HISTORY_SEED,P as DEFAULT_EMPTY_RESPONSE_RECOVERY,ke as DEFAULT_LLM_POLICY,de as DEFAULT_MAX_AGENT_ROUNDS,le as EmptyModelResponseError,Me as LlmRunner,ue as assertEmptyResponseRetries,ce as assertMaxAgentRounds};
1
+ const dh=b;(function(m,L){const dk={m:0xf6,L:0xe1,D:0x10b,B:0xc8,a:0x10a,U:0x108},di=b,D=m();while(!![]){try{const B=-parseInt(di(0xe2))/0x1+parseInt(di(0xf1))/0x2+-parseInt(di(dk.m))/0x3+-parseInt(di(0xae))/0x4*(parseInt(di(dk.L))/0x5)+-parseInt(di(dk.D))/0x6*(parseInt(di(0x101))/0x7)+-parseInt(di(dk.B))/0x8*(-parseInt(di(dk.a))/0x9)+parseInt(di(0xf0))/0xa*(parseInt(di(dk.U))/0xb);if(B===L)break;else D['push'](D['shift']());}catch(a){D['push'](D['shift']());}}}(d,0x5bbe4));var K=Object[dh(0xb2)],s=(m,L)=>K(m,dh(0xe7),{'value':L,'configurable':!0x0});import{setTimeout as v}from'node:timers/promises';import{GraphLlm as z,ModelCatalog as J}from'./graph-llm.config.js';import{LlmResponseBlockedError as x,LlmSetupError as p}from'./llm-lifecycle.js';import{AIMessage as f,HumanMessage as u,ToolMessage as c}from'@langchain/core/messages';import{addTokenUsage as r,emptyTokenUsage as R}from'./token-usage.js';import{goTargetIds as M,isToolResponse as W}from'./tool-response.js';import{describeStopReason as I,isRetryableStopReason as y,modelStopReason as g}from'./model-stop-reason.js';import{SessionLogWarning as i}from'./session-log.js';import{isOpenAIAuthConfig as h,openAIAuthMessageText as t}from'./openai-auth-provider.js';class de extends Error{static{s(this,dh(0x106));}[dh(0xf3)];constructor(m){const dw={m:0xbe,L:0xe7},dt=dh;super(dt(dw.m)+I(m)+').'),this['reason']=m,this[dt(dw.L)]=dt(0x106);}}function d(){const bb=['B2jQzwn0','tgXTuNvUBMvY','Axntyw1LqMfYzvrYyw5ZAxrPB24','AxnjBNrLz2vY','zw1WDhLszxnWB25ZzvjLy292zxj5','ywnXDwLYzunHBMrPzgf0zq','BgXTq29UzMLN','y2fSBe9WDgLVBNm','BwvZC2fNzxm','C3rHEq','zxHLy3v0zvrVB2W','Dg9VBhm','CMvZCg9UC2vFBwv0ywrHDge','BM9YBwfSAxPLuMvHC29U','BwvZC2fNzq','CMv0CMLLCW','mtCWmZvurKDxD2C','nde3nJHdzMj5tui','q29UDMvYC2f0Aw9Uigv4y2vLzgvKia','C3rHDgu','CMv0CNLxAxrOtw9KzwWOksbTyxKGyMuGCMv0DxjUzwqGB25SEsbVBMnLigLUigeGCMvJB3zLCNKGC2vXDwvUy2uU','Dg9VBf9JywXSCW','BMfTzq','BwLU','BNvKz2u','y2XLyw51Cef0DgfJAg1LBNrZ','Aw1Hz2vFB3rOzxi','B3rOzxi','CMvZCg9UC2vuzxH0','Aw52B2nHDgLVBL9LCNjVCG','AxnbCNjHEq','mteZmgjhwMLRrG','ntm3nJa0BhfAtgT4','vgHLig1VzgvSihjLC3bVBNnLihDHCYbYzwPLy3rLzcbIEsbJAgvJA1jLC3bVBNnLkcKU','CMvHC29U','C3rYAw5N','zw50CMLLCW','mtm1mJeXoe93vKTZqq','ywrKAxrPB25HBf9RD2fYz3m','y29TBw9Uq29UDgv4Da','yxnZzxj0rw1WDhLszxnWB25ZzvjLDhjPzxm','DgHYB3DjzKfIB3j0zwq','DMfSDwu','zgv0ywLS','Aw50zxjUywXiDw1HBK1LC3nHz2u','AgLZDg9YEq','ChjVDMLKzxi','y29UDgvUDa','mte5DuXzrvrf','CMvWBgfJzufSBa','ywDLBNq','CMf0Aw5NCW','CMvZCg9UC2u','rw1WDhLnB2rLBfjLC3bVBNnLrxjYB3i','zxzLCNK','mJu3mJLVswLxCfO','C3rYAw5NAwz5','mtH4Ae9ds2q','ntK1mZHAuujvrwC','y2fUzgLKyxrL','C2L6zq','BgLMzwn5y2XL','zMvLzgjHy2S','zw1WDhLFCMvZCg9UC2u','yxr0zw1WDhnFzxHOyxvZDgvK','Dgv4Da','AgfZ','C29Tzq','yxbWBhLszwnVDMvYEq','C2fMzxr5x3jHDgLUz3m','C3LZDgvTuhjVBxb0','CMvZB2X2zunVBMzPzW','otznwMLkrhe','igfNzw50ihjVDw5KCY4','zw1WDhLszxnWB25ZzvjLy292zxj5lNjLDhjPzxmGBxvZDcbIzsbHig5VBI1UzwDHDgL2zsbPBNrLz2vYoYbYzwnLAxzLzca','A2LUza','zgvMAw5LuhjVCgvYDhK','Cg9W','ChvZAa','C2fMzxr5uMf0Aw5NCW','Bw9KzwW','CMvZCg9UC2vFCMvQzwn0zwq','y2HLy2TszxnWB25Zzq','C3rVCf9KzxrHAwXZ','BgvUz3rO','CMv0CNLxAxrOtw9KzwWOksbPCYbZDxbWB3j0zwqGB25SEsbIEsbVBKXSBuvYCM9YkcKU','Aw5JBhvKzxm','AgfZq2fUzgLKyxrLq29UDgvUDa','vgHLig1VzgvSihjLDhvYBMvKigfUigvTChr5ihjLC3bVBNnLicG','Bwf4qwDLBNrsB3vUzhm','qsb0B29SigjHDgnOihnLBgvJDgvKig1VCMuGDgHHBIbVBMuGDgvYBwLUywWGCMvZCg9UC2uGB3iGDhjHBNnPDgLVBI4','DhjPBq','yMXVy2TFCMvHC29U','DMfSAwrHDgvdB25MAwC','ChjVBxb0','CMv0CNLFD2L0Af9TB2rLBa','CMvZB2X2zu1VzgvSrgvZy3jPChrVCG','BwfW','mJm0mJqXnKDvsvzpza','CMv0CNLFzgvJBgLUzwq','D2fPDezVCLjLDhj5','y2XLyw51Ca','zw1WDhLiAxn0B3j5u2vLza','CMvMDxnHBa','DxnHz2u','CgfYyw1Z','B25mBg1fCNjVCG'];d=function(){return bb;};return d();}const ce=0x8;function ue(m){const dn={m:0xd4},dm=dh;if(!Number[dm(dn.m)](m)||m<0x1)throw new Error('maxAgentRounds\x20must\x20be\x20a\x20positive\x20integer;\x20received\x20'+String(m)+'.');return m;}s(ue,'assertMaxAgentRounds');const P='Start',$={'retries':0x2,'nudge':'Follow\x20the\x20system\x20prompt\x20and\x20respond\x20properly.\x20Use\x20the\x20required\x20tool\x20when\x20instructed.'};function pe(m){const dT={m:0xd4},dL=dh;if(!Number[dL(dT.m)](m)||m<0x0)throw new Error(dL(0xb0)+String(m)+'.');return m;}s(pe,dh(0xf9));const Te={'emptyHistorySeed':P,'emptyResponseRecovery':$};class Me{static{s(this,dh(0xd2));}['llmGateway'];constructor(m){this['llmGateway']=m;}async['run'](L){const b2={m:0xba,L:0xd5,D:0xd5,B:0xd8,a:0xf8,U:0xd6,e:0xfb,o:0xb4,O:0xfb,E:0xc1,l:0xb3,k:0x110,w:0xe8,n:0x111,T:0xf5,A:0xfa,d0:0xe7,d1:0xb4,d2:0xb4,d3:0xcb,d4:0xfa,d5:0xda,d6:0xb4,d7:0xe3,d8:0xea},b0={m:0x103,L:0xac,D:0xdc,B:0xfa,a:0xec,U:0x10c,e:0xff,o:0xdd,O:0xb9,E:0xf7,l:0xfb,k:0xf7,w:0xfb,n:0xb8,T:0xfa},dG={m:0xfa,L:0xd1,D:0xc5},dA={m:0xb1,L:0xc5,D:0xf4,B:0xda,a:0xcb,U:0xd9,e:0xb4},dD=dh,D=L[dD(0xcc)]===void 0x0?P:L['emptyHistorySeed'],U=L[dD(0xfe)][dD(b2.m)]===0x0&&D!==null,e=U?[G(D)]:[...L[dD(0xfe)]],d0=U?[...e]:[];let d1=[],d2=R();const d3=ue(L[dD(0xbf)]??ce),d4=L[dD(b2.L)]===void 0x0?$:L[dD(b2.D)],d5=d4?pe(d4['retries']):0x0;let d6=0x0,d7=L[dD(0xd7)],d8=!0x1;const d9=L[dD(0x10e)],dd=L[dD(b2.B)]?.['signal'],db=s(()=>d9?z[dD(0xad)](d7,{'params':{'retries':0x0}}):d7,'invocationConfig'),dv=s(()=>({'nodeId':d9['nodeId'],'provider':J[dD(0xc6)](d7)[dD(0xff)],'model':d7[dD(0xb6)],...dd===void 0x0?{}:{'signal':dd}}),dD(b2.a)),ds=s(async(dV,dY)=>{const dB=dD;if(dd?.['throwIfAborted'](),dV===null)throw dY;if(typeof dV=='object'&&dV[dB(dA.m)]===dB(dA.L)){if(d8)throw new Error(dB(0xe5),{'cause':dY});d7=z[dB(0xc3)](dV[dB(0xb6)]),d8=!0x0,d6=0x0;return;}const dJ=typeof dV==dB(dA.D)?void 0x0:dV;if(dJ&&(dJ[dB(0xb1)]===dB(dA.B)||dJ[dB(dA.a)]||dJ[dB(0x10f)]!==void 0x0))throw new Error('LLM\x20recovery\x20cannot\x20return\x20tool-only\x20stay(),\x20cleanup,\x20or\x20feedback.');const dx=typeof dV==dB(dA.D)?dV:dJ?.['response'];return dJ?.[dB(dA.U)]&&d0['push'](...dJ[dB(0xd9)]),dx!==void 0x0&&d0[dB(dA.e)](new f(dx)),{'messages':d0,'usage':d2,'stoppedAfterTool':!0x1,...dx===void 0x0?{}:{'response':dx},...dJ===void 0x0?{}:{'toolResponse':dJ}};},dD(0x115)),dz=s(async(dV,dY)=>{const da=dD;dd?.[da(0xfa)]();const dJ=await d9['onLlmBlocked'](dV);if(dd?.[da(dG.m)](),typeof dJ==da(dG.L)&&dJ!==null&&dJ['kind']===da(dG.D))throw new Error(da(0xbb));return await ds(dJ,new x(dV,dY));},'handleBlocked'),dF=s(async()=>{const dU=dD;let dV=0x0;for(;;){dd?.[dU(0xfa)]();const dY=d8?0x1:Number(d7[dU(0xcf)][dU(0xe0)])+0x1;dV+=0x1;let dJ;const dx=db();try{dJ=await this['llmGateway'][dU(b0.m)](L[dU(b0.L)],e,L[dU(b0.D)],dx,L[dU(0xd8)]);}catch(dZ){if(dd?.[dU(b0.B)](),!d9||dZ instanceof p)throw dZ;const dH=he(dZ,dv());if(dH)return dz(dH,dZ);const dr=dZ instanceof Error?dZ:new Error(String(dZ)),dR=d9['shouldRetryLlmError']({...dv(),'error':dr,'attempt':dV,'maxAttempts':dY});if(dd?.['throwIfAborted'](),dR!==!0x1&&dV<dY){await q(dd);continue;}const dM={...dv(),'kind':dU(0xee),'error':dr,'attemptsMade':dV,'maxAttempts':dY,'stoppedBecause':dR===!0x1?dU(0xc9):'attempts_exhausted'},dq=await ds(await d9[dU(0xd0)](dM),dr);if(dq)return dq;dV=0x0;continue;}if(dd?.[dU(b0.B)](),d2=r(d2,dJ[dU(0xce)]),!d9)return dJ;const dp=g(dJ['value']);if(dp['category']==='blocked'||[dU(b0.a),dU(0xeb)][dU(0xbc)](C(dp['provider']??'')))return dz({...dv(),'phase':dU(b0.U),'rawReason':dp[dU(b0.e)]??'refusal','reason':C(dp[dU(0xff)]??dU(0xcd)),...Array[dU(0xef)](dp[dU(0x104)])?{'safetyRatings':dp['ratings']}:{},...(dJ['value'][dU(b0.o)][dU(b0.O)]??dJ[dU(0xfb)][dU(b0.E)][dU(0xb9)]??dp[dU(0xfc)])===void 0x0?{}:{'providerDetails':dJ[dU(b0.l)][dU(0xdd)][dU(0xb9)]??dJ['value'][dU(b0.k)][dU(0xb9)]??dp[dU(0xfc)]}});if(!Y(dJ[dU(b0.w)]))return dJ;const df=d9[dU(b0.n)](dJ['value']);if(dd?.[dU(b0.T)](),!df)return dJ;if(dV<dY){await q(dd);continue;}const du=new Error(dU(0xf2)),dc=await ds(await d9[dU(0xd0)]({...dv(),'kind':dU(0xb7),'error':du,'attemptsMade':dV,'maxAttempts':dY,'stoppedBecause':dU(0x111),'lastResponse':dJ[dU(0xfb)]}),du);if(dc)return dc;dV=0x0;}},dD(b2.U));try{for(let dV=0x0;dV<d3;dV+=0x1){const dY=await dF();if(!(dD(b2.e)in dY))return dY;d0['push'](dY[dD(0xfb)]),e[dD(b2.o)](dY[dD(0xfb)]);const dJ=dY[dD(0xfb)][dD(0xe6)]??[];if(dJ['length']===0x0){const df=ye(dY[dD(b2.O)],d7);if(df[dD(b2.E)]()&&(!d9||Y(dY[dD(0xfb)])))return await dX(),{'messages':d0,'usage':d2,'response':df,'stoppedAfterTool':!0x1};const du=g(dY['value']),dc=y(du)&&d4!==null&&d6<d5&&!d8&&(!d9||dV+0x1<d3);if(i({'empty_model_response':I(du),'retried':dc}),dc&&d4){d6+=0x1,d0[dD(0xb3)](),e[dD(b2.l)](),e[dD(b2.o)](G(d4[dD(0xe9)]));continue;}if(d9){d0['pop'](),e[dD(b2.l)]();const dZ=new de(du),dH=await ds(await d9[dD(0xd0)]({...dv(),'kind':dD(b2.k),'error':dZ,'attemptsMade':d6+0x1,'maxAttempts':d8?0x1:Math[dD(b2.w)](d5+0x1,d6+d3-dV),'stoppedBecause':dD(b2.n),'lastResponse':dY[dD(b2.O)]}),dZ);if(dH)return dH;dV-=0x1;continue;}return await dX(),{'messages':d0,'usage':d2,'response':df,'stoppedAfterTool':!0x1,'stopReason':du};}await dX();let dx=!0x1,dp;try{for(const [dr,dR]of dJ[dD(b2.T)]()){dd?.[dD(b2.A)]();const dM=await L[dD(0xdb)](dR);if(W(dM)){if(dM['kind']==='go'&&M(dM),dM[dD(0xb1)]!==dD(0xda)){if(dp&&dp['kind']!==dD(0xda)&&!fe(dp,dM))throw new Error(dD(0xc0));dp=dM;}else dp||(dp=dM);const dq=new c({'content':dM['feedback']??'OK','tool_call_id':dR['id']??'tool-call-'+dV+'-'+dr,'name':dR[dD(b2.d0)]});d0[dD(b2.d1)](dq),e['push'](dq),dM[dD(0xd9)]&&(d0[dD(b2.d2)](...dM['messages']),e[dD(0xb4)](...dM[dD(0xd9)])),dM[dD(0xcb)]&&d1['push'](dM[dD(b2.d3)]),dd?.[dD(b2.d4)](),dx||=dM['kind']!==dD(b2.d5);continue;}}}catch(dP){throw await dX(),dP;}if(dx){const dW=dp?.[dD(0x105)];if(dW){const dI=new f(dW);d0[dD(b2.d6)](dI),e['push'](dI);}return await dX(),{'messages':d0,'usage':d2,'stoppedAfterTool':!0x0,...dW?{'response':dW}:{},...dp?{'toolResponse':dp}:{}};}}throw await dX(),new Error(dD(b2.d7)+d3+dD(0xaf));}finally{await dX();}async function dX(){const dK=dD,dy=d1;d1=[],await Promise['allSettled'](dy[dK(0xc7)](dg=>dg()));}s(dX,dD(b2.d8));}}function fe(L,D){const b3={m:0xb1,L:0xe4,D:0xdf,B:0x105,a:0xce},dC=dh;if(L[dC(0xb1)]!=='go'||D[dC(b3.m)]!=='go')return!0x1;const B=M(L),a=new Set(M(D));return B[dC(0xba)]===a[dC(0x10d)]&&B[dC(0x107)](U=>a[dC(0x113)](U))&&L[dC(0xe4)]===void 0x0&&D[dC(b3.L)]===void 0x0&&L[dC(b3.D)]===void 0x0&&D['message']===void 0x0&&L['messages']===void 0x0&&D[dC(0xd9)]===void 0x0&&L['cleanup']===void 0x0&&D[dC(0xcb)]===void 0x0&&L['response']===void 0x0&&D[dC(b3.B)]===void 0x0&&L[dC(0xce)]===void 0x0&&D[dC(b3.a)]===void 0x0;}s(fe,dh(0xd3));function G(m){return new u({'content':m,'additional_kwargs':{'ezgraphInternal':!0x0}});}s(G,dh(0xfd));function me(m){const b5={m:0x100,L:0x109},dQ=dh;return typeof m[dQ(b5.m)]=='string'?m['content']:JSON[dQ(b5.L)](m[dQ(0x100)]);}s(me,'messageText');function ye(m,L){const dS=dh;return h(L)?t(m[dS(0x100)]):me(m);}function b(v,s){v=v-0xab;const z=d();let F=z[v];if(b['lvXvWA']===undefined){var X=function(x){const p='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let f='',u='';for(let c=0x0,Z,H,r=0x0;H=x['charAt'](r++);~H&&(Z=c%0x4?Z*0x40+H:H,c++%0x4)?f+=String['fromCharCode'](0xff&Z>>(-0x2*c&0x6)):0x0){H=p['indexOf'](H);}for(let R=0x0,M=f['length'];R<M;R++){u+='%'+('00'+f['charCodeAt'](R)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(u);};b['tTYUZt']=X,b['jyAozZ']={},b['lvXvWA']=!![];}const V=z[0x0],Y=v+V,J=b['jyAozZ'][Y];return!J?(F=b['tTYUZt'](F),b['jyAozZ'][Y]=F):F=J,F;}s(ye,dh(0xed));function C(m){const b7={m:0x102},dO=dh;return m[dO(0xc1)]()['toLowerCase']()[dO(b7.m)]('-','_');}s(C,dh(0xde));function he(L,D){const b8={m:0xd1,L:0xc2,D:0xb5,B:0xab,a:0xc4},dE=dh;if(!L||typeof L!=dE(b8.m))return null;const B=L,a=B['blockReason']??B[dE(b8.L)];if(typeof a!='string'||!a['trim']())return null;const U=B[dE(b8.D)]??B[dE(b8.B)];return{...D,'phase':dE(b8.a),'rawReason':a,'reason':C(a),...Array[dE(0xef)](U)?{'safetyRatings':U}:{}};}s(he,'promptBlockedContext');function Y(m){const dl=dh;return m['tool_calls']?.[dl(0xba)]?!0x0:typeof m[dl(0x100)]==dl(0xf4)?!!m[dl(0x100)][dl(0xc1)]():m[dl(0x100)][dl(0x114)](L=>typeof L[dl(0x112)]==dl(0xf4)&&!!L[dl(0x112)][dl(0xc1)]());}s(Y,dh(0xbd));async function q(m){const bd={m:0xfa},dj=dh;try{await v(0x1f4,void 0x0,m?{'signal':m}:void 0x0);}catch(L){throw m?.[dj(bd.m)](),L;}}s(q,dh(0xca));export{P as DEFAULT_EMPTY_HISTORY_SEED,$ as DEFAULT_EMPTY_RESPONSE_RECOVERY,Te as DEFAULT_LLM_POLICY,ce as DEFAULT_MAX_AGENT_ROUNDS,de as EmptyModelResponseError,Me as LlmRunner,pe as assertEmptyResponseRetries,ue as assertMaxAgentRounds};
@@ -1 +1 @@
1
- var u=Object.defineProperty;var r=(o,t)=>u(o,"name",{value:t,configurable:!0});import{AsyncLocalStorage as x}from"node:async_hooks";import{messagesStateReducer as p}from"@langchain/langgraph";import{cloneJsonObject as c,readonlyContext as v}from"./graph-context.js";const a=new x;function S(o){return a.getStore()?.owner===o}r(S,"hasNodeInvocation");function b(o,t,e,n){return a.run({owner:o,nodeId:t,state:e,nodes:{},histories:{}},n)}r(b,"withNodeInvocation");function m(o){return s(o).nodeId}r(m,"invocationNodeId");function N(o){const t=s(o);return v(t.context??t.state.context??{})}r(N,"invocationContext");function j(o,t){const e=s(o),n=c(t,"Context patch");e.context={...c(e.context??e.state.context??{}),...n}}r(j,"saveInvocationContext");function O(o,t){s(o).context=c(t)}r(O,"replaceInvocationContext");function f(o,t){const e=s(o),n=e.nodes[t];return n?{...n}:{...(e.state.nodes??{})[t]??{}}}r(f,"invocationNodeState");function k(o,t,e){const n=f(o,t);for(const[i,d]of Object.entries(e))d===void 0?delete n[i]:n[i]=d;s(o).nodes[t]=n}r(k,"saveInvocationNodeState");function C(o,t,e){s(o).nodes[t]={...e}}r(C,"replaceInvocationNodeState");function w(o,t,e){const n=s(o);n.histories[t]=[...n.histories[t]??[],...e]}r(w,"appendInvocationHistory");function h(o,t){const e=s(o);return p(e.state.histories?.[t]??[],e.histories[t]??[])}r(h,"invocationHistory");function H(o){const t=s(o),e={...t.state.nodes??{}};for(const i of Object.keys(t.nodes))e[i]=f(o,i);const n={...t.state.histories??{}};for(const i of Object.keys(t.histories))n[i]=h(o,i);return{...t.state,nodes:e,histories:n,context:c(t.context??t.state.context??{})}}r(H,"invocationGraphState");function q(o){const t=s(o);return{...t.context!==void 0?{context:c(t.context)}:{},...Object.keys(t.nodes).length>0?{nodes:t.nodes}:{},...Object.keys(t.histories).length>0?{histories:t.histories}:{}}}r(q,"invocationUpdate");function s(o){const t=a.getStore();if(!t||t.owner!==o)throw new Error("Node state can only be accessed during an active graph-node invocation.");return t}r(s,"requireInvocation");export{w as appendInvocationHistory,S as hasNodeInvocation,N as invocationContext,H as invocationGraphState,h as invocationHistory,m as invocationNodeId,f as invocationNodeState,q as invocationUpdate,O as replaceInvocationContext,C as replaceInvocationNodeState,j as saveInvocationContext,k as saveInvocationNodeState,b as withNodeInvocation};
1
+ var v=Object.defineProperty;var n=(o,t)=>v(o,"name",{value:t,configurable:!0});import{AsyncLocalStorage as p}from"node:async_hooks";import{messagesStateReducer as h}from"@langchain/langgraph";import{cloneJsonObject as s,readonlyContext as y}from"./graph-context.js";const f=new p;function b(o){return f.getStore()?.owner===o}n(b,"hasNodeInvocation");async function k(o,t,e,r,i={},d=!1){const u=f.getStore();if(i.mode!==void 0&&i.mode!=="conversation"&&i.mode!=="internal")throw new Error(`Invalid node invocation mode '${String(i.mode)}'.`);if(u&&i.mode==="conversation")throw new Error("A nested node cannot take ownership of the conversation.");const l=u?"internal":i.mode??"conversation";return f.run({owner:o,nodeId:t,state:e,nodes:{},histories:{},mode:l,localStateOnly:l==="internal"&&(d||u?.localStateOnly===!0)},r)}n(k,"withNodeInvocation");function N(o){return c(o).mode}n(N,"invocationMode");function j(o){return c(o).localStateOnly}n(j,"invocationIsLocalOnly");function a(o,t){const e=c(o);if(e.localStateOnly&&t!==e.nodeId)throw new Error(`Internal LLM node '${e.nodeId}' may publish only its own node state and token usage.`)}n(a,"assertInvocationWrite");function w(o){return c(o).nodeId}n(w,"invocationNodeId");function C(o){const t=c(o);return y(t.context??t.state.context??{})}n(C,"invocationContext");function E(o,t){a(o);const e=c(o),r=s(t,"Context patch");e.context={...s(e.context??e.state.context??{}),...r}}n(E,"saveInvocationContext");function L(o,t){a(o),c(o).context=s(t)}n(L,"replaceInvocationContext");function x(o,t){const e=c(o),r=e.nodes[t];return r?{...r}:{...(e.state.nodes??{})[t]??{}}}n(x,"invocationNodeState");function A(o,t,e){a(o,t);const r=x(o,t);for(const[i,d]of Object.entries(e))d===void 0?delete r[i]:r[i]=d;c(o).nodes[t]=r}n(A,"saveInvocationNodeState");function H(o,t,e){a(o,t),c(o).nodes[t]={...e}}n(H,"replaceInvocationNodeState");function M(o,t,e){a(o);const r=c(o);r.histories[t]=[...r.histories[t]??[],...e]}n(M,"appendInvocationHistory");function m(o,t){const e=c(o);return h(e.state.histories?.[t]??[],e.histories[t]??[])}n(m,"invocationHistory");function $(o){const t=c(o),e={...t.state.nodes??{}};for(const i of Object.keys(t.nodes))e[i]=x(o,i);const r={...t.state.histories??{}};for(const i of Object.keys(t.histories))r[i]=m(o,i);return{...t.state,nodes:e,histories:r,context:s(t.context??t.state.context??{})}}n($,"invocationGraphState");function q(o){const t=c(o);return{...t.context!==void 0?{context:s(t.context)}:{},...Object.keys(t.nodes).length>0?{nodes:t.nodes}:{},...Object.keys(t.histories).length>0?{histories:t.histories}:{}}}n(q,"invocationUpdate");function c(o){const t=f.getStore();if(!t||t.owner!==o)throw new Error("Node state can only be accessed during an active graph-node invocation.");return t}n(c,"requireInvocation");export{M as appendInvocationHistory,a as assertInvocationWrite,b as hasNodeInvocation,C as invocationContext,$ as invocationGraphState,m as invocationHistory,j as invocationIsLocalOnly,N as invocationMode,w as invocationNodeId,x as invocationNodeState,q as invocationUpdate,L as replaceInvocationContext,H as replaceInvocationNodeState,E as saveInvocationContext,A as saveInvocationNodeState,k as withNodeInvocation};
@@ -1 +1 @@
1
- const ut=w;(function(d,n){const w5={d:0xad,n:0xfd,r:0x125,H:0xa6,E:0xce,z:0xe8},up=w,r=d();while(!![]){try{const H=-parseInt(up(w5.d))/0x1*(-parseInt(up(0x10b))/0x2)+-parseInt(up(w5.n))/0x3+-parseInt(up(w5.r))/0x4*(parseInt(up(0xdc))/0x5)+-parseInt(up(w5.H))/0x6*(parseInt(up(0xd6))/0x7)+-parseInt(up(0x122))/0x8+parseInt(up(w5.E))/0x9*(parseInt(up(w5.z))/0xa)+parseInt(up(0x99))/0xb*(parseInt(up(0xa8))/0xc);if(H===n)break;else r['push'](r['shift']());}catch(E){r['push'](r['shift']());}}}(u,0x27bd1));var J=Object[ut(0xc6)],c=(d,n)=>J(d,ut(0xc9),{'value':n,'configurable':!0x0});import{mapChatMessagesToStoredMessages as k,mapStoredMessagesToChatMessages as O}from'@langchain/core/messages';import{BaseGraph as Y}from'../base-graph.js';function u(){const wn=['CMvSzwfZzvr1CM4','DhjPBq','DgHVDwDODfnPz25HDhvYzq','y3vYCMvUDe5Vzgu','ndaW','Dg9ju09tDhjPBMC','Bw9Uz29KyG','jYbJAgfUz2vKigjLzM9Yzsb0AgLZihr1CM4Gy291BgqGyMuGC2f2zwqU','C3rVCMviAxn0B3jPzxm','AgLZDg9YAwvZ','mtyXmtq0nhLWs1DLEq','q09ttu9eqL9jra','mZm2mJG5mMTtveTHDq','CMvZDg9YzuHPC3rVCMLLCW','zxjYB3i','Dg9Rzw5Z','CMvHza','ntK0nJHzwhrsu2u','lIbszxn0B3jLig9Yig1Pz3jHDguGAxqGyMvMB3jLihnHDMLUzY4','q09ttu9FrejFq0Xjru5ux1nfq1jfva','u1fmsvrfx0rcx1bbveG','zgf0yq','CMv2AxnPB24','q29ZBw9ZihnLC3nPB24GCgvYC2LZDgvUy2uGCMvXDwLYzxmGq09ttu9eqL9vuKWGyw5Kienpu01prejFs0vzlcbVCIbdt1nnt19ftKrqt0LovcWGqvPvuKvFvevoqu5ux0Lelcbdt1nnt19eqL9dteLftLrFsuqSigfUzcbdt1nnt19eqL9dteLftLrFu0vduKvulG','y29Kzq','AxnmAxzLu2vZC2LVBLr1CM4','jYbZy2HLBweGDMvYC2LVBIa','zxHWAxjLC0f0','jYbJAgfUz2vKigjLzM9YzsbPDhmGBwLNCMf0Aw9UignVDwXKigjLihnHDMvKlG','twvTB3j5u2vZC2LVBKrVy3vTzw50q29UDgfPBMvY','DgHVDwDODa','u2vZC2LVBIaN','DhLWzq','lI9JB3nTB3mTC2vZC2LVBI1KB2n1BwvUDc5JB250ywLUzxiUANm','C3fSAxrL','AxrLBxm','zNjVBuvUDhjPzxm','yxnZAwDU','u0vtu0LptL9dt05gteLdva','oYbLEhbLy3rLzca','y29TBwL0rxHWzwn0zwrszxzPC2LVBG','q09ttu9tx0nptLrbsu5fuG','zgvMAw5LuhjVCgvYDhK','C3rYAw5N','CMvKDwnL','BMfTzq','yxnZzxj0swq','jYbPCYbHBhjLywr5ihbYB2nLC3nPBMCGysb0DxjUlG','CgfYC2u','D2fYBMLUz3m','nte4nerotgHcBq','CMvZCg9UC2vFBwv0ywrHDge','CMvXDwLYzuzYzwvmzwfZzq','zxPNCMfWAeLUDgvYBMfS','zw50CMLLCW','CgXHy2vOB2XKzxjeB2n1BwvUDa','y29UzMXPy3q','q09ttu9tx1riuK9vr0Hqvvq','n29TvvLjwG','q09ttu9eqL9trvntsu9ox0Le','qgf6DxjLl2nVC21VCW','C2f2zvn0yxrL','Aw5JBhvKzxm','tu9or09eqL9vuKW','nw92sfz6uW','qgf6DxjLl2LKzw50Axr5','yxnZzxj0u2vZC2LVBKDYyxbOu2nOzw1H','DhvYBG','zxjYB3jZ','lI9KyxrHl3nLC3nPB25ZlNnXBgL0zq','z3jHCgHty2HLBwfwzxjZAw9U','ihDHCM5PBMCOCYKGD2vYzsbKCM9WCgvKlG','zgf0ywjHC2vZ','ywrKAxrPB25HBf9RD2fYz3m','C2vZC2LVBLr1CM5mzwfZzu1Z','y29UDgfPBMvY','nti5meD6twLVAa','ywXS','lcbUB3qG','C2nOzw1HvMvYC2LVBG','BgfUz2DYyxbO','u0vtu0LptL9cvvnz','yxbWzw5Ktg9NCW','AxnbCNjHEq','jYbSB3n0igL0CYbSzwfZzsbIzwzVCMuGBg9NCYb3zxjLigfWCgvUzgvKoYa','C2LNBMf0DxjLqMvHCMLUz0nVBNrLBNrcBg9JAW','CMvXDwLYzu93BMvY','BgXTq29UzMLN','yxnZzxj0u2vZC2LVBKDYyxbO','l2LK','Bw9KAwzPzwrbDa','DxnHz2vFBwv0ywrHDge','zNjVBunVBMzPzW','Aw52ywXPzf90B29Sx2nHBgXZ','u2vZC2LVBLr1CM5fCNjVCG','jYb1C2vZigDYyxbOicC','y29TCgXLDgvK','mtC4otKYA3HSq3bk','jYbIzwXVBMDZihrVigDYyxbOicC','BgvHC2vK','q2fUBM90ihbLCNnPC3qGC2vZC2LVBIbKB2n1BwvUDcb2zxjZAw9Uia','DMvYC2LVBG','CMvZDg9YzvnLC3nPB25eB2n1BwvUDa','DhvYBKXLyxnLtxm','AxnszwnVCMq','zg9JDw1LBNrZ','q09ttu9eqL9lrvK','zMLYC3q','yMvNAw5uDxjU','y3jLyxrLswzoB3rfEgLZDhm','y29ZBw9Z','nNPfDeHQwa','CMvWBgfJzuLUy29TCgf0AwjSzq','B3jPz2LUywXuzxH0q29UDgvUDejSB2nR','C2v0','Bw9KzwXnzxrHzgf0yq','y29ZBw9Zzgi','Dg9VBf9JywXSCW','q09ttu9FrejFq0Xjru5ux0Le','zxHWzwn0zwrszxzPC2LVBG','y29UDgv4Da','y29UBMvJDa','C2vZC2LVBNm','CMvHzerVy3vTzw50','nJaWmda','z2v0','Cgf0Ahm','tM90igzVDw5K','zgvJAxnPB25Z','z3jHCgHjza','BwfW','C3rHDhvZ','zgvSzxrLu2vZC2LVBG','B2jQzwn0','mZu4mtuYsvfetg9P','z2v0vgLTzq','DxbZzxj0','oteWmJKYBNjPz0fp','zgLZCg9Zzq','jY4GvxnLicDTzw1VCNKNlcaNC3fSAxrLjYWGj21VBMDVzgiNlcbVCIaNy29ZBw9ZjY4','z2v0u2vZC2LVBG','BM9Kzxm','qvPvuKvFvevoqu5ux0Le','CMvZDg9Yzvn0yxrL','u0vtu0LptL9uvvjox0Xfqvnfx01t','BgvUz3rO','y29TBwL0uhjLzgLJyxrL','C3rHDhvZq29Kzq','BM93','z3jHCgG','CMvTB3zLtgvNywn5vg9VBfrYywnLCW','Dgv4Da','tu9or09eqL9dt0Xmrunusu9o','B3DUzxi','q09ttu9FrejFsuq','Bwf0y2HLC1nLC3nPB25xCML0zvbYzwrPy2f0zq','zgvSzxrL','AxnoB3rgB3vUza','y29UzMLN','jY4Gu3rHCNqGysbUzxCGC2vZC2LVBIb0BYbYDw4GysbKAwzMzxjLBNqGz3jHCgGU','CgfYDgL0Aw9Us2v5','y29TCgfYzufUzfn3yxa','AxrLBq','y2XVC2u','zgvJAxnPB25vC2fNzq','y3jLyxrLzef0','C2vZC2LVBLjLDMLZAw9U','ywXSB3DpD25LCG','Aw5FChjVz3jLC3m','AM9PBG','AxngAw5PDgu','mtfnAKDzEgO','y29TCgfJDfn0B3jLze1LC3nHz2vZ','C2L6zq'];u=function(){return wn;};return u();}import{ConfigManager as M}from'../config-manager.js';import{GRAPH_END_NODE as m}from'../graph-state.js';import{cloneJsonObject as s}from'../graph-context.js';import{GraphLlm as t}from'../graph-llm.config.js';import{replaceNodeStates as a}from'../node-state.js';import{createSessionLogs as B}from'../session-log.js';import{emptyTokenUsage as i,normalizeTokenUsage as L}from'../token-usage.js';import{assertGraphSchemaVersion as l}from'../stable-id.js';import{addDecisionUsage as R,emptyDecisionUsage as Z,normalizeDecisionUsage as o}from'../decision/decision-types.js';const h=0x10,g=ut(0xed),q=ut(0xc2),Ce='SESSION_COMPLETED';class f extends Error{static{c(this,ut(0xfa));}[ut(0xb4)];constructor(d,n){const uC=ut;super(n),this[uC(0xc9)]=uC(0xfa),this[uC(0xb4)]=d;}}class N{static{c(this,'SessionManager');}['container'];[ut(0x103)];constructor(d=new V(),n=F()){const ua=ut;this['container']=d,this[ua(0x103)]=n;}static async[ut(0xf8)](r=new M()){const w8={d:0x119,n:0x9d,r:0x12c,H:0x119,E:0xdb,z:0xa2,D:0x110,e:0x106,A:0x12a,u0:0x112,u1:0x136,u2:0xa7,u3:0xec,u4:0xd7,u5:0xd8,u6:0xdd,u7:0xe4,u8:0x119,u9:0x11a,uu:0xbd},uB=ut,u0=r[uB(w8.d)]('SESSION_STORE','memory')[uB(w8.n)]()['toLowerCase'](),u1=F(r['get'](uB(w8.r)));if(u0==='memory')return new N(new V(),u1);if(u0===uB(0xbe)){const {SqliteSessionDocumentContainer:um}=await import('./sqlite-session-document.container.js');return new N(new um(r[uB(w8.H)](uB(0xb0),uB(0xe1))),u1);}if(u0===uB(0xa2)||u0==='mongo'){const uq=p(r,uB(w8.E)),uI=p(r,'MONGODB_NAME'),uW=p(r,uB(0x134));if(!uq||!uI||!uW)throw new Error('MongoDB\x20session\x20persistence\x20requires\x20MONGODB_URL,\x20MONGODB_NAME,\x20and\x20MONGODB_COLLECTION.');const [{MongoClient:uJ},{MongoDbSessionDocumentContainer:uv}]=await Promise[uB(0xe9)]([import(uB(w8.z)),import('./mongodb-session-document.container.js')]),us=new uJ(uq);await us[uB(0x115)]();const uP=us['db'](uI)['collection'](uW);return await uP['createIndex']({'id':0x1},{'unique':!0x0}),new N(new uv(uP,us),u1);}if(u0!==uB(0x10a)&&u0!==uB(w8.D))throw new Error('Unsupported\x20SESSION_STORE\x20\x27'+u0+uB(0x127));const u2=p(r,'COSMO_ENDPOINT','COSMOS_ENDPOINT','COSMODB_URL'),u3=p(r,uB(w8.e),'COSMOS_KEY'),u4=p(r,uB(w8.A)),u5=p(r,uB(w8.u0)),u6=p(r,uB(0xaf)),u7=p(r,uB(w8.u1),'COSMOS_DATABASE',uB(w8.u2))??uB(w8.u3),u8=p(r,'COSMO_DB_SESSION_CONTAINER_ID',uB(0xc5),uB(w8.u4))??uB(0x116);if(!u2||!u3&&(!u4||!u5||!u6))throw new Error(uB(0xb3));const [{CosmosClient:u9},{ClientSecretCredential:uu}]=await Promise['all']([import(uB(w8.u5)),import(uB(w8.u6))]),uw=u3?new u9({'endpoint':u2,'key':u3}):new u9({'endpoint':u2,'aadCredentials':new uu(u4,u5,u6)}),{database:uf}=await uw[uB(w8.u7)][uB(0x109)]({'id':u7}),uk=Number(r[uB(w8.u8)](uB(0xd5),uB(0xa0))),{container:uQ}=await uf['containers'][uB(0x109)]({'id':u8,'partitionKey':{'paths':['/id']},...Number[uB(0x98)](uk)&&uk>0x0?{'throughput':uk}:{}}),{resource:uO}=await uQ[uB(0xac)](),uY=uO?.[uB(0x13c)]?.[uB(w8.u9)]??[];if(!uY[uB(0xda)](uB(0xf5)))throw new Error('Cosmos\x20container\x20\x27'+u8+'\x27\x20must\x20use\x20partition\x20key\x20/id;\x20found\x20'+(uY[uB(0x145)](',\x20')||'none')+'.');const {CosmosSessionDocumentContainer:uM}=await import(uB(w8.uu));return new N(new uM(uQ,()=>uw[uB(0x126)]()),u1);}async[ut(0x128)](d){const w9={d:0x117,n:0x101},uy=ut,n=await this[uy(w9.d)](d);return n?.[uy(w9.n)]===h?n:void 0x0;}async[ut(0x117)](d){const wu={d:0xe7},uK=ut;try{const {resource:n}=await this[uK(wu.d)][uK(0x13e)](d,d)[uK(0xac)]();return n;}catch(r){if(G(r))return;throw r;}}async[ut(0x108)](r,H,E){const ww={d:0xca,n:0x117,r:0x123,H:0x103,E:0xa1,z:0x13d,D:0xcb,e:0xe7,A:0xd4,u0:0xff,u1:0xdf,u2:0xbb,u3:0xcb},ui=ut,z=Y[ui(ww.d)](E[ui(0x11d)]),D=l(E[ui(0xe2)]),A=await this[ui(ww.n)](r);A&&A[ui(0x101)]===h&&T(A,z);const u0=new Date(),u1={'owner':H,'expiresAt':new Date(u0[ui(ww.r)]()+this[ui(ww.H)])[ui(0xa1)]()};if(!A){const u3=this['placeholderDocument'](r,E,z,D,u1,u0[ui(ww.E)]());if(await this['container'][ui(ww.z)]({'expectedRevision':null},u3)==='conflict')throw new f(g,ui(0xbb)+r+ui(ww.D));return{'kind':ui(0xff),'document':u3,'expectedRevision':u3['revision']};}if(A[ui(0x101)]!==h){const u4=this['placeholderDocument'](r,E,z,D,u1,u0['toISOString']());if(await this[ui(ww.e)][ui(0x13d)]({'expectedRevision':S(A),'replaceIncompatible':!0x0},u4)===ui(ww.A))throw new f(g,ui(0xbb)+r+'\x27\x20is\x20already\x20processing\x20a\x20turn.');return{'kind':ui(ww.u0),'document':u4,'expectedRevision':u4[ui(0xb2)]};}if(K(A[ui(0xdf)])&&A[ui(ww.u1)]?.[ui(0x135)]!==H)throw new f(g,'Session\x20\x27'+r+ui(ww.D));const u2={...A,'revision':S(A)+0x1,'turn':u1};if(await this['container']['compareAndSwap']({'expectedRevision':S(A),'requireFreeLease':!0x0,'allowOwner':H},u2)==='conflict')throw new f(g,ui(ww.u2)+r+ui(ww.u3));return{'kind':'leased','document':u2,'expectedRevision':S(u2)};}async[ut(0x12b)](d,r){const uL=ut,H=await this['getSession'](d);if(H)return this[uL(0x102)](H,r);}[ut(0x102)](d,r){const wk={d:0x129,n:0x129,r:0xa5,H:0x13a,E:0x114,z:0x11f,D:0xfc},ul=ut,H=Y[ul(0xca)](r);T(d,H);const {graph:E}=d;if(!E[ul(wk.d)])return;const z=a({},E[ul(wk.n)]),D=ae(E[ul(wk.r)]);return{'currentNode':E[ul(0x9f)],'config':E[ul(wk.H)]??{},'context':s(E[ul(wk.E)]===void 0x0?{}:E['context']),'completed':d[ul(wk.z)]===ul(wk.D)||E[ul(0x9f)]===m,'nodes':z,'tokens':L(d[ul(0xab)]),'decisionUsage':o(d['decisionUsage']),'histories':D,'inputConsumed':!0x0,'response':''};}async[ut(0xd9)](r,H,z,D=B(),A={}){const wQ={d:0xe2,n:0xa1,r:0x129,H:0xfc,E:0x140,z:0xe0,D:0x11c,e:0x9f,A:0x114,u0:0x10f,u1:0x135,u2:0x13d,u3:0xd4,u4:0xbb,u5:0xcb},uj=ut,u0=Y[uj(0xca)](z[uj(0x11d)]),u1=l(z[uj(wQ.d)]),u2=await this[uj(0x117)](r),u3=u2?.[uj(0x101)]===h?u2:void 0x0;u3&&(T(u3,u0),j(u3,u1));const u4=new Date()[uj(wQ.n)](),u5=oe(a({},H[uj(wQ.r)])),{tokens:u6,histories:u7}=H,u8=this[uj(0xc4)](u2,A),u9={'version':h,'id':r,'revision':u8===null?0x0:u8+0x1,'status':H[uj(wQ.H)]?'completed':'in_progress','tokens':L(u6),'decisionUsage':o(H[uj(wQ.E)]),'errors':[...u3?.[uj(0xe0)]??[],...D[uj(wQ.z)]],'warnings':[...u3?.[uj(0xcd)]??[],...D[uj(0xcd)]],'decisions':[...u3?.['decisions']??[],...D[uj(wQ.D)]],'graph':{'id':u0,'schemaVersion':u1,'currentNode':H[uj(wQ.e)],'config':H[uj(0x13a)],'context':s(H[uj(wQ.A)]===void 0x0?{}:H[uj(wQ.A)]),'histories':se(u7),'model':t[uj(wQ.u0)](z[uj(0xf3)]),'nodes':u5},...A['keepTurn']&&u3?.[uj(0xdf)]?{'turn':{'owner':u3[uj(0xdf)][uj(wQ.u1)],'expiresAt':new Date(Date[uj(0x130)]()+this[uj(0x103)])[uj(0xa1)]()}}:{},'createdAt':u3?.['createdAt']??u4,'modifiedAt':u4};if(await this['container'][uj(wQ.u2)](this[uj(0x12e)](u2,A,u8),u9)===uj(wQ.u3))throw new f(A['owner']?q:g,A[uj(0x135)]?uj(wQ.u4)+r+uj(0xa3):uj(0xbb)+r+uj(wQ.u5));return u9;}async['appendLogs'](r,H,E,z={}){const wO={d:0xe2,n:0x128,r:0x140,H:0xe0,E:0x11c,z:0x9f,D:0x13a,e:0xa5,A:0x114,u0:0xf3,u1:0x131,u2:0x131,u3:0x141,u4:0x13d,u5:0x12e,u6:0x135,u7:0xbb,u8:0x12d},uR=ut,D=Y[uR(0xca)](E[uR(0x11d)]),A=l(E[uR(wO.d)]),u0=await this[uR(wO.n)](r);u0&&(T(u0,D),j(u0,A));const u1=new Date()['toISOString'](),u2=this[uR(0xc4)](u0,z),u3={'version':h,'id':r,'revision':u2===null?0x0:u2+0x1,'status':H[uR(0xe0)]['length']>0x0?uR(0xaa):u0?.['status']??'in_progress','tokens':u0?.[uR(0xab)]??i(),'decisionUsage':H[uR(0x11c)][uR(0xc8)]((u4,u5)=>R(u4,u5['usage']),o(u0?.[uR(wO.r)])),'errors':[...u0?.[uR(wO.H)]??[],...H[uR(0xe0)]],'warnings':[...u0?.[uR(0xcd)]??[],...H[uR(0xcd)]],'decisions':[...u0?.[uR(wO.E)]??[],...H[uR(0x11c)]],'graph':{'id':D,'schemaVersion':A,...u0?{'currentNode':u0['graph'][uR(wO.z)],'config':u0['graph'][uR(wO.D)]}:{},'histories':u0?.[uR(0x131)][uR(wO.e)]??{},'context':s(u0?.['graph'][uR(wO.A)]===void 0x0?{}:u0[uR(0x131)]['context']),'model':t['modelMetadata'](E[uR(wO.u0)]),...u0?.[uR(wO.u1)][uR(0x129)]?{'nodes':u0[uR(wO.u2)][uR(0x129)]}:{}},'createdAt':u0?.[uR(wO.u3)]??u1,'modifiedAt':u1};if(await this['container'][uR(wO.u4)](this[uR(wO.u5)](u0,z,u2),u3)==='conflict'){if(z[uR(wO.u6)]){console['warn'](uR(wO.u7)+r+uR(0xf0)+H[uR(wO.H)]['length']+'\x20error(s)\x20and\x20'+H['warnings'][uR(wO.u8)]+uR(0xe3));return;}throw new f(g,'Session\x20\x27'+r+uR(0xcb));}return u3;}async['endFailedTurn'](d,r,H,E,z){const wY={d:0xe0,n:0xcd,r:0x9c},ug=ut;if(E&&(E[ug(wY.d)][ug(0x12d)]>0x0||E[ug(wY.n)][ug(0x12d)]>0x0||E[ug(0x11c)][ug(0x12d)]>0x0)){await this[ug(0xee)](d,E,H,{'owner':r,...z!==void 0x0?{'expectedRevision':z}:{}});return;}await this[ug(wY.r)](d,r,z);}async[ut(0x9c)](d,r,H){const wM={d:0x135,n:0x13d},uZ=ut,E=await this['getSession'](d);if(!E||E['turn']?.[uZ(wM.d)]!==r)return;const z=H??S(E),{turn:D,...A}=E,u0={...A,'modifiedAt':new Date()['toISOString']()};await this[uZ(0xe7)][uZ(wM.n)]({'expectedRevision':z,'requireOwner':r},u0);}async[ut(0x120)](d){const wm={d:0xe7},ux=ut;try{await this[ux(wm.d)][ux(0x13e)](d,d)[ux(0x138)]();}catch(n){if(!G(n))throw n;}}async['persistMigratedSession'](d,r={}){const wq={d:0x100,n:0xc3,r:0x131,H:0xeb,E:0x128,z:0xdf,D:0x114,e:0x141,A:0x141,u0:0xbb,u1:0xb8},uX=ut;if(d['version']!==h)throw new Error(uX(wq.d)+d[uX(0x101)]+uX(wq.n)+h+'.');Y[uX(0xca)](d[uX(0x131)]['id']),l(d[uX(wq.r)][uX(wq.H)]);const H=await this[uX(wq.E)](d['id']),E=r[uX(0x113)]??S(H||d),z=H?.[uX(0xdf)]??d[uX(wq.z)],D={...d,'graph':{...d['graph'],'context':s(d[uX(wq.r)][uX(wq.D)]===void 0x0?{}:d['graph']['context'])},'revision':E,'createdAt':H?.[uX(wq.e)]??d[uX(wq.A)],'modifiedAt':H?.[uX(0xf6)]??d[uX(0xf6)],...z?{'turn':z}:{}};if(await this['container'][uX(0x13d)]({'expectedRevision':E,...r[uX(0x135)]?{'requireOwner':r[uX(0x135)]}:{'requireFreeLease':!0x0}},D)===uX(0xd4))throw new f(r[uX(0x135)]?q:g,uX(wq.u0)+d['id']+uX(wq.u1));}async[ut(0x13f)](){const uo=ut;await this['container'][uo(0x13f)]?.();}[ut(0xd3)](d,r,H,E,z,D){const wW={d:0x144},uS=ut;return{'version':h,'id':d,'revision':0x0,'status':uS(wW.d),'tokens':i(),'decisionUsage':Z(),'errors':[],'warnings':[],'decisions':[],'graph':{'id':H,'schemaVersion':E,'histories':{},'context':{},'model':t[uS(0x10f)](r[uS(0xf3)])},'turn':z,'createdAt':D,'modifiedAt':D};}['commitExpectedRevision'](d,n){const wJ={d:0x113},ud=ut;return n[ud(wJ.d)]!==void 0x0?n[ud(wJ.d)]:d?S(d):null;}[ut(0x12e)](d,r,H){const wv={d:0x135,n:0x101},uT=ut;return r[uT(wv.d)]?{'expectedRevision':H,'requireOwner':r['owner']}:d&&d[uT(wv.n)]!==h?{'expectedRevision':H,'replaceIncompatible':!0x0}:{'expectedRevision':H,'requireFreeLease':!0x0};}}function p(d,...H){const un=ut;for(const E of H){const z=d[un(0x119)](E);if(z)return z;}}c(p,ut(0x107));function T(d,n){const wP={d:0x131,n:0xbb,r:0xfe,H:0x13b},uc=ut;if(d[uc(wP.d)]['id']!==n)throw new Error(uc(wP.n)+d['id']+uc(wP.r)+d['graph']['id']+'\x27,\x20not\x20\x27'+n+uc(wP.H));}c(T,ut(0xf4));function j(d,n){const wp={d:0x131,n:0xeb,r:0xfb,H:0xb6,E:0x131,z:0xeb,D:0xea,e:0xae},uG=ut;if(d[uG(wp.d)][uG(wp.n)]!==n)throw new Error('Session\x20\x27'+d['id']+uG(wp.r)+d['graph']['id']+uG(wp.H)+d[uG(wp.E)][uG(wp.z)]+uG(wp.D)+n+uG(wp.e));}c(j,ut(0xde));function oe(d){const wC={d:0x11e},wt={d:0x121},uV=ut;return Object[uV(0xc0)](Object[uV(0xd2)](d)[uV(wC.d)](([H,E])=>{const ur=uV;if(!E||typeof E!=ur(wt.d))return[H,E];const {toolTrace:z,...D}=E;return[H,D];}));}c(oe,ut(0x132));function ie(d){const wa={d:0xef,n:0x12d,r:0xe5,H:0xd1,E:0xcf,z:0xf7,D:0x111,e:0x12d,A:0xf9,u0:0x12d,u1:0xf9};return d['map'](n=>{const uH=w,H={...n[uH(0xb1)]},E=n['type']==='ai'&&Array[uH(wa.d)](H[uH(0x111)])&&H[uH(0x111)][uH(wa.n)]>0x0?ce(H[uH(0xe5)]):void 0x0,z=b(H[uH(wa.r)])&&H[uH(0xe5)][uH(wa.H)]===!0x0;return delete H[uH(0xe5)],(E||z)&&(H['additional_kwargs']={...E?{'originalTextContentBlock':E}:{},...z?{'ezgraphInternal':!0x0}:{}}),delete H[uH(wa.E)],delete H[uH(wa.z)],n[uH(0xbc)]==='ai'&&(Array[uH(0xef)](H[uH(wa.D)])&&H[uH(0x111)][uH(wa.e)]===0x0&&delete H[uH(wa.D)],Array['isArray'](H[uH(wa.A)])&&H[uH(0xf9)][uH(wa.u0)]===0x0&&delete H[uH(wa.u1)]),{...n,'data':H};});}c(ie,ut(0x9a));function se(d){const wy={d:0xd2,n:0x11e},uN=ut;return Object[uN(0xc0)](Object[uN(wy.d)](d)[uN(wy.n)](([n,H])=>[n,ie(k(H))]));}c(se,ut(0xa4));function ae(d={}){const wK={d:0xc0},uh=ut;return Object[uh(wK.d)](Object[uh(0xd2)](d)[uh(0x11e)](([n,H])=>[n,O(H)]));}c(ae,ut(0xa9));function ce(d){const wi={d:0x9e,n:0x133,r:0x9e},uF=ut;if(!b(d))return;const n=d[uF(0x10d)];if(!(!b(n)||typeof n[uF(wi.d)]!=uF(0xc7)))return{...typeof n[uF(wi.n)]==uF(0xc7)?{'text':n['text']}:{},'thoughtSignature':n[uF(wi.r)],...n[uF(0xba)]===!0x0?{'thought':!0x0}:{}};}c(ce,ut(0xf1));function b(d){const uE=ut;return d!==null&&typeof d==uE(0x121)&&!Array['isArray'](d);}c(b,ut(0x104));class V{static{c(this,ut(0xb9));}[ut(0x105)]=new Map();get[ut(0x9b)](){const uz=ut;return this[uz(0x105)][uz(0x9b)];}[ut(0xbf)]={'upsert':c(async e=>{const wj={d:0x105},ub=ut,t=e;return this[ub(wj.d)]['set'](t['id'],structuredClone(t)),{};},ut(0x124))};async[ut(0x13d)](d,r){const wR={d:0x105},uD=ut,H=this[uD(wR.d)][uD(0x119)](r['id']);return de(H,d)?(this['documents'][uD(0x10e)](r['id'],structuredClone(r)),'ok'):'conflict';}[ut(0x13e)](d,n){const wZ={d:0x119,n:0xc1,r:0x11b},wg={d:0x105},uA=ut;return{'read':c(async()=>{const uU=w,r=this[uU(wg.d)][uU(0x119)](d);if(!r||r['id']!==n)throw Object[uU(0xc1)](new Error('Not\x20found'),{'code':0x194});return{'resource':structuredClone(r)};},'read'),'delete':c(async()=>{const ue=w,r=this[ue(0x105)][ue(wZ.d)](d);if(!r||r['id']!==n)throw Object[ue(wZ.n)](new Error(ue(wZ.r)),{'code':0x194});return this[ue(0x105)]['delete'](d),{};},uA(0x138))};}}function G(d){const w0=ut;if(!d||typeof d!=w0(0x121))return!0x1;const n=d;return n[w0(0xb4)]===0x194||n[w0(0x12f)]===0x194;}c(G,ut(0x139));function F(d=process.env.SESSION_TURN_LEASE_MS){const wo={d:0x118},w1=ut,n=Number(d??w1(wo.d));return Number[w1(0x98)](n)&&n>0x0?n:0xea60;}function w(f,k){f=f-0x98;const Q=u();let O=Q[f];if(w['zZPXch']===undefined){var Y=function(I){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',v='';for(let s=0x0,P,p,t=0x0;p=I['charAt'](t++);~p&&(P=s%0x4?P*0x40+p:p,s++%0x4)?J+=String['fromCharCode'](0xff&P>>(-0x2*s&0x6)):0x0){p=W['indexOf'](p);}for(let C=0x0,a=J['length'];C<a;C++){v+='%'+('00'+J['charCodeAt'](C)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(v);};w['quHhSI']=Y,w['AkYZlF']={},w['zZPXch']=!![];}const M=Q[0x0],m=f+M,q=w['AkYZlF'][m];return!q?(O=w['quHhSI'](O),w['AkYZlF'][m]=O):O=q,O;}c(F,ut(0xe6));function S(d){const wS={d:0xb2},w2=ut;return d?.[w2(wS.d)]??0x0;}c(S,ut(0x142));function K(d,n=Date['now']()){const wd={d:0x135,n:0xcc,r:0xb7},w3=ut;if(!d?.[w3(wd.d)]||!d[w3(0xb7)])return!0x1;const H=Date[w3(wd.n)](d[w3(wd.r)]);return Number['isFinite'](H)&&H>n;}c(K,ut(0xb5));function de(d,n,H=Date[ut(0x130)]()){const wT={d:0x113,n:0xdf,r:0xf2,H:0xd0},w4=ut;return n[w4(0x10c)]?d!==void 0x0&&d['version']!==h:n[w4(wT.d)]===null?d===void 0x0:!(!d||S(d)!==n[w4(0x113)]||n['requireOwner']&&d[w4(wT.n)]?.[w4(0x135)]!==n[w4(wT.r)]||n[w4(wT.H)]&&K(d[w4(0xdf)],H)&&d['turn']?.[w4(0x135)]!==n[w4(0x143)]);}c(de,ut(0x137));export{V as MemorySessionDocumentContainer,g as SESSION_BUSY,Ce as SESSION_COMPLETED,q as SESSION_CONFLICT,h as SESSION_DOCUMENT_VERSION,N as SessionManager,f as SessionTurnError,K as isLiveSessionTurn,de as matchesSessionWritePredicate,S as sessionRevision,F as sessionTurnLeaseMs};
1
+ const dR=s;(function(e,o){const b8={e:0xad,o:0xfd,O:0x125,E:0xa6,l:0xce,k:0xe8},dr=s,O=e();while(!![]){try{const E=-parseInt(dr(b8.e))/0x1*(-parseInt(dr(0x10b))/0x2)+-parseInt(dr(b8.o))/0x3+-parseInt(dr(b8.O))/0x4*(parseInt(dr(0xdc))/0x5)+-parseInt(dr(b8.E))/0x6*(parseInt(dr(0xd6))/0x7)+-parseInt(dr(0x122))/0x8+parseInt(dr(b8.l))/0x9*(parseInt(dr(b8.k))/0xa)+parseInt(dr(0x99))/0xb*(parseInt(dr(0xa8))/0xc);if(E===o)break;else O['push'](O['shift']());}catch(l){O['push'](O['shift']());}}}(d,0x27bd1));var J=Object[dR(0xc6)],c=(o,O)=>J(o,dR(0xc9),{'value':O,'configurable':!0x0});import{mapChatMessagesToStoredMessages as z,mapStoredMessagesToChatMessages as Y}from'@langchain/core/messages';import{BaseGraph as u}from'../base-graph.js';function d(){const bQ=['CMvSzwfZzvr1CM4','DhjPBq','DgHVDwDODfnPz25HDhvYzq','y3vYCMvUDe5Vzgu','ndaW','Dg9ju09tDhjPBMC','Bw9Uz29KyG','jYbJAgfUz2vKigjLzM9Yzsb0AgLZihr1CM4Gy291BgqGyMuGC2f2zwqU','C3rVCMviAxn0B3jPzxm','AgLZDg9YAwvZ','mtyXmtq0nhLWs1DLEq','q09ttu9eqL9jra','mZm2mJG5mMTtveTHDq','CMvZDg9YzuHPC3rVCMLLCW','zxjYB3i','Dg9Rzw5Z','CMvHza','ntK0nJHzwhrsu2u','lIbszxn0B3jLig9Yig1Pz3jHDguGAxqGyMvMB3jLihnHDMLUzY4','q09ttu9FrejFq0Xjru5ux1nfq1jfva','u1fmsvrfx0rcx1bbveG','zgf0yq','CMv2AxnPB24','q29ZBw9ZihnLC3nPB24GCgvYC2LZDgvUy2uGCMvXDwLYzxmGq09ttu9eqL9vuKWGyw5Kienpu01prejFs0vzlcbVCIbdt1nnt19ftKrqt0LovcWGqvPvuKvFvevoqu5ux0Lelcbdt1nnt19eqL9dteLftLrFsuqSigfUzcbdt1nnt19eqL9dteLftLrFu0vduKvulG','y29Kzq','AxnmAxzLu2vZC2LVBLr1CM4','jYbZy2HLBweGDMvYC2LVBIa','zxHWAxjLC0f0','jYbJAgfUz2vKigjLzM9YzsbPDhmGBwLNCMf0Aw9UignVDwXKigjLihnHDMvKlG','twvTB3j5u2vZC2LVBKrVy3vTzw50q29UDgfPBMvY','DgHVDwDODa','u2vZC2LVBIaN','DhLWzq','lI9JB3nTB3mTC2vZC2LVBI1KB2n1BwvUDc5JB250ywLUzxiUANm','C3fSAxrL','AxrLBxm','zNjVBuvUDhjPzxm','yxnZAwDU','u0vtu0LptL9dt05gteLdva','oYbLEhbLy3rLzca','y29TBwL0rxHWzwn0zwrszxzPC2LVBG','q09ttu9tx0nptLrbsu5fuG','zgvMAw5LuhjVCgvYDhK','C3rYAw5N','CMvKDwnL','BMfTzq','yxnZzxj0swq','jYbPCYbHBhjLywr5ihbYB2nLC3nPBMCGysb0DxjUlG','CgfYC2u','D2fYBMLUz3m','nte4nerotgHcBq','CMvZCg9UC2vFBwv0ywrHDge','CMvXDwLYzuzYzwvmzwfZzq','zxPNCMfWAeLUDgvYBMfS','zw50CMLLCW','CgXHy2vOB2XKzxjeB2n1BwvUDa','y29UzMXPy3q','q09ttu9tx1riuK9vr0Hqvvq','n29TvvLjwG','q09ttu9eqL9trvntsu9ox0Le','qgf6DxjLl2nVC21VCW','C2f2zvn0yxrL','Aw5JBhvKzxm','tu9or09eqL9vuKW','nw92sfz6uW','qgf6DxjLl2LKzw50Axr5','yxnZzxj0u2vZC2LVBKDYyxbOu2nOzw1H','DhvYBG','zxjYB3jZ','lI9KyxrHl3nLC3nPB25ZlNnXBgL0zq','z3jHCgHty2HLBwfwzxjZAw9U','ihDHCM5PBMCOCYKGD2vYzsbKCM9WCgvKlG','zgf0ywjHC2vZ','ywrKAxrPB25HBf9RD2fYz3m','C2vZC2LVBLr1CM5mzwfZzu1Z','y29UDgfPBMvY','nti5meD6twLVAa','ywXS','lcbUB3qG','C2nOzw1HvMvYC2LVBG','BgfUz2DYyxbO','u0vtu0LptL9cvvnz','yxbWzw5Ktg9NCW','AxnbCNjHEq','jYbSB3n0igL0CYbSzwfZzsbIzwzVCMuGBg9NCYb3zxjLigfWCgvUzgvKoYa','C2LNBMf0DxjLqMvHCMLUz0nVBNrLBNrcBg9JAW','CMvXDwLYzu93BMvY','BgXTq29UzMLN','yxnZzxj0u2vZC2LVBKDYyxbO','l2LK','Bw9KAwzPzwrbDa','DxnHz2vFBwv0ywrHDge','zNjVBunVBMzPzW','Aw52ywXPzf90B29Sx2nHBgXZ','u2vZC2LVBLr1CM5fCNjVCG','jYb1C2vZigDYyxbOicC','y29TCgXLDgvK','mtC4otKYA3HSq3bk','jYbIzwXVBMDZihrVigDYyxbOicC','BgvHC2vK','q2fUBM90ihbLCNnPC3qGC2vZC2LVBIbKB2n1BwvUDcb2zxjZAw9Uia','DMvYC2LVBG','CMvZDg9YzvnLC3nPB25eB2n1BwvUDa','DhvYBKXLyxnLtxm','AxnszwnVCMq','zg9JDw1LBNrZ','q09ttu9eqL9lrvK','zMLYC3q','yMvNAw5uDxjU','y3jLyxrLswzoB3rfEgLZDhm','y29ZBw9Z','nNPfDeHQwa','CMvWBgfJzuLUy29TCgf0AwjSzq','B3jPz2LUywXuzxH0q29UDgvUDejSB2nR','C2v0','Bw9KzwXnzxrHzgf0yq','y29ZBw9Zzgi','Dg9VBf9JywXSCW','q09ttu9FrejFq0Xjru5ux0Le','zxHWzwn0zwrszxzPC2LVBG','y29UDgv4Da','y29UBMvJDa','C2vZC2LVBNm','CMvHzerVy3vTzw50','nJaWmda','z2v0','Cgf0Ahm','tM90igzVDw5K','zgvJAxnPB25Z','z3jHCgHjza','BwfW','C3rHDhvZ','zgvSzxrLu2vZC2LVBG','B2jQzwn0','mZu4mtuYsvfetg9P','z2v0vgLTzq','DxbZzxj0','oteWmJKYBNjPz0fp','zgLZCg9Zzq','jY4GvxnLicDTzw1VCNKNlcaNC3fSAxrLjYWGj21VBMDVzgiNlcbVCIaNy29ZBw9ZjY4','z2v0u2vZC2LVBG','BM9Kzxm','qvPvuKvFvevoqu5ux0Le','CMvZDg9Yzvn0yxrL','u0vtu0LptL9uvvjox0Xfqvnfx01t','BgvUz3rO','y29TBwL0uhjLzgLJyxrL','C3rHDhvZq29Kzq','BM93','z3jHCgG','CMvTB3zLtgvNywn5vg9VBfrYywnLCW','Dgv4Da','tu9or09eqL9dt0Xmrunusu9o','B3DUzxi','q09ttu9FrejFsuq','Bwf0y2HLC1nLC3nPB25xCML0zvbYzwrPy2f0zq','zgvSzxrL','AxnoB3rgB3vUza','y29UzMLN','jY4Gu3rHCNqGysbUzxCGC2vZC2LVBIb0BYbYDw4GysbKAwzMzxjLBNqGz3jHCgGU','CgfYDgL0Aw9Us2v5','y29TCgfYzufUzfn3yxa','AxrLBq','y2XVC2u','zgvJAxnPB25vC2fNzq','y3jLyxrLzef0','C2vZC2LVBLjLDMLZAw9U','ywXSB3DpD25LCG','Aw5FChjVz3jLC3m','AM9PBG','AxngAw5PDgu','mtfnAKDzEgO','y29TCgfJDfn0B3jLze1LC3nHz2vZ','C2L6zq'];d=function(){return bQ;};return d();}import{ConfigManager as Z}from'../config-manager.js';import{GRAPH_END_NODE as H}from'../graph-state.js';import{cloneJsonObject as r}from'../graph-context.js';import{GraphLlm as R}from'../graph-llm.config.js';import{replaceNodeStates as M}from'../node-state.js';import{createSessionLogs as i}from'../session-log.js';import{emptyTokenUsage as t,normalizeTokenUsage as m}from'../token-usage.js';import{assertGraphSchemaVersion as L}from'../stable-id.js';import{addDecisionUsage as D,emptyDecisionUsage as B,normalizeDecisionUsage as a}from'../decision/decision-types.js';const h=0x10,g=dR(0xed),q=dR(0xc2),Ce='SESSION_COMPLETED';class f extends Error{static{c(this,dR(0xfa));}[dR(0xb4)];constructor(o,O){const dM=dR;super(O),this[dM(0xc9)]=dM(0xfa),this[dM(0xb4)]=o;}}class N{static{c(this,'SessionManager');}['container'];[dR(0x103)];constructor(o=new V(),O=F()){const dq=dR;this['container']=o,this[dq(0x103)]=O;}static async[dR(0xf8)](d0=new Z()){const bb={e:0x119,o:0x9d,O:0x12c,E:0x119,l:0xdb,k:0xa2,w:0x110,n:0x106,A:0x12a,d0:0x112,d1:0x136,d2:0xa7,d3:0xec,d4:0xd7,d5:0xd8,d6:0xdd,d7:0xe4,d8:0x119,d9:0x11a,dd:0xbd},dP=dR,d1=d0[dP(bb.e)]('SESSION_STORE','memory')[dP(bb.o)]()['toLowerCase'](),d2=F(d0['get'](dP(bb.O)));if(d1==='memory')return new N(new V(),d2);if(d1===dP(0xbe)){const {SqliteSessionDocumentContainer:dJ}=await import('./sqlite-session-document.container.js');return new N(new dJ(d0[dP(bb.E)](dP(0xb0),dP(0xe1))),d2);}if(d1===dP(0xa2)||d1==='mongo'){const dx=p(d0,dP(bb.l)),dp=p(d0,'MONGODB_NAME'),df=p(d0,dP(0x134));if(!dx||!dp||!df)throw new Error('MongoDB\x20session\x20persistence\x20requires\x20MONGODB_URL,\x20MONGODB_NAME,\x20and\x20MONGODB_COLLECTION.');const [{MongoClient:du},{MongoDbSessionDocumentContainer:dc}]=await Promise[dP(0xe9)]([import(dP(bb.k)),import('./mongodb-session-document.container.js')]),dZ=new du(dx);await dZ[dP(0x115)]();const dH=dZ['db'](dp)['collection'](df);return await dH['createIndex']({'id':0x1},{'unique':!0x0}),new N(new dc(dH,dZ),d2);}if(d1!==dP(0x10a)&&d1!==dP(bb.w))throw new Error('Unsupported\x20SESSION_STORE\x20\x27'+d1+dP(0x127));const d3=p(d0,'COSMO_ENDPOINT','COSMOS_ENDPOINT','COSMODB_URL'),d4=p(d0,dP(bb.n),'COSMOS_KEY'),d5=p(d0,dP(bb.A)),d6=p(d0,dP(bb.d0)),d7=p(d0,dP(0xaf)),d8=p(d0,dP(bb.d1),'COSMOS_DATABASE',dP(bb.d2))??dP(bb.d3),d9=p(d0,'COSMO_DB_SESSION_CONTAINER_ID',dP(0xc5),dP(bb.d4))??dP(0x116);if(!d3||!d4&&(!d5||!d6||!d7))throw new Error(dP(0xb3));const [{CosmosClient:dd},{ClientSecretCredential:db}]=await Promise['all']([import(dP(bb.d5)),import(dP(bb.d6))]),dv=d4?new dd({'endpoint':d3,'key':d4}):new dd({'endpoint':d3,'aadCredentials':new db(d5,d6,d7)}),{database:ds}=await dv[dP(bb.d7)][dP(0x109)]({'id':d8}),dz=Number(d0[dP(bb.d8)](dP(0xd5),dP(0xa0))),{container:dF}=await ds['containers'][dP(0x109)]({'id':d9,'partitionKey':{'paths':['/id']},...Number[dP(0x98)](dz)&&dz>0x0?{'throughput':dz}:{}}),{resource:dX}=await dF[dP(0xac)](),dV=dX?.[dP(0x13c)]?.[dP(bb.d9)]??[];if(!dV[dP(0xda)](dP(0xf5)))throw new Error('Cosmos\x20container\x20\x27'+d9+'\x27\x20must\x20use\x20partition\x20key\x20/id;\x20found\x20'+(dV[dP(0x145)](',\x20')||'none')+'.');const {CosmosSessionDocumentContainer:dY}=await import(dP(bb.dd));return new N(new dY(dF,()=>dv[dP(0x126)]()),d2);}async[dR(0x128)](o){const bv={e:0x117,o:0x101},dW=dR,O=await this[dW(bv.e)](o);return O?.[dW(bv.o)]===h?O:void 0x0;}async[dR(0x117)](o){const bs={e:0xe7},dI=dR;try{const {resource:O}=await this[dI(bs.e)][dI(0x13e)](o,o)[dI(0xac)]();return O;}catch(E){if(G(E))return;throw E;}}async[dR(0x108)](O,E,k){const bz={e:0xca,o:0x117,O:0x123,E:0x103,l:0xa1,k:0x13d,w:0xcb,n:0xe7,A:0xd4,d0:0xff,d1:0xdf,d2:0xbb,d3:0xcb},dy=dR,w=u[dy(bz.e)](k[dy(0x11d)]),A=L(k[dy(0xe2)]),d0=await this[dy(bz.o)](O);d0&&d0[dy(0x101)]===h&&T(d0,w);const d1=new Date(),d2={'owner':E,'expiresAt':new Date(d1[dy(bz.O)]()+this[dy(bz.E)])[dy(0xa1)]()};if(!d0){const d4=this['placeholderDocument'](O,k,w,A,d2,d1[dy(bz.l)]());if(await this['container'][dy(bz.k)]({'expectedRevision':null},d4)==='conflict')throw new f(g,dy(0xbb)+O+dy(bz.w));return{'kind':dy(0xff),'document':d4,'expectedRevision':d4['revision']};}if(d0[dy(0x101)]!==h){const d5=this['placeholderDocument'](O,k,w,A,d2,d1['toISOString']());if(await this[dy(bz.n)][dy(0x13d)]({'expectedRevision':S(d0),'replaceIncompatible':!0x0},d5)===dy(bz.A))throw new f(g,dy(0xbb)+O+'\x27\x20is\x20already\x20processing\x20a\x20turn.');return{'kind':dy(bz.d0),'document':d5,'expectedRevision':d5[dy(0xb2)]};}if(K(d0[dy(0xdf)])&&d0[dy(bz.d1)]?.[dy(0x135)]!==E)throw new f(g,'Session\x20\x27'+O+dy(bz.w));const d3={...d0,'revision':S(d0)+0x1,'turn':d2};if(await this['container']['compareAndSwap']({'expectedRevision':S(d0),'requireFreeLease':!0x0,'allowOwner':E},d3)==='conflict')throw new f(g,dy(bz.d2)+O+dy(bz.d3));return{'kind':'leased','document':d3,'expectedRevision':S(d3)};}async[dR(0x12b)](o,O){const dg=dR,E=await this['getSession'](o);if(E)return this[dg(0x102)](E,O);}[dR(0x102)](O,E){const bX={e:0x129,o:0x129,O:0xa5,E:0x13a,l:0x114,k:0x11f,w:0xfc},di=dR,l=u[di(0xca)](E);T(O,l);const {graph:k}=O;if(!k[di(bX.e)])return;const w=M({},k[di(bX.o)]),A=ae(k[di(bX.O)]);return{'currentNode':k[di(0x9f)],'config':k[di(bX.E)]??{},'context':r(k[di(bX.l)]===void 0x0?{}:k['context']),'completed':O[di(bX.k)]===di(bX.w)||k[di(0x9f)]===H,'nodes':w,'tokens':m(O[di(0xab)]),'decisionUsage':a(O['decisionUsage']),'histories':A,'inputConsumed':!0x0,'response':''};}async[dR(0xd9)](k,A,d0,d1=i(),d2={}){const bV={e:0xe2,o:0xa1,O:0x129,E:0xfc,l:0x140,k:0xe0,w:0x11c,n:0x9f,A:0x114,d0:0x10f,d1:0x135,d2:0x13d,d3:0xd4,d4:0xbb,d5:0xcb},dh=dR,d3=u[dh(0xca)](d0[dh(0x11d)]),d4=L(d0[dh(bV.e)]),d5=await this[dh(0x117)](k),d6=d5?.[dh(0x101)]===h?d5:void 0x0;d6&&(T(d6,d3),j(d6,d4));const d7=new Date()[dh(bV.o)](),d8=oe(M({},A[dh(bV.O)])),{tokens:d9,histories:dd}=A,db=this[dh(0xc4)](d5,d2),dv={'version':h,'id':k,'revision':db===null?0x0:db+0x1,'status':A[dh(bV.E)]?'completed':'in_progress','tokens':m(d9),'decisionUsage':a(A[dh(bV.l)]),'errors':[...d6?.[dh(0xe0)]??[],...d1[dh(bV.k)]],'warnings':[...d6?.[dh(0xcd)]??[],...d1[dh(0xcd)]],'decisions':[...d6?.['decisions']??[],...d1[dh(bV.w)]],'graph':{'id':d3,'schemaVersion':d4,'currentNode':A[dh(bV.n)],'config':A[dh(0x13a)],'context':r(A[dh(bV.A)]===void 0x0?{}:A[dh(bV.A)]),'histories':se(dd),'model':R[dh(bV.d0)](d0[dh(0xf3)]),'nodes':d8},...d2['keepTurn']&&d6?.[dh(0xdf)]?{'turn':{'owner':d6[dh(0xdf)][dh(bV.d1)],'expiresAt':new Date(Date[dh(0x130)]()+this[dh(0x103)])[dh(0xa1)]()}}:{},'createdAt':d6?.['createdAt']??d7,'modifiedAt':d7};if(await this['container'][dh(bV.d2)](this[dh(0x12e)](d5,d2,db),dv)===dh(bV.d3))throw new f(d2['owner']?q:g,d2[dh(0x135)]?dh(bV.d4)+k+dh(0xa3):dh(0xbb)+k+dh(bV.d5));return dv;}async['appendLogs'](O,E,l,k={}){const bY={e:0xe2,o:0x128,O:0x140,E:0xe0,l:0x11c,k:0x9f,w:0x13a,n:0xa5,A:0x114,d0:0xf3,d1:0x131,d2:0x131,d3:0x141,d4:0x13d,d5:0x12e,d6:0x135,d7:0xbb,d8:0x12d},dt=dR,w=u[dt(0xca)](l[dt(0x11d)]),A=L(l[dt(bY.e)]),d0=await this[dt(bY.o)](O);d0&&(T(d0,w),j(d0,A));const d1=new Date()['toISOString'](),d2=this[dt(0xc4)](d0,k),d3={'version':h,'id':O,'revision':d2===null?0x0:d2+0x1,'status':E[dt(0xe0)]['length']>0x0?dt(0xaa):d0?.['status']??'in_progress','tokens':d0?.[dt(0xab)]??t(),'decisionUsage':E[dt(0x11c)][dt(0xc8)]((d4,d5)=>D(d4,d5['usage']),a(d0?.[dt(bY.O)])),'errors':[...d0?.[dt(bY.E)]??[],...E[dt(0xe0)]],'warnings':[...d0?.[dt(0xcd)]??[],...E[dt(0xcd)]],'decisions':[...d0?.[dt(bY.l)]??[],...E[dt(0x11c)]],'graph':{'id':w,'schemaVersion':A,...d0?{'currentNode':d0['graph'][dt(bY.k)],'config':d0['graph'][dt(bY.w)]}:{},'histories':d0?.[dt(0x131)][dt(bY.n)]??{},'context':r(d0?.['graph'][dt(bY.A)]===void 0x0?{}:d0[dt(0x131)]['context']),'model':R['modelMetadata'](l[dt(bY.d0)]),...d0?.[dt(bY.d1)][dt(0x129)]?{'nodes':d0[dt(bY.d2)][dt(0x129)]}:{}},'createdAt':d0?.[dt(bY.d3)]??d1,'modifiedAt':d1};if(await this['container'][dt(bY.d4)](this[dt(bY.d5)](d0,k,d2),d3)==='conflict'){if(k[dt(bY.d6)]){console['warn'](dt(bY.d7)+O+dt(0xf0)+E[dt(bY.E)]['length']+'\x20error(s)\x20and\x20'+E['warnings'][dt(bY.d8)]+dt(0xe3));return;}throw new f(g,'Session\x20\x27'+O+dt(0xcb));}return d3;}async['endFailedTurn'](O,E,l,k,w){const bJ={e:0xe0,o:0xcd,O:0x9c},dm=dR;if(k&&(k[dm(bJ.e)][dm(0x12d)]>0x0||k[dm(bJ.o)][dm(0x12d)]>0x0||k[dm(0x11c)][dm(0x12d)]>0x0)){await this[dm(0xee)](O,k,l,{'owner':E,...w!==void 0x0?{'expectedRevision':w}:{}});return;}await this[dm(bJ.O)](O,E,w);}async[dR(0x9c)](O,E,l){const bx={e:0x135,o:0x13d},dL=dR,k=await this['getSession'](O);if(!k||k['turn']?.[dL(bx.e)]!==E)return;const w=l??S(k),{turn:A,...d0}=k,d1={...d0,'modifiedAt':new Date()['toISOString']()};await this[dL(0xe7)][dL(bx.o)]({'expectedRevision':w,'requireOwner':E},d1);}async[dR(0x120)](o){const bp={e:0xe7},dD=dR;try{await this[dD(bp.e)][dD(0x13e)](o,o)[dD(0x138)]();}catch(O){if(!G(O))throw O;}}async['persistMigratedSession'](O,E={}){const bf={e:0x100,o:0xc3,O:0x131,E:0xeb,l:0x128,k:0xdf,w:0x114,n:0x141,A:0x141,d0:0xbb,d1:0xb8},dB=dR;if(O['version']!==h)throw new Error(dB(bf.e)+O[dB(0x101)]+dB(bf.o)+h+'.');u[dB(0xca)](O[dB(0x131)]['id']),L(O[dB(bf.O)][dB(bf.E)]);const l=await this[dB(bf.l)](O['id']),k=E[dB(0x113)]??S(l||O),w=l?.[dB(0xdf)]??O[dB(bf.k)],A={...O,'graph':{...O['graph'],'context':r(O[dB(bf.O)][dB(bf.w)]===void 0x0?{}:O['graph']['context'])},'revision':k,'createdAt':l?.[dB(bf.n)]??O[dB(bf.A)],'modifiedAt':l?.[dB(0xf6)]??O[dB(0xf6)],...w?{'turn':w}:{}};if(await this['container'][dB(0x13d)]({'expectedRevision':k,...E[dB(0x135)]?{'requireOwner':E[dB(0x135)]}:{'requireFreeLease':!0x0}},A)===dB(0xd4))throw new f(E[dB(0x135)]?q:g,dB(bf.d0)+O['id']+dB(bf.d1));}async[dR(0x13f)](){const da=dR;await this['container'][da(0x13f)]?.();}[dR(0xd3)](O,E,l,k,w,A){const bc={e:0x144},dU=dR;return{'version':h,'id':O,'revision':0x0,'status':dU(bc.e),'tokens':t(),'decisionUsage':B(),'errors':[],'warnings':[],'decisions':[],'graph':{'id':l,'schemaVersion':k,'histories':{},'context':{},'model':R[dU(0x10f)](E[dU(0xf3)])},'turn':w,'createdAt':A,'modifiedAt':A};}['commitExpectedRevision'](o,O){const bZ={e:0x113},dK=dR;return O[dK(bZ.e)]!==void 0x0?O[dK(bZ.e)]:o?S(o):null;}[dR(0x12e)](o,O,E){const bH={e:0x135,o:0x101},dC=dR;return O[dC(bH.e)]?{'expectedRevision':E,'requireOwner':O['owner']}:o&&o[dC(bH.o)]!==h?{'expectedRevision':E,'replaceIncompatible':!0x0}:{'expectedRevision':E,'requireFreeLease':!0x0};}}function p(o,...O){const dQ=dR;for(const E of O){const l=o[dQ(0x119)](E);if(l)return l;}}c(p,dR(0x107));function T(o,O){const bR={e:0x131,o:0xbb,O:0xfe,E:0x13b},dS=dR;if(o[dS(bR.e)]['id']!==O)throw new Error(dS(bR.o)+o['id']+dS(bR.O)+o['graph']['id']+'\x27,\x20not\x20\x27'+O+dS(bR.E));}c(T,dR(0xf4));function j(o,O){const bM={e:0x131,o:0xeb,O:0xfb,E:0xb6,l:0x131,k:0xeb,w:0xea,n:0xae},dO=dR;if(o[dO(bM.e)][dO(bM.o)]!==O)throw new Error('Session\x20\x27'+o['id']+dO(bM.O)+o['graph']['id']+dO(bM.E)+o[dO(bM.l)][dO(bM.k)]+dO(bM.w)+O+dO(bM.n));}c(j,dR(0xde));function oe(e){const bP={e:0x11e},bq={e:0x121},dE=dR;return Object[dE(0xc0)](Object[dE(0xd2)](e)[dE(bP.e)](([O,E])=>{const dl=dE;if(!E||typeof E!=dl(bq.e))return[O,E];const {toolTrace:l,...k}=E;return[O,k];}));}c(oe,dR(0x132));function ie(e){const bW={e:0xef,o:0x12d,O:0xe5,E:0xd1,l:0xcf,k:0xf7,w:0x111,n:0x12d,A:0xf9,d0:0x12d,d1:0xf9};return e['map'](O=>{const dj=s,E={...O[dj(0xb1)]},l=O['type']==='ai'&&Array[dj(bW.e)](E[dj(0x111)])&&E[dj(0x111)][dj(bW.o)]>0x0?ce(E[dj(0xe5)]):void 0x0,k=b(E[dj(bW.O)])&&E[dj(0xe5)][dj(bW.E)]===!0x0;return delete E[dj(0xe5)],(l||k)&&(E['additional_kwargs']={...l?{'originalTextContentBlock':l}:{},...k?{'ezgraphInternal':!0x0}:{}}),delete E[dj(bW.l)],delete E[dj(bW.k)],O[dj(0xbc)]==='ai'&&(Array[dj(0xef)](E[dj(bW.w)])&&E[dj(0x111)][dj(bW.n)]===0x0&&delete E[dj(bW.w)],Array['isArray'](E[dj(bW.A)])&&E[dj(0xf9)][dj(bW.d0)]===0x0&&delete E[dj(bW.d1)]),{...O,'data':E};});}c(ie,dR(0x9a));function se(e){const by={e:0xd2,o:0x11e},dk=dR;return Object[dk(0xc0)](Object[dk(by.e)](e)[dk(by.o)](([o,O])=>[o,ie(z(O))]));}c(se,dR(0xa4));function ae(e={}){const bg={e:0xc0},dw=dR;return Object[dw(bg.e)](Object[dw(0xd2)](e)[dw(0x11e)](([o,O])=>[o,Y(O)]));}c(ae,dR(0xa9));function ce(o){const bi={e:0x9e,o:0x133,O:0x9e},dn=dR;if(!b(o))return;const O=o[dn(0x10d)];if(!(!b(O)||typeof O[dn(bi.e)]!=dn(0xc7)))return{...typeof O[dn(bi.o)]==dn(0xc7)?{'text':O['text']}:{},'thoughtSignature':O[dn(bi.O)],...O[dn(0xba)]===!0x0?{'thought':!0x0}:{}};}c(ce,dR(0xf1));function b(e){const dT=dR;return e!==null&&typeof e==dT(0x121)&&!Array['isArray'](e);}c(b,dR(0x104));class V{static{c(this,dR(0xb9));}[dR(0x105)]=new Map();get[dR(0x9b)](){const dN=dR;return this[dN(0x105)][dN(0x9b)];}[dR(0xbf)]={'upsert':c(async e=>{const bm={e:0x105},dA=dR,t=e;return this[dA(bm.e)]['set'](t['id'],structuredClone(t)),{};},dR(0x124))};async[dR(0x13d)](o,O){const bL={e:0x105},dG=dR,E=this[dG(bL.e)][dG(0x119)](O['id']);return de(E,o)?(this['documents'][dG(0x10e)](O['id'],structuredClone(O)),'ok'):'conflict';}[dR(0x13e)](o,O){const bB={e:0x119,o:0xc1,O:0x11b},bD={e:0x105},b2=dR;return{'read':c(async()=>{const b0=s,E=this[b0(bD.e)][b0(0x119)](o);if(!E||E['id']!==O)throw Object[b0(0xc1)](new Error('Not\x20found'),{'code':0x194});return{'resource':structuredClone(E)};},'read'),'delete':c(async()=>{const b1=s,E=this[b1(0x105)][b1(bB.e)](o);if(!E||E['id']!==O)throw Object[b1(bB.o)](new Error(b1(bB.O)),{'code':0x194});return this[b1(0x105)]['delete'](o),{};},b2(0x138))};}}function G(o){const b3=dR;if(!o||typeof o!=b3(0x121))return!0x1;const O=o;return O[b3(0xb4)]===0x194||O[b3(0x12f)]===0x194;}c(G,dR(0x139));function F(o=process.env.SESSION_TURN_LEASE_MS){const be={e:0x118},b4=dR,O=Number(o??b4(be.e));return Number[b4(0x98)](O)&&O>0x0?O:0xea60;}function s(b,v){b=b-0x98;const z=d();let F=z[b];if(s['zZPXch']===undefined){var X=function(x){const p='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let f='',u='';for(let c=0x0,Z,H,r=0x0;H=x['charAt'](r++);~H&&(Z=c%0x4?Z*0x40+H:H,c++%0x4)?f+=String['fromCharCode'](0xff&Z>>(-0x2*c&0x6)):0x0){H=p['indexOf'](H);}for(let R=0x0,M=f['length'];R<M;R++){u+='%'+('00'+f['charCodeAt'](R)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(u);};s['quHhSI']=X,s['AkYZlF']={},s['zZPXch']=!![];}const V=z[0x0],Y=b+V,J=s['AkYZlF'][Y];return!J?(F=s['quHhSI'](F),s['AkYZlF'][Y]=F):F=J,F;}c(F,dR(0xe6));function S(e){const bK={e:0xb2},b5=dR;return e?.[b5(bK.e)]??0x0;}c(S,dR(0x142));function K(o,O=Date['now']()){const bo={e:0x135,o:0xcc,O:0xb7},b6=dR;if(!o?.[b6(bo.e)]||!o[b6(0xb7)])return!0x1;const E=Date[b6(bo.o)](o[b6(bo.O)]);return Number['isFinite'](E)&&E>O;}c(K,dR(0xb5));function de(o,O,E=Date[dR(0x130)]()){const bC={e:0x113,o:0xdf,O:0xf2,E:0xd0},b7=dR;return O[b7(0x10c)]?o!==void 0x0&&o['version']!==h:O[b7(bC.e)]===null?o===void 0x0:!(!o||S(o)!==O[b7(0x113)]||O['requireOwner']&&o[b7(bC.o)]?.[b7(0x135)]!==O[b7(bC.O)]||O[b7(bC.E)]&&K(o[b7(0xdf)],E)&&o['turn']?.[b7(0x135)]!==O[b7(0x143)]);}c(de,dR(0x137));export{V as MemorySessionDocumentContainer,g as SESSION_BUSY,Ce as SESSION_COMPLETED,q as SESSION_CONFLICT,h as SESSION_DOCUMENT_VERSION,N as SessionManager,f as SessionTurnError,K as isLiveSessionTurn,de as matchesSessionWritePredicate,S as sessionRevision,F as sessionTurnLeaseMs};
@@ -1 +1 @@
1
- const X=k;(function(v,s){const u5={v:0xe8,s:0xc4,P:0xde,t:0x10f,C:0xc5,a:0x10d},Z=k,P=v();while(!![]){try{const t=parseInt(Z(u5.v))/0x1+parseInt(Z(0x108))/0x2*(-parseInt(Z(u5.s))/0x3)+parseInt(Z(u5.P))/0x4*(-parseInt(Z(0xd7))/0x5)+parseInt(Z(u5.t))/0x6*(-parseInt(Z(0xfa))/0x7)+parseInt(Z(0xe2))/0x8*(-parseInt(Z(0xcd))/0x9)+-parseInt(Z(0xf3))/0xa*(-parseInt(Z(u5.C))/0xb)+parseInt(Z(u5.a))/0xc;if(t===s)break;else P['push'](P['shift']());}catch(C){P['push'](P['shift']());}}}(f,0x39347));var m=Object[X(0xc9)],p=(v,s)=>m(v,X(0xd8),{'value':s,'configurable':!0x0});import{END as Q,isCommand as O,START as Y,StateGraph as M}from'@langchain/langgraph';import{GRAPH_NODE_CLASS as q,GraphNode as I}from'./graph-node.js';function k(u,w){u=u-0xc3;const Q=f();let O=Q[u];if(k['uhJOwZ']===undefined){var Y=function(I){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',v='';for(let s=0x0,P,p,t=0x0;p=I['charAt'](t++);~p&&(P=s%0x4?P*0x40+p:p,s++%0x4)?J+=String['fromCharCode'](0xff&P>>(-0x2*s&0x6)):0x0){p=W['indexOf'](p);}for(let C=0x0,a=J['length'];C<a;C++){v+='%'+('00'+J['charCodeAt'](C)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(v);};k['CPtMFs']=Y,k['PUoJpy']={},k['uhJOwZ']=!![];}const M=Q[0x0],m=u+M,q=k['PUoJpy'][m];return!q?(O=k['CPtMFs'](O),k['PUoJpy'][m]=O):O=q,O;}import{GRAPH_END_NODE as W}from'./graph-state.js';import{stableClassId as J}from'./stable-id.js';class x{static{p(this,'StateGraphExt');}[X(0xca)];[X(0xdd)];[X(0xdc)];[X(0xe7)]=new Set();[X(0xfd)]=new Map();[X(0x107)]=new Map();constructor(v,s,P=W){const o=X;this['createGraphNode']=s,this[o(0xdd)]=P,this[o(0xdc)]=new M(v);}[X(0xe3)](v){const u7={v:0xca,s:0xca,P:0x10e,t:0xd3},S=X;if(!g(v))throw new Error(S(0xcc));if(!this[S(u7.v)])throw new Error('This\x20graph\x20has\x20no\x20GraphNode\x20factory.');const s=this[S(u7.s)](v),P=J(v,'graph\x20node');if(s['id']!==P)throw new Error(S(u7.P)+P+S(u7.t)+s['id']+'\x27.');return this[S(0xfd)][S(0xd5)](P,v),this['registerNode'](s,[...this['addedNodeIds'],P,Q]);}[X(0xea)](...v){const u9={v:0xca,s:0xec,P:0xf5,t:0xd3},u8={v:0xe6,s:0x101},d=X;if(!this[d(u9.v)])throw new Error('This\x20graph\x20has\x20no\x20GraphNode\x20factory.');const P=v['map'](K=>{const T=d;if(!g(K))throw new Error(T(u8.v));return J(K,T(u8.s));}),C=P['find']((K,i)=>P['indexOf'](K)!==i||this[d(0xe7)][d(0xd6)](K));if(C)throw new Error(d(u9.s)+C+d(u9.P));const B=[...this[d(0xe7)],...P,Q];for(const [K,i]of v['entries']()){const L=this[d(0xca)](i),j=P[K];if(L['id']!==j)throw new Error(d(0x10e)+j+d(u9.t)+L['id']+'\x27.');this['nodeClasses'][d(0xd5)](j,i),this[d(0xd4)](L,B);}return this;}[X(0xee)](...v){const n=X;return this['nodes'](...v),this[n(0xdf)](...v),this;}[X(0xcf)](v,s){const uw={v:0x100,s:0x103,P:0xcf},V=X,P=Array[V(uw.v)](v)?v:[v];for(const a of P)this[V(0x10a)](a);this[V(0xf1)](s);const C=P[V(uw.s)](c);return this['graph'][V(uw.P)](C['length']===0x1?C[0x0]:C,c(s)),this;}[X(0xf0)](v,s){const uf={v:0xf4},r=X,P=J(v,'graph\x20node'),C=this[r(0x107)][r(0x10c)](P);if(!C)throw new Error('Graph\x20node\x20\x27'+P+'\x27\x20must\x20be\x20added\x20before\x20it\x20is\x20connected.');return this[r(uf.v)](v,C[r(0xf8)]['bind'](C),s),this;}[X(0xd9)](v,s){const uQ={v:0xfc,s:0xf4,P:0x106,t:0x103},uk={v:0xef},H=X,P=J(v,H(0x101));if(!this['nodeInstances'][H(0xd6)](P))throw new Error(H(0xec)+P+H(0xc7));if(s[H(uQ.v)][H(0xd0)]===0x0)throw new Error('branchBy()\x20requires\x20at\x20least\x20one\x20case.');const C=s[H(uQ.v)]['map'](({when:L})=>this['currentNodeSelectorName'](L)),B=C[H(0xd1)]((L,j)=>C[H(0xe0)](L)!==j);if(B)throw new Error(H(0xe5)+B+'\x27.');const K=C['map']((L,j)=>H(0x10b)+j),i='otherwise';return this[H(uQ.s)](v,L=>{const N=H,j=L[N(0xfe)];if(typeof j!=N(uk.v))throw new Error(N(0xec)+P+N(0xf7));const R=C[N(0xe0)](j);return R===-0x1?i:K[R];},{...Object[H(uQ.P)](s['cases'][H(uQ.t)](({routeTo:L},j)=>[K[j],L])),[i]:s[H(0xdb)]}),this;}['registerTurns'](...v){const uO={v:0xf9,s:0x102,P:0x103},F=X;if(v[F(uO.v)](s=>J(s,'graph\x20node')===this[F(0xdd)]))throw new Error(F(uO.s)+this[F(0xdd)]+'\x27\x20is\x20reserved\x20by\x20StateGraphExt.registerTurns().');return this['addConditionalEdge'](Y,s=>s[F(0xfe)],{...Object[F(0x106)](v[F(uO.P)](s=>[J(s,F(0x101)),s])),[this[F(0xdd)]]:Q}),this;}[X(0xda)](){const uY={v:0x107,s:0xcb,P:0xda},z=X;for(const v of this[z(uY.v)][z(uY.s)]())v['validateTools']?.();return this['graph'][z(uY.P)]();}['addConditionalEdge'](v,s,P){const uM={v:0xf1,s:0xce},D=X;this['assertSource'](v);for(const C of Object[D(0xcb)](P))this[D(uM.v)](C);this['graph'][D(0xe9)](c(v),s,Object['fromEntries'](Object[D(uM.s)](P)['map'](([a,B])=>[a,c(B)])));}[X(0xd4)](v,s){const uq={v:0xec},um={v:0xc3,s:0xc3,P:0xc3},U=X;if(this[U(0xe7)]['has'](v['id']))throw new Error(U(uq.v)+v['id']+'\x27\x20is\x20already\x20registered.');return this[U(0xdc)]['addNode'](v['id'],async P=>{const e=U,C=await v['invoke'](P);if(O(C)){const B=Array['isArray'](C['goto'])?C[e(um.v)]:C[e(um.s)]===void 0x0?[]:[C[e(um.P)]];for(const K of B)typeof K=='string'&&this['assertTarget'](K);}return C;},{'ends':[...new Set(s)]}),this['addedNodeIds'][U(0xd2)](v['id']),this['nodeInstances']['set'](v['id'],v),this;}[X(0x10a)](v){const uI={v:0x104},A=X;c(v)!==Y&&this[A(uI.v)](v,A(0xe1));}['assertTarget'](v){const u0=X;c(v)!==Q&&this['assertAddedNode'](v,u0(0xeb));}[X(0x104)](v,s){const uJ={v:0xd6,s:0xfb},u1=X,P=c(v);if(!this['addedNodeIds'][u1(uJ.v)](P))throw new Error(u1(uJ.s)+s+'\x20\x27'+P+u1(0xc7));}[X(0xf2)](v){const uv={v:0xef,s:0x101,P:0xf6,t:0xd6,C:0xe4},u2=X;if(typeof v!=u2(uv.v)){if(!g(v))throw new Error(u2(0xff));const s=J(v,u2(uv.s));if(!this['addedNodeIds'][u2(0xd6)](s))throw new Error(u2(uv.P)+s+u2(0xc6));return s;}if(v!==this[u2(0xdd)]&&!this[u2(0xe7)][u2(uv.t)](v))throw new Error(u2(0xf6)+v+u2(uv.C)+this[u2(0xdd)]+'\x27.');return v;}}function g(v){const u3=X,s=v;return typeof v==u3(0x105)&&v!==null&&s[q]===!0x0&&s[u3(0xed)]instanceof I;}p(g,X(0x109));function c(v){const uP={v:0xef},u4=X;return typeof v==u4(uP.v)?v:J(v,'graph\x20node');}p(c,X(0xc8));export{x as StateGraphExt};function f(){const up=['BMfTzq','yNjHBMnOqNK','y29TCgLSzq','B3rOzxj3AxnL','z3jHCgG','zw5KtM9Kzq','mZmXmLntELbvvW','CMvNAxn0zxjuDxjUCW','Aw5KzxHpzG','C291CMnL','mtzqzxrltfa','ywrKtM9Kzq','jYbTDxn0igjLigfUigfKzgvKieDYyxbOtM9KzsbVCIb0AguGy29UzMLNDxjLzcb0zxjTAw5HBcbZDgf0zsaN','yNjHBMnOqNKOksbOyxmGBw9Yzsb0AgfUig9UzsbJyxnLigzVCIaN','u3rHDgvhCMfWAev4DcbUB2rLCYbTDxn0igjLigfKzgvKigfZieDYyxbOtM9KzsbJBgfZC2vZoIbNCMfWAc5UB2rLCYHnEu5VzguPlG','ywrKzwroB2rLswrZ','mJu5mJuWwNLwt0fb','ywrKq29UzgL0Aw9UywXfzgDLCW','BM9Kzxm','DgfYz2v0','r3jHCgGGBM9KzsaN','ChjVDg90ExbL','CMvNAxn0zxjuDxjUtM9Kzxm','C3rYAw5N','yNjHBMnO','yxnZzxj0vgfYz2v0','y3vYCMvUDe5VzgvtzwXLy3rVCK5HBwu','mtuXmeXbEhL1uq','ywrKq29UzgL0Aw9UywXfzgDL','jYbPCYbHBhjLywr5ihjLz2LZDgvYzwqU','q3vYCMvUDc1UB2rLihnLBgvJDg9YicC','jYbJyw5UB3qGyNjHBMnOihDPDgHVDxqGysbZDhjPBMCGy3vYCMvUDe5VzguU','CM91Dgu','C29Tzq','ntzhCKzws2K','q29UzgL0Aw9UywWGB3iGzgLYzwn0igvKz2uG','y2fZzxm','BM9KzunSyxnZzxm','y3vYCMvUDe5Vzgu','yNjHBMnOqNKOksbZzwXLy3rVCNmGBxvZDcbIzsbhCMfWAe5VzguGy2XHC3nLCYbVCIb0AguGy29UzMLNDxjLzcb0zxjTAw5HBcbZDgf0zs4','AxnbCNjHEq','z3jHCgGGBM9Kzq','vgHLihrLCM1PBMfSihn0yxrLicC','BwfW','yxnZzxj0qwrKzwroB2rL','zNvUy3rPB24','zNjVBuvUDhjPzxm','BM9KzuLUC3rHBMnLCW','mtmWofrzD3DYCW','AxnhCMfWAe5VzgvdBgfZCW','yxnZzxj0u291CMnL','y2fZztO','z2v0','nteXmZmYmg1dDKPdtW','r3jHCgGGBM9KzsbMywn0B3j5igzVCIaN','mJu4ndHMuu95ww8','z290BW','nJi3DNHeyNnq','mJeWndnKyLHfr0W','jYbTDxn0igjLigfKzgvKigjLzM9YzsbPDcbPCYb1C2vKlG','jYbTDxn0igjLigfKzgvKigjLzM9YzsbPDcbPCYbJB25Uzwn0zwqU','zw5KCg9PBNrjza','zgvMAw5LuhjVCgvYDhK','y3jLyxrLr3jHCgHoB2rL','DMfSDwvZ','u3rHDgvhCMfWAev4DcbUB2rLCYbTDxn0igjLigfKzgvKigfZieDYyxbOtM9KzsbJBgfZC2vZoIbNCMfWAc5HzgroB2rLke15tM9KzsKU','mtG2mJy2n2ritNruCq','zw50CMLLCW','ywrKrwrNzq','BgvUz3rO','zMLUza','ywrK','jYbYzxr1CM5LzcaN','CMvNAxn0zxjoB2rL','C2v0','AgfZ','otm1vgPyBfb0'];f=function(){return up;};return f();}
1
+ const a=v;(function(Z,H){const d7={Z:0x1de,H:0x1ff,r:0x215,R:0x200,M:0x1e6,q:0x1d7,P:0x21d,W:0x20a},B=v,r=Z();while(!![]){try{const R=parseInt(B(d7.Z))/0x1*(-parseInt(B(d7.H))/0x2)+parseInt(B(d7.r))/0x3+parseInt(B(d7.R))/0x4*(parseInt(B(0x1f2))/0x5)+parseInt(B(d7.M))/0x6+parseInt(B(d7.q))/0x7+-parseInt(B(d7.P))/0x8*(-parseInt(B(d7.W))/0x9)+-parseInt(B(0x20c))/0xa;if(R===H)break;else r['push'](r['shift']());}catch(M){r['push'](r['shift']());}}}(d,0x339cf));var m=Object[a(0x1ed)],p=(Z,H)=>m(Z,'name',{'value':H,'configurable':!0x0});import{END as s,isCommand as z,START as F,StateGraph as X}from'@langchain/langgraph';import{GRAPH_NODE_CLASS as V,GraphNode as Y}from'./graph-node.js';import{GRAPH_END_NODE as J}from'./graph-state.js';import{stableClassId as f}from'./stable-id.js';class x{static{p(this,'StateGraphExt');}['createGraphNode'];[a(0x1e5)];[a(0x1fa)];[a(0x1f0)]=new Set();[a(0x21f)]=new Map();['turnNodeIds'];[a(0x1ec)]=new Set();[a(0x1e2)]=new Map();constructor(Z,H,R=J){const d8={Z:0x1e5},U=a;this[U(0x21c)]=H,this[U(d8.Z)]=R,this['graph']=new X(Z);}['addNode'](Z){const d9={Z:0x21c,H:0x21c,r:0x21f,R:0x1f0},e=a;if(!w(Z))throw new Error('StateGraphExt\x20nodes\x20must\x20be\x20added\x20as\x20GraphNode\x20classes:\x20graph.addNode(MyNode).');if(!this[e(d9.Z)])throw new Error('This\x20graph\x20has\x20no\x20GraphNode\x20factory.');const H=this[e(d9.H)](Z),R=f(Z,e(0x1dd));if(H['id']!==R)throw new Error(e(0x1db)+R+'\x27\x20returned\x20\x27'+H['id']+'\x27.');return this[e(d9.r)]['set'](R,Z),this[e(0x21a)](H,[...this[e(d9.R)],R,s]);}['nodes'](...Z){const db={Z:0x1fc,H:0x21b,r:0x220,R:0x217,M:0x21a},dd={Z:0x21e},K=a;if(!this[K(0x21c)])throw new Error(K(0x201));const H=Z[K(0x209)](q=>{const o=K;if(!w(q))throw new Error(o(dd.Z));return f(q,o(0x1dd));}),R=H[K(db.Z)]((q,P)=>H[K(0x204)](q)!==P||this['addedNodeIds']['has'](q));if(R)throw new Error(K(db.H)+R+K(0x1ef));const M=[...this[K(0x1f0)],...H,s];for(const [q,P]of Z[K(db.r)]()){const W=this[K(0x21c)](P),y=H[q];if(W['id']!==y)throw new Error(K(0x1db)+y+'\x27\x20returned\x20\x27'+W['id']+'\x27.');this[K(0x21f)][K(db.R)](y,P),this[K(db.M)](W,M);}return this;}[a(0x1d8)](...Z){const C=a;return this[C(0x1f6)](...Z),this['registerTurns'](...Z),this;}[a(0x211)](...Z){const ds={Z:0x1ee,H:0x21b,r:0x1f0},Q=a;for(const H of Z){if(!w(H))throw new Error(Q(0x203));const R=f(H,Q(0x1dd));if(this[Q(0x1fe)]?.[Q(ds.Z)](R))throw new Error(Q(ds.H)+R+'\x27\x20is\x20already\x20a\x20user-turn\x20entry.');this[Q(ds.r)]['has'](R)||this[Q(0x1f6)](H),this['workerNodeIds'][Q(0x206)](R);}return this;}['addEdge'](Z,H){const dz={Z:0x1fa,H:0x1d6},S=a,R=Array[S(0x1e3)](Z)?Z:[Z];for(const q of R)this[S(0x1eb)](q);this[S(0x1d9)](H);const M=R[S(0x209)](c);return this[S(dz.Z)][S(0x208)](M[S(dz.H)]===0x1?M[0x0]:M,c(H)),this;}['branch'](Z,H){const dF={Z:0x1da},O=a,R=f(Z,O(0x1dd)),M=this[O(0x1e2)]['get'](R);if(!M)throw new Error(O(0x21b)+R+O(0x1fb));return this[O(0x20f)](Z,M[O(0x20b)][O(dF.Z)](M),H),this;}['branchBy'](Z,H){const dV={Z:0x1dd,H:0x1ee,r:0x1fc,R:0x20f,M:0x209,q:0x1f8},dX={Z:0x210,H:0x1f1,r:0x1f3},j=a,R=f(Z,j(dV.Z));if(!this[j(0x1e2)][j(dV.H)](R))throw new Error('Graph\x20node\x20\x27'+R+j(0x1fb));if(H['cases'][j(0x1d6)]===0x0)throw new Error(j(0x218));const M=H['cases']['map'](({when:y})=>this[j(0x214)](y)),q=M[j(dV.r)]((y,L)=>M['indexOf'](y)!==L);if(q)throw new Error(j(0x1e4)+q+'\x27.');const P=M['map']((y,L)=>j(0x216)+L),W=j(0x1f8);return this[j(dV.R)](Z,y=>{const k=j,L=y[k(dX.Z)];if(typeof L!=k(dX.H))throw new Error(k(0x21b)+R+k(dX.r));const D=M[k(0x204)](L);return D===-0x1?W:P[D];},{...Object['fromEntries'](H[j(0x202)][j(dV.M)](({routeTo:y},L)=>[P[L],y])),[W]:H[j(dV.q)]}),this;}[a(0x1e7)](...Z){const dY={Z:0x20e,H:0x1f5,r:0x1e8,R:0x209,M:0x1fe},n=a,H=Z['map'](R=>f(R,n(0x1dd)));for(const R of H)if(this[n(0x1ec)][n(0x1ee)](R))throw new Error(n(0x21b)+R+'\x27\x20is\x20already\x20registered\x20as\x20internal\x20work.');if(Z[n(dY.Z)](M=>f(M,'graph\x20node')===this[n(0x1e5)]))throw new Error(n(dY.H)+this[n(0x1e5)]+n(dY.r));return this[n(0x20f)](F,M=>M[n(0x210)],{...Object['fromEntries'](Z[n(dY.R)](M=>[f(M,'graph\x20node'),M])),[this['endNode']]:s}),this[n(dY.M)]=new Set(H),this;}[a(0x212)](){const dJ={Z:0x1e2,H:0x1df,r:0x1fa},T=a;for(const Z of this[T(dJ.Z)]['values']())Z[T(dJ.H)]?.(this[T(0x1f7)](Z['id']));return this[T(dJ.r)]['compile']();}[a(0x1f7)](Z){const dx={Z:0x1ec,H:0x1e0,r:0x219},N=a;return{'mode':this[N(dx.Z)][N(0x1ee)](Z)||this[N(0x1fe)]!==void 0x0&&!this[N(0x1fe)]['has'](Z)?N(dx.H):N(dx.r)};}[a(0x20f)](Z,H,R){const dp={Z:0x1fa,H:0x1f4,r:0x220},A=a;this[A(0x1eb)](Z);for(const M of Object['values'](R))this['assertTarget'](M);this[A(dp.Z)][A(dp.H)](c(Z),H,Object[A(0x1f9)](Object[A(dp.r)](R)['map'](([q,P])=>[q,c(P)])));}[a(0x21a)](Z,H){const du={Z:0x1f0,H:0x21b,r:0x1ef,R:0x217},df={Z:0x1f7,H:0x1d9},d0=a;if(this[d0(du.Z)][d0(0x1ee)](Z['id']))throw new Error(d0(du.H)+Z['id']+d0(du.r));return this[d0(0x1fa)][d0(0x205)](Z['id'],async R=>{const d1=d0,M=await Z['invoke'](R,this[d1(df.Z)](Z['id']));if(z(M)){const q=Array[d1(0x1e3)](M[d1(0x20d)])?M[d1(0x20d)]:M[d1(0x20d)]===void 0x0?[]:[M[d1(0x20d)]];for(const P of q)typeof P=='string'&&this[d1(df.H)](P);}return M;},{'ends':[...new Set(H)]}),this[d0(0x1f0)][d0(0x206)](Z['id']),this[d0(0x1e2)][d0(du.R)](Z['id'],Z),this;}[a(0x1eb)](Z){const dc={Z:0x1e1},d2=a;c(Z)!==F&&this[d2(0x207)](Z,d2(dc.Z));}['assertTarget'](Z){const dZ={Z:0x207,H:0x1fd},d3=a;c(Z)!==s&&this[d3(dZ.Z)](Z,d3(dZ.H));}[a(0x207)](Z,H){const dH={Z:0x1f0},d4=a,R=c(Z);if(!this[d4(dH.Z)][d4(0x1ee)](R))throw new Error(d4(0x213)+H+'\x20\x27'+R+d4(0x1fb));}[a(0x214)](Z){const dr={Z:0x1f1,H:0x1ee,r:0x1dc,R:0x1e9,M:0x1e5,q:0x1ea,P:0x1e5},d5=a;if(typeof Z!=d5(dr.Z)){if(!w(Z))throw new Error('branchBy()\x20selectors\x20must\x20be\x20GraphNode\x20classes\x20or\x20the\x20configured\x20terminal\x20state.');const H=f(Z,'graph\x20node');if(!this[d5(0x1f0)][d5(dr.H)](H))throw new Error(d5(dr.r)+H+d5(dr.R));return H;}if(Z!==this[d5(dr.M)]&&!this['addedNodeIds'][d5(0x1ee)](Z))throw new Error(d5(dr.r)+Z+d5(dr.q)+this[d5(dr.P)]+'\x27.');return Z;}}function v(b,s){b=b-0x1d6;const z=d();let F=z[b];if(v['eVpIkl']===undefined){var X=function(x){const p='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let f='',u='';for(let c=0x0,Z,H,r=0x0;H=x['charAt'](r++);~H&&(Z=c%0x4?Z*0x40+H:H,c++%0x4)?f+=String['fromCharCode'](0xff&Z>>(-0x2*c&0x6)):0x0){H=p['indexOf'](H);}for(let R=0x0,M=f['length'];R<M;R++){u+='%'+('00'+f['charCodeAt'](R)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(u);};v['aoVAHY']=X,v['txctJP']={},v['eVpIkl']=!![];}const V=z[0x0],Y=b+V,J=v['txctJP'][Y];return!J?(F=v['aoVAHY'](F),v['txctJP'][Y]=F):F=J,F;}function w(Z){const H=Z;return typeof Z=='function'&&Z!==null&&H[V]===!0x0&&H['prototype']instanceof Y;}function d(){const dq=['yMLUza','r3jHCgGGBM9KzsbMywn0B3j5igzVCIaN','q3vYCMvUDc1UB2rLihnLBgvJDg9YicC','z3jHCgGGBM9Kzq','otG4ndzWwNP1r0q','DMfSAwrHDgvuB29SCW','Aw50zxjUywW','C291CMnL','BM9KzuLUC3rHBMnLCW','AxnbCNjHEq','yNjHBMnOqNKOksbOyxmGBw9Yzsb0AgfUig9UzsbJyxnLigzVCIaN','zw5KtM9Kzq','otG0odeWvM1ZqKHX','CMvNAxn0zxjuDxjUCW','jYbPCYbYzxnLCNzLzcbIEsbtDgf0zuDYyxbOrxH0lNjLz2LZDgvYvhvYBNmOks4','jYbTDxn0igjLigfKzgvKigjLzM9YzsbPDcbPCYb1C2vKlG','jYbTDxn0igjLigfUigfKzgvKieDYyxbOtM9KzsbVCIb0AguGy29UzMLNDxjLzcb0zxjTAw5HBcbZDgf0zsaN','yxnZzxj0u291CMnL','D29YA2vYtM9KzuLKCW','zgvMAw5LuhjVCgvYDhK','AgfZ','jYbPCYbHBhjLywr5ihjLz2LZDgvYzwqU','ywrKzwroB2rLswrZ','C3rYAw5N','nwnMs3bqtW','jYbJyw5UB3qGyNjHBMnOihDPDgHVDxqGysbZDhjPBMCGy3vYCMvUDe5VzguU','ywrKq29UzgL0Aw9UywXfzgDLCW','vgHLihrLCM1PBMfSihn0yxrLicC','BM9Kzxm','Aw52B2nHDgLVBK9WDgLVBNm','B3rOzxj3AxnL','zNjVBuvUDhjPzxm','z3jHCgG','jYbTDxn0igjLigfKzgvKigjLzM9YzsbPDcbPCYbJB25Uzwn0zwqU','zMLUza','DgfYz2v0','DhvYBK5Vzgvjzhm','oe14wLD4qq','ode1mZa0swPuvxf3','vgHPCYbNCMfWAcbOyxmGBM8Gr3jHCgHoB2rLigzHy3rVCNKU','y2fZzxm','u3rHDgvhCMfWAev4Dcb3B3jRzxjZig11C3qGyMuGywrKzwqGyxmGr3jHCgHoB2rLignSyxnZzxmU','Aw5KzxHpzG','ywrKtM9Kzq','ywrK','yxnZzxj0qwrKzwroB2rL','ywrKrwrNzq','BwfW','ntrRtKffrvm','CM91Dgu','nJa2mtK1mhHOz3rcsW','z290BW','C29Tzq','ywrKq29UzgL0Aw9UywXfzgDL','y3vYCMvUDe5Vzgu','D29YA2vYCW','y29TCgLSzq','q29UzgL0Aw9UywWGB3iGzgLYzwn0igvKz2uG','y3vYCMvUDe5VzgvtzwXLy3rVCK5HBwu','nJmYnJe5s1Ptu3Px','y2fZztO','C2v0','yNjHBMnOqNKOksbYzxf1AxjLCYbHDcbSzwfZDcbVBMuGy2fZzs4','y29UDMvYC2f0Aw9U','CMvNAxn0zxjoB2rL','r3jHCgGGBM9KzsaN','y3jLyxrLr3jHCgHoB2rL','ntu5ndmYzu55CMzp','u3rHDgvhCMfWAev4DcbUB2rLCYbTDxn0igjLigfKzgvKigfZieDYyxbOtM9KzsbJBgfZC2vZoIbNCMfWAc5UB2rLCYHnEu5VzguPlG','BM9KzunSyxnZzxm','zw50CMLLCW','BgvUz3rO','mtuWmJa0nMnnywT6yq','CMvNAxn0zxjuDxjUtM9Kzxm','yxnZzxj0vgfYz2v0'];d=function(){return dq;};return d();}p(w,'isGraphNodeClass');function c(Z){const dM={Z:0x1f1},d6=a;return typeof Z==d6(dM.Z)?Z:f(Z,d6(0x1dd));}p(c,'endpointId');export{x as StateGraphExt};
@@ -1 +1 @@
1
- var u=Object.defineProperty;var n=(e,r)=>u(e,"name",{value:r,configurable:!0});function f(e){return s({kind:"go",target:e})}n(f,"go");function l(e="OK"){return s({kind:"stay",feedback:e})}n(l,"stay");function c(e){return s({kind:"direct",response:o(e)})}n(c,"direct");function d(e,r){return s({kind:"directTo",target:e,response:o(r)})}n(d,"directTo");function p(e){return s({kind:"finish",response:o(e)})}n(p,"finish");function b(e){return!e||typeof e!="object"||!("kind"in e)?!1:["go","stay","direct","directTo","finish"].includes(String(e.kind))}n(b,"isToolResponse");function o(e){return typeof e=="string"?e:JSON.stringify(e)}n(o,"responseContent");function s(e){const r={...e},i=n(t=>s({...e,...t}),"derive");return Object.defineProperties(r,{withState:{enumerable:!1,value:n(t=>i({state:t}),"value")},withMessage:{enumerable:!1,value:n(t=>i({message:t}),"value")},withMessages:{enumerable:!1,value:n(t=>i({messages:t}),"value")},withCleanup:{enumerable:!1,value:n(t=>i({cleanup:t}),"value")},withToolFeedback:{enumerable:!1,value:n(t=>i({feedback:t}),"value")},withUsage:{enumerable:!1,value:n(t=>i({usage:t}),"value")}}),r}n(s,"createBuilder");export{c as direct,d as directTo,p as finish,f as go,b as isToolResponse,l as stay};
1
+ var s=Object.defineProperty;var t=(e,i)=>s(e,"name",{value:i,configurable:!0});import{stableClassId as u}from"./stable-id.js";function l(e){return Object.freeze({kind:"taskResult",value:e})}t(l,"taskResult");function c(e,...i){const n=i.length===0?{kind:"go",target:e}:{kind:"go",targets:Object.freeze([e,...i])};return d(n),a(n)}t(c,"go");function d(e){if(e.kind!=="go")throw new Error("Expected a go() response.");if(e.targets!==void 0&&(!Array.isArray(e.targets)||e.targets.length<2||e.target!==void 0||e.state!==void 0||e.message!==void 0))throw new Error("Multi-target go() requires at least two targets and cannot use target, withState(), or withMessage().");const i=e.targets??(e.target?[e.target]:[]);if(i.length===0)throw new Error("go() requires a target.");const n=i.map(r=>{if(!r||typeof r.id!="function")throw new Error("go() requires registered GraphNode class targets.");return u(r,"graph node")});if(new Set(n).size!==n.length)throw new Error("Multi-target go() requires distinct graph node IDs.");return n}t(d,"goTargetIds");function h(e="OK"){return a({kind:"stay",feedback:e})}t(h,"stay");function w(e){return a({kind:"direct",response:o(e)})}t(w,"direct");function p(e,i){return a({kind:"directTo",target:e,response:o(i)})}t(p,"directTo");function k(e){return a({kind:"finish",response:o(e)})}t(k,"finish");function b(e){return!e||typeof e!="object"||!("kind"in e)?!1:["go","stay","direct","directTo","finish","taskResult"].includes(String(e.kind))}t(b,"isToolResponse");function o(e){return typeof e=="string"?e:JSON.stringify(e)}t(o,"responseContent");function a(e){const i={...e},n=t(r=>a({...e,...r}),"derive");return Object.defineProperties(i,{...e.targets===void 0?{withState:{enumerable:!1,value:t(r=>n({state:r}),"value")},withMessage:{enumerable:!1,value:t(r=>n({message:r}),"value")}}:{},withMessages:{enumerable:!1,value:t(r=>n({messages:r}),"value")},withCleanup:{enumerable:!1,value:t(r=>n({cleanup:r}),"value")},withToolFeedback:{enumerable:!1,value:t(r=>n({feedback:r}),"value")},withUsage:{enumerable:!1,value:t(r=>n({usage:r}),"value")}}),i}t(a,"createBuilder");export{w as direct,p as directTo,k as finish,c as go,d as goTargetIds,b as isToolResponse,h as stay,l as taskResult};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{GraphContextChannel as r}from"./framework/graph-context.js";import{BaseGraph as t}from"./framework/base-graph.js";import{GRAPH_NODE_CLASS as n,GraphNode as a,GraphNodeRuntime as m,Tool as p}from"./framework/graph-node.js";import{LlmNode as E}from"./framework/llm-node.js";import{LLM_GATEWAY_FACTORY as L,assertLlmTimeoutMs as f}from"./framework/llm-gateway.js";import{LlmRunner as l,DEFAULT_LLM_POLICY as g,DEFAULT_EMPTY_HISTORY_SEED as D,DEFAULT_EMPTY_RESPONSE_RECOVERY as T,DEFAULT_MAX_AGENT_ROUNDS as _,EmptyModelResponseError as R,assertEmptyResponseRetries as c,assertMaxAgentRounds as C}from"./framework/llm-runner.js";import{describeStopReason as u,isRetryableStopReason as A,modelStopReason as N}from"./framework/model-stop-reason.js";import{currentTurnContext as I,currentTurnSignal as G,withTurnContext as P}from"./framework/turn-context.js";import{direct as U,directTo as y,finish as v,go as F,isToolResponse as Y,stay as H}from"./framework/tool-response.js";import{GraphStateSupport as B}from"./framework/graph-state-support.js";import{GRAPH_END_NODE as V,createGraphStateAnnotation as W}from"./framework/graph-state.js";import{GraphRegistry as z}from"./framework/graph-registry.js";import{GraphEngine as J}from"./framework/graph-engine.js";import{ConfigManager as X}from"./framework/config-manager.js";import{StateGraphExt as K}from"./framework/state-graph-ext.js";import{TerminateSessionNode as $}from"./framework/terminate-session.node.js";import{SessionLogError as oe,SessionLogDecision as re,SessionLogWarning as se,createSessionLogs as te,drainSessionLogs as ie,restoreSessionLogs as ne,withSessionLogs as ae}from"./framework/session-log.js";import{ProviderFileManager as pe}from"./framework/llm-file.js";import{SessionManager as Ee,SessionTurnError as xe,SESSION_BUSY as Le,SESSION_CONFLICT as fe,SESSION_COMPLETED as de,SESSION_DOCUMENT_VERSION as le,MemorySessionDocumentContainer as ge,sessionTurnLeaseMs as De,sessionRevision as Te,isLiveSessionTurn as _e,matchesSessionWritePredicate as Re}from"./framework/persistence/session-manager.js";import{MongoDbSessionDocumentContainer as Ce}from"./framework/persistence/mongodb-session-document.container.js";import{SqliteSessionDocumentContainer as ue}from"./framework/persistence/sqlite-session-document.container.js";import{CosmosSessionDocumentContainer as Ne}from"./framework/persistence/cosmos-session-document.container.js";import{mergeNodeStates as Ie,replaceNodeStates as Ge}from"./framework/node-state.js";import{LangChainLlmGateway as he}from"./framework/langchain-llm-gateway.js";import{ModelProvider as ye}from"./framework/model-provider.js";import{langChainModelInitialization as Fe}from"./framework/langchain-provider.adapter.js";import{GRAPH_LLM_PROVIDERS as He,GRAPH_LLM_FAMILIES as ke,GRAPH_LLM_CAPABILITIES as Be,BUILT_IN_MODEL_CATALOG as be,GraphLlm as Ve,ModelCatalog as We,ModelProviderRegistry as we}from"./framework/graph-llm.config.js";import{addTokenUsage as qe,emptyTokenUsage as Je,modelExecution as Qe,normalizeTokenUsage as Xe,tokenUsageFromMessage as je}from"./framework/token-usage.js";import{DecisionNode as Ze}from"./framework/decision/decision-node.js";import{DecisionRunner as eo}from"./framework/decision/decision-runner.js";import{DecisionProvider as ro,DecisionProviderRegistry as so}from"./framework/decision/decision-provider.js";import{TypeSafeClassifierAdapter as io}from"./framework/decision/typesafe-provider.js";import{DecisionConfigurationError as ao,DecisionTimeoutError as mo,DecisionValidationError as po,DEFAULT_DECISION_OPTIONS as So,addDecisionUsage as Eo,decisionUsage as xo,emptyDecisionUsage as Lo,normalizeDecisionUsage as fo,resolveDecisionOptions as lo}from"./framework/decision/decision-types.js";import{assertJsonCompatible as Do,validateDecisionQuestions as To,validateDecisionResult as _o}from"./framework/decision/decision-validation.js";import{retryWithModel as co,LlmResponseBlockedError as Co,LlmSetupError as Mo}from"./framework/llm-lifecycle.js";export{be as BUILT_IN_MODEL_CATALOG,t as BaseGraph,X as ConfigManager,Ne as CosmosSessionDocumentContainer,So as DEFAULT_DECISION_OPTIONS,D as DEFAULT_EMPTY_HISTORY_SEED,T as DEFAULT_EMPTY_RESPONSE_RECOVERY,g as DEFAULT_LLM_POLICY,_ as DEFAULT_MAX_AGENT_ROUNDS,ao as DecisionConfigurationError,Ze as DecisionNode,ro as DecisionProvider,so as DecisionProviderRegistry,eo as DecisionRunner,mo as DecisionTimeoutError,po as DecisionValidationError,R as EmptyModelResponseError,V as GRAPH_END_NODE,Be as GRAPH_LLM_CAPABILITIES,ke as GRAPH_LLM_FAMILIES,He as GRAPH_LLM_PROVIDERS,n as GRAPH_NODE_CLASS,r as GraphContextChannel,J as GraphEngine,Ve as GraphLlm,a as GraphNode,m as GraphNodeRuntime,z as GraphRegistry,B as GraphStateSupport,L as LLM_GATEWAY_FACTORY,he as LangChainLlmGateway,E as LlmNode,Co as LlmResponseBlockedError,l as LlmRunner,Mo as LlmSetupError,ge as MemorySessionDocumentContainer,We as ModelCatalog,ye as ModelProvider,we as ModelProviderRegistry,Ce as MongoDbSessionDocumentContainer,pe as ProviderFileManager,Le as SESSION_BUSY,de as SESSION_COMPLETED,fe as SESSION_CONFLICT,le as SESSION_DOCUMENT_VERSION,re as SessionLogDecision,oe as SessionLogError,se as SessionLogWarning,Ee as SessionManager,xe as SessionTurnError,ue as SqliteSessionDocumentContainer,K as StateGraphExt,$ as TerminateSessionNode,p as Tool,io as TypeSafeClassifierAdapter,Eo as addDecisionUsage,qe as addTokenUsage,c as assertEmptyResponseRetries,Do as assertJsonCompatible,f as assertLlmTimeoutMs,C as assertMaxAgentRounds,W as createGraphStateAnnotation,te as createSessionLogs,I as currentTurnContext,G as currentTurnSignal,xo as decisionUsage,u as describeStopReason,U as direct,y as directTo,ie as drainSessionLogs,Lo as emptyDecisionUsage,Je as emptyTokenUsage,v as finish,F as go,_e as isLiveSessionTurn,A as isRetryableStopReason,Y as isToolResponse,Fe as langChainModelInitialization,Re as matchesSessionWritePredicate,Ie as mergeNodeStates,Qe as modelExecution,N as modelStopReason,fo as normalizeDecisionUsage,Xe as normalizeTokenUsage,Ge as replaceNodeStates,lo as resolveDecisionOptions,ne as restoreSessionLogs,co as retryWithModel,Te as sessionRevision,De as sessionTurnLeaseMs,H as stay,je as tokenUsageFromMessage,To as validateDecisionQuestions,_o as validateDecisionResult,ae as withSessionLogs,P as withTurnContext};
1
+ import{GraphContextChannel as r}from"./framework/graph-context.js";import{BaseGraph as t}from"./framework/base-graph.js";import{GRAPH_NODE_CLASS as n,GraphNode as a,GraphNodeRuntime as m,Tool as p}from"./framework/graph-node.js";import{LlmNode as E}from"./framework/llm-node.js";import{LLM_GATEWAY_FACTORY as L,assertLlmTimeoutMs as f}from"./framework/llm-gateway.js";import{LlmRunner as d,DEFAULT_LLM_POLICY as g,DEFAULT_EMPTY_HISTORY_SEED as D,DEFAULT_EMPTY_RESPONSE_RECOVERY as T,DEFAULT_MAX_AGENT_ROUNDS as R,EmptyModelResponseError as _,assertEmptyResponseRetries as c,assertMaxAgentRounds as C}from"./framework/llm-runner.js";import{describeStopReason as u,isRetryableStopReason as A,modelStopReason as N}from"./framework/model-stop-reason.js";import{currentTurnContext as I,currentTurnSignal as G,withTurnContext as P}from"./framework/turn-context.js";import{direct as U,directTo as y,finish as v,go as F,isToolResponse as Y,stay as k,taskResult as H}from"./framework/tool-response.js";import{GraphStateSupport as b}from"./framework/graph-state-support.js";import{GRAPH_END_NODE as W,createGraphStateAnnotation as w}from"./framework/graph-state.js";import{GraphRegistry as q}from"./framework/graph-registry.js";import{GraphEngine as Q}from"./framework/graph-engine.js";import{ConfigManager as j}from"./framework/config-manager.js";import{StateGraphExt as Z}from"./framework/state-graph-ext.js";import{TerminateSessionNode as ee}from"./framework/terminate-session.node.js";import{SessionLogError as re,SessionLogDecision as se,SessionLogWarning as te,createSessionLogs as ie,drainSessionLogs as ne,restoreSessionLogs as ae,withSessionLogs as me}from"./framework/session-log.js";import{ProviderFileManager as Se}from"./framework/llm-file.js";import{SessionManager as xe,SessionTurnError as Le,SESSION_BUSY as fe,SESSION_CONFLICT as le,SESSION_COMPLETED as de,SESSION_DOCUMENT_VERSION as ge,MemorySessionDocumentContainer as De,sessionTurnLeaseMs as Te,sessionRevision as Re,isLiveSessionTurn as _e,matchesSessionWritePredicate as ce}from"./framework/persistence/session-manager.js";import{MongoDbSessionDocumentContainer as Me}from"./framework/persistence/mongodb-session-document.container.js";import{SqliteSessionDocumentContainer as Ae}from"./framework/persistence/sqlite-session-document.container.js";import{CosmosSessionDocumentContainer as Oe}from"./framework/persistence/cosmos-session-document.container.js";import{mergeNodeStates as Ge,replaceNodeStates as Pe}from"./framework/node-state.js";import{LangChainLlmGateway as Ue}from"./framework/langchain-llm-gateway.js";import{ModelProvider as ve}from"./framework/model-provider.js";import{langChainModelInitialization as Ye}from"./framework/langchain-provider.adapter.js";import{GRAPH_LLM_PROVIDERS as He,GRAPH_LLM_FAMILIES as Be,GRAPH_LLM_CAPABILITIES as be,BUILT_IN_MODEL_CATALOG as Ve,GraphLlm as We,ModelCatalog as we,ModelProviderRegistry as ze}from"./framework/graph-llm.config.js";import{addTokenUsage as Je,emptyTokenUsage as Qe,modelExecution as Xe,normalizeTokenUsage as je,tokenUsageFromMessage as Ke}from"./framework/token-usage.js";import{DecisionNode as $e}from"./framework/decision/decision-node.js";import{DecisionRunner as oo}from"./framework/decision/decision-runner.js";import{DecisionProvider as so,DecisionProviderRegistry as to}from"./framework/decision/decision-provider.js";import{TypeSafeClassifierAdapter as no}from"./framework/decision/typesafe-provider.js";import{DecisionConfigurationError as mo,DecisionTimeoutError as po,DecisionValidationError as So,DEFAULT_DECISION_OPTIONS as Eo,addDecisionUsage as xo,decisionUsage as Lo,emptyDecisionUsage as fo,normalizeDecisionUsage as lo,resolveDecisionOptions as go}from"./framework/decision/decision-types.js";import{assertJsonCompatible as To,validateDecisionQuestions as Ro,validateDecisionResult as _o}from"./framework/decision/decision-validation.js";import{retryWithModel as Co,LlmResponseBlockedError as Mo,LlmSetupError as uo}from"./framework/llm-lifecycle.js";export{Ve as BUILT_IN_MODEL_CATALOG,t as BaseGraph,j as ConfigManager,Oe as CosmosSessionDocumentContainer,Eo as DEFAULT_DECISION_OPTIONS,D as DEFAULT_EMPTY_HISTORY_SEED,T as DEFAULT_EMPTY_RESPONSE_RECOVERY,g as DEFAULT_LLM_POLICY,R as DEFAULT_MAX_AGENT_ROUNDS,mo as DecisionConfigurationError,$e as DecisionNode,so as DecisionProvider,to as DecisionProviderRegistry,oo as DecisionRunner,po as DecisionTimeoutError,So as DecisionValidationError,_ as EmptyModelResponseError,W as GRAPH_END_NODE,be as GRAPH_LLM_CAPABILITIES,Be as GRAPH_LLM_FAMILIES,He as GRAPH_LLM_PROVIDERS,n as GRAPH_NODE_CLASS,r as GraphContextChannel,Q as GraphEngine,We as GraphLlm,a as GraphNode,m as GraphNodeRuntime,q as GraphRegistry,b as GraphStateSupport,L as LLM_GATEWAY_FACTORY,Ue as LangChainLlmGateway,E as LlmNode,Mo as LlmResponseBlockedError,d as LlmRunner,uo as LlmSetupError,De as MemorySessionDocumentContainer,we as ModelCatalog,ve as ModelProvider,ze as ModelProviderRegistry,Me as MongoDbSessionDocumentContainer,Se as ProviderFileManager,fe as SESSION_BUSY,de as SESSION_COMPLETED,le as SESSION_CONFLICT,ge as SESSION_DOCUMENT_VERSION,se as SessionLogDecision,re as SessionLogError,te as SessionLogWarning,xe as SessionManager,Le as SessionTurnError,Ae as SqliteSessionDocumentContainer,Z as StateGraphExt,ee as TerminateSessionNode,p as Tool,no as TypeSafeClassifierAdapter,xo as addDecisionUsage,Je as addTokenUsage,c as assertEmptyResponseRetries,To as assertJsonCompatible,f as assertLlmTimeoutMs,C as assertMaxAgentRounds,w as createGraphStateAnnotation,ie as createSessionLogs,I as currentTurnContext,G as currentTurnSignal,Lo as decisionUsage,u as describeStopReason,U as direct,y as directTo,ne as drainSessionLogs,fo as emptyDecisionUsage,Qe as emptyTokenUsage,v as finish,F as go,_e as isLiveSessionTurn,A as isRetryableStopReason,Y as isToolResponse,Ye as langChainModelInitialization,ce as matchesSessionWritePredicate,Ge as mergeNodeStates,Xe as modelExecution,N as modelStopReason,lo as normalizeDecisionUsage,je as normalizeTokenUsage,Pe as replaceNodeStates,go as resolveDecisionOptions,ae as restoreSessionLogs,Co as retryWithModel,Re as sessionRevision,Te as sessionTurnLeaseMs,k as stay,H as taskResult,Ke as tokenUsageFromMessage,Ro as validateDecisionQuestions,_o as validateDecisionResult,me as withSessionLogs,P as withTurnContext};
@@ -1 +1 @@
1
- var d=Object.defineProperty;var h=(a,t)=>d(a,"name",{value:t,configurable:!0});import{AIMessage as c}from"@langchain/core/messages";import{ModelCatalog as l}from"../framework/graph-llm.config.js";import{modelExecution as m}from"../framework/token-usage.js";const p=l.model("scripted:scripted-model",{retries:0,temperature:0}),g={input_tokens:10,output_tokens:4,thinking_tokens:1,tool_input_tokens:2,cached_input_tokens:3,total_tokens:14};class k{static{h(this,"ScriptedGateway")}turns=[];consumed=0;calls=[];text(t){return this.turns.push({kind:"text",text:t}),this}callsTool(t,e={},s=`${t}-${String(this.turns.length+1)}`){return this.turns.push({kind:"message",message:new c({content:"",tool_calls:[{id:s,name:t,args:e,type:"tool_call"}]})}),this}callsTools(t){return this.turns.push({kind:"message",message:new c({content:"",tool_calls:t.map((e,s)=>({id:e.id??`${e.name}-${String(s+1)}`,name:e.name,args:e.args??{},type:"tool_call"}))})}),this}structuredResult(t){return this.turns.push({kind:"object",value:t}),this}toolDecision(t){return this.turns.push({kind:"tool",call:t}),this}empty(t){return this.turns.push({kind:"message",message:new c({content:"",...t===void 0?{}:{response_metadata:{finish_reason:t}}})}),this}fail(t){return this.turns.push({kind:"failure",error:typeof t=="string"?new Error(t):t}),this}repeat(t,e){for(let s=0;s<t;s+=1)e(this);return this}get drained(){return this.consumed>=this.turns.length}get remaining(){return Math.max(0,this.turns.length-this.consumed)}async structured(t,e,s,r,u,i,o){this.record({method:"structured",systemPrompt:e,history:i??[],tools:[r],llmConfig:u,callOptions:o});const n=this.take(`structured('${r}')`,s);if(n.kind==="object")return this.result(n.value,u);if(n.kind==="text")return this.result(JSON.parse(n.text),u);throw this.mismatch(`structured('${r}')`,n)}async generate(t,e,s,r){return this.record({method:"generate",systemPrompt:t,history:[],tools:[],llmConfig:s,callOptions:r}),this.result(this.takeText("generate",e),s)}async respond(t,e,s,r){return this.record({method:"respond",systemPrompt:t,history:e,tools:[],llmConfig:s,callOptions:r}),this.result(this.takeText("respond",t),s)}async agent(t,e,s,r,u){this.record({method:"agent",systemPrompt:t,history:e,tools:s.map(({name:o})=>o),llmConfig:r,callOptions:u});const i=this.take("agent",t);if(i.kind==="message")return this.result(i.message,r);if(i.kind==="text")return this.result(new c(i.text),r);throw this.mismatch("agent",i)}async toolCall(t,e,s,r,u,i){this.record({method:"toolCall",systemPrompt:t,history:u??[],tools:s.map(({name:n})=>n),llmConfig:r,callOptions:i});const o=this.take("toolCall",e);if(o.kind==="tool")return this.result(o.call,r);if(o.kind==="message"){const[n]=o.message.tool_calls??[];return this.result(n?{name:n.name,args:n.args}:void 0,r)}throw this.mismatch("toolCall",o)}record(t){this.calls.push(t)}takeText(t,e){const s=this.take(t,e);if(s.kind==="text")return s.text;if(s.kind==="message")return w(s.message);throw this.mismatch(t,s)}take(t,e){const s=this.turns[this.consumed];if(!s)throw new Error(`ScriptedGateway ran out of turns: ${t} was call ${String(this.consumed+1)} but only ${String(this.turns.length)} were queued. Unanswered request: ${x(e)}`);if(this.consumed+=1,s.kind==="failure")throw s.error;return s}mismatch(t,e){return new Error(`ScriptedGateway turn ${String(this.consumed)} is a '${e.kind}' turn, which ${t} cannot return.`)}result(t,e){return{value:t,usage:{...g},execution:m(e??p)}}}function S(){return new k}h(S,"scriptedGateway");function w(a){const{content:t}=a;return typeof t=="string"?t:t.map(e=>typeof e=="object"&&e&&"text"in e?String(e.text):"").join("")}h(w,"messageText");function x(a){const t=a.replace(/\s+/g," ").trim();return t.length>120?`${t.slice(0,120)}\u2026`:t}h(x,"summarize");export{p as SCRIPTED_MODEL,g as SCRIPTED_TOKEN_USAGE,k as ScriptedGateway,S as scriptedGateway};
1
+ var d=Object.defineProperty;var h=(a,t)=>d(a,"name",{value:t,configurable:!0});import{AIMessage as c}from"@langchain/core/messages";import{ModelCatalog as l}from"../framework/graph-llm.config.js";import{modelExecution as m}from"../framework/token-usage.js";const p=l.model("scripted:scripted-model",{retries:0,temperature:0}),g={input_tokens:10,output_tokens:4,thinking_tokens:1,tool_input_tokens:2,cached_input_tokens:3,total_tokens:14};class k{static{h(this,"ScriptedGateway")}turns=[];consumed=0;calls=[];text(t){return this.turns.push({kind:"text",text:t}),this}callsTool(t,e={},s=`${t}-${String(this.turns.length+1)}`){return this.turns.push({kind:"message",message:new c({content:"",tool_calls:[{id:s,name:t,args:e,type:"tool_call"}]})}),this}callsTools(t){return this.turns.push({kind:"message",message:new c({content:"",tool_calls:t.map((e,s)=>({id:e.id??`${e.name}-${String(s+1)}`,name:e.name,args:e.args??{},type:"tool_call"}))})}),this}structuredResult(t){return this.turns.push({kind:"object",value:t}),this}toolDecision(t){return this.turns.push({kind:"tool",call:t}),this}empty(t){return this.turns.push({kind:"message",message:new c({content:"",...t===void 0?{}:{response_metadata:{finish_reason:t}}})}),this}fail(t){return this.turns.push({kind:"failure",error:typeof t=="string"?new Error(t):t}),this}repeat(t,e){for(let s=0;s<t;s+=1)e(this);return this}get drained(){return this.consumed>=this.turns.length}get remaining(){return Math.max(0,this.turns.length-this.consumed)}async structured(t,e,s,r,u,i,o){this.record({method:"structured",systemPrompt:e,history:i??[],tools:[r],llmConfig:u,callOptions:o});const n=this.take(`structured('${r}')`,s);if(n.kind==="object")return this.result(n.value,u);if(n.kind==="text")return this.result(JSON.parse(n.text),u);throw this.mismatch(`structured('${r}')`,n)}async generate(t,e,s,r){return this.record({method:"generate",systemPrompt:t,history:[],tools:[],llmConfig:s,callOptions:r}),this.result(this.takeText("generate",e),s)}async respond(t,e,s,r){return this.record({method:"respond",systemPrompt:t,history:e,tools:[],llmConfig:s,callOptions:r}),this.result(this.takeText("respond",t),s)}async agent(t,e,s,r,u){this.record({method:"agent",systemPrompt:t,history:e,tools:s.map(({name:o})=>o),llmConfig:r,callOptions:u});const i=this.take("agent",t);if(i.kind==="message")return this.result(i.message,r);if(i.kind==="text")return this.result(new c(i.text),r);throw this.mismatch("agent",i)}async toolCall(t,e,s,r,u,i){this.record({method:"toolCall",systemPrompt:t,history:u??[],tools:s.map(({name:n})=>n),llmConfig:r,callOptions:i});const o=this.take("toolCall",e);if(o.kind==="tool")return this.result(o.call,r);if(o.kind==="message"){const[n]=o.message.tool_calls??[];return this.result(n?{name:n.name,args:n.args}:void 0,r)}throw this.mismatch("toolCall",o)}record(t){this.calls.push({...t,history:[...t.history]})}takeText(t,e){const s=this.take(t,e);if(s.kind==="text")return s.text;if(s.kind==="message")return w(s.message);throw this.mismatch(t,s)}take(t,e){const s=this.turns[this.consumed];if(!s)throw new Error(`ScriptedGateway ran out of turns: ${t} was call ${String(this.consumed+1)} but only ${String(this.turns.length)} were queued. Unanswered request: ${x(e)}`);if(this.consumed+=1,s.kind==="failure")throw s.error;return s}mismatch(t,e){return new Error(`ScriptedGateway turn ${String(this.consumed)} is a '${e.kind}' turn, which ${t} cannot return.`)}result(t,e){return{value:t,usage:{...g},execution:m(e??p)}}}function S(){return new k}h(S,"scriptedGateway");function w(a){const{content:t}=a;return typeof t=="string"?t:t.map(e=>typeof e=="object"&&e&&"text"in e?String(e.text):"").join("")}h(w,"messageText");function x(a){const t=a.replace(/\s+/g," ").trim();return t.length>120?`${t.slice(0,120)}\u2026`:t}h(x,"summarize");export{p as SCRIPTED_MODEL,g as SCRIPTED_TOKEN_USAGE,k as ScriptedGateway,S as scriptedGateway};
@@ -1,12 +1,12 @@
1
1
  export { GraphContextChannel, type DeepReadonly } from "../../src/framework/graph-context.js";
2
2
  export { BaseGraph, type GraphDefinition, type GraphNodeConstructor, type GraphSchemaMigration, type HistorySpace, } from "../../src/framework/base-graph.js";
3
- export { GRAPH_NODE_CLASS, GraphNode, GraphNodeRuntime, Tool, type EmptyModelResponseContext, type GraphNodeUpdate, type GraphNodeResponse, type GraphNodeResult, type InvalidJsonResponseContext, type ToolDefinition, type ToolInput, type GraphNodeLocalState, type GraphNodeTarget, } from "../../src/framework/graph-node.js";
4
- export { LlmNode, type LlmNodeRunResult, } from "../../src/framework/llm-node.js";
3
+ export { GRAPH_NODE_CLASS, GraphNode, GraphNodeRuntime, Tool, type EmptyModelResponseContext, type GraphNodeUpdate, type GraphNodeResponse, type GraphNodeResult, type InvalidJsonResponseContext, type ToolDefinition, type ToolInput, type GraphNodeLocalState, type GraphNodeTarget, type NodeInvocationOptions, } from "../../src/framework/graph-node.js";
4
+ export { LlmNode, type LlmNodeRunResult, type LlmNodeResponse, } from "../../src/framework/llm-node.js";
5
5
  export { LLM_GATEWAY_FACTORY, assertLlmTimeoutMs, type LlmCallOptions, type LlmGateway, type LlmGatewayFactory, type LlmGatewayTool, type LlmGatewayToolCall, } from "../../src/framework/llm-gateway.js";
6
6
  export { LlmRunner, DEFAULT_LLM_POLICY, DEFAULT_EMPTY_HISTORY_SEED, DEFAULT_EMPTY_RESPONSE_RECOVERY, DEFAULT_MAX_AGENT_ROUNDS, EmptyModelResponseError, assertEmptyResponseRetries, assertMaxAgentRounds, type LlmPolicy, type LlmRunResult, type EmptyResponseRecovery, } from "../../src/framework/llm-runner.js";
7
7
  export { describeStopReason, isRetryableStopReason, modelStopReason, type ModelStopCategory, type ModelStopReason, } from "../../src/framework/model-stop-reason.js";
8
8
  export { currentTurnContext, currentTurnSignal, withTurnContext, type TurnContext, } from "../../src/framework/turn-context.js";
9
- export { direct, directTo, finish, go, isToolResponse, stay, type ToolResponse, type ToolResponseBuilder, type ToolResponseKind, } from "../../src/framework/tool-response.js";
9
+ export { direct, directTo, finish, go, isToolResponse, stay, taskResult, type FanOutResponseBuilder, type TaskResult, type ToolResponse, type ToolResponseBuilder, type ToolResponseKind, } from "../../src/framework/tool-response.js";
10
10
  export { GraphStateSupport } from "../../src/framework/graph-state-support.js";
11
11
  export { GRAPH_END_NODE, createGraphStateAnnotation, type GraphState, } from "../../src/framework/graph-state.js";
12
12
  export { GraphRegistry, type RegisteredGraph, } from "../../src/framework/graph-registry.js";
@@ -13,6 +13,8 @@ import { type LlmPolicy, type LlmRunResult } from "./llm-runner.js";
13
13
  import type { ModelStopReason } from "./model-stop-reason.js";
14
14
  import { GRAPH_NODE_LOCAL_STATE, type GraphNodeLocalState, type GraphNodeTarget, type GraphNodeUpdate } from "./node-outcome.js";
15
15
  import { type ToolResponse } from "./tool-response.js";
16
+ import { type NodeInvocationOptions } from "./node-invocation.js";
17
+ export type { NodeInvocationOptions } from "./node-invocation.js";
16
18
  import { type DecisionConversation, type DecisionErrorContext, type DecisionOptions, type DecisionProviderAdapter, type ResolvedDecisionOptions } from "./decision/decision-types.js";
17
19
  export { GRAPH_NODE_LOCAL_STATE, type GraphNodeLocalState, type GraphNodeTarget, type GraphNodeUpdate, } from "./node-outcome.js";
18
20
  export type ToolDefinition<Input extends Record<string, unknown> = Record<string, unknown>> = Readonly<LlmGatewayTool<Input>>;
@@ -53,14 +55,18 @@ export declare abstract class GraphNode<State extends GraphState, LocalState ext
53
55
  protected usesChatModel(): boolean;
54
56
  protected onInvalidJsonResponse(context: InvalidJsonResponseContext<State>): GraphNodeUpdate<State> | Promise<GraphNodeUpdate<State>>;
55
57
  protected onEmptyModelResponse(context: EmptyModelResponseContext<State>): string | Promise<string>;
56
- readonly invoke: (state: State) => Promise<GraphNodeResult<State>>;
57
- obtainTools(): readonly ToolDefinition[];
58
- validateTools(): void;
58
+ readonly invoke: (state: State, options?: NodeInvocationOptions) => Promise<GraphNodeResult<State>>;
59
+ protected managesLlmExecution(): boolean;
60
+ protected validateNodeResult(_update: GraphNodeUpdate<State>, _isCommand: boolean): void;
61
+ obtainTools(options?: NodeInvocationOptions): readonly ToolDefinition[];
62
+ validateTools(options?: NodeInvocationOptions): void;
63
+ protected includeTool(_name: string, _options: NodeInvocationOptions): boolean;
59
64
  protected llmConfig(): GraphLlmConfig;
60
65
  protected llmCallOptions(): LlmCallOptions;
61
66
  protected runLlm(state: State, context: ToolContext): Promise<LlmRunResult>;
62
67
  protected llmLifecycle(): LlmLifecycle | undefined;
63
68
  private runAgentLoop;
69
+ protected llmHistory(state: State): readonly BaseMessage[];
64
70
  protected historySpace(): string;
65
71
  protected history(state: Pick<State, "histories">): BaseMessage[];
66
72
  protected historyUpdate(messages: BaseMessage[]): Pick<State, "histories">;
@@ -111,7 +117,9 @@ export declare class GraphNodeRuntime<State extends GraphState> extends GraphSta
111
117
  response: string;
112
118
  inputConsumed: boolean;
113
119
  };
114
- withInvocation<Result>(nodeId: string, state: State, run: () => Promise<Result>): Promise<Result>;
120
+ withInvocation<Result>(nodeId: string, state: State, run: () => Promise<Result>, options?: NodeInvocationOptions, managedLlm?: boolean): Promise<Result>;
121
+ invocationMode(): "conversation" | "internal";
122
+ isLocalOnlyInvocation(): boolean;
115
123
  nodeState(nodeName: string): Record<string, unknown>;
116
124
  hasInvocation(): boolean;
117
125
  graphState(): State;
@@ -0,0 +1,11 @@
1
+ import { GraphNode } from "./graph-node.js";
2
+ import type { GraphState } from "./graph-state.js";
3
+ import type { LlmLifecycle, LlmAttemptErrorContext, LlmBlockedContext, LlmBlockedResponse, LlmErrorContext, LlmErrorResponse } from "./llm-lifecycle.js";
4
+ export declare abstract class LlmNodeBase<State extends GraphState, LocalState extends object = Record<string, unknown>> extends GraphNode<State, LocalState> {
5
+ checkResponse(_llmResult: string | object): boolean;
6
+ onLlmBlocked(_context: LlmBlockedContext): Promise<LlmBlockedResponse | null>;
7
+ shouldRetryLlmError(_context: LlmAttemptErrorContext): boolean | undefined;
8
+ onLlmError(_context: LlmErrorContext): Promise<LlmErrorResponse | null>;
9
+ protected validateLlmRecovery(_result: LlmErrorResponse | null): void;
10
+ protected llmLifecycle(): LlmLifecycle;
11
+ }
@@ -1,18 +1,27 @@
1
- import type { LlmLifecycle, LlmAttemptErrorContext, LlmBlockedContext, LlmBlockedResponse, LlmErrorContext, LlmErrorResponse } from "./llm-lifecycle.js";
1
+ import { type BaseMessage } from "@langchain/core/messages";
2
+ import type { ToolCall } from "@langchain/core/messages/tool";
2
3
  import type { LlmRunResult } from "./llm-runner.js";
3
- import { GraphNode, type GraphNodeResult } from "./graph-node.js";
4
+ import { type GraphNodeResult, type NodeInvocationOptions } from "./graph-node.js";
5
+ import { LlmNodeBase } from "./llm-node-base.js";
4
6
  import type { GraphState } from "./graph-state.js";
5
7
  import { type ToolResponse } from "./tool-response.js";
8
+ import type { LlmErrorResponse } from "./llm-lifecycle.js";
6
9
  export type LlmNodeRunResult = LlmRunResult;
7
- export declare abstract class LlmNode<State extends GraphState> extends GraphNode<State> {
8
- checkResponse(_llmResult: string | object): boolean;
9
- onLlmBlocked(_context: LlmBlockedContext): Promise<LlmBlockedResponse | null>;
10
- shouldRetryLlmError(_context: LlmAttemptErrorContext): boolean | undefined;
11
- onLlmError(_context: LlmErrorContext): Promise<LlmErrorResponse | null>;
12
- protected llmLifecycle(): LlmLifecycle;
10
+ export type LlmNodeResponse = void | string | ToolResponse;
11
+ export declare abstract class LlmNode<State extends GraphState, LocalState extends object = Record<string, unknown>, Output = string> extends LlmNodeBase<State, LocalState> {
12
+ protected onResponse(_response: string | Output, _state: State): LlmNodeResponse | Promise<LlmNodeResponse>;
13
+ protected managesLlmExecution(): boolean;
14
+ private isInternal;
15
+ protected includeTool(name: string, options: NodeInvocationOptions): boolean;
16
+ protected llmHistory(state: State): readonly BaseMessage[];
17
+ protected handleTool(state: State, call: ToolCall, context: Record<string, unknown>): Promise<ToolResponse>;
18
+ protected validateLlmRecovery(result: LlmErrorResponse | null): void;
19
+ private validateOutcome;
20
+ private invalidInternalOutcome;
13
21
  protected endChat(input: {
14
22
  message?: string;
15
23
  }): Promise<ToolResponse>;
16
24
  run(state: State): Promise<GraphNodeResult<State>>;
25
+ private responseMessages;
17
26
  private resolveToolResponse;
18
27
  }
@@ -1,8 +1,14 @@
1
1
  import type { BaseMessage } from "@langchain/core/messages";
2
2
  import type { GraphState } from "./graph-state.js";
3
3
  import { type DeepReadonly, type JsonObject } from "./graph-context.js";
4
+ export type NodeInvocationOptions = Readonly<{
5
+ mode?: "conversation" | "internal";
6
+ }>;
4
7
  export declare function hasNodeInvocation(owner: object): boolean;
5
- export declare function withNodeInvocation<State extends GraphState, Result>(owner: object, nodeId: string, state: State, run: () => Promise<Result>): Promise<Result>;
8
+ export declare function withNodeInvocation<State extends GraphState, Result>(owner: object, nodeId: string, state: State, run: () => Promise<Result>, options?: NodeInvocationOptions, managedLlm?: boolean): Promise<Result>;
9
+ export declare function invocationMode(owner: object): "conversation" | "internal";
10
+ export declare function invocationIsLocalOnly(owner: object): boolean;
11
+ export declare function assertInvocationWrite(owner: object, nodeId?: string): void;
6
12
  export declare function invocationNodeId(owner: object): string;
7
13
  export declare function invocationContext(owner: object): DeepReadonly<JsonObject>;
8
14
  export declare function saveInvocationContext(owner: object, patch: JsonObject): void;
@@ -1,10 +1,10 @@
1
1
  import { type Command, END, type ExtractStateType, type ExtractUpdateType, START, type StateDefinitionInit } from "@langchain/langgraph";
2
- import { GRAPH_NODE_CLASS } from "./graph-node.js";
2
+ import { GRAPH_NODE_CLASS, type NodeInvocationOptions } from "./graph-node.js";
3
3
  export type RegisteredNode<State, Update> = {
4
4
  readonly id: string;
5
- readonly invoke: (state: State) => Promise<Update | Command<unknown, Update & Record<string, unknown>, string>>;
5
+ readonly invoke: (state: State, options?: NodeInvocationOptions) => Promise<Update | Command<unknown, Update & Record<string, unknown>, string>>;
6
6
  route(state: State): string;
7
- validateTools?(): void;
7
+ validateTools?(options?: NodeInvocationOptions): void;
8
8
  };
9
9
  export type GraphNodeClass = {
10
10
  readonly name: string;
@@ -32,16 +32,20 @@ export declare class StateGraphExt<StateDefinition extends StateDefinitionInit>
32
32
  private readonly graph;
33
33
  private readonly addedNodeIds;
34
34
  private readonly nodeClasses;
35
+ private turnNodeIds?;
36
+ private readonly workerNodeIds;
35
37
  private readonly nodeInstances;
36
38
  constructor(state: StateDefinition, createGraphNode?: GraphNodeFactory<ExtractStateType<StateDefinition>, ExtractUpdateType<StateDefinition>> | undefined, endNode?: string);
37
39
  addNode(NodeClass: GraphNodeClass): this;
38
40
  nodes(...NodeClasses: readonly GraphNodeClass[]): this;
39
41
  registerTurnNodes(...NodeClasses: readonly GraphNodeClass[]): this;
42
+ workers(...NodeClasses: readonly GraphNodeClass[]): this;
40
43
  addEdge(source: GraphEndpoint | readonly GraphEndpoint[], target: GraphEndpoint): this;
41
44
  branch<NodeClass extends GraphNodeClass, Destinations extends Readonly<Record<RouteOf<NodeClass>, GraphEndpoint>>>(NodeClass: NodeClass, destinations: BranchDestinations<NodeClass, Destinations>): this;
42
45
  branchBy(NodeClass: GraphNodeClass, options: CurrentNodeBranchOptions): this;
43
46
  registerTurns(...NodeClasses: readonly GraphNodeClass[]): this;
44
47
  compile(): import("@langchain/langgraph").CompiledStateGraph<ExtractStateType<StateDefinition, StateDefinition> extends infer T ? { [K in keyof T]: T[K]; } : never, ExtractUpdateType<StateDefinition, StateDefinition> extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never, string, StateDefinition extends import("@langchain/langgraph").AnyStateSchema ? StateDefinition : StateDefinition extends StateDefinitionInit ? import("@langchain/langgraph").ToStateDefinition<StateDefinition> : import("@langchain/langgraph").StateDefinition, StateDefinition extends import("@langchain/langgraph").AnyStateSchema ? StateDefinition : StateDefinition extends StateDefinitionInit ? import("@langchain/langgraph").ToStateDefinition<StateDefinition> : import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown, []>;
48
+ private invocationOptions;
45
49
  private addConditionalEdge;
46
50
  private registerNode;
47
51
  private assertSource;
@@ -1,10 +1,11 @@
1
1
  import type { BaseMessage } from "@langchain/core/messages";
2
2
  import type { GraphNodeLocalState, GraphNodeTarget } from "./node-outcome.js";
3
3
  import type { TokenUsage } from "./token-usage.js";
4
- export type ToolResponseKind = "go" | "stay" | "direct" | "directTo" | "finish";
4
+ export type ToolResponseKind = "go" | "stay" | "direct" | "directTo" | "finish" | "taskResult";
5
5
  export type ToolResponse = Readonly<{
6
6
  kind: ToolResponseKind;
7
7
  target?: GraphNodeTarget;
8
+ targets?: readonly GraphNodeTarget[];
8
9
  feedback?: string;
9
10
  state?: Record<string, unknown>;
10
11
  message?: BaseMessage;
@@ -12,7 +13,13 @@ export type ToolResponse = Readonly<{
12
13
  cleanup?: () => Promise<void>;
13
14
  response?: string;
14
15
  usage?: TokenUsage;
16
+ value?: unknown;
15
17
  }>;
18
+ export type TaskResult<Value> = ToolResponse & Readonly<{
19
+ kind: "taskResult";
20
+ value: Value;
21
+ }>;
22
+ export declare function taskResult<Value>(value: Value): TaskResult<Value>;
16
23
  export type ToolResponseBuilder<NodeClass extends GraphNodeTarget> = ToolResponse & {
17
24
  withState(state: Partial<GraphNodeLocalState<NodeClass>>): ToolResponseBuilder<NodeClass>;
18
25
  withMessage(message: BaseMessage): ToolResponseBuilder<NodeClass>;
@@ -21,7 +28,15 @@ export type ToolResponseBuilder<NodeClass extends GraphNodeTarget> = ToolRespons
21
28
  withToolFeedback(feedback: string): ToolResponseBuilder<NodeClass>;
22
29
  withUsage(usage: TokenUsage): ToolResponseBuilder<NodeClass>;
23
30
  };
31
+ export type FanOutResponseBuilder = ToolResponse & {
32
+ withMessages(messages: readonly BaseMessage[]): FanOutResponseBuilder;
33
+ withCleanup(cleanup: () => Promise<void>): FanOutResponseBuilder;
34
+ withToolFeedback(feedback: string): FanOutResponseBuilder;
35
+ withUsage(usage: TokenUsage): FanOutResponseBuilder;
36
+ };
24
37
  export declare function go<NodeClass extends GraphNodeTarget>(target: NodeClass): ToolResponseBuilder<NodeClass>;
38
+ export declare function go(first: GraphNodeTarget, second: GraphNodeTarget, ...rest: readonly GraphNodeTarget[]): FanOutResponseBuilder;
39
+ export declare function goTargetIds(response: ToolResponse): readonly string[];
25
40
  export declare function stay(feedback?: string): ToolResponseBuilder<GraphNodeTarget>;
26
41
  export declare function direct(content: string | object): ToolResponseBuilder<GraphNodeTarget>;
27
42
  export declare function directTo<NodeClass extends GraphNodeTarget>(target: NodeClass, content: string | object): ToolResponseBuilder<NodeClass>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picoflow/ezgraph",
3
- "version": "0.0.14",
3
+ "version": "0.0.15",
4
4
  "description": "Provider-neutral graph primitives built on LangGraph and LangChain.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",