Skip to main content

simple_agents_workflow/
trace.rs

1use serde::{Deserialize, Serialize};
2
3/// Monotonic event sequence number inside a single trace.
4pub type TraceSequence = u64;
5
6/// Aggregate execution trace for one workflow run.
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct WorkflowTrace {
9    /// Trace-level metadata.
10    pub metadata: WorkflowTraceMetadata,
11    /// Ordered event stream.
12    pub events: Vec<TraceEvent>,
13}
14
15/// Stable metadata for a workflow trace.
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
17pub struct WorkflowTraceMetadata {
18    /// Globally unique trace identifier.
19    pub trace_id: String,
20    /// Workflow name for this run.
21    pub workflow_name: String,
22    /// Workflow IR version for this run.
23    pub workflow_version: String,
24    /// Workflow start timestamp (Unix epoch milliseconds).
25    pub started_at_unix_ms: u64,
26    /// Workflow completion timestamp (Unix epoch milliseconds).
27    pub finished_at_unix_ms: Option<u64>,
28}
29
30/// A single ordered trace event.
31#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
32pub struct TraceEvent {
33    /// Deterministic sequence number.
34    pub seq: TraceSequence,
35    /// Event timestamp (Unix epoch milliseconds).
36    pub timestamp_unix_ms: u64,
37    /// Event payload.
38    #[serde(flatten)]
39    pub kind: TraceEventKind,
40}
41
42/// Stable event taxonomy for trace/replay.
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44#[serde(tag = "event", rename_all = "snake_case")]
45pub enum TraceEventKind {
46    /// Node execution started.
47    NodeEnter { node_id: String },
48    /// Node execution completed successfully.
49    NodeExit { node_id: String },
50    /// Node execution failed.
51    NodeError { node_id: String, message: String },
52    /// Workflow reached a terminal state.
53    Terminal { status: TraceTerminalStatus },
54}
55
56/// Workflow terminal status captured in trace.
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
58#[serde(rename_all = "snake_case")]
59pub enum TraceTerminalStatus {
60    Completed,
61    Failed,
62}