- Cache.sq / ChatDb: lanes, channels and last_lane persisted as JSON snapshots; sanitize on restore (Pending->Failed, streaming->false); ephemeral items (tool, system) skipped - Platform drivers via expect/actual: AndroidSqliteDriver (app db dir) / JdbcSqliteDriver (~/.iris/iris_cache.db) - IrisController: restore before connect, debounced (750ms) snapshot persistence, synchronous flush on dispose, clearAll on forget - History robustness: historyLoaded marked only when the response is processed (lost request/response retried on reconnect); events collector wrapped in try/catch; onHelloAck fast path so the history request fires on the WS thread instead of the starved state collector; frame-decode and history-load logging - Protocol: HistoryMessage.media nullable (defensive vs older gateways that sent "media": null) - Tests: ChatDbTest (jvmTest, JDBC in-memory), ChatStoreCacheTest, HistoryPayloadTest, HistoryWireTest (real captured 92KB response) - docs/10: §10.7 implemented schema, new §10.9 cache behavior
29 lines
1.0 KiB
Kotlin
29 lines
1.0 KiB
Kotlin
// M5: google-services plugin classpath (applied conditionally in :androidApp
|
|
// only when a google-services.json is present; the FCM path is inert without
|
|
// a Firebase project and the ntfy listener is the fallback).
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath("com.google.gms:google-services:4.5.0")
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
kotlin("multiplatform") version "2.4.10" apply false
|
|
kotlin("jvm") version "2.4.10" apply false
|
|
kotlin("plugin.serialization") version "2.4.10" apply false
|
|
id("com.android.application") version "9.3.1" apply false
|
|
id("com.android.kotlin.multiplatform.library") version "9.3.1" apply false
|
|
id("org.jetbrains.compose") version "1.11.1" apply false
|
|
id("org.jetbrains.kotlin.plugin.compose") version "2.4.10" apply false
|
|
// Local cache DB (docs/16: "Local DB (KMP) — SQLDelight").
|
|
id("app.cash.sqldelight") version "2.3.2" apply false
|
|
}
|
|
|
|
tasks.register("clean") {
|
|
delete(rootProject.layout.buildDirectory)
|
|
}
|