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§
Sourcefn kind(&self) -> CliVendorKind
fn kind(&self) -> CliVendorKind
Stable identifier this adapter answers to.
Sourcefn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand
fn build_headless_command(&self, req: &CliRequest, workdir: &Path) -> CliCommand
Build the command line for a headless run.
Sourcefn build_interactive_command(
&self,
req: &CliRequest,
workdir: &Path,
) -> CliCommand
fn build_interactive_command( &self, req: &CliRequest, workdir: &Path, ) -> CliCommand
Build the command line for an interactive run (TUI).
Sourcefn new_parser(&self) -> Box<dyn CliEventParser>
fn new_parser(&self) -> Box<dyn CliEventParser>
Construct a fresh parser for one run’s stream of NDJSON / lines.
Sourcefn 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,
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§
Sourcefn is_available<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
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.