starweaver_session/
trace.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use starweaver_core::{CheckpointId, Metadata, RunId, SessionId, TaskId, TraceContext};
6
7use crate::records::{RunStatus, SessionStatus, StreamCursorRef};
8
9#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
11pub struct CompactRunTrace {
12 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub session_id: Option<SessionId>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub run_id: Option<RunId>,
18 #[serde(default)]
20 pub status: RunStatus,
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub parent_run_id: Option<RunId>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub parent_task_id: Option<TaskId>,
27 #[serde(default, skip_serializing_if = "Vec::is_empty")]
29 pub checkpoints: Vec<CheckpointId>,
30 pub approvals: usize,
32 pub deferred_tools: usize,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub latest_checkpoint: Option<CheckpointId>,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub stream_cursor: Option<usize>,
40 #[serde(default, skip_serializing_if = "Vec::is_empty")]
42 pub stream_cursors: Vec<StreamCursorRef>,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub output_preview: Option<String>,
46 #[serde(default, skip_serializing_if = "TraceContext::is_empty")]
48 pub trace_context: TraceContext,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub updated_at: Option<DateTime<Utc>>,
52 #[serde(default, skip_serializing_if = "Metadata::is_empty")]
54 pub metadata: Metadata,
55}
56
57#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
59pub struct CompactSessionTrace {
60 pub session_id: SessionId,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub title: Option<String>,
65 #[serde(default, skip_serializing_if = "Option::is_none")]
67 pub workspace: Option<String>,
68 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub profile: Option<String>,
71 #[serde(default)]
73 pub status: SessionStatus,
74 pub runs: usize,
76 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub latest_run_id: Option<RunId>,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
81 pub last_output_preview: Option<String>,
82 #[serde(default, skip_serializing_if = "Vec::is_empty")]
84 pub stream_cursors: Vec<StreamCursorRef>,
85 #[serde(default, skip_serializing_if = "TraceContext::is_empty")]
87 pub trace_context: TraceContext,
88 pub created_at: DateTime<Utc>,
90 pub updated_at: DateTime<Utc>,
92 #[serde(default, skip_serializing_if = "Metadata::is_empty")]
94 pub metadata: Metadata,
95}