Skip to content

Release v0.1.51 — quick-wins batch (#98–#108) - #109

Merged
adebnar merged 17 commits into
mainfrom
dev
Jul 18, 2026
Merged

Release v0.1.51 — quick-wins batch (#98–#108)#109
adebnar merged 17 commits into
mainfrom
dev

Conversation

@adebnar

@adebnar adebnar commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Promote devmain for the v0.1.51 stable release. Ships the full quick-wins batch, already on the beta channel and released as v0.1.51-beta.1.

What's included (11 waves, #98#108)

Quality

  • Every wave shipped via subagent-driven development with per-task reviews + an opus whole-branch review before merge to dev.
  • 321 unit tests / 0 failures; gitleaks clean; 0 open HIGH/CRITICAL Dependabot alerts.
  • v0.1.51-beta.1 signed beta APK built + published green.

After merge

Tag v0.1.51 on main to publish the signed production APK.

dependabot Bot and others added 16 commits July 16, 2026 21:08
Bumps the gradle group with 3 updates: [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf), com.google.protobuf:protobuf-kotlin and [gradle-wrapper](https://github.com/gradle/gradle).


Updates `com.google.protobuf:protobuf-java` from 3.25.5 to 3.25.9
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

Updates `com.google.protobuf:protobuf-kotlin` from 3.25.5 to 3.25.9

Updates `gradle-wrapper` from 9.3.1 to 9.6.1
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](gradle/gradle@v9.3.1...v9.6.1)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 3.25.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle
- dependency-name: com.google.protobuf:protobuf-kotlin
  dependency-version: 3.25.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle
- dependency-name: gradle-wrapper
  dependency-version: 9.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
The Sessions tab moved to a flat recency list + Sessions/Projects
toggle (v0.1.50); the old Profile→Workspace grouping tree and its
expansion store are no longer referenced by any production code.
Remove groupSessions/WorkspaceGroup/ProfileGroup, GroupExpansionStore,
the SessionsViewModel collapsedGroups/toggleGroup members, the Hilt
provider, and the now-orphaned tests.
* docs: spec for backend-health signal (quick-wins wave 1)

* docs: implementation plan for backend-health signal

* feat: add GatewayHealth model

* feat: add GatewayHealthMonitor with /api/status probing

* fix: propagate genuine cancellation in GatewayHealthMonitor probe

attemptStatus() caught the generic CancellationException along with
TimeoutCancellationException, silently swallowing real structured-
cancellation (e.g. stopForeground() cancelling periodicJob mid-probe)
and letting evaluate() write a false GatewayUnreachable state. Split
the catch chain so only the timeout subclass is treated as retryable;
any other CancellationException is rethrown.

* feat: add HealthStrip + HealthSheet with pure mapping helpers

* feat: surface backend health as a shell strip, You-tab badge, and detail sheet

* fix: suppress false unreachable signal before a gateway is configured
…ove-for-session) (#99)

* docs: spec for act-on-result inline reply + broader approval (quick-wins wave 3)

* docs: implementation plan for act-on-result inline reply + broader approval

* feat: add reply + approve-for-session notification actions to the mapper

* feat: handle reply + approve-for-session notification actions headlessly

* feat: post inline-reply notification action with RemoteInput

* fix: give the reply PendingIntent a distinct request code

* docs: correct reply mechanism to clarify.respond + request_id (post-review)

* fix: answer clarify via clarify.respond with request_id (reply + in-app)
* docs: spec for QR-scan pairing in setup (client-only)

* docs: implementation plan for QR-scan pairing

* feat: add pairing-QR payload parser

* feat: SetupViewModel.applyPairing populates fields from a scanned QR

* feat: add Scan-QR pairing button to setup (ZXing + CAMERA)

* fix: reject non-URL pairing payloads and make probeLogin not throw on a bad URL
* docs: spec + plan for TTS read-aloud

* feat: add speechText markdown stripper for TTS

* feat: TextToSpeechController + ChatViewModel read-aloud

* feat: Read aloud/Stop item on assistant bubbles

* fix: hide Read aloud when the message has no speakable text
* docs: spec + plan for hermes:// deep links

* feat: add hermes:// deep-link route mapper

* feat: accept hermes:// VIEW intents and guard deep-link navigation

* fix: MainActivity singleTask so hermes:// links reuse the running instance
* docs: spec + plan for home-screen quick-launch widget

* feat: recognise hermes://new deep link

* feat: handle hermes://new to start a new chat

* feat: add home-screen quick-launch widget (Glance)

* fix: guard openNewChat against concurrent new-chat creation
* docs: spec + plan for prompt/snippet library

* feat: SavedPrompt model + pure prompt-list helpers

* feat: PromptStore + prompt-library/chat view-model wiring

* feat: saved-prompts manage screen + composer picker
* docs: spec + plan for thread export/share

* feat: add transcriptText conversation formatter

* feat: Copy/Share transcript overflow menu in the chat top bar

* fix: guard transcript export against oversized payloads; label SYSTEM notices correctly
* docs: spec + plan for approval context enrichment

* feat: extract smart_denied from approval.request events

* feat: show full allowlist grants + smart-denied warning on the approval sheet
* docs: spec + plan for per-tenant persona picker

* feat: parse configured personas from gateway config

* feat: ChatViewModel persona load + apply

* feat: persona picker sheet in the chat overflow menu

* fix: handle default sentinel + persona-apply rejection/failure; keep sheet open until resolved
…108)

* docs: record-to-task (v2) spec + implementation plan

* feat: add transcribe() REST call for /api/audio/transcribe

* feat: audio data-url encoder + RECORD_AUDIO permission

* feat: MediaRecorder-backed AudioRecorder + Hilt provider

* fix: release recorder + delete temp file on record start/read failure

* feat: RecordTaskViewModel orchestrating record→transcribe→new prefilled chat

* fix: guard stopAndTranscribe reentrancy + encode audio off main thread

* feat: record-a-task mic action + sheet on the home session list

* fix: treat explicit null transcript as empty in transcribe()

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces several major features to the Hermes Android client, including voice recording with server-side transcription, a proactive backend-health monitor, support for hermes:// deep links, a home-screen quick-launch widget, a local saved prompts library, Text-to-Speech read-aloud capabilities, chat transcript exporting, and QR-scan pairing during setup. The review feedback highlights critical improvement opportunities: wrapping potentially failing cold-start network calls in error-handling blocks to prevent crashes, explicitly rethrowing CancellationException within coroutine runCatching blocks to ensure proper cancellation propagation, and optimizing regex pattern compilation in the markdown stripper to avoid redundant object allocations.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread app/src/main/java/com/hermes/client/MainActivity.kt Outdated
Comment thread app/src/main/java/com/hermes/client/ui/chat/ChatViewModel.kt Outdated
Comment thread app/src/main/java/com/hermes/client/ui/chat/ChatViewModel.kt
Comment thread app/src/main/java/com/hermes/client/ui/chat/SpeechText.kt
@adebnar
adebnar merged commit 5eee4e0 into main Jul 18, 2026
9 checks passed
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