use async_trait::async_trait;
use serde_json::Value;
use crate::mcp::core::{error::WorkflowError, nodes::Node, task::TaskContext};
#[derive(Debug, Clone)]
pub struct SendKnowledgeReplyNode;
#[async_trait]
impl Node for SendKnowledgeReplyNode {
async fn execute(&self, input: Value, _context: &TaskContext) -> Result<Value, WorkflowError> {
let response = input
.get("generated_response")
.and_then(|v| v.as_str())
.ok_or_else(|| WorkflowError::ValidationError {
message: "No generated response found".to_string(),
})?;
let response_type = input
.get("response_type")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
let reply_timestamp = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_secs();
println!("Knowledge Base Response ({}): {}", response_type, response);
Ok(serde_json::json!({
"reply_sent": true,
"reply_content": response,
"reply_timestamp": reply_timestamp,
"reply_type": response_type,
"event_data": input.get("event_data").cloned().unwrap_or(input.clone())
}))
}
fn name(&self) -> &str {
"SendKnowledgeReplyNode"
}
}