awaken-runtime 0.4.0

Phase-based execution engine, plugin system, and agent loop for Awaken
Documentation
use std::sync::Arc;

use awaken_contract::contract::event_sink::NullEventSink;
use awaken_contract::contract::identity::{RunIdentity, RunOrigin};
use awaken_contract::contract::message::Message;
use awaken_contract::contract::storage::RunRequestOrigin;
use awaken_contract::contract::tool_intercept::{AdapterKind, RunMode};
use awaken_runtime::RunRequest;
use awaken_runtime::RuntimeError;
use awaken_runtime::backend::{BackendControl, BackendRootRunRequest};
use awaken_runtime::registry::{
    AgentResolver, ExecutionResolver, ResolvedAgent, ResolvedExecution,
};

struct CompatResolver;

impl AgentResolver for CompatResolver {
    fn resolve(&self, _agent_id: &str) -> Result<ResolvedAgent, RuntimeError> {
        unreachable!("compat test only checks struct construction")
    }
}

impl ExecutionResolver for CompatResolver {
    fn resolve_execution(&self, _agent_id: &str) -> Result<ResolvedExecution, RuntimeError> {
        unreachable!("compat test only checks struct construction")
    }
}

#[test]
fn run_request_struct_literal_keeps_0_2_fields() {
    let request = RunRequest {
        messages: vec![Message::user("hello")],
        messages_already_persisted: false,
        thread_id: "thread-compat".to_string(),
        agent_id: None,
        overrides: None,
        decisions: Vec::new(),
        frontend_tools: Vec::new(),
        origin: RunRequestOrigin::User,
        run_mode: RunMode::Foreground,
        adapter: AdapterKind::Internal,
        parent_run_id: None,
        parent_thread_id: None,
        continue_run_id: None,
        run_id_hint: None,
        dispatch_id_hint: None,
        dispatch_id: None,
        session_id: None,
        transport_request_id: None,
        run_inbox: None,
    };

    assert_eq!(request.thread_id, "thread-compat");
    assert_eq!(request.messages.len(), 1);
}

#[test]
fn backend_root_run_request_struct_literal_keeps_0_2_fields() {
    let resolver = CompatResolver;
    let request = BackendRootRunRequest {
        agent_id: "agent",
        messages: vec![Message::user("hello")],
        new_messages: vec![Message::user("hello")],
        sink: Arc::new(NullEventSink),
        resolver: &resolver,
        run_identity: RunIdentity::new(
            "thread-compat".to_string(),
            None,
            "run-compat".to_string(),
            None,
            "agent".to_string(),
            RunOrigin::User,
        ),
        checkpoint_store: None,
        control: BackendControl::default(),
        decisions: Vec::new(),
        overrides: None,
        frontend_tools: Vec::new(),
        local: None,
        inbox: None,
        is_continuation: false,
    };

    assert_eq!(request.agent_id, "agent");
    assert!(!request.is_continuation);
}