A bash permission request arrived as a second card repeating the tool
call's input verbatim, so the same command appeared twice and the reader
had to work out it was one event. `Event::Question` now carries `about`:
the `tool_use_id` the CLI's `can_use_tool` request already names. That
makes the pairing a measured fact rather than a match on input text --
and it stays `Option`, because AskUserQuestion is not permission for
anything and an echo session's question is about no tool at all. Those
still draw as their own card, which is what every question did before.
The card also reads the input instead of dumping it. Every tool's input
is JSON, and showing it raw makes the reader parse `{"command":"…",
"timeout":5000}` to find the line they care about. A small table says
which field is the subject of which tool -- Bash's `command`, Read's
`file_path` -- and the rest is still listed, since dropping a field
would claim the tool had no other input when it might. The subject is
syntax-highlighted with dev.snipme:highlights, for the reason the
markdown renderer is a library: lexical rules are somebody else's
specification. Its theme is Catppuccin, mapped in Theme.kt beside the
rest of the palette rather than taken from the library's defaults.
The input shows whether or not the card is expanded. A row that says
only "Bash" says nothing anyone can act on, least of all when it is
asking to run something.
Verified on the emulator against a real haiku session: one card, the
description, `grep -rn "needle" /tmp | head -3` highlighted, `timeout:
5000` pulled out, and "Allow Bash?" with its buttons inside the card --
then Allow, which resolved in place and ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
70 lines
4.2 KiB
TOML
70 lines
4.2 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"
|
|
# Syntax highlighting for a tool call's input. Same reasoning as the markdown
|
|
# renderer: a language's lexical rules are somebody else's specification.
|
|
# Latest stable, checked 2026-08-29 against Maven Central.
|
|
highlights = "1.0.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" }
|
|
highlights = { module = "dev.snipme:highlights", version.ref = "highlights" }
|
|
# 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" }
|