Skip to main content

lash_core/
lib.rs

1pub mod attachments;
2pub mod chronological;
3pub mod direct;
4pub mod llm;
5pub mod model_info;
6pub mod monitor;
7pub mod plugin;
8mod plugin_stack;
9pub mod provider;
10pub mod runtime;
11pub mod runtime_controls;
12pub mod search;
13pub mod session;
14pub mod session_graph;
15pub mod session_model;
16pub mod standard_context_approach;
17pub mod store;
18#[cfg(any(test, feature = "testing"))]
19pub mod testing;
20pub mod tool_dispatch;
21mod tool_executor;
22mod tool_provider;
23pub mod tool_registry;
24mod tool_schema;
25mod trace;
26
27pub use lash_sansio::sansio;
28
29pub const VERSION: &str = env!("CARGO_PKG_VERSION");
30pub const SANSIO_VERSION: &str = lash_sansio::VERSION;
31
32// Re-exports
33pub use attachments::{
34    AttachmentStore, AttachmentStoreError, FileAttachmentStore, InMemoryAttachmentStore,
35    StoredAttachment,
36};
37pub use chronological::{
38    BorrowedChronologicalEntry, BorrowedChronologicalMessage, BorrowedChronologicalPayload,
39    ChronologicalEntry, ChronologicalPayload, ChronologicalProjection, visit_turn_view,
40};
41pub use direct::{
42    DirectJsonSchema, DirectLlmClient, DirectLlmError, DirectMessage, DirectOutputSpec, DirectPart,
43    DirectRequest, DirectRole,
44};
45pub use lash_sansio::llm::types::{LlmOutputPart, LlmRequest, LlmResponse, LlmTerminalReason};
46pub use lash_sansio::{
47    AcceptedInjectedTurnInput, AttachmentCreateMeta, AttachmentId, AttachmentMeta, AttachmentRef,
48    BaseRenderCache, CheckpointKind, CompactToolContract, EffectId, ErrorEnvelope, ExecResponse,
49    ExecutionMode, ImageMediaType, LlmCallError, MediaType, Message, MessageOrigin, MessageRole,
50    MessageSequence, ModeBuildInput, ModelToolReturn, ModelToolReturnPart, Part, PartKind,
51    PluginMessage, PluginSurfaceEvent, PreparedPrompt, PromptBuildInput, PromptBuiltin,
52    PromptContext, PromptContribution, PromptContributionGate, PromptContributionSet,
53    PromptFingerprint, PromptLayer, PromptPanel, PromptRequest, PromptResponse,
54    PromptSelectionMode, PromptSlot, PromptSlotLayer, PromptTemplate, PromptTemplateEntry,
55    PromptTemplateSection, PruneState, RenderedPrompt, ResolvedPromptLayer, Response,
56    RlmPrintImage, SchemaProjectionOverride, SessionEvent, TextProjectionMetadata, TokenUsage,
57    ToolActivation, ToolAvailability, ToolAvailabilityConfig, ToolCallOutcome, ToolCallOutput,
58    ToolCallRecord, ToolCallStatus, ToolCancellation, ToolContract, ToolControl, ToolDefinition,
59    ToolDiscoveryMetadata, ToolExecutionMode, ToolFailure, ToolFailureClass, ToolFailureSource,
60    ToolManifest, ToolOutputContract, ToolResult, ToolRetryDisposition, ToolRetryPolicy,
61    ToolSurface, ToolSurfaceBuildInput, ToolSurfaceEntry, ToolSurfaceOverride, ToolValue,
62    TurnFinish, TurnOutcome, TurnStop, append_assistant_text_part, build_prompt,
63    build_tool_surface, build_turn, default_execution_mode, default_prompt_template,
64    execution_mode_supported, head_tail_truncate, messages_are_prompt_resume_safe,
65    normalized_response_parts, prompt_template_fingerprint, prompt_text_fingerprint,
66    prompt_tool_names_fingerprint, reasoning_part, resolve_prompt_layers, shared_parts,
67    turn_limit_exhausted_message,
68};
69pub use standard_context_approach::{
70    ObservationalMemoryConfig, RollingHistoryConfig, StandardContextApproach,
71    StandardContextApproachKind,
72};
73pub use tool_registry::{
74    ReconfigureError, ToolRegistry, ToolSourceHandle, ToolState, ToolStateEntry,
75};
76#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
77pub struct ModeTurnOptions {
78    pub mode_id: ExecutionMode,
79    #[serde(default)]
80    pub payload: serde_json::Value,
81}
82
83impl Default for ModeTurnOptions {
84    fn default() -> Self {
85        Self::empty(ExecutionMode::standard())
86    }
87}
88
89impl ModeTurnOptions {
90    pub fn empty(mode_id: ExecutionMode) -> Self {
91        Self {
92            mode_id,
93            payload: serde_json::Value::Object(serde_json::Map::new()),
94        }
95    }
96
97    pub fn typed<T>(mode_id: ExecutionMode, value: T) -> Result<Self, serde_json::Error>
98    where
99        T: serde::Serialize,
100    {
101        Ok(Self {
102            mode_id,
103            payload: serde_json::to_value(value)?,
104        })
105    }
106
107    pub fn decode<T>(&self, expected_mode: &ExecutionMode) -> Result<Option<T>, serde_json::Error>
108    where
109        T: serde::de::DeserializeOwned,
110    {
111        if &self.mode_id != expected_mode {
112            return Ok(None);
113        }
114        serde_json::from_value(self.payload.clone()).map(Some)
115    }
116}
117
118#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
119pub struct HostModeProtocol;
120
121impl lash_sansio::ModeProtocol for HostModeProtocol {
122    type Event = crate::session_model::ModeEvent;
123    type Termination = ModeTurnOptions;
124    type DriverState = serde_json::Value;
125}
126
127pub type Effect = lash_sansio::Effect<HostModeProtocol>;
128pub type DriverAction = lash_sansio::DriverAction<HostModeProtocol>;
129pub type DriverContextView<'a> = lash_sansio::DriverContextView<'a, HostModeProtocol>;
130pub type ModeConfig = lash_sansio::ModeConfig<HostModeProtocol>;
131pub type ModePreamble = lash_sansio::ModePreamble<HostModeProtocol>;
132pub type ProjectorContext<'a> = lash_sansio::ProjectorContext<'a, HostModeProtocol>;
133pub type PreparedTurnMachine = lash_sansio::PreparedTurnMachine<HostModeProtocol>;
134pub type SansIoTurnInput = lash_sansio::SansIoTurnInput<HostModeProtocol>;
135pub type TurnMachine = lash_sansio::TurnMachine<HostModeProtocol>;
136pub type TurnMachineConfig = lash_sansio::TurnMachineConfig<HostModeProtocol>;
137#[cfg(feature = "otel-trace")]
138pub use lash_trace::otel::{OtelTraceOptions, OtelTraceSink};
139pub use lash_trace::{
140    JsonlTraceSink, TraceAttachment, TraceContentBlock, TraceContext, TraceError, TraceEvent,
141    TraceLevel, TraceLlmMessage, TraceLlmRequest, TraceLlmResponse, TracePromptComponent,
142    TraceProviderStreamEvent, TraceRecord, TraceRuntimeStreamEvent, TraceSink, TraceSinkError,
143    TraceTokenUsage, TraceToolSpec,
144};
145pub use llm::transport::{LlmTransportError, ProviderFailure, ProviderFailureKind};
146pub use model_info::{
147    CachedModelCatalog, FileModelCatalogStore, MemoryModelCatalogStore, ModelCatalog,
148    ModelCatalogSource, ModelCatalogStore, ModelInfo, ModelsDevHttpSource, ResolvedModelSpec,
149};
150pub use monitor::{
151    MAX_MONITOR_TIMEOUT_MS, MonitorArmOn, MonitorEvent, MonitorRunState, MonitorSnapshot,
152    MonitorSpec, MonitorStatus, MonitorUpdateBatch, MonitorWakePolicy,
153};
154pub use plugin::{
155    AckWakeArgs, AppendSessionNodesRequest, AppendSessionNodesResult, AssistantResponseHookContext,
156    AssistantResponseTransform, AssistantStreamHookContext, AssistantStreamTransform,
157    CheckpointHookContext, DirectCompletion, DirectLlmCompletion, HistoryError,
158    HistoryRegistrations, HistoryRewriteMetadata, HistoryRewriter, HistoryState,
159    ModeBeforeLlmCallContext, ModeExtras, ModeLlmCallAction, MonitorAckWakeOp, MonitorEmptyArgs,
160    MonitorRegisterSpecsOp, MonitorRegistrations, MonitorStartOp, MonitorStatusOp, MonitorStopOp,
161    MonitorTakeUpdatesOp, OwnedMonitorSpec, PersistentRuntimeServices, PluginAction,
162    PluginActionContext, PluginActionDef, PluginActionFailure, PluginActionInvokeError,
163    PluginActionKind, PluginDirective, PluginError, PluginFactory, PluginHost, PluginOwned,
164    PluginRegistrar, PluginRuntimeEvent, PluginRuntimeEventHook, PluginSession,
165    PluginSessionContext, PluginSessionSnapshot, PluginSnapshotArtifact, PluginSnapshotEntry,
166    PluginSnapshotMeta, PluginSpec, PluginSpecFactory, PromptHookContext, RegisterSpecsArgs,
167    RewriteContext, RewriteTrigger, RuntimeServices, SessionAppendNode,
168    SessionConfigChangedContext, SessionContextSurface, SessionCreateRequest, SessionHandle,
169    SessionParam, SessionPlugin, SessionPluginMode, SessionReadView, SessionRelation,
170    SessionSnapshot, SessionStartPoint, SessionStateChangedContext, SessionToolAccess,
171    SessionTurnHandle, SnapshotReader, SnapshotWriter, StandardCreateExtras, StartMonitorArgs,
172    StopMonitorArgs, SubagentSessionAuthority, ToolDiscoveryContext, ToolDiscoveryContribution,
173    ToolDiscoveryContributor, ToolDiscoveryToolContribution, ToolOutputBudgetConfig,
174    ToolOutputBudgetMode, ToolOutputBudgetPluginFactory, ToolResultProjectionContext,
175    ToolResultProjector, ToolSurfaceContribution, TurnContextTransform, TurnHookContext,
176    TurnResultHookContext, TurnResultSummary, TurnTransformContext, plugin_action_def,
177};
178pub use plugin_stack::PluginStack;
179pub use provider::{
180    AgentModelSelection, CacheRetention, LlmTimeouts, ProviderComponents, ProviderFactory,
181    ProviderHandle, ProviderModelPolicy, ProviderOptions, ProviderRegistry, ProviderSpec,
182    ProviderState, ProviderThinkingPolicy, ProviderTransport, RequestTimeout, StaticModelPolicy,
183    VariantRequestConfig, build_provider, provider_factory, register_provider_factory,
184};
185pub use runtime::{
186    AssembledTurn, AssistantOutput, BackgroundCancelPolicy, BackgroundClosePolicy,
187    BackgroundRuntimeHost, BackgroundTaskAttempt, BackgroundTaskEvent, BackgroundTaskFilter,
188    BackgroundTaskHost, BackgroundTaskId, BackgroundTaskKind, BackgroundTaskOutcome,
189    BackgroundTaskRecord, BackgroundTaskRegistration, BackgroundTaskScope, BackgroundTaskState,
190    CodeOutputRecord, EmbeddedRuntimeBuilder, EmbeddedRuntimeHost, EventSink, ExecutionSummary,
191    FollowedTurn, InputItem, LashRuntime, LocalBackgroundTaskCancel, LocalBackgroundTaskHost,
192    ModeSessionExtension, ModeSessionExtensionHandle, ModeTurnExtension, ModeTurnExtensionHandle,
193    NoopEventSink, NoopTurnActivitySink, OutputState, ParkedSession, PersistedSessionState,
194    PromptUsage, Residency, RuntimeCoreConfig, RuntimeEnvironment, RuntimeEnvironmentBuilder,
195    RuntimeError, RuntimeHandle, RuntimeObservation, SessionStateEnvelope,
196    SessionStoreCreateRequest, SessionStoreFactory, SessionUsageReport, TerminationPolicy,
197    TokenLedgerEntry, TurnActivity, TurnActivityId, TurnActivitySink, TurnContext, TurnEvent,
198    TurnInput, TurnIssue, UsageReportRow, UsageTotals, diff_token_ledger, diff_usage_reports,
199};
200pub use runtime_controls::{BuiltinMonitorToolPluginFactory, BuiltinTaskControlsPluginFactory};
201pub use schemars::JsonSchema;
202pub use session::{
203    ExecRequest, InjectedTurnInput, ModeExecutionContext, ModeToolBatchItem, ModeToolReply,
204    Session, SessionError, TurnInjectionBridge, TurnInputInjectionBridge,
205};
206pub use session_graph::{
207    PersistedSessionConfig, PersistedTurnState, SessionGraph, SessionMessageTreeNode,
208    SessionNodePayload, SessionNodeRecord,
209};
210pub use session_model::context::PreparedContext;
211pub use session_model::{
212    ConversationRecord, ModeEvent, SessionEventRecord, StateSnapshotEvent, ToolEvent,
213};
214pub use session_model::{SessionPolicy, SessionSpec};
215pub use store::{
216    BlobRef, GcReport, GraphCommitDelta, HydratedSessionCheckpoint, PersistedSessionRead,
217    RuntimeCommit, RuntimeCommitResult, RuntimePersistence, SessionCheckpoint, SessionHead,
218    SessionHeadMeta, SessionMeta, SessionPickerInfo, SessionReadScope, StoreError, VacuumReport,
219    load_persisted_session_state, load_persisted_session_state_active_path,
220    refresh_persisted_session_state,
221};
222pub use tool_provider::{
223    ProgressSender, SandboxMessage, ToolCall, ToolContext, ToolProvider, ToolSessionControl,
224    ToolSessionModel, ToolTaskControl,
225};