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