Skip to content

Commit 0f4796f

Browse files
committed
🤖 fix: preserve existing model/thinking in mode sync
Change-Id: I1a5ba1d32ff0a15abae85af904d89074e36be101 Signed-off-by: Thomas Kosiewski <[email protected]>
1 parent 389acd9 commit 0f4796f

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

src/browser/components/WorkspaceModeAISync.tsx

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { useEffect } from "react";
22
import { useMode } from "@/browser/contexts/ModeContext";
3-
import { updatePersistedState, usePersistedState } from "@/browser/hooks/usePersistedState";
3+
import {
4+
readPersistedState,
5+
updatePersistedState,
6+
usePersistedState,
7+
} from "@/browser/hooks/usePersistedState";
48
import {
59
getModelKey,
610
getThinkingLevelKey,
@@ -35,37 +39,34 @@ export function WorkspaceModeAISync(props: { workspaceId: string }): null {
3539

3640
useEffect(() => {
3741
const fallbackModel = getDefaultModel();
42+
const modelKey = getModelKey(workspaceId);
43+
const thinkingKey = getThinkingLevelKey(workspaceId);
3844

39-
const candidateModel = workspaceByMode[mode]?.model ?? modeAiDefaults[mode]?.modelString;
45+
const existingModel = readPersistedState<string>(modelKey, fallbackModel);
46+
const candidateModel =
47+
workspaceByMode[mode]?.model ?? modeAiDefaults[mode]?.modelString ?? existingModel;
4048
const resolvedModel =
4149
typeof candidateModel === "string" && candidateModel.trim().length > 0
4250
? candidateModel
4351
: fallbackModel;
4452

53+
const existingThinking = readPersistedState<ThinkingLevel>(thinkingKey, "off");
4554
const candidateThinking =
46-
workspaceByMode[mode]?.thinkingLevel ?? modeAiDefaults[mode]?.thinkingLevel ?? "off";
55+
workspaceByMode[mode]?.thinkingLevel ??
56+
modeAiDefaults[mode]?.thinkingLevel ??
57+
existingThinking ??
58+
"off";
4759
const resolvedThinking = coerceThinkingLevel(candidateThinking) ?? "off";
4860

4961
const effectiveThinking = enforceThinkingPolicy(resolvedModel, resolvedThinking);
5062

51-
const modelKey = getModelKey(workspaceId);
52-
const thinkingKey = getThinkingLevelKey(workspaceId);
53-
54-
updatePersistedState(
55-
modelKey,
56-
(prev) => {
57-
return prev === resolvedModel ? prev : resolvedModel;
58-
},
59-
fallbackModel
60-
);
63+
if (existingModel !== resolvedModel) {
64+
updatePersistedState(modelKey, resolvedModel);
65+
}
6166

62-
updatePersistedState(
63-
thinkingKey,
64-
(prev) => {
65-
return prev === effectiveThinking ? prev : effectiveThinking;
66-
},
67-
"off"
68-
);
67+
if (existingThinking !== effectiveThinking) {
68+
updatePersistedState(thinkingKey, effectiveThinking);
69+
}
6970
}, [mode, modeAiDefaults, workspaceByMode, workspaceId]);
7071

7172
return null;

0 commit comments

Comments
 (0)