Session Manager

Conversation session management with SQLite storage.

folderbot.session_manager.validate_topic_name(name)[source]

Normalize and validate a topic name.

Converts to lowercase, replaces spaces/hyphens with underscores, strips non-allowed characters, and validates the result.

Raises ValueError if the result is empty after normalization.

Return type:

str

Parameters:

name (str)

class folderbot.session_manager.Message[source]

Bases: TypedDict

role: str
content: str
timestamp: str
topic: str
class folderbot.session_manager.TopicReassignment[source]

Bases: object

A single topic reassignment instruction.

message_index: int
new_topic: str
__init__(message_index, new_topic)
Parameters:
  • message_index (int)

  • new_topic (str)

Return type:

None

class folderbot.session_manager.UploadRecord[source]

Bases: object

Metadata for an uploaded file.

id: int
user_id: int
original_filename: str
hash_filename: str
extension: str
file_size: int
mime_type: str
created_at: str
__init__(id, user_id, original_filename, hash_filename, extension, file_size, mime_type, created_at)
Parameters:
  • id (int)

  • user_id (int)

  • original_filename (str)

  • hash_filename (str)

  • extension (str)

  • file_size (int)

  • mime_type (str)

  • created_at (str)

Return type:

None

class folderbot.session_manager.TokenUsageRecord[source]

Bases: object

A single token usage record.

id: int
user_id: int
input_tokens: int
output_tokens: int
model: str
topic: str
created_at: str
__init__(id, user_id, input_tokens, output_tokens, model, topic, created_at)
Parameters:
Return type:

None

class folderbot.session_manager.SessionManager[source]

Bases: object

Manages conversation history in SQLite.

__init__(db_path)[source]
Parameters:

db_path (Path)

get_history(user_id, topic=None)[source]

Get conversation history for a user, optionally filtered by topic.

Return type:

list[Message]

Parameters:
  • user_id (int)

  • topic (str | None)

add_message(user_id, role, content, topic='general')[source]

Add a message to the conversation history.

Return type:

None

Parameters:
get_topics(user_id)[source]

Get unique topics with message counts for a user.

Return type:

list[dict]

Parameters:

user_id (int)

update_message_topics(user_id, reassignments)[source]

Bulk-update topic labels on messages by index.

Returns the number of messages actually updated. Raises ValueError if any topic name is invalid or index is out of bounds.

Return type:

int

Parameters:
clear_session(user_id)[source]

Clear conversation history for a user.

Return type:

None

Parameters:

user_id (int)

get_session_info(user_id)[source]

Get session metadata.

Return type:

dict

Parameters:

user_id (int)

get_last_notified_version(user_id)[source]

Get the last version the user was notified about.

Return type:

str | None

Parameters:

user_id (int)

set_last_notified_version(user_id, version)[source]

Set the last version the user was notified about.

Return type:

None

Parameters:
get_file_notifications_enabled(user_id)[source]

Check if file notifications are enabled for a user.

Return type:

bool

Parameters:

user_id (int)

set_file_notifications_enabled(user_id, enabled)[source]

Enable or disable file notifications for a user.

Return type:

None

Parameters:
get_users_with_file_notifications()[source]

Get all user IDs that have file notifications enabled.

Return type:

list[int]

save_upload(user_id, original_filename, hash_filename, extension, file_size, mime_type='application/pdf')[source]

Save upload metadata to the database.

Return type:

UploadRecord

Parameters:
  • user_id (int)

  • original_filename (str)

  • hash_filename (str)

  • extension (str)

  • file_size (int)

  • mime_type (str)

get_uploads(user_id)[source]

Get all uploads for a user.

Return type:

list[UploadRecord]

Parameters:

user_id (int)

get_upload_by_id(upload_id, user_id)[source]

Get a single upload by ID, scoped to a user.

Return type:

UploadRecord | None

Parameters:
  • upload_id (int)

  • user_id (int)

delete_upload(upload_id, user_id)[source]

Delete an upload record. Returns True if a row was deleted.

Return type:

bool

Parameters:
  • upload_id (int)

  • user_id (int)

record_token_usage(user_id, input_tokens, output_tokens, model, topic)[source]

Record token usage from a single LLM call.

Return type:

None

Parameters:
  • user_id (int)

  • input_tokens (int)

  • output_tokens (int)

  • model (str)

  • topic (str)

get_token_usage(user_id, since=None)[source]

Get token usage records for a user, optionally filtered by date.

Return type:

list[TokenUsageRecord]

Parameters:
  • user_id (int)

  • since (str | None)