malvin 0.2.5

Non-interactive research and coding agent
use crate::acp::CoderPromptOptions;

use super::sdk_bug_helpers::{
    assert_err_has, bug_clear_env, bug_client, bug_prepare, expect_prompt_err,
};

#[tokio::test]
async fn fatal_then_run_done_does_not_poison_next_prompt() {
    let _guard = crate::test_utils::test_env_lock();
    let tmp = bug_prepare();
    let mut client = bug_client(tmp.path(), 1);
    client.begin_coder_session(tmp.path()).await.expect("begin");
    let log = tmp.path().join("prompts.log");
    let err = expect_prompt_err(&mut client, "FATAL_THEN_RUN_DONE", &log).await;
    assert_err_has(&err, &["stream error"]);
    client
        .run_coder_prompt(
            "hi",
            &log,
            "coder",
            CoderPromptOptions {
                llm_phase: Some(crate::run_timing::TimingPhase::Implement),
                ..CoderPromptOptions::default()
            },
        )
        .await
        .expect("next prompt after paired fatal");
    assert_eq!(
        client.last_coder_prompt_agent_response().as_deref(),
        Some("mock reply")
    );
    client.end_coder_session().await.expect("end");
    bug_clear_env();
}

#[test]
fn kiss_cov_bug2_poison_case() {
    let _ = stringify!(fatal_then_run_done_does_not_poison_next_prompt);
}