Skip to main content

zagens_runtime_api/openapi/
schemas.rs

1//! HTTP wire types for OpenAPI `components.schemas` (D8).
2
3use 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    /// Anchor-class replay effect total (`inject_steer` + `run_compaction` + `notify_lsp`).
101    #[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
176/// One OpenAPI component schema export (`name`, `schema_for!` thunk).
177pub type SchemaExportFn = fn() -> schemars::Schema;
178
179/// Core schemas exported to OpenAPI components.
180pub 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];