1use async_trait::async_trait;
4use khive_types::{AgentRecord, AgentState, TerminalReason};
5
6use crate::error::StorageError;
7
8#[async_trait]
10pub trait AgentStore: Send + Sync {
11 async fn insert(&self, record: &AgentRecord) -> Result<(), StorageError>;
12 async fn get(&self, agent_id: &str) -> Result<Option<AgentRecord>, StorageError>;
13 async fn update_state(
14 &self,
15 agent_id: &str,
16 state: AgentState,
17 terminal_reason: Option<TerminalReason>,
18 state_changed_at: i64,
19 ) -> Result<(), StorageError>;
20 async fn set_checkpoint(
21 &self,
22 agent_id: &str,
23 checkpoint_session_id: &str,
24 checkpoint_cursor: i64,
25 ) -> Result<(), StorageError>;
26 async fn find_by_idempotency(
27 &self,
28 owner_actor: &str,
29 idempotency_key: &str,
30 ) -> Result<Option<AgentRecord>, StorageError>;
31 async fn find_non_terminal_by_provider_session(
32 &self,
33 provider: &str,
34 provider_session_id: &str,
35 ) -> Result<Option<AgentRecord>, StorageError>;
36 async fn terminate_all_non_terminal(&self, state_changed_at: i64) -> Result<u64, StorageError>;
37}