ai-app: a phone interface to Claude Code and llama.cpp sessions
A Rust backend that owns the sessions and an Android app that reads them. The server spawns and adopts CLI processes, normalises everything they emit into one event model, keeps the transcript, and serves it over pinned TLS on a WireGuard interface; the phone streams that, replies, sends images, and imports conversations the machine already has. `AGENTS.md` is the working guide -- what runs where, what has been measured, and the faults that were expensive to find. `PLAN.md` is the design record. History before this point was squashed away. It was a personal project's running commentary and carried a name and a couple of machine paths that have no business in a public repository; the tree is what mattered and the tree is here.
This commit is contained in:
commit
b172c464ea
100 files changed
+31795
No files matched your search
@@ -0,0 +1,82 @@
|
||||
# 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.
|
||||
#
|
||||
# Read the version from `maven-metadata.xml`, not from the search API:
|
||||
# `search.maven.org/solrsearch` still answers 0.26.0 with 0.27.0 only as
|
||||
# release candidates, which is what pinned this nineteen releases behind
|
||||
# and cost us table support -- tables arrived in 0.30.0 and simply
|
||||
# rendered as run-together text until then.
|
||||
# https://repo1.maven.org/maven2/com/mikepenz/multiplatform-markdown-renderer-m3/maven-metadata.xml
|
||||
# Latest stable there, checked 2026-08-29.
|
||||
markdown-renderer = "0.45.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-31 against Maven Central.
|
||||
highlights = "1.1.0"
|
||||
# The support ExifInterface rather than android.media's, which lint warns off:
|
||||
# the framework one is missing formats and the fixes for parsing hostile
|
||||
# images, and images here arrive from outside the phone. Latest stable,
|
||||
# checked 2026-08-31 against Google Maven.
|
||||
androidx-exifinterface = "1.4.2"
|
||||
# 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" }
|
||||
androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exifinterface" }
|
||||
# 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" }
|
||||
Reference in new issue
Block a user