fix(#108): expose les tools MCP autorisées dès le démarrage de session Codex

This commit is contained in:
2026-07-29 18:19:38 +02:00
parent 2c3a46e690
commit af6b76935c
9 changed files with 251 additions and 89 deletions

View File

@ -597,6 +597,39 @@ mod tests {
.unwrap()
}
fn default_and_override_doc(
agent: AgentId,
project_default_tools: &[&str],
override_tools: &[&str],
) -> ProjectMcpToolPermissions {
let known_tools = infrastructure::orchestrator::mcp::tools::classified_tool_names();
ProjectMcpToolPermissions::new(
Some(
McpToolPolicy::new(
project_default_tools
.iter()
.map(|tool| (*tool).to_owned())
.collect(),
&known_tools,
)
.unwrap(),
),
vec![AgentMcpToolPolicyOverride::new(
agent,
McpToolPolicy::new(
override_tools
.iter()
.map(|tool| (*tool).to_owned())
.collect(),
&known_tools,
)
.unwrap(),
)],
&known_tools,
)
.unwrap()
}
#[test]
fn openai_tool_policy_rejects_tool_outside_allowlist() {
let policies = FakePolicies::default();
@ -864,6 +897,41 @@ mod tests {
let _ = std::fs::remove_dir_all(temp);
}
#[tokio::test]
async fn openai_tools_list_keeps_project_default_tools_with_agent_override() {
let temp = std::env::temp_dir().join(format!(
"idea-openai-mcp-tools-list-override-{}",
Uuid::new_v4()
));
let core = crate::BackendCore::build(temp.clone());
let agent = AgentId::from_uuid(Uuid::from_u128(183));
let invoker = AppOpenAiToolInvoker::new(
Arc::clone(&core.orchestrator_service),
Arc::new(FakeProjects::with(project())) as Arc<dyn ProjectStore>,
Arc::new(FakePolicies::default()),
mcp_permissions(default_and_override_doc(
agent,
&["idea_memory_read", "idea_run_in_background"],
&["idea_memory_read"],
)),
Arc::new(FakeTicketTools::default()),
Arc::new(FakeTemplateTools::default()),
);
let tools = invoker
.tools_for_context("/tmp/project", &agent.to_string())
.await
.expect("tools list should resolve durable policy");
let names = tools
.iter()
.map(|tool| tool.name.as_str())
.collect::<Vec<_>>();
assert_eq!(names, vec!["idea_run_in_background", "idea_memory_read"]);
let _ = std::fs::remove_dir_all(temp);
}
#[tokio::test]
async fn openai_durable_agent_override_allows_explicit_write_tool() {
let temp =