Skip to main content

lash/
lib.rs

1//! App-facing embedding facade for Lash.
2//!
3//! `lash` is intentionally a small layer above the lower-level
4//! `lash-core` runtime crate. Host applications own providers, persistence,
5//! app state, HTTP protocols, auth, and frontend streaming; this crate
6//! owns only the ergonomic core/session/turn API.
7
8pub mod control;
9mod core;
10mod error;
11mod mode;
12mod plugin_binding;
13mod prompt_layer;
14mod session;
15mod support;
16#[cfg(test)]
17mod tests;
18pub mod turn;
19pub mod usage;
20
21pub use crate::control::{
22    AdvancedToolsControl, HostEventsControl, PluginActions, SessionCommandsControl, ToolsControl,
23    TriggersControl,
24};
25pub use crate::core::{LashCore, LashCoreBuilder, SessionDeleteReport};
26pub use crate::error::{EmbedError, Result};
27pub use crate::mode::{ModeId, ModePreset};
28pub use crate::plugin_binding::PluginBinding;
29pub use crate::prompt_layer::PromptLayerSink;
30pub use crate::session::{
31    LashSession, ObservableSession, QueueInputBuilder, SessionBuilder, SessionConfigPatch,
32};
33pub use crate::turn::{
34    AdvancedTurn, QueuedTurnBuilder, TurnActivityFanout, TurnBuilder, TurnOutput, TurnResult,
35    TurnStream, message_role, message_text,
36};
37pub use lash_core::{
38    HostEvent, HostEventEmitReport, HostEventOccurrenceRequest, InputItem, ModelLimits, ModelSpec,
39    PluginStack, SessionCommand, SessionCommandReceipt, SessionCursor, SessionObservation,
40    SessionObservationEvent, SessionObservationEventPayload, SessionObservationSubscription,
41    SessionProcessEventKind, SessionQueueEventKind, SessionResume, SessionRevision, SessionSpec,
42    TriggerRegistration, TriggerSourceType, TriggerSubscriptionFilter, TriggerTargetSummary,
43    TurnActivity, TurnActivityId, TurnActivitySink, TurnEvent, TurnInput,
44    empty_host_event_source_key, impl_unsupported_queued_work_methods,
45};
46
47pub mod prelude {
48    pub use crate::{
49        AdvancedToolsControl, EmbedError, HostEvent, HostEventEmitReport,
50        HostEventOccurrenceRequest, HostEventsControl, InputItem, LashCore, LashCoreBuilder,
51        LashSession, ModeId, ModePreset, ModelSpec, ObservableSession, PluginActions,
52        PluginBinding, PluginStack, PromptLayerSink, QueuedTurnBuilder, Result, SessionBuilder,
53        SessionCommand, SessionCommandReceipt, SessionCommandsControl, SessionCursor,
54        SessionObservation, SessionObservationEvent, SessionObservationEventPayload,
55        SessionObservationSubscription, SessionProcessEventKind, SessionQueueEventKind,
56        SessionResume, SessionRevision, SessionSpec, ToolsControl, TriggerRegistration,
57        TriggerSourceType, TriggerSubscriptionFilter, TriggerTargetSummary, TriggersControl,
58        TurnActivity, TurnBuilder, TurnEvent, TurnInput, TurnOutput, TurnResult, TurnStream,
59        empty_host_event_source_key,
60    };
61    pub use lash_core::TurnActivitySink;
62}
63
64pub mod tools {
65    pub use crate::ToolState;
66    pub use lash_core::{
67        PreparedToolCall, ToolActivation, ToolAgentSurface, ToolArgumentProjectionPolicy,
68        ToolAvailability, ToolAvailabilityConfig, ToolCall, ToolCallOutput, ToolCallRecord,
69        ToolContext, ToolContract, ToolDefinition, ToolHostEventControl, ToolManifest,
70        ToolOutputContract, ToolPrepareCall, ToolPrepareContext, ToolProvider, ToolResult,
71        ToolScheduling, ToolSourceHandle,
72    };
73    /// Author a fixed-tool provider without hand-rolling `tool_manifests` /
74    /// `resolve_contract`: supply the [`ToolDefinition`]s once and an
75    /// [`StaticToolExecute`] for behavior.
76    pub use lash_tool_support::{StaticToolExecute, StaticToolProvider};
77}
78
79pub mod direct {
80    pub use lash_core::llm::types::{
81        LlmAttachment, LlmEventSender, LlmOutputPart, LlmTerminalReason, LlmUsage,
82    };
83    pub use lash_core::{
84        DirectCompletion, DirectJsonSchema, DirectLlmClient, DirectLlmCompletion, DirectLlmError,
85        DirectMessage, DirectOutputSpec, DirectPart, DirectRequest, DirectRole, LlmResponse,
86        TokenUsage,
87    };
88}
89
90pub mod persistence {
91    pub use lash_core::runtime::{
92        DeliveryPolicy, InMemorySessionStore, InMemorySessionStoreFactory, MergeKey,
93        QueuedWorkBatch, QueuedWorkBatchDraft, QueuedWorkClaim, QueuedWorkClaimBoundary,
94        QueuedWorkCompletion, QueuedWorkItem, QueuedWorkPayload, RuntimeSessionState,
95        SessionCommand, SessionCommandReceipt, SessionStoreCreateRequest, SessionStoreFactory,
96        SlotPolicy,
97    };
98    pub use lash_core::store::{
99        GraphCommitDelta, HydratedSessionCheckpoint, PersistedSessionRead, RuntimeCommit,
100        RuntimeCommitResult, RuntimeTurnCommitStamp, SessionCheckpoint, SessionHead,
101        SessionHeadMeta, load_persisted_session_state, load_persisted_session_state_active_path,
102    };
103    pub use lash_core::{AttachmentStore, InMemoryAttachmentStore};
104    pub use lash_core::{
105        BlobRef, GcReport, PersistedSessionConfig, PersistedTurnState, ProtocolEvent,
106        RuntimePersistence, SessionEventRecord, SessionGraph, SessionMeta, SessionNodeRecord,
107        SessionReadScope, SessionReadView, SessionRelation, SessionSnapshot, StoreError,
108        TokenLedgerEntry, VacuumReport,
109    };
110    pub use lash_core::{InMemoryLashlangArtifactStore, LashlangArtifactStore};
111    pub use lash_local_store::FileAttachmentStore;
112}
113
114pub mod plugins {
115    pub use crate::plugin_binding::PluginBinding;
116    pub use lash_core::PluginDirective;
117    pub use lash_core::plugin::{
118        AfterToolCallHook, AfterTurnHook, AssistantResponseHook, AssistantResponseHookContext,
119        AssistantResponseTransform, AssistantStreamHook, AssistantStreamHookContext,
120        AssistantStreamTransform, BeforeToolCallHook, BeforeTurnHook, CheckpointHook,
121        CheckpointHookContext, CompactionContext, ContextCompaction, ContextCompactor,
122        ContextError, PluginSpecBuilder, StaticPluginFactory, ToolCallHookContext,
123        ToolResultHookContext,
124    };
125    pub use lash_core::{
126        HostEvent, PluginError, PluginFactory, PluginHost, PluginMessage, PluginRegistrar,
127        PluginRuntimeEvent, PluginSession, PluginSessionContext, PluginSpec, PluginSpecFactory,
128        PromptHookContext, SessionPlugin, ToolSurfaceContribution, ToolSurfaceOverride,
129        TurnHookContext, TurnResultHookContext,
130    };
131    pub use lash_plugin_tool_output_budget::{
132        ToolOutputBudgetConfig, ToolOutputBudgetMode, ToolOutputBudgetPluginFactory,
133        tool_output_budget_stack as runtime_plugin_stack,
134    };
135}
136
137pub mod modes {
138    pub use crate::mode::{RlmSessionBuilderExt, RlmTurnBuilderExt};
139    pub use lash_protocol_rlm::{
140        LashlangAbilities, LashlangLanguageFeatures, LashlangSurface, NamedDataType,
141        ResourceCatalog, RlmProtocolPluginConfig, TypeExpr, TypeField, format_type_expr,
142    };
143    pub use lash_rlm_types::RlmFinalAnswerFormat;
144
145    pub use crate::mode::{ModeId, ModePreset};
146}
147
148pub mod messages {
149    pub use lash_core::MessageRole;
150}
151
152pub mod remote {
153    pub use lash_remote_protocol::*;
154}
155
156pub mod process {
157    pub use crate::control::ProcessControl;
158    pub use lash_core::{
159        ObservedProcess, ObservedProcessEvent, ObservedWorkItem, ProcessAwaitOutput,
160        ProcessCancelAbility, ProcessCancelAllRequest, ProcessCancelRequest, ProcessCancelSource,
161        ProcessCancelSummary, ProcessDefinitionSummary, ProcessEvent, ProcessEventAppendRequest,
162        ProcessEventAppendResult, ProcessEventType, ProcessExecutionContext, ProcessExternalRef,
163        ProcessHandleDescriptor, ProcessHandleGrant, ProcessHandleSummary, ProcessInput,
164        ProcessLease, ProcessLeaseCompletion, ProcessLifecycleStatus, ProcessListFilter,
165        ProcessListMode, ProcessOpScope, ProcessRecord, ProcessRegistration, ProcessRegistry,
166        ProcessRunHandle, ProcessRuntimeHost, ProcessScope, ProcessScopeId, ProcessService,
167        ProcessSessionDeleteReport, ProcessStartOptions, ProcessStartRequest, ProcessStatus,
168        ProcessStatusFilter, ProcessTerminalState, ProcessWake, ProcessWakeDedupeKey,
169        ProcessWakeDelivery, ProcessWakeSpec, ProcessWorkDriver, ProcessWorkObserver,
170        ProcessWorkPoke, ProcessWorkRunner, ProcessWorkSnapshot, lashlang_process_event_types,
171    };
172}
173
174pub mod durability {
175    pub use lash_core::{
176        DurableProcessWorker, DurableProcessWorkerConfig, EffectHost, InlineEffectHost, Residency,
177        RuntimeEnvironment, RuntimeHostConfig, TerminationPolicy,
178    };
179}
180
181pub mod runtime {
182    pub use crate::core::AdvancedLashCoreBuilder;
183    pub use lash_core::runtime::{
184        AssembledTurn, DirectCompletionClient, EffectScope, EmbeddedRuntimeHost, EventSink,
185        InlineRuntimeEffectController, LashRuntime, LlmAttachmentSpec, LlmRequestSpec,
186        NoopEventSink, NoopTurnActivitySink, ProcessCommand, ProcessEffectOutcome, QueuedWorkPoke,
187        QueuedWorkRunHandle, QueuedWorkRunOutcome, QueuedWorkRunRequest, QueuedWorkRunner,
188        RuntimeEffectCommand, RuntimeEffectController, RuntimeEffectControllerError,
189        RuntimeEffectEnvelope, RuntimeEffectKind, RuntimeEffectLocalExecutor, RuntimeEffectOutcome,
190        RuntimeEnvironmentBuilder, RuntimeError, RuntimeErrorCode, RuntimeHandle,
191        RuntimeInvocation, RuntimeObservation, RuntimeScope, RuntimeTurnPhase,
192        RuntimeTurnPhaseProbe, ScopedEffectController, SessionCommand, SessionCommandReceipt,
193        SessionCursor, SessionObservation, SessionObservationEvent, SessionObservationEventPayload,
194        SessionObservationSubscription, SessionResume, SessionRevision, TurnContext,
195    };
196    pub use lash_core::{
197        PersistentRuntimeServices, PluginMessage, ProtocolSessionExtensionHandle,
198        ProtocolTurnOptions, SessionEvent, SessionHandle, SessionPolicy, SessionSnapshot,
199        TurnCause, TurnFinish, TurnOutcome, TurnStop, render_turn_causes_prompt,
200    };
201}
202
203pub mod prompt {
204    pub use lash_core::{
205        PromptBuiltin, PromptContribution, PromptContributionGate, PromptLayer, PromptSlot,
206        PromptTemplate, PromptTemplateEntry, PromptTemplateSection, default_prompt_template,
207    };
208}
209
210pub mod tracing {
211    pub use lash_core::{
212        JsonlTraceSink, TraceAttachment, TraceBranchSelection, TraceContentBlock, TraceError,
213        TraceEvent, TraceLabelMetadata, TraceLashlangChildExecution, TraceLashlangEdgeSelection,
214        TraceLashlangExecutionEvent, TraceLashlangExecutionIdentity, TraceLashlangGraph,
215        TraceLashlangGraphChildLink, TraceLashlangGraphEdge, TraceLashlangGraphNode,
216        TraceLashlangGraphStore, TraceLashlangMap, TraceLashlangMapEdge, TraceLashlangMapNode,
217        TraceLashlangNodeStatus, TraceLashlangStatus, TraceLlmMessage, TraceLlmRequest,
218        TraceLlmResponse, TracePromptComponent, TraceProviderStreamEvent, TraceRecord,
219        TraceRuntimeScope, TraceRuntimeStreamEvent, TraceRuntimeSubject, TraceSinkError,
220        TraceTokenUsage, TraceToolSpec,
221    };
222    pub use lash_trace::{StderrTraceSink, TeeTraceSink, TraceContext, TraceLevel, TraceSink};
223}
224
225/// Test helpers for embedders. Enable with `lash = { ..., features = ["testing"] }`
226/// to script model responses in integration tests without a live provider.
227#[cfg(any(test, feature = "testing"))]
228pub mod testing;
229
230pub mod provider {
231    pub use lash_core::provider::{
232        ProviderRateLimitPolicy, ProviderReliability, ProviderReliabilityBuilder,
233        ProviderRetryPolicy, ProviderTimeoutPolicy,
234    };
235    pub use lash_core::{
236        LlmTimeouts, Provider, ProviderComponents, ProviderFactory, ProviderHandle,
237        ProviderModelPolicy, ProviderOptions, ProviderSpec, ProviderThinkingPolicy, RequestTimeout,
238        StaticModelPolicy,
239    };
240}
241
242pub type ToolState = lash_core::ToolState;