llm_coding_tools_rig/
lib.rs

1#![doc = include_str!(concat!("../", env!("CARGO_PKG_README")))]
2#![warn(missing_docs)]
3
4pub mod absolute;
5pub mod allowed;
6pub mod bash;
7pub mod todo;
8pub mod webfetch;
9
10// Re-export core types for convenience
11pub use llm_coding_tools_core::{ToolError, ToolOutput, ToolResult};
12
13// Re-export context module and ToolContext trait for convenience
14pub use llm_coding_tools_core::context;
15pub use llm_coding_tools_core::ToolContext;
16
17// Re-export SystemPromptBuilder and Substitute from core
18pub use llm_coding_tools_core::{Substitute, SystemPromptBuilder};
19
20// Re-export path resolvers
21pub use llm_coding_tools_core::path::{AbsolutePathResolver, AllowedPathResolver, PathResolver};
22
23// Re-export core operation types used by tools
24pub use llm_coding_tools_core::{
25    BashOutput, EditError, GlobOutput, GrepFileMatches, GrepLineMatch, GrepOutput, Todo,
26    TodoPriority, TodoState, TodoStatus, WebFetchOutput,
27};
28
29// Re-export absolute module tool types
30pub use absolute::{
31    EditArgs, EditTool, GlobArgs, GlobTool, GrepArgs, GrepTool, ReadArgs, ReadTool, WriteTool,
32    WriteToolArgs,
33};
34
35/// Re-export allowed module tool types (namespaced to avoid conflicts)
36pub mod allowed_tools {
37    pub use crate::allowed::{
38        EditArgs, EditError, EditTool, GlobArgs, GlobTool, GrepArgs, GrepTool, ReadArgs, ReadTool,
39        WriteTool, WriteToolArgs,
40    };
41}
42
43// Re-export standalone tools
44pub use bash::{BashArgs, BashTool};
45pub use todo::{TodoReadArgs, TodoReadTool, TodoTools, TodoWriteArgs, TodoWriteTool};
46pub use webfetch::{WebFetchArgs, WebFetchTool};
47
48#[cfg(test)]
49mod tests {
50    use super::*;
51    use llm_coding_tools_core::tool_names;
52
53    #[test]
54    fn system_prompt_builder_with_real_tools() {
55        let mut pb = SystemPromptBuilder::new();
56        let read: absolute::ReadTool<true> = pb.track(absolute::ReadTool::new());
57        let bash = pb.track(BashTool::new());
58
59        let prompt = pb.build();
60
61        assert!(prompt.contains("## `Read` Tool"));
62        assert!(prompt.contains("## `Bash` Tool"));
63        assert!(prompt.contains("absolute path")); // From READ_ABSOLUTE
64
65        // Tools are returned unchanged
66        assert_eq!(
67            <absolute::ReadTool<true> as rig::tool::Tool>::NAME,
68            tool_names::READ
69        );
70        let _ = read;
71        let _ = bash;
72    }
73}