Skip to content

feat: bring Android to parity with the website - #8

Merged
cheetahbyte merged 12 commits into
mainfrom
android-web-parity
Nov 7, 2026
Merged

cheetahbyte merged 12 commits into
mainfrom
android-web-parity

Conversation

@cheetahbyte

@cheetahbyte cheetahbyte commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

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.

Home: conversation list, search, account button
├── Bot or group chat: back, per-chat menu
└── Account: Memory, Automations, Activity
    └── Settings: grouped sections, General, Sign out
  • Adds account sign-in and sign-up, held-action, job-question and bot-request cards, jobs, group chats, skills, memory and change history, automations, credentials, logins, password managers, connections, admin, avatars and bot desktop.
  • Uses the Crumble app icon, with a themed icon. The bot form shows the portrait with a pencil and edits the avatar in a dialog, as on the web.
  • Replaces the open-bot-avatar-kt submodule with a Gradle source dependency on tag 0.1.0.
  • Also includes the unpushed main commit 31ceab3, 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-tasks passes locally: 575 tests, 0 failures, 0 lint errors, 23 lint warnings not triaged.
  • Audit bugs (tools dropped on save, skills and shared skills overwritten, token sent to a changed server URL) and the launch crash from (?U) regexes have regression tests.
  • Pixel 9 Pro, on an earlier build: sign-in, Home, Account, Settings, General and Providers navigation, the chat menu, and Back behavior.
  • Pixel 9 Pro, on this build: installs and launches without a crash. Screens not checked.
  • Pixel 9 Pro, debug build with 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_HOME in the environment, because local.properties doesn't reach the source dependency, and that dependency disables the Gradle configuration cache.

  • Requires a server on contract 6.0.0.
  • A cold JDK 17 build took 2m17s locally, over the two-minute CI limit. GitHub timing is unknown.
  • Cold JDK 17 builds also failed twice with Maven Central 429s on nativeruntime-dist-compat-1.0.18.jar. The cause is unconfirmed.
  • Known gaps: Mermaid renders as code; no passkeys, invite deep links, /sounds or provider logos. Process death loses forms and the current route. Same-session reconnect deletes drafts.
  • Chat tool cards keep their old borders.

cheetahbyte and others added 12 commits October 26, 2026 17:52
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.
@cheetahbyte
cheetahbyte added this pull request to stack #10 November 7, 2026 15:28
@cheetahbyte
cheetahbyte merged commit 42994a3 into main Nov 7, 2026
1 check passed
@cheetahbyte
cheetahbyte deleted the android-web-parity branch November 7, 2026 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant