mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 12:44:18 +08:00
20f62bf4f8
* feat(webdav): add robust auto sync with failure feedback (cherry picked from commit bb6760124a62a964b36902c004e173534910728f) * fix(webdav): enforce bounded download and extraction size (cherry picked from commit 7777d6ec2b9bba07c8bbba9b04fe3ea6b15e0e79) * fix(webdav): only show auto-sync callout for auto-source errors * refactor(webdav): remove services->commands auto-sync dependency
57 lines
1.9 KiB
TypeScript
57 lines
1.9 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(),
|
|
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(),
|
|
|
|
// 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>;
|