e7c3231c50
MIC BROKEN with CallKit: a CallKit call reserves the microphone, so the WebView's WebRTC can't capture it — calls are unusable until native LiveKit media lands. Add a server kill-switch (CALLKIT_ENABLED, default OFF) so CallKit can be flipped without an app rebuild: /api/meetings/config now returns callkit; setupNativeCall bails when off (-> WebView calls, mic works); push.js only sends VoIP/CallKit pushes when enabled. Deploying with the flag unset immediately restores working WebView calls. RE-RING: a late cancel push for an already-declined call hit the plugin's 'unknown uuid' path and re-reported a fresh incoming call (~1s re-ring). Track endedCalls and make a late cancel for an already-ended call a no-op. Server part deploys now (no rebuild); plugin re-ring fix ships with the native build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>