@@ -761,34 +761,49 @@ export class SessionService {
761761 this . previewAbort = null ;
762762 }
763763
764+ private updatePromptStateFromEvents (
765+ taskRunId : string ,
766+ events : AcpMessage [ ] ,
767+ ) : void {
768+ for ( const acpMsg of events ) {
769+ const msg = acpMsg . message ;
770+ if ( isJsonRpcRequest ( msg ) && msg . method === "session/prompt" ) {
771+ sessionStoreSetters . updateSession ( taskRunId , {
772+ isPromptPending : true ,
773+ promptStartedAt : acpMsg . ts ,
774+ } ) ;
775+ }
776+ if (
777+ "id" in msg &&
778+ "result" in msg &&
779+ typeof msg . result === "object" &&
780+ msg . result !== null &&
781+ "stopReason" in msg . result
782+ ) {
783+ sessionStoreSetters . updateSession ( taskRunId , {
784+ isPromptPending : false ,
785+ promptStartedAt : null ,
786+ } ) ;
787+ }
788+ }
789+ }
790+
764791 private handleSessionEvent ( taskRunId : string , acpMsg : AcpMessage ) : void {
765792 const session = sessionStoreSetters . getSessions ( ) [ taskRunId ] ;
766793 if ( ! session ) return ;
767794
768795 sessionStoreSetters . appendEvents ( taskRunId , [ acpMsg ] ) ;
796+ this . updatePromptStateFromEvents ( taskRunId , [ acpMsg ] ) ;
769797
770798 const msg = acpMsg . message ;
771799
772- if ( isJsonRpcRequest ( msg ) && msg . method === "session/prompt" ) {
773- // acpMsg.ts is local time (set in-process) — matches Date.now() used in sendLocalPrompt
774- sessionStoreSetters . updateSession ( taskRunId , {
775- isPromptPending : true ,
776- promptStartedAt : acpMsg . ts ,
777- } ) ;
778- }
779-
780800 if (
781801 "id" in msg &&
782802 "result" in msg &&
783803 typeof msg . result === "object" &&
784804 msg . result !== null &&
785805 "stopReason" in msg . result
786806 ) {
787- sessionStoreSetters . updateSession ( taskRunId , {
788- isPromptPending : false ,
789- promptStartedAt : null ,
790- } ) ;
791-
792807 const stopReason = ( msg . result as { stopReason ?: string } ) . stopReason ;
793808 if ( stopReason ) {
794809 notifyPromptComplete ( session . taskTitle , stopReason ) ;
@@ -1068,6 +1083,11 @@ export class SessionService {
10681083 const session = sessionStoreSetters . getSessionByTaskId ( taskId ) ;
10691084 if ( ! session ) return false ;
10701085
1086+ sessionStoreSetters . updateSession ( session . taskRunId , {
1087+ isPromptPending : false ,
1088+ promptStartedAt : null ,
1089+ } ) ;
1090+
10711091 if ( session . isCloud ) {
10721092 return this . cancelCloudPrompt ( session ) ;
10731093 }
@@ -1704,6 +1724,7 @@ export class SessionService {
17041724 const entriesToAppend = update . newEntries . slice ( - delta ) ;
17051725 const newEvents = convertStoredEntriesToEvents ( entriesToAppend ) ;
17061726 sessionStoreSetters . appendEvents ( taskRunId , newEvents , expectedCount ) ;
1727+ this . updatePromptStateFromEvents ( taskRunId , newEvents ) ;
17071728 } else {
17081729 // Gap in data — append everything we have but don't jump processedLineCount
17091730 log . warn ( "Cloud task log count inconsistency" , {
@@ -1718,6 +1739,7 @@ export class SessionService {
17181739 newEvents ,
17191740 currentCount + update . newEntries . length ,
17201741 ) ;
1742+ this . updatePromptStateFromEvents ( taskRunId , newEvents ) ;
17211743 }
17221744 }
17231745 // Update cloud status fields if present
0 commit comments