@@ -73,66 +73,70 @@ describe("session.started event", () => {
7373} )
7474
7575describe ( "step-finish token propagation via Bus event" , ( ) => {
76- test ( "non-zero tokens propagate through PartUpdated event" , async ( ) => {
77- await Instance . provide ( {
78- directory : projectRoot ,
79- fn : async ( ) => {
80- const session = await Session . create ( { } )
81-
82- const messageID = Identifier . ascending ( "message" )
83- await Session . updateMessage ( {
84- id : messageID ,
85- sessionID : session . id ,
86- role : "user" ,
87- time : { created : Date . now ( ) } ,
88- agent : "user" ,
89- model : { providerID : "test" , modelID : "test" } ,
90- tools : { } ,
91- mode : "" ,
92- } as unknown as MessageV2 . Info )
93-
94- let received : MessageV2 . Part | undefined
95- const unsub = Bus . subscribe ( MessageV2 . Event . PartUpdated , ( event ) => {
96- received = event . properties . part
97- } )
98-
99- const tokens = {
100- total : 1500 ,
101- input : 500 ,
102- output : 800 ,
103- reasoning : 200 ,
104- cache : { read : 100 , write : 50 } ,
105- }
106-
107- const partInput = {
108- id : Identifier . ascending ( "part" ) ,
109- messageID,
110- sessionID : session . id ,
111- type : "step-finish" as const ,
112- reason : "stop" ,
113- cost : 0.005 ,
114- tokens,
115- }
116-
117- await Session . updatePart ( partInput )
118-
119- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
120-
121- expect ( received ) . toBeDefined ( )
122- expect ( received ! . type ) . toBe ( "step-finish" )
123- const finish = received as MessageV2 . StepFinishPart
124- expect ( finish . tokens . input ) . toBe ( 500 )
125- expect ( finish . tokens . output ) . toBe ( 800 )
126- expect ( finish . tokens . reasoning ) . toBe ( 200 )
127- expect ( finish . tokens . total ) . toBe ( 1500 )
128- expect ( finish . tokens . cache . read ) . toBe ( 100 )
129- expect ( finish . tokens . cache . write ) . toBe ( 50 )
130- expect ( finish . cost ) . toBe ( 0.005 )
131- expect ( received ) . not . toBe ( partInput )
132-
133- unsub ( )
134- await Session . remove ( session . id )
135- } ,
136- } )
137- } , { timeout : 30000 } )
76+ test (
77+ "non-zero tokens propagate through PartUpdated event" ,
78+ async ( ) => {
79+ await Instance . provide ( {
80+ directory : projectRoot ,
81+ fn : async ( ) => {
82+ const session = await Session . create ( { } )
83+
84+ const messageID = Identifier . ascending ( "message" )
85+ await Session . updateMessage ( {
86+ id : messageID ,
87+ sessionID : session . id ,
88+ role : "user" ,
89+ time : { created : Date . now ( ) } ,
90+ agent : "user" ,
91+ model : { providerID : "test" , modelID : "test" } ,
92+ tools : { } ,
93+ mode : "" ,
94+ } as unknown as MessageV2 . Info )
95+
96+ let received : MessageV2 . Part | undefined
97+ const unsub = Bus . subscribe ( MessageV2 . Event . PartUpdated , ( event ) => {
98+ received = event . properties . part
99+ } )
100+
101+ const tokens = {
102+ total : 1500 ,
103+ input : 500 ,
104+ output : 800 ,
105+ reasoning : 200 ,
106+ cache : { read : 100 , write : 50 } ,
107+ }
108+
109+ const partInput = {
110+ id : Identifier . ascending ( "part" ) ,
111+ messageID,
112+ sessionID : session . id ,
113+ type : "step-finish" as const ,
114+ reason : "stop" ,
115+ cost : 0.005 ,
116+ tokens,
117+ }
118+
119+ await Session . updatePart ( partInput )
120+
121+ await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
122+
123+ expect ( received ) . toBeDefined ( )
124+ expect ( received ! . type ) . toBe ( "step-finish" )
125+ const finish = received as MessageV2 . StepFinishPart
126+ expect ( finish . tokens . input ) . toBe ( 500 )
127+ expect ( finish . tokens . output ) . toBe ( 800 )
128+ expect ( finish . tokens . reasoning ) . toBe ( 200 )
129+ expect ( finish . tokens . total ) . toBe ( 1500 )
130+ expect ( finish . tokens . cache . read ) . toBe ( 100 )
131+ expect ( finish . tokens . cache . write ) . toBe ( 50 )
132+ expect ( finish . cost ) . toBe ( 0.005 )
133+ expect ( received ) . not . toBe ( partInput )
134+
135+ unsub ( )
136+ await Session . remove ( session . id )
137+ } ,
138+ } )
139+ } ,
140+ { timeout : 30000 } ,
141+ )
138142} )
0 commit comments