pub enum ToolCallErrorCategory {
SchemaValidation,
ToolError,
McpServerError,
HostBridgeError,
PermissionDenied,
RejectedLoop,
ParseAborted,
Timeout,
Network,
Cancelled,
Unknown,
}Expand description
Wire-level classification of a ToolCallUpdate failure. Pairs with the
human-readable error string so clients can render each failure type
distinctly (e.g. surface a “permission denied” badge, or a different
retry affordance for network vs tool_error). The enum is
deliberately extensible — unknown is the default when the runtime
could not classify a failure.
Variants§
SchemaValidation
Host-side validation rejected the args (missing required field, invalid type, malformed JSON).
ToolError
The tool ran and returned an error result (e.g. read_file on a
missing path) — distinguished from a transport failure.
McpServerError
MCP transport / server-protocol error.
HostBridgeError
The host bridge returned an error during dispatch.
PermissionDenied
session/request_permission denied by the client, or a policy
rule (static or dynamic) refused the call.
RejectedLoop
The harn loop detector skipped this call because the same (tool, args) pair repeated past the configured threshold.
ParseAborted
Streaming text candidate was detected (bare name( or
<tool_call> opener) but never resolved into a parseable call:
args parsed as malformed, the heredoc body broke, the tag closed
without a balanced expression, or the stream ended mid-call.
Used by the streaming candidate detector (harn#692) to retract a
tool_call candidate that turned out to be prose or syntactically
broken so clients can dismiss the in-flight chip.
Timeout
The tool exceeded its time budget.
Network
Transient network / rate-limited / 5xx provider failure.
Cancelled
The tool was cancelled (e.g. session aborted).
Unknown
Default when classification was not performed.
Implementations§
Source§impl ToolCallErrorCategory
impl ToolCallErrorCategory
pub const ALL: [Self; 11]
Sourcepub fn is_recoverable(self) -> bool
pub fn is_recoverable(self) -> bool
Whether a rejection in this category is RECOVERABLE by the model on its own — i.e. the call failed because of a fixable slip (bad/missing arguments, malformed tool name) and re-issuing it with the correction is the right next move. Distinguished from a true policy/permission denial, where the model must NOT retry and should pivot or ask. Used by the dispatch primitive to pick a retry-positive vs. don’t-retry feedback body for the model-facing tool result.
pub fn as_str(self) -> &'static str
Sourcepub fn from_internal(category: &ErrorCategory) -> Self
pub fn from_internal(category: &ErrorCategory) -> Self
Map an internal ErrorCategory (used by the VM’s VmError
classification) onto the wire enum. The internal taxonomy is
finer-grained — several transient categories collapse onto
Network, and the auth/quota family becomes HostBridgeError
because at the tool-dispatch boundary those errors come from
the bridge transport rather than the tool itself.
Trait Implementations§
Source§impl Clone for ToolCallErrorCategory
impl Clone for ToolCallErrorCategory
Source§fn clone(&self) -> ToolCallErrorCategory
fn clone(&self) -> ToolCallErrorCategory
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ToolCallErrorCategory
Source§impl Debug for ToolCallErrorCategory
impl Debug for ToolCallErrorCategory
Source§impl<'de> Deserialize<'de> for ToolCallErrorCategory
impl<'de> Deserialize<'de> for ToolCallErrorCategory
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ToolCallErrorCategory
Source§impl Hash for ToolCallErrorCategory
impl Hash for ToolCallErrorCategory
Source§impl PartialEq for ToolCallErrorCategory
impl PartialEq for ToolCallErrorCategory
Source§fn eq(&self, other: &ToolCallErrorCategory) -> bool
fn eq(&self, other: &ToolCallErrorCategory) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for ToolCallErrorCategory
impl Serialize for ToolCallErrorCategory
impl StructuralPartialEq for ToolCallErrorCategory
Auto Trait Implementations§
impl Freeze for ToolCallErrorCategory
impl RefUnwindSafe for ToolCallErrorCategory
impl Send for ToolCallErrorCategory
impl Sync for ToolCallErrorCategory
impl Unpin for ToolCallErrorCategory
impl UnsafeUnpin for ToolCallErrorCategory
impl UnwindSafe for ToolCallErrorCategory
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);