sac-cli 0.1.0

Terminal-based AI coding agent — fork of NAC with extended backend support and context management
Documentation
use sac::{agent::Agent, model::ModelClient};

#[tokio::test]
#[ignore = "requires OPENAI_API_KEY"]
async fn test_simple_prompt() {
    let client = ModelClient::from_env().expect("Need OPENAI_API_KEY");
    let mut agent = Agent::new(client);
    let result = agent.send("What is 2+2? Reply with just the number.").await;

    assert!(result.is_ok(), "Agent failed: {:?}", result.err());
    let response = result.expect("expected successful response");
    assert!(
        response.contains('4'),
        "Expected '4' in response, got: {}",
        response
    );
}

#[tokio::test]
#[ignore = "requires OPENAI_API_KEY"]
async fn test_tool_usage() {
    let unique = std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)
        .expect("time went backwards")
        .as_nanos();
    let path = std::env::temp_dir().join(format!("agent_task5_test_{}.txt", unique));
    std::fs::write(&path, "hello from test file").expect("failed to create temp file");

    let client = ModelClient::from_env().expect("Need OPENAI_API_KEY");
    let mut agent = Agent::new(client);
    let result = agent
        .send(&format!(
            "Read the file {} and tell me what it says",
            path.display()
        ))
        .await;

    let _ = std::fs::remove_file(&path);

    assert!(result.is_ok(), "Agent failed: {:?}", result.err());
    let response = result.expect("expected successful response");
    assert!(
        response.contains("hello from test"),
        "Expected file content in response, got: {}",
        response
    );
}