fix(#108): expose les tools MCP autorisées dès le démarrage de session Codex
This commit is contained in:
@ -185,8 +185,8 @@ impl ProjectMcpToolPermissions {
|
||||
|
||||
/// Resolves the effective policy for `agent_id`.
|
||||
///
|
||||
/// Resolution order: agent override > project default > canonical read-only
|
||||
/// fallback.
|
||||
/// Resolution order: project default enriched by agent override > agent
|
||||
/// override > project default > canonical read-only fallback.
|
||||
///
|
||||
/// # Errors
|
||||
/// [`McpToolPermissionError`] if the document or fallback set is invalid.
|
||||
@ -197,12 +197,24 @@ impl ProjectMcpToolPermissions {
|
||||
known_tools: &[&str],
|
||||
) -> Result<McpToolPolicy, McpToolPermissionError> {
|
||||
self.validate(known_tools)?;
|
||||
if let Some(override_) = self
|
||||
let override_policy = self
|
||||
.agents
|
||||
.iter()
|
||||
.find(|override_| override_.agent_id == agent_id)
|
||||
.map(|override_| &override_.policy);
|
||||
if let (Some(project_default), Some(override_policy)) =
|
||||
(&self.project_default, override_policy)
|
||||
{
|
||||
return Ok(override_.policy.clone());
|
||||
let mut allowed_tools = project_default.allowed_tools.clone();
|
||||
for tool in &override_policy.allowed_tools {
|
||||
if !allowed_tools.iter().any(|allowed| allowed == tool) {
|
||||
allowed_tools.push(tool.clone());
|
||||
}
|
||||
}
|
||||
return McpToolPolicy::new(allowed_tools, known_tools);
|
||||
}
|
||||
if let Some(override_policy) = override_policy {
|
||||
return Ok(override_policy.clone());
|
||||
}
|
||||
if let Some(policy) = &self.project_default {
|
||||
return Ok(policy.clone());
|
||||
@ -236,7 +248,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_override_replaces_project_default() {
|
||||
fn agent_override_extends_project_default() {
|
||||
let project_default =
|
||||
McpToolPolicy::new(vec!["idea_memory_read".to_owned()], KNOWN).unwrap();
|
||||
let override_policy =
|
||||
@ -250,8 +262,8 @@ mod tests {
|
||||
|
||||
let effective = doc.effective_policy(agent(7), READ_ONLY, KNOWN).unwrap();
|
||||
|
||||
assert!(effective.permits("idea_memory_read"));
|
||||
assert!(effective.permits("idea_memory_write"));
|
||||
assert!(!effective.permits("idea_memory_read"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user