1use super::types::{
2 CompactResult, CompactTrigger, CompactionRecord, ContextWindowUsage, McpServerState, Message,
3 MessageId, ModelId, OpId, QueuedWorkItem, RequestId, SessionConfig, TokenUsage, ToolCall,
4 ToolCallDelta, ToolCallId, ToolResult,
5};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum UsageUpdateKind {
9 Unspecified,
10 Partial,
11 Final,
12}
13
14#[derive(Debug, Clone)]
15pub enum ClientEvent {
16 AssistantMessageAdded {
17 message: Message,
18 model: ModelId,
19 },
20 UserMessageAdded {
21 message: Message,
22 },
23 ToolMessageAdded {
24 message: Message,
25 },
26 LlmUsageUpdated {
27 op_id: OpId,
28 model: ModelId,
29 usage: TokenUsage,
30 context_window: Option<ContextWindowUsage>,
31 kind: UsageUpdateKind,
32 },
33 MessageUpdated {
34 message: Message,
35 },
36 MessageDelta {
37 id: MessageId,
38 delta: String,
39 },
40 ThinkingDelta {
41 op_id: OpId,
42 message_id: MessageId,
43 delta: String,
44 },
45 ToolCallDelta {
46 op_id: OpId,
47 message_id: MessageId,
48 tool_call_id: ToolCallId,
49 delta: ToolCallDelta,
50 },
51
52 CompactResult {
53 result: CompactResult,
54 trigger: CompactTrigger,
55 },
56
57 ConversationCompacted {
58 record: CompactionRecord,
59 },
60
61 ToolStarted {
62 id: ToolCallId,
63 name: String,
64 parameters: serde_json::Value,
65 },
66 ToolCompleted {
67 id: ToolCallId,
68 name: String,
69 result: ToolResult,
70 },
71 ToolFailed {
72 id: ToolCallId,
73 name: String,
74 error: String,
75 },
76
77 ApprovalRequested {
78 request_id: RequestId,
79 tool_call: ToolCall,
80 },
81
82 ProcessingStarted {
83 op_id: OpId,
84 },
85 ProcessingCompleted {
86 op_id: OpId,
87 },
88 OperationCancelled {
89 op_id: OpId,
90 pending_tool_calls: usize,
91 popped_queued_item: Option<QueuedWorkItem>,
92 },
93 WorkspaceChanged,
94 WorkspaceFiles {
95 files: Vec<String>,
96 },
97 Error {
98 message: String,
99 },
100 McpServerStateChanged {
101 server_name: String,
102 state: McpServerState,
103 },
104 SessionConfigUpdated {
105 config: Box<SessionConfig>,
106 primary_agent_id: String,
107 },
108
109 QueueUpdated {
110 head: Option<QueuedWorkItem>,
111 count: usize,
112 },
113}