tools: each module exports only tool() or tools(), nothing else

Every tool module now has a clean interface:
- read, write, edit, grep, glob, bash, vision: pub fn tool() -> Tool
- web: pub fn tools() -> [Tool; 2]
- memory: pub fn memory_tools() -> Vec<Tool>
- channels: pub fn tools() -> Vec<Tool>
- control: pub fn tools() -> Vec<Tool>

Definition and handler functions are private to each module.
mod.rs::tools() just chains the module exports.

Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
ProofOfConcept 2026-04-04 15:34:07 -04:00 committed by Kent Overstreet
parent fdb8c989f5
commit ed150df628
10 changed files with 65 additions and 36 deletions

View file

@ -13,7 +13,11 @@ struct Args {
content: String,
}
pub fn definition() -> ToolDef {
pub fn tool() -> super::Tool {
super::Tool { def: definition(), handler: |_a, v| Box::pin(async move { write_file(&v) }) }
}
fn definition() -> ToolDef {
ToolDef::new(
"write_file",
"Write content to a file. Creates the file if it doesn't exist, \
@ -35,7 +39,7 @@ pub fn definition() -> ToolDef {
)
}
pub fn write_file(args: &serde_json::Value) -> Result<String> {
fn write_file(args: &serde_json::Value) -> Result<String> {
let args: Args = serde_json::from_value(args.clone())
.context("invalid write_file arguments")?;