Storage Adapters API
Concrete storage implementations that fulfill the protocol contracts defined in the ports layer.
chaoscypher_core.adapters.sqlite.adapter
SQLite Storage Adapter for ChaosCypher Knowledge Engine.
Provides complete SQLite database storage implementation using SQLModel.
Implements the per-domain storage Protocols defined under chaoscypher_core.ports
(storage_workflows, storage_chats, storage_sources, ...).
This adapter requires SQLModel: pip install sqlmodel>=0.0.14
Usage: from chaoscypher_core.adapters.sqlite import SqliteAdapter
adapter = SqliteAdapter(db_path="data/databases/default/app.db") adapter.connect()
Workflow operations
workflow = adapter.create_workflow({ "id": "workflow_001", "database_name": "default", "name": "Research Pipeline", ... })
adapter.disconnect()
Or use as context manager
with SqliteAdapter(db_path="data/app.db") as adapter: workflows = adapter.list_workflows("default")
class SqliteAdapter
SQLite storage adapter implementing all storage protocols.
Provides complete CRUD operations for all ChaosCypher entities using SQLite + SQLModel.
Architecture:
- Entity conversion via SqliteMixinBase (delegates to utils module)
- Implements all storage protocols via mixins (ISP-compliant)
- Uses SQLModel for ORM
- Manages SQLite sessions and transactions
Source file operations are split across 4 focused mixins:
- SourceLifecycleMixin: File CRUD (upload, get, list, delete, update)
- SourceIndexingMixin: Status lifecycle, embeddings, extraction gating
- SourceExtractionJobsMixin: Extraction job CRUD and status
- SourceChunkTasksMixin: Chunk task CRUD, analytics, recovery
Source operations are split across 5 focused mixins:
- SourcesMixin: Core source CRUD (get, create, update, list)
- SourceTagsMixin: Tag CRUD and tag-to-source assignments
- SourceChunksMixin: Document chunk CRUD, batch ops, hierarchical grouping
- SourceCitationsMixin: Citations, stats, orphan detection, bulk clear
- SourceDeletionMixin: Cross-mixin delete-source cascade orchestrator
Example: adapter = SqliteAdapter(db_path="data/app.db") adapter.connect() workflow = adapter.create_workflow({...}) adapter.disconnect()
Bases: WorkflowsMixin, WorkflowExecutionsMixin, ToolsMixin, SourceLifecycleMixin, SourceIndexingMixin, SourceExtractionJobsMixin, SourceChunkTasksMixin, SourceDeletionMixin, SourcesMixin, SourceTagsMixin, SourceChunksMixin, SourceCitationsMixin, SourceRecoveryEventsMixin, ChatsMixin, TriggersMixin, LLMMetricsMixin, ExtractionSubmissionsMixin, SearchRetryQueueMixin, SystemStateMixin
Methods:
connect() -> None
Initialize connection to SQLite database.
NOTE: Tables should already be created via initialize_database() at startup. This method just creates the session for database operations.
disconnect() -> None
Close connection to SQLite database.
transaction() -> Iterator[None]
Group multiple repository writes into a single database transaction.
Inside this context, repository methods call _maybe_commit()
which flushes to the database buffer but does not commit. The
outer transaction commits at context exit, or rolls back on any
exception. Supports nesting — only the outermost context
actually commits / rolls back.
Example: with adapter.transaction(): adapter.source_repository.start_commit(source_id) adapter.graph_repository.delete_graph_data_by_source(source_id)
... more writes ...
All committed atomically here
Attributes:
database_namedb_pathsession:SafeSession | None