@@ -702,40 +702,23 @@ export class ProviderCliAdapter implements CliAdapter {
702702 this . accumulatedBuffer = ( this . accumulatedBuffer + cleanData ) . slice ( - ProviderCliAdapter . MAX_ACCUMULATED_BUFFER ) ;
703703 this . accumulatedRawBuffer = ( this . accumulatedRawBuffer + rawData ) . slice ( - ProviderCliAdapter . MAX_ACCUMULATED_BUFFER ) ;
704704
705- // βββ Startup window: auto-proceed first-run dialogs
705+ // βββ Startup: detect CLI readiness (no auto-proceed)
706706 if ( this . startupParseGate ) {
707707 this . startupBuffer += cleanData ;
708-
709- const dialogPatterns = [
710- / D o y o u w a n t t o c o n n e c t / i,
711- / D o y o u t r u s t t h e f i l e s / i,
712- / Q u i c k s a f e t y c h e c k / i,
713- / I s t h i s a p r o j e c t / i,
714- / E n t e r t o c o n f i r m / i,
715- / b e a b l e t o r e a d , e d i t , a n d e x e c u t e / i,
716- / S e c u r i t y g u i d e / i,
717- ] ;
718- if ( dialogPatterns . some ( p => p . test ( this . startupBuffer ) ) ) {
719- setTimeout ( ( ) => this . ptyProcess ?. write ( '\r' ) , this . timeouts . dialogAccept ) ;
720- this . startupBuffer = '' ;
721- return ;
722- }
723-
724708 const elapsed = Date . now ( ) - this . spawnAt ;
725- const bufCap = this . startupBuffer . length > 12000 ;
726-
727- // Use detectStatus script to check if CLI is ready (shows a prompt)
728709 const scriptStatus = this . runDetectStatus ( this . startupBuffer ) ;
729- const isReady = scriptStatus === 'idle' || elapsed > 8000 || bufCap ;
710+ const isReady = scriptStatus === 'idle'
711+ || scriptStatus === 'waiting_approval'
712+ || elapsed > 8000
713+ || this . startupBuffer . length > 12000 ;
730714
731715 if ( isReady ) {
732716 this . startupParseGate = false ;
733717 this . ready = true ;
734- LOG . info ( 'CLI' , `[${ this . cliType } ] Startup gate end (${ elapsed } ms, scriptStatus=${ scriptStatus } )` ) ;
718+ LOG . info ( 'CLI' , `[${ this . cliType } ] Startup ready (${ elapsed } ms, scriptStatus=${ scriptStatus } )` ) ;
735719 this . onStatusChange ?.( ) ;
736- } else {
737- return ;
738720 }
721+ // No early return β status detection runs from the start
739722 }
740723
741724 // βββ Script-based status detection
@@ -957,56 +940,8 @@ export class ProviderCliAdapter implements CliAdapter {
957940 }
958941
959942 private commitCurrentTranscript ( ) : void {
960- const baseMessages = [ ...this . committedMessages ] ;
961- const parsed = this . parseCurrentTranscript ( baseMessages , '' , this . currentTurnScope ) ;
962- if ( parsed && Array . isArray ( parsed . messages ) && parsed . messages . length > 0 ) {
963- const parsedMessages = parsed . messages
964- . filter ( ( m : any ) => m && ( m . role === 'user' || m . role === 'assistant' ) )
965- . map ( ( m : any ) => ( {
966- role : m . role ,
967- content : typeof m . content === 'string' ? m . content : String ( m . content || '' ) ,
968- timestamp : m . timestamp ,
969- } ) ) ;
970- const latestAssistant = [ ...parsedMessages ]
971- . reverse ( )
972- . find ( ( m : CliChatMessage ) => m . role === 'assistant' && m . content . trim ( ) ) ;
973- if ( latestAssistant ) {
974- LOG . info ( 'CLI' , `[${ this . cliType } ] commitCurrentTranscript parsed assistant len=${ latestAssistant . content . length } scopePrompt=${ JSON . stringify ( this . currentTurnScope ?. prompt || '' ) . slice ( 0 , 120 ) } ` ) ;
975- const nextMessages = [ ...baseMessages ] ;
976- const last = nextMessages [ nextMessages . length - 1 ] ;
977- if ( last ?. role === 'assistant' ) {
978- last . content = latestAssistant . content ;
979- last . timestamp = latestAssistant . timestamp || last . timestamp ;
980- } else if ( last ?. role === 'user' ) {
981- nextMessages . push ( {
982- role : 'assistant' ,
983- content : latestAssistant . content ,
984- timestamp : latestAssistant . timestamp || Date . now ( ) ,
985- } ) ;
986- } else {
987- nextMessages . push ( {
988- role : 'assistant' ,
989- content : latestAssistant . content ,
990- timestamp : latestAssistant . timestamp || Date . now ( ) ,
991- } ) ;
992- }
993- this . committedMessages = nextMessages ;
994- this . syncMessageViews ( ) ;
995- return ;
996- }
997- }
998-
999- const fallback = String ( this . responseBuffer || '' ) . trim ( ) ;
1000- LOG . info ( 'CLI' , `[${ this . cliType } ] commitCurrentTranscript fallback len=${ fallback . length } scopePrompt=${ JSON . stringify ( this . currentTurnScope ?. prompt || '' ) . slice ( 0 , 120 ) } ` ) ;
1001- if ( ! fallback ) return ;
1002- const last = baseMessages [ baseMessages . length - 1 ] ;
1003- if ( last ?. role === 'assistant' ) {
1004- last . content = fallback ;
1005- } else {
1006- baseMessages . push ( { role : 'assistant' , content : fallback , timestamp : Date . now ( ) } ) ;
1007- }
1008- this . committedMessages = baseMessages ;
1009- this . syncMessageViews ( ) ;
943+ // No-op: terminal output is the canonical display for CLI providers.
944+ // Assistant text extraction from PTY output has been removed.
1010945 }
1011946
1012947 // βββ Script Execution ββββββββββββββββββββββββββ
0 commit comments