Skip to main content

AgentInstaller

Struct AgentInstaller 

Source
pub struct AgentInstaller { /* private fields */ }
Expand description

Installs agents from .leviath-bundle packages.

Implementations§

Source§

impl AgentInstaller

Source

pub fn new() -> Self

Create a new installer using the default installation directory.

The install root comes from the shared LEVIATH_HOME-aware resolver in leviath_core::paths, so this crate installs into exactly the tree every other component reads.

Source

pub fn with_install_dir(install_dir: PathBuf) -> Self

Create an installer with a custom installation directory.

Source

pub fn install(&self, package_path: &Path) -> Result<InstalledAgent>

Install an agent from a .leviath-bundle file.

Source

pub fn install_from_bytes( &self, name: &str, data: &[u8], ) -> Result<InstalledAgent>

Install an agent from in-memory bytes.

name becomes a directory under the install dir, so it must be a single safe path component. install derives it from file_stem() (which already strips directories), but this is pub and any future caller passing a downloaded or user-supplied name would otherwise get a traversal for free - Path::join does not normalize, and an absolute name replaces the base entirely.

Source

pub fn uninstall(&self, agent_name: &str) -> Result<()>

Uninstall an agent by removing its directory.

Source

pub fn list_installed(&self) -> Result<Vec<InstalledAgent>>

List all installed agents.

Source

pub fn get_installed(&self, name: &str) -> Option<InstalledAgent>

Get information about a specific installed agent, or None if it is not installed.

Infallible on purpose, and the signature now says so. A manifest that cannot be read or parsed still means installed - the directory and the file are both there - so it reports the agent with whatever metadata it could recover rather than failing. That is the state you would run lev remove to fix, and an error here would be the one thing standing between the user and the fix.

It previously returned anyhow::Result and never once returned Err, which left its only production caller .unwrap()-ing an infallible result inside a function that returns Result - a panic waiting for whoever made this propagate.

Trait Implementations§

Source§

impl Default for AgentInstaller

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more