fix(ai,coding-agent): expose provider timeout/retry controls closes #3627

This commit is contained in:
Mario Zechner
2026-04-24 13:32:44 +02:00
parent d06db09a53
commit c06750410a
11 changed files with 94 additions and 14 deletions

View File

@@ -16,11 +16,17 @@ export interface BranchSummarySettings {
skipPrompt?: boolean; // default: false - when true, skips "Summarize branch?" prompt and defaults to no summary
}
export interface ProviderRetrySettings {
timeoutMs?: number; // SDK/provider request timeout in milliseconds
maxRetries?: number; // SDK/provider retry attempts
maxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)
}
export interface RetrySettings {
enabled?: boolean; // default: true
maxRetries?: number; // default: 3
baseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)
maxDelayMs?: number; // default: 60000 (max server-requested delay before failing)
provider?: ProviderRetrySettings;
}
export interface TerminalSettings {
@@ -354,6 +360,30 @@ export class SettingsManager {
}
}
// Migrate retry.maxDelayMs -> retry.provider.maxRetryDelayMs
if (
"retry" in settings &&
typeof settings.retry === "object" &&
settings.retry !== null &&
!Array.isArray(settings.retry)
) {
const retrySettings = settings.retry as Record<string, unknown>;
const providerSettings =
typeof retrySettings.provider === "object" && retrySettings.provider !== null
? (retrySettings.provider as Record<string, unknown>)
: undefined;
if (
typeof retrySettings.maxDelayMs === "number" &&
(providerSettings?.maxRetryDelayMs === undefined || providerSettings?.maxRetryDelayMs === null)
) {
retrySettings.provider = {
...(providerSettings ?? {}),
maxRetryDelayMs: retrySettings.maxDelayMs,
};
}
delete retrySettings.maxDelayMs;
}
return settings as Settings;
}
@@ -683,12 +713,19 @@ export class SettingsManager {
this.save();
}
getRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number; maxDelayMs: number } {
getRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number } {
return {
enabled: this.getRetryEnabled(),
maxRetries: this.settings.retry?.maxRetries ?? 3,
baseDelayMs: this.settings.retry?.baseDelayMs ?? 2000,
maxDelayMs: this.settings.retry?.maxDelayMs ?? 60000,
};
}
getProviderRetrySettings(): { timeoutMs?: number; maxRetries?: number; maxRetryDelayMs: number } {
return {
timeoutMs: this.settings.retry?.provider?.timeoutMs,
maxRetries: this.settings.retry?.provider?.maxRetries,
maxRetryDelayMs: this.settings.retry?.provider?.maxRetryDelayMs ?? 60000,
};
}