Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions apps/desktop-tauri/src/components/providers/providerIcons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ import crossmodel from "./icons/ProviderIcon-crossmodel.svg?raw";
import cursor from "./icons/ProviderIcon-cursor.svg?raw";
import deepgram from "./icons/ProviderIcon-deepgram.svg?raw";
import deepinfra from "./icons/ProviderIcon-deepinfra.svg?raw";
import clinepass from "./icons/ProviderIcon-clinepass.svg?raw";
import longcat from "./icons/ProviderIcon-longcat.svg?raw";
import neuralwatt from "./icons/ProviderIcon-neuralwatt.svg?raw";
import zenmux from "./icons/ProviderIcon-zenmux.svg?raw";
import deepseek from "./icons/ProviderIcon-deepseek.svg?raw";
import doubao from "./icons/ProviderIcon-doubao.svg?raw";
import elevenlabs from "./icons/ProviderIcon-elevenlabs.svg?raw";
Expand Down Expand Up @@ -91,6 +95,10 @@ const RAW: Record<string, string> = {
cursor: tint(cursor),
deepgram: tint(deepgram),
deepinfra: tint(deepinfra),
clinepass: tint(clinepass),
longcat: tint(longcat),
neuralwatt: tint(neuralwatt),
zenmux: tint(zenmux),
deepseek: tint(deepseek),
doubao: tint(doubao),
elevenlabs: tint(elevenlabs),
Expand Down Expand Up @@ -142,6 +150,10 @@ export const PROVIDER_ICON_REGISTRY: Record<string, ProviderIcon> = {
cursor: { id: "cursor", brandColor: "#00bfa5", fallbackLetter: "▸", svgPath: RAW.cursor },
deepgram: { id: "deepgram", brandColor: "#13ef93", fallbackLetter: "D", svgPath: RAW.deepgram },
deepinfra: { id: "deepinfra", brandColor: "#2a3275", fallbackLetter: "D", svgPath: RAW.deepinfra },
clinepass: { id: "clinepass", brandColor: "#61a3fa", fallbackLetter: "C", svgPath: RAW.clinepass },
longcat: { id: "longcat", brandColor: "#ffd100", fallbackLetter: "L", svgPath: RAW.longcat },
neuralwatt: { id: "neuralwatt", brandColor: "#38d98c", fallbackLetter: "N", svgPath: RAW.neuralwatt },
zenmux: { id: "zenmux", brandColor: "#6c5ce7", fallbackLetter: "Z", svgPath: RAW.zenmux },
deepseek: { id: "deepseek", brandColor: "#527df0", fallbackLetter: "D", svgPath: RAW.deepseek },
elevenlabs: { id: "elevenlabs", brandColor: "#111827", fallbackLetter: "E", svgPath: RAW.elevenlabs },
factory: { id: "factory", brandColor: "#ff6b35", fallbackLetter: "◎", svgPath: RAW.factory },
Expand Down Expand Up @@ -217,6 +229,12 @@ const ALIASES: Record<string, string> = {
"deep infra": "deepinfra",
"deep-infra": "deepinfra",
di: "deepinfra",
"zen-mux": "zenmux",
"cline-pass": "clinepass",
"long-cat": "longcat",
lc: "longcat",
"neural-watt": "neuralwatt",
nw: "neuralwatt",
codeium: "windsurf",
"xiaomi mimo": "mimo",
xiaomimimo: "mimo",
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop-tauri/src/surfaces/TrayPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import AgentSessions from "../components/AgentSessions";
const HAS_DASHBOARD = new Set([
"abacus", "alibaba", "alibabatokenplan", "amp", "augment",
"azureopenai", "bedrock", "claude", "codex", "codebuff",
"commandcode", "copilot", "crof", "crossmodel", "cursor", "deepgram", "deepinfra", "deepseek",
"commandcode", "copilot", "crof", "crossmodel", "cursor", "deepgram", "deepinfra", "deepseek", "zenmux", "clinepass", "longcat", "neuralwatt",
"doubao", "elevenlabs", "factory", "gemini", "grok", "groq",
"infini", "jetbrains", "kilo", "kimi", "kimik2", "kiro", "manus",
"mimo", "minimax", "mistral", "nanogpt", "ollama", "openaiapi",
Expand All @@ -49,7 +49,7 @@ const HAS_DASHBOARD = new Set([
/** Provider IDs that have a status page URL in the backend */
const HAS_STATUS_PAGE = new Set([
"alibabatokenplan", "amp", "augment", "azureopenai", "bedrock",
"claude", "codex", "copilot", "deepgram", "deepinfra", "deepseek", "elevenlabs",
"claude", "codex", "copilot", "deepgram", "deepinfra", "deepseek", "zenmux", "clinepass", "longcat", "neuralwatt", "elevenlabs",
"gemini", "grok", "groq", "kiro", "mistral", "openaiapi",
"openrouter", "vertexai", "windsurf",
]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,9 @@ function providerSourceHintShort(
case "nanogpt":
case "warp":
case "deepinfra":
case "zenmux":
case "clinepass":
case "neuralwatt":
case "doubao":
case "crof":
case "stepfun":
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop-tauri/src/test/providerCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ export const TEST_PROVIDER_CATALOG: Array<[string, string]> = [
["codebuff", "Codebuff"],
["deepseek", "DeepSeek"],
["deepinfra", "DeepInfra"],
["zenmux", "ZenMux"],
["clinepass", "ClinePass"],
["longcat", "LongCat"],
["neuralwatt", "Neuralwatt"],
["windsurf", "Windsurf"],
["manus", "Manus"],
["mimo", "Xiaomi MiMo"],
Expand Down
4 changes: 4 additions & 0 deletions apps/desktop-tauri/src/types/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ export type ProofProviderId =
| "codebuff"
| "deepseek"
| "deepinfra"
| "zenmux"
| "clinepass"
| "longcat"
| "neuralwatt"
| "windsurf"
| "manus"
| "mimo"
Expand Down
28 changes: 28 additions & 0 deletions rust/src/core/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ pub enum ProviderId {
Sakana,
Sub2Api,
Wayfinder,
ZenMux,
ClinePass,
LongCat,
Neuralwatt,
}

impl ProviderId {
Expand Down Expand Up @@ -135,6 +139,10 @@ impl ProviderId {
ProviderId::Sakana,
ProviderId::Sub2Api,
ProviderId::Wayfinder,
ProviderId::ZenMux,
ProviderId::ClinePass,
ProviderId::LongCat,
ProviderId::Neuralwatt,
]
}

Expand Down Expand Up @@ -200,6 +208,10 @@ impl ProviderId {
ProviderId::Sakana => "sakana",
ProviderId::Sub2Api => "sub2api",
ProviderId::Wayfinder => "wayfinder",
ProviderId::ZenMux => "zenmux",
ProviderId::ClinePass => "clinepass",
ProviderId::LongCat => "longcat",
ProviderId::Neuralwatt => "neuralwatt",
}
}

Expand Down Expand Up @@ -265,6 +277,10 @@ impl ProviderId {
ProviderId::Sakana => "Sakana AI",
ProviderId::Sub2Api => "sub2api",
ProviderId::Wayfinder => "Wayfinder",
ProviderId::ZenMux => "ZenMux",
ProviderId::ClinePass => "ClinePass",
ProviderId::LongCat => "LongCat",
ProviderId::Neuralwatt => "Neuralwatt",
}
}

Expand Down Expand Up @@ -302,6 +318,7 @@ impl ProviderId {
ProviderId::Grok => Some("grok.com"),
ProviderId::Qoder => Some("qoder.com"),
ProviderId::Sakana => Some("console.sakana.ai"),
ProviderId::LongCat => Some("longcat.chat"),
// Token-based providers (don't use cookies)
ProviderId::Copilot => None,
ProviderId::Zai => None,
Expand Down Expand Up @@ -335,6 +352,9 @@ impl ProviderId {
ProviderId::CrossModel => None,
ProviderId::Sub2Api => None,
ProviderId::Wayfinder => None,
ProviderId::ZenMux => None,
ProviderId::ClinePass => None,
ProviderId::Neuralwatt => None,
}
}

Expand Down Expand Up @@ -407,6 +427,10 @@ impl ProviderId {
"sakana" | "sakana-ai" | "sakana ai" => Some(ProviderId::Sakana),
"sub2api" | "sub-2-api" | "sub 2 api" => Some(ProviderId::Sub2Api),
"wayfinder" => Some(ProviderId::Wayfinder),
"zenmux" | "zen-mux" => Some(ProviderId::ZenMux),
"clinepass" | "cline-pass" | "cline" => Some(ProviderId::ClinePass),
"longcat" | "long-cat" | "lc" => Some(ProviderId::LongCat),
"neuralwatt" | "neural-watt" | "nw" | "neural" => Some(ProviderId::Neuralwatt),
_ => None,
}
}
Expand Down Expand Up @@ -682,6 +706,10 @@ mod tests {
assert!(all.contains(&ProviderId::Sakana));
assert!(all.contains(&ProviderId::Sub2Api));
assert!(all.contains(&ProviderId::Wayfinder));
assert!(all.contains(&ProviderId::ZenMux));
assert!(all.contains(&ProviderId::ClinePass));
assert!(all.contains(&ProviderId::LongCat));
assert!(all.contains(&ProviderId::Neuralwatt));
}

#[test]
Expand Down
25 changes: 15 additions & 10 deletions rust/src/core/provider_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@
use super::{Provider, ProviderId};
use crate::providers::{
AbacusProvider, AlibabaProvider, AlibabaTokenPlanProvider, AmpProvider, AntigravityProvider,
AugmentProvider, AzureOpenAIProvider, BedrockProvider, ChutesProvider, ClaudeProvider,
CodebuffProvider, CodexProvider, CommandCodeProvider, CopilotProvider, CrofProvider,
CrossModelProvider, CursorProvider, DeepInfraProvider, DeepSeekProvider, DeepgramProvider, DevinProvider,
DoubaoProvider, ElevenLabsProvider, FactoryProvider, GeminiProvider, GrokProvider,
GroqProvider, InfiniProvider, JetBrainsProvider, KiloProvider, KimiK2Provider, KimiProvider,
KiroProvider, LLMProxyProvider, LiteLLMProvider, ManusProvider, MiMoProvider, MiniMaxProvider,
MistralProvider, NanoGPTProvider, OllamaProvider, OpenAIApiProvider, OpenCodeGoProvider,
OpenCodeProvider, OpenRouterProvider, PerplexityProvider, PoeProvider, QoderProvider,
SakanaProvider, StepFunProvider, Sub2ApiProvider, T3ChatProvider, VeniceProvider,
VertexAIProvider, WarpProvider, WayfinderProvider, WindsurfProvider, ZaiProvider, ZedProvider,
AugmentProvider, AzureOpenAIProvider, BedrockProvider, ChutesProvider, ClinePassProvider,
ClaudeProvider, CodebuffProvider, CodexProvider, CommandCodeProvider, CopilotProvider,
CrofProvider, CrossModelProvider, CursorProvider, DeepInfraProvider, DeepSeekProvider,
DeepgramProvider, DevinProvider, DoubaoProvider, ElevenLabsProvider, FactoryProvider,
GeminiProvider, GrokProvider, GroqProvider, InfiniProvider, JetBrainsProvider, KiloProvider,
KimiK2Provider, KimiProvider, KiroProvider, LLMProxyProvider, LiteLLMProvider, LongCatProvider,
ManusProvider, MiMoProvider, MiniMaxProvider, MistralProvider, NanoGPTProvider,
NeuralwattProvider, OllamaProvider, OpenAIApiProvider, OpenCodeGoProvider, OpenCodeProvider,
OpenRouterProvider, PerplexityProvider, PoeProvider, QoderProvider, SakanaProvider,
StepFunProvider, Sub2ApiProvider, T3ChatProvider, VeniceProvider, VertexAIProvider,
WarpProvider, WayfinderProvider, WindsurfProvider, ZaiProvider, ZedProvider, ZenMuxProvider,
};

/// Instantiate the concrete [`Provider`] implementation for a given [`ProviderId`].
Expand Down Expand Up @@ -85,6 +86,10 @@ pub fn instantiate(id: ProviderId) -> Box<dyn Provider> {
ProviderId::Sakana => Box::new(SakanaProvider::new()),
ProviderId::Sub2Api => Box::new(Sub2ApiProvider::new()),
ProviderId::Wayfinder => Box::new(WayfinderProvider::new()),
ProviderId::ZenMux => Box::new(ZenMuxProvider::new()),
ProviderId::ClinePass => Box::new(ClinePassProvider::new()),
ProviderId::LongCat => Box::new(LongCatProvider::new()),
ProviderId::Neuralwatt => Box::new(NeuralwattProvider::new()),
}
}

Expand Down
31 changes: 31 additions & 0 deletions rust/src/core/token_accounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,36 @@ impl TokenAccountSupport {
requires_manual_cookie_source: false,
cookie_name: None,
}),
ProviderId::ZenMux => Some(TokenAccountSupport {
title: "API keys",
subtitle: "Store multiple ZenMux Management API keys.",
placeholder: "Management API key",
injection: TokenInjection::Environment {
key: "ZENMUX_MANAGEMENT_API_KEY".to_string(),
},
requires_manual_cookie_source: false,
cookie_name: None,
}),
ProviderId::ClinePass => Some(TokenAccountSupport {
title: "API keys",
subtitle: "Store multiple ClinePass API keys.",
placeholder: "API key",
injection: TokenInjection::Environment {
key: "CLINEPASS_API_KEY".to_string(),
},
requires_manual_cookie_source: false,
cookie_name: None,
}),
ProviderId::Neuralwatt => Some(TokenAccountSupport {
title: "API keys",
subtitle: "Store multiple Neuralwatt API keys.",
placeholder: "API key",
injection: TokenInjection::Environment {
key: "NEURALWATT_API_KEY".to_string(),
},
requires_manual_cookie_source: false,
cookie_name: None,
}),
// Upstream 0.45 #2271: labeled OpenRouter API keys via token accounts.
ProviderId::OpenRouter => Some(TokenAccountSupport {
title: "API keys",
Expand Down Expand Up @@ -267,6 +297,7 @@ impl TokenAccountSupport {
| ProviderId::Devin
| ProviderId::Zed
| ProviderId::CrossModel
| ProviderId::LongCat
| ProviderId::Wayfinder => None,
}
}
Expand Down
Loading
Loading