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.

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§