feat(mobile): per-user device bindings, multi-user Inbox routing, and admin-mediated authorization
- Device→user bindings persisted in config table (auth.rs), loaded at plugin start - RelayApp now routes Inbox responses per-user via UserChannelApi, never globally - New mobile_bind_device LLM tool for admin-mediated device→user assignment - Per-user event forwarders (events.rs) with per-user debounced notifiers - Config listener (auth::config_listener) refreshes bindings cache reactively - Reconcile loop catches users who unlock after boot - Hello/Logout treated as device-registry ops (no user resolution needed) - Unbound device payloads are silently dropped - RelayAgent::authorize_client → bind_device (atomic bind + authorize) - Approval rules seed mobile_bind_device/revoke_device as require
This commit is contained in:
@@ -235,6 +235,10 @@ impl ApprovalManager {
|
||||
// Opening a mobile pairing window emits a secret (the QR) into chat:
|
||||
// it must be a deliberate human action, not LLM-triggerable (plugin.md §11).
|
||||
("mobile_start_pairing", "require"),
|
||||
// Binding/revoking a device assigns a phone to a user — a security
|
||||
// decision (who receives whose Inbox), so it must be human-gated too.
|
||||
("mobile_bind_device", "require"),
|
||||
("mobile_revoke_device", "require"),
|
||||
];
|
||||
// NOTE: file-write tools are NOT seeded here as per-tool `require` rules.
|
||||
// Filesystem gating is owned by the "File System" category — path-scoped
|
||||
|
||||
Reference in New Issue
Block a user