refactor: remove dead ultrawork model override code

Remove ultrawork-model-override hook and per-agent ultrawork model swap
config that relied on zen opencode.ai free tier (no longer functional).

Removed:
- src/hooks/ultrawork-model-override/ (hook, test, index)
- ultrawork field from AgentOverrideConfigSchema
- ultrawork-model-override from HookNameSchema
- UltraworkConfig type from model-fallback-types
- Non-max20 sonnet+ultrawork-opus codepath from model-fallback
- Claude subscription model table from installation docs
- All references in plugin-interface, create-session-hooks, schema.json
- Related test cases and updated snapshots
This commit is contained in:
YeonGyu-Kim
2026-02-19 03:17:40 +09:00
parent 5dc437f45d
commit 6df7f73f81
14 changed files with 7 additions and 628 deletions
@@ -94,11 +94,7 @@ exports[`generateModelConfig single native provider uses Claude models when only
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
@@ -483,11 +479,7 @@ exports[`generateModelConfig all native providers uses preferred models from fal
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
@@ -1044,11 +1036,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
@@ -1192,11 +1180,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + ZAI combinat
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
@@ -1257,11 +1241,7 @@ exports[`generateModelConfig mixed provider scenarios uses Gemini + Claude combi
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
@@ -1405,11 +1385,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe
"variant": "max",
},
"sisyphus": {
"model": "anthropic/claude-sonnet-4-6",
"ultrawork": {
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
"model": "anthropic/claude-opus-4-6",
"variant": "max",
},
},
-46
View File
@@ -240,52 +240,6 @@ describe("config-manager ANTIGRAVITY_PROVIDER_CONFIG", () => {
})
describe("generateOmoConfig - model fallback system", () => {
test("generates sonnet model with ultrawork opus for Claude standard subscription", () => {
// #given user has Claude standard subscription (not max20)
const config: InstallConfig = {
hasClaude: true,
isMax20: false,
hasOpenAI: false,
hasGemini: false,
hasCopilot: false,
hasOpencodeZen: false,
hasZaiCodingPlan: false,
hasKimiForCoding: false,
}
// #when generating config
const result = generateOmoConfig(config)
// #then Sisyphus uses sonnet for daily driving with ultrawork opus override
const sisyphus = (result.agents as Record<string, { model: string; variant?: string; ultrawork?: { model: string; variant?: string } }>).sisyphus
expect(result.$schema).toBe("https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json")
expect(sisyphus.model).toBe("anthropic/claude-sonnet-4-6")
expect(sisyphus.variant).toBe("max")
expect(sisyphus.ultrawork).toEqual({ model: "anthropic/claude-opus-4-6", variant: "max" })
})
test("generates native opus models without ultrawork when Claude max20 subscription", () => {
// #given user has Claude max20 subscription
const config: InstallConfig = {
hasClaude: true,
isMax20: true,
hasOpenAI: false,
hasGemini: false,
hasCopilot: false,
hasOpencodeZen: false,
hasZaiCodingPlan: false,
hasKimiForCoding: false,
}
// #when generating config
const result = generateOmoConfig(config)
// #then Sisyphus uses opus directly, no ultrawork override needed
const sisyphus = (result.agents as Record<string, { model: string; ultrawork?: unknown }>).sisyphus
expect(sisyphus.model).toBe("anthropic/claude-opus-4-6")
expect(sisyphus.ultrawork).toBeUndefined()
})
test("uses github-copilot sonnet fallback when only copilot available", () => {
// #given user has only copilot (no max plan)
const config: InstallConfig = {
-6
View File
@@ -11,15 +11,9 @@ export interface ProviderAvailability {
isMaxPlan: boolean
}
export interface UltraworkConfig {
model: string
variant?: string
}
export interface AgentConfig {
model: string
variant?: string
ultrawork?: UltraworkConfig
}
export interface CategoryConfig {
-9
View File
@@ -76,15 +76,6 @@ export function generateModelConfig(config: InstallConfig): GeneratedOmoConfig {
continue
}
if (avail.native.claude && !avail.isMaxPlan) {
agents[role] = {
model: "anthropic/claude-sonnet-4-6",
variant: "max",
ultrawork: { model: "anthropic/claude-opus-4-6", variant: "max" },
}
continue
}
const resolved = resolveModelFromChain(fallbackChain, avail)
if (resolved) {
const variant = resolved.variant ?? req.variant