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:
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -6,7 +6,7 @@ use app_tauri_lib::dto::{
|
||||
parse_agent_id, AgentDto, AgentListDto, CellKind, ConversationDetailsDto,
|
||||
CreateAgentRequestDto, InspectConversationRequestDto, LaunchAgentRequestDto, LiveAgentListDto,
|
||||
TerminalSessionDto, UpdateAgentContactableRequestDto, UpdateAgentContextRequestDto,
|
||||
UpdateAgentEffortRequestDto,
|
||||
UpdateAgentEffortRequestDto, UpdateProjectOrchestratorRequestDto,
|
||||
};
|
||||
use application::AppError;
|
||||
use application::{
|
||||
@ -188,6 +188,17 @@ fn update_agent_contactable_request_deserialises_camelcase() {
|
||||
assert_eq!(dto.agent_id, Uuid::from_u128(2).to_string());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn update_project_orchestrator_request_deserialises_compatible_wire_fields() {
|
||||
let raw = json!({
|
||||
"projectId": Uuid::from_u128(1).to_string(),
|
||||
"agentId": Uuid::from_u128(2).to_string()
|
||||
});
|
||||
let dto: UpdateProjectOrchestratorRequestDto = serde_json::from_value(raw).unwrap();
|
||||
assert_eq!(dto.project_id, Uuid::from_u128(1).to_string());
|
||||
assert_eq!(dto.agent_id, Uuid::from_u128(2).to_string());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn launch_agent_request_deserialises_camelcase() {
|
||||
let project_id = Uuid::from_u128(1).to_string();
|
||||
|
||||
Reference in New Issue
Block a user