lumen_runtime/trace/
events.rs1use 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}