Repository navigation
feat: bring Android to parity with the website - #8
Merged
Merged
Conversation
Export the contract from bot commit a321878 as a local pin, since bot no
longer publishes contract releases. Bump the generator to 1.1.0 for
closed objects with declared properties, nullable named schemas and
allOf parts, and */* binary responses.
Send provider keys as `value` and MCP tokens as `{ value }`, and show
change items in the activity feed. Omit `avatar` from bot writes until
the app can render avatar objects, because the server rejects strings.
The server rejects the former server token. Settings now signs in through Better Auth and stores the returned session in the Keystore. The password is not stored.
Caching a chat called first() on an empty list, so every new bot showed "List is empty."
Show these as cards in the chat so a waiting bot can be unblocked from Android. Cards refresh every five seconds while a decision is pending, and stay open with the error when a decision fails.
Pin the contract from bot commit a321878 as a local export and bump the generator to 1.1.0. Sign in with account email and password, because the server rejects the former server token. Show held actions, job questions, and bot requests as cards in the chat. Draw bots with open-bot-avatar-kt, pinned as a submodule, and edit avatars in the bot editor. Fix the "List is empty." error when opening a chat with no messages.
Add group chats, jobs, the bot desktop, skills and memory pages, automations, secrets, connections, admin, general settings, search, and the home page, using 144 of the 149 contract operations. Match the website's navigation: Workspace holds Memory, Automations, and Activity, and Settings is a page listing every section. Fix bot saves that removed tools and replaced skills, sending a saved session to a changed server URL, and a launch crash from a regex flag Android rejects. Add sign-out, and keep the app model and drafts across activity recreation. Replace the avatar submodule with a Gradle source dependency on open-bot-avatar-kt 0.1.0. This disables the configuration cache and requires ANDROID_HOME in the environment.
Replace the drawer with a conversation list on Home and an account button that leads to Memory, Automations, Activity, and Settings. Chats keep only back and a per-chat menu, and the composer becomes a pill with attachment buttons beside a round send button. Add shared grouped rows and tones in NativeLook and apply them across the settings, workspace, job, and bot editor pages.
The reasoning picker took the composer pill's full width, which collapsed the text field. Remove it from chat; the bot editor still sets the level. Replace the two attachment buttons with a panel under the composer, opened from the add button. It only offers images for now.
Replace New bot on Home with New chat, which opens an existing bot, creates a bot, or picks bots for a group chat. Creating a group now only asks for its name, and search leads to the same bot selection. Home lists group chats after the bots, without a section heading.
This was referenced Nov 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings Android to feature parity with the website on bot contract 6.0.0, and rebuilds navigation and styling around Google Messages and Android Settings. Android now uses 144 of the 149 contract operations; the website doesn't use the other 5 either.
open-bot-avatar-ktsubmodule with a Gradle source dependency on tag0.1.0.maincommit31ceab3, which links the canonical glossary.Why
Android covered 47 of the 149 operations, so most website features were missing. Its drawer layout also didn't feel native on Android.
Evidence
./gradlew test lintDebug assembleDebug --rerun-taskspasses locally: 575 tests, 0 failures, 0 lint errors, 23 lint warnings not triaged.(?U)regexes have regression tests.google-services.json: a bot reply arrived as an FCM notification with the app in the background.Not verified on a device: restyled pages, the pill composer and chat sheet, real chat, group chats, bot editing, Sign out, the dark-mode switch, Vision model, Coding, Users, Message gateways, Event relay.
Risk & Rollback
Reversibility: Reversible
Blast Radius: The whole Android client. Debug and release builds need
ANDROID_HOMEin the environment, becauselocal.propertiesdoesn't reach the source dependency, and that dependency disables the Gradle configuration cache.nativeruntime-dist-compat-1.0.18.jar. The cause is unconfirmed./soundsor provider logos. Process death loses forms and the current route. Same-session reconnect deletes drafts.