@@ -78,6 +78,7 @@ describe("agent event handler", () => {
7878 resolveSessionKeyForRun ?: ( runId : string ) => string | undefined ;
7979 lifecycleErrorRetryGraceMs ?: number ;
8080 isChatSendRunActive ?: ( runId : string ) => boolean ;
81+ shouldBackoffLowPrioritySessionToolEvents ?: ( ) => boolean ;
8182 } ) {
8283 const nowSpy =
8384 params ?. now === undefined ? undefined : vi . spyOn ( Date , "now" ) . mockReturnValue ( params . now ) ;
@@ -103,6 +104,8 @@ describe("agent event handler", () => {
103104 loadGatewaySessionRowForSnapshot : loadGatewaySessionRow ,
104105 lifecycleErrorRetryGraceMs : params ?. lifecycleErrorRetryGraceMs ,
105106 isChatSendRunActive : params ?. isChatSendRunActive ,
107+ shouldBackoffLowPrioritySessionToolEvents :
108+ params ?. shouldBackoffLowPrioritySessionToolEvents ,
106109 } ) ;
107110
108111 return {
@@ -1519,6 +1522,96 @@ describe("agent event handler", () => {
15191522 resetAgentRunContextForTest ( ) ;
15201523 } ) ;
15211524
1525+ it ( "backs off session-scoped tool mirrors during queued gateway pressure" , ( ) => {
1526+ const { broadcastToConnIds, sessionEventSubscribers, toolEventRecipients, handler } =
1527+ createHarness ( {
1528+ resolveSessionKeyForRun : ( ) => "session-pressure" ,
1529+ shouldBackoffLowPrioritySessionToolEvents : ( ) => true ,
1530+ } ) ;
1531+
1532+ registerAgentRunContext ( "run-pressure-tool" , {
1533+ sessionKey : "session-pressure" ,
1534+ verboseLevel : "off" ,
1535+ } ) ;
1536+ toolEventRecipients . add ( "run-pressure-tool" , "conn-run" ) ;
1537+ sessionEventSubscribers . subscribe ( "conn-session" ) ;
1538+
1539+ handler ( {
1540+ runId : "run-pressure-tool" ,
1541+ seq : 1 ,
1542+ stream : "tool" ,
1543+ ts : 1_234 ,
1544+ data : {
1545+ phase : "start" ,
1546+ name : "exec" ,
1547+ toolCallId : "tool-pressure-1" ,
1548+ args : { command : "echo hi" } ,
1549+ } ,
1550+ } ) ;
1551+
1552+ expect ( broadcastToConnIds ) . toHaveBeenCalledTimes ( 1 ) ;
1553+ expect ( requireMockArg ( broadcastToConnIds , 0 , 0 , "run tool event" ) ) . toBe ( "agent" ) ;
1554+ expect ( requireMockArg ( broadcastToConnIds , 0 , 2 , "run tool recipients" ) ) . toEqual (
1555+ new Set ( [ "conn-run" ] ) ,
1556+ ) ;
1557+ } ) ;
1558+
1559+ it ( "keeps terminal session-scoped tool mirrors during queued gateway pressure" , ( ) => {
1560+ let backoffActive = false ;
1561+ const { broadcastToConnIds, sessionEventSubscribers, handler } = createHarness ( {
1562+ resolveSessionKeyForRun : ( ) => "session-pressure-terminal" ,
1563+ shouldBackoffLowPrioritySessionToolEvents : ( ) => backoffActive ,
1564+ } ) ;
1565+
1566+ registerAgentRunContext ( "run-pressure-terminal-tool" , {
1567+ sessionKey : "session-pressure-terminal" ,
1568+ verboseLevel : "off" ,
1569+ } ) ;
1570+ sessionEventSubscribers . subscribe ( "conn-session" ) ;
1571+
1572+ handler ( {
1573+ runId : "run-pressure-terminal-tool" ,
1574+ seq : 1 ,
1575+ stream : "tool" ,
1576+ ts : 1_234 ,
1577+ data : {
1578+ phase : "start" ,
1579+ name : "exec" ,
1580+ toolCallId : "tool-pressure-terminal-1" ,
1581+ args : { command : "echo hi" } ,
1582+ } ,
1583+ } ) ;
1584+
1585+ backoffActive = true ;
1586+ handler ( {
1587+ runId : "run-pressure-terminal-tool" ,
1588+ seq : 2 ,
1589+ stream : "tool" ,
1590+ ts : 1_235 ,
1591+ data : {
1592+ phase : "result" ,
1593+ name : "exec" ,
1594+ toolCallId : "tool-pressure-terminal-1" ,
1595+ result : { content : [ { type : "text" , text : "done" } ] } ,
1596+ } ,
1597+ } ) ;
1598+
1599+ expect ( broadcastToConnIds ) . toHaveBeenCalledTimes ( 2 ) ;
1600+ expect ( requireMockArg ( broadcastToConnIds , 0 , 0 , "session tool start event" ) ) . toBe (
1601+ "session.tool" ,
1602+ ) ;
1603+ expect ( requireMockArg ( broadcastToConnIds , 1 , 0 , "session tool result event" ) ) . toBe (
1604+ "session.tool" ,
1605+ ) ;
1606+ const resultPayload = requireMockPayload ( broadcastToConnIds , 1 , 1 , "session tool result" ) ;
1607+ expectRecordFields ( requireRecord ( resultPayload . data , "session tool result data" ) , {
1608+ phase : "result" ,
1609+ name : "exec" ,
1610+ toolCallId : "tool-pressure-terminal-1" ,
1611+ result : { content : [ { type : "text" , text : "done" } ] } ,
1612+ } ) ;
1613+ } ) ;
1614+
15221615 it ( "suppresses heartbeat tool events for Control UI and verbose node subscribers" , ( ) => {
15231616 const {
15241617 broadcastToConnIds,
0 commit comments