Files
hapi/android/gradle/libs.versions.toml
T
weishu c2e3d16b7e feat(native): improve anchored chat scrolling and history loading
Add viewport-driven paging with layout acknowledgements, bounded retries, cancellation gates, and epoch-safe history retention.

Preserve transcript anchors and expansion state, fix tool-group identity collisions, and serialize Android history coordination on Main.

Reduce per-scroll composition and layout work; add native regression tests, CI coverage, and profiling guidance.
2026-09-10 16:22:36 +08:00

112 lines
6.7 KiB
TOML

# Version catalog for hapi-android.
# All versions verified to exist on Google Maven / Maven Central at scaffold time.
# Keep conservative: bump deliberately, one PR at a time.
[versions]
agp = "8.11.1"
kotlin = "2.1.21"
composeBom = "2025.05.00"
activityCompose = "1.10.1"
coreKtx = "1.16.0"
kotlinxSerialization = "1.8.1"
kotlinxCoroutines = "1.10.2"
okhttp = "4.12.0"
securityCrypto = "1.1.0"
junit = "4.13.2"
androidxTestRunner = "1.6.2"
turbine = "1.2.0"
# Pairing flow (B-M1d).
# datastore 1.1.7 (2025-06) + navigation-compose 2.9.0 (2025-05) +
# lifecycle 2.9.0 (2025-05) are on Google Maven; zxing-android-embedded 4.3.0
# is the final release on Maven Central (QR scanning without Play Services).
datastore = "1.1.7"
navigationCompose = "2.9.0"
lifecycle = "2.9.0"
zxingEmbedded = "4.3.0"
# Markdown / syntax highlighting (B-M2d1). Both verified on Maven Central:
# org.commonmark 0.24.0 (latest, 2024-10) + dev.snipme:highlights 1.0.0 (KMP, jvm variant).
commonmark = "0.24.0"
highlights = "1.0.0"
# Generated-image loading (B-M2d2). Coil 2.x (stable, OkHttp 4-compatible);
# Coil 3 is a package rename + engine split — migrate deliberately later.
coil = "2.7.0"
# FCM push + notification actions (B-M4a). All on Google Maven:
# work-runtime-ktx 2.10.1 (2025-03), firebase-messaging 24.1.0 (2024-11),
# google-services 4.4.2 (2024-04; applied conditionally, see :app build file).
# fragment 1.8.5 is a version FLOOR constraint only (firebase-messaging drags
# in 1.1.0 transitively, which lintVital rejects next to ActivityResult APIs).
workManager = "2.10.1"
firebaseMessaging = "24.1.0"
googleServices = "4.4.2"
fragment = "1.8.5"
# Per-app locales (B-M5a): AppCompatDelegate.setApplicationLocales back to
# API 26 (appcompat 1.7.1, 2025-06, on Google Maven).
appcompat = "1.7.1"
[libraries]
# AndroidX
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
# Per-app locales (B-M5a): AppCompatActivity + AppCompatDelegate locale APIs.
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "securityCrypto" }
androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" }
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" }
androidx-lifecycle-process = { group = "androidx.lifecycle", name = "lifecycle-process", version.ref = "lifecycle" }
# Compose (versions come from the BOM)
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidxTestRunner" }
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
# Markdown rendering (commonmark-java is pure JVM -- safe for :core:protocol)
commonmark = { group = "org.commonmark", name = "commonmark", version.ref = "commonmark" }
commonmark-ext-gfm-tables = { group = "org.commonmark", name = "commonmark-ext-gfm-tables", version.ref = "commonmark" }
commonmark-ext-gfm-strikethrough = { group = "org.commonmark", name = "commonmark-ext-gfm-strikethrough", version.ref = "commonmark" }
commonmark-ext-autolink = { group = "org.commonmark", name = "commonmark-ext-autolink", version.ref = "commonmark" }
highlights = { group = "dev.snipme", name = "highlights", version.ref = "highlights" }
# KotlinX
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
# Networking
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
okhttp-sse = { group = "com.squareup.okhttp3", name = "okhttp-sse", version.ref = "okhttp" }
# QR scanning (pairing). No Play Services dependency by design (plan track B).
zxing-android-embedded = { group = "com.journeyapps", name = "zxing-android-embedded", version.ref = "zxingEmbedded" }
# Image loading (generated images ride the authed hub OkHttp client).
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
# Push (B-M4a): FCM transport + expedited workers for notification actions.
androidx-work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "workManager" }
firebase-messaging = { group = "com.google.firebase", name = "firebase-messaging", version.ref = "firebaseMessaging" }
# Constraint-only (see :app build file) — nothing in the app uses fragments.
androidx-fragment = { group = "androidx.fragment", name = "fragment", version.ref = "fragment" }
# Testing
junit = { group = "junit", name = "junit", version.ref = "junit" }
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin" }
okhttp-mockwebserver = { group = "com.squareup.okhttp3", name = "mockwebserver", version.ref = "okhttp" }
turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
# Applied conditionally in :app (only when google-services.json exists).
google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" }