Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,11 @@ jobs:
"$WEBKIT_PKG" \
"$APPINDICATOR_PKG" \
librsvg2-dev \
patchelf
patchelf \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng
- uses: dtolnay/rust-toolchain@stable

Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/desktop-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,11 @@ jobs:
librsvg2-dev \
patchelf \
fakeroot \
rpm
rpm \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng

- name: Setup pnpm
uses: pnpm/action-setup@v4
Expand Down
10 changes: 10 additions & 0 deletions src/apps/desktop/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,19 @@ fontdue = "0.9"
core-foundation = "0.9"
core-graphics = "0.23"
dispatch = "0.2"
objc2 = "0.6"
objc2-foundation = "0.3"
objc2-app-kit = "0.3"
objc2-vision = { version = "0.3.2", features = ["VNRecognizeTextRequest", "VNRequest", "VNObservation", "VNRequestHandler", "VNUtils", "VNTypes", "objc2-core-foundation"] }

[target.'cfg(windows)'.dependencies]
win32job = { workspace = true }
windows = { version = "0.61.3", features = [
"Foundation",
"Globalization",
"Graphics_Imaging",
"Media_Ocr",
"Storage_Streams",
"Win32_Foundation",
"Win32_System_Com",
"Win32_UI_Accessibility",
Expand All @@ -72,3 +81,4 @@ windows-core = "0.61.2"

[target.'cfg(target_os = "linux")'.dependencies]
atspi = "0.29"
leptess = "0.14.0"
28 changes: 8 additions & 20 deletions src/apps/desktop/src/api/config_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,27 +272,15 @@ pub async fn get_mode_configs(state: State<'_, AppState>) -> Result<Value, Strin
} else if let Some(config) = mode_configs.get_mut(&mode_id) {
config.default_tools = default_tools.clone();
// Migrate older Claw sessions that only allowlisted "ComputerUse" before split mouse tools existed;
// otherwise the tool pipeline rejects ComputerUseMouse* with "not in the allowed list".
if mode_id == "Claw"
&& config
.available_tools
.iter()
.any(|t| t == "ComputerUse")
&& !config
.available_tools
.iter()
.any(|t| t == "ComputerUseMousePrecise")
{
for t in [
"ComputerUseMousePrecise",
"ComputerUseMouseStep",
"ComputerUseMouseClick",
] {
if !config.available_tools.iter().any(|x| x == t) {
config.available_tools.push(t.to_string());
}
// All desktop automation is now consolidated into ComputerUse.
// Remove any stale split tool names from available_tools.
if mode_id == "Claw" {
let stale = ["ComputerUseMousePrecise", "ComputerUseMouseStep", "ComputerUseMouseClick"];
let before = config.available_tools.len();
config.available_tools.retain(|t| !stale.contains(&t.as_str()));
if config.available_tools.len() != before {
needs_save = true;
}
needs_save = true;
}
}
}
Expand Down
Loading
Loading