Implémente la vue chat structurée par cellule agent (toggle TUI/CLI custom, préférence persistée `preferred_view`, reattach live, composer + pièces jointes) avec le socle backend AgentSession/ChatBridge (UserPrompt, cancel_current_turn, routage interrupt_agent, commande cancel_agent_chat). Corrige le bug bloquant relevé par QA : le bouton Cancel de CustomAgentChatView interrompait tout le tour via closeAgentChat au lieu de n'annuler que le tour courant via cancelAgentChat, ce qui tuait la session contrairement au contrat produit validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
259 lines
10 KiB
Rust
259 lines
10 KiB
Rust
//! # 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<LayoutTree, LayoutError>` 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<dyn Port>` 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 agent_tool_policy;
|
|
pub mod background_task;
|
|
pub mod conversation;
|
|
pub mod conversation_log;
|
|
pub mod device;
|
|
pub mod error;
|
|
pub mod events;
|
|
pub mod fileguard;
|
|
pub mod git;
|
|
pub mod ids;
|
|
pub mod inbox;
|
|
pub mod input;
|
|
pub mod issue;
|
|
pub mod layout;
|
|
pub mod live_state;
|
|
pub mod mailbox;
|
|
pub mod markdown;
|
|
pub mod mcp_tool_permissions;
|
|
pub mod memory;
|
|
pub mod memory_harvest;
|
|
pub mod model_catalogue;
|
|
pub mod model_server;
|
|
pub mod orchestrator;
|
|
pub mod permission;
|
|
pub mod plugin;
|
|
pub mod ports;
|
|
pub mod profile;
|
|
pub mod project;
|
|
pub mod readiness;
|
|
pub mod remote;
|
|
pub mod sandbox;
|
|
pub mod session_limit;
|
|
pub mod skill;
|
|
pub mod sprint;
|
|
pub mod system_permissions;
|
|
pub mod template;
|
|
pub mod terminal;
|
|
|
|
mod validation;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Curated re-exports for ergonomic downstream use.
|
|
// ---------------------------------------------------------------------------
|
|
|
|
pub use error::DomainError;
|
|
pub use events::RendezvousContext;
|
|
|
|
pub use ids::{
|
|
AgentId, IssueId, LayoutId, LocalModelServerId, NodeId, ProfileId, ProjectId, RendezvousId,
|
|
RuntimeAgentKey, ScheduleId, SessionId, SkillId, SprintId, TabId, TaskId, TemplateId, WindowId,
|
|
};
|
|
|
|
pub use project::{Project, ProjectPath};
|
|
|
|
pub use agent::{Agent, AgentManifest, AgentOrigin, ManifestEntry};
|
|
|
|
pub use agent_tool_policy::AgentToolPolicy;
|
|
|
|
pub use mcp_tool_permissions::{
|
|
AgentMcpToolPolicyOverride, McpToolPermissionError, McpToolPolicy, ProjectMcpToolPermissions,
|
|
MCP_TOOL_PERMISSIONS_VERSION,
|
|
};
|
|
|
|
pub use background_task::{
|
|
BackgroundTask, BackgroundTaskError, BackgroundTaskKind, BackgroundTaskRendezvousLink,
|
|
BackgroundTaskResult, BackgroundTaskState, BackgroundTaskWakePolicy,
|
|
BACKGROUND_TASK_LABEL_MAX_CHARS, BACKGROUND_TASK_OUTPUT_TAIL_MAX_BYTES,
|
|
BACKGROUND_TASK_TEXT_MAX_BYTES,
|
|
};
|
|
|
|
pub use skill::{Skill, SkillKind, SkillRef, SkillScope};
|
|
|
|
pub use template::{AgentTemplate, TemplateVersion};
|
|
|
|
pub use profile::{
|
|
resolve_effort, AgentProfile, ContextInjection, EffortOption, EffortSelection, EmbedderProfile,
|
|
EmbedderStrategy, LivenessStrategy, McpServerWiring, RateLimitPattern, SessionStrategy,
|
|
};
|
|
|
|
pub use mailbox::{
|
|
AgentMailbox, AgentQueueSnapshot, MailboxError, PendingReply, QueuedTicketSnapshot, Ticket,
|
|
TicketId,
|
|
};
|
|
|
|
pub use conversation::{
|
|
Conversation, ConversationError, ConversationId, ConversationParty, ConversationRegistry,
|
|
ConversationSession, SessionRef, WaitForGraph,
|
|
};
|
|
|
|
pub use input::{AgentBusyState, AgentLiveness, InputMediator, InputSource};
|
|
|
|
pub use inbox::{
|
|
AgentInbox, AgentInboxSnapshot, InboxError, InboxItem, InboxItemKind, InboxReceipt,
|
|
InboxReceiptStatus, InboxSource, DEFAULT_AGENT_INBOX_CAPACITY,
|
|
};
|
|
|
|
pub use issue::{
|
|
AgentIssueRef, AgentIssueRole, Issue, IssueActor, IssueAttachment, IssueAttachmentId,
|
|
IssueCarnet, IssueError, IssueIndexEntry, IssueLink, IssueLinkKind, IssueListFilter,
|
|
IssueNumber, IssuePriority, IssueRef, IssueStatus, IssueVersion,
|
|
};
|
|
|
|
pub use sprint::{
|
|
validate_sprint_ordering, Sprint, SprintError, SprintIndexEntry, SprintOrder, SprintStatus,
|
|
SprintVersion,
|
|
};
|
|
|
|
pub use live_state::{LiveEntry, LiveState, WorkStatus, FIELD_MAX_BYTES, FIELD_PREVIEW_MAX_CHARS};
|
|
|
|
pub use readiness::{ReadinessPolicy, ReadinessSignal};
|
|
|
|
pub use session_limit::{plan_resume, RateLimitSource, ResumePlan, SessionLimit};
|
|
|
|
pub use conversation_log::{
|
|
bound_handoff_summary, clamp_page_limit, rotation_plan, ConversationArchive, ConversationLog,
|
|
ConversationTurn, Handoff, HandoffStore, HandoffSummarizer, PageCursor, PageDirection,
|
|
ProviderSessionStore, RotationDecision, RotationThresholds, SegmentStats, TurnId, TurnRole,
|
|
TurnSlice, HANDOFF_SUMMARY_MAX_CHARS, MAX_ARCHIVE_SEGMENTS, PAGE_DEFAULT_LIMIT, PAGE_MAX_LIMIT,
|
|
ROTATE_AFTER_BYTES, ROTATE_AFTER_TURNS,
|
|
};
|
|
|
|
pub use device::{
|
|
AuthenticatedDevice, DeviceError, DeviceId, DeviceName, PairedDevice, SessionTokenHash,
|
|
};
|
|
|
|
pub use fileguard::{
|
|
is_orchestrator, may_write_directly, FileGuard, GuardError, GuardedResource,
|
|
OrchestratorDesignation, ReadLease, WriteLease,
|
|
};
|
|
|
|
pub use markdown::MarkdownDoc;
|
|
|
|
pub use memory::{Memory, MemoryFrontmatter, MemoryIndexEntry, MemoryLink, MemorySlug, MemoryType};
|
|
|
|
pub use memory_harvest::{
|
|
parse_memory_directives, MemoryHarvestDirective, MemoryHarvestReport, MAX_BLOCKS,
|
|
MAX_BLOCK_BYTES, MAX_DESCRIPTION_CHARS,
|
|
};
|
|
|
|
pub use orchestrator::{
|
|
AssignedSkillSnapshot, OrchestrationCapabilitySnapshot,
|
|
ORCHESTRATION_CAPABILITY_SNAPSHOT_VERSION,
|
|
};
|
|
|
|
pub use model_catalogue::{
|
|
evaluate_compatibility, CliVersion, CompatibilityMatrix, ModelCatalogSource,
|
|
ModelCatalogueError, ModelCompatibility,
|
|
};
|
|
|
|
pub use model_server::{
|
|
validate_free_args, ExecutablePath, HfModelRef, LlamaCppOptions, LocalModelRef,
|
|
LocalModelServerConfig, LocalModelServerKind, ModelPath, ModelServerEndpoint,
|
|
ModelServerLifecycleStatus, ModelServerReady, ModelServerStatus, ModelSource, StopPolicy,
|
|
};
|
|
|
|
pub use remote::{RemoteKind, RemoteRef, SshAuth};
|
|
|
|
pub use terminal::{PtySize, SessionKind, SessionStatus, TerminalSession};
|
|
|
|
pub use git::GitRepository;
|
|
|
|
pub use layout::{
|
|
CustomPluginLayoutCell, Direction, GridCell, GridContainer, LayoutError, LayoutNode,
|
|
LayoutTree, LeafCell, PersistedMonitorState, PersistedPluginLayoutWindow, PersistedWindowKind,
|
|
PersistedWindowPosition, PersistedWindowSize, PersistedWindowState, PreferredView,
|
|
SplitContainer, Tab, WeightedChild, Window, WindowStateSnapshot, Workspace,
|
|
WINDOW_STATE_SNAPSHOT_VERSION,
|
|
};
|
|
|
|
pub use events::{DomainEvent, OrchestrationSource};
|
|
|
|
pub use permission::{
|
|
opencode_permission_block, render_permission_summary, resolve as resolve_permissions,
|
|
AgentPermissionOverride, Capability, CommandMatcher, CommandRule, Effect, EffectivePermissions,
|
|
Glob, PathScope, PermissionError, PermissionProjection, PermissionProjector, PermissionRule,
|
|
PermissionSet, PermissionShadowReport, Posture, ProjectPermissions, ProjectedFile,
|
|
ProjectionContext, ProjectorKey, PERMISSIONS_VERSION,
|
|
};
|
|
|
|
pub use system_permissions::{
|
|
resolve_agent_system_permissions, AgentSystemPermissionOverride, NetworkPolicy,
|
|
ProjectSystemPermissions, ResolvedAgentSystemPermissions, RuntimeLock, RuntimeLockState,
|
|
RuntimePermissionSnapshot, SystemPermissionControl, SystemPermissionControlMode,
|
|
SystemPermissionSet, SYSTEM_PERMISSIONS_VERSION,
|
|
};
|
|
|
|
pub use plugin::{
|
|
ContentHash, CustomPluginLayout, PluginActivationScope, PluginBundleUrl, PluginCapability,
|
|
PluginCommandId, PluginContributionSet, PluginDescriptor, PluginError, PluginId,
|
|
PluginInstallSource, PluginLayoutContribution, PluginLayoutType, PluginLifecycleState,
|
|
PluginManifest, PluginMcpServerContribution, PluginMcpServerId, PluginMcpServerSpec,
|
|
PluginMcpStatus, PluginMcpStatusSet, PluginMenuItemContribution, PluginPackageRef,
|
|
PluginRegistry, PluginRegistryEntry, PluginTopLevelMenuContribution, PluginTrustLevel,
|
|
PluginVersion, RelativePath, RemovalOutcome, StagedPluginPackage,
|
|
};
|
|
|
|
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, AgentToolPolicyStore, AssistantContextError,
|
|
AssistantContextProvider, BackgroundCompletionStream, BackgroundTaskCompletion,
|
|
BackgroundTaskHandle, BackgroundTaskPortError, BackgroundTaskRunner, BackgroundTaskSpec,
|
|
BackgroundTaskStore, CliVersionReader, Clock, CompatibilityMatrixSource, ContextInjectionPlan,
|
|
DirEntry, Embedder, EmbedderEnvInspector, EmbedderEnvReport, EmbedderError,
|
|
EmbedderProfileStore, EmbedderPromptDismissal, EmbedderPromptStore, EventBus, EventStream,
|
|
ExitStatus, FileSystem, FsError, GitCommitInfo, GitError, GitFileStatus, GitPort, GraphCommit,
|
|
IdGenerator, IssueAttachmentContent, IssueNumberAllocator, IssueStore, IssueStoreError,
|
|
LiveStateStore, LocalPath, McpToolPermissionStore, MemoryError, MemoryQuery, MemoryRecall,
|
|
MemoryStore, ModelArtifactCancel, ModelArtifactDownloader, ModelArtifactProgress,
|
|
ModelArtifactResolution, Output, OutputStream, PermissionStore, PluginManifestBytes,
|
|
PluginManifestError, PluginManifestValidator, PluginMcpError, PluginMcpSupervisor,
|
|
PluginPackageStore, PluginRegistryError, PluginRegistryStore, PluginStorageError,
|
|
PluginStorageStore, PluginStoreError, PreparedContext, ProcessError, ProcessSpawner,
|
|
ProfileStore, ProjectStore, ProviderModelCatalogue, PtyError, PtyHandle, PtyPort, RemoteError,
|
|
RemoteHost, RemotePath, RuntimeError, RuntimePermissionProbe, ScheduledTask, Scheduler,
|
|
SpawnSpec, SprintStore, SprintStoreError, StoreError, StructuredSessionEnvironment,
|
|
StructuredSessionEnvironmentPreparer, SystemPermissionStore, TemplateStore, WindowStateStore,
|
|
};
|