use rmcp::schemars;
use serde::{Deserialize, Serialize};
use super::cursor::Cursor;
use super::types_memory::Visibility;
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct MemoryAuditParams {
#[serde(default, alias = "name")]
pub key: Option<String>,
#[serde(default)]
pub visibility: Visibility,
#[serde(default)]
pub dry_run: bool,
#[serde(default)]
pub limit: Option<u32>,
#[serde(default)]
pub include_archived: bool,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct AuditResult {
pub key: String,
pub state: String,
pub reasons: Vec<String>,
pub archived: bool,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct MemoryAuditResponse {
pub audited: usize,
pub results: Vec<AuditResult>,
}
#[cfg(feature = "memory")]
pub(super) struct AuditVerdict {
pub state: super::types_memory::VerifyState,
pub reasons: Vec<String>,
}
#[cfg(feature = "memory")]
impl AuditVerdict {
pub fn state_str(&self) -> &'static str {
match self.state {
super::types_memory::VerifyState::Unverified => "unverified",
super::types_memory::VerifyState::Verified => "verified",
super::types_memory::VerifyState::Stale => "stale",
}
}
}
#[cfg(feature = "memory")]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub(super) struct ProposalRecord {
pub kind: u8,
pub files: Vec<crate::path::RelPath>,
pub support: u32,
pub window: u32,
pub confidence: f32,
pub description: String,
pub importance: f32,
pub created_at: i64,
}
#[derive(Debug, Default, Deserialize, Serialize, schemars::JsonSchema)]
pub struct ProposalsMineParams {
#[serde(default)]
pub window: Option<u32>,
#[serde(default)]
pub min_support: Option<u32>,
#[serde(default)]
pub min_confidence: Option<f32>,
#[serde(default)]
pub max_files_per_commit: Option<u32>,
}
#[derive(Debug, Default, Deserialize, Serialize, schemars::JsonSchema)]
pub struct ProposalsListParams {
#[serde(default)]
pub kind: Option<String>,
#[serde(default)]
pub limit: Option<u32>,
#[serde(default)]
pub cursor: Option<Cursor>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct ProposalAcceptParams {
pub id: String,
#[serde(default)]
pub key: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, schemars::JsonSchema)]
pub struct ProposalRejectParams {
pub id: String,
#[serde(default)]
pub reason: Option<String>,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct ProposalEntry {
pub id: String,
pub kind: u8,
pub files: Vec<crate::path::RelPath>,
pub support: u32,
pub window: u32,
pub confidence: f32,
pub description: String,
pub importance: f32,
pub created_at: i64,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct ProposalsMineResponse {
pub mined: usize,
pub window_inspected: u32,
pub skipped_bulk: u32,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct ProposalsListResponse {
pub total: usize,
pub truncated: bool,
pub proposals: Vec<ProposalEntry>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<Cursor>,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct ProposalAcceptResponse {
pub accepted: bool,
pub memory_key: String,
}
#[cfg(feature = "memory")]
#[derive(Debug, Serialize)]
pub(super) struct ProposalRejectResponse {
pub rejected: bool,
}