File size: 1,731 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 | import { z } from 'zod';
export const searchMessagesBodySchema = z.object({
query: z.string().min(1),
mode: z.enum(['terms', 'literal']).optional(),
op: z.enum(['AND', 'OR']).optional(),
container: z
.object({
session_id: z.string().min(1).optional(),
agent_id: z.string().min(1).optional(),
})
.optional(),
role: z.enum(['user', 'assistant', 'title']).optional(),
start_time: z.number().int().nonnegative().optional(),
end_time: z.number().int().nonnegative().optional(),
sort: z.enum(['score', 'time_desc', 'time_asc']).optional(),
page_size: z.number().int().min(1).max(50).optional(),
page_token: z.string().min(1).optional(),
});
export type SearchMessagesBody = z.infer<typeof searchMessagesBodySchema>;
export const searchMessageHitSchema = z.object({
session_id: z.string(),
workspace_id: z.string(),
session_title: z.string(),
agent_id: z.string(),
role: z.enum(['user', 'assistant', 'title']),
snippet: z.string(),
time: z.number(),
turn: z.number().int().nonnegative().optional(),
step_id: z.string().optional(),
score: z.number(),
});
export const searchMessagesResponseSchema = z.object({
items: z.array(searchMessageHitSchema),
has_more: z.boolean(),
page_token: z.string().optional(),
incomplete: z.enum(['candidate_cap', 'postings_budget', 'deadline']).optional(),
index_state: z.object({
state: z.enum(['building', 'ready', 'readonly']),
indexed_sessions: z.number(),
total_sessions: z.number(),
documents: z.number(),
stale: z.boolean().optional(),
degraded: z.string().optional(),
}),
source: z.enum(['live', 'index']),
});
export type SearchMessagesResponse = z.infer<typeof searchMessagesResponseSchema>;
|