@@ -11,6 +11,7 @@ describe('WorkflowServerWritableStream', () => {
1111 writeToStream : ReturnType < typeof vi . fn > ;
1212 writeToStreamMulti : ReturnType < typeof vi . fn > ;
1313 closeStream : ReturnType < typeof vi . fn > ;
14+ streamFlushIntervalMs ?: number ;
1415 } ;
1516
1617 beforeEach ( async ( ) => {
@@ -248,4 +249,52 @@ describe('WorkflowServerWritableStream', () => {
248249 ) ;
249250 } ) ;
250251 } ) ;
252+
253+ describe ( 'streamFlushIntervalMs' , ( ) => {
254+ it ( 'should use world.streamFlushIntervalMs when set to 0 (immediate flush)' , async ( ) => {
255+ mockWorld . streamFlushIntervalMs = 0 ;
256+
257+ const stream = new WorkflowServerWritableStream ( 's' , 'run-1' ) ;
258+ const writer = stream . getWriter ( ) ;
259+
260+ // With interval=0, the flush fires on the next microtask tick via setTimeout(fn, 0)
261+ await writer . write ( new Uint8Array ( [ 1 ] ) ) ;
262+ expect ( mockWorld . writeToStream ) . toHaveBeenCalledTimes ( 1 ) ;
263+
264+ await writer . close ( ) ;
265+ } ) ;
266+
267+ it ( 'should fall back to default interval when streamFlushIntervalMs is undefined' , async ( ) => {
268+ // mockWorld has no streamFlushIntervalMs set — uses default 10ms
269+ delete mockWorld . streamFlushIntervalMs ;
270+
271+ const stream = new WorkflowServerWritableStream ( 's' , 'run-1' ) ;
272+ const writer = stream . getWriter ( ) ;
273+
274+ await writer . write ( new Uint8Array ( [ 1 ] ) ) ;
275+ expect ( mockWorld . writeToStream ) . toHaveBeenCalledTimes ( 1 ) ;
276+
277+ await writer . close ( ) ;
278+ } ) ;
279+
280+ it ( 'should respect a custom non-zero flush interval' , async ( ) => {
281+ mockWorld . streamFlushIntervalMs = 50 ;
282+
283+ const stream = new WorkflowServerWritableStream ( 's' , 'run-1' ) ;
284+ const writer = stream . getWriter ( ) ;
285+
286+ // Start a write — the flush is scheduled 50ms from now
287+ const writePromise = writer . write ( new Uint8Array ( [ 1 ] ) ) ;
288+
289+ // After 10ms (the old default), data should NOT have flushed yet
290+ await new Promise ( ( r ) => setTimeout ( r , 10 ) ) ;
291+ expect ( mockWorld . writeToStream ) . not . toHaveBeenCalled ( ) ;
292+
293+ // Wait for the write to complete (will resolve after the 50ms timer fires)
294+ await writePromise ;
295+ expect ( mockWorld . writeToStream ) . toHaveBeenCalledTimes ( 1 ) ;
296+
297+ await writer . close ( ) ;
298+ } ) ;
299+ } ) ;
251300} ) ;
0 commit comments