1mod approval;
4mod approval_gate;
5mod builtin;
6mod error;
7mod mcp_tool;
8mod path_util;
9mod registry;
10
11pub use approval::{
12 handler_for_policy, ApprovalHandler, ApprovalPolicy, ApprovalRequest, ApprovalResponse,
13 AutoApprove, OnDestructiveApprove, PromptApprove,
14};
15pub use approval_gate::{GateApprovalHandler, SharedApprovalGate};
16pub use error::ToolError;
17pub use mcp_tool::register_mcp_tools;
18pub use registry::{Tool, ToolContext, ToolRegistry, ToolResult};
19
20use serde_json::json;
21
22pub fn default_registry(config: &codei_config::ResolvedConfig) -> ToolRegistry {
23 let mut registry = ToolRegistry::new();
24 registry.register(Box::new(builtin::ReadTool));
25 registry.register(Box::new(builtin::ReadSkillTool));
26 registry.register(Box::new(builtin::WriteTool));
27 registry.register(Box::new(builtin::EditTool));
28 registry.register(Box::new(builtin::GlobTool));
29 registry.register(Box::new(builtin::GrepTool::new(&config.config.tools.grep)));
30 registry.register(Box::new(builtin::ShellTool::new(
31 config.config.tools.shell.timeout_secs,
32 config.config.tools.shell.sandbox,
33 config.config.tools.shell.allowlist.clone(),
34 )));
35 registry.register(Box::new(builtin::ListDirTool));
36 registry.register(Box::new(builtin::DefinitionTool));
37 registry
38}
39
40pub fn tool_definitions(registry: &ToolRegistry) -> Vec<codei_llm::ToolDefinition> {
41 registry.definitions()
42}
43
44pub fn path_schema() -> serde_json::Value {
46 json!({
47 "type": "object",
48 "properties": {
49 "path": {
50 "type": "string",
51 "description": "Path relative to the workspace root"
52 }
53 },
54 "required": ["path"]
55 })
56}