Skip to main content

CliVendor

Trait CliVendor 

Source
pub trait CliVendor: Send + Sync {
    // Required methods
    fn kind(&self) -> CliVendorKind;
    fn label(&self) -> &str;
    fn build_headless_command(
        &self,
        req: &CliRequest,
        workdir: &Path,
    ) -> CliCommand;
    fn build_interactive_command(
        &self,
        req: &CliRequest,
        workdir: &Path,
    ) -> CliCommand;
    fn new_parser(&self) -> Box<dyn CliEventParser>;
    fn materialize_config<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        projection: &'life1 ConceptProjection,
        workdir: &'life2 Path,
    ) -> Pin<Box<dyn Future<Output = Result<(), MapperError>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             Self: 'async_trait;

    // Provided method
    fn is_available<'life0, 'async_trait>(
        &'life0 self,
    ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             Self: 'async_trait { ... }
}
Expand description

The integration seam each CLI adapter implements.

Required Methods§

Source

fn kind(&self) -> CliVendorKind

Stable identifier this adapter answers to.

Source

fn label(&self) -> &str

Human-friendly label for the UI (e.g. “Claude Code”).

Source

fn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand

Build the command line for a headless run.

Source

fn build_interactive_command( &self, req: &CliRequest, workdir: &Path, ) -> CliCommand

Build the command line for an interactive run (TUI).

Source

fn new_parser(&self) -> Box<dyn CliEventParser>

Construct a fresh parser for one run’s stream of NDJSON / lines.

Source

fn materialize_config<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, projection: &'life1 ConceptProjection, workdir: &'life2 Path, ) -> Pin<Box<dyn Future<Output = Result<(), MapperError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Write the vendor’s on-disk config (e.g. CLAUDE.md, .mcp.json, AGENTS.md) from the supplied projection. Called before every run. Idempotent — overwrites prior files the harness placed there.

Provided Methods§

Source

fn is_available<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Probe whether the CLI is actually installed and runnable in the current isolator. The harness skips vendors that return false from the /api/cli/vendors listing.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl CliVendor for AntigravityVendor

Source§

fn kind(&self) -> CliVendorKind

Source§

fn label(&self) -> &str

Source§

fn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand

Source§

fn build_interactive_command( &self, req: &CliRequest, workdir: &Path, ) -> CliCommand

Source§

fn new_parser(&self) -> Box<dyn CliEventParser>

Source§

fn materialize_config<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, projection: &'life1 ConceptProjection, workdir: &'life2 Path, ) -> Pin<Box<dyn Future<Output = Result<(), MapperError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, AntigravityVendor: 'async_trait,

Source§

fn is_available<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where 'life0: 'async_trait, AntigravityVendor: 'async_trait,

Source§

impl CliVendor for ClaudeVendor

Source§

fn kind(&self) -> CliVendorKind

Source§

fn label(&self) -> &str

Source§

fn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand

Source§

fn build_interactive_command( &self, req: &CliRequest, workdir: &Path, ) -> CliCommand

Source§

fn new_parser(&self) -> Box<dyn CliEventParser>

Source§

fn materialize_config<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, projection: &'life1 ConceptProjection, workdir: &'life2 Path, ) -> Pin<Box<dyn Future<Output = Result<(), MapperError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, ClaudeVendor: 'async_trait,

Source§

fn is_available<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where 'life0: 'async_trait, ClaudeVendor: 'async_trait,

Source§

impl CliVendor for CodexVendor

Source§

fn kind(&self) -> CliVendorKind

Source§

fn label(&self) -> &str

Source§

fn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand

Source§

fn build_interactive_command( &self, req: &CliRequest, workdir: &Path, ) -> CliCommand

Source§

fn new_parser(&self) -> Box<dyn CliEventParser>

Source§

fn materialize_config<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, projection: &'life1 ConceptProjection, workdir: &'life2 Path, ) -> Pin<Box<dyn Future<Output = Result<(), MapperError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, CodexVendor: 'async_trait,

Source§

fn is_available<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
where 'life0: 'async_trait, CodexVendor: 'async_trait,

Implementors§