Repository navigation
Conversation
|
🤖 Hermes-Relay automated PR intake Thanks for contributing the optional sideload push-wake path! The PR targets To round out the evidence:
A maintainer will review the Android, dashboard, and plugin scope, including the credential and Secure Link boundaries; this automated intake does not assess implementation correctness. |
Review candidate unavailableThe build for PR #703 head |
Sideload-only Firebase Messaging with runtime FirebaseOptions from Settings (no google-services.json bake-in). Phone registers token via POST /push/token; relay stores tokens and sends high-priority data wakes when proactive queues offline. Service account stays on the Mac (RELAY_FCM_SERVICE_ACCOUNT_JSON). googlePlay flavor remains a no-op controller.
Host: auto-discover ~/.hermes/secrets/fcm-sa.json, Dashboard Settings → Push wake upload/enable/clear, CLI install|status on fcm_sender, and .env merge for status. Phone: message preview default + hide toggle, google-services file picker, clearer Mac-vs-phone copy. Secure Link /relay/* reverse-proxy + transport allowlist for push/token so register works behind pinned TLS.
Avoid PEM-shaped / PRIVATE KEY placeholders in unit fixtures so public-repo hygiene-scan stays green without implying live material.
Replace service-account private_key unit fixtures with inert placeholders so branch hygiene-scan does not treat test material as publishable secrets.
f44a247 to
14b1064
Compare
|
Rebased onto current Previous head was ~26 commits behind; merge conflicts cleared by rebase. Android + plugin checks re-running on the new tip. Ready for another look when CI settles. Happy to address anything remaining on the BYO FCM / offline wake path. |
…rings Catch-all /relay/* must not proxy operator paths or mutate /relay/health (security tests expect 404/405). Add missing FCM hide/load strings to locale catalogs and refresh localization-status hashes.
|
Follow-up on current
Local smoke: GET health 200; mutating health 405; forbidden tails 404; |
…M strings Focused plugin test hung reusing one aiohttp Response across mocked _proxy_http calls. Android lint failed on LocalContext.getString in ProactiveSettingsScreen; switch to LocalResources.
|
CI follow-up on
Local: |
|
CI is green on Ready for review/merge when you have bandwidth. Includes:
|
Summary
Optional bring-your-own Firebase Cloud Messaging wake path for sideload installs: when proactive delivery has no live Relay WebSocket subscriber, the host sends a high-priority data-only FCM wake so the phone can reconnect and drain the offline buffer. Full message text stays on Relay — FCM never carries the service account or the full body.
Google Play builds keep a no-op push controller. Host Firebase Admin credentials never ship in the APK.
Changes
google-services.jsonfields), token registration viaPOST /push/token,HermesFcmMessagingServicefortype=hermes_wake, Settings → Threads → Push wake (BYO FCM) with optional message-preview toggle.FcmPushControllerFactoryso Play stays free of Firebase Messaging deps.fcm_sender.py(install/status/enable CLI, default~/.hermes/secrets/fcm-sa.json, HTTP v1 send), token store, offlineon_queued_wakehook from proactive channel,POST /push/token(+ clear) on the relay./push/token./relay/{tail:.*}HTTP reverse-proxy so phone HTTP (including push token register) works behind pinned TLS, not only bare relay.Verification
python -m unittest plugin.tests.test_fcm_sender plugin.tests.test_push_token -v— 13 OK./gradlew :app:testSideloadDebugUnitTest --tests com.hermesandroid.relay.data.FcmClientConfigParserTest— BUILD SUCCESSFULconfigured=true,enabled=true,device_tokens=1clients=0POST /phone/message→delivered=false,queued=true,message_id=b94439d755b3,buffered=1send_wake→ FCM HTTP v1 200./gradlew lint/ full Android CI: deferred to GitHub Actions on this PR headScreenshots
UI surface: Settings → Power tools → Threads → Push wake (BYO FCM) (sideload). No Play UI change.
Device proof: offline force-stop → wake banner → buffer drain confirmed on-device (operator dogfood). Screenshots can be attached in a follow-up comment if useful; no hosts/tokens/pins in images.
Compatibility / risk
RELAY_FCM_*/ default secrets path). Disabled unless explicitly enabled after install.delivered=true); FCM is offline-wake only.Lineage / contributor credit
Checklist
dev, unless this is adev→mainrelease PR or a focused production-tag hotfix PR tomainCHANGELOG.mdis updated for user-visible changes, or N/A is listed above