Persist live agent mode preferences

This commit is contained in:
Mohamed Boudra
2026-06-20 21:05:52 +07:00
parent 3493e0492d
commit 4b45bab7e3
2 changed files with 235 additions and 2 deletions
@@ -18,6 +18,7 @@ import { type SheetHeader } from "@/components/adaptive-modal-sheet";
import { Combobox, ComboboxItem, type ComboboxOption } from "@/components/ui/combobox";
import { useSessionStore } from "@/stores/session-store";
import { useProvidersSnapshot } from "@/hooks/use-providers-snapshot";
import { mergeProviderPreferences, useFormPreferences } from "@/hooks/use-form-preferences";
import { resolveProviderDefinition } from "@/utils/provider-definitions";
import { useToast } from "@/contexts/toast-context";
import { useIsCompactFormFactor } from "@/constants/layout";
@@ -261,6 +262,7 @@ export const AgentModeControl = memo(function AgentModeControl({
compareAvailableModes,
);
const client = useSessionStore((state) => state.sessions[serverId]?.client ?? null);
const { updatePreferences } = useFormPreferences();
const toast = useToast();
const { entries: snapshotEntries } = useProvidersSnapshot(serverId, { cwd: slice?.cwd });
@@ -272,7 +274,18 @@ export const AgentModeControl = memo(function AgentModeControl({
const handleSelectMode = useCallback(
(modeId: string) => {
if (!client) return;
if (!client || !slice?.provider) return;
void updatePreferences((current) =>
mergeProviderPreferences({
preferences: current,
provider: slice.provider,
updates: {
mode: modeId || undefined,
},
}),
).catch((error) => {
console.warn("[AgentModeControl] persist mode preference failed", error);
});
void client
.setAgentMode(agentId, modeId)
.then((notice) => showProviderNoticeToast(toast, notice))
@@ -281,7 +294,7 @@ export const AgentModeControl = memo(function AgentModeControl({
toast.error(toErrorMessage(error));
});
},
[agentId, client, toast],
[agentId, client, slice?.provider, toast, updatePreferences],
);
if (!slice || availableModes.length === 0) return null;