fix(backend): identité requester explicite + policy des tools OpenAI-compatible (#62)

AgentSessionFactory::start propage désormais l'identité du requester aux
sessions structurées ; OpenTicketAssistant et LaunchAgent la portent
correctement de bout en bout. ToolPolicyRegistry est branché sur
AppOpenAiToolInvoker pour combler le trou de parité : TicketToolProvider
n'appliquait pas la policy des tools sur le chemin OpenAI-compatible,
contrairement au chemin structuré natif.

QA vert (échecs de bind loopback écartés comme non-régression préexistante,
tracés en #80).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 22:35:17 +02:00
parent a7abd331b8
commit b4a34b40e5
15 changed files with 555 additions and 19 deletions

View File

@ -510,6 +510,7 @@ mod tests {
&prepared_ctx(),
&cwd(),
&SessionPlan::None,
None,
&[],
None,
)
@ -527,6 +528,7 @@ mod tests {
&prepared_ctx(),
&cwd(),
&SessionPlan::None,
None,
&[],
None,
)
@ -558,6 +560,7 @@ mod tests {
&prepared_ctx(),
&temp_cwd("factory-openai"),
&SessionPlan::None,
None,
&[],
None,
)
@ -589,7 +592,7 @@ mod tests {
};
let session = factory
.start(&codex, &ctx, &cwd(), &SessionPlan::None, &[], None)
.start(&codex, &ctx, &cwd(), &SessionPlan::None, None, &[], None)
.await
.expect("start Codex ok");
let content = drain_final(session.as_ref()).await;
@ -623,6 +626,7 @@ mod tests {
&SessionPlan::Resume {
conversation_id: "repris-42".to_owned(),
},
None,
&[],
None,
)
@ -1437,6 +1441,7 @@ mod tests {
&SessionPlan::Resume {
conversation_id: "cx-resume".to_owned(),
},
None,
&[],
None,
)
@ -1461,6 +1466,7 @@ mod tests {
&SessionPlan::Assign {
conversation_id: "ignored-by-engine".to_owned(),
},
None,
&[],
None,
)
@ -1487,7 +1493,15 @@ mod tests {
)
.expect("profil valide");
match factory
.start(&tui, &prepared_ctx(), &cwd(), &SessionPlan::None, &[], None)
.start(
&tui,
&prepared_ctx(),
&cwd(),
&SessionPlan::None,
None,
&[],
None,
)
.await
{
Err(AgentSessionError::Start(_)) => {}