{ "$comment": "Gateway events each mobile client intentionally does not handle yet, with a one-line reason. Consumed by scripts/check-protocol-event-coverage.mjs (pnpm check:protocol-coverage). Adding a gateway event without a client handler requires either handling it or adding an entry here; the check also fails when an entry goes stale (event removed or now handled).", "ios": { "session.operation": "Chat UI derives run state from chat/agent events; no session.operation consumer yet.", "session.tool": "Session tool stream is not rendered by the iOS chat surface yet.", "task.suggestion": "Task suggestion cards are a Control UI-only surface; iOS does not render them.", "presence": "Presence roster is a control-UI (web/desktop) surface; iOS does not render it.", "shutdown": "iOS relies on socket close plus reconnect/backoff instead of the shutdown notice.", "heartbeat": "iOS liveness uses tick and WebSocket-level ping; heartbeat is unused.", "cron": "Cron run activity is not surfaced in the iOS app.", "task": "Background task activity is not surfaced in the iOS app.", "node.pair.requested": "Node pairing state is fetched on demand; no push consumer on iOS yet.", "node.pair.resolved": "Node pairing state is fetched on demand; no push consumer on iOS yet.", "node.presence": "Node activity is reported by macOS nodes and consumed by gateway routing; iOS has no presence reporter yet.", "device.pair.requested": "Device pairing flows poll via device.pair.* methods on iOS.", "device.pair.resolved": "Device pairing flows poll via device.pair.* methods on iOS.", "voicewake.routing.changed": "iOS only consumes voicewake.changed trigger updates; routing changes are not surfaced.", "plugin.approval.requested": "Plugin approval prompts are not implemented on iOS.", "plugin.approval.resolved": "Plugin approval prompts are not implemented on iOS.", "terminal.data": "Embedded terminal is a web/desktop surface; iOS has no terminal client.", "terminal.exit": "Embedded terminal is a web/desktop surface; iOS has no terminal client.", "update.available": "Gateway self-update notices do not apply to iOS; app updates ship via the App Store.", "session.approval": "Native approval review uses exec.approval push/nudge delivery; the session-scoped approval stream is a Control UI chat surface." }, "android": { "session.operation": "Chat UI derives run state from chat/agent events; no session.operation consumer yet.", "session.tool": "Session tool stream is not rendered by the Android chat surface yet.", "task.suggestion": "Task suggestion cards are a Control UI-only surface; Android does not render them.", "presence": "Presence roster is a control-UI (web/desktop) surface; Android does not render it.", "talk.mode": "Android toggles talk mode locally; gateway talk.mode sync is not consumed.", "shutdown": "Android relies on socket close plus reconnect/backoff instead of the shutdown notice.", "heartbeat": "Android liveness uses tick and WebSocket-level ping; heartbeat is unused.", "cron": "Cron run activity is not surfaced in the Android app.", "task": "Background task activity is not surfaced in the Android app.", "node.pair.requested": "Android's bounded operator session lacks operator.pairing; onboarding refreshes node approval with explicit node.list requests.", "node.pair.resolved": "Android's bounded operator session lacks operator.pairing; onboarding refreshes node approval with explicit node.list requests.", "node.presence": "Node activity is reported by macOS nodes and consumed by gateway routing; Android has no presence reporter yet.", "device.pair.requested": "Device pairing flows poll via device.pair.* methods on Android.", "device.pair.resolved": "Device pairing flows poll via device.pair.* methods on Android.", "voicewake.changed": "Android reads voicewake state on demand via voicewake.get; no push consumer yet.", "voicewake.routing.changed": "Android reads voicewake state on demand via voicewake.get; no push consumer yet.", "plugin.approval.requested": "Plugin approval prompts are not implemented on Android.", "plugin.approval.resolved": "Plugin approval prompts are not implemented on Android.", "terminal.data": "Embedded terminal is a web/desktop surface; Android has no terminal client.", "terminal.exit": "Embedded terminal is a web/desktop surface; Android has no terminal client.", "session.approval": "Native approval review uses exec.approval push/nudge delivery; the session-scoped approval stream is a Control UI chat surface." } }