Files
codex/codex-rs/tool-api/src/error.rs
jif-oai 95bfea847d refactor: extract executable tool contracts into codex-tool-api (#22138)
## Why
The tool-extraction work needs one shared executable-tool seam that
hosts and tool owners can depend on without reaching into `codex-core`.
Landing that seam first makes the later tool-family ports incremental
and keeps the reusable contract separate from any one migration.

## What changed
- add a new `codex-tool-api` crate and workspace wiring
- move the common executable-tool contracts into that crate:
`ToolBundle`, `ToolDefinition`, `ToolExecutor`, `ToolCall`, `ToolInput`,
`ToolOutput`, `JsonToolOutput`, and `ToolError`
- keep host state generic through `ToolBundle<C>` / `ToolCall<C>` so
later integrations can provide their own runtime context without baking
core types into the API
- carry the host signals the runtime will need later, including
parallel-call support and mutability probing
- leave existing tool families in place for now; this PR only
establishes the reusable API surface
- add the Bazel target and lockfile updates for the new crate

## Testing
- `cargo test -p codex-tool-api`
2026-05-11 13:56:59 +02:00

23 lines
570 B
Rust

use thiserror::Error;
/// Error returned by a contributed executable tool.
#[derive(Clone, Debug, Error, PartialEq, Eq)]
pub enum ToolError {
#[error("{0}")]
RespondToModel(String),
#[error("fatal tool error: {0}")]
Fatal(String),
}
impl ToolError {
/// Creates a model-visible tool error.
pub fn respond_to_model(message: impl Into<String>) -> Self {
Self::RespondToModel(message.into())
}
/// Creates a host-fatal tool error.
pub fn fatal(message: impl Into<String>) -> Self {
Self::Fatal(message.into())
}
}