Skip to main content

systemprompt_agent/
error.rs

1use systemprompt_identifiers::TaskId;
2use thiserror::Error;
3
4#[derive(Debug, Error)]
5pub enum RowParseError {
6    #[error("Missing required field: {field}")]
7    MissingField { field: String },
8
9    #[error("Invalid datetime for field '{field}'")]
10    InvalidDatetime { field: String },
11
12    #[error("JSON parse error for field '{field}': {source}")]
13    JsonParse {
14        field: String,
15        #[source]
16        source: serde_json::Error,
17    },
18}
19
20#[derive(Debug, Error)]
21pub enum TaskError {
22    #[error("Task UUID missing from database row")]
23    MissingTaskUuid,
24
25    #[error("Agent name not found for task {task_id}")]
26    MissingAgentName { task_id: TaskId },
27
28    #[error("Context ID missing from database row")]
29    MissingContextId,
30
31    #[error("Invalid task state: {state}")]
32    InvalidTaskState { state: String },
33
34    #[error(transparent)]
35    RowParse(#[from] RowParseError),
36
37    #[error("Metadata parse error: {0}")]
38    InvalidMetadata(#[from] serde_json::Error),
39
40    #[error("Empty task ID provided")]
41    EmptyTaskId,
42
43    #[error("Invalid task ID format: {id}")]
44    InvalidTaskIdFormat { id: String },
45
46    #[error("Message ID missing from database row")]
47    MissingMessageId,
48
49    #[error("Tool name missing for tool execution")]
50    MissingToolName,
51
52    #[error("Tool call ID missing for tool execution")]
53    MissingCallId,
54
55    #[error("Created timestamp missing from database")]
56    MissingCreatedTimestamp,
57
58    #[error("Database error: {0}")]
59    Database(String),
60}
61
62#[derive(Debug, Error)]
63pub enum ContextError {
64    #[error("Context UUID missing from database row")]
65    MissingUuid,
66
67    #[error("Context name missing from database row")]
68    MissingName,
69
70    #[error("User ID missing from database row")]
71    MissingUserId,
72
73    #[error(transparent)]
74    RowParse(#[from] RowParseError),
75
76    #[error("Role serialization error: {0}")]
77    RoleSerialization(#[from] serde_json::Error),
78
79    #[error("Database error: {0}")]
80    Database(String),
81}
82
83#[derive(Debug, Error)]
84pub enum ArtifactError {
85    #[error("Artifact UUID missing from database row")]
86    MissingUuid,
87
88    #[error("Artifact type missing from database row")]
89    MissingType,
90
91    #[error("Context ID missing for artifact")]
92    MissingContextId,
93
94    #[error(transparent)]
95    RowParse(#[from] RowParseError),
96
97    #[error("Invalid tool response schema: expected {expected}, found keys: {actual_keys:?}")]
98    InvalidSchema {
99        expected: &'static str,
100        actual_keys: Vec<String>,
101        #[source]
102        source: serde_json::Error,
103    },
104
105    #[error("Metadata parse error: {0}")]
106    InvalidMetadata(#[from] serde_json::Error),
107
108    #[error("Database error: {0}")]
109    Database(String),
110
111    #[error("Transform error: {0}")]
112    Transform(String),
113
114    #[error("Metadata validation error: {0}")]
115    MetadataValidation(String),
116}
117
118#[derive(Debug, Error)]
119pub enum ProtocolError {
120    #[error("Tool name missing in tool call")]
121    MissingToolName,
122
123    #[error("Tool result error flag is required but was not provided")]
124    MissingErrorFlag,
125
126    #[error("Message ID missing")]
127    MissingMessageId,
128
129    #[error("Request ID missing")]
130    MissingRequestId,
131
132    #[error("Latency value missing or invalid")]
133    InvalidLatency,
134
135    #[error("Validation failed: {0}")]
136    ValidationFailed(String),
137
138    #[error("JSON parse error: {0}")]
139    JsonParse(#[from] serde_json::Error),
140
141    #[error("Database error: {0}")]
142    Database(String),
143}
144
145#[derive(Debug, Error)]
146pub enum AgentError {
147    #[error("Task error: {0}")]
148    Task(#[from] TaskError),
149
150    #[error("Context error: {0}")]
151    Context(#[from] ContextError),
152
153    #[error("Artifact error: {0}")]
154    Artifact(#[from] ArtifactError),
155
156    #[error("A2A protocol error: {0}")]
157    Protocol(#[from] ProtocolError),
158
159    #[error("Repository error: {0}")]
160    Repository(String),
161
162    #[error("Database error: {0}")]
163    Database(String),
164}