feat(agents): role orchestrateur du contexte global expose et configurable par agent — isOrchestrator distinct des permissions MCP, DTO update_project_orchestrator (terminologie wire legacy conservee), refus idea_context_update explicite avec writer effectif + orientation idea_context_propose, surface AgentsPanel + adaptateurs frontend — #276 (QA verte: cargo fmt/check, tests cibles application/app-tauri/infrastructure/backend, npm typecheck, 69/69 tests frontend agents/adapters)

This commit is contained in:
2026-09-07 22:49:12 +02:00
parent ad2c6b4354
commit cb5196fd69
24 changed files with 663 additions and 37 deletions

View File

@ -32,8 +32,8 @@ use application::{
UnassignSkillFromAgentInput, UpdateAgentContactableInput, UpdateAgentContextInput,
UpdateAgentEffortInput, UpdateAgentMcpToolPermissionsInput, UpdateAgentPermissionsInput,
UpdateAgentSystemPermissionsInput, UpdateMemoryInput, UpdateProjectContextInput,
UpdateProjectMcpToolPermissionsInput, UpdateProjectPermissionsInput,
UpdateProjectSystemPermissionsInput, UpdateSkillInput,
UpdateProjectMcpToolPermissionsInput, UpdateProjectOrchestratorInput,
UpdateProjectPermissionsInput, UpdateProjectSystemPermissionsInput, UpdateSkillInput,
};
use backend::stream::OutputSink;
use domain::ports::ModelServerRuntime;
@ -81,7 +81,8 @@ use crate::dto::{
UpdateAgentContactableRequestDto, UpdateAgentContextRequestDto, UpdateAgentEffortRequestDto,
UpdateAgentMcpToolPermissionsRequestDto, UpdateAgentPermissionsRequestDto,
UpdateAgentSystemPermissionsRequestDto, UpdateMemoryRequestDto, UpdateProjectContextRequestDto,
UpdateProjectMcpToolPermissionsRequestDto, UpdateProjectPermissionsRequestDto,
UpdateProjectMcpToolPermissionsRequestDto, UpdateProjectOrchestratorRequestDto,
UpdateProjectOrchestratorResponseDto, UpdateProjectPermissionsRequestDto,
UpdateProjectSystemPermissionsRequestDto, UpdateSkillRequestDto, UpdateTemplateRequestDto,
WriteTerminalRequestDto,
};
@ -800,6 +801,27 @@ pub async fn update_agent_contactable(
.map_err(ErrorDto::from)
}
/// `update_project_orchestrator` — select the single global project-context writer.
///
/// # Errors
/// Returns an [`ErrorDto`] when ids are invalid, the agent is unknown, or persistence fails.
#[tauri::command]
pub async fn update_project_orchestrator(
request: UpdateProjectOrchestratorRequestDto,
state: State<'_, AppState>,
) -> Result<UpdateProjectOrchestratorResponseDto, ErrorDto> {
let project = resolve_project(&request.project_id, &state).await?;
let agent_id = parse_agent_id(&request.agent_id)?;
state
.update_project_orchestrator
.execute(UpdateProjectOrchestratorInput { project, agent_id })
.await
.map(|out| UpdateProjectOrchestratorResponseDto {
orchestrator_agent_id: out.orchestrator.to_string(),
})
.map_err(ErrorDto::from)
}
/// `resolve_agent_permissions` — resolve project defaults plus agent override.
///
/// # Errors

View File

@ -262,6 +262,7 @@ pub fn run() {
commands::update_agent_permissions,
commands::update_agent_effort,
commands::update_agent_contactable,
commands::update_project_orchestrator,
commands::resolve_agent_permissions,
commands::get_project_system_permissions,
commands::update_project_system_permissions,