@@ -1052,9 +1052,11 @@ describe('KimiTUI message flow', () => {
10521052 it ( 'keeps a rejected skill input when a newer draft already exists' , async ( ) => {
10531053 let rejectSubmission ! : ( error : Error ) => void ;
10541054 const session = makeSession ( {
1055- promptWithSkills : vi . fn ( ( ) => new Promise < void > ( ( _resolve , reject ) => {
1056- rejectSubmission = reject ;
1057- } ) ) ,
1055+ promptWithSkills : vi . fn ( )
1056+ . mockImplementationOnce ( ( ) => new Promise < void > ( ( _resolve , reject ) => {
1057+ rejectSubmission = reject ;
1058+ } ) )
1059+ . mockResolvedValue ( undefined ) ,
10581060 } ) ;
10591061 const { driver } = await makeDriver ( session ) ;
10601062 driver . state . appState . model = 'k2' ;
@@ -1072,6 +1074,42 @@ describe('KimiTUI message flow', () => {
10721074 } ) ) ;
10731075 } ) ;
10741076 expect ( driver . state . editor . getText ( ) ) . toBe ( 'new draft' ) ;
1077+
1078+ driver . handleUserInput ( 'new draft' ) ;
1079+
1080+ await vi . waitFor ( ( ) => expect ( session . promptWithSkills ) . toHaveBeenCalledTimes ( 2 ) ) ;
1081+ expect ( session . prompt ) . not . toHaveBeenCalled ( ) ;
1082+ expect ( driver . state . queuedMessages . map ( ( item ) => item . text ) ) . toEqual ( [ 'new draft' ] ) ;
1083+ } ) ;
1084+
1085+ it ( 'keeps a newer skill message behind a recovered skill request' , async ( ) => {
1086+ let rejectSubmission ! : ( error : Error ) => void ;
1087+ const session = makeSession ( {
1088+ promptWithSkills : vi . fn ( )
1089+ . mockImplementationOnce ( ( ) => new Promise < void > ( ( _resolve , reject ) => {
1090+ rejectSubmission = reject ;
1091+ } ) )
1092+ . mockResolvedValue ( undefined ) ,
1093+ } ) ;
1094+ const { driver } = await makeDriver ( session ) ;
1095+ driver . state . appState . model = 'k2' ;
1096+ driver . skillCommandMap . set ( 'skill:review' , 'review' ) ;
1097+
1098+ driver . handleUserInput ( 'check /skill:review' ) ;
1099+ await vi . waitFor ( ( ) => expect ( session . promptWithSkills ) . toHaveBeenCalledOnce ( ) ) ;
1100+ driver . state . editor . setText ( 'follow up /skill:review' ) ;
1101+ rejectSubmission ( new Error ( 'Skill missing' ) ) ;
1102+ await vi . waitFor ( ( ) => expect ( driver . state . queuedMessages ) . toHaveLength ( 1 ) ) ;
1103+
1104+ driver . handleUserInput ( 'follow up /skill:review' ) ;
1105+
1106+ await vi . waitFor ( ( ) => expect ( session . promptWithSkills ) . toHaveBeenCalledTimes ( 2 ) ) ;
1107+ expect ( session . promptWithSkills ) . toHaveBeenNthCalledWith ( 2 , 'check /skill:review' , [
1108+ expect . objectContaining ( { name : 'review' } ) ,
1109+ ] ) ;
1110+ expect ( driver . state . queuedMessages . map ( ( item ) => item . text ) ) . toEqual ( [
1111+ 'follow up /skill:review' ,
1112+ ] ) ;
10751113 } ) ;
10761114
10771115 it ( 'renders a bundled replay submission as a single turn' , async ( ) => {
0 commit comments