use anyhow::Result;
use tokio::sync::mpsc;
use vtcode_core::config::models::ModelId;
use vtcode_core::config::types::ReasoningEffortLevel;
use vtcode_core::core::agent::runner::{AgentRunner, RunnerSettings};
use vtcode_core::core::agent::steering::SteeringMessage;
use vtcode_core::core::agent::task::{Task, TaskOutcome};
use vtcode_core::core::agent::types::AgentType;
#[tokio::test]
async fn test_agent_steering_stop() -> Result<()> {
let (steering_tx, steering_rx) = mpsc::unbounded_channel();
let temp_dir = tempfile::tempdir()?;
let workspace_path = temp_dir.path().to_path_buf();
let model_id = ModelId::Gemini31ProPreview;
let api_key = "dummy-key".to_string();
let session_id = "test-session".to_string();
let mut runner = AgentRunner::new(
AgentType::Single,
model_id,
api_key,
workspace_path,
session_id,
RunnerSettings {
reasoning_effort: Some(ReasoningEffortLevel::Medium),
verbosity: None,
},
Some(steering_rx),
)
.await?;
let task = Task {
id: "test-task".into(),
title: "Test Task".into(),
description: "Do nothing".into(),
instructions: None,
};
let runner_handle =
tokio::spawn(async move { runner.execute_task_with_retry(&task, &[], 1).await });
steering_tx.send(SteeringMessage::SteerStop)?;
let result = runner_handle.await??;
assert_eq!(result.outcome, TaskOutcome::Cancelled);
Ok(())
}
#[tokio::test]
async fn test_agent_steering_pause_resume() -> Result<()> {
Ok(())
}