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//!
8//! Every public name has exactly one home. The crate root carries the daily
9//! core/session/turn path; each domain module ([`tools`], [`persistence`],
10//! [`plugins`], [`observe`], [`triggers`], ...) carries its own
11//! vocabulary. [`prelude`] is the curated daily-use subset of that root.
12
13pub mod admin;
14mod core;
15mod error;
16mod plugin_binding;
17pub(crate) mod process_admin;
18mod prompt_layer;
19#[cfg(feature = "rlm")]
20pub mod rlm;
21pub mod scenario_contracts;
22mod session;
23mod support;
24#[cfg(all(test, feature = "rlm"))]
25mod tests;
26pub mod turn;
27pub mod usage;
28
29pub use crate::admin::{
30    AdvancedToolAdmin, Completions, CoreTriggerAdmin, PluginOperations, SessionCommandAdmin,
31    SessionTriggerAdmin, ToolAdmin,
32};
33pub use crate::core::{LashCore, LashCoreBuilder, SessionDeleteReport};
34pub use crate::error::{EmbedError, Result};
35pub use crate::plugin_binding::PluginBinding;
36pub use crate::prompt_layer::PromptLayerSink;
37pub use crate::session::{
38    EnqueueTurnBuilder, LashSession, ObservableSession, ParkedSession, SessionBuilder,
39    SessionConfigPatch,
40};
41pub use crate::turn::{
42    QueuedTurnBuilder, TurnActivityFanout, TurnBuilder, TurnOutput, TurnResult, TurnStream,
43    message_role, message_text,
44};
45pub use lash_core::{
46    AwaitEventKey, AwaitEventWaitIdentity, DurabilityTier, ExecutionSummary,
47    ExternalCompletionError, InputItem, LlmCallRecord, ModelLimits, ModelSpec, PendingTurnInput,
48    PendingTurnInputCancelOutcome, PendingTurnInputCancelResult, PendingTurnInputCancelTarget,
49    PendingTurnInputSuffixCancelOutcome, PluginStack, Resolution, ResolveOutcome, SessionCommand,
50    SessionCommandReceipt, SessionCreateRequest, SessionSpec, SessionStartPoint, TurnActivity,
51    TurnActivityId, TurnActivitySink, TurnAddress, TurnAttach, TurnCancelOriginHint,
52    TurnCancelOutcome, TurnCancelReceipt, TurnCancelRequest, TurnCancellationEvidence, TurnCause,
53    TurnEvent, TurnFinish, TurnInput, TurnOutcome, TurnStop, TurnTerminal, TurnWorkDriver,
54};
55/// Cooperative cancellation handle accepted by
56/// [`TurnBuilder::cancel`](crate::TurnBuilder::cancel); re-exported so
57/// embedders cancel turns without depending on `tokio-util` themselves.
58pub use tokio_util::sync::CancellationToken;
59
60/// `use lash::prelude::*;` brings in the daily core/session/turn vocabulary
61/// without the lower-level integration types or domain modules also exposed
62/// from the crate root.
63pub mod prelude {
64    pub use crate::{
65        AdvancedToolAdmin, CoreTriggerAdmin, EmbedError, EnqueueTurnBuilder, ExecutionSummary,
66        InputItem, LashCore, LashCoreBuilder, LashSession, ModelLimits, ModelSpec,
67        ObservableSession, ParkedSession, PendingTurnInputCancelOutcome, PluginBinding,
68        PluginOperations, PluginStack, PromptLayerSink, QueuedTurnBuilder, Result, SessionBuilder,
69        SessionCommand, SessionCommandAdmin, SessionCommandReceipt, SessionConfigPatch,
70        SessionCreateRequest, SessionDeleteReport, SessionSpec, SessionStartPoint,
71        SessionTriggerAdmin, ToolAdmin, TurnActivity, TurnActivityFanout, TurnActivityId,
72        TurnActivitySink, TurnBuilder, TurnCause, TurnEvent, TurnFinish, TurnInput, TurnOutcome,
73        TurnOutput, TurnResult, TurnStop, TurnStream, message_role, message_text,
74    };
75}
76
77/// Session observation: cursors, resumable event streams, and live replay
78/// recovery for host frontends. Entry point: [`LashSession::observe`] /
79/// [`ObservableSession`].
80pub mod observe {
81    pub use crate::session::{
82        RemoteSessionObservationEventStream, RemoteSessionObservationStream,
83        RemoteSessionObservationStreamItem, RemoteSessionObservationSubscription,
84        SessionObservationStream, SessionObservationStreamItem,
85    };
86    pub use lash_core::{
87        InMemoryLiveReplayStore, InMemoryLiveReplayStoreConfig, LiveReplayGap, LiveReplayGapReason,
88        LiveReplayStore, SessionCursor, SessionObservation, SessionObservationEvent,
89        SessionObservationEventPayload, SessionObservationSubscription, SessionProcessEventKind,
90        SessionQueueEventKind, SessionResume, SessionRevision,
91    };
92}
93
94/// Triggers and subscriptions: declaring event sources, emitting occurrences,
95/// and inspecting trigger subscriptions. Entry points:
96/// [`LashCore::triggers`] and [`LashSession::triggers`].
97pub mod triggers {
98    pub use lash_core::{
99        LashSchema, TriggerCommand, TriggerCommandOutcome, TriggerDeliveryEmitOutcome,
100        TriggerDeliveryEmitReport, TriggerDeliveryReservation, TriggerDeliveryReservationStatus,
101        TriggerEffectResult, TriggerEmitReport, TriggerEvent, TriggerEventType,
102        TriggerMutationDisposition, TriggerMutationReceipt, TriggerOccurrenceFilter,
103        TriggerOccurrenceRecord, TriggerOccurrenceRequest, TriggerOperationError,
104        TriggerOwnerScope, TriggerRegistration, TriggerStore, TriggerSubscriptionDraft,
105        TriggerSubscriptionFilter, TriggerSubscriptionRecord, TriggerTargetSummary,
106        empty_trigger_source_key,
107    };
108}
109
110pub mod tools {
111    pub use lash_core::{
112        CancelHint, PendingCompletion, PreparedToolCall, TimeoutBehavior, ToolActivation,
113        ToolArgumentProjectionPolicy, ToolCall, ToolCallOutput, ToolCallRecord, ToolContext,
114        ToolContract, ToolDefinition, ToolExecutionGrant, ToolFailureClass, ToolManifest,
115        ToolOutputContract, ToolPrepareCall, ToolPrepareContext, ToolProvider, ToolResult,
116        ToolSourceHandle, ToolTriggerClient,
117    };
118    pub use lash_core::{
119        PLUGIN_TOOL_SOURCE_ID, ToolId, ToolRestoreReport, ToolState, ToolStateEntry,
120    };
121    #[cfg(feature = "rlm")]
122    pub use lash_lashlang_runtime::{
123        CataloguePreviewEntry, CataloguePreviewOptions, DEFAULT_CATALOGUE_PREVIEW_CALL_NAME_LIMIT,
124        DEFAULT_CATALOGUE_PREVIEW_MODULE_LIMIT, LASHLANG_TOOL_BINDING_KEY, LashlangToolBinding,
125        RemoteToolGrantLashlangExt, ToolDefinitionLashlangExt, ToolManifestLashlangExt,
126        catalogue_preview_contribution, catalogue_preview_contribution_for_entries,
127        catalogue_preview_contribution_for_entries_with_options,
128        catalogue_preview_contribution_for_manifests, catalogue_preview_contribution_with_options,
129        catalogue_preview_entries_from_catalog_records, catalogue_preview_entries_from_manifests,
130        catalogue_preview_entry_from_catalog_record, catalogue_preview_entry_from_manifest,
131    };
132    #[cfg(feature = "rlm")]
133    pub use lash_lashlang_runtime::{
134        DeferredResolutionLinkKey, DeferredResolutionRecord, DeferredToolResolver,
135        Resolution as DeferredToolResolution, SharedDeferredToolResolver,
136        ToolGrant as DeferredToolGrant,
137    };
138    /// Author a fixed-tool provider without hand-rolling `tool_manifests` /
139    /// `resolve_contract`: supply the [`ToolDefinition`]s once and an
140    /// [`StaticToolExecute`] for behavior.
141    pub use lash_tool_support::{StaticToolExecute, StaticToolProvider};
142}
143
144pub mod direct {
145    pub use lash_core::llm::types::{
146        AttachmentSource, LlmEventSender, LlmOutputPart, LlmStreamEvent, LlmTerminalReason,
147        LlmUsage, ProviderFileScope,
148    };
149    pub use lash_core::{
150        DirectCompletion, DirectJsonSchema, DirectLlmClient, DirectLlmCompletion, DirectLlmError,
151        DirectLlmResult, DirectMessage, DirectOutputSpec, DirectPart, DirectRequest, DirectRole,
152    };
153}
154
155pub mod persistence {
156    pub use lash_core::CheckpointKind;
157    pub use lash_core::FileAttachmentStore;
158    pub use lash_core::runtime::{
159        DeliveryPolicy, InMemorySessionStore, InMemorySessionStoreFactory, MergeKey,
160        PendingTurnInputClaimDiagnostics, PendingTurnInputDraft, QueuedWorkBatch,
161        QueuedWorkBatchDraft, QueuedWorkClaim, QueuedWorkClaimBoundary, QueuedWorkClass,
162        QueuedWorkCompletion, QueuedWorkItem, QueuedWorkPayload, RuntimeSessionState,
163        SessionStoreCreateRequest, SessionStoreFactory, SlotPolicy, TurnInputCheckpointBoundary,
164        TurnInputClaim, TurnInputCompletion, TurnInputIngress, TurnInputState,
165    };
166    pub use lash_core::store::queued_work;
167    pub use lash_core::store::{
168        GraphCommitDelta, HydratedSessionCheckpoint, PersistedSessionRead, RuntimeCommit,
169        RuntimeCommitResult, RuntimeTurnCommitStamp, SessionCheckpoint, SessionHead,
170        SessionHeadMeta, load_persisted_session_state, load_persisted_session_state_active_path,
171    };
172    pub use lash_core::{
173        AttachmentReclamationReport, AttachmentRootSet, AttachmentStore, InMemoryAttachmentStore,
174        InMemoryProcessExecutionEnvStore, ProcessExecutionEnvStore, SessionAttachmentStore,
175        StoredBlobRef, reclaim_unreferenced_attachments,
176    };
177    pub use lash_core::{
178        BlobRef, GcReport, LeaseOwnerIdentity, LeaseOwnerLiveness, PersistedSessionConfig,
179        PersistedTurnState, ProtocolEvent, QueuedWorkStore, RuntimePersistence, SessionCommitStore,
180        SessionExecutionLease, SessionExecutionLeaseClaimOutcome, SessionExecutionLeaseCompletion,
181        SessionExecutionLeaseFence, SessionExecutionLeaseStore, SessionGraph, SessionHistoryRecord,
182        SessionMeta, SessionNodeRecord, SessionReadScope, SessionReadView, SessionRelation,
183        StoreError, StoreMaintenance, TurnInputStore, VacuumReport,
184    };
185    #[cfg(feature = "rlm")]
186    pub use lash_lashlang_runtime::{InMemoryLashlangArtifactStore, LashlangArtifactStore};
187}
188
189pub mod plugins {
190    pub use lash_core::PluginDirective;
191    pub use lash_core::PluginOptions;
192    pub use lash_core::plugin::{
193        AfterToolCallHook, AfterTurnHook, AssistantResponseHook, AssistantResponseHookContext,
194        AssistantResponseTransform, AssistantStreamHook, AssistantStreamHookContext,
195        AssistantStreamTransform, BeforeToolCallHook, BeforeTurnHook, CheckpointHook,
196        CheckpointHookContext, CompactionContext, ContextCompaction, ContextCompactor,
197        ContextError, PluginExtensionContribution, PluginSpecBuilder, StaticPluginFactory,
198        ToolCallHookContext, ToolResultHookContext,
199    };
200    pub use lash_core::{
201        PluginError, PluginFactory, PluginHost, PluginMessage, PluginRegistrar, PluginRuntimeEvent,
202        PluginSession, PluginSessionContext, PluginSpec, PluginSpecFactory, PromptHookContext,
203        SessionPlugin, ToolCatalogContribution, TurnHookContext, TurnResultHookContext,
204    };
205    pub use lash_plugin_tool_output_budget::{
206        ToolOutputBudgetConfig, ToolOutputBudgetMode, ToolOutputBudgetPluginFactory,
207        tool_output_budget_stack as runtime_plugin_stack,
208    };
209}
210
211pub mod messages {
212    pub use lash_core::{Message, MessageRole};
213}
214
215/// Wire-format DTOs for driving lash across a process boundary, sub-namespaced
216/// by protocol domain. Only the cross-cutting handshake
217/// ([`REMOTE_PROTOCOL_VERSION`](remote::REMOTE_PROTOCOL_VERSION),
218/// [`ensure_protocol_version`](remote::ensure_protocol_version)) and the
219/// protocol error type live at this root; everything else has exactly one
220/// home in a domain sub-namespace.
221pub mod remote {
222    pub use lash_remote_protocol::{
223        REMOTE_PROTOCOL_VERSION, RemoteProtocolError, ensure_protocol_version,
224    };
225
226    /// LLM request/response envelopes: messages, attachments, tool specs,
227    /// output specs, and provider metadata.
228    pub mod llm {
229        pub use lash_remote_protocol::llm::{
230            RemoteAttachmentRef, RemoteAttachmentSource, RemoteAttachmentTypeMetadata,
231            RemoteDiagnostic, RemoteExecutionEvidence, RemoteGenerationOptions,
232            RemoteLlmContentBlock, RemoteLlmMessage, RemoteLlmOutputPart, RemoteLlmOutputSpec,
233            RemoteLlmRequest, RemoteLlmRequestScope, RemoteLlmResponse, RemoteLlmRole,
234            RemoteLlmTerminalReason, RemoteLlmToolChoice, RemoteLlmToolSpec, RemoteModelCapability,
235            RemoteModelIntent, RemoteProviderFailureKind, RemoteProviderFileScope,
236            RemoteProviderMetadata, RemoteProviderReasoningReplay, RemoteProviderReplayMeta,
237            RemoteReasoningCapability, RemoteReasoningDisableEncoding, RemoteReasoningEncoding,
238            RemoteReasoningSelection, RemoteResponseTextMeta, RemoteSchemaProjectionOverride,
239        };
240    }
241
242    /// Session observation: cursors, resumable observation events, and live
243    /// replay gaps.
244    pub mod observations {
245        pub use lash_remote_protocol::observations::{
246            RemoteLiveReplayGap, RemoteLiveReplayGapReason, RemoteSessionCursor,
247            RemoteSessionObservation, RemoteSessionObservationEvent,
248            RemoteSessionObservationEventPayload, RemoteSessionProcessEventKind,
249            RemoteSessionQueueEventKind,
250        };
251    }
252
253    /// Process lifecycle envelopes: start/cancel/signal/await/list requests
254    /// and results, process records, event semantics, and execution
255    /// environments.
256    pub mod processes {
257        pub use lash_remote_protocol::processes::{
258            RemoteAbandonEvidence, RemoteAbandonRequest, RemoteAbandonWriter,
259            RemoteObservedProcess, RemoteObservedProcessEvent, RemotePersistProcessEnvRequest,
260            RemotePersistProcessEnvResult, RemoteProcessAwaitOutput, RemoteProcessAwaitRequest,
261            RemoteProcessAwaitResult, RemoteProcessCancelRequest, RemoteProcessCancelResult,
262            RemoteProcessDefinitionIdentity, RemoteProcessEvent, RemoteProcessEventSemantics,
263            RemoteProcessEventSemanticsSpec, RemoteProcessEventType, RemoteProcessEventsRequest,
264            RemoteProcessEventsResponse, RemoteProcessExecutionEnvRef,
265            RemoteProcessExecutionEnvSpec, RemoteProcessExecutionPolicy, RemoteProcessExternalRef,
266            RemoteProcessHandleDescriptor, RemoteProcessInput, RemoteProcessLifecycleStatus,
267            RemoteProcessListFilter, RemoteProcessListResponse, RemoteProcessModelLimits,
268            RemoteProcessModelSpec, RemoteProcessOriginator, RemoteProcessPluginOptions,
269            RemoteProcessProvenance, RemoteProcessSignalRequest, RemoteProcessSignalResult,
270            RemoteProcessStartGrant, RemoteProcessStartRequest, RemoteProcessStartResult,
271            RemoteProcessStarted, RemoteProcessStatus, RemoteProcessStatusFilter,
272            RemoteProcessSummary, RemoteProcessTerminalSemantics, RemoteProcessTerminalSpec,
273            RemoteProcessTerminalState, RemoteProcessValueSelector, RemoteProcessWaitKind,
274            RemoteProcessWaitState, RemoteProcessWake, RemoteProcessWakeDedupeKey,
275            RemoteProcessWakeSpec, RemoteProcessWorkItem, RemoteProcessWorkSnapshot,
276            RemoteRecoveryDisposition, RemoteRuntimeEffectKind, RemoteRuntimeInvocation,
277            RemoteRuntimeReplay, RemoteRuntimeScope, RemoteRuntimeSubject, RemoteSessionScope,
278            RemoteToolFailureClass,
279        };
280    }
281
282    /// Prompt-layer envelopes: templates, slots, and contributions.
283    pub mod prompt {
284        pub use lash_remote_protocol::prompt::{
285            RemotePromptBuiltin, RemotePromptContribution, RemotePromptContributionGate,
286            RemotePromptLayer, RemotePromptSlot, RemotePromptSlotLayer, RemotePromptTemplate,
287            RemotePromptTemplateEntry, RemotePromptTemplateSection,
288        };
289    }
290
291    /// Tool grants and the remote tool-registry contract.
292    pub mod tools {
293        pub use lash_remote_protocol::registry_errors::{
294            RemoteToolRegistry, assert_remote_tool_registry_reopenable,
295        };
296        pub use lash_remote_protocol::tools::{
297            RemoteToolActivation, RemoteToolArgumentProjectionPolicy, RemoteToolGrant,
298            RemoteToolOutputContract, RemoteToolRetryPolicy,
299        };
300    }
301
302    /// Trigger envelopes: occurrence emission, subscriptions, and
303    /// registrations.
304    pub mod triggers {
305        pub use lash_remote_protocol::triggers::{
306            RemoteTriggerDeliveryEmitOutcome, RemoteTriggerDeliveryEmitReport,
307            RemoteTriggerEmitReport, RemoteTriggerInputBinding, RemoteTriggerInputTemplate,
308            RemoteTriggerListSubscriptionsResponse, RemoteTriggerOccurrenceRecord,
309            RemoteTriggerOccurrenceRequest, RemoteTriggerRegisterSubscriptionRequest,
310            RemoteTriggerRegisterSubscriptionResult, RemoteTriggerRegistration,
311            RemoteTriggerSubscriptionDraft, RemoteTriggerSubscriptionFilter,
312            RemoteTriggerSubscriptionRecord, RemoteTriggerTargetSummary,
313        };
314    }
315
316    /// Turn input envelopes: items, per-turn protocol options, and the turn
317    /// request.
318    pub mod turn_input {
319        pub use lash_remote_protocol::turn_input::{
320            RemoteInputItem, RemoteProtocolTurnOptions, RemoteTurnInput, RemoteTurnRequest,
321        };
322    }
323
324    /// Foreground-turn cancellation request and receipt envelopes.
325    pub mod turn_control {
326        pub use lash_remote_protocol::turn_control::{
327            RemoteTurnCancelOutcome, RemoteTurnCancelReceipt, RemoteTurnCancelRequest,
328            RemoteTurnCancellationEvidence, RemoteTurnControlDurabilityTier,
329        };
330    }
331
332    /// Turn result envelopes: outcomes, stops, assistant output, summaries,
333    /// issues, and causal references.
334    pub mod turn_result {
335        pub use lash_remote_protocol::turn_result::{
336            RemoteAssistantOutput, RemoteAssistantOutputState, RemoteCausalRef,
337            RemoteExecutionSummary, RemoteToolCallOutcome, RemoteToolCallSummary, RemoteTurnFinish,
338            RemoteTurnIssue, RemoteTurnOutcome, RemoteTurnResult, RemoteTurnStatus, RemoteTurnStop,
339            RemoteTurnUsageSummary,
340        };
341    }
342
343    /// Token usage accounting and the streaming turn-activity vocabulary.
344    pub mod usage {
345        pub use lash_remote_protocol::usage_activity::{
346            RemoteTokenLedgerEntry, RemoteTurnActivity, RemoteTurnEvent, RemoteUsage,
347        };
348    }
349}
350
351pub mod process {
352    pub use crate::admin::SessionProcessAdmin;
353    pub use crate::process_admin::Processes;
354    pub use lash_core::{
355        AbandonEvidence, AbandonRequest, AbandonWriter, ObservedProcess, ObservedProcessEvent,
356        ObservedWorkItem, ProcessAttach, ProcessAwaitOutput, ProcessAwaiter, ProcessCancelAbility,
357        ProcessCancelAllRequest, ProcessCancelRequest, ProcessCancelSource, ProcessCancelSummary,
358        ProcessChangeCursor, ProcessChangeHub, ProcessCompletionAuthority, ProcessEvent,
359        ProcessEventAppendRequest, ProcessEventAppendResult, ProcessEventSink, ProcessEventType,
360        ProcessExecutionContext, ProcessExecutionEnvRef, ProcessExecutionEnvSpec,
361        ProcessExternalRef, ProcessHandleDescriptor, ProcessHandleGrant, ProcessHandleSummary,
362        ProcessIdentity, ProcessInput, ProcessLease, ProcessLeaseClaimOutcome,
363        ProcessLeaseCompletion, ProcessLifecycleStatus, ProcessListFilter, ProcessListMode,
364        ProcessLiveReferenceSummary, ProcessOpScope, ProcessProvenance, ProcessPruneReport,
365        ProcessRecord, ProcessRegistration, ProcessRegistry, ProcessRunHandle, ProcessRuntimeHost,
366        ProcessService, ProcessSessionDeleteReport, ProcessStartOptions, ProcessStartRequest,
367        ProcessStarted, ProcessStatus, ProcessStatusFilter, ProcessTerminalState, ProcessWake,
368        ProcessWakeDedupeKey, ProcessWakeDelivery, ProcessWakeSpec, ProcessWorkDriver,
369        ProcessWorkObserver, ProcessWorkSnapshot, RecoveryDisposition, SessionScope,
370        SessionScopeId, ToolSessionProcessAdmin, watch_process_registry,
371        watch_process_registry_with_sink,
372    };
373    #[cfg(feature = "rlm")]
374    pub use lash_lashlang_runtime::{
375        LASHLANG_ENGINE_KIND, LashlangProcessInput, lashlang_process_event_types,
376        lashlang_process_signal_event_types,
377    };
378}
379
380pub mod durability {
381    pub use lash_core::{
382        DurableProcessWorker, DurableProcessWorkerConfig, EffectHost, InlineEffectHost,
383        LeaseTimings, LeaseTimingsError, ProcessDrainReport, Residency, RuntimeEnvironment,
384        RuntimeHostConfig, TerminationPolicy,
385    };
386}
387
388pub mod runtime {
389    pub use crate::core::AdvancedLashCoreBuilder;
390    pub use lash_core::runtime::{
391        AssembledTurn, AwaitEventResolver, DirectCompletionClient, EmbeddedRuntimeHost, EventSink,
392        ExecutionScope, InlineRuntimeEffectController, LashRuntime, LlmAttachmentSpec,
393        LlmRequestSpec, NoopEventSink, NoopTurnActivitySink, ProcessCommand, ProcessEffectOutcome,
394        QueuedWorkDriver, QueuedWorkRunHandle, QueuedWorkRunRequest, RuntimeEffectCommand,
395        RuntimeEffectController, RuntimeEffectControllerError, RuntimeEffectEnvelope,
396        RuntimeEffectKind, RuntimeEffectLocalExecutor, RuntimeEffectOutcome,
397        RuntimeEnvironmentBuilder, RuntimeError, RuntimeErrorCode, RuntimeHandle,
398        RuntimeInvocation, RuntimeObservation, RuntimeScope, RuntimeTurnPhase,
399        RuntimeTurnPhaseProbe, ScopedEffectController, TurnContext,
400    };
401    pub use lash_core::{
402        PersistentRuntimeServices, ProtocolSessionExtensionHandle, ProtocolTurnOptions,
403        SessionHandle, SessionPolicy, SessionSnapshot, render_turn_causes_prompt,
404    };
405}
406
407pub mod prompt {
408    pub use lash_core::{
409        PromptBuiltin, PromptContribution, PromptContributionGate, PromptLayer, PromptSlot,
410        PromptTemplate, PromptTemplateEntry, PromptTemplateSection, default_prompt_template,
411    };
412}
413
414pub mod tracing {
415    pub use lash_core::{
416        JsonlTraceSink, TraceAttachment, TraceBranchSelection, TraceContentBlock,
417        TraceEffectEnvelopeDiffEntry, TraceEffectEnvelopeDiffEvent, TraceEffectEnvelopeDiffValue,
418        TraceError, TraceEvent, TraceLabelMetadata, TraceLlmMessage, TraceLlmRequest,
419        TraceLlmResponse, TracePromptComponent, TraceProviderRequestEvent,
420        TraceProviderStreamEvent, TraceRecord, TraceRuntimeScope, TraceRuntimeStreamEvent,
421        TraceRuntimeSubject, TraceSinkError, TraceTokenUsage, TraceToolSpec,
422    };
423    #[cfg(feature = "otel-trace")]
424    pub use lash_core::{OtelTraceOptions, OtelTraceSink};
425    #[cfg(feature = "rlm")]
426    pub use lash_lashlang_runtime::{
427        TraceLashlangChildExecution, TraceLashlangEdgeSelection, TraceLashlangExecutionEvent,
428        TraceLashlangExecutionIdentity, TraceLashlangGraph, TraceLashlangGraphChildLink,
429        TraceLashlangGraphEdge, TraceLashlangGraphNode, TraceLashlangGraphStore, TraceLashlangMap,
430        TraceLashlangMapEdge, TraceLashlangMapNode, TraceLashlangNodeStatus, TraceLashlangStatus,
431    };
432    pub use lash_trace::{StderrTraceSink, TeeTraceSink, TraceContext, TraceLevel, TraceSink};
433}
434
435/// Test helpers for embedders. Enable with `lash = { ..., features = ["testing"] }`
436/// to script model responses in integration tests without a live provider.
437#[cfg(any(test, feature = "testing"))]
438pub mod testing;
439
440pub mod provider {
441    /// Typed provider-failure classification surfaced on
442    /// [`TurnIssue`](crate::turn::TurnIssue) and session error envelopes.
443    pub use lash_core::ProviderFailureKind;
444    pub use lash_core::provider::{
445        ProviderRateLimitPolicy, ProviderReliability, ProviderRetryPolicy,
446    };
447    pub use lash_core::{
448        CacheControlDialect, LlmTimeouts, ModelCapability, Provider, ProviderComponents,
449        ProviderFactory, ProviderHandle, ProviderOptions, ProviderSpec, ReasoningCapability,
450        ReasoningDisableEncoding, ReasoningEncoding, ReasoningSelection, RequestTimeout,
451        StreamTermination,
452    };
453    /// Request/response/error vocabulary of [`Provider::complete`],
454    /// re-exported so hosts can implement provider decorators (admission
455    /// gates, metrics taps) against the facade alone.
456    pub use lash_core::{
457        ExecutionEvidence, LlmRequest, LlmRequestScope, LlmResponse, LlmTransportError,
458    };
459}