wifi-densepose/v2/crates/ruview-swarm/src/ruflo/backend.rs

70 lines
2.6 KiB
Rust

//! RufloBackend trait and shared types.
use async_trait::async_trait;
/// Error type for Ruflo backend operations.
#[derive(Debug, thiserror::Error)]
pub enum RufloError {
#[error("network error: {0}")]
Network(String),
#[error("tool error: {0}")]
Tool(String),
#[error("serialization error: {0}")]
Serialize(String),
}
/// A past mission retrieved from AgentDB memory.
#[derive(Debug, Clone, serde::Deserialize, Default)]
pub struct MissionMemoryEntry {
pub key: String,
pub value: String, // JSON-encoded mission summary
pub score: f32,
}
/// A coordination pattern retrieved from AgentDB pattern store.
#[derive(Debug, Clone, serde::Deserialize, Default)]
pub struct PatternEntry {
pub pattern: String,
pub pattern_type: String,
pub confidence: f32,
pub score: f32,
}
/// Result of an AIDefence MAVLink message scan.
#[derive(Debug, Clone)]
pub struct MavlinkScanResult {
pub safe: bool,
pub threats: Vec<String>,
}
/// Core Ruflo capability trait.
///
/// Two implementations:
/// - `HttpRufloBackend` (feature=ruflo): calls the claude-flow daemon at localhost:3000
/// - `MockRufloBackend`: in-memory mock for testing (always available)
#[async_trait]
pub trait RufloBackend: Send + Sync {
// ── MissionMemory (claude-flow: memory_store / memory_search) ────
async fn store_mission(&self, key: &str, summary: &str, namespace: &str)
-> Result<(), RufloError>;
async fn search_missions(&self, query: &str, limit: usize, namespace: &str)
-> Result<Vec<MissionMemoryEntry>, RufloError>;
// ── PatternLearner (agentdb_pattern-store / agentdb_pattern-search) ─
async fn store_pattern(&self, pattern: &str, pattern_type: &str, confidence: f32)
-> Result<(), RufloError>;
async fn search_patterns(&self, query: &str, top_k: usize, min_confidence: f32)
-> Result<Vec<PatternEntry>, RufloError>;
// ── MavlinkDefence (aidefence_is_safe / aidefence_scan) ──────────
async fn mavlink_is_safe(&self, message_repr: &str) -> Result<bool, RufloError>;
async fn mavlink_scan(&self, message_repr: &str) -> Result<MavlinkScanResult, RufloError>;
// ── IntelligenceHooks (hooks_intelligence_trajectory-*) ──────────
async fn trajectory_start(&self, task: &str, agent: &str)
-> Result<String, RufloError>; // returns trajectoryId
async fn trajectory_step(&self, trajectory_id: &str, action: &str, result: &str, quality: f32)
-> Result<(), RufloError>;
async fn trajectory_end(&self, trajectory_id: &str, success: bool, feedback: Option<&str>)
-> Result<(), RufloError>;
}