Files
Peter Steinberger 1f4740e95f fix(opencode): migrate retired free model refs (#121125)
* fix(opencode): migrate retired free model refs

Repair the shipped beta upgrade path through the provider-owned Doctor contract. Activate the migration from the canonical configured-model selector inventory so every supported selector is covered consistently.

Co-authored-by: samson1357924 <samson1357924@gmail.com>

* fix(opencode): migrate media model preferences

---------

Co-authored-by: samson1357924 <samson1357924@gmail.com>
2026-08-09 11:16:59 -07:00

686 lines
20 KiB
JSON

{
"id": "opencode",
"icon": "https://cdn.simpleicons.org/opencode",
"doctorContract": {
"configRepair": true
},
"activation": {
"onStartup": true
},
"providerCatalogEntry": "./provider-discovery.ts",
"enabledByDefault": true,
"providers": [
"opencode"
],
"providerEndpoints": [
{
"endpointClass": "opencode-native",
"hostSuffixes": [
"opencode.ai"
]
}
],
"providerRequest": {
"providers": {
"opencode": {
"family": "opencode"
}
}
},
"modelCatalog": {
"providers": {
"opencode": {
"baseUrl": "https://opencode.ai/zen/v1",
"api": "openai-completions",
"models": [
{
"id": "claude-opus-5",
"name": "Claude Opus 5",
"api": "anthropic-messages",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 5,
"output": 25,
"cacheRead": 0.5,
"cacheWrite": 6.25
},
"contextWindow": 1000000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "medium", "high", "xhigh", "max"],
"maxTokensField": "max_tokens",
"codeMode": "capable"
}
},
{
"id": "claude-opus-4-8",
"name": "Claude Opus 4.8",
"api": "anthropic-messages",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 5,
"output": 25,
"cacheRead": 0.5,
"cacheWrite": 6.25
},
"contextWindow": 1000000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "medium", "high", "xhigh", "max"],
"maxTokensField": "max_tokens",
"codeMode": "capable"
},
"status": "deprecated",
"replacedBy": "claude-opus-5"
},
{
"id": "claude-sonnet-4",
"name": "Claude Sonnet 4",
"api": "anthropic-messages",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen",
"reasoning": true,
"input": ["text", "image"],
"cost": {
"input": 3,
"output": 15,
"cacheRead": 0.3,
"cacheWrite": 3.75,
"tieredPricing": [
{
"input": 3,
"output": 15,
"cacheRead": 0.3,
"cacheWrite": 3.75,
"range": [0, 200000]
},
{
"input": 6,
"output": 22.5,
"cacheRead": 0.6,
"cacheWrite": 7.5,
"range": [200000]
}
]
},
"contextWindow": 1000000,
"maxTokens": 64000,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens"
},
"status": "deprecated"
},
{
"id": "gpt-5.6-sol",
"name": "GPT-5.6 Sol",
"api": "openai-responses",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 5,
"output": 30,
"cacheRead": 0.5,
"cacheWrite": 6.25,
"tieredPricing": [
{
"input": 5,
"output": 30,
"cacheRead": 0.5,
"cacheWrite": 6.25,
"range": [
0,
272000
]
},
{
"input": 10,
"output": 45,
"cacheRead": 1,
"cacheWrite": 12.5,
"range": [
272000
]
}
]
},
"contextWindow": 1050000,
"contextTokens": 922000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": [
"none",
"low",
"medium",
"high",
"xhigh",
"max"
],
"maxTokensField": "max_tokens",
"codeMode": "capable"
}
},
{
"id": "gpt-5.5",
"name": "GPT-5.5",
"api": "openai-responses",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 5,
"output": 30,
"cacheRead": 0.5,
"cacheWrite": 0,
"tieredPricing": [
{
"input": 5,
"output": 30,
"cacheRead": 0.5,
"cacheWrite": 0,
"range": [
0,
272000
]
},
{
"input": 10,
"output": 45,
"cacheRead": 1,
"cacheWrite": 0,
"range": [
272000
]
}
]
},
"contextWindow": 1050000,
"contextTokens": 922000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "low", "medium", "high", "xhigh"],
"maxTokensField": "max_tokens",
"codeMode": "capable"
},
"status": "deprecated",
"replacedBy": "gpt-5.6-sol"
},
{
"id": "gemini-3.6-flash",
"name": "Gemini 3.6 Flash",
"api": "google-generative-ai",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 1.5,
"output": 7.5,
"cacheRead": 0.15,
"cacheWrite": 0
},
"contextWindow": 1048576,
"maxTokens": 65536,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["minimal", "low", "medium", "high"],
"maxTokensField": "max_tokens"
}
},
{
"id": "gemini-3.1-pro",
"name": "Gemini 3.1 Pro Preview",
"api": "google-generative-ai",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 2,
"output": 12,
"cacheRead": 0.2,
"cacheWrite": 0,
"tieredPricing": [
{
"input": 2,
"output": 12,
"cacheRead": 0.2,
"cacheWrite": 0,
"range": [
0,
200000
]
},
{
"input": 4,
"output": 18,
"cacheRead": 0.4,
"cacheWrite": 0,
"range": [
200000
]
}
]
},
"contextWindow": 1048576,
"maxTokens": 65536,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "medium", "high"],
"maxTokensField": "max_tokens"
}
},
{
"id": "minimax-m3",
"name": "MiniMax M3",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0.3,
"output": 1.2,
"cacheRead": 0.06,
"cacheWrite": 0
},
"contextWindow": 512000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "minimax-m2.7",
"name": "MiniMax M2.7",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0.3,
"output": 1.2,
"cacheRead": 0.06,
"cacheWrite": 0
},
"contextWindow": 204800,
"maxTokens": 131072,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
},
"status": "deprecated",
"replacedBy": "minimax-m3"
},
{
"id": "kimi-k3",
"name": "Kimi K3",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 3,
"output": 15,
"cacheRead": 0.3,
"cacheWrite": 0
},
"contextWindow": 1048576,
"maxTokens": 131072,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["max"],
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false,
"codeMode": "capable"
}
},
{
"id": "big-pickle",
"name": "Big Pickle",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"contextTokens": 160000,
"maxTokens": 32000,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "deepseek-v4-flash-free",
"name": "DeepSeek V4 Flash Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "high", "max"],
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "mimo-v2.5-free",
"name": "MiMo V2.5 Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text",
"image"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 32000,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "laguna-s-2.1-free",
"name": "Laguna S 2.1 Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 256000,
"maxTokens": 32000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "medium", "high"],
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "ling-3.0-flash-free",
"name": "Ling-3.0-flash Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 262144,
"maxTokens": 32768,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["low", "medium", "high"],
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
},
"status": "deprecated"
},
{
"id": "nemotron-3-ultra-free",
"name": "Nemotron 3 Ultra Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 1000000,
"maxTokens": 128000,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "north-mini-code-free",
"name": "North Mini Code Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 256000,
"maxTokens": 64000,
"compat": {
"supportsUsageInStreaming": true,
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "high"],
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "ling-3.0-tiny-free",
"name": "Ling-3.0-tiny Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": ["text"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 262144,
"maxTokens": 32768,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
},
{
"id": "longcat-2.0-free",
"name": "LongCat-2.0 Free",
"api": "openai-completions",
"provider": "opencode",
"baseUrl": "https://opencode.ai/zen/v1",
"reasoning": true,
"input": ["text"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 1000000,
"maxTokens": 131072,
"compat": {
"supportsUsageInStreaming": true,
"maxTokensField": "max_tokens",
"supportsDeveloperRole": false,
"supportsStrictMode": false
}
}
]
}
},
"discovery": {
"opencode": "runtime"
}
},
"setup": {
"providers": [
{
"id": "opencode",
"envVars": [
"OPENCODE_API_KEY",
"OPENCODE_ZEN_API_KEY"
]
}
]
},
"providerAuthChoices": [
{
"provider": "opencode",
"method": "api-key",
"choiceId": "opencode-zen",
"appGuidedSecret": true,
"choiceLabel": "OpenCode Zen catalog",
"groupId": "opencode",
"groupLabel": "OpenCode",
"groupHint": "Shared API key infrastructure for Zen + Go",
"optionKey": "opencodeZenApiKey",
"cliFlag": "--opencode-zen-api-key",
"cliOption": "--opencode-zen-api-key <key>",
"cliDescription": "OpenCode API key (Zen catalog)"
}
],
"contracts": {
"mediaUnderstandingProviders": [
"opencode"
]
},
"mediaUnderstandingProviderMetadata": {
"opencode": {
"capabilities": [
"image"
],
"defaultModels": {
"image": "gpt-5-nano"
}
}
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"sessionCatalog": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": true
}
}
}
}
},
"uiHints": {
"sessionCatalog.enabled": {
"label": "OpenCode Session Catalog",
"help": "Auto-detect OpenCode sessions on the Gateway and paired nodes, then show them in the sessions sidebar."
}
}
}