agentic_evolve_mcp/tools/
evolve_update_usage.rs1use 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
29pub 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
57pub 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(¶ms.pattern_id, ¶ms.domain, params.success)
68 .map_err(|e| McpError::AgenticEvolve(e.to_string()))?;
69
70 let pattern = session
71 .get_pattern(¶ms.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}