@@ -94,6 +94,43 @@ describe("Task.ask queued message drain", () => {
9494 expect ( task . messageQueueService . messages [ 0 ] ?. text ) . toBe ( "change direction" )
9595 } )
9696
97+ it ( "lets queued input interrupt an auto-approved finishTask ask" , async ( ) => {
98+ const task = buildTask ( {
99+ autoApprovalEnabled : true ,
100+ alwaysAllowSubtasks : true ,
101+ } )
102+ task . messageQueueService . addMessage ( "Use the queued instruction before completing." )
103+
104+ const result = await task . ask ( "tool" , JSON . stringify ( { tool : "finishTask" } ) , false )
105+
106+ expect ( result ) . toEqual ( {
107+ response : "messageResponse" ,
108+ text : "Use the queued instruction before completing." ,
109+ images : undefined ,
110+ } )
111+ expect ( task . messageQueueService . isEmpty ( ) ) . toBe ( true )
112+ } )
113+
114+ it ( "preserves queued input behind an ordinary auto-approved tool ask" , async ( ) => {
115+ const task = buildTask ( { autoApprovalEnabled : true } )
116+ task . messageQueueService . addMessage ( "change direction" )
117+
118+ const result = await task . ask ( "tool" , JSON . stringify ( { tool : "updateTodoList" } ) , false )
119+
120+ expect ( result . response ) . toBe ( "yesButtonClicked" )
121+ expect ( task . messageQueueService . messages ) . toHaveLength ( 1 )
122+ } )
123+
124+ it ( "treats queued input as feedback when a tool ask payload is malformed" , async ( ) => {
125+ const task = buildTask ( )
126+ task . messageQueueService . addMessage ( "change direction" )
127+
128+ const result = await task . ask ( "tool" , "{" , false )
129+
130+ expect ( result ) . toMatchObject ( { response : "messageResponse" , text : "change direction" } )
131+ expect ( task . messageQueueService . isEmpty ( ) ) . toBe ( true )
132+ } )
133+
97134 it ( "does not consume messages that were queued before a command_output ask" , async ( ) => {
98135 const task = buildTask ( )
99136 task . messageQueueService . addMessage ( "1+1=?" )
0 commit comments