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