feat(photon): group-chat mention gating for full channel parity
Adds the last missing parity piece vs the established channels: group chats can be made opt-in via a mention wake word, exactly like the BlueBubbles iMessage channel. - require_mention + mention_patterns, read from config.extra (config.yaml via the generic gateway bridge) or PHOTON_REQUIRE_MENTION / PHOTON_MENTION_PATTERNS env vars. Same shapes BlueBubbles accepts (list / JSON / comma / newline), same default Hermes wake words. - _dispatch_inbound drops unmatched group messages and strips the leading wake word from matched ones; DMs are never gated. - plugin.yaml + docs document both knobs and the config.yaml form. - New test_mention_gating.py (8 tests): default-off, group drop/pass, wake-word strip, DM bypass, custom patterns, env comma-list, invalid regex skip. The config.yaml -> extra bridge needed no core change — the generic shared-key loop in gateway/config.py already iterates plugin platforms (_shared_loop_targets += plugin_entries()), so require_mention / mention_patterns flow through automatically. Note: outbound media is the one capability Photon still can't reach — Photon exposes no HTTP send-attachment endpoint yet (documented API limitation), so the sidecar can't send files. Not faked. Validation: 34/34 photon tests; E2E confirms config.yaml require_mention + custom mention_patterns bridge through load_gateway_config into a live adapter and gate/strip correctly.
This commit is contained in:
@@ -100,6 +100,37 @@ When `PHOTON_ALLOWED_USERS` is set, unknown senders are silently
|
||||
ignored rather than offered a pairing code (the allowlist signals you
|
||||
deliberately restricted access).
|
||||
|
||||
### Require mentions in group chats
|
||||
|
||||
By default Hermes responds to every authorized DM and group message.
|
||||
To make group chats opt-in, enable mention gating (DMs still always
|
||||
work):
|
||||
|
||||
```yaml
|
||||
gateway:
|
||||
platforms:
|
||||
photon:
|
||||
enabled: true
|
||||
require_mention: true
|
||||
```
|
||||
|
||||
With `require_mention: true`, group-chat messages are ignored unless
|
||||
they match a wake-word pattern. The defaults match `Hermes` and
|
||||
`@Hermes agent` variants. For a custom agent name, set regex patterns:
|
||||
|
||||
```yaml
|
||||
gateway:
|
||||
platforms:
|
||||
photon:
|
||||
require_mention: true
|
||||
mention_patterns:
|
||||
- '(?<![\w@])@?amos\b[,:\-]?'
|
||||
```
|
||||
|
||||
Both keys also accept env vars (`PHOTON_REQUIRE_MENTION`,
|
||||
`PHOTON_MENTION_PATTERNS`). This is the same mention-gating model the
|
||||
BlueBubbles iMessage channel uses.
|
||||
|
||||
## Registering the webhook
|
||||
|
||||
Photon needs a public URL it can POST to. Expose your local listener
|
||||
@@ -201,6 +232,8 @@ hermes photon webhook delete <webhook-id> # remove one
|
||||
| `PHOTON_HOME_CHANNEL_NAME`| (unset) | Human label for the home channel |
|
||||
| `PHOTON_ALLOWED_USERS` | (unset) | Comma-separated E.164 allowlist |
|
||||
| `PHOTON_ALLOW_ALL_USERS` | `false` | Dev only — accept any sender |
|
||||
| `PHOTON_REQUIRE_MENTION` | `false` | Require a wake word before responding in groups |
|
||||
| `PHOTON_MENTION_PATTERNS` | Hermes wake words | JSON list / comma / newline regex patterns for group mentions |
|
||||
| `PHOTON_API_HOST` | `spectrum.photon.codes` | Override the Spectrum management API host |
|
||||
| `PHOTON_DASHBOARD_HOST` | `app.photon.codes` | Override the dashboard / device-login host |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user