File size: 1,449 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
import { z } from 'zod';

import { epochMsSchema, isoDateTimeSchema } from './base';

export const agentStatusSchema = z.enum(['idle', 'running', 'interrupted', 'completed', 'failed']);

export type AgentStatus = z.infer<typeof agentStatusSchema>;

export const agentStateOriginSchema = z.discriminatedUnion('kind', [
  z.object({ kind: z.literal('btw') }),
  z.object({ kind: z.literal('main') }),
  z.object({
    kind: z.literal('tool-swarm'),
    tool_call_id: z.string().min(1),
    swarm_index: z.number().int().nonnegative(),
    parent_agent_id: z.string().min(1),
  }),
  z.object({
    kind: z.literal('tool-agent'),
    tool_call_id: z.string().min(1),
    parent_agent_id: z.string().min(1),
  }),
]);

export type AgentStateOrigin = z.infer<typeof agentStateOriginSchema>;

export const agentStateTurnSchema = z.object({
  status: z.enum(['thinking', 'retrying', 'acting', 'aborting']),
});

export type AgentStateTurn = z.infer<typeof agentStateTurnSchema>;

export const agentStateMessageSchema = z.object({
  type: z.literal('agent.state'),
  session_id: z.string().min(1),
  agent_id: z.string().min(1),
  profile: z.object({ kind: z.string() }),
  timestamp: epochMsSchema,
  origin: agentStateOriginSchema,
  created_at: isoDateTimeSchema,
  ended_at: isoDateTimeSchema.optional(),
  status: agentStatusSchema,
  turn: agentStateTurnSchema.optional(),
});

export type AgentStateMessage = z.infer<typeof agentStateMessageSchema>;