OpenAI WebSocket-First + Android Nodes + Discord Thread Bindings
/** OpenAI Responses API goes WebSocket-first. Android gets device/notification APIs. Docker gets health check endpoints. */
β BREAKING: Node exec approval payloads now require systemRunPlan. Node system.run pins path-token commands to canonical executable paths.
β¨ What's New
openai Responses API is now WebSocket-first by default (transport: 'auto' with SSE fallback). Shared OpenAI WS stream/connection runtime wiring with per-session cleanup.
Built-in HTTP liveness/readiness endpoints (/health, /healthz, /ready, /readyz) for Docker/Kubernetes health checks. Existing handlers are not shadowed.
New node commands: camera.list, device.permissions, device.health, and notifications.actions (open/dismiss/reply) on Android nodes.
Replace fixed TTL lifecycle with inactivity (idleHours, default 24h) plus optional hard maxAgeHours controls. New /session idle + /session max-age commands.
Per-DM direct + topic config (allowlists, dmPolicy, skills, systemPrompt, requireTopic). Routes DM topics as distinct inbound/outbound sessions.
Added German locale support across the web UI. Language options now auto-render from supported locale constants in Overview settings.