| /** | |
| * Settings Sync Types | |
| * | |
| * Zod schemas and types for the user settings sync API. | |
| * Based on the backend API contract from anthropic/anthropic#218817. | |
| */ | |
| import { z } from 'zod/v4' | |
| import { lazySchema } from '../../utils/lazySchema.js' | |
| /** | |
| * Content portion of user sync data - flat key-value storage. | |
| * Keys are opaque strings (typically file paths). | |
| * Values are UTF-8 string content (JSON, Markdown, etc). | |
| */ | |
| export const UserSyncContentSchema = lazySchema(() => | |
| z.object({ | |
| entries: z.record(z.string(), z.string()), | |
| }), | |
| ) | |
| /** | |
| * Full response from GET /api/claude_code/user_settings | |
| */ | |
| export const UserSyncDataSchema = lazySchema(() => | |
| z.object({ | |
| userId: z.string(), | |
| version: z.number(), | |
| lastModified: z.string(), // ISO 8601 timestamp | |
| checksum: z.string(), // MD5 hash | |
| content: UserSyncContentSchema(), | |
| }), | |
| ) | |
| export type UserSyncData = z.infer<ReturnType<typeof UserSyncDataSchema>> | |
| /** | |
| * Result from fetching user settings | |
| */ | |
| export type SettingsSyncFetchResult = { | |
| success: boolean | |
| data?: UserSyncData | |
| isEmpty?: boolean // true if 404 (no data exists) | |
| error?: string | |
| skipRetry?: boolean | |
| } | |
| /** | |
| * Result from uploading user settings | |
| */ | |
| export type SettingsSyncUploadResult = { | |
| success: boolean | |
| checksum?: string | |
| lastModified?: string | |
| error?: string | |
| } | |
| /** | |
| * Keys used for sync entries | |
| */ | |
| export const SYNC_KEYS = { | |
| USER_SETTINGS: '~/.claude/settings.json', | |
| USER_MEMORY: '~/.claude/CLAUDE.md', | |
| projectSettings: (projectId: string) => | |
| `projects/${projectId}/.claude/settings.local.json`, | |
| projectMemory: (projectId: string) => `projects/${projectId}/CLAUDE.local.md`, | |
| } as const | |