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, CompactionContext, ContextCompaction, ContextCompactor,
117        ContextError, PluginSpecBuilder, StaticPluginFactory, ToolCallHookContext,
118        ToolResultHookContext,
119    };
120    pub use lash_core::{
121        HostEvent, PluginError, PluginFactory, PluginHost, PluginMessage, PluginRegistrar,
122        PluginRuntimeEvent, PluginSession, PluginSessionContext, PluginSpec, PluginSpecFactory,
123        PromptHookContext, SessionPlugin, ToolSurfaceContribution, ToolSurfaceOverride,
124        TurnHookContext, TurnResultHookContext,
125    };
126    pub use lash_plugin_tool_output_budget::{
127        ToolOutputBudgetConfig, ToolOutputBudgetMode, ToolOutputBudgetPluginFactory,
128        tool_output_budget_stack as runtime_plugin_stack,
129    };
130}
131
132pub mod modes {
133    pub use crate::mode::{RlmSessionBuilderExt, RlmTurnBuilderExt};
134    pub use lash_protocol_rlm::{
135        LashlangAbilities, LashlangLanguageFeatures, LashlangSurface, NamedDataType,
136        ResourceCatalog, RlmProtocolPluginConfig, TypeExpr, TypeField, format_type_expr,
137    };
138    pub use lash_rlm_types::RlmFinalAnswerFormat;
139
140    pub use crate::mode::{ModeId, ModePreset};
141}
142
143pub mod messages {
144    pub use lash_core::MessageRole;
145}
146
147pub mod remote {
148    pub use lash_remote_protocol::*;
149}
150
151pub mod process {
152    pub use crate::control::ProcessControl;
153    pub use lash_core::{
154        ObservedProcess, ObservedProcessEvent, ObservedWorkItem, ProcessAwaitOutput,
155        ProcessCancelAbility, ProcessCancelAllRequest, ProcessCancelRequest, ProcessCancelSource,
156        ProcessCancelSummary, ProcessDefinitionSummary, ProcessEvent, ProcessEventAppendRequest,
157        ProcessEventAppendResult, ProcessEventType, ProcessExecutionContext, ProcessExternalRef,
158        ProcessHandleDescriptor, ProcessHandleGrant, ProcessHandleSummary, ProcessInput,
159        ProcessLease, ProcessLeaseCompletion, ProcessLifecycleStatus, ProcessListFilter,
160        ProcessListMode, ProcessOpScope, ProcessRecord, ProcessRegistration, ProcessRegistry,
161        ProcessRunHandle, ProcessRuntimeHost, ProcessScope, ProcessScopeId, ProcessService,
162        ProcessSessionDeleteReport, ProcessStartOptions, ProcessStartRequest, ProcessStatus,
163        ProcessStatusFilter, ProcessTerminalState, ProcessWake, ProcessWakeDedupeKey,
164        ProcessWakeDelivery, ProcessWakeSpec, ProcessWorkDriver, ProcessWorkObserver,
165        ProcessWorkPoke, ProcessWorkRunner, ProcessWorkSnapshot, lashlang_process_event_types,
166    };
167}
168
169pub mod durability {
170    pub use lash_core::{
171        DurableProcessWorker, DurableProcessWorkerConfig, EffectHost, InlineEffectHost, Residency,
172        RuntimeEnvironment, RuntimeHostConfig, TerminationPolicy,
173    };
174}
175
176pub mod runtime {
177    pub use crate::core::AdvancedLashCoreBuilder;
178    pub use lash_core::runtime::{
179        AssembledTurn, DirectCompletionClient, EffectScope, EmbeddedRuntimeHost, EventSink,
180        InlineRuntimeEffectController, LashRuntime, LlmAttachmentSpec, LlmRequestSpec,
181        NoopEventSink, NoopTurnActivitySink, ProcessCommand, ProcessEffectOutcome, QueuedWorkPoke,
182        QueuedWorkRunHandle, QueuedWorkRunOutcome, QueuedWorkRunRequest, QueuedWorkRunner,
183        RuntimeEffectCommand, RuntimeEffectController, RuntimeEffectControllerError,
184        RuntimeEffectEnvelope, RuntimeEffectKind, RuntimeEffectLocalExecutor, RuntimeEffectOutcome,
185        RuntimeEnvironmentBuilder, RuntimeError, RuntimeErrorCode, RuntimeHandle,
186        RuntimeInvocation, RuntimeObservation, RuntimeScope, RuntimeTurnPhase,
187        RuntimeTurnPhaseProbe, ScopedEffectController, SessionCommand, SessionCommandReceipt,
188        TurnContext,
189    };
190    pub use lash_core::{
191        PersistentRuntimeServices, PluginMessage, ProtocolSessionExtensionHandle,
192        ProtocolTurnOptions, SessionEvent, SessionHandle, SessionPolicy, SessionSnapshot,
193        TurnCause, TurnFinish, TurnOutcome, TurnStop, render_turn_causes_prompt,
194    };
195}
196
197pub mod prompt {
198    pub use lash_core::{
199        PromptBuiltin, PromptContribution, PromptContributionGate, PromptLayer, PromptSlot,
200        PromptTemplate, PromptTemplateEntry, PromptTemplateSection, default_prompt_template,
201    };
202}
203
204pub mod tracing {
205    pub use lash_core::{
206        JsonlTraceSink, TraceAttachment, TraceBranchSelection, TraceContentBlock, TraceError,
207        TraceEvent, TraceLabelMetadata, TraceLashlangChildExecution, TraceLashlangEdgeSelection,
208        TraceLashlangExecutionEvent, TraceLashlangExecutionIdentity, TraceLashlangGraph,
209        TraceLashlangGraphChildLink, TraceLashlangGraphEdge, TraceLashlangGraphNode,
210        TraceLashlangGraphStore, TraceLashlangMap, TraceLashlangMapEdge, TraceLashlangMapNode,
211        TraceLashlangNodeStatus, TraceLashlangStatus, TraceLlmMessage, TraceLlmRequest,
212        TraceLlmResponse, TracePromptComponent, TraceProviderStreamEvent, TraceRecord,
213        TraceRuntimeScope, TraceRuntimeStreamEvent, TraceRuntimeSubject, TraceSinkError,
214        TraceTokenUsage, TraceToolSpec,
215    };
216    pub use lash_trace::{StderrTraceSink, TeeTraceSink, TraceContext, TraceLevel, TraceSink};
217}
218
219/// Test helpers for embedders. Enable with `lash = { ..., features = ["testing"] }`
220/// to script model responses in integration tests without a live provider.
221#[cfg(any(test, feature = "testing"))]
222pub mod testing;
223
224pub mod provider {
225    pub use lash_core::provider::{
226        ProviderRateLimitPolicy, ProviderReliability, ProviderReliabilityBuilder,
227        ProviderRetryPolicy, ProviderTimeoutPolicy,
228    };
229    pub use lash_core::{
230        LlmTimeouts, Provider, ProviderComponents, ProviderFactory, ProviderHandle,
231        ProviderModelPolicy, ProviderOptions, ProviderSpec, ProviderThinkingPolicy, RequestTimeout,
232        StaticModelPolicy,
233    };
234}
235
236pub type ToolState = lash_core::ToolState;