Skip to main content

agentic_evolve_mcp/tools/
evolve_update_usage.rs

1//! Tool: evolve_update_usage — Update usage statistics for a pattern.
2
3use std::sync::Arc;
4use tokio::sync::Mutex;
5
6use serde::Deserialize;
7use serde_json::{json, Value};
8
9use crate::session::SessionManager;
10use crate::types::{McpError, McpResult, ToolCallResult, ToolDefinition};
11
12#[derive(Debug, Deserialize)]
13struct UsageParams {
14    pattern_id: String,
15    #[serde(default = "default_domain")]
16    domain: String,
17    #[serde(default = "default_success")]
18    success: bool,
19}
20
21fn default_domain() -> String {
22    "general".to_string()
23}
24
25fn default_success() -> bool {
26    true
27}
28
29/// Return the tool definition for evolve_update_usage.
30pub fn definition() -> ToolDefinition {
31    ToolDefinition {
32        name: "evolve_update_usage".to_string(),
33        description: Some("Update usage statistics for a pattern after it was applied".to_string()),
34        input_schema: json!({
35            "type": "object",
36            "properties": {
37                "pattern_id": {
38                    "type": "string",
39                    "description": "The unique pattern identifier"
40                },
41                "domain": {
42                    "type": "string",
43                    "default": "general",
44                    "description": "Domain where the pattern was used"
45                },
46                "success": {
47                    "type": "boolean",
48                    "default": true,
49                    "description": "Whether the pattern application was successful"
50                }
51            },
52            "required": ["pattern_id"]
53        }),
54    }
55}
56
57/// Execute the evolve_update_usage tool.
58pub async fn execute(
59    args: Value,
60    session: &Arc<Mutex<SessionManager>>,
61) -> McpResult<ToolCallResult> {
62    let params: UsageParams =
63        serde_json::from_value(args).map_err(|e| McpError::InvalidParams(e.to_string()))?;
64
65    let mut session = session.lock().await;
66    session
67        .update_usage(&params.pattern_id, &params.domain, params.success)
68        .map_err(|e| McpError::AgenticEvolve(e.to_string()))?;
69
70    let pattern = session
71        .get_pattern(&params.pattern_id)
72        .map_err(|e| McpError::AgenticEvolve(e.to_string()))?;
73
74    Ok(ToolCallResult::json(&json!({
75        "pattern_id": params.pattern_id,
76        "recorded": true,
77        "success": params.success,
78        "new_usage_count": pattern.usage_count,
79        "new_success_count": pattern.success_count,
80        "new_confidence": pattern.confidence,
81        "success_rate": pattern.success_rate()
82    })))
83}