pub enum SideEffectLevel {
None,
ReadOnly,
WorkspaceWrite,
ProcessExec,
Network,
DesktopControl,
}Expand description
Rough side-effect taxonomy for the capability-ceiling check.
Variants§
None
No side effect declared (conservative default; permission logic treats this as “unknown → deny unless explicitly allowed”).
ReadOnly
Pure reads only.
WorkspaceWrite
Writes to workspace files.
ProcessExec
Runs subprocesses.
Network
Reaches external services over the network.
DesktopControl
Drives the physical desktop — synthetic mouse/keyboard input and screen capture. The most invasive local class: it can operate ANY application (not just a sandboxed subprocess or a single network sink), inject keystrokes that paste secrets or dismiss dialogs, and every screenshot exfiltrates whatever is on screen to the model. It therefore sits at the top of the ceiling ladder — a policy must opt into it explicitly, above even network access.
Implementations§
Source§impl SideEffectLevel
impl SideEffectLevel
pub const ALL: [Self; 6]
Sourcepub const MAX: Self = Self::DesktopControl
pub const MAX: Self = Self::DesktopControl
The most-permissive side-effect level — the TOP of the ladder. This is
the single source of truth for “the outermost / most-autonomous ceiling”:
the runtime’s builtin ceiling and the top autonomy tier both reference it,
so adding a new most-invasive level (as desktop_control was added above
network) automatically raises every permissive bound instead of leaving
hardcoded "network" strings that silently cap the new level out. NEVER
hardcode a specific top level as “the max”; call this.
Sourcepub fn rank(&self) -> usize
pub fn rank(&self) -> usize
Numeric rank used by the policy intersector and side-effect ceiling check. Higher rank ⇒ more invasive.
Sourcepub fn as_str(&self) -> &'static str
pub fn as_str(&self) -> &'static str
Short string used in policy documents, bridge payloads, and error messages. Stable wire identifier.
Sourcepub fn rank_str(level: &str) -> usize
pub fn rank_str(level: &str) -> usize
Rank a level given as a string, through the canonical ladder — the single
source of truth for every ceiling/effect comparison that works with the
wire strings instead of the typed enum. An unrecognized value ranks as
None (0): tool levels always come from Self::as_str so they are
never unknown, and for a ceiling a typo then grants nothing above none
rather than silently widening the ceiling.
Trait Implementations§
Source§impl Clone for SideEffectLevel
impl Clone for SideEffectLevel
Source§fn clone(&self) -> SideEffectLevel
fn clone(&self) -> SideEffectLevel
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 SideEffectLevel
Source§impl Debug for SideEffectLevel
impl Debug for SideEffectLevel
Source§impl Default for SideEffectLevel
impl Default for SideEffectLevel
Source§fn default() -> SideEffectLevel
fn default() -> SideEffectLevel
Source§impl<'de> Deserialize<'de> for SideEffectLevel
impl<'de> Deserialize<'de> for SideEffectLevel
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 SideEffectLevel
Source§impl Hash for SideEffectLevel
impl Hash for SideEffectLevel
Source§impl PartialEq for SideEffectLevel
impl PartialEq for SideEffectLevel
Source§fn eq(&self, other: &SideEffectLevel) -> bool
fn eq(&self, other: &SideEffectLevel) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for SideEffectLevel
impl Serialize for SideEffectLevel
impl StructuralPartialEq for SideEffectLevel
Auto Trait Implementations§
impl Freeze for SideEffectLevel
impl RefUnwindSafe for SideEffectLevel
impl Send for SideEffectLevel
impl Sync for SideEffectLevel
impl Unpin for SideEffectLevel
impl UnsafeUnpin for SideEffectLevel
impl UnwindSafe for SideEffectLevel
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);