Skip to main content

rustant_core/
lib.rs

1//! # Rustant Core
2//!
3//! Core library for the Rustant autonomous agent.
4//! Provides the agent orchestrator, LLM interface (brain), memory system,
5//! safety guardian, configuration, and fundamental types.
6
7pub mod agent;
8pub mod audit;
9pub mod brain;
10pub mod browser;
11pub mod canvas;
12pub mod channels;
13pub mod config;
14pub mod council;
15pub mod credentials;
16pub mod encryption;
17pub mod error;
18pub mod explanation;
19pub mod gateway;
20pub mod indexer;
21pub mod injection;
22pub mod memory;
23pub mod merkle;
24pub mod metrics;
25pub mod multi;
26pub mod nodes;
27pub mod oauth;
28pub mod pairing;
29pub mod plan;
30pub mod project_detect;
31pub mod providers;
32pub mod replay;
33pub mod safety;
34pub mod sandbox;
35pub mod sanitize;
36pub mod scheduler;
37pub mod search;
38pub mod secret_ref;
39pub mod session_manager;
40pub mod skills;
41pub mod summarizer;
42pub mod types;
43pub mod updater;
44pub mod voice;
45pub mod workflow;
46
47// Re-export commonly used types at the crate root.
48pub use agent::{
49    Agent, AgentCallback, AgentMessage, BudgetSeverity, ContextHealthEvent, NoOpCallback,
50    RegisteredTool, TaskResult,
51};
52pub use brain::{Brain, LlmProvider, MockLlmProvider, TokenCounter};
53#[cfg(feature = "browser")]
54pub use browser::ChromiumCdpClient;
55pub use browser::{
56    BrowserSecurityGuard, BrowserSession, CdpClient, MockCdpClient, PageSnapshot, SnapshotMode,
57};
58pub use channels::cdc::{CdcAction, CdcConfig, CdcProcessor, CdcState};
59pub use channels::style_tracker::{CommunicationStyleTracker, SenderStyleProfile};
60pub use channels::{
61    AutoReplyEngine, Channel, ChannelAgentBridge, ChannelCapabilities, ChannelDigest,
62    ChannelManager, ChannelMessage, ChannelStatus, ChannelType, ChannelUser, ClassificationCache,
63    ClassifiedMessage, DigestActionItem, DigestCollector, DigestHighlight, EmailCategory,
64    EmailClassification, EmailIntelligence, FollowUpReminder, IMessageChannel, IMessageConfig,
65    IntelligenceResult, IrcChannel, IrcConfig, LlmClassificationResponse, MessageClassifier,
66    MessageContent, MessageId, MessageType, PendingReply, ReminderStatus, ReplyStatus,
67    ResolvedContact, SchedulerBridge, SenderProfile, SmsChannel, SmsConfig, StreamingMode,
68    SuggestedAction, TeamsChannel, TeamsConfig, ThreadId, WebhookChannel, WebhookConfig,
69};
70pub use config::MultiAgentConfig;
71pub use config::{
72    AgentConfig, ApprovalMode, CouncilConfig, CouncilMemberConfig, ExternalMcpServerConfig,
73    KnowledgeConfig, VotingStrategy, config_exists,
74};
75pub use config::{
76    AutoReplyMode, ChannelIntelligenceConfig, DigestFrequency, IntelligenceConfig,
77    MessagePriority as ChannelMessagePriority,
78};
79pub use council::{
80    CouncilMemberResponse, CouncilResult, DetectedProvider, PeerReview, PlanningCouncil,
81    detect_available_providers, should_use_council,
82};
83pub use plan::{
84    ExecutionPlan, PlanAlternative, PlanConfig, PlanDecision, PlanStatus, PlanStep, StepStatus,
85};
86pub use tokio_util::sync::CancellationToken;
87
88pub use credentials::{
89    CredentialError, CredentialStore, InMemoryCredentialStore, KeyringCredentialStore,
90};
91pub use encryption::{EncryptionError, SessionEncryptor};
92pub use error::BrowserError;
93pub use error::SchedulerError;
94pub use error::VoiceError;
95pub use error::{ChannelError, NodeError};
96pub use error::{Result, RustantError};
97pub use explanation::{DecisionExplanation, DecisionType, ExplanationBuilder, FactorInfluence};
98pub use gateway::{
99    ChannelBridge, ClientMessage, GatewayConfig, GatewayEvent, NodeBridge, ServerMessage,
100};
101pub use indexer::{IndexStats, IndexerConfig, ProjectIndexer};
102pub use injection::{
103    InjectionDetector, InjectionScanResult, InjectionType, Severity as InjectionSeverity,
104};
105pub use memory::{
106    BehavioralRule, ContextBreakdown, KnowledgeDistiller, KnowledgeStore, MemorySystem, Session,
107    SessionMetadata,
108};
109pub use merkle::{AuditNode, MerkleChain, VerificationResult};
110pub use multi::AgentStatus as MultiAgentStatus;
111pub use multi::{
112    AgentContext, AgentEnvelope, AgentOrchestrator, AgentPayload, AgentRoute, AgentRouter,
113    AgentSpawner, MessageBus, MessagePriority, ResourceLimits, TaskHandler,
114};
115pub use nodes::{
116    Capability, ConsentEntry, ConsentStore, DiscoveredNode, Node, NodeCapability, NodeDiscovery,
117    NodeHealth, NodeId, NodeManager, NodeMessage, NodeResult, NodeTask, Platform, RateLimit,
118};
119pub use oauth::AuthMethod;
120pub use pairing::{DeviceIdentity, PairingChallenge, PairingManager, PairingResult};
121pub use project_detect::{
122    ProjectInfo, ProjectType, detect_project, example_tasks, recommended_allowed_commands,
123};
124pub use providers::{
125    CircuitBreaker, CircuitState, FailoverProvider, GeminiProvider, ModelInfo,
126    create_council_members, create_provider, create_provider_with_auth,
127};
128pub use safety::{
129    AdaptiveTrust, ApprovalContext, ApprovalDecision, BehavioralFingerprint, ContractEnforcer,
130    Invariant, Predicate, ResourceBounds, ReversibilityInfo, SafetyContract, SafetyGuardian,
131    ToolRateLimiter,
132};
133pub use sandbox::SandboxedFs;
134pub use scheduler::{
135    BackgroundJob, CronJob, CronJobConfig, CronScheduler, HeartbeatConfig, HeartbeatManager,
136    JobManager, JobStatus, WebhookEndpoint, WebhookHandler,
137};
138pub use search::{HybridSearchEngine, SearchConfig, SearchResult};
139pub use secret_ref::{MigrationResult, SecretRef, SecretResolveError, SecretResolver};
140pub use session_manager::{SessionEntry, SessionIndex, SessionManager};
141pub use skills::{
142    ParseError as SkillParseError, SkillConfig, SkillDefinition, SkillLoader, SkillRegistry,
143    SkillRequirement, SkillRiskLevel, SkillToolDef, ValidationError, ValidationResult,
144    parse_skill_md, validate_skill,
145};
146pub use summarizer::{ContextSummarizer, ContextSummary, TokenAlert, TokenCostDisplay};
147pub use types::{
148    AgentState, AgentStatus, Artifact, CompletionRequest, CompletionResponse, Content,
149    CostEstimate, Message, ProgressUpdate, RiskLevel, Role, StreamEvent, TaskClassification,
150    TokenUsage, ToolDefinition, ToolOutput,
151};
152pub use voice::{
153    AudioChunk, AudioFormat, MeetingRecordingSession, MeetingResult, MeetingStatus,
154    MockSttProvider, MockTtsProvider, MockWakeDetector, OpenAiSttProvider, OpenAiTtsProvider,
155    SttProvider, SttWakeDetector, SynthesisRequest, SynthesisResult, ToggleState,
156    TranscriptionResult, TranscriptionSegment, TtsProvider, VadEvent, VoiceActivityDetector,
157    VoiceCommandSession, WakeWordDetector, audio_convert,
158};
159#[cfg(feature = "voice")]
160pub use voice::{
161    AudioInput, AudioOutput, PorcupineWakeDetector, VoicePipeline, VoicePipelineEvent,
162    WhisperLocalProvider,
163};
164pub use workflow::{
165    WorkflowDefinition, WorkflowExecutor, WorkflowState, WorkflowStatus, get_builtin,
166    list_builtin_names, parse_workflow, validate_workflow,
167};
168
169#[cfg(test)]
170mod reexport_tests {
171    use super::*;
172
173    #[test]
174    fn test_lib_new_reexports_channels() {
175        // Verify new channel-related types are accessible from crate root.
176        let _caps = ChannelCapabilities::default();
177        let _mode = StreamingMode::Polling { interval_ms: 1000 };
178        let _tid = ThreadId("thread-1".into());
179        let _bridge = ChannelBridge;
180
181        // Verify new channel implementations are accessible.
182        let _imessage_cfg = IMessageConfig::default();
183        let _teams_cfg = TeamsConfig::default();
184        let _sms_cfg = SmsConfig::default();
185        let _irc_cfg = IrcConfig::default();
186        let _webhook_cfg = WebhookConfig::default();
187    }
188
189    #[test]
190    fn test_lib_new_reexports_browser() {
191        // Verify browser types are accessible from crate root.
192        let _guard = BrowserSecurityGuard::default();
193        let _mode = SnapshotMode::Html;
194        let _mock = MockCdpClient::new();
195    }
196
197    #[test]
198    fn test_lib_new_reexports_scheduler() {
199        // Verify scheduler types are accessible from crate root.
200        let _scheduler = CronScheduler::new();
201        let _config = HeartbeatConfig::default();
202        let _manager = JobManager::new(10);
203        let _status = JobStatus::Pending;
204        let _endpoint = WebhookEndpoint::new("/hooks");
205    }
206
207    #[test]
208    fn test_lib_new_reexports_voice() {
209        // Verify voice types are accessible from crate root.
210        let _vad = VoiceActivityDetector::new(0.01);
211        let _chunk = AudioChunk::silence(16000, 1, 480);
212        let _mock_stt = MockSttProvider::new();
213        let _mock_tts = MockTtsProvider::new();
214        let _format = AudioFormat::Wav;
215        let _req = SynthesisRequest::new("test");
216        let _event = VadEvent::NoChange;
217    }
218
219    #[test]
220    fn test_lib_new_reexports_nodes_multi() {
221        // Verify new node types are accessible from crate root.
222        let _cap = NodeCapability::basic(Capability::Shell);
223        let _rl = RateLimit {
224            max_calls: 10,
225            window_secs: 60,
226        };
227        let _msg = NodeMessage::Ping;
228
229        // Verify multi-agent types are accessible.
230        let _limits = ResourceLimits::default();
231        let _prio = MessagePriority::Critical;
232        let _status = MultiAgentStatus::Idle;
233
234        // Verify bridge types are accessible.
235        let _nb = NodeBridge;
236    }
237}