talos-agent 0.8.0

Core orchestration logic and the agent turn loop
Documentation
use std::fs;
use std::path::Path;

fn read_source(relative: &str) -> String {
    fs::read_to_string(Path::new(env!("CARGO_MANIFEST_DIR")).join(relative))
        .unwrap_or_else(|error| panic!("read {relative}: {error}"))
}

#[test]
fn sealed_provider_plan_owns_budgeted_dispatch_inputs() {
    let source = read_source("src/request_plan.rs");

    for required in [
        "struct ProviderRequestPlan",
        "messages: Vec<Message>",
        "tool_definitions: Vec<ToolDefinition>",
        "estimated_tokens: u32",
        "struct PreparedSessionTurn",
        "initial_plan: ProviderRequestPlan",
    ] {
        assert!(
            source.contains(required),
            "sealed Provider request source contract is missing: {required}"
        );
    }
}

#[test]
fn actor_and_provider_dispatch_share_the_sealed_plan() {
    let agent = read_source("src/lib.rs");
    let session = read_source("src/session.rs");
    let forwarding = read_source("src/session/turn.rs");

    for required in [
        "let mut initial_plan = Some(initial_plan);",
        "if let Some(plan) = initial_plan.take()",
        "stream_with_tools(&plan.messages, &plan.tool_definitions)",
    ] {
        assert!(
            agent.contains(required),
            "Agent dispatch must consume the sealed plan without rebuilding: {required}"
        );
    }

    assert!(
        session.contains(".prepare_session_turn("),
        "Actor must seal the initial Provider request before Turn start"
    );
    assert!(
        forwarding.contains("prepared: PreparedSessionTurn"),
        "Turn forwarding must carry the already sealed request plan"
    );
    assert!(
        !forwarding.contains("request_context_limit"),
        "Turn forwarding must not re-budget a rebuilt initial request"
    );
}