feat(sdk,plugins): API publique d'accès fichiers/workspace + analyse structure (#124,#129)

This commit is contained in:
2026-08-02 13:34:54 +02:00
parent 033e9a86d5
commit dce61ae1aa
27 changed files with 5895 additions and 94 deletions

View File

@ -17,11 +17,12 @@ use std::sync::Arc;
use domain::ports::{
BackgroundTaskPortError, BackgroundTaskRunner, BackgroundTaskSpec, BackgroundTaskStore, Clock,
IdGenerator, SpawnSpec,
EventBus, IdGenerator, SpawnSpec,
};
use domain::{
AgentId, BackgroundTask, BackgroundTaskKind, BackgroundTaskRendezvousLink,
BackgroundTaskResult, BackgroundTaskState, BackgroundTaskWakePolicy, ProjectId, TaskId,
BackgroundTaskResult, BackgroundTaskState, BackgroundTaskWakePolicy, DomainEvent, ProjectId,
TaskId,
};
use crate::error::AppError;
@ -71,6 +72,7 @@ pub struct SpawnBackgroundCommand {
runner: Arc<dyn BackgroundTaskRunner>,
clock: Arc<dyn Clock>,
ids: Arc<dyn IdGenerator>,
events: Option<Arc<dyn EventBus>>,
}
impl SpawnBackgroundCommand {
@ -87,9 +89,17 @@ impl SpawnBackgroundCommand {
runner,
clock,
ids,
events: None,
}
}
/// Attaches the public event stream publisher.
#[must_use]
pub fn with_events(mut self, events: Arc<dyn EventBus>) -> Self {
self.events = Some(events);
self
}
/// Allocates a task id, persists it (`Queued`→`Running`) and spawns it.
///
/// # Errors
@ -145,6 +155,19 @@ impl SpawnBackgroundCommand {
.transition(BackgroundTaskState::Running, now)
.map_err(|e| AppError::Invalid(e.to_string()))?;
self.store.save(&running).await.map_err(map_port_err)?;
if let Some(events) = &self.events {
events.publish(DomainEvent::BackgroundTaskStarted {
project_id,
task_id,
owner_agent_id,
});
events.publish(DomainEvent::BackgroundTaskStateChanged {
project_id,
task_id,
owner_agent_id,
state: BackgroundTaskState::Running,
});
}
let spec = BackgroundTaskSpec {
task_id,
@ -168,6 +191,14 @@ impl SpawnBackgroundCommand {
}) {
let _ = self.store.save(&failed).await;
}
if let Some(events) = &self.events {
events.publish(DomainEvent::BackgroundTaskFailed {
project_id,
task_id,
owner_agent_id,
rendezvous: None,
});
}
return Err(map_port_err(err));
}

View File

@ -155,10 +155,23 @@ pub use permission::{
};
pub use plugin::{
InstallPluginFromArchive, InstallPluginFromDirectory, JsonPluginManifestValidator,
ListPluginRuntimeContributions, ListPlugins, PluginAdmin, PluginContributionSummary,
PluginInstallResult, PluginReview, PluginRuntimeCatalog, PluginRuntimePlugin,
ReconcilePluginMcpServers, ReviewPluginPackage, ReviewPluginPackageInput, SetPluginEnabled,
SetPluginEnabledInput, UninstallPlugin, UninstallPluginInput, UninstallPluginResult,
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, 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,

File diff suppressed because it is too large Load Diff