halo-agent 0.1.0

Halo Agent and Workflow execution kernel
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};

use crate::Cancellation;
use crate::components::memory::short::Error;
use crate::components::memory::short::Type;
use crate::components::model::token::Usage;

#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum Status {
    Active,
    Archived,
}

#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Session {
    pub id: i64,
    pub tenant_id: i64,
    pub user_id: i64,
    pub r#type: Type,
    pub title: Option<String>,
    pub summary: Option<String>,
    pub usage: Option<Usage>,
    pub status: Status,
    /// Summary coverage markers (`from`/`to`) and application extensions.
    /// Harness reserves `memory` for unfinished background processing. Preserve
    /// it on unrelated updates; it is not Runtime/Checkpoint state.
    pub metadata: Map<String, Value>,
    pub created_time: i64,
    pub updated_time: i64,
}

pub trait Store: Send + Sync {
    fn create(
        &self,
        value: Session,
        cancellation: &Cancellation,
    ) -> impl std::future::Future<Output = Result<Session, Error>>;
    fn read(
        &self,
        id: i64,
        cancellation: &Cancellation,
    ) -> impl std::future::Future<Output = Result<Session, Error>>;
    fn update(
        &self,
        value: Session,
        cancellation: &Cancellation,
    ) -> impl std::future::Future<Output = Result<Session, Error>>;
    fn delete(
        &self,
        id: i64,
        cancellation: &Cancellation,
    ) -> impl std::future::Future<Output = Result<(), Error>>;
}