malvin 0.2.4

Non-interactive research and coding agent
use super::factory::build_agent_backend;
use super::sdk_client::BridgeKind;
use super::test_support::{shared_opts, test_io};
use crate::cli::WorkflowCliOptions;

#[test]
fn test_io_returns_agent_io_options_with_expected_flags() {
    let io = test_io();
    assert!(io.force);
    assert!(io.no_tee);
    assert!(io.raw_output);
    assert!(!io.show_thoughts_on_stdout);
    assert!(!io.emit_stdout_markdown);
    assert!(!io.log_full_outgoing_prompts);
}

#[test]
fn cursor_and_pi_keep_coder_session_for_process_life() {
    let sdk = crate::agent_backend::agent_backend_from_client(
        crate::cursor_sdk::cursor_sdk_client_from_raw("cursor:auto", test_io(), 1),
    );
    assert!(sdk.keeps_coder_session_for_process_life());
    let pi = crate::agent_backend::agent_backend_from_client({
        let model = crate::model_id::parse_model_id("pi:openai/gpt-4o").expect("model");
        crate::agent_backend::SdkClient::new_pi(model, test_io())
    });
    assert!(pi.keeps_coder_session_for_process_life());
}

#[test]
fn build_agent_backend_selects_pi_for_pi_model() {
    let mut shared = shared_opts(false);
    shared.model = crate::model_id::parse_model_id("pi:openai/gpt-4o").expect("model");
    let backend = build_agent_backend(&shared, WorkflowCliOptions { force: false }, false, "code")
        .expect("pi backend");
    assert!(matches!(backend.kind, BridgeKind::Pi));
}