chore: pre-release cleanup — remove debug logs, fix clippy warning, add missing ja translations, and format code

- 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
This commit is contained in:
Jason
2026-02-26 15:11:13 +08:00
parent 434392a669
commit 2b30819510
10 changed files with 42 additions and 49 deletions
+1 -1
View File
@@ -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 {
@@ -16,10 +16,8 @@ use super::utils::{
const PROVIDER_ID: &str = "codex";
static UUID_RE: LazyLock<Regex> = 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<SessionMeta> {
@@ -132,13 +130,10 @@ fn parse_session(path: &Path) -> Option<SessionMeta> {
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);
}
@@ -27,11 +27,7 @@ pub fn read_head_tail_lines(
// Read head lines from the beginning
let reader = BufReader::new(file);
let head: Vec<String> = reader
.lines()
.take(head_n)
.map_while(Result::ok)
.collect();
let head: Vec<String> = 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);
-3
View File
@@ -53,15 +53,12 @@ export function DeepLinkImportDialog() {
const unlistenImport = listen<DeepLinkImportRequest>(
"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);
@@ -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"
/>
<p className="text-xs text-muted-foreground">
{t(isCurrent ? "claudeConfig.fullSettingsHint" : "claudeConfig.fragmentSettingsHint")}
{t(
isCurrent
? "claudeConfig.fullSettingsHint"
: "claudeConfig.fragmentSettingsHint",
)}
</p>
</div>
{settingsConfigErrorField}
+4 -10
View File
@@ -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",
},
+3 -7
View File
@@ -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",
+2 -6
View File
@@ -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",
},
-1
View File
@@ -1052,7 +1052,6 @@ export const openclawProviderPresets: OpenClawProviderPreset[] = [
"aicodemirror/claude-opus-4-6": { alias: "Opus" },
},
},
},
{
name: "AICoding",
+21 -2
View File
@@ -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": "統合プロバイダーを追加しました",