lash-core 0.1.0-alpha.1

Sans-IO turn machine and runtime kernel for the lash agent runtime.
Documentation
pub mod attachments;
pub mod chronological;
pub mod direct;
pub mod llm;
pub mod model_info;
pub mod monitor;
pub mod plugin;
mod plugin_stack;
pub mod provider;
pub mod runtime;
pub mod runtime_controls;
pub mod search;
pub mod session;
pub mod session_graph;
pub mod session_model;
pub mod standard_context_approach;
pub mod store;
#[cfg(any(test, feature = "testing"))]
pub mod testing;
pub mod tool_dispatch;
mod tool_executor;
mod tool_provider;
pub mod tool_registry;
mod tool_schema;
mod trace;

pub use lash_sansio::sansio;

pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const SANSIO_VERSION: &str = lash_sansio::VERSION;

// Re-exports
pub use attachments::{
    AttachmentStore, AttachmentStoreError, FileAttachmentStore, InMemoryAttachmentStore,
    StoredAttachment,
};
pub use chronological::{
    BorrowedChronologicalEntry, BorrowedChronologicalMessage, BorrowedChronologicalPayload,
    ChronologicalEntry, ChronologicalPayload, ChronologicalProjection, visit_turn_view,
};
pub use direct::{
    DirectJsonSchema, DirectLlmClient, DirectLlmError, DirectMessage, DirectOutputSpec, DirectPart,
    DirectRequest, DirectRole,
};
pub use lash_sansio::llm::types::{LlmOutputPart, LlmRequest, LlmResponse, LlmTerminalReason};
pub use lash_sansio::{
    AcceptedInjectedTurnInput, AttachmentCreateMeta, AttachmentId, AttachmentMeta, AttachmentRef,
    BaseRenderCache, CheckpointKind, CompactToolContract, EffectId, ErrorEnvelope, ExecResponse,
    ExecutionMode, ImageMediaType, LlmCallError, MediaType, Message, MessageOrigin, MessageRole,
    MessageSequence, ModeBuildInput, ModelToolReturn, ModelToolReturnPart, Part, PartKind,
    PluginMessage, PluginSurfaceEvent, PreparedPrompt, PromptBuildInput, PromptBuiltin,
    PromptContext, PromptContribution, PromptContributionGate, PromptContributionSet,
    PromptFingerprint, PromptLayer, PromptPanel, PromptRequest, PromptResponse,
    PromptSelectionMode, PromptSlot, PromptSlotLayer, PromptTemplate, PromptTemplateEntry,
    PromptTemplateSection, PruneState, RenderedPrompt, ResolvedPromptLayer, Response,
    RlmPrintImage, SchemaProjectionOverride, SessionEvent, TextProjectionMetadata, TokenUsage,
    ToolActivation, ToolAvailability, ToolAvailabilityConfig, ToolCallOutcome, ToolCallOutput,
    ToolCallRecord, ToolCallStatus, ToolCancellation, ToolContract, ToolControl, ToolDefinition,
    ToolDiscoveryMetadata, ToolExecutionMode, ToolFailure, ToolFailureClass, ToolFailureSource,
    ToolManifest, ToolOutputContract, ToolResult, ToolRetryDisposition, ToolRetryPolicy,
    ToolSurface, ToolSurfaceBuildInput, ToolSurfaceEntry, ToolSurfaceOverride, ToolValue,
    TurnFinish, TurnOutcome, TurnStop, append_assistant_text_part, build_prompt,
    build_tool_surface, build_turn, default_execution_mode, default_prompt_template,
    execution_mode_supported, head_tail_truncate, messages_are_prompt_resume_safe,
    normalized_response_parts, prompt_template_fingerprint, prompt_text_fingerprint,
    prompt_tool_names_fingerprint, reasoning_part, resolve_prompt_layers, shared_parts,
    turn_limit_exhausted_message,
};
pub use standard_context_approach::{
    ObservationalMemoryConfig, RollingHistoryConfig, StandardContextApproach,
    StandardContextApproachKind,
};
pub use tool_registry::{
    ReconfigureError, ToolRegistry, ToolSourceHandle, ToolState, ToolStateEntry,
};
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct ModeTurnOptions {
    pub mode_id: ExecutionMode,
    #[serde(default)]
    pub payload: serde_json::Value,
}

impl Default for ModeTurnOptions {
    fn default() -> Self {
        Self::empty(ExecutionMode::standard())
    }
}

impl ModeTurnOptions {
    pub fn empty(mode_id: ExecutionMode) -> Self {
        Self {
            mode_id,
            payload: serde_json::Value::Object(serde_json::Map::new()),
        }
    }

