Skip to main content

khive_storage/
agent.rs

1//! Agent process store capability (ADR-142 ยง1, "Process model").
2
3use async_trait::async_trait;
4use khive_types::{AgentRecord, AgentState, TerminalReason};
5
6use crate::error::StorageError;
7
8/// Durable storage for runtime-owned agent process records.
9#[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}