services/storage/session_db

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

Types

pub type FtsSearchResult {
  FtsSearchResult(
    session_key: String,
    message_rowid: Int,
    role: String,
    snippet: String,
    timestamp: String,
  )
}

Constructors

  • FtsSearchResult(
      session_key: String,
      message_rowid: Int,
      role: String,
      snippet: String,
      timestamp: String,
    )
pub type PruneResult {
  PruneResult(deleted_count: Int, orphaned_count: Int)
}

Constructors

  • PruneResult(deleted_count: Int, orphaned_count: Int)
pub type RichSessionSummary {
  RichSessionSummary(
    session_key: String,
    source: String,
    persona: String,
    updated_at: String,
    message_count: Int,
    model: String,
    title: String,
    input_tokens: Int,
    output_tokens: Int,
    estimated_cost_usd: Float,
    api_call_count: Int,
    ended_at: String,
    end_reason: String,
  )
}

Constructors

  • RichSessionSummary(
      session_key: String,
      source: String,
      persona: String,
      updated_at: String,
      message_count: Int,
      model: String,
      title: String,
      input_tokens: Int,
      output_tokens: Int,
      estimated_cost_usd: Float,
      api_call_count: Int,
      ended_at: String,
      end_reason: String,
    )
pub type SessionRow {
  SessionRow(
    id: String,
    session_key: String,
    source: String,
    persona: String,
    created_at: String,
    updated_at: String,
    ended_at: String,
    end_reason: String,
    model: String,
    model_config: String,
    system_prompt: String,
    title: String,
    input_tokens: Int,
    output_tokens: Int,
    cache_read_tokens: Int,
    cache_write_tokens: Int,
    reasoning_tokens: Int,
    estimated_cost_usd: Float,
    api_call_count: Int,
    parent_session_id: String,
    resume_pending: Int,
  )
}

Constructors

  • SessionRow(
      id: String,
      session_key: String,
      source: String,
      persona: String,
      created_at: String,
      updated_at: String,
      ended_at: String,
      end_reason: String,
      model: String,
      model_config: String,
      system_prompt: String,
      title: String,
      input_tokens: Int,
      output_tokens: Int,
      cache_read_tokens: Int,
      cache_write_tokens: Int,
      reasoning_tokens: Int,
      estimated_cost_usd: Float,
      api_call_count: Int,
      parent_session_id: String,
      resume_pending: Int,
    )
pub type SessionSummary {
  SessionSummary(
    session_key: String,
    source: String,
    persona: String,
    updated_at: String,
    message_count: Int,
  )
}

Constructors

  • SessionSummary(
      session_key: String,
      source: String,
      persona: String,
      updated_at: String,
      message_count: Int,
    )

Values

pub fn append_message(
  conn: sqlight.Connection,
  session_id: String,
  message: completions.Message,
) -> Result(Nil, String)
pub fn append_message_with_meta(
  conn: sqlight.Connection,
  session_id: String,
  message: completions.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(#(SessionRow, List(completions.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(SessionSummary), String)
pub fn list_sessions(
  conn: sqlight.Connection,
) -> Result(List(SessionSummary), String)
pub fn list_sessions_paginated(
  conn: sqlight.Connection,
  limit: Int,
  offset: Int,
) -> Result(List(SessionSummary), String)
pub fn list_sessions_rich(
  conn: sqlight.Connection,
) -> Result(List(RichSessionSummary), String)
pub fn load_messages(
  conn: sqlight.Connection,
  session_id: String,
) -> Result(List(completions.Message), String)
pub fn load_messages_range(
  conn: sqlight.Connection,
  session_id: String,
  limit: Int,
  offset: Int,
) -> Result(List(completions.Message), String)
pub fn load_session(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(
  option.Option(#(SessionRow, List(completions.Message))),
  String,
)
pub fn load_session_row(
  conn: sqlight.Connection,
  session_key: String,
) -> Result(option.Option(SessionRow), String)
pub fn prune_sessions(
  conn: sqlight.Connection,
  retention_days: Int,
  source_filter: option.Option(String),
) -> Result(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(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