1extern crate alloc;
4use alloc::string::String;
5use alloc::vec::Vec;
6
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
14pub enum AgentState {
15 Spawned,
16 Running,
17 Suspended,
18 Terminal,
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
25pub enum TerminalReason {
26 Completed,
27 Failed,
28 Killed,
29 Abandoned,
30 HostRestart,
31}
32
33#[derive(Debug, Clone)]
35#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
36pub struct AgentRecord {
37 pub agent_id: String,
38 pub state: AgentState,
39 pub terminal_reason: Option<TerminalReason>,
40 pub provider: String,
41 pub provider_session_id: Option<String>,
42 pub checkpoint_session_id: Option<String>,
43 pub checkpoint_cursor: Option<i64>,
44 pub owner_actor: String,
45 pub owner_peer_class: String,
46 pub owner_write_namespace: String,
47 pub owner_visible_namespaces: Vec<String>,
48 pub spawn_fingerprint: String,
49 pub spawned_at: i64,
50 pub state_changed_at: i64,
51 pub idempotency_key: Option<String>,
52}