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>;