feat(backend): système de plugins — domaine, application, infrastructure (#43)

Lots B1-B4 : modèle de domaine des plugins (manifeste, capacités menus/layouts/MCP),
port et registre applicatif, chargement/validation en infrastructure, exposition DTO
et commandes Tauri. Tests cargo verts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 07:37:03 +02:00
parent 47aacc6da9
commit bb35641715
24 changed files with 4304 additions and 41 deletions

View File

@ -10,6 +10,7 @@ use crate::ids::{
use crate::issue::{IssueLinkKind, IssuePriority, IssueRef, IssueStatus, IssueVersion};
use crate::mailbox::TicketId;
use crate::memory::MemorySlug;
use crate::plugin::{PluginId, PluginMcpServerId, PluginVersion};
use crate::sprint::{SprintOrder, SprintVersion};
use crate::template::TemplateVersion;
@ -41,6 +42,53 @@ pub enum DomainEvent {
/// The new project.
project_id: ProjectId,
},
/// A plugin was installed.
PluginInstalled {
/// Plugin id.
plugin_id: PluginId,
/// Installed version.
version: PluginVersion,
},
/// A plugin was enabled.
PluginEnabled {
/// Plugin id.
plugin_id: PluginId,
},
/// A plugin was disabled.
PluginDisabled {
/// Plugin id.
plugin_id: PluginId,
/// Whether a restart is needed for full JS purge.
restart_required: bool,
},
/// A plugin was uninstalled.
PluginUninstalled {
/// Plugin id.
plugin_id: PluginId,
/// Whether a restart is needed for full JS purge.
restart_required: bool,
},
/// A plugin failed to load.
PluginLoadFailed {
/// Plugin id.
plugin_id: PluginId,
/// Failure reason.
reason: String,
},
/// A plugin MCP server started.
PluginMcpServerStarted {
/// Plugin id.
plugin_id: PluginId,
/// Server id.
server_id: PluginMcpServerId,
},
/// A plugin MCP server stopped.
PluginMcpServerStopped {
/// Plugin id.
plugin_id: PluginId,
/// Server id.
server_id: PluginMcpServerId,
},
/// An agent was launched in a terminal.
AgentLaunched {
/// The agent.