Skip to content

Commit 44ebf95

Browse files
authored
fix potential credential seeding race (#4148)
* Fix: serialize upsertApiConfiguration during webview flush to persist provider settings * fixup types * Add changeset
1 parent e180d79 commit 44ebf95

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

.changeset/fuzzy-singers-prove.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@kilocode/cli": minor
3+
---
4+
5+
fix potential credential seeding race

cli/src/host/ExtensionHost.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)