|
1 | 1 | import { useEffect } from "react"; |
2 | 2 | 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"; |
4 | 8 | import { |
5 | 9 | getModelKey, |
6 | 10 | getThinkingLevelKey, |
@@ -35,37 +39,34 @@ export function WorkspaceModeAISync(props: { workspaceId: string }): null { |
35 | 39 |
|
36 | 40 | useEffect(() => { |
37 | 41 | const fallbackModel = getDefaultModel(); |
| 42 | + const modelKey = getModelKey(workspaceId); |
| 43 | + const thinkingKey = getThinkingLevelKey(workspaceId); |
38 | 44 |
|
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; |
40 | 48 | const resolvedModel = |
41 | 49 | typeof candidateModel === "string" && candidateModel.trim().length > 0 |
42 | 50 | ? candidateModel |
43 | 51 | : fallbackModel; |
44 | 52 |
|
| 53 | + const existingThinking = readPersistedState<ThinkingLevel>(thinkingKey, "off"); |
45 | 54 | const candidateThinking = |
46 | | - workspaceByMode[mode]?.thinkingLevel ?? modeAiDefaults[mode]?.thinkingLevel ?? "off"; |
| 55 | + workspaceByMode[mode]?.thinkingLevel ?? |
| 56 | + modeAiDefaults[mode]?.thinkingLevel ?? |
| 57 | + existingThinking ?? |
| 58 | + "off"; |
47 | 59 | const resolvedThinking = coerceThinkingLevel(candidateThinking) ?? "off"; |
48 | 60 |
|
49 | 61 | const effectiveThinking = enforceThinkingPolicy(resolvedModel, resolvedThinking); |
50 | 62 |
|
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 | + } |
61 | 66 |
|
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 | + } |
69 | 70 | }, [mode, modeAiDefaults, workspaceByMode, workspaceId]); |
70 | 71 |
|
71 | 72 | return null; |
|
0 commit comments