pub mod core;
pub mod llm;
pub mod state;
pub mod tools;
pub use core::{Tool, ToolArgs, ToolRegistry, ToolResult};
pub use state::{CancelSignal, FileState, StateSnapshot, ToolState};
#[cfg(feature = "old")]
pub use tools::old::{
CopyPathTool, CreateDirectoryTool, CreateFileTool, DeleteFunctionTool, DeleteLineTool,
DeletePathTool, DeleteTextTool, InsertTextTool, MovePathTool, OverwriteFileTool,
ReplaceTextTool,
RunCommandTool,
CreateTool, GotoTool, OpenTool, ScrollTool, WindowedFile,
ConfigurableFilter, FindFileTool, SearchDirTool, SearchFileTool,
StateTool,
ClassifyTaskTool, CountTokensTool, FilemapTool, SubmitTool,
};
#[cfg(feature = "opencode")]
pub use tools::opencode::{
BashTool, EditTool, GlobTool, GrepTool, ListTool, MultiEditTool, ReadTool, TodoReadTool,
TodoWriteTool, WebFetchTool, WebSearchTool, WriteTool,
};
pub use llm::{
assistant::{generate_assistant_content, ToolCallInfo},
converter::json_to_tool_args,
executor::{
execute_tool_calls, execute_tool_calls_structured, ExecutionCallback, NoOpCallback,
ToolCallRequest, ToolExecutionResult,
},
result_handler::{handle_large_result, ResultHandlerConfig},
};
#[cfg(all(feature = "old", not(feature = "opencode")))]
pub use tools::old::{create_tool_registry, create_tool_registry_with_open_window_size};
#[cfg(feature = "opencode")]
pub use tools::opencode::{create_tool_registry, create_tool_registry_with_open_window_size};
#[cfg(all(test, feature = "old", not(feature = "opencode")))]
mod tests {
use super::*;
#[test]
fn test_registry_creation() {
let registry = create_tool_registry();
let tool_names = registry.list_tools();
assert!(tool_names.contains(&"open".to_string()));
assert!(tool_names.contains(&"goto".to_string()));
assert!(tool_names.contains(&"scroll_up".to_string()));
assert!(tool_names.contains(&"scroll_down".to_string()));
assert!(tool_names.contains(&"create".to_string()));
assert!(tool_names.contains(&"run_command".to_string()));
assert!(tool_names.contains(&"find_file".to_string()));
assert!(tool_names.contains(&"search_file".to_string()));
assert!(tool_names.contains(&"search_dir".to_string()));
assert!(tool_names.contains(&"create_file".to_string()));
assert!(tool_names.contains(&"replace_text".to_string()));
assert!(tool_names.contains(&"insert_text".to_string()));
assert!(tool_names.contains(&"delete_text".to_string()));
assert!(tool_names.contains(&"delete_line".to_string()));
assert!(tool_names.contains(&"overwrite_file".to_string()));
assert!(tool_names.contains(&"delete_path".to_string()));
assert!(tool_names.contains(&"move_path".to_string()));
assert!(tool_names.contains(&"copy_path".to_string()));
assert!(tool_names.contains(&"create_directory".to_string()));
assert!(tool_names.contains(&"_state".to_string()));
assert!(tool_names.contains(&"count_tokens".to_string()));
assert!(tool_names.contains(&"filemap".to_string()));
assert!(tool_names.contains(&"submit".to_string()));
assert!(tool_names.contains(&"classify_task".to_string()));
}
}
#[cfg(all(test, feature = "opencode"))]
mod opencode_tests {
use super::*;
#[test]
fn test_opencode_registry_creation() {
let registry = create_tool_registry();
let tool_names = registry.list_tools();
assert!(tool_names.contains(&"bash".to_string()));
assert!(tool_names.contains(&"read".to_string()));
assert!(tool_names.contains(&"write".to_string()));
assert!(tool_names.contains(&"edit".to_string()));
assert!(tool_names.contains(&"glob".to_string()));
assert!(tool_names.contains(&"grep".to_string()));
assert!(tool_names.contains(&"list".to_string()));
assert!(tool_names.contains(&"multiedit".to_string()));
assert!(tool_names.contains(&"webfetch".to_string()));
assert!(tool_names.contains(&"websearch".to_string()));
assert!(tool_names.contains(&"todowrite".to_string()));
assert!(tool_names.contains(&"todoread".to_string()));
}
}