From bd16fbfbbe78cadc2cc3ce6295691772df51d71f Mon Sep 17 00:00:00 2001 From: Vincenzo Palazzo Date: Mon, 24 Aug 2026 07:38:08 +0000 Subject: [PATCH] feat(providers): add OpenCode Zen gateway as a declarative provider (#10939) --- .../src/canonical/name_builder.rs | 5 ++++ crates/goose-providers/src/declarative.rs | 1 + .../declarative/definitions/opencode_zen.json | 28 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 crates/goose-providers/src/declarative/definitions/opencode_zen.json diff --git a/crates/goose-provider-types/src/canonical/name_builder.rs b/crates/goose-provider-types/src/canonical/name_builder.rs index 61ec23c45..a4a4fed20 100644 --- a/crates/goose-provider-types/src/canonical/name_builder.rs +++ b/crates/goose-provider-types/src/canonical/name_builder.rs @@ -53,6 +53,7 @@ pub fn map_provider_name(provider: &str) -> &str { "zhipu" => "zhipuai", "novita" => "novita-ai", "opencode_go" => "opencode-go", + "opencode_zen" => "opencode", "ollama_cloud" => "ollama-cloud", "kimi_code" => "kimi-for-coding", _ => provider, @@ -345,6 +346,10 @@ mod tests { map_to_canonical_model("opencode_go", "kimi-k2.6", r), Some("opencode-go/kimi-k2.6".to_string()) ); + assert_eq!( + map_to_canonical_model("opencode_zen", "kimi-k3", r), + Some("opencode/kimi-k3".to_string()) + ); // === OpenRouter === assert_eq!( diff --git a/crates/goose-providers/src/declarative.rs b/crates/goose-providers/src/declarative.rs index d5ac63474..dfd7935d9 100644 --- a/crates/goose-providers/src/declarative.rs +++ b/crates/goose-providers/src/declarative.rs @@ -39,6 +39,7 @@ pub(crate) mod declarative_providers { ollama_cloud, omlx, opencode_go, + opencode_zen, orcarouter, ovhcloud, perplexity, diff --git a/crates/goose-providers/src/declarative/definitions/opencode_zen.json b/crates/goose-providers/src/declarative/definitions/opencode_zen.json new file mode 100644 index 000000000..d9ace18ad --- /dev/null +++ b/crates/goose-providers/src/declarative/definitions/opencode_zen.json @@ -0,0 +1,28 @@ +{ + "name": "opencode_zen", + "engine": "openai", + "display_name": "OpenCode Zen", + "description": "OpenCode Zen gateway — curated, benchmarked models through the OpenAI-compatible API.", + "api_key_env": "OPENCODE_API_KEY", + "base_url": "https://opencode.ai/zen/v1", + "catalog_provider_id": "opencode", + "dynamic_models": false, + "model_doc_link": "https://opencode.ai/docs/zen", + "preserves_thinking": true, + "models": [ + {"name": "kimi-k3", "context_limit": 262144}, + {"name": "kimi-k2.7-code", "context_limit": 262144}, + {"name": "kimi-k2.6", "context_limit": 262144}, + {"name": "kimi-k2.5", "context_limit": 262144}, + {"name": "glm-5.2", "context_limit": 204800}, + {"name": "glm-5.1", "context_limit": 204800}, + {"name": "deepseek-v4-pro", "context_limit": 1000000}, + {"name": "deepseek-v4-flash", "context_limit": 1000000}, + {"name": "deepseek-v4-flash-free", "context_limit": 1000000}, + {"name": "minimax-m3", "context_limit": 204800}, + {"name": "minimax-m2.7", "context_limit": 204800}, + {"name": "minimax-m2.5", "context_limit": 204800}, + {"name": "mimo-v2.5-free", "context_limit": 262144} + ], + "supports_streaming": true +}