diff --git a/deeplink-test.html b/deplink.html similarity index 94% rename from deeplink-test.html rename to deplink.html index fd213eb..5fe2c5d 100644 --- a/deeplink-test.html +++ b/deplink.html @@ -130,6 +130,8 @@ } .info-box ul { + list-style: disc; + margin-left: 20px; color: #856404; font-size: 14px; line-height: 1.8; @@ -294,9 +296,9 @@ Claude Official (官方)

- 导入 Claude 官方 API 配置。使用官方端点 api.anthropic.com,默认模型 claude-sonnet-4-20250514。 + 导入 Claude 官方 API 配置。使用官方端点 api.anthropic.com,默认模型 claude-haiku-4.1。

- 📥 导入 Claude Official @@ -308,9 +310,9 @@ Claude 测试环境

- 公司内部测试环境配置示例。包含备注信息,方便区分不同环境。默认模型 claude-sonnet-4-20250514。 + 公司内部测试环境配置示例。包含备注信息,方便区分不同环境。默认模型 claude-haiku-4.1。

- 📥 导入测试环境 @@ -327,9 +329,9 @@ OpenAI Official (官方)

- 导入 OpenAI 官方 API 配置。使用官方端点 api.openai.com,默认模型 gpt-4o。 + 导入 OpenAI 官方 API 配置。使用官方端点 api.openai.com,默认模型 gpt-5.1。

- 📥 导入 OpenAI Official @@ -341,9 +343,9 @@ Azure OpenAI

- Azure 部署的 OpenAI 服务示例。适合企业用户使用 Azure 云服务。默认模型 gpt-4o。 + Azure 部署的 OpenAI 服务示例。适合企业用户使用 Azure 云服务。默认模型 gpt-5.1。

- 📥 导入 Azure OpenAI @@ -360,9 +362,9 @@ Google Gemini Official

- 导入 Google Gemini 官方 API 配置。默认模型 gemini-2.0-flash-exp。 + 导入 Google Gemini 官方 API 配置。默认模型 gemini-3-pro-preview。

- 📥 导入 Google Gemini @@ -374,9 +376,9 @@ Gemini 测试环境

- 公司内部 Gemini 测试环境配置示例。用于验证 Gemini 相关深链接导入流程,请求地址为:https://api-gemini-test.company.com/v1beta。默认模型 gemini-2.0-flash-exp。 + 公司内部 Gemini 测试环境配置示例。用于验证 Gemini 相关深链接导入流程,请求地址为:https://api-gemini-test.company.com/v1beta。默认模型 gemini-3-pro-preview。

- 📥 导入 Gemini 测试环境 @@ -431,7 +433,7 @@
- +
@@ -546,3 +548,4 @@ + diff --git a/src-tauri/src/deeplink.rs b/src-tauri/src/deeplink.rs index ffde895..058e43e 100644 --- a/src-tauri/src/deeplink.rs +++ b/src-tauri/src/deeplink.rs @@ -220,21 +220,74 @@ fn build_provider_from_request( } AppType::Codex => { // Codex configuration structure - // For Codex, we store auth.json (JSON) and config.toml (TOML string) in settings_config + // For Codex, we store auth.json (JSON) and config.toml (TOML string) in settings_config。 + // + // 这里尽量与前端 `getCodexCustomTemplate` 的默认模板保持一致, + // 再根据深链接参数注入 base_url / model,避免出现“只有 base_url 行”的极简配置, + // 让通过 UI 新建和通过深链接导入的 Codex 自定义供应商行为一致。 - // Generate TOML string for config.toml - let mut config_toml = format!( - r#"[api] -base_url = "{}" -"#, - request.endpoint + // 1. 生成一个适合作为 model_provider 名的安全标识 + // 规则尽量与前端 codexProviderPresets.generateThirdPartyConfig 保持一致: + // - 转小写 + // - 非 [a-z0-9_] 统一替换为下划线 + // - 去掉首尾下划线 + // - 若结果为空,则使用 "custom" + let clean_provider_name = { + let raw: String = request + .name + .chars() + .filter(|c| !c.is_control()) + .collect(); + let lower = raw.to_lowercase(); + let mut key: String = lower + .chars() + .map(|c| match c { + 'a'..='z' | '0'..='9' | '_' => c, + _ => '_', + }) + .collect(); + + // 去掉首尾下划线 + while key.starts_with('_') { + key.remove(0); + } + while key.ends_with('_') { + key.pop(); + } + + if key.is_empty() { + "custom".to_string() + } else { + key + } + }; + + // 2. 模型名称:优先使用 deeplink 中的 model,否则退回到 Codex 默认模型 + let model_name = request + .model + .as_deref() + .unwrap_or("gpt-5-codex") + .to_string(); + + // 3. 端点:与 UI 中 Base URL 处理方式保持一致,去掉结尾多余的斜杠 + let endpoint = request.endpoint.trim().trim_end_matches('/').to_string(); + + // 4. 组装 config.toml 内容 + // 使用 Rust 1.58+ 的内联格式化语法,避免 clippy::uninlined_format_args 警告 + let config_toml = format!( + r#"model_provider = "{clean_provider_name}" +model = "{model_name}" +model_reasoning_effort = "high" +disable_response_storage = true + +[model_providers.{clean_provider_name}] +name = "{clean_provider_name}" +base_url = "{endpoint}" +wire_api = "responses" +requires_openai_auth = true +"# ); - // Add model if provided - if let Some(model) = &request.model { - config_toml.push_str(&format!("model = \"{model}\"\n")); - } - json!({ "auth": { "OPENAI_API_KEY": request.api_key,