From 4a77f897d3d89f0576017bab7e9d7bd379a9370b Mon Sep 17 00:00:00 2001 From: Tanner <84605639+IceRhymers@users.noreply.github.com> Date: Mon, 27 Jul 2026 16:24:04 -0700 Subject: [PATCH] fix(desktop): stop create-agent form clobbering provider config on keystroke The provider-probe effect in WhereToRunSection listed the whole `draft` in its dependency array, so every keystroke in ProviderConfigFields produced a new draft, re-ran the probe, and overwrote `providerConfig` with schema defaults on resolve. Any config_schema field with a `default` snapped back to it (fields without one were wiped), making non-default values impossible to enter from the UI. Guard against re-probing once a provider has been probed (a provider switch still resets the draft to emptyWhereToRunDraft, so a fresh probe fires then), and seed defaults without overwriting values the user already typed so a late-resolving probe can't erase input. Fixes block/buzz#3216 Signed-off-by: Tanner <84605639+IceRhymers@users.noreply.github.com> --- desktop/src/features/agents/ui/WhereToRunSection.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/desktop/src/features/agents/ui/WhereToRunSection.tsx b/desktop/src/features/agents/ui/WhereToRunSection.tsx index f068eceec8..1ce5228dec 100644 --- a/desktop/src/features/agents/ui/WhereToRunSection.tsx +++ b/desktop/src/features/agents/ui/WhereToRunSection.tsx @@ -31,6 +31,12 @@ export function WhereToRunSection({ setProbeError(null); return; } + // Once probed, don't re-probe: every keystroke in ProviderConfigFields + // produces a new `draft`, and re-running the probe would clobber the + // user's edits back to schema defaults. Switching providers resets the + // draft to emptyWhereToRunDraft (probedProvider: null), so a fresh probe + // still fires on provider change. + if (draft.probedProvider) return; let cancelled = false; setProbeError(null); void probeBackendProvider(selectedBackendProvider.binaryPath) @@ -50,7 +56,9 @@ export function WhereToRunSection({ onDraftChange({ ...draft, probedProvider: result, - providerConfig: defaults, + // Seed defaults without overwriting any values the user already + // typed, so a late-resolving probe can never erase input. + providerConfig: { ...defaults, ...draft.providerConfig }, }); }) .catch((error: unknown) => {