91 Commits
Author SHA1 Message Date
Bailey Dixon a128e910f1 feat: guide Secure Link setup across Relay surfaces 2026-09-23 13:10:25 -04:00
Bailey Dixon 774ab90ad5 fix(android): clarify Gateway onboarding 2026-09-23 08:50:40 -04:00
Bailey Dixon 86a570e72d chore: refresh chat UI cleanup against dev 2026-09-13 20:13:40 -04:00
Bailey Dixon 2ad7de4cc9 fix(android): make injected context previews transport-aware 2026-09-13 13:36:50 -04:00
Bailey Dixon 061512d330 fix(android): support upstream batch Clarify requests 2026-09-12 19:59:06 -04:00
Bailey Dixon 22c8f76c72 fix(android): preserve chat activity and correct feedback ownership 2026-09-09 16:57:40 -04:00
Bailey Dixon 367e5d271c Merge origin/dev into feature/upstream-first-media
# Conflicts:
#	CHANGELOG.md
#	README.md
#	docs/localization-status.json
#	docs/upstream-surface-matrix.md
#	user-docs/features/connections.md
#	user-docs/features/index.md
#	user-docs/guide/index.md
#	user-docs/guide/remote-access.md
#	user-docs/reference/configuration.md
2026-08-31 21:39:05 -04:00
Bailey Dixon e7cbed3c8f feat(android): prefer upstream standard surfaces 2026-08-31 21:36:18 -04:00
Bailey Dixon 2c15bd4207 fix(android): clarify gateway connection status 2026-08-31 18:36:25 -04:00
Bailey Dixon 541a7c078d fix(android): require app-specific supervised parent access 2026-08-31 15:51:20 -04:00
Bailey Dixon f4acd351f5 fix(dashboard): use dedicated Tailscale listener 2026-08-30 19:58:00 -04:00
Bailey Dixon 8d260c0eeb fix(dashboard): distinguish Tailscale listener and target 2026-08-30 15:41:27 -04:00
Bailey Dixon c5df87cd28 feat(dashboard): clarify one-port pairing routes 2026-08-30 15:03:18 -04:00
Bailey Dixon 41fa23a7f9 feat(android): complete gateway connection integration 2026-08-30 12:51:24 -04:00
Bailey Dixon f47ca00998 fix(android): unify gateway setup and ingress sign in 2026-08-29 15:54:17 -04:00
Bailey Dixon f350fe0b82 docs(relay): document dashboard ingress 2026-08-26 21:55:51 -04:00
Bailey Dixon 630cc6d316 Merge remote-tracking branch 'origin/dev' into feature/android-supervised-mode
# Conflicts:
#	app/src/main/kotlin/com/hermesandroid/relay/ui/RelayApp.kt
#	app/src/main/kotlin/com/hermesandroid/relay/ui/screens/ChatScreen.kt
#	docs/decisions.md
#	docs/localization-status.json
#	plugin/dashboard/dist/index.js
2026-08-24 21:08:50 -04:00
Bailey Dixon 478323893a feat(android): refine supervised controls 2026-08-24 19:36:10 -04:00
Bailey Dixon 28e0c34227 feat(site): align onboarding across product surfaces 2026-08-24 17:02:31 -04:00
Bailey Dixon fcddeeb810 docs: document Android supervised mode 2026-08-24 16:34:59 -04:00
Bailey Dixon b0a7cf0494 feat: add self-hosted secure connection routes 2026-08-13 15:31:46 -04:00
Bailey Dixon cdeccd69e4 feat: add secure relay route selection 2026-08-12 20:10:41 -04:00
Bailey Dixon 8fa97e0b46 feat(desktop): add host management tray UI 2026-08-11 17:48:47 -04:00
Bailey Dixon c597187fa3 Merge branch 'feature/android-profile-shelf' into dev
# Conflicts:
#	CHANGELOG.md
#	DEVLOG.md
#	app/src/main/kotlin/com/hermesandroid/relay/ui/components/ConnectionInfoSheet.kt
#	app/src/main/kotlin/com/hermesandroid/relay/ui/components/MessageBubble.kt
#	app/src/main/kotlin/com/hermesandroid/relay/ui/screens/ChatScreen.kt
#	app/src/main/res/values-b+pt+BR/strings.xml
#	app/src/main/res/values-b+zh+Hans/strings.xml
#	app/src/main/res/values-de/strings.xml
#	app/src/main/res/values-es/strings.xml
#	app/src/main/res/values-ja/strings.xml
#	app/src/main/res/values-ru/strings.xml
2026-08-09 19:11:50 -04:00
Bailey Dixon 380b9e918d feat(android): clean up transcript activity 2026-08-09 15:44:05 -04:00
Bailey Dixon 440e3d5bb9 fix(android): unbox thinking status 2026-08-08 22:40:07 -04:00
Bailey Dixon d5a313ab5d feat(android): refine profile and chat handoffs 2026-08-08 20:27:01 -04:00
Bailey Dixon fff3ba8d91 feat(android): retain active turns in background 2026-07-25 11:41:41 -04:00
Bailey Dixon 60c14b5db1 Merge origin/dev into fix/android-interaction-notifications 2026-07-25 09:40:24 -04:00
Bailey Dixon 920e7d58f0 fix(android): add onboarding permission setup 2026-07-24 17:34:20 -04:00
Bailey Dixon c9ddc2ef8d fix(android): notify for blocked gateway interactions 2026-07-23 22:05:26 -04:00
Bailey Dixon 8196856d76 docs: align upstream impact ledger guidance 2026-07-23 21:10:08 -04:00
Bailey Dixon a61d27a92d feat(android): make dashboard the primary connection
Make the Hermes dashboard the standard connection path with API fallback and optional Relay pairing. Redesign onboarding and connection management, add startup preference and route/security details, reconcile pinned profile identity and hostname discovery, and update tests, docs, and localized resources.
2026-07-19 19:39:28 -04:00
Bailey Dixon 50297d1496 feat: modernize and localize public experience 2026-07-16 15:29:39 -04:00
Bailey Dixon d89fb906b0 fix(android): preserve running chats across session switches 2026-07-15 08:57:11 -04:00
Bailey Dixon f5dab50e4d feat: prepare Android 1.4.3 release 2026-07-12 10:04:00 -04:00
Bailey Dixon c8a6534bec Merge PR #170 (feat/upstream-impact-cleanup-dashboard-serve) into pr-batch — upstream-impact Relay guardrails
# Conflicts:
#	CHANGELOG.md
#	DEVLOG.md
2026-07-07 12:39:49 -04:00
Bailey DixonandClaude Fable 5 891085ed61 Merge branch 'fix/diagnostics-report-noise' into dev — severity-gated Report flow (#155 #154 #146)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:55:30 -04:00
Bailey DixonandClaude Fable 5 9593787482 docs(user-docs): expand troubleshooting for endpoint and streaming issues
- "No reachable endpoint" subsection: what the diagnostic means and how to
  check each saved route from the phone (LAN vs Tailscale, port 8642).
- Callout: never use localhost/127.0.0.1 as the server address on a phone.
- Tailscale checklist, including that the relay Tailscale helper serves
  the relay + API ports but not the dashboard :9119 (Manage needs it
  reachable separately).
- "Long turns with local models" entry: mid-turn stream drops recover the
  finished answer automatically; screen-on/plugged-in reduces drops.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:30:16 -04:00
Bailey DixonandClaude Fable 5 c76e906b30 docs: freshness pass — UI labels, deep-link anchors, stale claims
- Quote the real Connect-page button label ("Hermes", renamed from
  "Vanilla Hermes" in v1.2.2) in getting-started's connect and
  manual-setup instructions; concept-term usage left untouched
- Add explicit VitePress heading anchors so existing deep links resolve:
  #sideload-apk, #relay-server-optional, #install-the-server-plugin
  (getting-started), #self-update-hermes-relay-update and
  #install-from-source-node-21 (desktop installation),
  #demo-native-paste-into-the-attached-tui (desktop index)
- Repoint pre-existing dead anchors found by a full built-site anchor
  sweep: features index -> chat #slash-commands (x2) and
  getting-started #_3-connect-chat; desktop index -> tools
  #desktop-open-in-editor-and-interactive-patches
- README: correct registered tool counts (35 android_*, 25 desktop_*)
- docs/security.md: drop prototype framing; describe shipped state —
  plain ws:// consent dialog + TOFU SPKI pinning, per-channel grants and
  Bridge safety rails, on-device Bridge activity log + relay service log
- Home page chat card: gateway WebSocket preferred, HTTP/SSE fallback
- Release tracks: plugin update via hermes plugins install or the
  hermes-relay-update shim (matches install.sh)
- Desktop troubleshooting: pin mismatch text now says SPKI sha256 pin
  (matches certPin.ts), not whole-cert hash

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 18:47:48 -04:00
Bailey Dixon 91763a286f feat: add upstream-impact relay guardrails 2026-07-06 18:05:51 -04:00
Bailey DixonandClaude Opus 4.8 3be6566eb0 docs: DEVLOG entry + accuracy pass for the nav / keep-alive changes
Add the 2026-06-30 DEVLOG entry (keep-alive reframe + Quick Controls, mode-strip removal, toast overlay, Tailscale reconnect fix). Correct current-state docs to match: CLAUDE.md RelayApp.kt key-file line (no bottom nav, no mode strip; bottomBar is a status pill); configuration.md navigation (Chat is home, Manage/Bridge via Settings); chat.md 'Persistent connection' section (renamed from 'Keep connected in background', new Settings -> Quick Controls path, 'Turn off' action); play-store-listing.md specialUse wording; flavor-differences.md feature name.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 11:14:52 -04:00
Bailey DixonandClaude Opus 4.8 f1e8bfd7ac feat(android): connection security indicator across all surfaces
Implements the spec in docs/plans/2026-06-24-connection-security-indicator.md
(decisions: Tailscale=green, ship all surfaces, "Encrypted · <mechanism>").

Single source of truth: data/ConnectionSecurity.kt computes a per-surface +
rollup verdict (TLS / Overlay / Mixed / Plain) from the active route's
schemes; ConnectionViewModel exposes it as a StateFlow. Overlay transports
(Tailscale/WireGuard/plugin proxy) count as encrypted, not just TLS — so a
ws:// route over a tailnet reads "Encrypted · Tailscale" (green), fixing the
old badge's hardcoded "Secure — TLS" lie.

Surfaces (all read the one flow):
- Chat status chip: leading security glyph (RelayStatusStrip slot).
- Connection card: full-width badge promoted out of the Advanced fold.
- Route picker: per-route glyph on each candidate.
- New ConnectionSecuritySheet: tap any badge for the per-transport
  breakdown + mechanism explainer + docs link.

Removed the duplicated, buried security computation from
ActiveConnectionSections (now delegates to the shared model).

Docs: new user-docs "Is my connection secure?" page; fixes the
Tailscale=TLS conflation in decisions.md / security.md / remote-access.md;
first user-facing mention of TOFU cert pinning.

Verified: ./gradlew :app:testSideloadDebugUnitTest (ConnectionSecurityTest
7/7) + :app:lintSideloadDebug both green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:40:19 -04:00
Bailey DixonandClaude Opus 4.8 894b70ef62 chore: scrub private-infra identifiers from public tree
The repo is public and distributed; several files leaked real server
identifiers. Replace them with generic placeholders across docs, scripts,
source, and test fixtures:

- real LAN IP 172.16.24.250            -> 192.168.1.100 (blessed example)
- real Tailscale IP 100.71.8.56        -> 100.64.0.1
- real hostname docker-server / tail6f460 tailnet -> hermes-host(.tailnet.ts.net)
- ssh user@host targets                -> you@hermes-host
- server home path /home/bailey/       -> $HOME/
- custom voice id                      -> <your-voice-id>

Test fixtures changed on both input and assertion sides so suites stay
green (plugin.tests.test_pairing_mint_schema + test_voice_routes pass;
Kotlin URL-deriver/normalization fixtures consistent). No behavior change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 19:11:30 -04:00
Bailey DixonandClaude Opus 4.8 4f291e1625 refactor(naming): rename user-facing "Standard" -> "Vanilla Hermes"
"Standard" was overloaded — it read as both an app feature tier and the
unmodified-upstream server state, which was confusing. Rename all
user-visible strings, docs, onboarding copy, and the matching test
assertions to "Vanilla Hermes" so the no-plugin path reads unambiguously.
Code identifiers, enum constants, and the persisted "standard" route value
are unchanged — that is an internal name only.

Also lands this session's architecture work:
- docs/path-architecture.html — connection-path + chat-transport
  resolution flowchart, plus the build-flavor (googlePlay/sideload)
  capability axis.
- user-docs CombineModel "how the pieces combine" three-tier model and
  the release-tracks/index wording that makes the plugin-vs-flavor
  prerequisites explicit.
- Aligns docs/security.md, upstream-surface-matrix.md, and spec.md on the
  device-control 403 codes (device_control_sideload_only / sideload_only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:05:32 -04:00
Bailey Dixon c090169545 feat(plugin): bundle relay management surface
Align the relay plugin/server metadata to 1.1.0 and add a version-track checker for Android, server/plugin, and desktop release surfaces.
2026-06-16 09:36:07 -04:00
Bailey DixonandClaude Opus 4.8 ae5b93f9e5 docs: redesign README and clarify Hermes server setup guidance
README: feature-banner hero + screenshot gallery, Google Play marked live, lean renamed CLI section; drop the stale embedded demo video (GitHub CSP won't render external/Pages video) in favor of a link to the docs demo.

user-docs (getting-started, quick-start): defer first-time server setup to upstream Hermes docs, annotate the API/dashboard config, frame the API key as a user-chosen value, add 0.0.0.0 security notes, document the LAN-scan / manual / agent-generated-QR connect paths, and add non-technical skip-path + 'dashboard is optional' signposts.

Remove orphaned assets/chat_demo.mp4 + poster; the user-docs/public copies the docs site serves are kept.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 19:12:01 -04:00
Bailey DixonandClaude Opus 4.8 d433d09906 docs: v1.0.0 release prep
- CHANGELOG: fold the [Unreleased] open/save-attachments + cold-start-flash
  entries into [1.0.0] (the tag isn't cut yet; it's all release-day work).
- DEVLOG: add the open/save + cold-start session entry with on-device verify.
- CLAUDE.md: Key Files entries for MediaSaver / ChatImageViewer / ChatImageContent
  and the InboundAttachmentCard long-press menu.
- README / RELEASE_NOTES / whats_new / play-store listing / privacy / security /
  user-docs: 1.0.0 release-prep refresh (standard-first story, version pins,
  branding).
- Assets: regenerated play-store feature graphic (RelayRefresh indigo, Play-
  accurate trio) via new scripts/gen-feature-graphic.mjs; chat demo poster
  jpg -> png.
- Tooling: pnpm lockfile + workspace for the user-docs build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 20:22:05 -04:00
Bailey DixonandClaude Fable 5 1da8adce99 docs: rework Android getting-started, add Google Play badge, refresh chat guide
- getting-started.md: replace the flat wall of setup commands with a
  three-step funnel (install -> point at Hermes -> connect). The
  Get-it-on-Google-Play badge is the primary install action; all server
  setup, sideload install + SHA256/cert verification, dashboard auth, and
  build-from-source detail is preserved behind collapsible details blocks
  and OS code-group tabs so new users aren't scared off.
- Add a self-hosted Google Play badge SVG and a reusable <StoreBadge>
  component (registered globally), also slotted into the home hero.
- HeroDemo: rebuild the phone-mockup input bar to the redesigned chatbar
  (no slash button, one morphing Send/Voice/Stop trailing slot, GraphicEq
  waveform voice glyph).
- chat.md: document the new input bar, steering, edit-and-resend, the
  context meter, subagent lanes, interactive ask cards, turn-complete
  notifications, and the gateway mobile-preamble behavior.
- Normalize "Hermes Relay" -> "Hermes-Relay" in phone-control-tools/voice.
- CHANGELOG + DEVLOG entries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 22:41:33 -04:00
Bailey DixonandClaude Fable 5 176fc7f6bc docs(user-docs): cockpit rechrome, two-path reposition, CLI reframe, sphere gaze fix
- Rechrome VitePress theme to the RelayRefresh cockpit palette: navy-black
  base, warm-white ink + alpha hairlines, electric-indigo accent, grid/dot
  home texture, warm-paper light mode; swept hardcoded old-palette colors
  from HermesFlow/HermesFlowNode/HeroDemo/ExperimentalBadge/FeatureMatrix
- Reposition marketing: hero "Runs on your machine. Lives on your devices.",
  quick-path-first funnel ("Just connect" no-server-install card above the
  "Give it hands" relay-plugin power path), SurfaceCards + HowItWorks
  components slotted into the home layout, benefit-led feature cards
- Rename "Desktop CLI" -> "CLI" across copy (binary is host-agnostic; path/
  track rename deferred to code refactor); Windows-today / macOS-Linux-soon
  status on every availability claim incl. hero subtext; drop "self-hosted"
  qualifier in favor of plain "Hermes agent"
- desktop/index.md re-led with the remote-hands story; tray/chat copy
  rescoped (chat & management belong to hermes-desktop); modes table
  reordered Tools/Daemon first
- Sidebar: add voice, voice-intents, phone-control-tools, relay-server,
  flavor-differences (existing pages previously unreachable); bump stale
  version pins (app 0.8.1, desktop alpha.18)
- SphereMark: fix gaze drift/snap by pinning lightAngleBlend to exactly 1
  (partial blends leak the unbounded natural light angle), ambient life
  moved into proximity-eased fbm wander, mouse-only pointer tracking,
  occlusion halo over the home dot grid, larger + tighter mobile sizing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 21:20:43 -04:00