feat(mcp): synchronise les permissions MCP avec les tools réellement exposés
Les permissions déclarées ne reflétaient pas toujours les tools effectivement exposés aux agents (contexte requester/projet lié après coup). Ajoute ToolInvoker::tools_for_bound_context/tools_for_context pour exposer la liste effective au moment de l'injection dans une requête OpenAI-compatible, et propage le calcul dans la policy MCP, le serveur, la factory de session et l'adapter openai_compat. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@ -660,6 +660,29 @@ pub trait ToolInvoker: Send + Sync {
|
||||
/// Liste des outils exposés au modèle.
|
||||
fn tools(&self) -> Vec<ToolSpec>;
|
||||
|
||||
/// Liste des outils exposés dans le contexte déjà lié par l'adapter appelant.
|
||||
///
|
||||
/// Les invokers simples peuvent conserver le comportement historique via
|
||||
/// [`Self::tools`]. Les wrappers qui portent déjà l'identité requester et le
|
||||
/// projet peuvent surcharger cette méthode pour refléter les permissions
|
||||
/// effectives au moment où les outils sont exposés au modèle.
|
||||
async fn tools_for_bound_context(&self) -> Result<Vec<ToolSpec>, ToolInvocationError> {
|
||||
Ok(self.tools())
|
||||
}
|
||||
|
||||
/// Liste des outils exposés pour un projet et un requester explicites.
|
||||
///
|
||||
/// Sert aux adapters qui savent résoudre la policy durable à partir du root
|
||||
/// projet et de l'identité agent avant d'injecter les tools dans une requête
|
||||
/// OpenAI-compatible.
|
||||
async fn tools_for_context(
|
||||
&self,
|
||||
_project_root: &str,
|
||||
_requester: &str,
|
||||
) -> Result<Vec<ToolSpec>, ToolInvocationError> {
|
||||
Ok(self.tools())
|
||||
}
|
||||
|
||||
/// Appelle un outil avec ses arguments JSON bruts.
|
||||
///
|
||||
/// # Errors
|
||||
|
||||
Reference in New Issue
Block a user