zerostack 1.4.0-rc1

Minimalistic coding agent written in Rust, optimized for memory footprint and performance
mod cmd_picker;
pub(crate) mod dot_cmd;
mod event_handler;
mod events;
pub(crate) mod input;
pub(crate) mod interactive;
mod markdown;
mod permission_handler;
pub(crate) mod picker;
pub(crate) mod renderer;
mod slash;
mod status;
mod terminal;
pub(crate) mod utils;
mod worktree;

pub(crate) use dot_cmd::apply_current_prompt_mode;

use crossterm::style::Color;

use crate::cli::Cli;
use crate::config::Config;
use crate::context::ContextFiles;
use crate::permission::ask::{AskReceiver, AskSender};
use crate::permission::checker::PermCheck;
use crate::provider::{AnyAgent, AnyClient};
use crate::sandbox::Sandbox;
use crate::session::Session;
use crate::ui::interactive::InteractiveSession;

pub(super) const C_AGENT: Color = Color::White;
pub(super) const C_ERROR: Color = Color::Red;
pub(super) const C_TOOL: Color = Color::Yellow;
pub(super) const C_PERM: Color = Color::Magenta;

#[allow(clippy::too_many_arguments)]
pub async fn run_interactive(
    client: AnyClient,
    agent: Option<AnyAgent>,
    cli: &Cli,
    cfg: &Config,
    session: &mut Session,
    context: &mut ContextFiles,
    permission: Option<PermCheck>,
    ask_tx: Option<AskSender>,
    ask_rx: Option<AskReceiver>,
    sandbox: Sandbox,
) -> anyhow::Result<()> {
    let mut is: InteractiveSession<'_> = InteractiveSession::new(
        client, agent, cli, cfg, session, context, permission, ask_tx, ask_rx, sandbox,
    )
    .await?;
    is.run().await
}