新增浏览器调用能力。

This commit is contained in:
xiaoski 2026-05-21 17:11:53 +08:00
parent 2f11aed44a
commit b85578a7d2
6 changed files with 1087 additions and 1 deletions

View File

@ -48,6 +48,7 @@ http = "1"
encoding_rs = "0.8"
zstd = "0.13"
tar = "0.4"
fantoccini = { version = "0.22", default-features = false, features = ["rustls-tls"] }
[build-dependencies]
zstd = "0.13"

View File

@ -55,6 +55,8 @@ pub struct Config {
pub workspace_dir: String,
#[serde(default)]
pub mcp: McpConfig,
#[serde(default)]
pub browser: BrowserConfig,
}
fn default_workspace_dir() -> String {
@ -324,6 +326,37 @@ fn default_mcp_tool_timeout_secs() -> u64 {
180
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct BrowserConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_webdriver_url")]
pub webdriver_url: String,
#[serde(default = "default_true")]
pub headless: bool,
#[serde(default)]
pub chrome_path: Option<String>,
}
fn default_webdriver_url() -> String {
"http://127.0.0.1:9515".to_string()
}
fn default_true() -> bool {
true
}
impl Default for BrowserConfig {
fn default() -> Self {
Self {
enabled: false,
webdriver_url: default_webdriver_url(),
headless: true,
chrome_path: None,
}
}
}
fn default_recall_limit() -> usize { 5 }
fn default_idle_consolidation_minutes() -> u64 { 10 }
fn default_timeline_retention_days() -> u64 { 90 }

View File

@ -78,12 +78,19 @@ impl GatewayState {
// Create MessageBus first (shared by SessionManager and ChannelManager)
let bus = MessageBus::new(100);
let browser_config = if config.browser.enabled {
Some(config.browser.clone())
} else {
None
};
// Create SessionManager with bus injection
let session_manager = SessionManager::new(
provider_config.clone(),
storage.clone(),
bus.clone(),
memory_manager,
browser_config,
)?;
let session_manager = Arc::new(session_manager);

View File

@ -21,6 +21,7 @@ pub enum HandleResult {
}
use crate::channels::slash_command::parse_slash_command;
use crate::config::LLMProviderConfig;
use crate::config::BrowserConfig;
use crate::agent::{AgentLoop, AgentError, ContextCompressor};
use crate::agent::system_prompt::build_system_prompt;
use crate::agent::context_compressor::ContextCompressionConfig;
@ -813,13 +814,18 @@ impl SessionManager {
storage: Arc<Storage>,
bus: Arc<MessageBus>,
memory_manager: Arc<crate::memory::MemoryManager>,
browser_config: Option<BrowserConfig>,
) -> Result<Self, AgentError> {
let mut skills_loader = SkillsLoader::new();
skills_loader.load_skills();
skills_loader.set_workspace_skills_dir(provider_config.workspace_dir.clone());
let skills_loader = Arc::new(skills_loader);
let tools = Arc::new(create_default_tools(skills_loader.clone(), memory_manager.clone()));
let tools = Arc::new(create_default_tools(
skills_loader.clone(),
memory_manager.clone(),
browser_config.as_ref(),
));
Ok(Self {
inner: Arc::new(Mutex::new(SessionManagerInner {

1029
src/tools/browser.rs Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
pub mod bash;
pub mod browser;
pub mod calculator;
pub mod chat_manager;
pub mod content_search;
@ -18,6 +19,7 @@ pub mod traits;
pub mod web_fetch;
pub use bash::BashTool;
pub use browser::BrowserTool;
pub use calculator::CalculatorTool;
pub use chat_manager::ChatManagerTool;
pub use content_search::ContentSearchTool;
@ -34,6 +36,7 @@ pub use traits::{OutboundMessenger, Tool, ToolResult};
pub use web_fetch::WebFetchTool;
use std::sync::Arc;
use crate::config::BrowserConfig;
use crate::memory::MemoryManager;
use crate::skills::SkillsLoader;
@ -43,6 +46,7 @@ use crate::skills::SkillsLoader;
pub fn create_default_tools(
skills_loader: Arc<SkillsLoader>,
memory: Arc<MemoryManager>,
browser_config: Option<&BrowserConfig>,
) -> ToolRegistry {
let registry = ToolRegistry::new();
registry.register(CalculatorTool::new());
@ -66,5 +70,11 @@ pub fn create_default_tools(
registry.register(TimelineRecallTool::new(memory.clone()));
registry.register(MemoryForgetTool::new(memory.clone()));
if let Some(cfg) = browser_config {
if cfg.enabled {
registry.register(BrowserTool::new(cfg));
}
}
registry
}