mirror of
https://gitea.ingwaz.work/Ingwaz/openbrain-mcp.git
synced 2026-06-15 22:07:08 +00:00
Initial public release
This commit is contained in:
79
src/tools/purge.rs
Normal file
79
src/tools/purge.rs
Normal file
@@ -0,0 +1,79 @@
|
||||
//! Purge Tool - Delete memories by agent_id or time range
|
||||
|
||||
use anyhow::{bail, Context, Result};
|
||||
use chrono::DateTime;
|
||||
use serde_json::Value;
|
||||
use std::sync::Arc;
|
||||
use tracing::{info, warn};
|
||||
|
||||
use crate::AppState;
|
||||
|
||||
/// Execute the purge tool
|
||||
pub async fn execute(state: &Arc<AppState>, arguments: Value) -> Result<String> {
|
||||
// Extract parameters
|
||||
let agent_id = arguments
|
||||
.get("agent_id")
|
||||
.and_then(|v| v.as_str())
|
||||
.context("Missing required parameter: agent_id")?;
|
||||
|
||||
let confirm = arguments
|
||||
.get("confirm")
|
||||
.and_then(|v| v.as_bool())
|
||||
.unwrap_or(false);
|
||||
|
||||
if !confirm {
|
||||
bail!("Purge operation requires 'confirm: true' to proceed");
|
||||
}
|
||||
|
||||
let before = arguments
|
||||
.get("before")
|
||||
.and_then(|v| v.as_str())
|
||||
.map(|s| DateTime::parse_from_rfc3339(s))
|
||||
.transpose()
|
||||
.context("Invalid 'before' timestamp format - use ISO8601/RFC3339")?
|
||||
.map(|dt| dt.with_timezone(&chrono::Utc));
|
||||
|
||||
// Get current count before purge
|
||||
let count_before = state
|
||||
.db
|
||||
.count_memories(agent_id)
|
||||
.await
|
||||
.context("Failed to count memories")?;
|
||||
|
||||
if count_before == 0 {
|
||||
info!("No memories found for agent '{}'", agent_id);
|
||||
return Ok(serde_json::json!({
|
||||
"success": true,
|
||||
"agent_id": agent_id,
|
||||
"deleted": 0,
|
||||
"message": "No memories found to purge"
|
||||
})
|
||||
.to_string());
|
||||
}
|
||||
|
||||
warn!(
|
||||
"Purging memories for agent '{}' (before={:?})",
|
||||
agent_id, before
|
||||
);
|
||||
|
||||
// Execute purge
|
||||
let deleted = state
|
||||
.db
|
||||
.purge_memories(agent_id, before)
|
||||
.await
|
||||
.context("Failed to purge memories")?;
|
||||
|
||||
info!(
|
||||
"Purged {} memories for agent '{}'",
|
||||
deleted, agent_id
|
||||
);
|
||||
|
||||
Ok(serde_json::json!({
|
||||
"success": true,
|
||||
"agent_id": agent_id,
|
||||
"deleted": deleted,
|
||||
"had_before_filter": before.is_some(),
|
||||
"message": format!("Successfully purged {} memories", deleted)
|
||||
})
|
||||
.to_string())
|
||||
}
|
||||
Reference in New Issue
Block a user