Коммит заменяет SQLDelight на ksqlite и добавляет journal/context/outbox
ci / JVM build + tests (push) Failing after 1m24s

This commit is contained in:
2026-09-21 01:12:31 +03:00
parent bd65c29b48
commit acc7237e51
61 changed files with 1623 additions and 1750 deletions
+6
View File
@@ -6,7 +6,13 @@ plugins {
kotlin {
jvmToolchain(21)
jvm()
macosX64()
macosArm64()
iosX64()
iosArm64()
iosSimulatorArm64()
linuxX64()
linuxArm64()
mingwX64()
sourceSets {
@@ -1,6 +0,0 @@
package pw.binom.agentik.messageLog
sealed interface MessageEvent {
val conversationId: String
data class Appended(override val conversationId: String, val record: MessageRecord) : MessageEvent
}
@@ -1,6 +1,7 @@
package pw.binom.agentik.messageLog
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlin.time.Instant
/**
@@ -17,14 +18,24 @@ interface MessageStore : AutoCloseable {
suspend fun list(conversationId: String, after: Instant, offset: Int, limit: Int): List<MessageRecord>
suspend fun listAll(conversationId: String): List<MessageRecord>
/**
* Subscribe на события append'ов. Default — `emptyFlow()` для store'ов
* без live-уведомлений (например, SQLite без триггеров); impl'ы с
* in-memory notification (`:storage-inmemory`) override'ят.
* Cold-flow paging через [list]. Default-реализация делает N+1 round-trip
* (по странице через `list()` пока не получит короткую страницу). Для
* in-memory backend'ов это OK; remote/SQLite impl'ы могут override'нуть
* на `Channel` / cursor-батчинг, чтобы избежать per-page round-trip.
*/
fun events(): Flow<MessageEvent> = kotlinx.coroutines.flow.emptyFlow()
fun listFlow(conversationId: String, after: Instant, pageSize: Int = PAGE_SIZE): Flow<MessageRecord> = flow {
var offset = 0
while (true) {
val page = list(conversationId, after, offset, pageSize)
if (page.isEmpty()) return@flow
for (rec in page) emit(rec)
if (page.size < pageSize) return@flow
offset += page.size
}
}
suspend fun tokenStats(conversationId: String): TokenStats
}
companion object {
const val PAGE_SIZE = 100
}
}
@@ -1,9 +0,0 @@
package pw.binom.agentik.messageLog
data class TokenStats(
val turns: Int,
val inputTokens: Long,
val outputTokens: Long,
) {
val totalTokens: Long get() = inputTokens + outputTokens
}