1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7pub type Id = String;
9
10pub type SessionId = String;
12
13pub type TaskId = String;
15
16pub type ConversationId = String;
18
19#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
21#[serde(rename_all = "snake_case")]
22pub enum Status {
23 Pending,
24 InProgress,
25 Completed,
26 Failed,
27 Cancelled,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
32#[serde(rename_all = "snake_case")]
33pub enum Priority {
34 Low,
35 Normal,
36 High,
37 Critical,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
42#[serde(rename_all = "snake_case")]
43pub enum ToolType {
44 Bash,
45 Read,
46 Write,
47 Edit,
48 Search,
49 #[serde(rename = "web_search")]
50 WebSearch,
51 Other(String),
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Default)]
56pub struct Metadata {
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub timestamp: Option<DateTime<Utc>>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub version: Option<String>,
62
63 #[serde(flatten)]
64 pub extra: HashMap<String, serde_json::Value>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
69pub struct FileLocation {
70 pub path: String,
71
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub line_start: Option<usize>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub line_end: Option<usize>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct ErrorDetail {
82 pub code: String,
83 pub message: String,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub details: Option<serde_json::Value>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
91pub struct Capability {
92 pub name: String,
93 pub enabled: bool,
94
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub version: Option<String>,
97}