Skip to content

Commit e19e1f0

Browse files
fix(opencode): address review feedback
1 parent c1dda85 commit e19e1f0

2 files changed

Lines changed: 30 additions & 2 deletions

File tree

apps/server/tests/unit/providers/opencode-provider.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ describe('opencode-provider.ts', () => {
109109

110110
const parseModelsOutput = (
111111
provider as unknown as { parseModelsOutput: (output: string) => ModelDefinition[] }
112-
).parseModelsOutput;
112+
).parseModelsOutput.bind(provider);
113113
const models = parseModelsOutput(output);
114114

115115
expect(models).toHaveLength(2);

apps/ui/src/hooks/use-settings-sync.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ import { useAppStore, type ThemeMode, THEME_STORAGE_KEY } from '@/store/app-stor
1919
import { useSetupStore } from '@/store/setup-store';
2020
import { useAuthStore } from '@/store/auth-store';
2121
import { waitForMigrationComplete, resetMigrationState } from './use-settings-migration';
22-
import type { GlobalSettings } from '@automaker/types';
22+
import {
23+
DEFAULT_OPENCODE_MODEL,
24+
getAllOpencodeModelIds,
25+
type GlobalSettings,
26+
} from '@automaker/types';
2327

2428
const logger = createLogger('SettingsSync');
2529

@@ -424,6 +428,27 @@ export async function refreshSettingsFromServer(): Promise<boolean> {
424428

425429
const serverSettings = result.settings as unknown as GlobalSettings;
426430
const currentAppState = useAppStore.getState();
431+
const validOpencodeModelIds = new Set(getAllOpencodeModelIds());
432+
const incomingEnabledOpencodeModels =
433+
serverSettings.enabledOpencodeModels ?? currentAppState.enabledOpencodeModels;
434+
const sanitizedOpencodeDefaultModel = validOpencodeModelIds.has(
435+
serverSettings.opencodeDefaultModel ?? currentAppState.opencodeDefaultModel
436+
)
437+
? (serverSettings.opencodeDefaultModel ?? currentAppState.opencodeDefaultModel)
438+
: DEFAULT_OPENCODE_MODEL;
439+
const sanitizedEnabledOpencodeModels = Array.from(
440+
new Set(incomingEnabledOpencodeModels.filter((modelId) => validOpencodeModelIds.has(modelId)))
441+
);
442+
443+
if (!sanitizedEnabledOpencodeModels.includes(sanitizedOpencodeDefaultModel)) {
444+
sanitizedEnabledOpencodeModels.push(sanitizedOpencodeDefaultModel);
445+
}
446+
447+
const persistedDynamicModelIds =
448+
serverSettings.enabledDynamicModelIds ?? currentAppState.enabledDynamicModelIds;
449+
const sanitizedDynamicModelIds = persistedDynamicModelIds.filter(
450+
(modelId) => !modelId.startsWith('amazon-bedrock/')
451+
);
427452

428453
// Save theme to localStorage for fallback when server settings aren't available
429454
if (serverSettings.theme) {
@@ -447,6 +472,9 @@ export async function refreshSettingsFromServer(): Promise<boolean> {
447472
phaseModels: serverSettings.phaseModels,
448473
enabledCursorModels: serverSettings.enabledCursorModels,
449474
cursorDefaultModel: serverSettings.cursorDefaultModel,
475+
enabledOpencodeModels: sanitizedEnabledOpencodeModels,
476+
opencodeDefaultModel: sanitizedOpencodeDefaultModel,
477+
enabledDynamicModelIds: sanitizedDynamicModelIds,
450478
autoLoadClaudeMd: serverSettings.autoLoadClaudeMd ?? false,
451479
keyboardShortcuts: {
452480
...currentAppState.keyboardShortcuts,

0 commit comments

Comments
 (0)