use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Channel { pub channel_id: String, pub name: String, pub created_at: String, pub private_git_path: String, pub public_distribution_state: String, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "SCREAMING_SNAKE_CASE")] pub enum SourceKind { UserMessage, PersonaResponse, ExternalAiMessage, SystemContext, ProtocolEvent, AgentAction, ToolResult, SystemReceipt, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TimelineEvent { pub event_id: String, pub source_kind: SourceKind, pub title: String, pub content: String, pub occurred_at: String, pub state: String, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct KnowledgeSummary { pub path: String, pub title: String, pub updated_at: String, pub sha256: String, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct KnowledgeDocument { pub path: String, pub title: String, pub body: String, pub updated_at: String, pub sha256: String, } #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct ExternalAiBridge { pub bridge_id: String, pub display_name: String, pub inbox_path: String, pub outbox_path: String, pub state: String, } #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct SystemSnapshot { pub app_version: String, pub channel: Option, pub timeline: Vec, pub documents: Vec, pub module_registry_version: String, pub public_update_endpoint: String, pub public_distribution_state: String, pub external_ai_bridges: Vec, } #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct MutationReceipt { pub receipt_id: String, pub state: String, pub message: String, pub git_commit: Option, pub event: TimelineEvent, }