Skip to main content

meerkat_core/
lib.rs

1//! meerkat-core - Core agent logic for Meerkat (no I/O deps)
2//!
3//! This crate contains all the core types, traits, and logic for Meerkat agents.
4//! It is intentionally free of I/O dependencies to enable easy testing and embedding.
5
6// On wasm32, use tokio_with_wasm as a drop-in replacement for tokio.
7// All internal code uses `tokio::` paths — the alias makes them resolve
8// to tokio_with_wasm on wasm32 and real tokio on native.
9// On wasm32, provide a `tokio` module that re-exports tokio_with_wasm's
10// API. All internal `tokio::*` paths resolve through this on wasm32,
11// and through the real tokio crate on native.
12#[cfg(target_arch = "wasm32")]
13pub mod tokio {
14    pub use tokio_with_wasm::alias::*;
15}
16
17pub mod agent;
18pub mod blob;
19pub mod budget;
20pub mod checkpoint;
21pub mod comms;
22pub mod comms_drain_lifecycle_authority;
23pub mod compact;
24pub mod completion_feed;
25pub mod config;
26#[cfg(not(target_arch = "wasm32"))]
27pub mod config_runtime;
28#[cfg(not(target_arch = "wasm32"))]
29pub mod config_store;
30pub mod error;
31pub mod event;
32pub mod event_injector;
33pub mod event_tap;
34pub mod gateway;
35pub mod generated;
36pub mod hooks;
37pub mod image_content;
38pub mod interaction;
39pub mod lifecycle;
40pub mod mcp_config;
41pub mod memory;
42pub mod model_defaults;
43pub mod model_registry;
44pub mod ops;
45pub mod ops_lifecycle;
46pub mod peer_meta;
47#[cfg(not(target_arch = "wasm32"))]
48pub mod prompt;
49pub mod provider;
50pub mod retry;
51pub mod runtime_bootstrap;
52pub mod runtime_epoch;
53pub mod schema;
54pub mod service;
55pub mod session;
56pub mod session_recovery;
57pub mod session_store;
58pub mod skills;
59pub mod skills_config;
60pub mod state;
61pub mod time_compat;
62pub mod tool_catalog;
63pub mod tool_scope;
64pub mod turn_boundary;
65pub mod turn_execution_authority;
66pub mod types;
67
68// Re-export main types at crate root
69pub use agent::{
70    Agent, AgentBuilder, AgentLlmClient, AgentRunner, AgentSessionStore, AgentToolDispatcher,
71    BindOutcome, CommsCapabilityError, CommsRuntime, DispatcherCapabilities, ExternalToolUpdate,
72    FilteredToolDispatcher, LlmStreamResult, select_tool_catalog_mode,
73    should_compose_tool_catalog_control_plane,
74};
75pub use blob::{BlobId, BlobPayload, BlobRef, BlobStore, BlobStoreError};
76pub use budget::{Budget, BudgetLimits, BudgetPool};
77pub use checkpoint::SessionCheckpointer;
78pub use comms::{
79    CommsCommand, EventStream, InputSource, PeerDirectoryEntry, PeerDirectorySource, PeerName,
80    PeerReachability, PeerReachabilityReason, SendError, SendReceipt, StreamError, StreamScope,
81};
82pub use comms_drain_lifecycle_authority::{
83    CommsDrainLifecycleAuthority, CommsDrainLifecycleEffect, CommsDrainLifecycleError,
84    CommsDrainLifecycleInput, CommsDrainLifecycleMutator, CommsDrainLifecycleTransition,
85    CommsDrainMode, CommsDrainPhase, DrainExitReason,
86};
87pub use compact::{
88    CompactionConfig, CompactionContext, CompactionResult, Compactor,
89    SESSION_COMPACTION_CADENCE_KEY, SessionCompactionCadence,
90};
91pub use memory::{MemoryMetadata, MemoryResult, MemoryStore, MemoryStoreError};
92pub use model_registry::{ModelRegistry, ModelRegistryEntry, SelfHostedServerRef};
93pub use peer_meta::PeerMeta;
94
95pub use completion_feed::{
96    CompletionBatch, CompletionEnrichmentData, CompletionEnrichmentProvider, CompletionEntry,
97    CompletionFeed, CompletionSeq,
98};
99pub use config::{
100    AgentConfig, BudgetConfig, CallTimeoutOverride, CommsAuthMode, CommsRuntimeConfig,
101    CommsRuntimeMode, Config, ConfigDelta, ConfigError, ConfigScope, HookEntryConfig,
102    HookRunOverrides, HookRuntimeConfig, HooksConfig, LimitsConfig, ModelDefaults,
103    PlainEventSource, ProviderConfig, ProviderSettings, ProviderToolsConfig, RetryConfig,
104    SelfHostedApiStyle, SelfHostedConfig, SelfHostedModelConfig, SelfHostedServerConfig,
105    SelfHostedTransport, ShellDefaults, StorageConfig, StoreConfig, ToolsConfig,
106};
107#[cfg(not(target_arch = "wasm32"))]
108pub use config_runtime::{
109    ConfigEnvelope, ConfigEnvelopePolicy, ConfigRuntime, ConfigRuntimeError, ConfigSnapshot,
110};
111#[cfg(not(target_arch = "wasm32"))]
112pub use config_store::{
113    ConfigResolvedPaths, ConfigStore, ConfigStoreMetadata, FileConfigStore, MemoryConfigStore,
114    TaggedConfigStore,
115};
116pub use error::{AgentError, ToolError};
117pub use event::{
118    AgentEvent, BudgetType, EventEnvelope, ExternalToolDelta, ExternalToolDeltaPhase,
119    ScopedAgentEvent, StreamScopeFrame, ToolConfigChangeOperation, ToolConfigChangedPayload,
120    VerboseEventConfig, agent_event_type, compare_event_envelopes, format_verbose_event,
121    format_verbose_event_with_config,
122};
123pub use event_injector::{EventInjector, EventInjectorError};
124pub use event_tap::{
125    EventTap, EventTapState, new_event_tap, tap_emit, tap_send_terminal, tap_try_send,
126};
127pub use gateway::{
128    Availability, AvailabilityCheck, DynamicToolComposite, ToolGateway, ToolGatewayBuilder,
129};
130pub use hooks::{
131    HookCapability, HookDecision, HookEngine, HookEngineError, HookExecutionMode,
132    HookExecutionReport, HookFailurePolicy, HookId, HookInvocation, HookLlmRequest,
133    HookLlmResponse, HookOutcome, HookPatch, HookPatchEnvelope, HookPoint, HookReasonCode,
134    HookRevision, HookToolCall, HookToolResult, apply_tool_result_patch, default_failure_policy,
135};
136pub use image_content::{
137    MissingBlobBehavior, collect_blob_ids_from_blocks, collect_blob_ids_from_messages,
138    externalize_content_blocks, externalize_content_input, externalize_messages_from,
139    hydrate_content_blocks, hydrate_content_input, hydrate_messages_for_execution,
140};
141pub use interaction::{
142    InboxInteraction, InteractionContent, InteractionId, PeerInputCandidate, PeerInputClass,
143    ResponseStatus,
144};
145pub use lifecycle::{
146    ConversationAppend, ConversationAppendRole, ConversationContextAppend, CoreExecutor,
147    CoreExecutorError, CoreRenderable, InputId, RunApplyBoundary, RunBoundaryReceipt,
148    RunControlCommand, RunEvent, RunId, RunPrimitive, StagedRunInput,
149};
150pub use mcp_config::{McpConfig, McpConfigError, McpScope, McpServerConfig, McpServerWithScope};
151pub use model_defaults::ModelOperationalDefaultsResolver;
152pub use ops::{
153    AsyncOpRef, ConcurrencyLimits, ContextStrategy, ForkBranch, ForkBudgetPolicy, OpEvent,
154    OperationId, OperationPolicy, OperationResult, OperationSpec, ResultShape, SessionEffect,
155    SpawnSpec, ToolAccessPolicy, ToolDispatchOutcome, WaitPolicy, WorkKind,
156};
157pub use ops_lifecycle::{
158    OperationCompletionWatch, OperationKind, OperationLifecycleSnapshot, OperationPeerHandle,
159    OperationProgressUpdate, OperationStatus, OperationTerminalOutcome, OpsLifecycleError,
160    OpsLifecycleRegistry, WaitAllResult, WaitAllSatisfied,
161};
162#[cfg(not(target_arch = "wasm32"))]
163pub use prompt::{AGENTS_MD_MAX_BYTES, DEFAULT_SYSTEM_PROMPT, SystemPromptConfig};
164pub use provider::Provider;
165pub use retry::RetryPolicy;
166pub use runtime_bootstrap::{
167    ContextConfig, RealmConfig, RealmLocator, RealmSelection, RuntimeBootstrap,
168    RuntimeBootstrapError, default_state_root, derive_workspace_realm_id, generate_realm_id,
169};
170pub use runtime_epoch::{
171    EpochCursorSnapshot, EpochCursorState, RuntimeBuildMode, RuntimeEpochId, SessionRuntimeBindings,
172};
173pub use schema::{
174    CompiledSchema, MeerkatSchema, SchemaCompat, SchemaError, SchemaFormat, SchemaWarning,
175};
176pub use service::{
177    AppendSystemContextRequest, AppendSystemContextResult, AppendSystemContextStatus,
178    CreateSessionRequest, DeferredPromptPolicy, MobToolsBuildArgs, MobToolsFactory,
179    SessionBuildOptions, SessionControlError, SessionError, SessionHistoryPage,
180    SessionHistoryQuery, SessionInfo, SessionQuery, SessionService, SessionServiceCommsExt,
181    SessionServiceControlExt, SessionServiceHistoryExt, SessionSummary, SessionUsage, SessionView,
182    StageToolResultsRequest, StageToolResultsResult, StartTurnRequest, TurnToolOverlay,
183};
184pub use session::{
185    DeferredFirstTurnPhase, PendingDeferredPrompt, PendingSystemContextAppend,
186    PendingToolResultsMessage, SESSION_BUILD_STATE_KEY, SESSION_DEFERRED_TURN_STATE_KEY,
187    SESSION_SYSTEM_CONTEXT_STATE_KEY, SESSION_TOOL_VISIBILITY_STATE_KEY, SESSION_VERSION,
188    SYSTEM_CONTEXT_SEPARATOR, SeenSystemContextKey, SeenSystemContextState, Session,
189    SessionBuildState, SessionDeferredTurnState, SessionLlmIdentity, SessionMeta, SessionMetadata,
190    SessionSystemContextState, SessionToolVisibilityState, SessionTooling, SystemContextStageError,
191    ToolCategoryOverride, ToolVisibilityWitness,
192};
193pub use session_recovery::{
194    BUILD_ONLY_RECOVERY_OVERRIDE_ERROR, RecoveredSessionBuild, SurfaceSessionRecoveryContext,
195    SurfaceSessionRecoveryError, SurfaceSessionRecoveryOverrides, build_recovered_session,
196    has_build_only_turn_overrides, has_materialization_overrides,
197    session_allows_first_turn_build_overrides,
198};
199pub use session_store::{SessionFilter, SessionStore, SessionStoreError};
200pub use state::LoopState;
201pub use tool_catalog::{
202    ToolCatalogCapabilities, ToolCatalogDeferredEligibility, ToolCatalogEntry,
203    ToolCatalogLoadRejectedReason, ToolCatalogLoadResolution, ToolCatalogMode, ToolPlaneClass,
204    deferred_session_entry_count, deferred_session_schema_volume,
205    select_catalog_mode_from_snapshot,
206};
207pub use tool_scope::{
208    ComposedToolFilter, EXTERNAL_TOOL_FILTER_METADATA_KEY, ToolFilter, ToolScope, ToolScopeHandle,
209    ToolScopeRevision, ToolScopeStageError,
210};
211pub use turn_boundary::{TurnBoundaryHook, TurnBoundaryMessage};
212pub use turn_execution_authority::{
213    ContentShape, TurnExecutionAuthority, TurnExecutionEffect, TurnExecutionInput,
214    TurnExecutionMutator, TurnExecutionTransition, TurnPhase, TurnPrimitiveKind,
215    TurnTerminalOutcome,
216};
217pub use types::{
218    ArtifactRef, AssistantBlock, AssistantMessage, BlockAssistantMessage, ContentBlock,
219    ContentInput, HandlingMode, ImageData, Message, OutputSchema, ProviderMeta, RunResult,
220    SUPPORTED_VIDEO_MEDIA_TYPES, SecurityMode, SessionId, StopReason, SystemMessage,
221    SystemNoticeKind, SystemNoticeMessage, ToolCall, ToolCallIter, ToolCallView, ToolDef,
222    ToolProvenance, ToolResult, ToolSourceKind, Usage, UserMessage, VideoData, has_images,
223    has_non_text_content, has_video, is_supported_video_media_type, validate_inline_video_blocks,
224};