agent-berth 1.2.0

Monitor and resume coding agents
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

use crate::store::ListedSession;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "op", rename_all = "snake_case")]
pub enum Request {
    Ping,
    Notify {
        provider: String,
        payload: Value,
    },
    List {
        resumable: bool,
        #[serde(default)]
        idle_ms: Option<u64>,
    },
    ListAll,
    Remove {
        provider: String,
        session_id: String,
    },
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum Response {
    Ok {
        #[serde(default, skip_serializing_if = "Option::is_none")]
        message: Option<String>,
        #[serde(default, skip_serializing_if = "Option::is_none")]
        sessions: Option<Vec<ListedSession>>,
    },
    Error {
        message: String,
    },
}

impl Response {
    pub fn ok() -> Self {
        Self::Ok {
            message: None,
            sessions: None,
        }
    }

    pub fn sessions(sessions: Vec<ListedSession>) -> Self {
        Self::Ok {
            message: None,
            sessions: Some(sessions),
        }
    }

    pub fn error(message: impl Into<String>) -> Self {
        Self::Error {
            message: message.into(),
        }
    }
}

#[cfg(test)]
#[path = "protocol_tests.rs"]
mod tests;