@@ -818,6 +818,46 @@ describe("EmbeddedTuiBackend", () => {
818818 await flushMicrotasks ( ) ;
819819 } ) ;
820820
821+ it ( "sends idle slash stop as a normal prompt so the TUI receives a terminal event" , async ( ) => {
822+ const { EmbeddedTuiBackend } = await import ( "./embedded-backend.js" ) ;
823+ const pending = deferred < {
824+ payloads : Array < { text : string } > ;
825+ meta : Record < string , unknown > ;
826+ } > ( ) ;
827+ agentCommandFromIngressMock . mockReturnValueOnce ( pending . promise ) ;
828+
829+ const backend = new EmbeddedTuiBackend ( ) ;
830+ const events : Array < { event : string ; payload : unknown } > = [ ] ;
831+ backend . onEvent = ( evt ) => {
832+ events . push ( { event : evt . event , payload : evt . payload } ) ;
833+ } ;
834+ backend . start ( ) ;
835+ await backend . sendChat ( {
836+ sessionKey : "agent:main:main" ,
837+ message : "/stop" ,
838+ runId : "run-local-idle-stop" ,
839+ } ) ;
840+
841+ expect ( agentCommandFromIngressMock ) . toHaveBeenCalledTimes ( 1 ) ;
842+
843+ pending . resolve ( { payloads : [ { text : "idle stop prompt" } ] , meta : { } } ) ;
844+ await flushMicrotasks ( ) ;
845+
846+ expect ( events ) . toContainEqual ( {
847+ event : "chat" ,
848+ payload : {
849+ runId : "run-local-idle-stop" ,
850+ sessionKey : "agent:main:main" ,
851+ state : "final" ,
852+ message : {
853+ role : "assistant" ,
854+ content : [ { type : "text" , text : "idle stop prompt" } ] ,
855+ timestamp : embeddedEventTimestamp ,
856+ } ,
857+ } ,
858+ } ) ;
859+ } ) ;
860+
821861 it ( "queues same-session sends behind terminal local runs until maintenance settles" , async ( ) => {
822862 const { EmbeddedTuiBackend } = await import ( "./embedded-backend.js" ) ;
823863 const first = deferred < {
0 commit comments