codetether_agent/tool/computer_use/
mod.rs1pub mod input;
7pub mod response;
8pub mod schema;
9
10mod platform;
11
12use super::{Tool, ToolResult};
13use anyhow::{Context, Result};
14use async_trait::async_trait;
15use serde_json::Value;
16
17pub struct ComputerUseTool;
18
19impl ComputerUseTool {
20 pub fn new() -> Self {
21 Self
22 }
23}
24
25impl Default for ComputerUseTool {
26 fn default() -> Self {
27 Self::new()
28 }
29}
30
31#[async_trait]
32impl Tool for ComputerUseTool {
33 fn id(&self) -> &str {
34 "computer_use"
35 }
36
37 fn name(&self) -> &str {
38 "Computer Use"
39 }
40
41 fn description(&self) -> &str {
42 "Native Windows desktop automation. ALWAYS prefer this over bash/powershell for screenshots, clicking, typing, and window management. Actions: snapshot (saves JPEG to temp file), window_snapshot (specific window), list_apps, bring_to_front, click, right_click, double_click, drag, type_text, press_key, scroll, wait_ms."
43 }
44
45 fn parameters(&self) -> Value {
46 schema::parameters_schema()
47 }
48
49 async fn execute(&self, args: Value) -> Result<ToolResult> {
50 let input: input::ComputerUseInput =
51 serde_json::from_value(args).context("Invalid computer_use args")?;
52
53 platform::dispatch(&input).await
54 }
55}