use crate::types::{CrossShardEdge, ScoredNode, ShardId};
use phago_core::types::{AgentId, NodeId, Position, SignalType, Tick};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StartTickMessage {
pub tick: Tick,
pub initiator: ShardId,
pub timestamp_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrossShardEdgeNotification {
pub edges: Vec<CrossShardEdge>,
pub source_shard: ShardId,
pub tick: Tick,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryScatterRequest {
pub query_id: u64,
pub terms: Vec<String>,
pub max_local_results: usize,
pub embedding: Option<Vec<f32>>,
pub include_ghosts: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryGatherResponse {
pub query_id: u64,
pub shard_id: ShardId,
pub results: Vec<ScoredNode>,
pub term_frequencies: HashMap<String, u64>,
pub total_documents: u64,
pub execution_time_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrossShardSignal {
pub signal_type: SignalType,
pub intensity: f64,
pub position: Position,
pub emitter: AgentId,
pub tick: Tick,
pub source_shard: ShardId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HeartbeatMessage {
pub shard_id: ShardId,
pub current_tick: Tick,
pub agent_count: u64,
pub document_count: u64,
pub node_count: u64,
pub memory_bytes: u64,
pub timestamp_ms: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HeartbeatResponse {
pub acknowledged: bool,
pub expected_tick: Tick,
pub commands: Vec<ShardCommand>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ShardCommand {
Pause,
Resume,
ConsistencyCheck,
Compact,
SyncGhosts,
Shutdown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeTransferRequest {
pub node_id: NodeId,
pub from_shard: ShardId,
pub to_shard: ShardId,
pub include_edges: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeTransferResponse {
pub success: bool,
pub node_id: NodeId,
pub edges_transferred: u64,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchUpdate {
pub updates: Vec<UpdateOperation>,
pub tick: Tick,
pub atomic: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum UpdateOperation {
UpsertNode {
id: NodeId,
label: String,
position: Position,
embedding: Option<Vec<f32>>,
},
UpsertEdge {
from: NodeId,
to: NodeId,
weight: f64,
},
DeleteNode { id: NodeId },
DeleteEdge { from: NodeId, to: NodeId },
IncrementEdge {
from: NodeId,
to: NodeId,
delta: f64,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchUpdateResult {
pub succeeded: u64,
pub failed: u64,
pub errors: HashMap<usize, String>,
}