From fb6bb1893417cb0b53d26e2f9765aa72c01ec474 Mon Sep 17 00:00:00 2001 From: Fini Date: Sun, 31 May 2026 19:16:29 +0800 Subject: [PATCH] fix(ai): align model discovery order --- crates/op-host-desktop/src/model_discovery.rs | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/crates/op-host-desktop/src/model_discovery.rs b/crates/op-host-desktop/src/model_discovery.rs index 3390b0ecf..b412bcac2 100644 --- a/crates/op-host-desktop/src/model_discovery.rs +++ b/crates/op-host-desktop/src/model_discovery.rs @@ -94,14 +94,24 @@ fn model_entry_to_ec(m: ModelEntry) -> op_editor_core::ModelEntry { /// it only reads files and spawns short-lived subprocesses. pub fn discover_models() -> Vec { let mut out = Vec::new(); - out.extend(discover_claude()); - out.extend(discover_codex()); - out.extend(discover_gemini()); - out.extend(discover_copilot()); - out.extend(discover_opencode()); + for provider in discovery_provider_order() { + match provider { + AgentProvider::ClaudeCode => out.extend(discover_claude()), + AgentProvider::CodexCli => out.extend(discover_codex()), + AgentProvider::OpenCode => out.extend(discover_opencode()), + AgentProvider::GithubCopilot => out.extend(discover_copilot()), + AgentProvider::GeminiCli => out.extend(discover_gemini()), + } + } out } +/// Provider probe order mirrors TS `DEFAULT_PROVIDERS`, which is +/// also the core `AgentProvider::ALL` order used by Settings. +fn discovery_provider_order() -> [AgentProvider; 5] { + AgentProvider::ALL +} + /// Resolve `name` to an executable on `PATH`. On Windows this also /// tries the `.exe` / `.cmd` / `.bat` suffixes so npm-installed CLI /// shims resolve. Returns `None` when the CLI is not installed. @@ -561,6 +571,11 @@ mod tests { assert_eq!(models[0].display_name, "GPT-5"); } + #[test] + fn discovery_order_matches_ts_default_provider_order() { + assert_eq!(discovery_provider_order(), AgentProvider::ALL); + } + #[test] fn discover_models_never_panics() { // Whatever is or isn't installed on the test machine, the