import { z } from 'zod'; import { isoDateTimeSchema } from '@moonshot-ai/agent-core-v2/_base/utils/isoDateTime'; import { permissionRuleSchema, sessionAgentConfigPartialSchema, sessionAgentConfigSchema, sessionMetadataSchema, } from '@moonshot-ai/agent-core-v2/app/sessionLegacy/sessionProtocol'; import { workspaceIdSchema } from './workspace'; export const sessionUsageSchema = z.object({ input_tokens: z.number().int().nonnegative(), output_tokens: z.number().int().nonnegative(), cache_read_tokens: z.number().int().nonnegative(), cache_creation_tokens: z.number().int().nonnegative(), total_cost_usd: z.number().nonnegative().optional(), context_tokens: z.number().int().nonnegative(), context_limit: z.number().int().nonnegative().optional(), turn_count: z.number().int().nonnegative().optional(), }); export type SessionUsage = z.infer; export function emptySessionUsage(): SessionUsage { return { input_tokens: 0, output_tokens: 0, cache_read_tokens: 0, cache_creation_tokens: 0, total_cost_usd: 0, context_tokens: 0, context_limit: 0, turn_count: 0, }; } export const sessionPendingInteractionSchema = z.enum(['none', 'approval', 'question']); export type SessionPendingInteraction = z.infer; export const sessionSchema = z.object({ id: z.string().min(1), workspace_id: workspaceIdSchema, title: z.string(), created_at: isoDateTimeSchema, updated_at: isoDateTimeSchema, busy: z.boolean(), main_turn_active: z.boolean().optional(), pending_interaction: sessionPendingInteractionSchema.optional(), last_turn_reason: z.enum(['completed', 'cancelled', 'failed']).optional(), archived: z.boolean().optional(), archived_at: isoDateTimeSchema.optional(), current_prompt_id: z.string().min(1).optional(), last_prompt: z.string().optional(), metadata: sessionMetadataSchema, agent_config: sessionAgentConfigSchema, usage: sessionUsageSchema, permission_rules: z.array(permissionRuleSchema), message_count: z.number().int().nonnegative(), last_seq: z.number().int().nonnegative(), }); export type Session = z.infer; export const sessionCreateSchema = z.object({ title: z.string().min(1).optional(), metadata: sessionMetadataSchema.optional(), agent_config: sessionAgentConfigPartialSchema.optional(), workspace_id: workspaceIdSchema.optional(), }); export type SessionCreate = z.infer; export const sessionForkSchema = z.object({ title: z.string().min(1).optional(), metadata: z.record(z.string(), z.unknown()).optional(), }); export type SessionFork = z.infer; export const sessionChildCreateSchema = z.object({ title: z.string().min(1).optional(), metadata: z.record(z.string(), z.unknown()).optional(), }); export type SessionChildCreate = z.infer;