From 54d7a2c05dbe5f24c7af67dcd25d122edf33793e Mon Sep 17 00:00:00 2001 From: Resheba <74815401+Resheba@users.noreply.github.com> Date: Sat, 5 Sep 2026 09:03:58 +0300 Subject: [PATCH] feat(ai): add skip TLS certificate verification for AI providers --- .../editor/EditorSettingsDialog.vue | 19 +++++++ .../src/composables/useAiModelCatalog.ts | 1 + apps/desktop/src/i18n/locales/en.ts | 3 ++ apps/desktop/src/i18n/locales/es.ts | 3 ++ apps/desktop/src/i18n/locales/it.ts | 3 ++ apps/desktop/src/i18n/locales/ja.ts | 3 ++ apps/desktop/src/i18n/locales/ko.ts | 3 ++ apps/desktop/src/i18n/locales/pt-BR.ts | 3 ++ apps/desktop/src/i18n/locales/zh-CN.ts | 3 ++ apps/desktop/src/i18n/locales/zh-TW.ts | 3 ++ apps/desktop/src/stores/settingsStore.ts | 1 + apps/desktop/src/types/ai.ts | 2 + crates/dbx-core/src/ai.rs | 50 +++++++++++++++++++ crates/dbx-core/src/ai_claude_code_cli.rs | 1 + crates/dbx-core/src/ai_codebuddy_cli.rs | 1 + crates/dbx-core/src/ai_codex_cli.rs | 1 + crates/dbx-core/src/ai_cursor_cli.rs | 1 + crates/dbx-core/src/ai_effort.rs | 1 + crates/dbx-core/src/ai_grok_cli.rs | 1 + crates/dbx-core/src/ai_opencode_cli.rs | 1 + crates/dbx-core/src/ai_pi_agent_cli.rs | 1 + crates/dbx-core/src/ai_qoder_cli.rs | 1 + crates/dbx-core/src/cloud_sync.rs | 1 + crates/dbx-core/src/storage.rs | 1 + crates/dbx-web/src/routes/ai.rs | 2 + src-tauri/src/commands/ai.rs | 1 + 26 files changed, 111 insertions(+) diff --git a/apps/desktop/src/components/editor/EditorSettingsDialog.vue b/apps/desktop/src/components/editor/EditorSettingsDialog.vue index 496c63bfa1..732c176143 100644 --- a/apps/desktop/src/components/editor/EditorSettingsDialog.vue +++ b/apps/desktop/src/components/editor/EditorSettingsDialog.vue @@ -3524,6 +3524,7 @@ const aiEditApiStyle = ref("completions"); const aiEditCustomHeaderRows = ref([]); const aiEditProxyEnabled = ref(false); const aiEditProxyUrl = ref(""); +const aiEditSkipTlsVerify = ref(false); const aiEditEnableThinking = ref(true); const aiEditReasoningLevel = ref("default"); const aiEditMaxOutputTokens = ref(undefined); @@ -3583,6 +3584,8 @@ const aiIsGrokCli = computed(() => aiEditProvider.value === "grok-cli"); const aiIsCodeBuddyCli = computed(() => aiEditProvider.value === "codebuddy-cli"); const aiIsQoderCli = computed(() => aiEditProvider.value === "qoder-cli"); const aiIsCliProvider = computed(() => CLI_AI_PROVIDERS.has(aiEditProvider.value)); + +const aiSupportsSkipTlsVerify = computed(() => aiEditProvider.value === "custom" || aiEditProvider.value === "openai-compatible" || aiEditProvider.value === "anthropic-compatible"); const aiCliProviderLabel = computed(() => selectedAiProviderPreset.value.label); const aiCliCommandName = computed(() => { if (aiIsClaudeCodeCli.value) return "claude"; @@ -3809,6 +3812,7 @@ function currentAiEditConfig() { customHeaders: customHeadersFromRows(), proxyEnabled: aiEditProxyEnabled.value, proxyUrl: aiEditProxyUrl.value, + skipTlsVerify: aiSupportsSkipTlsVerify.value && aiEditSkipTlsVerify.value, enableThinking: aiEditEnableThinking.value, reasoningLevel: aiEditReasoningLevel.value, maxOutputTokens: aiEditMaxOutputTokens.value || undefined, @@ -3857,6 +3861,7 @@ function aiSelectProvider(presetId: string) { aiEditLegacyModels.value = preset.group === "partner" ? [...(preset.models ?? [])] : []; aiEditApiStyle.value = preset.apiStyle; aiEditCustomHeaderRows.value = []; + aiEditSkipTlsVerify.value = false; aiEditEnableThinking.value = true; aiEditReasoningLevel.value = "default"; if (CLI_AI_PROVIDERS.has(provider)) void ensureCliMcpStatus(); @@ -3896,6 +3901,7 @@ function aiEnterEditMode(configId?: string) { aiEditCustomHeaderRows.value = aiHeaderRowsFromConfig(config.customHeaders); aiEditProxyEnabled.value = config.proxyEnabled ?? false; aiEditProxyUrl.value = config.proxyUrl ?? ""; + aiEditSkipTlsVerify.value = config.skipTlsVerify ?? false; aiEditEnableThinking.value = config.enableThinking ?? true; aiEditReasoningLevel.value = config.reasoningLevel ?? "default"; aiEditMaxOutputTokens.value = config.maxOutputTokens; @@ -3930,6 +3936,7 @@ function aiEnterEditMode(configId?: string) { aiEditCustomHeaderRows.value = []; aiEditProxyEnabled.value = false; aiEditProxyUrl.value = ""; + aiEditSkipTlsVerify.value = false; aiEditEnableThinking.value = true; aiEditReasoningLevel.value = "default"; aiEditMaxOutputTokens.value = undefined; @@ -7776,6 +7783,18 @@ LIMIT 100;{{ t("ai.proxyUrl") }} + + +
+ +
+ +

{{ t("ai.skipTlsVerifyHint") }}

+
+
diff --git a/apps/desktop/src/composables/useAiModelCatalog.ts b/apps/desktop/src/composables/useAiModelCatalog.ts index b176998256..b93b4868e5 100644 --- a/apps/desktop/src/composables/useAiModelCatalog.ts +++ b/apps/desktop/src/composables/useAiModelCatalog.ts @@ -53,6 +53,7 @@ function configSignature(config: AiConfigItem): string { authMethod: config.authMethod, apiStyle: config.apiStyle, proxyEnabled: config.proxyEnabled ?? false, + skipTlsVerify: config.skipTlsVerify ?? false, contextWindow: config.contextWindow ?? null, codexCliPath: config.codexCliPath ?? null, claudeCodeCliPath: config.claudeCodeCliPath ?? null, diff --git a/apps/desktop/src/i18n/locales/en.ts b/apps/desktop/src/i18n/locales/en.ts index c2a29723f1..cda80cdabb 100644 --- a/apps/desktop/src/i18n/locales/en.ts +++ b/apps/desktop/src/i18n/locales/en.ts @@ -2793,6 +2793,9 @@ export default { proxy: "Proxy", proxyEnable: "Send AI requests through proxy", proxyUrl: "Proxy URL", + sslVerification: "SSL certificate", + skipTlsVerify: "Skip SSL certificate verification", + skipTlsVerifyHint: "Only skip for trusted endpoints with self-signed certificates. Skipping verification makes traffic vulnerable to interception.", customHeaders: "Custom Headers", customHeadersAdd: "Add header", customHeadersHint: "Extra headers are sent with model discovery, connection tests, chat, and Agent requests. Header values may be sensitive.", diff --git a/apps/desktop/src/i18n/locales/es.ts b/apps/desktop/src/i18n/locales/es.ts index 7375aa55f8..4986d46826 100644 --- a/apps/desktop/src/i18n/locales/es.ts +++ b/apps/desktop/src/i18n/locales/es.ts @@ -2864,6 +2864,9 @@ export default withEnglishFallback({ proxy: "Proxy", proxyEnable: "Enviar solicitudes de IA mediante proxy", proxyUrl: "URL del proxy", + sslVerification: "Certificado SSL", + skipTlsVerify: "Omitir la verificación del certificado SSL", + skipTlsVerifyHint: "Omite la verificación solo en endpoints de confianza con certificados autofirmados. Omitirla hace que el tráfico sea vulnerable a la interceptación.", customHeaders: "Cabeceras personalizadas", customHeadersAdd: "Añadir cabecera", customHeadersHint: "Estas cabeceras se envían al descubrir modelos, probar la conexión, chatear y usar Agent. Sus valores pueden ser sensibles.", diff --git a/apps/desktop/src/i18n/locales/it.ts b/apps/desktop/src/i18n/locales/it.ts index 19de015e70..3105939427 100644 --- a/apps/desktop/src/i18n/locales/it.ts +++ b/apps/desktop/src/i18n/locales/it.ts @@ -2758,6 +2758,9 @@ export default withEnglishFallback({ proxy: "Proxy", proxyEnable: "Invia richieste AI tramite proxy", proxyUrl: "URL Proxy", + sslVerification: "Certificato SSL", + skipTlsVerify: "Salta la verifica del certificato SSL", + skipTlsVerifyHint: "Salta la verifica solo per endpoint attendibili con certificati autofirmati. Saltarla rende il traffico vulnerabile all'intercettazione.", customHeaders: "Intestazioni personalizzate", customHeadersAdd: "Aggiungi intestazione", customHeadersHint: "Queste intestazioni vengono inviate durante la ricerca dei modelli, il test della connessione, la chat e le richieste Agent. I valori possono essere sensibili.", diff --git a/apps/desktop/src/i18n/locales/ja.ts b/apps/desktop/src/i18n/locales/ja.ts index 48d3023d50..7da71a532c 100644 --- a/apps/desktop/src/i18n/locales/ja.ts +++ b/apps/desktop/src/i18n/locales/ja.ts @@ -2900,6 +2900,9 @@ export default withEnglishFallback({ proxy: "プロキシ", proxyEnable: "プロキシ経由でAIリクエストを送信", proxyUrl: "プロキシURL", + sslVerification: "SSL 証明書", + skipTlsVerify: "SSL 証明書の検証をスキップ", + skipTlsVerifyHint: "自己署名証明書を使用する信頼できるエンドポイントでのみスキップしてください。検証をスキップすると、トラフィックが傍受されやすくなります。", customHeaders: "カスタムヘッダー", customHeadersAdd: "ヘッダーを追加", customHeadersHint: "モデル検出、接続テスト、チャット、Agent リクエストでこれらのヘッダーが送信されます。値には機密情報が含まれる場合があります。", diff --git a/apps/desktop/src/i18n/locales/ko.ts b/apps/desktop/src/i18n/locales/ko.ts index b3d7f1da12..60d048867a 100644 --- a/apps/desktop/src/i18n/locales/ko.ts +++ b/apps/desktop/src/i18n/locales/ko.ts @@ -2609,6 +2609,9 @@ export default withEnglishFallback({ proxy: "프록시", proxyEnable: "프록시를 통해 AI 요청 전송", proxyUrl: "프록시 URL", + sslVerification: "SSL 인증서", + skipTlsVerify: "SSL 인증서 검증 건너뛰기", + skipTlsVerifyHint: "자체 서명 인증서를 사용하는 신뢰할 수 있는 엔드포인트에서만 건너뛰세요. 검증을 건너뛰면 트래픽이 가로채기에 취약해집니다.", customHeaders: "사용자 지정 헤더", customHeadersAdd: "헤더 추가", customHeadersHint: "모델 검색, 연결 테스트, 채팅 및 Agent 요청에 이 헤더가 전송됩니다. 값에는 민감한 정보가 포함될 수 있습니다.", diff --git a/apps/desktop/src/i18n/locales/pt-BR.ts b/apps/desktop/src/i18n/locales/pt-BR.ts index b2506ffb24..07aaab1d9e 100644 --- a/apps/desktop/src/i18n/locales/pt-BR.ts +++ b/apps/desktop/src/i18n/locales/pt-BR.ts @@ -2866,6 +2866,9 @@ export default withEnglishFallback({ proxy: "Proxy", proxyEnable: "Enviar requisições de AI através do proxy", proxyUrl: "URL do Proxy", + sslVerification: "Certificado SSL", + skipTlsVerify: "Ignorar verificação do certificado SSL", + skipTlsVerifyHint: "Ignore a verificação apenas em endpoints confiáveis com certificados autoassinados. Ignorá-la torna o tráfego vulnerável à interceptação.", customHeaders: "Cabeçalhos personalizados", customHeadersAdd: "Adicionar cabeçalho", customHeadersHint: "Estes cabeçalhos são enviados na descoberta de modelos, teste de conexão, chat e solicitações do Agent. Os valores podem ser sensíveis.", diff --git a/apps/desktop/src/i18n/locales/zh-CN.ts b/apps/desktop/src/i18n/locales/zh-CN.ts index 038d58e75b..1ac953b2ab 100644 --- a/apps/desktop/src/i18n/locales/zh-CN.ts +++ b/apps/desktop/src/i18n/locales/zh-CN.ts @@ -2716,6 +2716,9 @@ export default withEnglishFallback({ proxy: "代理", proxyEnable: "AI 请求通过代理发送", proxyUrl: "代理地址", + sslVerification: "SSL 证书", + skipTlsVerify: "跳过 SSL 证书校验", + skipTlsVerifyHint: "仅在目标端点使用自签名证书且可信时跳过。跳过校验会使流量面临中间人攻击风险。", customHeaders: "自定义请求头", customHeadersAdd: "添加请求头", customHeadersHint: "模型发现、连接测试、对话和 Agent 请求都会携带这些请求头;值可能包含敏感信息。", diff --git a/apps/desktop/src/i18n/locales/zh-TW.ts b/apps/desktop/src/i18n/locales/zh-TW.ts index 18ab8c32c4..0afeb1e92c 100644 --- a/apps/desktop/src/i18n/locales/zh-TW.ts +++ b/apps/desktop/src/i18n/locales/zh-TW.ts @@ -2757,6 +2757,9 @@ export default withEnglishFallback({ proxy: "代理伺服器", proxyEnable: "經由代理伺服器發送 AI 請求", proxyUrl: "代理伺服器地址", + sslVerification: "SSL 憑證", + skipTlsVerify: "略過 SSL 憑證驗證", + skipTlsVerifyHint: "僅在目標端點使用自簽憑證且可信時略過。略過驗證會使流量面臨中間人攻擊風險。", customHeaders: "自訂請求標頭", customHeadersAdd: "新增請求標頭", customHeadersHint: "模型探索、連線測試、對話和 Agent 請求都會攜帶這些標頭;值可能包含敏感資訊。", diff --git a/apps/desktop/src/stores/settingsStore.ts b/apps/desktop/src/stores/settingsStore.ts index f2939588e8..00317e290f 100644 --- a/apps/desktop/src/stores/settingsStore.ts +++ b/apps/desktop/src/stores/settingsStore.ts @@ -502,6 +502,7 @@ export function normalizeAiConfig(config: Partial | null | undefined): authMethod: config?.authMethod ?? defaultConfigs[provider].authMethod, proxyEnabled: !!config?.proxyEnabled, proxyUrl: config?.proxyUrl ?? "", + skipTlsVerify: !!config?.skipTlsVerify, enableThinking: config?.enableThinking ?? true, reasoningLevel: normalizeAiReasoningLevel(config?.reasoningLevel), maxOutputTokens, diff --git a/apps/desktop/src/types/ai.ts b/apps/desktop/src/types/ai.ts index e55cc8fb4a..67e3ed2e8d 100644 --- a/apps/desktop/src/types/ai.ts +++ b/apps/desktop/src/types/ai.ts @@ -40,6 +40,8 @@ export interface AiConfig { customHeaders?: Record; proxyEnabled?: boolean; proxyUrl?: string; + /** Disable TLS certificate verification for the AI endpoint (self-signed/private CA only). */ + skipTlsVerify?: boolean; enableThinking?: boolean; reasoningLevel?: AiReasoningLevel; /** Optional per-configuration output budget sent as max_tokens/max_output_tokens. */ diff --git a/crates/dbx-core/src/ai.rs b/crates/dbx-core/src/ai.rs index 0a7263e8f9..2535ad2335 100644 --- a/crates/dbx-core/src/ai.rs +++ b/crates/dbx-core/src/ai.rs @@ -391,6 +391,10 @@ pub struct AiConfig { pub proxy_enabled: bool, #[serde(default)] pub proxy_url: String, + /// Disable TLS certificate verification for the AI endpoint. Intended for + /// trusted self-signed / private-CA gateways only. + #[serde(default)] + pub skip_tls_verify: bool, #[serde(default = "default_enable_thinking")] pub enable_thinking: bool, #[serde(default)] @@ -1746,6 +1750,9 @@ fn ai_endpoint_is_loopback(config: &AiConfig) -> bool { pub fn build_ai_http_client(config: &AiConfig, timeout_secs: u64) -> Result { let mut builder = reqwest::Client::builder().timeout(std::time::Duration::from_secs(timeout_secs)); + if config.skip_tls_verify { + builder = builder.danger_accept_invalid_certs(true); + } if config.proxy_enabled && !config.proxy_url.trim().is_empty() && !ai_endpoint_is_loopback(config) { let proxy_url = normalize_ai_proxy_url(&config.proxy_url); let proxy = reqwest::Proxy::all(&proxy_url).map_err(|e| format!("Invalid AI proxy URL: {e}"))?; @@ -4909,6 +4916,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5543,6 +5551,7 @@ mod tests { assert!(!config.proxy_enabled); assert_eq!(config.proxy_url, ""); + assert!(!config.skip_tls_verify); assert!(config.enable_thinking); assert_eq!(config.auth_method, AiAuthMethod::ApiKey); assert!(config.claude_code_cli_path.is_none()); @@ -5573,6 +5582,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: true, proxy_url: "not a proxy url".to_string(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5615,6 +5625,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: true, proxy_url: "127.0.0.1:7890".to_string(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5642,6 +5653,23 @@ mod tests { build_ai_http_client(&config, 1).unwrap(); } + #[test] + fn ai_http_client_accepts_skip_tls_verify() { + let mut config: AiConfig = serde_json::from_value(serde_json::json!({ + "provider": "custom", + "apiKey": "key", + "endpoint": "https://ai.private-ca.internal/v1", + "model": "my-model", + "apiStyle": "completions" + })) + .unwrap(); + assert!(!config.skip_tls_verify); + + config.skip_tls_verify = true; + + build_ai_http_client(&config, 1).unwrap(); + } + #[test] fn ai_http_client_bypasses_proxy_for_loopback_endpoint() { let config = AiConfig { @@ -5655,6 +5683,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: true, proxy_url: "not a proxy url".to_string(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5695,6 +5724,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5739,6 +5769,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5780,6 +5811,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5840,6 +5872,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5876,6 +5909,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -5915,6 +5949,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6021,6 +6056,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6108,6 +6144,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6191,6 +6228,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6240,6 +6278,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6411,6 +6450,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6456,6 +6496,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6549,6 +6590,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -6873,6 +6915,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7105,6 +7148,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7157,6 +7201,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7212,6 +7257,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7261,6 +7307,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7654,6 +7701,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::High, max_output_tokens: None, @@ -7730,6 +7778,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -7801,6 +7850,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_claude_code_cli.rs b/crates/dbx-core/src/ai_claude_code_cli.rs index 46e816b1ae..12be15c726 100644 --- a/crates/dbx-core/src/ai_claude_code_cli.rs +++ b/crates/dbx-core/src/ai_claude_code_cli.rs @@ -571,6 +571,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_codebuddy_cli.rs b/crates/dbx-core/src/ai_codebuddy_cli.rs index 786cd4a069..5e4c119a01 100644 --- a/crates/dbx-core/src/ai_codebuddy_cli.rs +++ b/crates/dbx-core/src/ai_codebuddy_cli.rs @@ -926,6 +926,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_codex_cli.rs b/crates/dbx-core/src/ai_codex_cli.rs index cb1617d258..b790dd4203 100644 --- a/crates/dbx-core/src/ai_codex_cli.rs +++ b/crates/dbx-core/src/ai_codex_cli.rs @@ -1117,6 +1117,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_cursor_cli.rs b/crates/dbx-core/src/ai_cursor_cli.rs index e420ab09b9..f06834c941 100644 --- a/crates/dbx-core/src/ai_cursor_cli.rs +++ b/crates/dbx-core/src/ai_cursor_cli.rs @@ -408,6 +408,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_effort.rs b/crates/dbx-core/src/ai_effort.rs index 6651e9681f..312bc65728 100644 --- a/crates/dbx-core/src/ai_effort.rs +++ b/crates/dbx-core/src/ai_effort.rs @@ -467,6 +467,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_grok_cli.rs b/crates/dbx-core/src/ai_grok_cli.rs index 71e6edfa90..c0be56c2b8 100644 --- a/crates/dbx-core/src/ai_grok_cli.rs +++ b/crates/dbx-core/src/ai_grok_cli.rs @@ -788,6 +788,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_opencode_cli.rs b/crates/dbx-core/src/ai_opencode_cli.rs index a1657b3441..e9ffd6c781 100644 --- a/crates/dbx-core/src/ai_opencode_cli.rs +++ b/crates/dbx-core/src/ai_opencode_cli.rs @@ -454,6 +454,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_pi_agent_cli.rs b/crates/dbx-core/src/ai_pi_agent_cli.rs index 6529d955cb..31d265a9a1 100644 --- a/crates/dbx-core/src/ai_pi_agent_cli.rs +++ b/crates/dbx-core/src/ai_pi_agent_cli.rs @@ -862,6 +862,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::High, max_output_tokens: None, diff --git a/crates/dbx-core/src/ai_qoder_cli.rs b/crates/dbx-core/src/ai_qoder_cli.rs index d176ca5f8b..a88a309ac0 100644 --- a/crates/dbx-core/src/ai_qoder_cli.rs +++ b/crates/dbx-core/src/ai_qoder_cli.rs @@ -530,6 +530,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/cloud_sync.rs b/crates/dbx-core/src/cloud_sync.rs index 75622f1d48..07b90b0c66 100644 --- a/crates/dbx-core/src/cloud_sync.rs +++ b/crates/dbx-core/src/cloud_sync.rs @@ -1637,6 +1637,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: crate::ai::AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-core/src/storage.rs b/crates/dbx-core/src/storage.rs index 56b1499393..c405ba00a5 100644 --- a/crates/dbx-core/src/storage.rs +++ b/crates/dbx-core/src/storage.rs @@ -7580,6 +7580,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/crates/dbx-web/src/routes/ai.rs b/crates/dbx-web/src/routes/ai.rs index d14384e184..3111bd3333 100644 --- a/crates/dbx-web/src/routes/ai.rs +++ b/crates/dbx-web/src/routes/ai.rs @@ -524,6 +524,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: true, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, @@ -632,6 +633,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None, diff --git a/src-tauri/src/commands/ai.rs b/src-tauri/src/commands/ai.rs index d5e2718353..b63159dfe2 100644 --- a/src-tauri/src/commands/ai.rs +++ b/src-tauri/src/commands/ai.rs @@ -668,6 +668,7 @@ mod tests { custom_headers: Default::default(), proxy_enabled: false, proxy_url: String::new(), + skip_tls_verify: false, enable_thinking: false, reasoning_level: AiReasoningLevel::Default, max_output_tokens: None,