#![forbid(unsafe_code)]
#![cfg_attr(
test,
allow(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
reason = "tests assert by unwrapping"
)
)]
mod args;
pub mod bash;
mod collate;
pub mod config;
pub mod edit;
pub mod env;
pub mod find;
pub mod grep;
pub mod image;
pub mod info;
mod js;
pub mod ls;
pub mod mutation_queue;
mod node_path;
pub mod path_utils;
pub mod read;
pub mod registry;
pub mod truncate;
pub mod write;
pub use bash::{
BashDetachRegistry, BashOutcome, DetachedProcess, ShellRunOptions, ShellTool, run_shell_command,
};
pub use config::{
ImageOptions, ModelImageInfo, NoContext, SessionEnv, ShellOptions, ToolConfig, ToolContext,
};
pub use edit::EditTool;
pub use env::{ExecutionEnv, FsError, LocalEnv, SpawnedProcess};
pub use find::FindTool;
pub use grep::GrepTool;
pub use info::{
BuiltinToolInfo, BuiltinToolName, DEFAULT_ACTIVE_TOOLS, READ_ONLY_TOOLS, builtin_tool_info,
};
pub use ls::LsTool;
pub use mutation_queue::FileMutationQueue;
pub use read::ReadTool;
pub use registry::{
builtin_tool_infos, builtin_tools, coding_tools, create_tool, read_only_tools, tool_by_name,
};
pub use write::WriteTool;
pub const OPERATION_ABORTED: &str = "Operation aborted";
fn aborted() -> oino_agent::ToolError {
oino_agent::ToolError::new(OPERATION_ABORTED)
}
fn js_number(value: f64) -> oino_ai::JsonValue {
if value.fract() == 0.0 && value.abs() < 9_007_199_254_740_992.0 {
#[allow(
clippy::cast_possible_truncation,
reason = "whole and within the safe integer range"
)]
let whole = value as i64;
serde_json::json!(whole)
} else {
serde_json::json!(value)
}
}