1use crate::input::InputQueue;
2use crate::session::SessionId;
3use crate::session::SubmissionId;
4use lha_llm::ItemHandle;
5use lha_llm::RuntimeNotice;
6use lha_llm::SemanticOutputItem;
7use lha_llm::ToolCallRequest;
8use lha_llm::ToolResultItem;
9use lha_llm::TranscriptItem;
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub enum TurnItemDelta {
13 OutputText { delta: String },
14 ProposedPlan { delta: String },
15 ReasoningSummary { delta: String, summary_index: i64 },
16 ReasoningContent { delta: String, content_index: i64 },
17 ReasoningSummaryPartAdded { summary_index: i64 },
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21pub struct TurnSummary {
22 pub needs_follow_up: bool,
23 pub last_agent_message: Option<String>,
24 pub response_total_tokens: Option<i64>,
25 pub tool_output_tokens: i64,
26}
27
28#[derive(Debug, Clone, PartialEq)]
29pub enum AgentEvent {
30 SessionStarted {
31 session_id: SessionId,
32 },
33 SessionStatusChanged {
34 session_id: SessionId,
35 status: crate::SessionStatus,
36 },
37 InputQueued {
38 session_id: SessionId,
39 queue: InputQueue,
40 items: Vec<TranscriptItem>,
41 },
42 TurnStarted {
43 session_id: SessionId,
44 submission_id: SubmissionId,
45 },
46 RuntimeNotice {
47 session_id: SessionId,
48 notice: RuntimeNotice,
49 },
50 OutputItemStarted {
51 session_id: SessionId,
52 submission_id: SubmissionId,
53 handle: ItemHandle,
54 item: SemanticOutputItem,
55 },
56 OutputItemDelta {
57 session_id: SessionId,
58 submission_id: SubmissionId,
59 handle: ItemHandle,
60 delta: TurnItemDelta,
61 },
62 OutputItemCompleted {
63 session_id: SessionId,
64 submission_id: SubmissionId,
65 handle: ItemHandle,
66 item: SemanticOutputItem,
67 },
68 ToolCallRequested {
69 session_id: SessionId,
70 submission_id: SubmissionId,
71 call: ToolCallRequest,
72 },
73 ToolCallCompleted {
74 session_id: SessionId,
75 submission_id: SubmissionId,
76 response: ToolResultItem,
77 },
78 ServerReasoningIncluded {
79 session_id: SessionId,
80 included: bool,
81 },
82 ModelsEtagUpdated {
83 session_id: SessionId,
84 etag: String,
85 },
86 TurnCompleted {
87 session_id: SessionId,
88 submission_id: SubmissionId,
89 outcome: TurnSummary,
90 },
91 TurnFailed {
92 session_id: SessionId,
93 submission_id: SubmissionId,
94 error: String,
95 },
96 TurnAborted {
97 session_id: SessionId,
98 submission_id: SubmissionId,
99 },
100}