//! # IdeA — Domain layer //! //! The **pure** hexagonal core (ARCHITECTURE.md §1.4, §3, §4, §7). It contains: //! //! - **Entities & value objects** with invariants enforced by validating //! constructors (`new`/`try_new` returning `Result`), //! - the **pure layout logic** (`split`/`merge`/`resize`/`move` as immutable //! `&LayoutTree -> Result` functions), //! - **ports** (traits) the infrastructure implements, //! - **domain events** and **errors**. //! //! ## Dependency rule //! //! This crate depends on **no I/O**: no `tokio`, no `std::fs`, no //! `std::process`, no `git2`/`portable-pty`/`russh`. The only third-party //! dependencies are `uuid`, `serde` (allowed solely to derive (de)serialisation //! of *persisted* domain types — a metier format constraint, not I/O), //! `thiserror`, and `async-trait`. //! //! ## Async strategy for ports //! //! I/O-touching ports (`PtyPort`, `FileSystem`, `ProcessSpawner`, `RemoteHost`, //! the stores, `GitPort`) are `#[async_trait]`. They are injected as //! `Arc` trait objects at the composition root, which native //! `async fn`-in-trait does not yet support dyn-compatibly without boxing; //! `async_trait` boxes the returned future and keeps the ports object-safe. //! Non-blocking ports (`Clock`, `IdGenerator`, `EventBus`, `AgentRuntime`) //! remain plain synchronous traits. See [`ports`] for details. #![forbid(unsafe_code)] #![warn(missing_docs)] pub mod agent; pub mod conversation; pub mod conversation_log; pub mod error; pub mod events; pub mod fileguard; pub mod git; pub mod ids; pub mod input; pub mod layout; pub mod mailbox; pub mod markdown; pub mod memory; pub mod orchestrator; pub mod permission; pub mod ports; pub mod profile; pub mod project; pub mod readiness; pub mod sandbox; pub mod session_limit; pub mod remote; pub mod skill; pub mod template; pub mod terminal; mod validation; // --------------------------------------------------------------------------- // Curated re-exports for ergonomic downstream use. // --------------------------------------------------------------------------- pub use error::DomainError; pub use ids::{ AgentId, LayoutId, NodeId, ProfileId, ProjectId, ScheduleId, SessionId, SkillId, TabId, TemplateId, WindowId, }; pub use project::{Project, ProjectPath}; pub use agent::{Agent, AgentManifest, AgentOrigin, ManifestEntry}; pub use skill::{Skill, SkillRef, SkillScope}; pub use template::{AgentTemplate, TemplateVersion}; pub use profile::{ AgentProfile, ContextInjection, EmbedderProfile, EmbedderStrategy, LivenessStrategy, McpServerWiring, RateLimitPattern, SessionStrategy, }; pub use mailbox::{AgentMailbox, MailboxError, PendingReply, Ticket, TicketId}; pub use conversation::{ Conversation, ConversationError, ConversationId, ConversationParty, ConversationRegistry, ConversationSession, SessionRef, WaitForGraph, }; pub use input::{AgentBusyState, AgentLiveness, InputMediator, InputSource}; pub use readiness::{ReadinessPolicy, ReadinessSignal}; pub use session_limit::{plan_resume, ResumePlan, RateLimitSource, SessionLimit}; pub use conversation_log::{ ConversationLog, ConversationTurn, Handoff, HandoffStore, HandoffSummarizer, ProviderSessionStore, TurnId, TurnRole, }; pub use fileguard::{ is_orchestrator, may_write_directly, FileGuard, GuardError, GuardedResource, ReadLease, WriteLease, }; pub use markdown::MarkdownDoc; pub use memory::{Memory, MemoryFrontmatter, MemoryIndexEntry, MemoryLink, MemorySlug, MemoryType}; pub use remote::{RemoteKind, RemoteRef, SshAuth}; pub use terminal::{PtySize, SessionKind, SessionStatus, TerminalSession}; pub use git::GitRepository; pub use layout::{ Direction, GridCell, GridContainer, LayoutError, LayoutNode, LayoutTree, LeafCell, SplitContainer, Tab, WeightedChild, Window, Workspace, }; pub use events::{DomainEvent, OrchestrationSource}; pub use permission::{ render_permission_summary, resolve as resolve_permissions, AgentPermissionOverride, Capability, CommandMatcher, CommandRule, Effect, EffectivePermissions, Glob, PathScope, PermissionError, PermissionProjection, PermissionProjector, PermissionRule, PermissionSet, Posture, ProjectedFile, ProjectionContext, ProjectPermissions, ProjectorKey, PERMISSIONS_VERSION, }; pub use sandbox::{ compile_sandbox_plan, PathAccess, PathGrant, SandboxContext, SandboxEnforcer, SandboxError, SandboxKind, SandboxPlan, SandboxStatus, }; pub use orchestrator::{ OrchestratorCommand, OrchestratorError, OrchestratorRequest, OrchestratorVisibility, }; pub use ports::{ AgentContextStore, AgentRuntime, Clock, ContextInjectionPlan, DirEntry, Embedder, EmbedderEnvInspector, EmbedderEnvReport, EmbedderError, EmbedderProfileStore, EmbedderPromptDismissal, EmbedderPromptStore, EventBus, EventStream, ExitStatus, FileSystem, FsError, GitCommitInfo, GitError, GitFileStatus, GitPort, GraphCommit, IdGenerator, MemoryError, MemoryQuery, MemoryRecall, MemoryStore, Output, OutputStream, PermissionStore, PreparedContext, ProcessError, ProcessSpawner, ProfileStore, ProjectStore, PtyError, PtyHandle, PtyPort, RemoteError, RemoteHost, RemotePath, RuntimeError, ScheduledTask, Scheduler, SpawnSpec, StoreError, TemplateStore, };