mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-27 16:26:16 +08:00
8cfce8abfc
Allow users to choose between storing skills in CC Switch's managed directory (~/.cc-switch/skills/) or the Agent Skills open standard directory (~/.agents/skills/). Includes migration logic that safely moves files before updating settings, with confirmation dialog for non-empty installations.
59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { z } from "zod";
|
|
|
|
const directorySchema = z
|
|
.string()
|
|
.trim()
|
|
.min(1, "路径不能为空")
|
|
.optional()
|
|
.or(z.literal(""));
|
|
|
|
export const settingsSchema = z.object({
|
|
// 设备级 UI 设置
|
|
showInTray: z.boolean(),
|
|
minimizeToTrayOnClose: z.boolean(),
|
|
enableClaudePluginIntegration: z.boolean().optional(),
|
|
skipClaudeOnboarding: z.boolean().optional(),
|
|
launchOnStartup: z.boolean().optional(),
|
|
enableLocalProxy: z.boolean().optional(),
|
|
language: z.enum(["en", "zh", "ja"]).optional(),
|
|
|
|
// 设备级目录覆盖
|
|
claudeConfigDir: directorySchema.nullable().optional(),
|
|
codexConfigDir: directorySchema.nullable().optional(),
|
|
geminiConfigDir: directorySchema.nullable().optional(),
|
|
|
|
// 当前供应商 ID(设备级)
|
|
currentProviderClaude: z.string().optional(),
|
|
currentProviderCodex: z.string().optional(),
|
|
currentProviderGemini: z.string().optional(),
|
|
|
|
// Skill 同步设置
|
|
skillSyncMethod: z.enum(["auto", "symlink", "copy"]).optional(),
|
|
skillStorageLocation: z.enum(["cc_switch", "unified"]).optional(),
|
|
|
|
// WebDAV v2 同步设置(通过专用命令保存,schema 仅用于读取)
|
|
webdavSync: z
|
|
.object({
|
|
enabled: z.boolean().optional(),
|
|
autoSync: z.boolean().optional(),
|
|
baseUrl: z.string().trim().optional().or(z.literal("")),
|
|
username: z.string().trim().optional().or(z.literal("")),
|
|
password: z.string().optional(),
|
|
remoteRoot: z.string().trim().optional().or(z.literal("")),
|
|
profile: z.string().trim().optional().or(z.literal("")),
|
|
status: z
|
|
.object({
|
|
lastSyncAt: z.number().nullable().optional(),
|
|
lastError: z.string().nullable().optional(),
|
|
lastErrorSource: z.string().nullable().optional(),
|
|
lastRemoteEtag: z.string().nullable().optional(),
|
|
lastLocalManifestHash: z.string().nullable().optional(),
|
|
lastRemoteManifestHash: z.string().nullable().optional(),
|
|
})
|
|
.optional(),
|
|
})
|
|
.optional(),
|
|
});
|
|
|
|
export type SettingsFormData = z.infer<typeof settingsSchema>;
|