//! # IdeA — Application layer
//!
//! Orchestrates **use cases** by talking **only to the domain ports** (traits),
//! never to concrete adapters (ARCHITECTURE §1.1, §6). Every use case is a
//! struct carrying its ports as `Arc<dyn Port>` and exposing
//! `execute(input) -> Result<output, AppError>`.
//!
//! This crate depends on `domain` only. The composition root (`app-tauri`) is
//! the single place that constructs concrete adapters and injects them here.

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

pub mod agent;
pub mod background;
pub mod conversation;
pub mod device;
pub mod diag;
pub mod embedder;
pub mod error;
pub mod git;
pub mod health;
pub mod issues;
pub mod layout;
pub mod mcp_tool_permissions;
pub mod memory;
pub mod model_server;
pub mod orchestrator;
pub mod permission;
pub mod plugin;
pub mod project;
pub mod remote;
pub mod skill;
pub mod sprints;
pub mod system_permissions;
pub mod template;
pub mod terminal;
pub mod ticket_assistant;
pub mod window;
pub mod workstate;

pub use agent::{
    claude_model_catalogue, codex_model_catalogue, drain_reply_stream_with_readiness,
    drain_with_readiness, drain_with_readiness_and_announcements, drain_with_readiness_outcome,
    reference_profile_id, reference_profiles, selectable_reference_profiles, send_blocking,
    AgentResumer, AnnouncementPublisher, ChangeAgentProfile, ChangeAgentProfileInput,
    ChangeAgentProfileOutput, CloneOpenCodeProfileFromSeed, CloneOpenCodeProfileFromSeedInput,
    CloneOpenCodeProfileFromSeedOutput, CloneProfileFromSeed, CloneProfileFromSeedInput,
    CloneProfileFromSeedOutput, ConfigureProfiles, ConfigureProfilesInput, ConfigureProfilesOutput,
    CreateAgentFromScratch, CreateAgentInput, CreateAgentOutput, DeleteAgent, DeleteAgentInput,
    DeleteProfile, DeleteProfileInput, DetectProfiles, DetectProfilesInput, DetectProfilesOutput,
    FirstRunState, FirstRunStateOutput, HandoffProvider, InjectedLiveRow, InspectConversation,
    InspectConversationInput, InspectConversationOutput, LaunchAgent, LaunchAgentInput,
    LaunchAgentOutput, ListAgents, ListAgentsInput, ListAgentsOutput, ListClaudeModels,
    ListClaudeModelsOutput, ListCodexModels, ListCodexModelsOutput, ListOpenCodeProviders,
    ListOpenCodeProvidersOutput, ListProfiles, ListProfilesOutput, ListResumableAgents,
    ListResumableAgentsInput, ListResumableAgentsOutput, ListedAgentCapabilities,
    LiveStateLeanProvider, McpRuntime, OpenCodeProviderCatalogEntry, PermissionProjectorRegistry,
    ProfileAvailability, ProfileModelCatalogEntry, ProviderSessionProvider, ReadAgentContext,
    ReadAgentContextInput, ReadAgentContextOutput, ReferenceProfiles, ReferenceProfilesOutput,
    ResumableAgent, SaveOpenCodeProviderProfile, SaveOpenCodeProviderProfileInput,
    SaveOpenCodeProviderProfileOutput, SaveProfile, SaveProfileInput, SaveProfileOutput,
    SessionLimitService, StructuredRoutingMode, StructuredSessionDescriptor, TurnOutcome,
    UpdateAgentContext, UpdateAgentContextInput, UpdateAgentEffort, UpdateAgentEffortInput,
    UpdateAgentEffortOutput, AGENT_MEMORY_RECALL_BUDGET, CODEX_SUBMIT_DELAY_MS,
    LIVE_STATE_INJECT_MAX, RESUME_PROMPT,
};
pub use background::{
    BackgroundCommandArchive, CancelBackgroundTask, CancelBackgroundTaskOutput,
    RetryBackgroundTask, SpawnBackgroundCommand, SpawnBackgroundCommandInput,
    SpawnBackgroundCommandOutput,
};
pub use conversation::{
    ConversationArchiveProvider, ReadConversationPage, ReadConversationPageInput, RecordTurn,
    RotateConversationLog, RotateConversationLogInput, TurnPage, TurnSource, TurnView,
};
pub use device::{
    normalize_pairing_code, pairing_codes_equal, AuthenticateSession, AuthenticateSessionInput,
    DeviceView, ListDevices, ListDevicesInput, ListDevicesOutput, PairAttemptDecision,
    PairAttemptLimiter, PairDevice, PairDeviceInput, PairDeviceOutput, RateLimitKey, RenameDevice,
    RenameDeviceInput, RevokeAllDevices, RevokeDevice, RevokeDeviceInput, TouchDevice,
    TouchDeviceInput, TouchDeviceOutput,
};
pub use embedder::{
    CheckEmbedderSuggestion, CheckEmbedderSuggestionInput, CheckEmbedderSuggestionOutput,
    DeleteEmbedderProfile, DeleteEmbedderProfileInput, DescribeEmbedderEngines, DismissChoice,
    DismissEmbedderSuggestion, DismissEmbedderSuggestionInput, EmbedderEnginesView,
    ListEmbedderProfiles, ListEmbedderProfilesOutput, OnnxModelView, SaveEmbedderProfile,
    SaveEmbedderProfileInput, SaveEmbedderProfileOutput, SuggestedThisSession,
};
pub use error::AppError;
pub use git::{
    GitBranches, GitBranchesInput, GitBranchesOutput, GitCheckout, GitCheckoutInput, GitCommit,
    GitCommitInput, GitCommitOutput, GitGraph, GitGraphInput, GitGraphOutput, GitInit,
    GitInitInput, GitLog, GitLogInput, GitLogOutput, GitStage, GitStagePathInput, GitStatus,
    GitStatusInput, GitStatusOutput, GitUnstage,
};
pub use health::{HealthInput, HealthReport, HealthUseCase};
pub use issues::{
    AddIssueAttachment, AddIssueAttachmentInput, AddIssueAttachmentOutput, AssignIssueAgent,
    AssignIssueAgentInput, AssignIssueAgentOutput, BatchIssueResult, BulkDeleteIssues,
    BulkDeleteIssuesInput, BulkIssueMutationOutput, BulkUpdateIssuePriority,
    BulkUpdateIssuePriorityInput, BulkUpdateIssueStatus, BulkUpdateIssueStatusInput, CreateIssue,
    CreateIssueInput, CreateIssueOutput, DeleteIssue, DeleteIssueInput, DeleteIssueOutput,
    LinkIssues, LinkIssuesInput, LinkIssuesOutput, ListIssues, ListIssuesInput, ListIssuesOutput,
    MarkIssueAttachmentSummarized, MarkIssueAttachmentSummarizedInput,
    MarkIssueAttachmentSummarizedOutput, ReadIssue, ReadIssueAttachment, ReadIssueAttachmentInput,
    ReadIssueAttachmentOutput, ReadIssueCarnet, ReadIssueCarnetInput, ReadIssueCarnetOutput,
    ReadIssueInput, ReadIssueOutput, UnlinkIssues, UnlinkIssuesInput, UpdateIssue,
    UpdateIssueCarnet, UpdateIssueCarnetInput, UpdateIssueCarnetOutput, UpdateIssueInput,
    UpdateIssueOutput, TICKET_ATTACHMENT_MAX_BYTES,
};
pub use layout::{
    CreateLayout, CreateLayoutInput, CreateLayoutOutput, DeleteLayout, DeleteLayoutInput,
    DeleteLayoutOutput, LayoutInfo, LayoutKind, LayoutOperation, LayoutsDoc, ListLayouts,
    ListLayoutsInput, ListLayoutsOutput, LoadLayout, LoadLayoutInput, LoadLayoutOutput,
    MutateLayout, MutateLayoutInput, MutateLayoutOutput, NamedLayout, PluginLayoutOrigin,
    ReconcileLayouts, ReconcileLayoutsInput, ReconcileLayoutsOutput, RenameLayout,
    RenameLayoutInput, SetActiveLayout, SetActiveLayoutInput, SetActiveLayoutOutput,
    SnapshotRunningAgents, SnapshotRunningAgentsInput, SnapshotRunningAgentsOutput, LAYOUTS_FILE,
};
pub use mcp_tool_permissions::{
    McpToolPermissionCatalogue, ReadMcpToolPermissions, ReadMcpToolPermissionsInput,
    ReadMcpToolPermissionsOutput, UpdateAgentMcpToolPermissions,
    UpdateAgentMcpToolPermissionsInput, UpdateProjectMcpToolPermissions,
    UpdateProjectMcpToolPermissionsInput,
};
pub use memory::{
    CreateMemory, CreateMemoryInput, CreateMemoryOutput, DeleteMemory, DeleteMemoryInput,
    GetMemory, GetMemoryInput, GetMemoryOutput, HarvestMemoryFromTurn, ListMemories,
    ListMemoriesInput, ListMemoriesOutput, MemoryHarvestOutcome, ReadMemoryIndex,
    ReadMemoryIndexInput, ReadMemoryIndexOutput, RecallMemory, RecallMemoryInput,
    RecallMemoryOutput, ResolveMemoryLinks, ResolveMemoryLinksInput, ResolveMemoryLinksOutput,
    UpdateMemory, UpdateMemoryInput, UpdateMemoryOutput,
};
pub use model_server::{
    model_server_error_code, DeleteModelArtifact, DeleteModelArtifactInput, DeleteModelServer,
    DeleteModelServerInput, EnsureLocalModelServer, EnsureLocalModelServerInput,
    EnsureLocalModelServerOutput, ListModelServers, ListModelServersOutput,
    ModelArtifactDownloadTracker, ModelArtifactView, ModelServerListItem,
    ReadinessPolicy as ModelServerReadinessPolicy, SaveModelServer, SaveModelServerInput,
    SaveModelServerOutput,
};
pub use orchestrator::{
    resolve_rendezvous_ceiling, resolve_rendezvous_window, run_inactivity_watchdog,
    AgentWakeService, AskLivenessProbe, ContextGuardUseCases, LiveStateProvider,
    LiveStateReadProvider, McpRuntimeProvider, OrchestratorOutcome, OrchestratorService,
    ProposeContext, ReadContext, ReadMemory, RecordTurnProvider, WakeSessionProvider,
    WatchdogOutcome, WriteMemory, DEFAULT_RENDEZVOUS_CEILING, DEFAULT_RENDEZVOUS_WINDOW,
};
pub use permission::{
    GetProjectPermissions, GetProjectPermissionsInput, GetProjectPermissionsOutput,
    ResolveAgentPermissions, ResolveAgentPermissionsInput, ResolveAgentPermissionsOutput,
    UpdateAgentPermissions, UpdateAgentPermissionsInput, UpdateProjectPermissions,
    UpdateProjectPermissionsInput,
};
pub use plugin::{
    InstallPluginFromArchive, InstallPluginFromDirectory, JsonPluginManifestValidator,
    ListPluginRuntimeContributions, ListPlugins, PluginAdmin, PluginCommandTasks,
    PluginConfigDocument, PluginConfigDocumentReadInput, PluginConfigDocumentUpdateInput,
    PluginConfigDocumentWriteResult, PluginConfigDocuments, PluginContributionSummary,
    PluginDiagnosticMessage, PluginEnvDiagnostic, PluginEnvRequirement, PluginEventBatch,
    PluginEventPollInput, PluginEventSubscribeInput, PluginEventSubscription,
    PluginEventSubscriptions, PluginEventUnsubscribeInput, PluginFileDiagnostic,
    PluginFileRequirement, PluginInstallResult, PluginPublicEvent, PluginReview,
    PluginRunCommandInput, PluginRuntimeCatalog, PluginRuntimePlugin, PluginStorageAccess,
    PluginStorageGetInput, PluginStorageSetInput, PluginTaskStatusInput, PluginToolDiagnostic,
    PluginToolRequirement, PluginToolchainDiagnostic, PluginToolchainDiagnosticInput,
    PluginToolchainDiagnostics, PluginWorkspaceAccess, PluginWorkspaceBinaryFile,
    PluginWorkspaceDirEntry, PluginWorkspaceDirectoryListing, PluginWorkspacePathInput,
    PluginWorkspaceStat, PluginWorkspaceTextFile, PluginWorkspaceWriteBinaryInput,
    PluginWorkspaceWriteTextInput, ProjectConvention, ProjectModule, ProjectStructureEntry,
    ProjectStructureQuery, QueryProjectStructure, QueryProjectStructureInput,
    ReconcilePluginMcpServers, ReviewPluginPackage, ReviewPluginPackageInput, SetPluginEnabled,
    SetPluginEnabledInput, UninstallPlugin, UninstallPluginInput, UninstallPluginResult,
};
pub use project::{
    CloseProject, CloseProjectInput, CloseProjectOutput, CloseTab, CloseTabInput, CreateProject,
    CreateProjectInput, CreateProjectOutput, ListProjects, ListProjectsOutput, OpenProject,
    OpenProjectInput, OpenProjectOutput, ProjectMeta, ReadProjectContext, ReadProjectContextInput,
    ReadProjectContextOutput, UpdateProjectContext, UpdateProjectContextInput,
    PROJECT_CONTEXT_FILE,
};
pub use remote::{ConnectRemote, ConnectRemoteInput, ConnectRemoteOutput};
pub use skill::{
    AgentCapability, AssignSkillToAgent, AssignSkillToAgentInput, AssignedSkillResolver,
    CreateSkill, CreateSkillInput, CreateSkillOutput, DeleteSkill, DeleteSkillInput, ListSkills,
    ListSkillsInput, ListSkillsOutput, ReadSkill, ReadSkillInput, ResolveAgentCapabilities,
    ResolveAgentCapabilitiesInput, UnassignSkillFromAgent, UnassignSkillFromAgentInput,
    UpdateSkill, UpdateSkillInput, UpdateSkillOutput,
};
pub use sprints::{
    normalized_reorder, AssignTicketToSprint, AssignTicketToSprintInput,
    AssignTicketToSprintOutput, CreateSprint, CreateSprintInput, CreateSprintOutput, DeleteSprint,
    DeleteSprintInput, ListSprints, ListSprintsInput, ListSprintsOutput, RenameSprint,
    RenameSprintInput, ReorderSprints, ReorderSprintsInput, ReorderSprintsOutput, SprintListEntry,
    SprintOutput, UnassignTicketFromSprint, UnassignTicketFromSprintInput,
};
pub use system_permissions::{
    GetProjectSystemPermissions, GetProjectSystemPermissionsInput,
    GetProjectSystemPermissionsOutput, ResolveAgentSystemPermissions,
    ResolveAgentSystemPermissionsInput, ResolveAgentSystemPermissionsOutput,
    UpdateAgentSystemPermissions, UpdateAgentSystemPermissionsInput,
    UpdateProjectSystemPermissions, UpdateProjectSystemPermissionsInput,
};
pub use template::{
    AgentDrift, CreateAgentFromTemplate, CreateAgentFromTemplateInput,
    CreateAgentFromTemplateOutput, CreateTemplate, CreateTemplateInput, CreateTemplateOutput,
    DeleteTemplate, DeleteTemplateInput, DetectAgentDrift, DetectAgentDriftInput,
    DetectAgentDriftOutput, ListTemplates, ListTemplatesOutput, ReadTemplate, ReadTemplateInput,
    ReadTemplateOutput, SyncAgentWithTemplate, SyncAgentWithTemplateInput,
    SyncAgentWithTemplateOutput, UpdateTemplate, UpdateTemplateInput, UpdateTemplateOutput,
};
pub use terminal::{
    CloseTerminal, CloseTerminalInput, CloseTerminalOutput, LiveAgentRegistry, LiveSessionKind,
    LiveSessionSnapshot, LiveSessions, OpenTerminal, OpenTerminalInput, OpenTerminalOutput,
    ResizeTerminal, ResizeTerminalInput, StructuredSessions, TerminalSessions, WriteToTerminal,
    WriteToTerminalInput,
};
pub use ticket_assistant::{
    CloseTicketAssistant, CloseTicketAssistantInput, OpenTicketAssistant, OpenTicketAssistantInput,
    OpenTicketAssistantOutput,
};
pub use window::{
    MoveTabToNewWindow, MoveTabToNewWindowInput, MoveTabToNewWindowOutput, OpenPluginLayoutWindow,
    OpenPluginLayoutWindowInput, OpenPluginLayoutWindowOutput, RestoreOpenWindows,
    RestoreOpenWindowsOutput, SnapshotOpenWindows, SnapshotOpenWindowsInput,
};
pub use workstate::{
    AgentBackgroundTaskState, AgentTicketState, AgentWorkState, AppExitWorkGuardDetail,
    AppExitWorkGuardState, AttachLiveAgent, AttachLiveAgentInput, AttachLiveAgentOutput,
    BackgroundTaskKindLabel, ConversationLogProvider, ConversationPreviewStatus,
    ConversationTurnWorkPreview, ConversationWorkSummary, GetAppExitWorkGuardState,
    GetAppExitWorkGuardStateInput, GetLiveStateLean, GetProjectWorkState, GetProjectWorkStateInput,
    LeanLiveEntry, LeanLiveState, LiveWorkSession, ProjectWorkState, ReconcileLiveState,
    ReconcileLiveStateInput, StopLiveAgent, StopLiveAgentInput, StopLiveAgentOutput,
    TicketWorkSource, TicketWorkStatus, UpdateLiveState, UpdateLiveStateInput,
    LIVE_STATE_MAX_ENTRIES, LIVE_STATE_TTL_MS,
};
