Two things, both about the transcript telling the truth about itself. Markdown is rendered rather than shown as its source. The parsing is mikepenz/multiplatform-markdown-renderer, not something written here: markdown is somebody else's specification, and a hand-written subset of one disagrees with it at the edges, which is where the bug reports come from. `Markdown.kt` is only the mapping onto this app's palette, so code, links and rules take the Catppuccin values the rest of the app uses rather than the renderer's defaults. The queued-message list was cleared wholesale whenever a turn ended. But the backend holds a queue of its own and takes one message per turn, so a turn ending is precisely the moment the *rest* are still waiting -- the bubbles vanished while the messages were on their way, which reads as everything after the first having been dropped. Now a held message leaves the list exactly two ways: the session reads it, which arrives as a UserMessage, or its send failed and there is nothing to wait for. Measured first, because the report was that the backend dropped them: three messages sent behind one long turn were all delivered in order (ONE, TWO, THREE) against current main, so the loss was in the display. Verified on the emulator: headings, emphasis, inline code, nested lists, a quote bar, a fenced block, a rule and a link all render, and the three queued messages sit through their turn. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
65 lines
3.9 KiB
TOML
65 lines
3.9 KiB
TOML
# Latest stable versions as of 2026-08-28 (checked against Google Maven /
|
|
# Maven Central; prereleases deliberately skipped). zxing-embedded checked
|
|
# 2026-08-25.
|
|
[versions]
|
|
agp = "9.3.2"
|
|
kotlin = "2.4.10"
|
|
compose-multiplatform = "1.12.0"
|
|
# material3 ships on its own release train, separate from the CMP version.
|
|
compose-material3 = "1.9.0"
|
|
androidx-activityCompose = "1.13.0"
|
|
# Declared rather than inherited because this
|
|
# code now calls its extensions directly (SharedPreferences.edit, String
|
|
# .toUri), and a transitive it merely inherited could change under it.
|
|
androidx-core-ktx = "1.19.0"
|
|
zxing-embedded = "4.3.0"
|
|
# Markdown rendering for assistant replies. The widely-used Compose
|
|
# Multiplatform renderer; markdown is somebody else's specification and a
|
|
# hand-written subset disagrees with it at the edges, one bug report at a
|
|
# time. Latest stable, checked 2026-08-29 against Maven Central -- 0.27.0
|
|
# exists only as release candidates.
|
|
markdown-renderer = "0.26.0"
|
|
# Declared rather than inherited for the same reason as core-ktx: SessionScreen
|
|
# now calls repeatOnLifecycle/LocalLifecycleOwner directly, to hold the event
|
|
# stream open only while the screen is on screen. Latest stable, checked
|
|
# 2026-08-29 against Google Maven; activity-compose alone would have pulled
|
|
# 2.9.4.
|
|
androidx-lifecycle = "2.11.0"
|
|
# The Kotlin formatter, run at its defaults (see CODE_RULES rule 27). ktfmt
|
|
# itself is Kotlin-org owned and has almost nothing to configure, which is
|
|
# the point; this is the Gradle wrapper for it. Checked 2026-08-28.
|
|
ktfmt-gradle = "0.27.0"
|
|
# Backports java.time (and more) to API 24, which UsageScreen needs: its
|
|
# reset countdown is OffsetDateTime/Duration, both API 26. Checked
|
|
# 2026-08-28 against Google Maven.
|
|
desugar-jdk-libs = "2.1.5"
|
|
|
|
[libraries]
|
|
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
|
|
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" }
|
|
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
|
# In-app QR scanner: a ready-made scanning Activity (camera preview, runtime
|
|
# permission prompt, flashlight toggle) reached through the AndroidX Activity
|
|
# Result API (ScanContract, added in 4.3.0). Fully offline -- no Play
|
|
# Services / ML Kit model download involved.
|
|
zxing-embedded = { module = "com.journeyapps:zxing-android-embedded", version.ref = "zxing-embedded" }
|
|
desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar-jdk-libs" }
|
|
# The -m3 flavour: it takes its colours and type from the ambient Material 3
|
|
# theme, so the app's Catppuccin scheme is what it draws with.
|
|
markdown-renderer = { module = "com.mikepenz:multiplatform-markdown-renderer-m3", version.ref = "markdown-renderer" }
|
|
# Declared directly rather than through the plugin's `compose.*` accessors,
|
|
# which are deprecated as of CMP 1.11.
|
|
compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" }
|
|
compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose-multiplatform" }
|
|
compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "compose-material3" }
|
|
compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-multiplatform" }
|
|
|
|
[plugins]
|
|
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
|
# For the :link subproject (wg-app-link/app), which resolves its plugins
|
|
# from the build including it rather than from its own catalog.
|
|
androidLibrary = { id = "com.android.library", version.ref = "agp" }
|
|
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
|
|
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
|
ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmt-gradle" }
|