fix(#108): expose les tools MCP autorisées dès le démarrage de session Codex
This commit is contained in:
@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user