Skip to main content

a3s_code_core/
lib.rs

1//! A3S Code Core Library
2//!
3//! Embeddable AI agent library with tool execution capabilities.
4//! This crate contains all business logic extracted from the A3S Code agent,
5//! enabling direct Rust API usage as an embedded library.
6//!
7//! ## Quick Start
8//!
9//! ```rust,no_run
10//! use a3s_code_core::{Agent, AgentEvent};
11//!
12//! # async fn run() -> anyhow::Result<()> {
13//! // From a config file path (.hcl or .json)
14//! let agent = Agent::new("agent.hcl").await?;
15//!
16//! // Create a workspace-bound session
17//! let session = agent.session("/my-project", None)?;
18//!
19//! // Non-streaming
20//! let result = session.send("What files handle auth?", None).await?;
21//! println!("{}", result.text);
22//!
23//! // Streaming (AgentEvent is #[non_exhaustive])
24//! let (mut rx, _handle) = session.stream("Refactor auth", None).await?;
25//! while let Some(event) = rx.recv().await {
26//!     match event {
27//!         AgentEvent::TextDelta { text } => print!("{text}"),
28//!         AgentEvent::End { .. } => break,
29//!         _ => {} // required: #[non_exhaustive]
30//!     }
31//! }
32//! # Ok(())
33//! # }
34//! ```
35//!
36//! ## Architecture
37//!
38//! ```text
39//! Agent (facade — config-driven, workspace-independent)
40//!   +-- LlmClient (Anthropic / OpenAI)
41//!   +-- CodeConfig (HCL / JSON)
42//!   +-- SessionManager (multi-session support)
43//!         |
44//!         +-- AgentSession (workspace-bound)
45//!               +-- AgentLoop (core execution engine)
46//!               |     +-- ToolExecutor (14 tools: 11 builtin + 3 skill discovery)
47//!               |     +-- LlmPlanner (JSON-structured planning)
48//!               |     +-- HITL Confirmation
49//!               +-- HookEngine (8 lifecycle events)
50//!               +-- Security (sanitizer, taint, injection detection, audit)
51//!               +-- Memory (episodic, semantic, procedural, working)
52//!               +-- MCP (JSON-RPC 2.0, stdio + HTTP+SSE)
53//!               +-- Cost Tracking / Telemetry
54//! ```
55
56pub mod agent;
57pub mod agent_api;
58pub mod agent_teams;
59#[cfg(feature = "ahp")]
60pub mod ahp;
61pub mod commands;
62pub(crate) mod composite_document_parser;
63pub mod config;
64pub mod context;
65pub(crate) mod doc;
66#[path = "document/consume.rs"]
67pub(crate) mod document_consume;
68#[path = "document/ocr.rs"]
69pub mod document_ocr;
70#[path = "document/parse_engine.rs"]
71pub(crate) mod document_parse_engine;
72#[path = "document/parser.rs"]
73pub mod document_parser;
74#[path = "document/parser_defaults.rs"]
75pub(crate) mod document_parser_defaults;
76#[path = "document/pipeline.rs"]
77pub(crate) mod document_pipeline;
78#[path = "document/pipeline_defaults.rs"]
79pub(crate) mod document_pipeline_defaults;
80#[path = "document/registry_factory.rs"]
81pub(crate) mod document_registry_factory;
82#[path = "document/render.rs"]
83pub(crate) mod document_render;
84#[path = "document/search_engine.rs"]
85pub(crate) mod document_search_engine;
86#[path = "document/search_scan.rs"]
87pub(crate) mod document_search_scan;
88#[path = "document/service_types.rs"]
89pub(crate) mod document_service_types;
90pub mod error;
91pub mod file_history;
92pub mod hitl;
93pub mod hooks;
94pub mod llm;
95pub mod mcp;
96pub mod memory;
97pub mod orchestrator;
98pub mod permissions;
99pub mod planning;
100pub mod plugin;
101pub(crate) mod prompts;
102pub mod queue;
103pub(crate) mod retry;
104pub mod sandbox;
105pub mod scheduler;
106pub mod security;
107pub mod session;
108pub mod session_lane_queue;
109pub mod skills;
110pub mod store;
111pub(crate) mod subagent;
112pub mod task;
113pub mod telemetry;
114#[cfg(feature = "telemetry")]
115pub mod telemetry_otel;
116pub(crate) mod text;
117pub mod tool_search;
118pub mod tools;
119pub mod undercover;
120
121#[cfg(test)]
122#[path = "document/engine_tests.rs"]
123mod document_engine_tests;
124
125// Re-export key types at crate root for ergonomic usage
126pub use a3s_lane::MetricsSnapshot;
127pub use agent::{AgentConfig, AgentEvent, AgentLoop, AgentResult};
128pub use agent_api::{Agent, AgentSession, BtwResult, SessionOptions, ToolCallResult};
129pub use agent_teams::{
130    AgentExecutor, AgentTeam, TeamConfig, TeamMember, TeamMemberOptions, TeamMessage, TeamRole,
131    TeamRunResult, TeamRunner, TeamTaskBoard,
132};
133pub use commands::{
134    CommandAction, CommandContext, CommandOutput, CommandRegistry, CronCancelCommand,
135    CronListCommand, LoopCommand, SlashCommand,
136};
137pub use config::{
138    CodeConfig, DocumentCacheConfig, DocumentOcrConfig, DocumentParserConfig, ModelConfig,
139    ModelCost, ModelLimit, ModelModalities, ProviderConfig,
140};
141pub use error::{CodeError, Result};
142pub use hooks::HookEngine;
143pub use llm::{
144    AnthropicClient, Attachment, ContentBlock, ImageSource, LlmClient, LlmResponse, Message,
145    OpenAiClient, TokenUsage,
146};
147pub use orchestrator::AgentSlot;
148pub use plugin::{Plugin, PluginContext, PluginManager, SkillPlugin};
149pub use prompts::{
150    AgentStyle,
151    DetectionConfidence,
152    PlanningMode,
153    SystemPromptSlots,
154    // Verification agent
155    AGENT_VERIFICATION,
156    AGENT_VERIFICATION_RESTRICTIONS,
157    // Intent classification
158    INTENT_CLASSIFY_SYSTEM,
159    // Prompt suggestion
160    PROMPT_SUGGESTION,
161    // Session memory
162    SESSION_MEMORY_TEMPLATE,
163    // Existing prompts
164    SUBAGENT_EXPLORE,
165    SUBAGENT_PLAN,
166    SUBAGENT_SUMMARY,
167    SUBAGENT_TITLE,
168    // Undercover mode
169    UNDERCOVER_INSTRUCTIONS,
170};
171pub use queue::{
172    ExternalTask, ExternalTaskResult, LaneHandlerConfig, SessionCommand, SessionLane,
173    SessionQueueConfig, SessionQueueStats, TaskHandlerMode,
174};
175pub use sandbox::SandboxConfig;
176pub use scheduler::{CronScheduler, ScheduledFire, ScheduledTask, ScheduledTaskInfo};
177pub use session::{SessionConfig, SessionManager, SessionState};
178pub use session_lane_queue::SessionLaneQueue;
179pub use skills::{builtin_skills, Skill, SkillKind};
180pub use subagent::{load_agents_from_dir, AgentDefinition, AgentRegistry};
181pub use task::manager::TaskEvent;
182pub use task::{
183    AgentProgress, Coordinator, IdlePhase, IdleTask, IdleTurn, ProgressTracker, Task, TaskId,
184    TaskManager, TaskResult, TaskStatus, TaskTokenUsage, TaskType, ToolActivity,
185};
186pub use tool_search::{ToolIndex, ToolMatch, ToolSearchConfig};
187pub use tools::{ToolContext, ToolExecutor, ToolResult};