1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize)]
4#[serde(tag = "type", content = "params", rename_all = "camelCase")]
5pub enum Action {
6 ReadFile(ReadFileParams),
7 WriteFile(WriteFileParams),
8 DeleteFile(DeleteFileParams),
9 CreateDirectory(CreateDirectoryParams),
10 ListDirectory(ListDirectoryParams),
11 GitStatus,
12 GitAdd(GitAddParams),
13 GitCommit(GitCommitParams),
14 GitPush(GitPushParams),
15 GitDiff(GitDiffParams),
16 GitInit,
17 RunScript(RunScriptParams),
18 GitWorktreeAdd(WorktreeAddParams),
20 GitWorktreeList,
21 GitWorktreeRemove(WorktreeRemoveParams),
22 GitWorktreeMerge(WorktreeMergeParams),
23}
24
25#[derive(Debug, Deserialize)]
27#[serde(rename_all = "camelCase")]
28pub struct WorktreeAddParams {
29 pub branch: String,
30 pub new_branch: bool,
31}
32
33#[derive(Debug, Deserialize)]
34#[serde(rename_all = "camelCase")]
35pub struct WorktreeRemoveParams {
36 pub path: String,
37 pub force: bool,
38}
39
40#[derive(Debug, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct WorktreeMergeParams {
43 pub path: String,
44 pub branch: String,
45
46 pub preview: Option<bool>,
47 #[allow(dead_code)]
48 pub resolved: Option<bool>,
49
50 #[allow(dead_code)]
51 pub resolution: Option<String>,
52}
53
54#[derive(Debug, Serialize, Deserialize, Clone)]
56#[serde(rename_all = "camelCase")]
57pub struct WorktreeInfo {
58 pub path: String,
59 pub branch: String,
60 pub head: String,
61 pub is_main: bool,
62}
63
64#[derive(Debug, Deserialize)]
66#[serde(rename_all = "camelCase")]
67pub struct RunScriptParams {
68 pub language: String,
69 pub code: String,
70 #[serde(default)]
71 pub args: Vec<String>,
72 pub timeout: Option<u64>,
73}
74
75#[derive(Debug, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct ReadFileParams {
78 pub path: String,
79}
80
81#[derive(Debug, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct WriteFileParams {
84 pub path: String,
85 pub content: String,
86}
87
88#[derive(Debug, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct DeleteFileParams {
91 pub path: String,
92}
93
94#[derive(Debug, Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct CreateDirectoryParams {
97 pub path: String,
98}
99
100#[derive(Debug, Deserialize)]
101#[serde(rename_all = "camelCase")]
102pub struct ListDirectoryParams {
103 pub path: String,
104}
105
106#[derive(Debug, Deserialize)]
107#[serde(rename_all = "camelCase")]
108pub struct GitAddParams {
109 pub files: Vec<String>,
110}
111
112#[derive(Debug, Deserialize)]
113#[serde(rename_all = "camelCase")]
114pub struct GitCommitParams {
115 pub message: String,
116}
117
118#[derive(Debug, Deserialize)]
119#[serde(rename_all = "camelCase")]
120pub struct GitPushParams {
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub remote: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub branch: Option<String>,
125}
126
127#[derive(Debug, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct GitDiffParams {
130 #[serde(skip_serializing_if = "Option::is_none")]
131 pub target: Option<String>,
132}
133
134#[derive(Debug, Serialize, Deserialize)]
135#[serde(rename_all = "camelCase")]
136pub struct ActionResult {
137 pub success: bool,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub content: Option<String>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub error: Option<String>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub path: Option<String>,
144}
145
146#[derive(Debug, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct FileEntry {
149 pub name: String,
150 pub path: String,
151 pub is_dir: bool,
152 #[serde(skip_serializing_if = "Option::is_none")]
153 pub size: Option<u64>,
154}
155
156#[derive(Debug, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct ListFilesQuery {
159 pub project_id: String,
160}
161
162#[derive(Debug, Serialize, Deserialize, Clone)]
163#[serde(rename_all = "camelCase")]
164pub struct BuildOutput {
165 pub success: bool,
166 pub errors: Vec<Diagnostic>,
167 pub warnings: Vec<Diagnostic>,
168 pub raw_output: String,
169}
170
171#[derive(Debug, Serialize, Deserialize, Clone)]
172#[serde(rename_all = "camelCase")]
173pub struct Diagnostic {
174 pub file: Option<String>,
175 pub line: Option<usize>,
176 pub column: Option<usize>,
177 pub message: String,
178 pub level: String,
179}
180
181#[derive(Debug, Serialize, Deserialize)]
182#[serde(rename_all = "camelCase")]
183pub struct ExecuteResponse {
184 pub action_results: Vec<ActionResult>,
185 pub build_output: Option<BuildOutput>,
186 pub continue_loop: bool,
187}
188
189#[derive(Debug, Deserialize)]
190#[serde(rename_all = "camelCase")]
191pub struct FileContentQuery {
192 pub project_id: String,
193 pub path: String,
194}
195
196#[derive(Debug, Deserialize)]
197#[serde(rename_all = "camelCase")]
198pub struct ExecuteRequest {
199 pub project_id: String,
200 pub actions: Vec<Action>,
201}
202#[derive(Debug, Deserialize)]
203pub struct OpenEditorRequest {
204 pub path: String,
205 pub editor: String,
206 pub line: Option<u32>,
207 pub column: Option<u32>,
208}