新增浏览器调用能力。
This commit is contained in:
parent
2f11aed44a
commit
b85578a7d2
@ -48,6 +48,7 @@ http = "1"
|
|||||||
encoding_rs = "0.8"
|
encoding_rs = "0.8"
|
||||||
zstd = "0.13"
|
zstd = "0.13"
|
||||||
tar = "0.4"
|
tar = "0.4"
|
||||||
|
fantoccini = { version = "0.22", default-features = false, features = ["rustls-tls"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
zstd = "0.13"
|
zstd = "0.13"
|
||||||
|
|||||||
@ -55,6 +55,8 @@ pub struct Config {
|
|||||||
pub workspace_dir: String,
|
pub workspace_dir: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub mcp: McpConfig,
|
pub mcp: McpConfig,
|
||||||
|
#[serde(default)]
|
||||||
|
pub browser: BrowserConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_workspace_dir() -> String {
|
fn default_workspace_dir() -> String {
|
||||||
@ -324,6 +326,37 @@ fn default_mcp_tool_timeout_secs() -> u64 {
|
|||||||
180
|
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_recall_limit() -> usize { 5 }
|
||||||
fn default_idle_consolidation_minutes() -> u64 { 10 }
|
fn default_idle_consolidation_minutes() -> u64 { 10 }
|
||||||
fn default_timeline_retention_days() -> u64 { 90 }
|
fn default_timeline_retention_days() -> u64 { 90 }
|
||||||
|
|||||||
@ -78,12 +78,19 @@ impl GatewayState {
|
|||||||
// Create MessageBus first (shared by SessionManager and ChannelManager)
|
// Create MessageBus first (shared by SessionManager and ChannelManager)
|
||||||
let bus = MessageBus::new(100);
|
let bus = MessageBus::new(100);
|
||||||
|
|
||||||
|
let browser_config = if config.browser.enabled {
|
||||||
|
Some(config.browser.clone())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
// Create SessionManager with bus injection
|
// Create SessionManager with bus injection
|
||||||
let session_manager = SessionManager::new(
|
let session_manager = SessionManager::new(
|
||||||
provider_config.clone(),
|
provider_config.clone(),
|
||||||
storage.clone(),
|
storage.clone(),
|
||||||
bus.clone(),
|
bus.clone(),
|
||||||
memory_manager,
|
memory_manager,
|
||||||
|
browser_config,
|
||||||
)?;
|
)?;
|
||||||
let session_manager = Arc::new(session_manager);
|
let session_manager = Arc::new(session_manager);
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@ pub enum HandleResult {
|
|||||||
}
|
}
|
||||||
use crate::channels::slash_command::parse_slash_command;
|
use crate::channels::slash_command::parse_slash_command;
|
||||||
use crate::config::LLMProviderConfig;
|
use crate::config::LLMProviderConfig;
|
||||||
|
use crate::config::BrowserConfig;
|
||||||
use crate::agent::{AgentLoop, AgentError, ContextCompressor};
|
use crate::agent::{AgentLoop, AgentError, ContextCompressor};
|
||||||
use crate::agent::system_prompt::build_system_prompt;
|
use crate::agent::system_prompt::build_system_prompt;
|
||||||
use crate::agent::context_compressor::ContextCompressionConfig;
|
use crate::agent::context_compressor::ContextCompressionConfig;
|
||||||
@ -813,13 +814,18 @@ impl SessionManager {
|
|||||||
storage: Arc<Storage>,
|
storage: Arc<Storage>,
|
||||||
bus: Arc<MessageBus>,
|
bus: Arc<MessageBus>,
|
||||||
memory_manager: Arc<crate::memory::MemoryManager>,
|
memory_manager: Arc<crate::memory::MemoryManager>,
|
||||||
|
browser_config: Option<BrowserConfig>,
|
||||||
) -> Result<Self, AgentError> {
|
) -> Result<Self, AgentError> {
|
||||||
let mut skills_loader = SkillsLoader::new();
|
let mut skills_loader = SkillsLoader::new();
|
||||||
skills_loader.load_skills();
|
skills_loader.load_skills();
|
||||||
skills_loader.set_workspace_skills_dir(provider_config.workspace_dir.clone());
|
skills_loader.set_workspace_skills_dir(provider_config.workspace_dir.clone());
|
||||||
let skills_loader = Arc::new(skills_loader);
|
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 {
|
Ok(Self {
|
||||||
inner: Arc::new(Mutex::new(SessionManagerInner {
|
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 bash;
|
||||||
|
pub mod browser;
|
||||||
pub mod calculator;
|
pub mod calculator;
|
||||||
pub mod chat_manager;
|
pub mod chat_manager;
|
||||||
pub mod content_search;
|
pub mod content_search;
|
||||||
@ -18,6 +19,7 @@ pub mod traits;
|
|||||||
pub mod web_fetch;
|
pub mod web_fetch;
|
||||||
|
|
||||||
pub use bash::BashTool;
|
pub use bash::BashTool;
|
||||||
|
pub use browser::BrowserTool;
|
||||||
pub use calculator::CalculatorTool;
|
pub use calculator::CalculatorTool;
|
||||||
pub use chat_manager::ChatManagerTool;
|
pub use chat_manager::ChatManagerTool;
|
||||||
pub use content_search::ContentSearchTool;
|
pub use content_search::ContentSearchTool;
|
||||||
@ -34,6 +36,7 @@ pub use traits::{OutboundMessenger, Tool, ToolResult};
|
|||||||
pub use web_fetch::WebFetchTool;
|
pub use web_fetch::WebFetchTool;
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use crate::config::BrowserConfig;
|
||||||
use crate::memory::MemoryManager;
|
use crate::memory::MemoryManager;
|
||||||
use crate::skills::SkillsLoader;
|
use crate::skills::SkillsLoader;
|
||||||
|
|
||||||
@ -43,6 +46,7 @@ use crate::skills::SkillsLoader;
|
|||||||
pub fn create_default_tools(
|
pub fn create_default_tools(
|
||||||
skills_loader: Arc<SkillsLoader>,
|
skills_loader: Arc<SkillsLoader>,
|
||||||
memory: Arc<MemoryManager>,
|
memory: Arc<MemoryManager>,
|
||||||
|
browser_config: Option<&BrowserConfig>,
|
||||||
) -> ToolRegistry {
|
) -> ToolRegistry {
|
||||||
let registry = ToolRegistry::new();
|
let registry = ToolRegistry::new();
|
||||||
registry.register(CalculatorTool::new());
|
registry.register(CalculatorTool::new());
|
||||||
@ -66,5 +70,11 @@ pub fn create_default_tools(
|
|||||||
registry.register(TimelineRecallTool::new(memory.clone()));
|
registry.register(TimelineRecallTool::new(memory.clone()));
|
||||||
registry.register(MemoryForgetTool::new(memory.clone()));
|
registry.register(MemoryForgetTool::new(memory.clone()));
|
||||||
|
|
||||||
|
if let Some(cfg) = browser_config {
|
||||||
|
if cfg.enabled {
|
||||||
|
registry.register(BrowserTool::new(cfg));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
registry
|
registry
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user