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)