#[derive(Serialize, Deserialize)]
enum WireMessage {
/// Agent → Sandbox: File change notification
Notification {
sequence: u64,
filepath: String,
content_hash: String,
size: u64,
permissions: i64,
is_deletion: bool,
inline_content: Option<Vec<u8>>, // Content for small files (<4KB)
},
/// Agent → Sandbox: Heartbeat with current state
Heartbeat {
agent_sequence: u64,
agent_iteration: i64,
},
/// Sandbox → Agent: Write-back batch
WriteBack {
sandbox_id: String,
entries: Vec<WriteBackEntry>,
},
/// Agent → Sandbox: Write-back results
WriteBackResult {
accepted: Vec<(u64, i64)>, // (local_seq, master_iteration)
rejected: Vec<(u64, String)>, // (local_seq, reason)
},
/// Sandbox → Agent: Barrier request
BarrierRequest { sequence: u64 },
/// Agent → Sandbox: Barrier confirmation
BarrierConfirmation { satisfied: bool, current_sequence: u64 },
/// Sandbox → Agent: Acknowledge processed up to
Ack { up_to_sequence: u64 },
/// Sandbox → Agent: Request content by hash
ContentFetchRequest { content_hash: String },
/// Agent → Sandbox: Content delivery
ContentFetchResponse {
content_hash: String,
content: Vec<u8>,
size: u64,
chunk_manifest: Option<String>, // JSON ChunkManifest for large files
},
/// Agent → Sandbox: Content not found
ContentNotFound { content_hash: String },
/// Sandbox → Agent: Request catchup from sequence
CatchupRequest {
sandbox_id: String,
since_sequence: u64,
},
/// Agent → Sandbox: Full resync required
FullResyncRequired {
reason: String,
current_sequence: u64,
},
}