Skip to main content

lumen_runtime/trace/
events.rs

1//! Trace event types for the Lumen trace system.
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct TraceEvent {
8    pub seq: u64,
9    pub kind: TraceEventKind,
10    pub prev_hash: String,
11    pub hash: String,
12    pub timestamp: DateTime<Utc>,
13    pub doc_hash: String,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub cell: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub tool_id: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub tool_version: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub inputs_hash: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub outputs_hash: Option<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub policy_hash: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub latency_ms: Option<u64>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub cached: Option<bool>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub details: Option<serde_json::Value>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub message: Option<String>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
37#[serde(rename_all = "snake_case")]
38pub enum TraceEventKind {
39    RunStart,
40    CellStart,
41    CellEnd,
42    CallEnter,
43    CallExit,
44    VmStep,
45    ToolCall,
46    SchemaValidate,
47    Error,
48    RunEnd,
49}