Skip to main content

codei_tools/
lib.rs

1//! Agent tools for CodeI.
2
3mod 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    if config.config.tools.web_fetch.enabled {
38        registry.register(Box::new(builtin::WebFetchTool::new(
39            config.config.tools.web_fetch.timeout_secs,
40            config.config.tools.web_fetch.max_bytes,
41            config.config.tools.web_fetch.ssrf_protection,
42        )));
43    }
44    if config.config.tools.web_search.enabled {
45        let ws = &config.config.tools.web_search;
46        registry.register(Box::new(builtin::WebSearchTool::new(
47            ws.provider,
48            ws.timeout_secs,
49            ws.max_results,
50            ws.searxng_url.clone(),
51            ws.ssrf_protection,
52        )));
53    }
54    registry
55}
56
57pub fn tool_definitions(registry: &ToolRegistry) -> Vec<codei_llm::ToolDefinition> {
58    registry.definitions()
59}
60
61/// JSON schema helpers shared by builtin tools.
62pub fn path_schema() -> serde_json::Value {
63    json!({
64        "type": "object",
65        "properties": {
66            "path": {
67                "type": "string",
68                "description": "Path relative to the workspace root"
69            }
70        },
71        "required": ["path"]
72    })
73}