//! # capo-agent
//!
//! Library crate for the Capo coding agent. See the design spec at
//! `docs/superpowers/specs/2026-04-23-capo-design.md`.
//!
//! ## Imports
//!
//! Prefer the crate-root re-exports for stable protocol types:
//!
//! ```ignore
//! use capo_agent::{App, AppBuilder, UiEvent, Command, UiToolResult, ProgressChunk};
//! ```
//!
//! Submodule paths (`capo_agent::events::UiEvent`, `capo_agent::tools::ToolCtx`)
//! are available but considered semver-unstable within 0.x; prefer the
//! re-exports above.

#![forbid(unsafe_code)]

pub mod agent;
pub mod app;
pub mod auth;
pub mod config;
pub mod context_files;
pub mod error;
pub mod events;
pub mod llm;
pub mod mcp;
pub mod model;
pub mod paths;
pub mod permissions;
pub mod protocol;
pub mod session;
pub mod settings;
pub mod skills;
#[cfg(feature = "test-support")]
pub mod test_support;
pub mod tools;

pub use app::{App, AppBuilder};
pub use auth::{load as load_auth, save_with_mode as save_auth, Auth, ProviderAuth};
pub use config::Config;
pub use context_files::{assemble_system_prompt, load_project_context_files, ContextFile};
pub use error::{AppError, Result};
pub use events::{
    Command, PermissionChoice, PermissionResolution, ProgressChunk, UiEvent, UiToolResult,
};
pub use mcp::{McpConfig, McpServerConfig};
pub use model::ModelId;
pub use motosan_agent_loop::{BranchNode, BranchTree, EntryId, Message, Role};
pub use paths::agent_dir;
pub use permissions::{Decision, NoOpPermissionGate, PermissionGate, PermissionRequest};
pub use session::{encode_cwd, hydrate_read_files, SessionId, SessionLookup, SessionPaths};
pub use settings::{
    CliOverrides, LlmProviderKind, LoggingSettings, ModelSettings, SessionSettings, Settings,
    UiSettings,
};
pub use skills::{
    load_all as load_skills, load_from_dir as load_skills_from_dir, LoadSkillsResult, Skill,
    SkillDiagnostic, SkillSource,
};
