File size: 1,798 Bytes
4e23b01 | 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 | import { z } from 'zod';
import { sessionMessageBase } from './base';
import { stepUsageSchema } from './step-usage';
export const sessionStateUsageSchema = z.object({
by_model: z.record(z.string(), stepUsageSchema).optional(),
current_turn: stepUsageSchema.optional(),
total: stepUsageSchema.optional(),
});
export type SessionStateUsage = z.infer<typeof sessionStateUsageSchema>;
export const sessionStateGoalSchema = z.object({
objective: z.string(),
status: z.enum(['active', 'paused', 'blocked', 'complete']),
completion_criterion: z.string().optional(),
budget_used: z.number().optional(),
budget_limit: z.number().optional(),
});
export type SessionStateGoal = z.infer<typeof sessionStateGoalSchema>;
export const sessionStateModesSchema = z.object({
plan: z
.object({
review_path: z.string().optional(),
version: z.number().int().optional(),
})
.optional(),
swarm: z
.object({
trigger: z.string().optional(),
})
.optional(),
});
export type SessionStateModes = z.infer<typeof sessionStateModesSchema>;
export const sessionStateMessageSchema = z.object({
type: z.literal('session.state'),
...sessionMessageBase,
status: z.enum(['idle', 'running', 'compacting']),
pending_interaction: z.enum(['none', 'approval', 'question']).optional(),
model: z.string().optional(),
thinking_effort: z.string().optional(),
permission: z.enum(['manual', 'yolo', 'auto']).optional(),
usage: sessionStateUsageSchema.optional(),
context_tokens: z.number().int().nonnegative().optional(),
max_context_tokens: z.number().int().nonnegative().optional(),
goal: sessionStateGoalSchema.optional(),
modes: sessionStateModesSchema.optional(),
});
export type SessionStateMessage = z.infer<typeof sessionStateMessageSchema>;
|