//! # IdeA — Infrastructure layer
//!
//! Concrete **adapters** implementing the domain ports (ARCHITECTURE §5). All
//! real-world I/O (`tokio::fs`, broadcast channels, system clock, UUIDs) lives
//! here, never in `domain` or `application`.
//!
//! L1 shipped the DI/event-relay adapters: [`LocalFileSystem`],
//! [`TokioBroadcastEventBus`], [`SystemClock`], [`UuidGenerator`]. L2 adds the
//! project persistence adapter [`FsProjectStore`]. L3 adds the local PTY adapter
//! [`PortablePtyAdapter`]. Git/remote/template adapters arrive in later lots.

#![forbid(unsafe_code)]
#![warn(missing_docs)]

pub mod assistant;
pub mod background_task;
pub mod clock;
pub mod conversation;
pub mod conversation_log;
pub mod eventbus;
pub mod fileguard;
pub mod fs;
pub mod git;
pub mod id;
pub mod input;
pub mod inspector;
pub mod issues;
pub mod mailbox;
pub mod model_server;
pub mod orchestrator;
pub mod pair_attempt_limiter;
pub mod permission;
pub mod process;
pub mod pty;
pub mod ratelimit;
pub mod remote;
pub mod runtime;
pub mod sandbox;
pub mod scheduler;
pub mod session;
pub mod sprints;
pub mod store;
pub mod timeparse;

pub use assistant::{FsAssistantContextStore, TicketAssistantEnvironmentPreparer};
pub use background_task::{
    bounded_tail, start_background_ready_inbox_bridge, tail_cap_bytes, BackgroundCompletionSink,
    BackgroundCompletionSinkError, BackgroundCompletionSinkOutcome,
    BackgroundReadyInboxBridgeHandle, BackgroundTaskReadyToDeliver, BoundedTail,
    CommandBackgroundRunner,
};
pub use clock::SystemClock;
pub use conversation::InMemoryConversationRegistry;
pub use conversation_log::{
    FsConversationLog, FsHandoffStore, FsProviderSessionStore, HeuristicHandoffSummarizer,
    TURN_LINE_MAX_CHARS, WINDOW,
};
pub use eventbus::TokioBroadcastEventBus;
pub use fileguard::RwFileGuard;
pub use fs::LocalFileSystem;
pub use git::Git2Repository;
pub use id::UuidGenerator;
pub use input::{MediatedInbox, MillisClock, SystemMillisClock};
pub use inspector::{
    transcript_activity_token, ClaudeTranscriptInspector, ClaudeTranscriptTurnWatcher,
};
pub use issues::{FsIssueNumberAllocator, FsIssueStore};
pub use mailbox::InMemoryMailbox;
pub use model_server::{
    FsModelServerRegistry, HfModelArtifactDownloader, HttpOpenAiCompatibleProbe, LlamaCppRuntime,
    LocalManagedProcess,
};
pub use orchestrator::mcp::{
    McpServer, MemoryTransport, StdioTransport, TemplateToolError, TemplateToolProvider,
    TicketToolError, TicketToolProvider, ToolPolicyRegistry,
};
pub use orchestrator::{
    process_request_file, FsOrchestratorWatcher, OrchestratorResponse, OrchestratorWatchHandle,
    REQUESTS_SUBDIR,
};
pub use pair_attempt_limiter::InMemoryPairAttemptLimiter;
pub use permission::{ClaudePermissionProjector, CodexPermissionProjector};
pub use process::LocalProcessSpawner;
pub use pty::PortablePtyAdapter;
pub use ratelimit::RateLimitParser;
pub use remote::{remote_host, LocalHost};
pub use runtime::CliAgentRuntime;
#[cfg(target_os = "linux")]
pub use sandbox::LandlockSandbox;
pub use sandbox::{default_enforcer, NoopSandbox};
pub use scheduler::TokioScheduler;
pub use session::{ClaudeSdkSession, CodexExecSession, FakeCli, StructuredSessionFactory};
pub use sprints::FsSprintStore;
#[cfg(feature = "vector-onnx")]
pub use store::OnnxEmbedder;
#[cfg(feature = "vector-http")]
pub use store::{detect_ollama, HttpEmbedder, DEFAULT_LOCAL_EMBED_ENDPOINT};
pub use store::{
    embedder_from_profile, index_token_size, onnx_model_is_cached, should_use_vector,
    AdaptiveMemoryRecall, BackgroundTaskReconcileReport, EmbedderEnvProbe, FsBackgroundTaskStore,
    FsDeviceSessionStore, FsEmbedderProfileStore, FsEmbedderPromptStore, FsLiveStateStore,
    FsMcpToolPermissionStore, FsMemoryStore, FsPermissionStore, FsProfileStore, FsProjectStore,
    FsSkillStore, FsTemplateStore, FsWindowStateStore, HashEmbedder, IdeaiContextStore,
    NaiveMemoryRecall, OnnxModelInfo, StubEmbedder, VectorMemoryRecall, DEFAULT_OLLAMA_BASE_URL,
    ONNX_CACHE_SUBDIR, RECOMMENDED_ONNX_MODELS, VECTOR_HTTP_ENABLED, VECTOR_ONNX_ENABLED,
};
