mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 21:44:38 +00:00
* chore(cef): bump submodule to include permission handler (#713) Picks up permission handler from tauri-cef feat/713-webview-permissions: c17221ea8 feat(cef): add permissions helper module with unit tests c7213ceb4 feat(cef): allow desktop-capture + deny-by-default prompts Enables mic / camera / screen-share / notifications / clipboard / persistent-storage prompts in embedded webviews (Slack, Discord, Meet, WhatsApp Web). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(cef): enable SharedArrayBuffer for embedded app huddles (#713) Slack Huddles, Meet, and Discord voice rely on SharedArrayBuffer-backed WebRTC audio worklets / Opus encoders. Chromium gates SharedArrayBuffer behind cross-origin isolation (COOP/COEP) by default, and embedded apps don't send those headers, so the feature silently disappears — huddle and call buttons become unresponsive because init aborts before any getUserMedia / permission-handler path is reached. Passing --enable-features=SharedArrayBuffer to CEF's command line makes the constructor available again in top-level secure contexts, matching the default behaviour of desktop Chrome. Verified in DevTools console on app.slack.com: typeof SharedArrayBuffer === "function" after the flag, "undefined" before. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(macos): add NSCameraUsageDescription for embedded webview calls (#713) macOS TCC rejects any camera access request from an app bundle that doesn't declare a purpose string in Info.plist. Without this key the OS silently denies getUserMedia({video:true}) before the user ever sees a prompt, which breaks video calls in every embedded app (Google Meet, Discord, Slack huddles). Paired with NSMicrophoneUsageDescription so mic + camera are both covered for the CEF permission handler landing in the companion submodule bump. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(macos): grant camera entitlement for embedded video calls (#713) The Hardened Runtime entitlement com.apple.security.device.camera is required for the signed app bundle to receive the macOS TCC camera prompt. Without it, getUserMedia({video:true}) inside embedded webviews (Google Meet, Discord, Slack huddles) is refused at the OS layer regardless of the CEF permission handler decision. Mirrors the existing audio-input entitlement so mic + camera both work end-to-end once the CEF handler permits the request. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore(deps): sync Cargo.lock with v0.52.26 release bump Cargo.toml versions bumped to 0.52.26 in prior release commits but the lockfiles still recorded 0.52.24. Regenerated via cargo check — no dependency graph changes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore(vendor): bump tauri-cef to include loopback/local-network perms (#713) Bumps the tauri-cef submodule to e2471bb80 on feat/cef, which adds CEF_PERMISSION_TYPE_LOOPBACK_NETWORK / LOCAL_NETWORK / LOCAL_NETWORK_ACCESS to the auto-accepted prompt mask. Required so embedded WebRTC call flows (Slack Huddles, Meet, Discord voice) don't stall during STUN/TURN local candidate gathering. Upstream PR: tinyhumansai/tauri-cef#6 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(permissions): clarify mic/camera Info.plist usage for huddles (#713) Previous NSMicrophoneUsageDescription only mentioned voice dictation and NSCameraUsageDescription mentioned video calls but not huddles explicitly. Updates both strings to name the huddle/call flows in embedded apps (Slack, Meet, Discord) that drive the macOS TCC prompt, so the first-launch dialog is accurate about why the permission is being requested. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(webview): route Slack huddle popups in-app (#722) Slack Huddles use openManagedChildWindow, which calls window.open("about:blank", …) and then programmatically navigates the returned popup to the huddle UI. The previous deny-all policy on on_new_window meant window.open returned null, and Slack's caller aborts the huddle flow with a beacon/error when the handle is falsey. Adds popup_should_stay_in_app() with a narrow per-provider allowlist: - Slack: about:blank + app.slack.com / *.slack.com hosts - All other providers / URLs: existing deny-and-hand-to-system-browser behavior is preserved Popups matching the allowlist return NewWindowResponse::Allow so CEF's default handling spawns an in-app child window with a real handle. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>