fix(orchestrator): le lancement d'une cible structurée froide lie la session au fil A-B résolu par ask_agent — #238

ensure_structured_session reçoit désormais le conversation_id déjà résolu et le
transmet au plan de spawn au lieu de retomber sur le fallback User-B. WorkState
et la session lancée pointent ainsi sur le même fil. Test de régression
ask_cold_structured_agent_requester_launches_on_resolved_pair_thread.
This commit is contained in:
2026-08-22 11:30:35 +02:00
parent 963b51a277
commit 5449526157
2 changed files with 77 additions and 5 deletions

View File

@ -1862,7 +1862,13 @@ impl OrchestratorService {
)
})?;
let session = self
.ensure_structured_session(project, agent_id, &agent.profile_id, structured)
.ensure_structured_session(
project,
agent_id,
&agent.profile_id,
structured,
conversation_id,
)
.await?
.ok_or_else(|| {
AppError::Invalid(format!(
@ -2558,6 +2564,7 @@ impl OrchestratorService {
agent_id: AgentId,
profile_id: &ProfileId,
structured: &Arc<StructuredSessions>,
conversation_id: domain::conversation::ConversationId,
) -> Result<Option<Arc<dyn domain::ports::AgentSession>>, AppError> {
// Cible déjà chaude : route directe (aucun lancement).
if let Some(session) = structured.session_for_agent_in_project(project.id, &agent_id) {
@ -2589,7 +2596,7 @@ impl OrchestratorService {
rows: DEFAULT_ROWS,
cols: DEFAULT_COLS,
node_id: None,
conversation_id: None,
conversation_id: Some(conversation_id.to_string()),
mcp_runtime: self
.mcp_runtime_provider
.as_ref()