fix(browser): stability enhancements + MCP frontend client
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

S7 Browser Hand:
- Remove dead code: browser/actions.rs (314 lines of unused BrowserAction/ActionResult types)
- Fix browser_scrape_page: log failed selector matches instead of silently swallowing errors
- Fix element_to_info: document known limitation for always-None location/size fields
- Fix browserHandStore: reuse activeSessionId in executeScript/takeScreenshot/executeTemplate
  instead of creating orphan Browser sessions
- Add Browser.connect(sessionId) method for session reuse

MCP Frontend:
- Add desktop/src/lib/mcp-client.ts (77 lines) — typed client for MCP Tauri commands
  (startMcpService, stopMcpService, listMcpServices, callMcpTool)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-04-03 22:16:12 +08:00
parent 943afe3b6b
commit 1c99e5f3a3
8 changed files with 133 additions and 335 deletions

View File

@@ -1,9 +1,5 @@
// Tauri commands for browser automation
// Note: Some imports are reserved for future Browser Hand features
#![allow(unused_imports)]
use crate::browser::actions::BrowserAction;
use crate::browser::client::BrowserClient;
use crate::browser::session::{BrowserType, SessionConfig};
use serde::{Deserialize, Serialize};
@@ -454,9 +450,18 @@ pub async fn browser_scrape_page(
let mut results = serde_json::Map::new();
for selector in selectors {
if let Ok(elements) = client.find_elements(&session_id, &selector).await {
let texts: Vec<String> = elements.iter().filter_map(|e| e.text.clone()).collect();
results.insert(selector, serde_json::json!(texts));
match client.find_elements(&session_id, &selector).await {
Ok(elements) => {
let texts: Vec<String> = elements.iter().filter_map(|e| e.text.clone()).collect();
results.insert(selector, serde_json::json!(texts));
}
Err(e) => {
tracing::warn!(
selector = %selector,
error = %e,
"browser_scrape_page: find_elements failed, skipping selector"
);
}
}
}