feat(agent): UI hot-swap de profil (A2) — commande Tauri + sélecteur + dialog
- Tauri : commande change_agent_profile + ChangeAgentProfileRequestDto/Dto (camelCase, relaunchedSession omis si None), câblage state.rs par composition. - Front : gateway changeAgentProfile (adapters Tauri+mock), sélecteur de profil par agent, dialog de confirmation FR (« Changer le moteur abandonne l'historique de conversation… »), refresh sur event agentProfileChanged. Tests : app-tauri dto 5/5 ; vitest 314/314 (mapping, payload, dialog gating, libellé FR, refresh). 0 régression. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -9,8 +9,9 @@ use tauri::State;
|
||||
|
||||
use crate::dto::DismissEmbedderSuggestionRequestDto;
|
||||
use application::{
|
||||
AppError, AssignSkillToAgentInput, CloseProjectInput, CreateAgentInput, CreateLayoutInput,
|
||||
CreateMemoryInput, CreateSkillInput, DeleteAgentInput, DeleteEmbedderProfileInput,
|
||||
AppError, AssignSkillToAgentInput, ChangeAgentProfileInput, CloseProjectInput, CreateAgentInput,
|
||||
CreateLayoutInput, CreateMemoryInput, CreateSkillInput, DeleteAgentInput,
|
||||
DeleteEmbedderProfileInput,
|
||||
DeleteLayoutInput, DeleteMemoryInput, DeleteSkillInput, DeleteTemplateInput,
|
||||
DetectAgentDriftInput, GetMemoryInput, GitBranchesInput, GitCheckoutInput, GitCommitInput,
|
||||
GitGraphInput, GitInitInput, GitLogInput, GitStagePathInput, GitStatusInput,
|
||||
@ -27,7 +28,8 @@ use crate::dto::{
|
||||
parse_agent_id, parse_close_terminal, parse_delete_profile, parse_layout_id, parse_memory_slug,
|
||||
parse_node_id, parse_profile_id, parse_project_id, parse_session_id, parse_skill_id,
|
||||
parse_template_id, AgentDriftListDto, AgentDto, AgentListDto, AssignSkillRequestDto,
|
||||
AttachLiveAgentRequestDto, ConfigureProfilesRequestDto, ConversationDetailsDto,
|
||||
AttachLiveAgentRequestDto, ChangeAgentProfileDto, ChangeAgentProfileRequestDto,
|
||||
ConfigureProfilesRequestDto, ConversationDetailsDto,
|
||||
CreateAgentFromTemplateRequestDto, CreateAgentRequestDto, CreateLayoutRequestDto,
|
||||
CreateLayoutResultDto, CreateMemoryRequestDto, CreateProjectRequestDto, CreateSkillRequestDto,
|
||||
CreateTemplateRequestDto, DeleteLayoutRequestDto, DeleteLayoutResultDto,
|
||||
@ -1037,6 +1039,42 @@ pub async fn launch_agent(
|
||||
Ok(TerminalSessionDto::from(output))
|
||||
}
|
||||
|
||||
/// `change_agent_profile` — hot-swap an agent's runtime profile (§15.1).
|
||||
///
|
||||
/// Mutates the profile in the manifest, clears the now-foreign conversation id on
|
||||
/// every persisted layout cell hosting the agent, and — if the agent is live —
|
||||
/// kills its PTY and relaunches the session in the same cell with the new engine.
|
||||
/// Announces [`DomainEvent::AgentProfileChanged`].
|
||||
///
|
||||
/// Returns the mutated [`AgentDto`] and the relaunched [`TerminalSessionDto`] when
|
||||
/// a live session was hot-swapped (absent otherwise).
|
||||
///
|
||||
/// # Errors
|
||||
/// Returns an [`ErrorDto`] (`INVALID` for malformed ids, `NOT_FOUND` if the
|
||||
/// project, agent or target profile is unknown, `STORE`/`FILESYSTEM`/`PROCESS` on
|
||||
/// the respective port failures).
|
||||
#[tauri::command]
|
||||
pub async fn change_agent_profile(
|
||||
request: ChangeAgentProfileRequestDto,
|
||||
state: State<'_, AppState>,
|
||||
) -> Result<ChangeAgentProfileDto, ErrorDto> {
|
||||
let project = resolve_project(&request.project_id, &state).await?;
|
||||
let agent_id = parse_agent_id(&request.agent_id)?;
|
||||
let profile_id = parse_profile_id(&request.profile_id)?;
|
||||
state
|
||||
.change_agent_profile
|
||||
.execute(ChangeAgentProfileInput {
|
||||
project,
|
||||
agent_id,
|
||||
profile_id,
|
||||
rows: request.rows,
|
||||
cols: request.cols,
|
||||
})
|
||||
.await
|
||||
.map(ChangeAgentProfileDto::from)
|
||||
.map_err(ErrorDto::from)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Templates & sync (L7)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user