Skip to main content

lash_sansio/sansio/
mod.rs

1//! Sans-IO state machine for session turns.
2//!
3//! `TurnMachine` owns the generic effect engine. Protocol-specific behavior
4//! lives behind `ProtocolDriverHandle`, which returns declarative
5//! `DriverAction`s that the machine applies.
6
7use std::collections::{HashSet, VecDeque};
8use std::fmt::Debug;
9use std::sync::Arc;
10
11use serde::Serialize;
12use serde::de::DeserializeOwned;
13use serde_json::Value;
14
15use crate::llm::types::{
16    LlmAttachment, LlmOutputPart, LlmRequest, LlmResponse, LlmTerminalReason, LlmToolChoice,
17    LlmToolSpec, ProviderReplayMeta,
18};
19use crate::session_model::message::MessageOrigin;
20use crate::session_model::{
21    Message, MessageRole, MessageSequence, Part, PartKind, PruneState, SessionEvent,
22    SessionEventRecord, TokenUsage, TurnTerminationPolicyState, make_error_event,
23    reassign_part_ids, render_prompt,
24};
25use crate::{
26    CheckpointKind, ModelToolReturn, PluginMessage, ToolCallOutput, TurnOutcome, TurnStop,
27};
28
29// ─── Public types ───
30
31pub trait TurnProtocol: Send + Sync + 'static {
32    type Event: Clone + Serialize + DeserializeOwned + Debug + Send + Sync + 'static;
33    type Termination: Clone + Default + Debug + Send + Sync + 'static;
34    type DriverState: Clone + Default + Serialize + DeserializeOwned + Debug + Send + Sync + 'static;
35}
36
37#[derive(Clone, Debug, Serialize, serde::Deserialize)]
38pub struct UnitTurnProtocol;
39
40include!("sections/turn_protocol.rs");
41include!("sections/machine_state.rs");
42include!("sections/turn_machine.rs");
43include!("sections/helpers.rs");
44
45#[cfg(test)]
46mod tests;