feat: opencode console support

This commit is contained in:
2026-10-16 19:05:02 -04:00
parent 6e3a283d81
commit 3be16d3d58
3 changed files with 48 additions and 7 deletions

View File

@@ -66,6 +66,9 @@ pub struct AppArgs {
#[arg(long)]
pub ollama_cloud_api_key: Vec<SecretString>,
#[arg(long)]
pub opencode_console_api_key: Vec<SecretString>,
#[arg(long)]
pub openrouter_api_key: Vec<SecretString>,

View File

@@ -96,6 +96,7 @@ enum Provider {
NovitaAi,
NvidiaNim,
Ollama,
OpenCode,
OpenRouter,
VercelAiGateway,
ZAi,
@@ -129,6 +130,7 @@ impl Shortcut {
"nvidia/nemotron-3.5-lightning-free".into(),
),
(P::OpenRouter, "nvidia/nemotron-3.5-lightning:free".into()),
(P::OpenCode, "nemotron-3.5-lightning-free".into()),
(P::ZAi, "glm-4.6v-flash".into()),
(P::ZAi, "glm-4.5-flash".into()),
(P::OpenRouter, "poolside/laguna-xs.2:free".into()),
@@ -180,6 +182,7 @@ impl Shortcut {
"nvidia/nemotron-3.5-super-vl-120b-a12b".into(),
),
(P::OpenRouter, "nvidia/nemotron-3.5-super-vl:free".into()),
(P::OpenCode, "nemotron-3.5-super-vl-free".into()),
(P::Mistral, "mistral-medium-3.5".into()),
(P::Kilo, "inclusionai-ling-3-0-flash-free".into()),
(P::NovitaAi, "inclusionai/ling-3.0-flash-vl".into()),
@@ -223,15 +226,19 @@ impl Shortcut {
(P::NvidiaNim, "stepfun-ai/step-5-preview".into()),
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3-flash".into()),
(P::NvidiaNim, "z-ai/glm-5-3-flash".into()),
(P::OpenCode, "glm-5.3-flash-free".into()),
(P::HuggingFace, "zai-org/GLM-5.3-Flash".into()),
(P::HuggingFace, "zai-org/GLM-5.3-Flash-BF16".into()),
(P::VercelAiGateway, "openai/gpt-5.2".into()),
(P::NvidiaNim, "deepseek-ai/deepseek-v4.1-flash".into()),
(P::HuggingFace, "deepseek-ai/DeepSeek-V4.1-Flash".into()),
(P::OpenCode, "deepseek-v4.1-flash-free".into()),
(P::VercelAiGateway, "inclusionai/ling-3.1-flash".into()),
(P::HuggingFace, "inclusionAI/Ling-3.1-flash".into()),
(P::Ollama, "beam".into()),
(P::OpenCode, "beam-free".into()),
(P::VercelAiGateway, "xiaomi/mimo-v2.6-flash".into()),
(P::OpenCode, "mimo-v2.6-flash-free".into()),
(P::HuggingFace, "XiaomiMiMo/MiMo-V2.6-Flash-RL".into()),
(P::Kilo, "nex-agi-nex-n2-5-pro-free".into()),
(P::VercelAiGateway, "xiaomi/mimo-v2.5".into()),
@@ -247,6 +254,7 @@ impl Shortcut {
(P::Ollama, "nemotron-3-ultra".into()),
(P::NvidiaNim, "nvidia/nemotron-3-ultra-550b-a55b".into()),
(P::Kilo, "nvidia-nemotron-3-ultra-550b-a55b-free".into()),
(P::OpenCode, "nemotron-3-ultra-free".into()),
],
S::XL => vec![
@@ -254,6 +262,7 @@ impl Shortcut {
(P::HuggingFace, "zai-org/GLM-5.3".into()),
(P::CloudflareWorkersAi, "@cf/zai-org/glm-5.3".into()),
(P::Mistral, "zai-glm-5-3".into()),
(P::OpenCode, "muse-spark-1.3-contributor-free".into()),
(P::NvidiaNim, "moonshotai/kimi-k3".into()),
(P::HuggingFace, "moonshotai/Kimi-K3".into()),
(P::HuggingFace, "tencent/Hy4-preview".into()),
@@ -261,6 +270,7 @@ impl Shortcut {
(P::Mistral, "mistral-large-4".into()),
(P::HuggingFace, "Qwen/Qwen3.8-2.4T-A95B".into()),
(P::VercelAiGateway, "xiaomi/mimo-v2.5-pro".into()),
(P::OpenCode, "longcat-2.5-preview-free".into()),
(P::OpenRouter, "thinkingmachines/inkling:free".into()),
(P::HuggingFace, "thinkingmachines/Inkling".into()),
(P::VercelAiGateway, "thinkingmachines/inkling".into()),
@@ -270,6 +280,8 @@ impl Shortcut {
S::Experimental => vec![
(P::OpenRouter, "space-bunny-alpha".into()),
(P::OpenCode, "space-bunny-free".into()),
(P::OpenCode, "big-pickle".into()),
(P::VercelAiGateway, "stealth/glyph-cluster".into()),
],
}
@@ -479,6 +491,18 @@ pub async fn create_chat_completion(
.build()
})
.collect(),
Provider::OpenCode => state
.app_args
.opencode_console_api_key
.iter()
.cloned()
.map(|api_key| {
Upstream::builder()
.url("https://opencode.ai/inference/openai/v1/chat/completions".parse().expect("TODO"))
.api_key(api_key)
.build()
})
.collect(),
Provider::VercelAiGateway => state
.app_args
.vercel_ai_gateway_api_key

View File

@@ -39,6 +39,7 @@ pub enum Shortcut {
enum Provider {
CloudflareWorkersAi,
LiquidAi,
OpenCode,
OpenRouter,
VercelAiGateway,
}
@@ -63,6 +64,7 @@ impl Shortcut {
S::M => {
vec![
(P::OpenCode, "jev-1.13-free".into()),
(P::CloudflareWorkersAi, "clef".into()),
(P::OpenRouter, "inception/mercury-decide:free".into()),
]
@@ -116,13 +118,13 @@ pub async fn create_system_one(
api_key,
}| {
Upstream::builder()
.url(
format!("https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/cloudflare/{model}")
.parse()
.expect("TODO"),
)
.api_key(api_key)
.build()
.url(
format!("https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/cloudflare/{model}")
.parse()
.expect("TODO"),
)
.api_key(api_key)
.build()
},
)
.collect(),
@@ -138,6 +140,18 @@ pub async fn create_system_one(
.build()
})
.collect(),
Provider::OpenCode => state
.app_args
.opencode_console_api_key
.iter()
.cloned()
.map(|api_key| {
Upstream::builder()
.url("https://opencode.ai/inference/systemone/v1/systemone".parse().expect("TODO"))
.api_key(api_key)
.build()
})
.collect(),
Provider::OpenRouter => state
.app_args
.openrouter_api_key