feat(backend): MCP d'édition de templates (#81)

Ajoute le MCP dédié à l'édition de templates : catalogue et classification
des templates (mcp/templates.rs infrastructure + app-tauri), use cases et
provider (application/template), enforcement de la policy des tools (mod.rs,
server.rs, tools.rs), avec la parité côté chemin OpenAI-compatible
(openai_tools.rs x2).

Lots B1 (catalogue/classification), B2 (use cases/provider) et B3
(enforcement policy) livrés en un seul commit cohérent.

QA vert (seul l'échec de bind loopback #80, connu et non-régression, écarté).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 18:45:02 +02:00
parent 448edfc364
commit ef84d5cc49
17 changed files with 1171 additions and 49 deletions

View File

@ -134,9 +134,47 @@ impl UpdateTemplate {
}
// ---------------------------------------------------------------------------
// ListTemplates / DeleteTemplate
// ReadTemplate / ListTemplates / DeleteTemplate
// ---------------------------------------------------------------------------
/// Input for [`ReadTemplate::execute`].
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ReadTemplateInput {
/// Template to read.
pub template_id: TemplateId,
}
/// Output of [`ReadTemplate::execute`].
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ReadTemplateOutput {
/// The requested template.
pub template: AgentTemplate,
}
/// Reads one template from the global store.
pub struct ReadTemplate {
templates: Arc<dyn TemplateStore>,
}
impl ReadTemplate {
/// Builds the use case.
#[must_use]
pub fn new(templates: Arc<dyn TemplateStore>) -> Self {
Self { templates }
}
/// Reads one template.
///
/// # Errors
/// - [`AppError::NotFound`] if the template is unknown,
/// - [`AppError::Store`] on persistence failure.
pub async fn execute(&self, input: ReadTemplateInput) -> Result<ReadTemplateOutput, AppError> {
Ok(ReadTemplateOutput {
template: self.templates.get(input.template_id).await?,
})
}
}
/// Output of [`ListTemplates::execute`].
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ListTemplatesOutput {