agentic_evolve_mcp/tools/
evolve_pattern_get.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 GetParams {
14 pattern_id: String,
15}
16
17pub fn definition() -> ToolDefinition {
19 ToolDefinition {
20 name: "evolve_pattern_get".to_string(),
21 description: Some("Get a pattern by ID".to_string()),
22 input_schema: json!({
23 "type": "object",
24 "properties": {
25 "pattern_id": {
26 "type": "string",
27 "description": "The unique pattern identifier"
28 },
29 "include_content": {
30 "type": "boolean",
31 "default": false,
32 "description": "Include full template content in response"
33 },
34 "intent": {
35 "type": "string",
36 "enum": ["exists", "ids", "summary", "full"],
37 "description": "Response detail level"
38 },
39 "since": {
40 "type": "integer",
41 "description": "Only return data changed after this Unix timestamp"
42 },
43 "token_budget": {
44 "type": "integer",
45 "description": "Maximum token budget for the response"
46 },
47 "max_results": {
48 "type": "integer",
49 "default": 10,
50 "description": "Maximum number of results to return"
51 },
52 "cursor": {
53 "type": "string",
54 "description": "Pagination cursor from a previous response"
55 }
56 },
57 "required": ["pattern_id"]
58 }),
59 }
60}
61
62pub async fn execute(
64 args: Value,
65 session: &Arc<Mutex<SessionManager>>,
66) -> McpResult<ToolCallResult> {
67 let params: GetParams =
68 serde_json::from_value(args).map_err(|e| McpError::InvalidParams(e.to_string()))?;
69
70 let session = session.lock().await;
71 let pattern = session
72 .get_pattern(¶ms.pattern_id)
73 .map_err(|e| McpError::AgenticEvolve(e.to_string()))?;
74
75 Ok(ToolCallResult::json(&json!({
76 "pattern_id": pattern.id.as_str(),
77 "name": pattern.name,
78 "domain": pattern.domain,
79 "language": pattern.language.as_str(),
80 "template": pattern.template,
81 "variables": pattern.variables,
82 "confidence": pattern.confidence,
83 "usage_count": pattern.usage_count,
84 "success_count": pattern.success_count,
85 "success_rate": pattern.success_rate(),
86 "version": pattern.version,
87 "tags": pattern.tags,
88 "created_at": pattern.created_at,
89 "updated_at": pattern.updated_at,
90 "last_used": pattern.last_used,
91 "signature": {
92 "name": pattern.signature.name,
93 "params": pattern.signature.params,
94 "return_type": pattern.signature.return_type,
95 "language": pattern.signature.language.as_str(),
96 "is_async": pattern.signature.is_async
97 }
98 })))
99}