Repository navigation
Releases: mattferry/billbot-android
Releases · mattferry/billbot-android
Release list
v0.4.0 — Fix streaming, auth, theming & dialogs
Fixes
- Chat streaming (CRITICAL): Messages now accumulate properly instead of showing only the last token
- Assistant text color: Readable on both light and dark themes (was invisible on light)
- Auth handling: Tailscale/local mode no longer sends hardcoded token
- Connect params: Mode changed from
uitooperator, version from BuildConfig - Session rename dialog: No longer targets wrong session after context menu dismissal
- Version display: Settings shows actual build version instead of hardcoded v0.3.0
- Error logging: WebSocket failures now include HTTP status codes
- Build: targetSdk 34→35, versionCode 11
v0.3.1 — Notification Fix & Message Preview
Changes
- Notifications preference enforced: Toggle in settings now actually controls whether notifications are posted
- Message preview in notifications: Chat notifications now show the actual response text (up to 300 chars) instead of generic "New response received"
- Notification ID fix: Fixed bug where wrong notification ID was used for
notify()call
Full Changelog
v0.3.0-alpha — Phase 2: Full Feature Set
Phase 2 Release — 6 Major Features
Session Management (2A)
- Side drawer with session list (swipe from left or tap hamburger menu)
- Create, switch, delete, compact, and rename sessions
- Sessions persisted locally via Room DB
- Dynamic session key — no more hardcoded "android://companion"
Settings Editor (2B)
- Dynamic config form generated from server JSON schema
- Text, number, toggle, and select field types
- Collapsible sections, search filtering
- Save with optimistic concurrency, snackbar feedback
Chat Attachments (2C)
- Camera capture and gallery photo picker
- Image compression: resize to 1024px max edge, JPEG compress to <512KB
- Attachment thumbnails in input bar and message bubbles
- Base64-encoded attachments sent via gateway API
Log Viewer (2D)
- Live log streaming from gateway (2s polling)
- Color-coded by level: ERROR=red, WARN=yellow, DEBUG=dim
- Filter chips (ALL/ERROR/WARN/INFO/DEBUG)
- Auto-scroll with manual override, scroll-to-bottom FAB
- Accessible from Settings → Diagnostics → View Logs
Push Notifications (2E)
- Foreground service (BillBotService) with connectedDevice type
- Three notification channels: chat (HIGH), alerts (DEFAULT), service (LOW)
- Background chat notifications with 5s throttle
- Health/shutdown alert notifications
- Toggle in Settings → Notifications
Login/Auth (2F)
- Expandable authentication section on connection screen
- Three modes: Tailscale (default), Token, Password
- Segmented button selector with mode-specific input fields
- Auth params passed through WebSocket handshake
- Scope-based feature gating from server response
Technical
- Room DB: version 1→2 (sessions table)
- 14 new files, 17 modified files, ~2500 lines changed
- New dependency: lifecycle-process for ProcessLifecycleOwner
- APK: 19MB debug build
v0.2.8 — Chat persists through phone lock
What's New
Chat messages now survive phone lock, app kills, and gateway restarts.
How it works
- Messages are saved to a local SQLite database (Room) as you chat
- When you unlock your phone, the app shows your cached messages immediately — before the WebSocket even reconnects
- Once connected, it refreshes from the server and updates the cache
- "New Chat" clears both server session and local cache
Also includes v0.2.7 fixes
- Stop button works (was sending malformed abort)
- New Chat button works (wrong parameter name)
- No more stuck "thinking" on reconnect
v0.2.7 — Fix stuck thinking & broken stop/reset
Fixes
- Stop button now works:
chat.abortwas missing the requiredsessionKeyparameter — server rejected every abort attempt - New Chat button now works:
sessions.resetwas sendingsessionKeyinstead ofkey— server schema mismatch caused rejection - No more stuck "thinking" on reconnect: App now resets generating state when loading history after reconnect
- Abort is resilient: Stop button clears UI state immediately, even if the server call fails
Root Cause
The gateway got stuck on a reasoning-only response from the model. The app couldn't recover because both abort and reset were sending malformed RPC params that the server rejected.
v0.2.6 - Radeon VII Hardware Metrics
What's New
- Radeon VII hardware monitoring via LibreHardwareMonitor
- GPU temp (color-coded: green <75, yellow <85, red 85+)
- Hot spot temperature
- GPU utilization with progress bar
- Core / memory clocks in MHz
- Power draw (W / 300W TDP)
- Fan speed (RPM + %)
- Radeon VII now appears in Temperatures, GPU Utilization, and Power Draw metric cards
- Graceful degradation: shows "Hardware monitor offline" when LHM is down instead of "not available"
- Removed all "llama.cpp limitation" placeholder notes
Backend (oogleyskr/billbot)
- OpenClaw polls LibreHardwareMonitor
data.jsonendpoint every 15s - LHM JSON tree parser with fallback sensor name matching
hwMonitorEnabled/Host/Portconfig fields inmemoryCortexsection- LHM failure is supplementary — does not degrade overall Memory Cortex status
v0.2.5 - Chat Persistence + New Chat Button
Changes
- Fix chat persistence on screen lock — chat history now reloads from the gateway when the Activity recreates (e.g. after locking the phone), so messages no longer disappear
- New Chat button — top-right icon in the chat screen with a confirmation dialog that resets the server-side session
Install
Download app-debug.apk below and sideload on your Android device.
v0.2.4 - Unified Services + Dashboard Fixes
Changes
Devices view
- Unified Services card: Providers, SSH Tunnels, Memory Cortex, and all Multimodal services combined into one card with status dots and latency
- DGX Spark card now includes system metrics: CPU, RAM, Network In/Out are shown inside the DGX Spark card (no more separate "DGX System" section at the bottom)
Metrics view
- Radeon VII noted: Temperature, GPU Utilization, and Power Draw sections note that Radeon VII hardware metrics aren't available (llama.cpp only exposes VRAM and tok/s — to get temp/util/power we'd need AMD GPU monitoring on Windows)
- Radeon VII VRAM already shows correctly in the VRAM Usage section
- DGX labels fixed to say "DGX Spark" consistently
Install
Download app-debug.apk and install. Requires Tailscale connection.
v0.2.3 - Dashboard Metrics View + Model Names
Changes
- Dashboard Devices/Metrics toggle: Switch between per-device cards (Devices) and grouped metric view (Metrics)
- Metrics view: Temperatures, VRAM, GPU Utilization, Power Draw, CPU/RAM, Network, Service Health all grouped across devices
- Model names on GPU cards: DGX Spark shows "LLM: gpt-oss-120b", RTX 3090 shows all multimodal service models
- Removed Inference card from dashboard (now covered by Tokens page)
- Oogley identity: BillBot now recognizes you as Oogley from the Android app (SOUL.md updated)
- Version bump to 0.2.3
Install
Download app-debug.apk and install on your Android device. Requires Tailscale connection.
v0.2.2 - Chat Loading + RTX 3090 Dashboard
Changes
- Chat loading indicator: Loading spinner now shows immediately when you send a message, not just when BillBot starts streaming
- RTX 3090 on token dashboard: Now shows in the By Device view with its role (Multimodal Services: STT, Vision, TTS, ImageGen)
- Device cards show descriptive roles for non-LLM hardware
- Version bump to 0.2.2
Install
Download app-debug.apk and install on your Android device. Requires Tailscale connection.