1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7use crate::task::{TaskCounts, TaskRecord, TaskStatus, TaskSummary, TasksResponse};
8
9use zagens_core::coherence::CoherenceState;
10use zagens_core::engine::ReplayEffectCounts;
11use zagens_core::models::{ServerToolUsage, Usage};
12use zagens_runtime_adapters::persist::SessionMetadata;
13use zagens_runtime_orchestrator::runtime_threads::{
14 CreateThreadRequest, RoutingRule, RoutingRulesDoc, RuntimeTurnStatus, StartTurnRequest,
15 SteerTurnRequest, ThreadDetail, ThreadRecord, TurnItemKind, TurnItemLifecycleStatus,
16 TurnItemRecord, TurnRecord, UpdateThreadRequest, UsageAggregation, UsageBucket, UsageTotals,
17};
18
19#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
20pub struct SessionsListResponse {
21 pub sessions: Vec<SessionMetadata>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
25pub struct SessionDetailResponse {
26 pub metadata: SessionMetadata,
27 pub messages: Vec<Value>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub system_prompt: Option<String>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
33pub struct ResumeSessionKernelReplay {
34 pub turn_count: usize,
35 pub turns_with_events: usize,
36 pub turns_coherent: usize,
37 pub all_coherent: bool,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub latest_turn_id: Option<String>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub latest_step_idx: Option<u32>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub latest_max_steps: Option<u32>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub active_tool_count: Option<u32>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub model_message_count: Option<u32>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub tool_call_planned_count: Option<u32>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub message_coverage_ok: Option<bool>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub message_coverage_summary: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub message_timeline_ok: Option<bool>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub message_timeline_summary: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub kernel_model_request_count: Option<u32>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub kernel_estimated_min_session_messages: Option<u32>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub message_role_index_ok: Option<bool>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub message_role_index_summary: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub message_memory_plane_ok: Option<bool>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub message_memory_plane_summary: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub message_compaction_depth_ok: Option<bool>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub message_compaction_summary: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub message_compaction_artifact_ok: Option<bool>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub message_compaction_artifact_summary: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub message_continuation_anchor_ok: Option<bool>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub message_continuation_anchor_summary: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub message_notify_lsp_anchor_ok: Option<bool>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub message_notify_lsp_anchor_summary: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub message_request_approval_anchor_ok: Option<bool>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub message_request_approval_anchor_summary: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub message_memory_plane_replay_anchor_ok: Option<bool>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub message_memory_plane_replay_anchor_summary: Option<String>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub message_compaction_replay_anchor_ok: Option<bool>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub message_compaction_replay_anchor_summary: Option<String>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub replay_effect_counts: Option<ReplayEffectCounts>,
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub replay_anchor_effect_count: Option<u32>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub kernel_transcript_preview_row_count: Option<u32>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub message_transcript_preview_ok: Option<bool>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub message_transcript_preview_body_ok: Option<bool>,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
112pub struct ResumeSessionResponse {
113 pub thread_id: String,
114 pub session_id: String,
115 pub message_count: usize,
116 pub state: String,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub kernel_replay: Option<ResumeSessionKernelReplay>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
122pub struct StreamTurnRequest {
123 pub prompt: String,
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub model: Option<String>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub mode: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub workspace: Option<String>,
130 #[serde(skip_serializing_if = "Option::is_none")]
131 pub allow_shell: Option<bool>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub trust_mode: Option<bool>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub auto_approve: Option<bool>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub route_intent: Option<String>,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub task_type: Option<String>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub temperature: Option<f32>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub top_p: Option<f32>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub max_tokens: Option<u32>,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
149pub struct ThreadSummary {
150 pub id: String,
151 pub title: String,
152 pub preview: String,
153 pub model: String,
154 pub mode: String,
155 pub archived: bool,
156 pub updated_at: String,
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub latest_turn_id: Option<String>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub latest_turn_status: Option<String>,
161}
162
163#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
164pub struct StartTurnResponse {
165 pub thread: ThreadRecord,
166 pub turn: TurnRecord,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub queued: Option<zagens_runtime_orchestrator::runtime_threads::PromptAdmission>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
172pub struct ErrorBody {
173 pub error: String,
174}
175
176pub type SchemaExportFn = fn() -> schemars::Schema;
178
179pub const SCHEMA_EXPORTS: &[(&str, SchemaExportFn)] = &[
181 ("CoherenceState", || schemars::schema_for!(CoherenceState)),
182 ("RuntimeTurnStatus", || {
183 schemars::schema_for!(RuntimeTurnStatus)
184 }),
185 ("TurnItemKind", || schemars::schema_for!(TurnItemKind)),
186 ("TurnItemLifecycleStatus", || {
187 schemars::schema_for!(TurnItemLifecycleStatus)
188 }),
189 ("Usage", || schemars::schema_for!(Usage)),
190 ("ServerToolUsage", || schemars::schema_for!(ServerToolUsage)),
191 ("SessionMetadata", || schemars::schema_for!(SessionMetadata)),
192 ("SessionsListResponse", || {
193 schemars::schema_for!(SessionsListResponse)
194 }),
195 ("SessionDetailResponse", || {
196 schemars::schema_for!(SessionDetailResponse)
197 }),
198 ("ResumeSessionKernelReplay", || {
199 schemars::schema_for!(ResumeSessionKernelReplay)
200 }),
201 ("ReplayEffectCounts", || {
202 schemars::schema_for!(ReplayEffectCounts)
203 }),
204 ("ResumeSessionResponse", || {
205 schemars::schema_for!(ResumeSessionResponse)
206 }),
207 ("ThreadRecord", || schemars::schema_for!(ThreadRecord)),
208 ("TurnItemRecord", || schemars::schema_for!(TurnItemRecord)),
209 ("ThreadDetail", || schemars::schema_for!(ThreadDetail)),
210 ("ThreadSummary", || schemars::schema_for!(ThreadSummary)),
211 ("TurnRecord", || schemars::schema_for!(TurnRecord)),
212 ("CreateThreadRequest", || {
213 schemars::schema_for!(CreateThreadRequest)
214 }),
215 ("UpdateThreadRequest", || {
216 schemars::schema_for!(UpdateThreadRequest)
217 }),
218 ("StartTurnRequest", || {
219 schemars::schema_for!(StartTurnRequest)
220 }),
221 ("SteerTurnRequest", || {
222 schemars::schema_for!(SteerTurnRequest)
223 }),
224 ("StartTurnResponse", || {
225 schemars::schema_for!(StartTurnResponse)
226 }),
227 ("StreamTurnRequest", || {
228 schemars::schema_for!(StreamTurnRequest)
229 }),
230 ("RoutingRule", || schemars::schema_for!(RoutingRule)),
231 ("RoutingRulesDoc", || schemars::schema_for!(RoutingRulesDoc)),
232 ("UsageTotals", || schemars::schema_for!(UsageTotals)),
233 ("UsageBucket", || schemars::schema_for!(UsageBucket)),
234 ("UsageAggregation", || {
235 schemars::schema_for!(UsageAggregation)
236 }),
237 ("ErrorBody", || schemars::schema_for!(ErrorBody)),
238 ("TaskRecord", || schemars::schema_for!(TaskRecord)),
239 ("TaskSummary", || schemars::schema_for!(TaskSummary)),
240 ("TaskCounts", || schemars::schema_for!(TaskCounts)),
241 ("TasksResponse", || schemars::schema_for!(TasksResponse)),
242 ("TaskStatus", || schemars::schema_for!(TaskStatus)),
243];