@@ -1016,20 +1016,28 @@ export class ExtensionHost extends EventEmitter {
10161016 this . webviewInitialized = true
10171017 this . isInitialSetup = false
10181018 logs . info ( "Webview marked as ready, flushing pending messages" , "ExtensionHost" )
1019- this . flushPendingMessages ( )
1019+ void this . flushPendingMessages ( )
10201020 }
10211021
10221022 /**
10231023 * Flush all pending messages that were queued before webview was ready
10241024 */
1025- private flushPendingMessages ( ) : void {
1026- const messages = [ ...this . pendingMessages ]
1025+ private async flushPendingMessages ( ) : Promise < void > {
1026+ const upsertMessages = this . pendingMessages . filter ( ( m ) => m . type === "upsertApiConfiguration" )
1027+ const otherMessages = this . pendingMessages . filter ( ( m ) => m . type !== "upsertApiConfiguration" )
10271028 this . pendingMessages = [ ]
10281029
1029- logs . info ( `Flushing ${ messages . length } pending messages` , "ExtensionHost" )
1030- for ( const message of messages ) {
1030+ logs . info ( `Flushing ${ upsertMessages . length + otherMessages . length } pending messages` , "ExtensionHost" )
1031+
1032+ // Ensure the API configuration is applied before anything tries to read it
1033+ for ( const message of upsertMessages ) {
1034+ logs . debug ( `Flushing pending message: ${ message . type } ` , "ExtensionHost" )
1035+ // Serialize upserts so provider settings are persisted before readers run
1036+ await this . sendWebviewMessage ( message )
1037+ }
1038+
1039+ for ( const message of otherMessages ) {
10311040 logs . debug ( `Flushing pending message: ${ message . type } ` , "ExtensionHost" )
1032- // Use void to explicitly ignore the promise
10331041 void this . sendWebviewMessage ( message )
10341042 }
10351043 }
0 commit comments