feat: migrate Claude common config snippet from localStorage to config.json

Migrate the Claude common config snippet storage from browser localStorage
to the persistent config.json file for better cross-device sync and backup support.

**Backend Changes:**
- Add `claude_common_config_snippet` field to `MultiAppConfig` struct
- Add `get_claude_common_config_snippet` and `set_claude_common_config_snippet` Tauri commands
- Include JSON validation in the setter command

**Frontend Changes:**
- Create new `lib/api/config.ts` API module
- Refactor `useCommonConfigSnippet` hook to use config.json instead of localStorage
- Add automatic one-time migration from localStorage to config.json
- Add loading state during initialization

**Benefits:**
- Cross-device synchronization via backup/restore
- More reliable persistence than browser storage
- Centralized configuration management
- Seamless migration for existing users
This commit is contained in:
Jason
2025-11-13 22:45:58 +08:00
parent 434c64f38d
commit 21fd7cc9fd
6 changed files with 135 additions and 38 deletions

21
src/lib/api/config.ts Normal file
View File

@@ -0,0 +1,21 @@
// 配置相关 API
import { invoke } from "@tauri-apps/api/core";
/**
* 获取 Claude 通用配置片段
* @returns 通用配置片段JSON 字符串),如果不存在则返回 null
*/
export async function getClaudeCommonConfigSnippet(): Promise<string | null> {
return invoke<string | null>("get_claude_common_config_snippet");
}
/**
* 设置 Claude 通用配置片段
* @param snippet - 通用配置片段JSON 字符串)
* @throws 如果 JSON 格式无效
*/
export async function setClaudeCommonConfigSnippet(
snippet: string,
): Promise<void> {
return invoke("set_claude_common_config_snippet", { snippet });
}

View File

@@ -5,5 +5,6 @@ export { mcpApi } from "./mcp";
export { promptsApi } from "./prompts";
export { usageApi } from "./usage";
export { vscodeApi } from "./vscode";
export * as configApi from "./config";
export type { ProviderSwitchEvent } from "./providers";
export type { Prompt } from "./prompts";