use mempill_types::{
AgentId, BeliefProjection, Cardinality, ClaimRef, Confidence, Criticality, Disposition,
HistoryEntryStatus, LedgerEntry, ProvenanceLabel, ValidTime,
};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct IngestClaimRequest {
pub agent_id: AgentId,
pub subject: String,
pub predicate: String,
pub value: serde_json::Value,
pub provenance: ProvenanceLabel,
pub cardinality: Cardinality,
pub valid_time: Option<ValidTime>,
pub confidence: Confidence,
pub criticality: Criticality,
pub derived_from: Vec<ClaimRef>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct IngestClaimResponse {
pub claim_ref: ClaimRef,
pub disposition: Disposition,
pub contested_with: Vec<ClaimRef>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct QueryMemoryRequest {
pub agent_id: AgentId,
pub subject: String,
pub predicate: String,
pub as_of_tx_time: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct QueryMemoryResponse {
pub belief: BeliefProjection,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ReconcileRequest {
pub agent_id: AgentId,
pub subject_lines: Vec<(String, String)>, }
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ReconcileResponse {
pub outcomes: Vec<(ClaimRef, Disposition)>,
pub oracle_escalations: u32,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct QueryHistoryRequest {
pub agent_id: AgentId,
pub subject: String,
pub predicate: String,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct HistoryEntry {
pub claim_ref: ClaimRef,
pub value: serde_json::Value,
pub valid_from: Option<chrono::DateTime<chrono::Utc>>,
pub valid_until: Option<chrono::DateTime<chrono::Utc>>,
pub status: HistoryEntryStatus,
pub provenance: String,
pub value_confidence: f32,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct QueryHistoryResponse {
pub entries: Vec<HistoryEntry>,
}
impl QueryHistoryResponse {
pub fn current(&self) -> Option<&HistoryEntry> {
self.entries.iter().find(|e| e.status == HistoryEntryStatus::Current)
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct AuditQueryRequest {
pub agent_id: AgentId,
pub claim_ref: Option<ClaimRef>,
pub from_tx_time: Option<chrono::DateTime<chrono::Utc>>,
pub limit: usize,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct AuditQueryResponse {
pub entries: Vec<LedgerEntry>,
}