From fe4493c6a62afede78dc152ed7793b617045fbf9 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 14 Mar 2026 13:46:41 +0900 Subject: [PATCH] fix(model-fallback): keep model fallback opt-in by default Restore the runtime default that was introduced for model fallback so unset config no longer enables automatic retries unexpectedly. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/plugin/hooks/create-session-hooks.test.ts | 56 +++++++++++++++++++ src/plugin/hooks/create-session-hooks.ts | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/plugin/hooks/create-session-hooks.test.ts diff --git a/src/plugin/hooks/create-session-hooks.test.ts b/src/plugin/hooks/create-session-hooks.test.ts new file mode 100644 index 000000000..a1098fd43 --- /dev/null +++ b/src/plugin/hooks/create-session-hooks.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, it } from "bun:test" +import type { OhMyOpenCodeConfig } from "../../config" +import type { ModelCacheState } from "../../plugin-state" +import type { PluginContext } from "../types" +import { createSessionHooks } from "./create-session-hooks" + +const mockContext = { + directory: "/tmp", + client: { + tui: { + showToast: async () => ({}), + }, + session: { + get: async () => ({ data: null }), + update: async () => ({}), + }, + }, +} as unknown as PluginContext + +const mockModelCacheState = {} as ModelCacheState + +describe("createSessionHooks", () => { + it("keeps model fallback disabled when config is unset", () => { + // given + const pluginConfig = {} as OhMyOpenCodeConfig + + // when + const result = createSessionHooks({ + ctx: mockContext, + pluginConfig, + modelCacheState: mockModelCacheState, + isHookEnabled: (hookName) => hookName === "model-fallback", + safeHookEnabled: true, + }) + + // then + expect(result.modelFallback).toBeNull() + }) + + it("creates model fallback hook when config explicitly enables it", () => { + // given + const pluginConfig = { model_fallback: true } as OhMyOpenCodeConfig + + // when + const result = createSessionHooks({ + ctx: mockContext, + pluginConfig, + modelCacheState: mockModelCacheState, + isHookEnabled: (hookName) => hookName === "model-fallback", + safeHookEnabled: true, + }) + + // then + expect(result.modelFallback).not.toBeNull() + }) +}) diff --git a/src/plugin/hooks/create-session-hooks.ts b/src/plugin/hooks/create-session-hooks.ts index 42f62bf9e..daa5e4ff5 100644 --- a/src/plugin/hooks/create-session-hooks.ts +++ b/src/plugin/hooks/create-session-hooks.ts @@ -153,7 +153,7 @@ export function createSessionHooks(args: { // Model fallback hook (configurable via model_fallback config + disabled_hooks) // This handles automatic model switching when model errors occur - const isModelFallbackConfigEnabled = pluginConfig.model_fallback ?? true + const isModelFallbackConfigEnabled = pluginConfig.model_fallback ?? false const modelFallback = isModelFallbackConfigEnabled && isHookEnabled("model-fallback") ? safeHook("model-fallback", () => createModelFallbackHook({