    pub fn typed<T>(mode_id: ExecutionMode, value: T) -> Result<Self, serde_json::Error>
    where
        T: serde::Serialize,
    {
        Ok(Self {
            mode_id,
            payload: serde_json::to_value(value)?,
        })
    }

    pub fn decode<T>(&self, expected_mode: &ExecutionMode) -> Result<Option<T>, serde_json::Error>
    where
        T: serde::de::DeserializeOwned,
    {
        if &self.mode_id != expected_mode {
            return Ok(None);
        }
        serde_json::from_value(self.payload.clone()).map(Some)
    }
}

#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct HostModeProtocol;

impl lash_sansio::ModeProtocol for HostModeProtocol {
    type Event = crate::session_model::ModeEvent;
    type Termination = ModeTurnOptions;
    type DriverState = serde_json::Value;
}

pub type Effect = lash_sansio::Effect<HostModeProtocol>;
pub type DriverAction = lash_sansio::DriverAction<HostModeProtocol>;
pub type DriverContextView<'a> = lash_sansio::DriverContextView<'a, HostModeProtocol>;
pub type ModeConfig = lash_sansio::ModeConfig<HostModeProtocol>;
pub type ModePreamble = lash_sansio::ModePreamble<HostModeProtocol>;
pub type ProjectorContext<'a> = lash_sansio::ProjectorContext<'a, HostModeProtocol>;
pub type PreparedTurnMachine = lash_sansio::PreparedTurnMachine<HostModeProtocol>;
pub type SansIoTurnInput = lash_sansio::SansIoTurnInput<HostModeProtocol>;
pub type TurnMachine = lash_sansio::TurnMachine<HostModeProtocol>;
pub type TurnMachineConfig = lash_sansio::TurnMachineConfig<HostModeProtocol>;
#[cfg(feature = "otel-trace")]
pub use lash_trace::otel::{OtelTraceOptions, OtelTraceSink};
pub use lash_trace::{
    JsonlTraceSink, TraceAttachment, TraceContentBlock, TraceContext, TraceError, TraceEvent,
    TraceLevel, TraceLlmMessage, TraceLlmRequest, TraceLlmResponse, TracePromptComponent,
    TraceProviderStreamEvent, TraceRecord, TraceRuntimeStreamEvent, TraceSink, TraceSinkError,
    TraceTokenUsage, TraceToolSpec,
};
pub use llm::transport::{LlmTransportError, ProviderFailure, ProviderFailureKind};
pub use model_info::{
    CachedModelCatalog, FileModelCatalogStore, MemoryModelCatalogStore, ModelCatalog,
    ModelCatalogSource, ModelCatalogStore, ModelInfo, ModelsDevHttpSource, ResolvedModelSpec,
};
pub use monitor::{
    MAX_MONITOR_TIMEOUT_MS, MonitorArmOn, MonitorEvent, MonitorRunState, MonitorSnapshot,
    MonitorSpec, MonitorStatus, MonitorUpdateBatch, MonitorWakePolicy,
};
pub use plugin::{
    AckWakeArgs, AppendSessionNodesRequest, AppendSessionNodesResult, AssistantResponseHookContext,
    AssistantResponseTransform, AssistantStreamHookContext, AssistantStreamTransform,
    CheckpointHookContext, DirectCompletion, DirectLlmCompletion, HistoryError,
    HistoryRegistrations, HistoryRewriteMetadata, HistoryRewriter, HistoryState,
    ModeBeforeLlmCallContext, ModeExtras, ModeLlmCallAction, MonitorAckWakeOp, MonitorEmptyArgs,
    MonitorRegisterSpecsOp, MonitorRegistrations, MonitorStartOp, MonitorStatusOp, MonitorStopOp,
    MonitorTakeUpdatesOp, OwnedMonitorSpec, PersistentRuntimeServices, PluginAction,
    PluginActionContext, PluginActionDef, PluginActionFailure, PluginActionInvokeError,
    PluginActionKind, PluginDirective, PluginError, PluginFactory, PluginHost, PluginOwned,
    PluginRegistrar, PluginRuntimeEvent, PluginRuntimeEventHook, PluginSession,
    PluginSessionContext, PluginSessionSnapshot, PluginSnapshotArtifact, PluginSnapshotEntry,
    PluginSnapshotMeta, PluginSpec, PluginSpecFactory, PromptHookContext, RegisterSpecsArgs,
    RewriteContext, RewriteTrigger, RuntimeServices, SessionAppendNode,
    SessionConfigChangedContext, SessionContextSurface, SessionCreateRequest, SessionHandle,
    SessionParam, SessionPlugin, SessionPluginMode, SessionReadView, SessionRelation,
    SessionSnapshot, SessionStartPoint, SessionStateChangedContext, SessionToolAccess,
    SessionTurnHandle, SnapshotReader, SnapshotWriter, StandardCreateExtras, StartMonitorArgs,
    StopMonitorArgs, SubagentSessionAuthority, ToolDiscoveryContext, ToolDiscoveryContribution,
    ToolDiscoveryContributor, ToolDiscoveryToolContribution, ToolOutputBudgetConfig,
    ToolOutputBudgetMode, ToolOutputBudgetPluginFactory, ToolResultProjectionContext,
    ToolResultProjector, ToolSurfaceContribution, TurnContextTransform, TurnHookContext,
    TurnResultHookContext, TurnResultSummary, TurnTransformContext, plugin_action_def,
};
pub use plugin_stack::PluginStack;
pub use provider::{
    AgentModelSelection, CacheRetention, LlmTimeouts, ProviderComponents, ProviderFactory,
    ProviderHandle, ProviderModelPolicy, ProviderOptions, ProviderRegistry, ProviderSpec,
    ProviderState, ProviderThinkingPolicy, ProviderTransport, RequestTimeout, StaticModelPolicy,
    VariantRequestConfig, build_provider, provider_factory, register_provider_factory,
};
pub use runtime::{
    AssembledTurn, AssistantOutput, BackgroundCancelPolicy, BackgroundClosePolicy,
    BackgroundRuntimeHost, BackgroundTaskAttempt, BackgroundTaskEvent, BackgroundTaskFilter,
    BackgroundTaskHost, BackgroundTaskId, BackgroundTaskKind, BackgroundTaskOutcome,
    BackgroundTaskRecord, BackgroundTaskRegistration, BackgroundTaskScope, BackgroundTaskState,
    CodeOutputRecord, EmbeddedRuntimeBuilder, EmbeddedRuntimeHost, EventSink, ExecutionSummary,
    FollowedTurn, InputItem, LashRuntime, LocalBackgroundTaskCancel, LocalBackgroundTaskHost,
    ModeSessionExtension, ModeSessionExtensionHandle, ModeTurnExtension, ModeTurnExtensionHandle,
    NoopEventSink, NoopTurnActivitySink, OutputState, ParkedSession, PersistedSessionState,
    PromptUsage, Residency, RuntimeCoreConfig, RuntimeEnvironment, RuntimeEnvironmentBuilder,
    RuntimeError, RuntimeHandle, RuntimeObservation, SessionStateEnvelope,
    SessionStoreCreateRequest, SessionStoreFactory, SessionUsageReport, TerminationPolicy,
    TokenLedgerEntry, TurnActivity, TurnActivityId, TurnActivitySink, TurnContext, TurnEvent,
    TurnInput, TurnIssue, UsageReportRow, UsageTotals, diff_token_ledger, diff_usage_reports,
};
pub use runtime_controls::{BuiltinMonitorToolPluginFactory, BuiltinTaskControlsPluginFactory};
pub use schemars::JsonSchema;
pub use session::{
    ExecRequest, InjectedTurnInput, ModeExecutionContext, ModeToolBatchItem, ModeToolReply,
    Session, SessionError, TurnInjectionBridge, TurnInputInjectionBridge,
};
pub use session_graph::{
    PersistedSessionConfig, PersistedTurnState, SessionGraph, SessionMessageTreeNode,
    SessionNodePayload, SessionNodeRecord,
};
pub use session_model::context::PreparedContext;
pub use session_model::{
    ConversationRecord, ModeEvent, SessionEventRecord, StateSnapshotEvent, ToolEvent,
};
pub use session_model::{SessionPolicy, SessionSpec};
pub use store::{
    BlobRef, GcReport, GraphCommitDelta, HydratedSessionCheckpoint, PersistedSessionRead,
    RuntimeCommit, RuntimeCommitResult, RuntimePersistence, SessionCheckpoint, SessionHead,
    SessionHeadMeta, SessionMeta, SessionPickerInfo, SessionReadScope, StoreError, VacuumReport,
    load_persisted_session_state, load_persisted_session_state_active_path,
    refresh_persisted_session_state,
};
pub use tool_provider::{
    ProgressSender, SandboxMessage, ToolCall, ToolContext, ToolProvider, ToolSessionControl,
    ToolSessionModel, ToolTaskControl,
};