From 2b308195102b5a380c27ee0ca7edc994c0f69445 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 26 Feb 2026 15:11:13 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20pre-release=20cleanup=20=E2=80=94=20re?= =?UTF-8?q?move=20debug=20logs,=20fix=20clippy=20warning,=20add=20missing?= =?UTF-8?q?=20ja=20translations,=20and=20format=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove 2 console.log statements from DeepLinkImportDialog - Fix clippy unnecessary_map_or: use is_some_and in live.rs - Add 17 missing Japanese i18n keys (skills, proxy, circuitBreaker, universalProvider) - Run prettier and cargo fmt to fix pre-existing formatting drift --- src-tauri/src/services/provider/live.rs | 2 +- .../src/session_manager/providers/codex.rs | 13 ++++------- .../src/session_manager/providers/utils.rs | 6 +---- src/components/DeepLinkImportDialog.tsx | 3 --- .../providers/forms/ProviderForm.tsx | 11 +++++---- src/config/claudeProviderPresets.ts | 14 ++++------- src/config/codexProviderPresets.ts | 10 +++----- src/config/geminiProviderPresets.ts | 8 ++----- src/config/openclawProviderPresets.ts | 1 - src/i18n/locales/ja.json | 23 +++++++++++++++++-- 10 files changed, 42 insertions(+), 49 deletions(-) diff --git a/src-tauri/src/services/provider/live.rs b/src-tauri/src/services/provider/live.rs index 882191ad..0f815c96 100644 --- a/src-tauri/src/services/provider/live.rs +++ b/src-tauri/src/services/provider/live.rs @@ -357,7 +357,7 @@ fn json_merge_patch(target: &mut Value, patch: &Value) { let entry = target_obj.entry(key.clone()).or_insert(json!({})); json_merge_patch(entry, value); // Clean up empty container objects - if entry.as_object().map_or(false, |o| o.is_empty()) { + if entry.as_object().is_some_and(|o| o.is_empty()) { target_obj.remove(key); } } else { diff --git a/src-tauri/src/session_manager/providers/codex.rs b/src-tauri/src/session_manager/providers/codex.rs index 56a4a3cf..0fd1e965 100644 --- a/src-tauri/src/session_manager/providers/codex.rs +++ b/src-tauri/src/session_manager/providers/codex.rs @@ -16,10 +16,8 @@ use super::utils::{ const PROVIDER_ID: &str = "codex"; static UUID_RE: LazyLock = LazyLock::new(|| { - Regex::new( - r"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}", - ) - .unwrap() + Regex::new(r"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}") + .unwrap() }); pub fn scan_sessions() -> Vec { @@ -132,13 +130,10 @@ fn parse_session(path: &Path) -> Option { if last_active_at.is_none() { last_active_at = value.get("timestamp").and_then(parse_timestamp_to_ms); } - if summary.is_none() - && value.get("type").and_then(Value::as_str) == Some("response_item") - { + if summary.is_none() && value.get("type").and_then(Value::as_str) == Some("response_item") { if let Some(payload) = value.get("payload") { if payload.get("type").and_then(Value::as_str) == Some("message") { - let text = - payload.get("content").map(extract_text).unwrap_or_default(); + let text = payload.get("content").map(extract_text).unwrap_or_default(); if !text.trim().is_empty() { summary = Some(text); } diff --git a/src-tauri/src/session_manager/providers/utils.rs b/src-tauri/src/session_manager/providers/utils.rs index 9ac700b6..e22c5a5e 100644 --- a/src-tauri/src/session_manager/providers/utils.rs +++ b/src-tauri/src/session_manager/providers/utils.rs @@ -27,11 +27,7 @@ pub fn read_head_tail_lines( // Read head lines from the beginning let reader = BufReader::new(file); - let head: Vec = reader - .lines() - .take(head_n) - .map_while(Result::ok) - .collect(); + let head: Vec = reader.lines().take(head_n).map_while(Result::ok).collect(); // Seek to last ~16 KB for tail lines let seek_pos = file_len.saturating_sub(16_384); diff --git a/src/components/DeepLinkImportDialog.tsx b/src/components/DeepLinkImportDialog.tsx index daf1d732..05acafa8 100644 --- a/src/components/DeepLinkImportDialog.tsx +++ b/src/components/DeepLinkImportDialog.tsx @@ -53,15 +53,12 @@ export function DeepLinkImportDialog() { const unlistenImport = listen( "deeplink-import", async (event) => { - console.log("Deep link import event received:", event.payload); - // If config is present, merge it to get the complete configuration if (event.payload.config || event.payload.configUrl) { try { const mergedRequest = await deeplinkApi.mergeDeeplinkConfig( event.payload, ); - console.log("Config merged successfully:", mergedRequest); setRequest(mergedRequest); } catch (error) { console.error("Failed to merge config:", error); diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index bfc66ca0..9d9c932e 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -1243,10 +1243,7 @@ export function ProviderForm({ providerId={providerId} shouldShowApiKey={ hasApiKeyField(form.getValues("settingsConfig"), "claude") && - shouldShowApiKey( - form.getValues("settingsConfig"), - isEditMode, - ) + shouldShowApiKey(form.getValues("settingsConfig"), isEditMode) } apiKey={apiKey} onApiKeyChange={handleApiKeyChange} @@ -1529,7 +1526,11 @@ export function ProviderForm({ language="json" />

- {t(isCurrent ? "claudeConfig.fullSettingsHint" : "claudeConfig.fragmentSettingsHint")} + {t( + isCurrent + ? "claudeConfig.fullSettingsHint" + : "claudeConfig.fragmentSettingsHint", + )}

{settingsConfigErrorField} diff --git a/src/config/claudeProviderPresets.ts b/src/config/claudeProviderPresets.ts index 1211fcb1..569b6085 100644 --- a/src/config/claudeProviderPresets.ts +++ b/src/config/claudeProviderPresets.ts @@ -486,9 +486,7 @@ export const providerPresets: ProviderPreset[] = [ ANTHROPIC_AUTH_TOKEN: "", }, }, - endpointCandidates: [ - "https://api.aicoding.sh", - ], + endpointCandidates: ["https://api.aicoding.sh"], category: "third_party", isPartner: true, // 合作伙伴 partnerPromotionKey: "aicoding", // 促销信息 i18n key @@ -505,9 +503,7 @@ export const providerPresets: ProviderPreset[] = [ ANTHROPIC_AUTH_TOKEN: "", }, }, - endpointCandidates: [ - "https://crazyrouter.com", - ], + endpointCandidates: ["https://crazyrouter.com"], category: "third_party", isPartner: true, // 合作伙伴 partnerPromotionKey: "crazyrouter", // 促销信息 i18n key @@ -603,8 +599,7 @@ export const providerPresets: ProviderPreset[] = [ ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-6-v1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "global.anthropic.claude-haiku-4-5-20251001-v1:0", - ANTHROPIC_DEFAULT_SONNET_MODEL: - "global.anthropic.claude-sonnet-4-6", + ANTHROPIC_DEFAULT_SONNET_MODEL: "global.anthropic.claude-sonnet-4-6", ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-6-v1", CLAUDE_CODE_USE_BEDROCK: "1", }, @@ -642,8 +637,7 @@ export const providerPresets: ProviderPreset[] = [ ANTHROPIC_MODEL: "global.anthropic.claude-opus-4-6-v1", ANTHROPIC_DEFAULT_HAIKU_MODEL: "global.anthropic.claude-haiku-4-5-20251001-v1:0", - ANTHROPIC_DEFAULT_SONNET_MODEL: - "global.anthropic.claude-sonnet-4-6", + ANTHROPIC_DEFAULT_SONNET_MODEL: "global.anthropic.claude-sonnet-4-6", ANTHROPIC_DEFAULT_OPUS_MODEL: "global.anthropic.claude-opus-4-6-v1", CLAUDE_CODE_USE_BEDROCK: "1", }, diff --git a/src/config/codexProviderPresets.ts b/src/config/codexProviderPresets.ts index e35fbaf0..9bf3da7f 100644 --- a/src/config/codexProviderPresets.ts +++ b/src/config/codexProviderPresets.ts @@ -237,9 +237,7 @@ requires_openai_auth = true`, "https://api.aicoding.sh", "gpt-5.3-codex", ), - endpointCandidates: [ - "https://api.aicoding.sh", - ], + endpointCandidates: ["https://api.aicoding.sh"], isPartner: true, partnerPromotionKey: "aicoding", icon: "aicoding", @@ -253,11 +251,9 @@ requires_openai_auth = true`, config: generateThirdPartyConfig( "crazyrouter", "https://crazyrouter.com/v1", - "gpt-5.3-codex", + "gpt-5.3-codex", ), - endpointCandidates: [ - "https://crazyrouter.com/v1", - ], + endpointCandidates: ["https://crazyrouter.com/v1"], isPartner: true, partnerPromotionKey: "crazyrouter", icon: "crazyrouter", diff --git a/src/config/geminiProviderPresets.ts b/src/config/geminiProviderPresets.ts index 61fbef29..ac88fc95 100644 --- a/src/config/geminiProviderPresets.ts +++ b/src/config/geminiProviderPresets.ts @@ -155,9 +155,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ category: "third_party", isPartner: true, partnerPromotionKey: "aicoding", - endpointCandidates: [ - "https://api.aicoding.sh", - ], + endpointCandidates: ["https://api.aicoding.sh"], icon: "aicoding", iconColor: "#000000", }, @@ -177,9 +175,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [ category: "third_party", isPartner: true, partnerPromotionKey: "crazyrouter", - endpointCandidates: [ - "https://crazyrouter.com", - ], + endpointCandidates: ["https://crazyrouter.com"], icon: "crazyrouter", iconColor: "#000000", }, diff --git a/src/config/openclawProviderPresets.ts b/src/config/openclawProviderPresets.ts index c8608879..0c7c535c 100644 --- a/src/config/openclawProviderPresets.ts +++ b/src/config/openclawProviderPresets.ts @@ -1052,7 +1052,6 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [ "aicodemirror/claude-opus-4-6": { alias: "Opus" }, }, }, - }, { name: "AICoding", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 3ce28a6f..c0b97460 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -1350,6 +1350,7 @@ "http429": "リクエストが多すぎます。時間をおいて再試行してください", "parseMetadataFailed": "スキルメタデータの解析に失敗しました", "getHomeDirFailed": "ユーザーのホームディレクトリを取得できません", + "noSkillsInZip": "ZIP ファイルにスキルが見つかりません(SKILL.md ファイルが必要です)", "networkError": "ネットワークエラー", "fsError": "ファイルシステムエラー", "unknownError": "不明なエラー", @@ -1360,7 +1361,8 @@ "checkRepoUrl": "リポジトリ URL とブランチ名を確認してください", "checkDiskSpace": "ディスク容量を確認してください", "checkPermission": "ディレクトリの権限を確認してください", - "uninstallFirst": "同名のスキルを先にアンインストールしてください" + "uninstallFirst": "同名のスキルを先にアンインストールしてください", + "checkZipContent": "ZIP ファイルに有効なスキルディレクトリ(SKILL.md を含む)が含まれていることを確認してください" } }, "repo": { @@ -1630,7 +1632,12 @@ "toast": { "saved": "プロキシ設定を保存しました", "saveFailed": "保存に失敗しました: {{error}}" - } + }, + "invalidPort": "無効なポートです。1024〜65535 の数値を入力してください", + "invalidAddress": "無効なアドレスです。有効な IP アドレス(例: 127.0.0.1)または localhost を入力してください", + "configSaved": "プロキシ設定を保存しました", + "configSaveFailed": "設定の保存に失敗しました", + "restartRequired": "アドレスまたはポートの変更を反映するにはプロキシサービスの再起動が必要です" }, "switchFailed": "切り替えに失敗しました: {{error}}", "failover": { @@ -1660,6 +1667,7 @@ "info": "フェイルオーバーキューに複数のプロバイダーが設定されている場合、リクエストが失敗すると優先度順に試行します。プロバイダーが連続失敗のしきい値に達すると、サーキットブレーカーが開き、一時的にスキップされます。", "configSaved": "自動フェイルオーバー設定を保存しました", "configSaveFailed": "保存に失敗しました", + "validationFailed": "以下のフィールドが有効範囲外です: {{fields}}", "retrySettings": "リトライとタイムアウト設定", "failureThreshold": "失敗しきい値", "failureThresholdHint": "この回数連続で失敗するとサーキットブレーカーが開きます(推奨: 3-10)", @@ -1712,6 +1720,16 @@ "streamingIdle": "ストリーミングアイドルタイムアウト", "nonStreaming": "非ストリーミングタイムアウト" }, + "circuitBreaker": { + "failureThreshold": "失敗しきい値", + "successThreshold": "成功しきい値", + "timeoutSeconds": "タイムアウト(秒)", + "errorRateThreshold": "エラー率しきい値", + "minRequests": "最小リクエスト数", + "validationFailed": "以下のフィールドが有効範囲外です: {{fields}}", + "configSaved": "サーキットブレーカー設定を保存しました", + "saveFailed": "保存に失敗しました" + }, "universalProvider": { "title": "統合プロバイダー", "description": "統合プロバイダーは Claude、Codex、Gemini の設定を同時に管理します。変更は有効なすべてのアプリに自動的に同期されます。", @@ -1736,6 +1754,7 @@ "syncError": "同期に失敗しました", "noAppsEnabled": "有効なアプリがありません", "added": "統合プロバイダーを追加しました", + "addedAndSynced": "統合プロバイダーを追加して同期しました", "updated": "統合プロバイダーを更新しました", "deleted": "統合プロバイダーを削除しました", "addSuccess": "統合プロバイダーを追加しました",