@@ -22,7 +22,6 @@ import {
2222 type ToolCallStream ,
2323 type ToolCallStatus ,
2424 type ToolsEventData ,
25- type UpdatesEventData ,
2625 type Namespace ,
2726} from "@langchain/langgraph" ;
2827import type {
@@ -31,10 +30,6 @@ import type {
3130 DynamicStructuredTool ,
3231 StructuredToolInterface ,
3332} from "@langchain/core/tools" ;
34- import type {
35- AgentMiddleware ,
36- InferMiddlewareState ,
37- } from "./middleware/types.js" ;
3833
3934/**
4035 * Infers the merged extensions shape from a tuple of stream transformer
@@ -92,46 +87,6 @@ export type ToolCallStreamUnion<
9287 > ;
9388} [ number ] ;
9489
95- /**
96- * Lifecycle phase that a middleware hook occupies within an agent turn.
97- */
98- export type MiddlewarePhase =
99- | "before_agent"
100- | "before_model"
101- | "after_model"
102- | "after_agent" ;
103-
104- /**
105- * Represents a single middleware lifecycle event observed during an
106- * agent run. Emitted by the middleware transformer.
107- *
108- * @typeParam TStateDelta - Shape of the state delta produced by this
109- * middleware. Defaults to `Record<string, unknown>` when the
110- * middleware tuple is not typed.
111- */
112- export interface MiddlewareEvent < TStateDelta = Record < string , unknown > > {
113- phase : MiddlewarePhase ;
114- name : string ;
115- stateDelta : TStateDelta ;
116- timestamp : number ;
117- }
118-
119- /**
120- * Discriminated union of {@link MiddlewareEvent} variants, one per
121- * middleware in `TMiddleware`. When the middleware array is typed,
122- * `event.stateDelta` narrows to the middleware's inferred state type.
123- *
124- * Falls back to `MiddlewareEvent` (untyped) when the middleware array
125- * is a plain `AgentMiddleware[]`.
126- */
127- export type MiddlewareEventUnion <
128- TMiddleware extends readonly AgentMiddleware [ ] ,
129- > = {
130- [ K in keyof TMiddleware ] : TMiddleware [ K ] extends AgentMiddleware
131- ? MiddlewareEvent < InferMiddlewareState < TMiddleware [ K ] > >
132- : MiddlewareEvent ;
133- } [ number ] ;
134-
13590/**
13691 * A {@link GraphRunStream} with native agent-level projections assigned
13792 * directly on the instance by `createGraphRunStream` (via `__native`
@@ -156,13 +111,10 @@ export type AgentRunStream<
156111 | ClientTool
157112 | ServerTool
158113 ) [ ] ,
159- TMiddleware extends readonly AgentMiddleware [ ] = readonly AgentMiddleware [ ] ,
160114 TExtensions extends Record < string , unknown > = Record < string , unknown > ,
161115> = GraphRunStream < TValues , TExtensions > & {
162116 /** Tool call streams from the native ToolCallTransformer. */
163117 toolCalls : AsyncIterable < ToolCallStreamUnion < TTools > > ;
164- /** Middleware lifecycle events from the native MiddlewareTransformer. */
165- middleware : AsyncIterable < MiddlewareEventUnion < TMiddleware > > ;
166118} ;
167119
168120interface ToolCallProjection {
@@ -371,66 +323,3 @@ export function createToolCallTransformer(
371323 } ;
372324 } ;
373325}
374-
375- interface MiddlewareProjection {
376- middleware : AsyncIterable < MiddlewareEvent > ;
377- }
378-
379- const MIDDLEWARE_NODE_PATTERN =
380- / ^ ( .+ ) \. ( b e f o r e _ a g e n t | b e f o r e _ m o d e l | a f t e r _ m o d e l | a f t e r _ a g e n t ) $ / ;
381-
382- /**
383- * Creates a native transformer that watches `updates` events from
384- * middleware nodes and surfaces them as typed {@link MiddlewareEvent}
385- * objects.
386- *
387- * Marked `__native: true` — projection key lands directly on the
388- * `GraphRunStream` instance as `run.middleware`.
389- */
390- export function createMiddlewareTransformer (
391- path : Namespace
392- ) : ( ) => NativeStreamTransformer < MiddlewareProjection > {
393- return ( ) => {
394- const middlewareLog = StreamChannel . local < MiddlewareEvent > ( ) ;
395-
396- return {
397- __native : true as const ,
398-
399- init : ( ) => ( {
400- middleware : middlewareLog ,
401- } ) ,
402-
403- process ( event : ProtocolEvent ) : boolean {
404- if ( event . method !== "updates" ) return true ;
405- if ( ! isOwnEvent ( event . params . namespace , path ) ) return true ;
406-
407- const data = event . params . data as UpdatesEventData ;
408- const nodeName = data . node ?? event . params . node ;
409- if ( ! nodeName ) return true ;
410-
411- const match = MIDDLEWARE_NODE_PATTERN . exec ( nodeName ) ;
412- if ( ! match ) return true ;
413-
414- const name = match [ 1 ] ;
415- const phase = match [ 2 ] as MiddlewarePhase ;
416-
417- middlewareLog . push ( {
418- phase,
419- name,
420- stateDelta : data . values ?? { } ,
421- timestamp : event . params . timestamp ,
422- } ) ;
423-
424- return true ;
425- } ,
426-
427- finalize ( ) : void {
428- middlewareLog . close ( ) ;
429- } ,
430-
431- fail ( err : unknown ) : void {
432- middlewareLog . fail ( err ) ;
433- } ,
434- } ;
435- } ;
436- }
0 commit comments