fix(coding-agent): surface auth storage save failures

closes #6223
This commit is contained in:
Vegard Stikbakke
2026-07-01 21:24:26 +02:00
parent f58c115626
commit f8bec25f34
3 changed files with 50 additions and 8 deletions
+17 -6
View File
@@ -271,12 +271,21 @@ export class AuthStorage {
}
}
private persistProviderChange(provider: string, credential: AuthCredential | undefined): void {
private persistProviderChange(provider: string, credential: AuthCredential | undefined): AuthStorageData {
if (this.loadError) {
return;
this.reload();
}
if (this.loadError) {
const error = new Error(
`Cannot update auth storage because it could not be loaded: ${this.loadError.message}`,
);
this.recordError(error);
throw error;
}
try {
let persistedData: AuthStorageData = {};
this.storage.withLock((current) => {
const currentData = this.parseStorageData(current);
const merged: AuthStorageData = { ...currentData };
@@ -285,10 +294,14 @@ export class AuthStorage {
} else {
delete merged[provider];
}
persistedData = merged;
return { result: undefined, next: JSON.stringify(merged, null, 2) };
});
this.loadError = null;
return persistedData;
} catch (error) {
this.recordError(error);
throw error;
}
}
@@ -311,16 +324,14 @@ export class AuthStorage {
* Set credential for a provider.
*/
set(provider: string, credential: AuthCredential): void {
this.data[provider] = credential;
this.persistProviderChange(provider, credential);
this.data = this.persistProviderChange(provider, credential);
}
/**
* Remove credential for a provider.
*/
remove(provider: string): void {
delete this.data[provider];
this.persistProviderChange(provider, undefined);
this.data = this.persistProviderChange(provider, undefined);
}
/**