use schemars::JsonSchema; use serde::{Deserialize, Serialize}; #[derive(Debug, Deserialize, Serialize, JsonSchema)] #[serde(tag = "action", rename_all = "snake_case")] pub enum NvimBufferTool { Read { file: String, start_line: Option, end_line: Option, }, Replace { file: Option, start_line: Option, end_line: Option, replacement_content: Option, expected_content: Option, edits: Option>, }, Save { file: Option, }, Undo { steps: Option, }, Redo { steps: Option, }, CreateScratch { name: Option, content: Option, }, } #[derive(Debug, Deserialize, Serialize, JsonSchema)] pub struct BufferEdit { pub file: String, pub start_line: i64, pub end_line: i64, pub replacement_content: String, pub expected_content: Option, } #[derive(Debug, Deserialize, Serialize, JsonSchema)] #[serde(tag = "action", rename_all = "snake_case")] pub enum NvimWorkspaceTool { ListBuffers, ListWindows, Focus { win_id: i64, }, Split { direction: Option, file: Option, buf_id: Option, }, Cwd { path: Option, }, } #[derive(Debug, Deserialize, Serialize, JsonSchema)] #[serde(tag = "action", rename_all = "snake_case")] pub enum NvimIntelligenceTool { Hover { file: String, line: i64, col: i64 }, Definition { file: String, line: i64, col: i64 }, References { file: String, line: i64, col: i64 }, CodeAction { file: String, line: i64, col: i64 }, Rename { file: String, line: i64, col: i64, new_name: String }, Diagnostics { file: String }, Outline { file: String }, Query { file: String, query: Option, preset: Option }, } #[derive(Debug, Deserialize, Serialize, JsonSchema)] #[serde(tag = "action", rename_all = "snake_case")] pub enum NvimUiTool { Highlight { buf_id: Option, start_line: i64, end_line: Option, highlight_group: Option, duration_ms: Option, }, GhostText { line: i64, text: String, highlight_group: Option, }, Clear { buf_id: Option, }, } #[derive(Debug, Deserialize, Serialize, JsonSchema)] #[serde(tag = "action", rename_all = "snake_case")] pub enum NvimExecTool { Lua { code: String }, Vimscript { code: String }, Terminal { command: String }, }