services/storage/session_db

Session persistence — CRUD operations on sessions and messages tables. Gateway-agnostic. Works with composable Message types from completions.

Values

pub fn append_message(
  conn: sqlight.Connection,
  session_id: String,
  message: message.Message,
) -> Result(Nil, String)
pub fn append_message_with_meta(
  conn: sqlight.Connection,
  session_id: String,
  message: message.Message,
  finish_reason: String,
  token_count: Int,
  platform_message_id: String,
) -> Result(Nil, String)
pub fn create_session(
  conn: sqlight.Connection,
  session_key: String,
  source: String,
  persona: String,
) -> Result(String, String)
pub fn delete_session(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(Nil, String)
pub fn end_session(
  conn: sqlight.Connection,
  session_id: String,
  reason: String,
) -> Result(Nil, String)
pub fn export_session_json(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(option.Option(String), String)
pub fn find_session_by_title(
  conn: sqlight.Connection,
  title: String,
) -> Result(
  option.Option(#(session.SessionRow, List(message.Message))),
  String,
)
pub fn find_session_for_message(
  conn: sqlight.Connection,
  message_id: Int,
) -> Result(option.Option(String), String)
pub fn generate_id() -> String
pub fn get_child_session_id(
  conn: sqlight.Connection,
  parent_id: String,
) -> Result(option.Option(String), String)
pub fn list_recently_active(
  conn: sqlight.Connection,
  limit: Int,
  source_filter: option.Option(String),
) -> Result(List(session.SessionSummary), String)
pub fn list_sessions(
  conn: sqlight.Connection,
) -> Result(List(session.SessionSummary), String)
pub fn list_sessions_paginated(
  conn: sqlight.Connection,
  limit: Int,
  offset: Int,
) -> Result(List(session.SessionSummary), String)
pub fn list_sessions_rich(
  conn: sqlight.Connection,
) -> Result(List(session.RichSessionSummary), String)
pub fn load_messages(
  conn: sqlight.Connection,
  session_id: String,
) -> Result(List(message.Message), String)
pub fn load_messages_range(
  conn: sqlight.Connection,
  session_id: String,
  limit: Int,
  offset: Int,
) -> Result(List(message.Message), String)
pub fn load_session(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(
  option.Option(#(session.SessionRow, List(message.Message))),
  String,
)
pub fn load_session_row(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(option.Option(session.SessionRow), String)
pub fn prune_sessions(
  conn: sqlight.Connection,
  retention_days: Int,
  source_filter: option.Option(String),
) -> Result(behaviours.PruneResult, String)
pub fn resolve_root_session(
  conn: sqlight.Connection,
  session_id: String,
) -> Result(String, String)
pub fn search_messages(
  conn: sqlight.Connection,
  query: String,
  limit: Int,
  offset: Int,
) -> Result(List(session.FtsSearchResult), String)
pub fn set_platform_message_id(
  conn: sqlight.Connection,
  session_id: String,
  message_index: Int,
  platform_id: String,
) -> Result(Nil, String)
pub fn set_session_title(
  conn: sqlight.Connection,
  session_id: String,
  title: String,
) -> Result(Nil, String)
pub fn suspend_recently_active(
  conn: sqlight.Connection,
  max_age_seconds: Int,
  source_filter: option.Option(String),
) -> Result(Int, String)
pub fn touch_session(
  conn: sqlight.Connection,
  session_id: String,
) -> Result(Nil, String)
pub fn update_session_config(
  conn: sqlight.Connection,
  session_id: String,
  model: String,
  model_config: String,
  system_prompt: String,
) -> Result(Nil, String)
pub fn update_token_counts(
  conn: sqlight.Connection,
  session_id: String,
  input: Int,
  output: Int,
  cache_read: Int,
  cache_write: Int,
  reasoning: Int,
  cost: Float,
) -> Result(Nil, String)
Search Document