Skip to main content

oxi_agent/
lib.rs

1#![allow(unused_doc_comments)]
2#![warn(missing_docs)]
3// Relax two test-idiom lints under `cfg(test)` so `cargo clippy --all-targets`
4// stays clean without weakening the shipped library:
5//   - `clippy::unwrap_used` — `unwrap()`/`unwrap_err()` are idiomatic in tests;
6//     shipped (non-test) code still `warn`s on it (see the line below).
7//   - `clippy::field_reassign_with_default` — the `let mut x = X::default();
8//     x.f = ..;` test-setup pattern.
9#![warn(clippy::unwrap_used)]
10#![cfg_attr(test, allow(clippy::unwrap_used, clippy::field_reassign_with_default))]
11#![allow(unknown_lints)]
12
13//! oxi-agent: Agent runtime for oxi
14//!
15//! Provides the core agent loop, tool execution, state management,
16//! and streaming event pipeline for the oxi coding agent.
17
18/// Advisor subsystem — read-only reviewer that shadows the primary agent.
19pub mod advisor;
20/// Core agent implementation.
21pub mod agent;
22/// Agent definition file parsing and discovery.
23pub mod agent_definition;
24/// Agent loop – the main request/response cycle driver.
25pub mod agent_loop;
26/// Context compaction strategies and data types.
27pub mod compaction;
28/// Agent configuration types.
29pub mod config;
30/// Error types for agent operations.
31pub mod error;
32/// Event types emitted during the agent loop.
33pub mod events;
34/// MCP (Model Context Protocol) integration.
35pub mod mcp;
36/// Model identifier constants and helpers.
37pub mod model_id;
38/// Fault-recovery primitives (circuit breaker, fallback chains).
39pub mod recovery;
40/// Agent state machine and shared mutable state.
41pub mod state;
42/// Shared streaming retry logic.
43pub mod stream_retry;
44pub mod structured_output;
45/// Built-in tool implementations and registry.
46pub mod tools;
47/// Shared type aliases and helpers.
48pub mod types;
49
50pub use agent::Agent;
51pub use agent::ProviderResolver;
52pub use agent_definition::{
53    AgentDefinition, AgentDiscovery, AgentScope, DefaultContext, current_subagent_depth,
54    max_subagent_depth, validate_agent_name,
55};
56pub use agent_loop::{AgentLoop, AgentLoopConfig};
57
58pub use advisor::{
59    ADVISOR_GUIDANCE, ADVISOR_READONLY_TOOL_NAMES, ADVISOR_SYSTEM_PROMPT, AdviseTool, AdvisorAgent,
60    AdvisorDeliveryChannel, AdvisorEmissionGuard, AdvisorNote, AdvisorRuntime, AdvisorRuntimeHost,
61    AdvisorSeverity, AgentAdvisor, DeliveryOpts, EnqueueAdviceFn, format_advisory_batch,
62    is_immune_turn_active, is_interrupting_severity, normalize_advisor_note,
63    resolve_delivery_channel,
64};
65/// Agent configuration, hooks, and tool execution mode.
66pub use config::{
67    AfterToolCallContext, AfterToolCallResult, AgentConfig, AgentHooks, BeforeToolCallContext,
68    BeforeToolCallResult, ShouldStopAfterTurnContext, ToolExecutionMode,
69};
70pub use error::AgentError;
71pub use events::{AgentEvent, ToolCallContext, VisitReason};
72pub use tools::browse::{BrowseProgress, BrowseProgressCallback};
73
74pub use agent_loop::config::CompactionHook;
75pub use compaction::{CompactedContext, CompactionEvent};
76pub use oxi_ai::{CompactionManager, CompactionStrategy};
77/// Fault-recovery primitives for resilient agent execution.
78pub use recovery::{
79    CircuitBreaker, CircuitBreakerConfig, CircuitOpenError as CircuitOpenErrorFromAi,
80    FallbackChain, PartialResponse,
81};
82// Also export the local circuit error type used by CircuitBreaker
83pub use recovery::CircuitOpenErrorLocal;
84pub use state::{AgentState, SharedState};
85pub use structured_output::{OutputMode, StructuredOutput, StructuredOutputError};
86
87pub use mcp::{McpConfig, McpManager, McpTool};
88pub use tools::ask::{AskBridge, AskTool};
89pub use tools::commit::{
90    CommitGroup, CommitTool, CommitType, ConventionalAnalysis, ConventionalDetail, NumstatEntry,
91    ScopeCandidate,
92};
93pub use tools::context7::{Context7QueryDocsTool, Context7ResolveLibraryIdTool};
94pub use tools::github::GitHubTool;
95pub use tools::github_search::GitHubSearchTool;
96pub use tools::memory_edit::MemoryEditTool;
97pub use tools::memory_recall::MemoryRecallTool;
98pub use tools::memory_reflect::MemoryReflectTool;
99pub use tools::memory_retain::MemoryRetainTool;
100pub use tools::search_cache::{GetSearchResultsTool, SearchCache};
101pub use tools::subagent::SubagentTool;
102pub use tools::web_search::WebSearchTool;
103/// Built-in tool implementations and registry.
104pub use tools::{
105    AgentTool, AgentToolResult, BashTool, EditTool, FindTool, ForkResult, GrepTool, LsTool,
106    ReadTool, SubagentRunner, ToolContext, ToolError, ToolRegistry, WriteTool,
107};
108
109pub use tools::TodoStateProvider;
110pub use tools::todo::{
111    InitListEntry, TodoCompletionTransition, TodoItem, TodoOp, TodoPhase, TodoStatus, TodoTool,
112    TodoUpdateResult,
113};
114
115pub use tools::{AgentHubStatus, AgentInfo, AgentKind, AgentPoolProvider};
116pub use tools::{LspAction, LspProvider};
117
118/// Standard imports for oxi-agent usage.
119pub mod prelude {
120    pub use crate::agent::Agent;
121    pub use crate::agent_loop::{AgentLoop, AgentLoopConfig, ToolExecutionMode};
122    pub use crate::compaction::{CompactedContext, CompactionEvent};
123    pub use crate::config::AgentConfig;
124    pub use crate::events::AgentEvent;
125    pub use crate::mcp::{McpConfig, McpManager, McpTool};
126    pub use crate::state::{AgentState, SharedState};
127    pub use crate::tools::ask::{AskBridge, AskTool};
128    pub use crate::tools::context7::{Context7QueryDocsTool, Context7ResolveLibraryIdTool};
129    pub use crate::tools::github::GitHubTool;
130    pub use crate::tools::github_search::GitHubSearchTool;
131    pub use crate::tools::search_cache::{GetSearchResultsTool, SearchCache};
132    pub use crate::tools::subagent::SubagentTool;
133    pub use crate::tools::web_search::WebSearchTool;
134    pub use crate::tools::{
135        AgentTool, AgentToolResult, BashTool, EditTool, FindTool, GrepTool, LsTool, ReadTool,
136        ToolContext, ToolRegistry, WriteTool,
137    };
138}
139
140#[cfg(test)]
141mod tests;