diff --git a/CHANGELOG.md b/CHANGELOG.md index aa3432b0f..b92a06f9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,38 +6,46 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this ## [Unreleased] +## [Android 1.19.0] - 2026-10-20 + ### Added -- Android can mute built-in English tool updates independently of assistant readback on Standard and Relay voice output. (#753) -- Android marks unread completed conversations in the session drawer and shows unread conversation counts on profiles and the chat header. -- Reply notifications show the owning agent's official profile name and cached avatar, plus the conversation title. +- Unread markers in the session drawer and counts on profiles and the chat header make background completions easier to find. +- Built-in English tool updates can be muted independently of assistant readback on Standard and Relay voice output. + +### Changed + +- Reply alerts show the owning agent display name, cached avatar, and conversation title. +- Relay session controls distinguish shortening from operator-approved renewal, retain actionable update failures, and make duration controls accessible. +- Settings distinguish phone interruption from host barge-in and explain that Hold mode can still listen for spoken interruption. Saved choices and defaults remain unchanged. ### Fixed -- Android: retry oversized conversation history in smaller pages while preserving message order, compacted history, and memory limits. Individually oversized messages fail explicitly without presenting an empty or partial transcript. -- Android distinguishes phone interruption from host barge-in and explains that Hold mode can still listen for spoken interruption, without changing saved choices or defaults. (#752) -- Android prevents a chat-state race from dropping Final answer only speech requests. (#751) -- Plugin uses the selected speech renderer's model and voice defaults when a profile changes provider, while preserving explicit selections. (#750) -- Android preserves whole-sentence streaming audio and short replies after tool-call gaps, and drains delivered PCM before ending speech. (#704) -- Desktop operations addressed with `device_id` use only the exact authenticated device identity and refuse missing or duplicate targets, without matching another computer's name. -- Android avoids redundant conversation history in Gateway send/recovery responses and pauses automatic conversation reopening after a recorded out-of-memory crash, preserving saved conversations and drafts. (#700) -- Android preserves native Dashboard sign-in during reverse-proxy access failures and retries refresh on a later request when the route is reachable again. (#711) -- Secure Link accepts PEM certificate chains, exports only the leaf certificate for pairing, and reports invalid certificate/key configurations without exposing private file paths. (#712) -- Android keeps ONNX Runtime on 1.27.0 so sherpa-onnx native libs match the packaged runtime ABI. -- Android Voice no longer ends a reply while the last synthesized audio file is still playing, so Continuous mode reopens the microphone only after playback has finished. -- Android session transcript loads request include_compacted=true so reopen keeps compaction-archived scrollback. -- Secure Link supports paired-device listing, session shortening, and revocation with the existing Relay authorization rules. -- Android pauses both wake-word listener modes before voice capture and resumes listening after voice exits, preventing microphone conflicts. (#681) -- Android Relay sessions distinguish shortening from operator-approved renewal, retain actionable update failures, and expose accessible pairing duration controls. (#659) +- Long tools and provider waits stay active. Missing completion events recover from server state, including work started by another client, without sending Stop. +- Oversized history responses retry with smaller pages while keeping the latest 500 messages in order. Individual messages above the safety limit show an explicit error. +- Reopening a conversation includes messages archived by context compaction instead of showing only its summary and recent tail. +- Gateway responses avoid duplicate history transfers. After a recorded out-of-memory crash, automatic reopening pauses while saved conversations and drafts remain intact. +- Temporary reverse-proxy access failures preserve the native Dashboard session and allow a later refresh when the route is reachable again. +- Notification permission defaults refresh after onboarding, and background alerts retain their original connection, profile, and conversation across navigation. +- Replies from different running conversations have separate notification slots. Opening one preserves alerts from the others. +- Chat progress remains above the current composer and clears when the turn finishes or waits for input. +- Both wake-word modes pause before voice capture and resume after voice exits, preventing microphone conflicts. +- Assistant activation waits for microphone startup to finish instead of reporting activation before capture is ready. +- Profile state arriving during connection setup no longer races initialization. +- The selected palette stays applied after the startup loading screen instead of leaving parts of the interface dark. +- Streaming playback retains whole sentences and short replies after tool-call gaps, and drains delivered audio before ending speech. +- Voice waits for the last synthesized audio file to finish before reopening the microphone in Continuous mode, and settles failed playback. +- Final answer only speech no longer disappears during a chat-state race. +- The packaged voice runtime remains aligned with the speech engine native libraries. -- Android avoids a startup crash when profile state arrives during connection setup. -- Android refreshes background-alert permission defaults after onboarding and keeps notification delivery tied to the original connection, profile, and conversation across navigation. -- Replies from conversations left running get separate notification slots; opening one conversation preserves alerts from others. -- Chat progress stays above the composer while scrolling and disappears when the turn finishes or waits for input. -- Android keeps the selected Appearance palette after the startup loading screen instead of leaving parts of the UI dark. (#678) +## [Plugin 1.13.1] - 2026-10-20 -- Android keeps user-started Dashboard browser sign-in connected through its callback and session verification, then ends the foreground service. Callback pages identify the selected sign-in provider. -- Android keeps quiet tools and provider waits alive, including turns submitted by another client, and recovers missing completion events from authoritative Gateway state without sending Stop. +### Fixed + +- Use the selected speech renderer's model and voice defaults when a profile changes provider, while preserving explicit selections. +- Accept Secure Link PEM certificate chains, export only the leaf certificate for pairing, and report invalid certificate/key configurations without exposing private file paths. +- Support paired-device listing, session shortening, and revocation over Secure Link with the existing Relay authorization rules. +- Route desktop operations addressed with device_id only to the exact authenticated device. Missing, duplicate, or conflicting targets fail without name matching or fallback to another computer. ## [0.4.0-beta.10] - 2026-10-08 diff --git a/PLUGIN_RELEASE_NOTES.md b/PLUGIN_RELEASE_NOTES.md index 2d71ccbe3..776fac228 100644 --- a/PLUGIN_RELEASE_NOTES.md +++ b/PLUGIN_RELEASE_NOTES.md @@ -1,23 +1,23 @@ # Hermes-Relay Plugin v__VERSION__ -**Release Date:** October 7, 2026 +**Release Date:** October 20, 2026 ## Summary -Dashboard pairing provides separate Android and CLI+UI choices, clearer connection addresses, and more reliable QR invites. - -## Added - -- CLI+UI pairing invites include route candidates and Secure Link certificate trust. +Secure Link handles certificate chains and paired-session management more reliably. Profile voice output uses the selected renderer's defaults, and exact desktop targets cannot fall back to another computer. ## Fixed -- Connection guidance shows protocols and ports, includes direct Tailscale Relay routes, and avoids assuming a public Relay listener from a Dashboard address. -- Expired and oversized invites show actionable errors. QR codes remain fully visible, and setup distinguishes Plugin activation from discovery. +- Use the selected speech renderer's model and voice defaults when a profile changes provider, while preserving explicit selections. +- Accept Secure Link PEM certificate chains, export only the leaf certificate for pairing, and report invalid certificate/key configurations without exposing private file paths. +- Support paired-device listing, session shortening, and revocation over Secure Link with the existing Relay authorization rules. +- Route desktop operations addressed with device_id only to the exact authenticated device. Missing, duplicate, or conflicting targets fail without name matching or fallback to another computer. ## Compatibility -Full-invite CLI import requires a compatible CLI build newer than the currently published 0.4.0-beta.8. This Plugin release does not publish that companion. Existing Android pairing and legacy CLI connection settings remain supported. +Standard Android Chat and Voice remain upstream-only. This release updates the optional Plugin and does not publish a CLI+UI companion. Friendly desktop names remain supported through the `device` field; `device_id` requires the authenticated identity and fails when that exact target is unavailable or ambiguous. + +Screenshot failure-result masking remains tracked separately in [#743](https://github.com/Codename-11/hermes-relay/issues/743); this release does not claim to resolve every screenshot failure. ## Install / update @@ -29,7 +29,7 @@ Full-invite CLI import requires a compatible CLI build newer than the currently # or, if already installed: hermes-relay-update -Restart or reload the Hermes Dashboard and Relay after updating so the new manifest and provider context are active. +Reload the Plugin and restart Relay after updating so the new server code and tool registrations are active. Existing agent sessions may retain their current tool catalog until the next session. ## Verify diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index eb4656a11..396176efa 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,10 +1,10 @@ -# Hermes-Relay Android v1.18.1 +# Hermes-Relay Android v1.19.0 -**Release Date:** September 29, 2026 +**Release Date:** October 20, 2026 ## Download -> Installing on your phone? Download `hermes-relay-1.18.1-sideload-release.apk` and tap it for the full feature set, or install from [Google Play](https://play.google.com/store/apps/details?id=com.axiomlabs.hermesrelay). +> Installing on your phone? Download `hermes-relay-1.19.0-sideload-release.apk` and tap it for the full feature set, or install from [Google Play](https://play.google.com/store/apps/details?id=com.axiomlabs.hermesrelay). The `.aab` file is a Play Console upload bundle and cannot be installed by tapping it on a phone. @@ -12,19 +12,35 @@ Verify the download against `SHA256SUMS.txt`. See the [sideload guide](https://h ## Summary -Dashboard browser sign-in remains connected while a provider completes authentication and Hermes-Relay verifies the session. Callback pages identify the selected provider. +Larger conversations open more reliably, quiet turns recover without interruption, and unread replies are easier to find. Voice playback, microphone handoff, sign-in, and startup appearance receive reliability fixes. + +## Added + +- Unread conversation markers and counts in Sessions, profiles, and the chat header. +- Optional muting of built-in English tool announcements independently of assistant readback. ## Changed -- Browser callback success and error pages show the selected provider and use guidance that applies to self-hosted and hosted Hermes. +- Reply notifications identify the agent and conversation. +- Pairing controls distinguish shortening from operator-approved renewal and retain actionable errors. +- Voice settings distinguish phone interruption from host barge-in and explain Hold mode without changing defaults. ## Fixed -- A bounded sign-in foreground service keeps the browser callback and session verification connected while Hermes-Relay is in the background. It ends after completion, cancellation, or timeout. +- Oversized history pages retry in smaller windows while preserving the recent 500-message window, order, compacted scrollback, profile scope, and existing memory guards. Complete reads retain their aggregate safety limits; individually oversized messages fail explicitly. +- Gateway replies avoid duplicate history transfers. Automatic conversation restoration pauses after a recorded out-of-memory crash while saved conversations and drafts remain intact. +- Quiet tools and missing completion events recover from authoritative Gateway state without sending Stop. +- Temporary reverse-proxy failures preserve native Dashboard sign-in. +- Background alerts retain conversation ownership, refresh onboarding permission defaults, and keep separate notification slots. Chat progress remains above the current composer. +- Wake-word listeners hand the microphone to voice capture; assistant activation waits for microphone startup. +- Streaming speech preserves whole sentences and short replies after tool gaps. File playback drains before Continuous mode listens again, and Final answer only speech survives chat-state races. +- Native voice runtime compatibility, profile-state startup ordering, and the saved Appearance palette remain consistent after startup. ## Install / Verify -- App version: **1.18.1** (versionCode **59**). -- Standard Chat, sessions, profiles, Manage, and Standard Voice use current upstream Hermes. The optional Hermes-Relay Plugin **1.12.0** supplies Relay tools and Secure Link host support. -- Existing saved connections, profiles, sessions, history, and drafts remain in place. -- Basic/password, self-hosted OIDC, and Nous sign-in passed on a physical Samsung device with Battery Saver off. Other OEMs, Battery Saver-on behavior, and process death during provider UI were not separately verified. +- App version: **1.19.0** (versionCode **60**). +- Standard Chat, history, Manage, and Standard Voice use current upstream Hermes. The optional Hermes-Relay Plugin **1.13.1** supplies Relay tools and Secure Link host fixes. +- Existing connections, profiles, sessions, history, drafts, and composer layout are preserved. +- History recovery is covered by production HTTP fixtures and a Standard Phone API 36 rendered failure/reopen test. These checks do not certify behavior on every physical device. +- Recent voice changes have source and fixture coverage; physical listening verification remains incomplete. +- Screenshot upload authentication through Dashboard ingress remains tracked separately in [#745](https://github.com/Codename-11/hermes-relay/issues/745). This release does not claim to fix all screenshot behavior. diff --git a/app/src/googlePlay/play/release-notes/en-US/default.txt b/app/src/googlePlay/play/release-notes/en-US/default.txt index 57d7f5048..8c33b3d5e 100644 --- a/app/src/googlePlay/play/release-notes/en-US/default.txt +++ b/app/src/googlePlay/play/release-notes/en-US/default.txt @@ -1,3 +1,3 @@ -v1.18.1 - Reliable browser sign-in +v1.19.0 - Reliable chats, alerts, and voice -Browser sign-in stays connected while you complete your provider's flow and return to Hermes-Relay. The sign-in notification ends when the attempt finishes or is canceled, and callback pages identify the selected provider. +Open larger conversations with safer history loading and keep compacted scrollback. Find unread background replies with clearer alerts and counts. Voice preserves complete replies, hands off the microphone reliably, and offers optional muting of English tool announcements. Sign-in survives temporary proxy failures, pairing lifetime controls are clearer, and your selected appearance stays applied after startup. diff --git a/app/src/main/assets/changelog.json b/app/src/main/assets/changelog.json index adeac636e..8e171823c 100644 --- a/app/src/main/assets/changelog.json +++ b/app/src/main/assets/changelog.json @@ -1,6 +1,151 @@ { "schema": 3, "versions": [ + { + "version": "1.19.0", + "title": "Reliable chats, alerts, and voice", + "date": "2026-10-20", + "summary": "Larger conversations open more reliably, background replies are easier to find, and voice playback preserves complete answers. Sign-in, microphone handoff, pairing controls, and startup appearance are more dependable.", + "changes": [ + { + "id": "quiet-turn-recovery", + "kind": "fixed", + "title": "Keep quiet conversations running", + "summary": "Long tools and provider waits stay active. Missing completion events recover from server state, including work started by another client, without sending Stop.", + "highlight": true + }, + { + "id": "bounded-history-recovery", + "kind": "fixed", + "title": "Open larger conversations", + "summary": "Oversized history responses retry with smaller pages while keeping the latest 500 messages in order. Individual messages above the safety limit show an explicit error.", + "highlight": true + }, + { + "id": "compacted-history", + "kind": "fixed", + "title": "Keep compacted scrollback", + "summary": "Reopening a conversation includes messages archived by context compaction instead of showing only its summary and recent tail." + }, + { + "id": "conversation-memory-recovery", + "kind": "fixed", + "title": "Recover safely after memory pressure", + "summary": "Gateway responses avoid duplicate history transfers. After a recorded out-of-memory crash, automatic reopening pauses while saved conversations and drafts remain intact." + }, + { + "id": "dashboard-signin-preservation", + "kind": "fixed", + "title": "Keep sign-in during proxy failures", + "summary": "Temporary reverse-proxy access failures preserve the native Dashboard session and allow a later refresh when the route is reachable again." + }, + { + "id": "unread-conversations", + "kind": "added", + "title": "Find completed replies you have not read", + "summary": "Unread markers in the session drawer and counts on profiles and the chat header make background completions easier to find.", + "highlight": true + }, + { + "id": "reply-notification-identity", + "kind": "improved", + "title": "Recognize reply notifications", + "summary": "Reply alerts show the owning agent display name, cached avatar, and conversation title." + }, + { + "id": "background-alert-reliability", + "kind": "fixed", + "title": "Keep alerts with their conversation", + "summary": "Notification permission defaults refresh after onboarding, and background alerts retain their original connection, profile, and conversation across navigation." + }, + { + "id": "conversation-notification-slots", + "kind": "fixed", + "title": "Keep separate conversation alerts", + "summary": "Replies from different running conversations have separate notification slots. Opening one preserves alerts from the others." + }, + { + "id": "chat-progress-position", + "kind": "fixed", + "title": "Keep progress visible while scrolling", + "summary": "Chat progress remains above the current composer and clears when the turn finishes or waits for input." + }, + { + "id": "wake-microphone-handoff", + "kind": "fixed", + "title": "Hand the microphone to voice reliably", + "summary": "Both wake-word modes pause before voice capture and resume after voice exits, preventing microphone conflicts." + }, + { + "id": "assistant-microphone-startup", + "kind": "fixed", + "title": "Wait for assistant microphone startup", + "summary": "Assistant activation waits for microphone startup to finish instead of reporting activation before capture is ready." + }, + { + "id": "relay-session-lifetime", + "kind": "improved", + "title": "Manage pairing lifetime clearly", + "summary": "Relay session controls distinguish shortening from operator-approved renewal, retain actionable update failures, and make duration controls accessible." + }, + { + "id": "profile-startup-race", + "kind": "fixed", + "title": "Avoid a connection startup crash", + "summary": "Profile state arriving during connection setup no longer races initialization." + }, + { + "id": "appearance-startup-handoff", + "kind": "fixed", + "title": "Keep the selected Appearance palette", + "summary": "The selected palette stays applied after the startup loading screen instead of leaving parts of the interface dark." + }, + { + "id": "streaming-voice-playback", + "kind": "fixed", + "title": "Preserve complete streaming replies", + "summary": "Streaming playback retains whole sentences and short replies after tool-call gaps, and drains delivered audio before ending speech.", + "highlight": true + }, + { + "id": "voice-playback-completion", + "kind": "fixed", + "title": "Finish playback before listening again", + "summary": "Voice waits for the last synthesized audio file to finish before reopening the microphone in Continuous mode, and settles failed playback." + }, + { + "id": "final-answer-speech", + "kind": "fixed", + "title": "Read final answers reliably", + "summary": "Final answer only speech no longer disappears during a chat-state race." + }, + { + "id": "voice-runtime-compatibility", + "kind": "fixed", + "title": "Keep native voice components compatible", + "summary": "The packaged voice runtime remains aligned with the speech engine native libraries." + }, + { + "id": "voice-interruption-guidance", + "kind": "improved", + "title": "Understand interruption controls", + "summary": "Settings distinguish phone interruption from host barge-in and explain that Hold mode can still listen for spoken interruption. Saved choices and defaults remain unchanged." + }, + { + "id": "voice-tool-announcements", + "kind": "added", + "title": "Mute English tool announcements", + "summary": "Built-in English tool updates can be muted independently of assistant readback on Standard and Relay voice output." + } + ], + "compatibility": [ + "Standard Chat, history, Manage, and Standard Voice continue to use upstream Hermes without requiring the optional Hermes-Relay Plugin.", + "Relay pairing and extension features use the optional Plugin. Plugin 1.13.1 adds Secure Link session-management routes and host reliability fixes.", + "History remains bounded on Android: up to 500 recent messages, an 8 MiB page limit, and aggregate limits for complete reads. Oversized individual messages require Dashboard access." + ], + "playNotes": "Open larger conversations with safer history loading and keep compacted scrollback. Find unread background replies with clearer alerts and counts. Voice preserves complete replies, hands off the microphone reliably, and offers optional muting of English tool announcements. Sign-in survives temporary proxy failures, pairing lifetime controls are clearer, and your selected appearance stays applied after startup.", + "sections": [] + }, { "version": "1.18.1", "title": "Reliable browser sign-in", diff --git a/app/src/main/assets/whats_new.txt b/app/src/main/assets/whats_new.txt index 4026e09c5..b2b2fb6f1 100644 --- a/app/src/main/assets/whats_new.txt +++ b/app/src/main/assets/whats_new.txt @@ -1,13 +1,38 @@ -v1.18.1 - Reliable browser sign-in +v1.19.0 - Reliable chats, alerts, and voice Summary -* Dashboard browser sign-in stays connected while you complete the provider flow and return to Hermes-Relay. Callback pages show which provider handled the attempt. +* Larger conversations open more reliably, background replies are easier to find, and voice playback preserves complete answers. Sign-in, microphone handoff, pairing controls, and startup appearance are more dependable. Highlights -* Finish browser sign-in — The app keeps the sign-in callback and session check connected while the browser is open, then ends the sign-in notification when the attempt finishes or is canceled. +* Keep quiet conversations running — Long tools and provider waits stay active. Missing completion events recover from server state, including work started by another client, without sending Stop. +* Open larger conversations — Oversized history responses retry with smaller pages while keeping the latest 500 messages in order. Individual messages above the safety limit show an explicit error. +* Find completed replies you have not read — Unread markers in the session drawer and counts on profiles and the chat header make background completions easier to find. +* Preserve complete streaming replies — Streaming playback retains whole sentences and short replies after tool-call gaps, and drains delivered audio before ending speech. + +Added +* Mute English tool announcements — Built-in English tool updates can be muted independently of assistant readback on Standard and Relay voice output. Improved -* Recognize the sign-in provider — Browser callback success and error pages identify the selected provider and use guidance that applies to self-hosted and hosted Hermes. +* Recognize reply notifications — Reply alerts show the owning agent display name, cached avatar, and conversation title. +* Manage pairing lifetime clearly — Relay session controls distinguish shortening from operator-approved renewal, retain actionable update failures, and make duration controls accessible. +* Understand interruption controls — Settings distinguish phone interruption from host barge-in and explain that Hold mode can still listen for spoken interruption. Saved choices and defaults remain unchanged. + +Fixed +* Keep compacted scrollback — Reopening a conversation includes messages archived by context compaction instead of showing only its summary and recent tail. +* Recover safely after memory pressure — Gateway responses avoid duplicate history transfers. After a recorded out-of-memory crash, automatic reopening pauses while saved conversations and drafts remain intact. +* Keep sign-in during proxy failures — Temporary reverse-proxy access failures preserve the native Dashboard session and allow a later refresh when the route is reachable again. +* Keep alerts with their conversation — Notification permission defaults refresh after onboarding, and background alerts retain their original connection, profile, and conversation across navigation. +* Keep separate conversation alerts — Replies from different running conversations have separate notification slots. Opening one preserves alerts from the others. +* Keep progress visible while scrolling — Chat progress remains above the current composer and clears when the turn finishes or waits for input. +* Hand the microphone to voice reliably — Both wake-word modes pause before voice capture and resume after voice exits, preventing microphone conflicts. +* Wait for assistant microphone startup — Assistant activation waits for microphone startup to finish instead of reporting activation before capture is ready. +* Avoid a connection startup crash — Profile state arriving during connection setup no longer races initialization. +* Keep the selected Appearance palette — The selected palette stays applied after the startup loading screen instead of leaving parts of the interface dark. +* Finish playback before listening again — Voice waits for the last synthesized audio file to finish before reopening the microphone in Continuous mode, and settles failed playback. +* Read final answers reliably — Final answer only speech no longer disappears during a chat-state race. +* Keep native voice components compatible — The packaged voice runtime remains aligned with the speech engine native libraries. Compatibility -* Browser sign-in continues to use upstream Hermes Dashboard; no Hermes-Relay Plugin update is required. +* Standard Chat, history, Manage, and Standard Voice continue to use upstream Hermes without requiring the optional Hermes-Relay Plugin. +* Relay pairing and extension features use the optional Plugin. Plugin 1.13.1 adds Secure Link session-management routes and host reliability fixes. +* History remains bounded on Android: up to 500 recent messages, an 8 MiB page limit, and aggregate limits for complete reads. Oversized individual messages require Dashboard access. diff --git a/app/src/test/kotlin/com/hermesandroid/relay/screenshots/WhatsNewToastScreenshotTest.kt b/app/src/test/kotlin/com/hermesandroid/relay/screenshots/WhatsNewToastScreenshotTest.kt index d4e5c93b9..68557bdb8 100644 --- a/app/src/test/kotlin/com/hermesandroid/relay/screenshots/WhatsNewToastScreenshotTest.kt +++ b/app/src/test/kotlin/com/hermesandroid/relay/screenshots/WhatsNewToastScreenshotTest.kt @@ -128,7 +128,7 @@ class WhatsNewToastScreenshotTest { private fun com.hermesandroid.relay.ui.components.ChangelogToastDigest.countText(): String = buildList { if (additionalFeatureCount > 0) { - add("$additionalFeatureCount additional ${if (additionalFeatureCount == 1) "feature" else "features"}") + add("$additionalFeatureCount ${if (additionalFeatureCount == 1) "feature" else "features"}") } if (improvementCount > 0) { add("$improvementCount ${if (improvementCount == 1) "improvement" else "improvements"}") diff --git a/docs/play-store-listing.md b/docs/play-store-listing.md index b9c117e24..aa77b6f2c 100644 --- a/docs/play-store-listing.md +++ b/docs/play-store-listing.md @@ -91,9 +91,9 @@ This app is a community project and is not affiliated with or endorsed by NousRe Paste into Play Console → **What's new** (≤500 characters): ``` -v1.18.1 - Reliable browser sign-in +v1.19.0 - Reliable chats, alerts, and voice -Browser sign-in stays connected while you complete your provider's flow and return to Hermes-Relay. The sign-in notification ends when the attempt finishes or is canceled, and callback pages identify the selected provider. +Open larger conversations with safer history loading and keep compacted scrollback. Find unread background replies with clearer alerts and counts. Voice preserves complete replies, hands off the microphone reliably, and offers optional muting of English tool announcements. Sign-in survives temporary proxy failures, pairing lifetime controls are clearer, and your selected appearance stays applied after startup. ``` ## Category diff --git a/docs/project/DEVLOG.md b/docs/project/DEVLOG.md index 0bc4beb65..9c37a2fe3 100644 --- a/docs/project/DEVLOG.md +++ b/docs/project/DEVLOG.md @@ -1,5 +1,13 @@ # Hermes-Relay — Dev Log +## 2026-10-20 — Android 1.19.0 and Plugin 1.13.1 release preparation + +Prepared Android 1.19.0 (versionCode 60) and Plugin 1.13.1 from integrated reliability work, including oversized-history recovery in #767. CLI+UI remains 0.4.0-beta.10. Android copy includes 21 typed changes and four highlights; Plugin copy covers certificate chains, Secure Link session routes, speech renderer defaults, and strict authenticated desktop routing. + +History recovery passed 156 focused JVM tests, 40 shared Gateway fixture tests, current-upstream scenario conformance, and a Standard Phone API 36 rendered failure/reopen test. Hosted lint, debug builds, and focused tests passed for #767; the test lane required a retry after Maven HTTP 429 responses. Plugin source checks passed 78 tests and 58 subtests locally with nine platform/tool skips. Physical listening validation of recent voice changes remains incomplete. Screenshot reports #745 and #743 remain separate. + +Publication and deployment require the release-prepared tree's CI, signed Play preflight, protected promotion, immutable-tag workflows, and live verification. + ## 2026-10-08 — CLI+UI beta.10 released and verified Published [Hermes-Relay CLI+UI 0.4.0-beta.10](https://github.com/Codename-11/hermes-relay/releases/tag/desktop-v0.4.0-beta.10) from immutable commit `95b74c91e5503fdb607ab793d74c2d99fef96ecc`. Structured CUA element actions accept current handles, including hexadecimal snapshot generations, and Activity distinguishes recorded CUA, system capture, compatibility, and missing backend metadata. Android and Plugin versions and the Bun 1.3.14 pin are unchanged. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8ee9f1f58..7cd01c99f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -appVersionName = "1.18.1" -appVersionCode = "59" +appVersionName = "1.19.0" +appVersionCode = "60" agp = "9.4.1" kotlin = "2.4.21" compose-bom = "2026.09.00" diff --git a/plugin/dashboard/manifest.json b/plugin/dashboard/manifest.json index b864e5b97..6d1d85ae7 100644 --- a/plugin/dashboard/manifest.json +++ b/plugin/dashboard/manifest.json @@ -3,7 +3,7 @@ "label": "Hermes-Relay", "description": "Paired devices, Bridge activity, media tokens, and remote access for Hermes-Relay", "icon": "Activity", - "version": "1.13.0", + "version": "1.13.1", "tab": { "path": "/relay", "position": "after:skills" diff --git a/plugin/dashboard/package-lock.json b/plugin/dashboard/package-lock.json index 6f867e218..b37091f17 100644 --- a/plugin/dashboard/package-lock.json +++ b/plugin/dashboard/package-lock.json @@ -1,12 +1,12 @@ { "name": "hermes-relay-dashboard", - "version": "1.13.0", + "version": "1.13.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hermes-relay-dashboard", - "version": "1.13.0", + "version": "1.13.1", "devDependencies": { "esbuild": "^0.25.12", "qrcode": "^1.5.4" diff --git a/plugin/dashboard/package.json b/plugin/dashboard/package.json index 7136a0aa2..b6832cced 100644 --- a/plugin/dashboard/package.json +++ b/plugin/dashboard/package.json @@ -1,6 +1,6 @@ { "name": "hermes-relay-dashboard", - "version": "1.13.0", + "version": "1.13.1", "private": true, "description": "Hermes-Relay dashboard plugin frontend (IIFE bundle). Loaded verbatim by the hermes-agent dashboard via the Plugin SDK global.", "scripts": { diff --git a/plugin/plugin.yaml b/plugin/plugin.yaml index 1855e3a2c..92c218bd1 100644 --- a/plugin/plugin.yaml +++ b/plugin/plugin.yaml @@ -2,7 +2,7 @@ name: hermes-relay # Temporary v1 shim for Hermes installers that reject manifests the runtime supports; see docs/project/TODO.md. manifest_version: 1 api_version: 1 -version: 1.13.0 +version: 1.13.1 description: "Hermes-Relay plugin for QR pairing, relay sessions, dashboard management, remote desktop/phone tooling, and optional legacy compatibility diagnostics. Standard chat, Manage, and dashboard voice remain vanilla upstream Hermes surfaces." author: Axiom Labs license: MIT diff --git a/plugin/relay/__init__.py b/plugin/relay/__init__.py index ceb4215ff..00c816637 100644 --- a/plugin/relay/__init__.py +++ b/plugin/relay/__init__.py @@ -19,7 +19,7 @@ # CLI+UI releases use desktop/package.json and desktop-v* tags. The /health endpoint # reports this plugin version, and stale values make live diagnosis harder than # it should be. -__version__ = "1.13.0" +__version__ = "1.13.1" from .server import create_app, main # noqa: E402 — must come after __version__ diff --git a/pyproject.toml b/pyproject.toml index 718e7fe12..bd55ad85f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "hermes-relay" -version = "1.13.0" +version = "1.13.1" description = "Hermes-Relay plugin — Android device control toolset, QR pairing CLI, and WSS relay server for hermes-agent" requires-python = ">=3.11" dependencies = [