新增浏览器调用能力。
This commit is contained in:
parent
2f11aed44a
commit
b85578a7d2
@ -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"
|
||||
|
||||
@ -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 }
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
1029
src/tools/browser.rs
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user