@@ -545,21 +545,9 @@ export class Remote {
545545const updatedAgent = await this . waitForAgentWithProgress (
546546monitor ,
547547agent ,
548- {
549- progressTitle :"Waiting for the agent to connect..." ,
550- timeoutMs :3 * 60 * 1000 ,
551- errorDialogTitle :`Failed to wait for${ agent . name } connection` ,
552- } ,
553- ( foundAgent ) => {
554- if ( foundAgent . status !== "connecting" ) {
555- return foundAgent ;
556- }
557- return undefined ;
558- } ,
548+ `Waiting for agent${ agent . name } to connect...` ,
549+ ( foundAgent ) => foundAgent . status !== "connecting" ,
559550) ;
560- if ( ! updatedAgent ) {
561- return ;
562- }
563551agent = updatedAgent ;
564552this . logger . info ( `Agent${ agent . name } status is now` , agent . status ) ;
565553}
@@ -606,28 +594,15 @@ export class Remote {
606594const agentStatePromise = this . waitForAgentWithProgress (
607595monitor ,
608596agent ,
609- {
610- progressTitle :"Waiting for agent startup scripts..." ,
611- timeoutMs :5 * 60 * 1000 ,
612- errorDialogTitle :`Failed to wait for${ agent . name } startup` ,
613- } ,
614- ( foundAgent ) => {
615- if ( foundAgent . lifecycle_state !== "starting" ) {
616- return foundAgent ;
617- }
618- return undefined ;
619- } ,
597+ `Waiting for agent${ agent . name } startup scripts...` ,
598+ ( foundAgent ) => foundAgent . lifecycle_state !== "starting" ,
620599) ;
621600
622- // Race between logs completion(which fails on socket error) and agent state change
601+ // Race between logs completion and agent state change
623602const updatedAgent = await Promise . race ( [
624603agentStatePromise ,
625604logsCompletion . then ( ( ) => agentStatePromise ) ,
626605] ) ;
627-
628- if ( ! updatedAgent ) {
629- return ;
630- }
631606agent = updatedAgent ;
632607this . logger . info (
633608`Agent${ agent . name } lifecycle state is now` ,
@@ -766,70 +741,34 @@ export class Remote {
766741}
767742
768743/**
769- * Waits for an agent condition with progress notification and error handling.
770- * Returns the updated agent or undefined if the user chooses to close remote.
744+ * Waits for an agent condition with progress notification.
771745 */
772746private async waitForAgentWithProgress (
773747monitor :WorkspaceMonitor ,
774748agent :WorkspaceAgent ,
775- options :{
776- progressTitle :string ;
777- timeoutMs :number ;
778- errorDialogTitle :string ;
779- } ,
780- checker :( agent :WorkspaceAgent ) => WorkspaceAgent | undefined ,
781- ) :Promise < WorkspaceAgent | undefined > {
782- try {
783- const foundAgent = await vscode . window . withProgress (
784- {
785- title :options . progressTitle ,
786- location :vscode . ProgressLocation . Notification ,
787- } ,
788- async ( ) =>
789- this . waitForAgentCondition (
790- monitor ,
791- agent ,
792- checker ,
793- options . timeoutMs ,
794- `Timeout:${ options . errorDialogTitle } ` ,
795- ) ,
796- ) ;
797- return foundAgent ;
798- } catch ( error ) {
799- this . logger . error ( options . errorDialogTitle , error ) ;
800- const result = await this . vscodeProposed . window . showErrorMessage (
801- options . errorDialogTitle ,
802- {
803- useCustom :true ,
804- modal :true ,
805- detail :error instanceof Error ?error . message :String ( error ) ,
806- } ,
807- "Close Remote" ,
808- ) ;
809- if ( result === "Close Remote" ) {
810- await this . closeRemote ( ) ;
811- }
812- return undefined ;
813- }
749+ progressTitle :string ,
750+ checker :( agent :WorkspaceAgent ) => boolean ,
751+ ) :Promise < WorkspaceAgent > {
752+ const foundAgent = await vscode . window . withProgress (
753+ {
754+ title :progressTitle ,
755+ location :vscode . ProgressLocation . Notification ,
756+ } ,
757+ async ( ) => this . waitForAgentCondition ( monitor , agent , checker ) ,
758+ ) ;
759+ return foundAgent ;
814760}
815761
816762/**
817763 * Waits for an agent condition to be met by monitoring workspace changes.
818764 * Returns the result when the condition is met or throws an error on timeout.
819765 */
820- private async waitForAgentCondition < T > (
766+ private async waitForAgentCondition (
821767monitor :WorkspaceMonitor ,
822768agent :WorkspaceAgent ,
823- checker :( agent :WorkspaceAgent ) => T | undefined ,
824- timeoutMs :number ,
825- timeoutMessage :string ,
826- ) :Promise < T > {
827- return new Promise < T > ( ( resolve , reject ) => {
828- const timeout = setTimeout ( ( ) => {
829- updateEvent . dispose ( ) ;
830- reject ( new Error ( timeoutMessage ) ) ;
831- } , timeoutMs ) ;
832-
769+ checker :( agent :WorkspaceAgent ) => boolean ,
770+ ) :Promise < WorkspaceAgent > {
771+ return new Promise < WorkspaceAgent > ( ( resolve , reject ) => {
833772const updateEvent = monitor . onChange . event ( ( workspace ) => {
834773try {
835774const agents = extractAgents ( workspace . latest_build . resources ) ;
@@ -841,12 +780,10 @@ export class Remote {
841780}
842781const result = checker ( foundAgent ) ;
843782if ( result !== undefined ) {
844- clearTimeout ( timeout ) ;
845783updateEvent . dispose ( ) ;
846- resolve ( result ) ;
784+ resolve ( foundAgent ) ;
847785}
848786} catch ( error ) {
849- clearTimeout ( timeout ) ;
850787updateEvent . dispose ( ) ;
851788reject ( error ) ;
852789}