//! Phase 67.4 — driver agent loop. See `README.md` and
//! `docs/src/architecture/driver-subsystem.md` for the architecture.

pub mod acceptance;
pub mod attempt;
pub mod compact_store;
pub mod config;
pub mod error;
pub mod evaluators;
pub mod events;
pub mod extract_memories;
pub mod extract_memories_prompt;
pub mod harness;
pub mod llm_decider;
pub mod mcp_config;
pub mod memory;
pub mod orchestrator;
pub mod post_compact_cleanup;
pub mod proactive;
pub mod prompt;
pub mod replay;
// Socket server uses tokio's Unix-domain primitives — guard
// the module so Windows builds (which don't ship UnixListener
// / UnixStream) compile clean. Operators on Windows targeting
// the daemon's permission-prompt forwarder can either run via
// WSL or wait for the Phase 27.x follow-up that swaps Unix
// sockets for a named-pipe / TCP-loopback fallback.
#[cfg(unix)]
pub mod socket;
pub mod workspace;

pub use acceptance::{
    AcceptanceEvaluator, CustomVerifier, CustomVerifierRegistry, DefaultAcceptanceEvaluator,
    GitClean, NoPathsTouched, NoopAcceptanceEvaluator, ShellResult, ShellRunner,
};
pub use config::{
    AcceptanceConfig, BindingStoreConfig, BindingStoreKind, CompactPolicyConfig, DeciderConfig,
    DeciderMemoryConfig, DenyShortcutConfig, DriverBinConfig, DriverConfig,
    EmbeddingProviderConfig, NamespaceConfig, PermissionConfig, ReplayPolicyConfig,
    WorkspaceConfig, WorkspaceGitConfig,
};
pub use error::DriverError;
#[cfg(feature = "nats")]
pub use events::NatsEventSink;
pub use events::{DriverEvent, DriverEventSink, NoopEventSink};
pub use harness::ClaudeHarness;
pub use llm_decider::LlmDecider;
pub use mcp_config::write_mcp_config;
pub use memory::{DecisionMemory, Namespace, NoopDecisionMemory, SqliteVecDecisionMemory};
pub use orchestrator::{DriverOrchestrator, DriverOrchestratorBuilder, GoalOutcome};
pub use prompt::compose_turn_prompt;
pub use replay::{
    DefaultReplayPolicy, ReplayContext, ReplayDecision, ReplayOutcomeHint, ReplayPolicy,
};
#[cfg(unix)]
pub use socket::{DriverSocketServer, SocketMessage};
pub use workspace::{GitWorktreeMode, WorkspaceManager};
