agent_workspace_contract/
change.rs1use super::*;
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[serde(tag = "action", rename_all = "snake_case")]
5pub enum WorkspacePatchOperation {
6 Create {
7 path: String,
8 content: String,
9 },
10 Delete {
11 path: String,
12 },
13 Update {
14 path: String,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 move_to: Option<String>,
17 #[serde(default)]
18 changes: Vec<WorkspaceTextReplacement>,
19 },
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct WorkspaceTextReplacement {
24 pub old: String,
25 pub new: String,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(rename_all = "camelCase")]
30pub struct WorkspaceChangeSetRequest {
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub conversation_id: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub idempotency_key: Option<String>,
35 #[serde(default)]
36 pub base_version: u64,
37 pub operations: Vec<WorkspacePatchOperation>,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41#[serde(rename_all = "snake_case")]
42pub enum WorkspaceFileChangeKind {
43 Created,
44 Updated,
45 Deleted,
46 Moved,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50#[serde(rename_all = "camelCase")]
51pub struct WorkspaceFileChange {
52 pub file_id: String,
53 pub path: String,
54 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub previous_path: Option<String>,
56 pub kind: WorkspaceFileChangeKind,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub before: Option<String>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub after: Option<String>,
61 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub before_revision: Option<String>,
63 #[serde(default, skip_serializing_if = "Option::is_none")]
64 pub after_revision: Option<String>,
65 pub additions: usize,
66 pub deletions: usize,
67}
68
69#[derive(Debug, Clone, Default, Serialize, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct WorkspaceChangeSummary {
72 pub files: usize,
73 pub additions: usize,
74 pub deletions: usize,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
78#[serde(rename_all = "snake_case")]
79pub enum WorkspaceChangeSetStatus {
80 Applied,
81 Reverted,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub struct WorkspaceChangeSet {
87 pub schema_version: u32,
88 pub id: String,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub conversation_id: Option<String>,
91 pub status: WorkspaceChangeSetStatus,
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub reverts_change_set_id: Option<String>,
94 pub summary: WorkspaceChangeSummary,
95 pub files: Vec<WorkspaceFileChange>,
96 pub created_at_ms: u64,
97 #[serde(default)]
98 pub workspace_version: u64,
99}