mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-30 16:19:21 +00:00
Memory tools (search, write, read, tree) held a single workspace created at startup with GATEWAY_USER_ID. In multi-tenant mode, all users' tool calls searched the default user's scope. Add WorkspaceResolver trait that resolves workspaces per-request using JobContext.user_id. In single-user mode, returns the startup workspace. In multi-tenant mode (GATEWAY_USER_TOKENS configured), creates and caches per-user workspaces on demand. Includes regression tests for workspace resolution and user isolation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
63 lines
1.8 KiB
Rust
63 lines
1.8 KiB
Rust
//! Built-in tools that come with the agent.
|
|
|
|
mod echo;
|
|
pub mod extension_tools;
|
|
mod file;
|
|
mod http;
|
|
mod job;
|
|
mod json;
|
|
pub mod memory;
|
|
mod message;
|
|
pub mod path_utils;
|
|
mod restart;
|
|
pub mod routine;
|
|
pub mod secrets_tools;
|
|
pub(crate) mod shell;
|
|
pub mod skill_tools;
|
|
mod time;
|
|
mod tool_info;
|
|
|
|
pub use echo::EchoTool;
|
|
pub use extension_tools::{
|
|
ExtensionInfoTool, ToolActivateTool, ToolAuthTool, ToolInstallTool, ToolListTool,
|
|
ToolRemoveTool, ToolSearchTool, ToolUpgradeTool,
|
|
};
|
|
pub use file::{ApplyPatchTool, ListDirTool, ReadFileTool, WriteFileTool};
|
|
pub use http::HttpTool;
|
|
pub use job::{
|
|
CancelJobTool, CreateJobTool, JobEventsTool, JobPromptTool, JobStatusTool, ListJobsTool,
|
|
PromptQueue, SchedulerSlot,
|
|
};
|
|
pub use json::JsonTool;
|
|
pub use memory::{MemoryReadTool, MemorySearchTool, MemoryTreeTool, MemoryWriteTool};
|
|
pub use message::MessageTool;
|
|
pub use restart::RestartTool;
|
|
pub use routine::{
|
|
EventEmitTool, RoutineCreateTool, RoutineDeleteTool, RoutineFireTool, RoutineHistoryTool,
|
|
RoutineListTool, RoutineUpdateTool,
|
|
};
|
|
pub use secrets_tools::{SecretDeleteTool, SecretListTool};
|
|
pub use shell::ShellTool;
|
|
pub use skill_tools::{SkillInstallTool, SkillListTool, SkillRemoveTool, SkillSearchTool};
|
|
pub use time::TimeTool;
|
|
pub use tool_info::ToolInfoTool;
|
|
mod html_converter;
|
|
pub mod image_analyze;
|
|
pub mod image_edit;
|
|
pub mod image_gen;
|
|
|
|
pub use html_converter::convert_html_to_markdown;
|
|
pub use image_analyze::ImageAnalyzeTool;
|
|
pub use image_edit::ImageEditTool;
|
|
pub use image_gen::ImageGenerateTool;
|
|
|
|
/// Detect image media type from file extension via `mime_guess`.
|
|
/// Falls back to `image/jpeg` for unrecognized or non-image extensions.
|
|
pub(crate) fn media_type_from_path(path: &str) -> String {
|
|
mime_guess::from_path(path)
|
|
.first_raw()
|
|
.filter(|m| m.starts_with("image/"))
|
|
.unwrap_or("image/jpeg")
|
|
.to_string()
|
|
}
|