File size: 2,325 Bytes
d522ffa | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import { z } from 'zod';
// Mirrors kimi-cli's `Metadata` pydantic model (metadata.py:43–49).
export const OldWorkDirMetaSchema = z.object({
path: z.string(),
kaos: z.string().default('local'),
last_session_id: z.string().nullable().optional(),
});
export const OldKimiJsonSchema = z.object({
work_dirs: z.array(OldWorkDirMetaSchema).default([]),
});
// Mirrors kimi-cli's `SessionState` (session_state.py:28–45).
// We use `.passthrough()` because old persisted state may carry extra
// fields from newer kimi-cli versions; we only consume a known subset.
export const OldSessionStateSchema = z
.object({
version: z.number().optional(),
approval: z
.object({
yolo: z.boolean().optional(),
afk: z.boolean().optional(),
auto_approve_actions: z.array(z.string()).optional(),
})
.partial()
.optional(),
additional_dirs: z.array(z.string()).optional(),
custom_title: z.string().nullable().optional(),
title_generated: z.boolean().optional(),
title_generate_attempts: z.number().optional(),
plan_mode: z.boolean().optional(),
plan_session_id: z.string().nullable().optional(),
plan_slug: z.string().nullable().optional(),
wire_mtime: z.number().nullable().optional(),
archived: z.boolean().optional(),
archived_at: z.number().nullable().optional(),
auto_archive_exempt: z.boolean().optional(),
todos: z.array(z.unknown()).optional(),
})
.passthrough();
// Mirrors kimi-cli's pre-state.json `metadata.json` (merged into SessionState
// by load_session_state, session_state.py:50–96).
export const OldSessionMetadataSchema = z
.object({
session_id: z.string().optional(),
title: z.string().nullable().optional(),
title_generated: z.boolean().optional(),
title_generate_attempts: z.number().optional(),
wire_mtime: z.number().nullable().optional(),
archived: z.boolean().optional(),
archived_at: z.number().nullable().optional(),
auto_archive_exempt: z.boolean().optional(),
})
.passthrough();
export type OldKimiJson = z.infer<typeof OldKimiJsonSchema>;
export type OldWorkDirMeta = z.infer<typeof OldWorkDirMetaSchema>;
export type OldSessionState = z.infer<typeof OldSessionStateSchema>;
export type OldSessionMetadata = z.infer<typeof OldSessionMetadataSchema>;
|