refactor(message-log-api): split MessageStore into read-only and mutable interfaces
ci / JVM build + tests (push) Successful in 6m14s

- Introduced `MutableMessageStore` for producers with an `append` operation, separate from read-only `MessageStore`.
- Updated all consumers and implementations to use the appropriate interface (`read-only` for observers, `mutable` for producers).
- Improves modularity and ensures compile-time guarantees against unintended write operations in the audit log.
This commit is contained in:
2026-09-20 21:08:55 +03:00
parent 2cc1d923b3
commit bd65c29b48
11 changed files with 48 additions and 25 deletions
@@ -2,7 +2,7 @@ package pw.binom.agentik.storage.ksqlite
import kotlinx.serialization.json.Json
import pw.binom.agentik.messageLog.MessageRecord
import pw.binom.agentik.messageLog.MessageStore
import pw.binom.agentik.messageLog.MutableMessageStore
import pw.binom.agentik.messageLog.TokenStats
import pw.binom.agentik.messageLog.decodeBodyPayload
import pw.binom.agentik.messageLog.encodeBodyPayload
@@ -24,7 +24,7 @@ import kotlinx.coroutines.withContext
*/
class KsqliteMessageStore(
private val connection: SQLiteConnection,
) : MessageStore {
) : MutableMessageStore {
private val mutex = Mutex()
private val json = Json { ignoreUnknownKeys = true }
@@ -1,7 +1,7 @@
package pw.binom.agentik.storage.ksqlite
import pw.binom.agentik.messageStore.ConversationStore
import pw.binom.agentik.messageLog.MessageStore
import pw.binom.agentik.messageLog.MutableMessageStore
import pw.binom.agentik.messageStore.ReflectionStore
import pw.binom.agentik.workingMemory.WorkingMemoryStore
import pw.binom.db.ksqlite.SQLiteConnection
@@ -18,7 +18,7 @@ import pw.binom.db.ksqlite.SQLiteConnection
class KsqliteStores private constructor(
val connection: SQLiteConnection,
val conversations: ConversationStore,
val messages: MessageStore,
val messages: MutableMessageStore,
val workingMemory: WorkingMemoryStore,
val reflections: ReflectionStore,
) : AutoCloseable {