Conversation
* Add QR code login with device authorization flow Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Fix QR login cancellation race Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Address QR login review findings Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Fix QR login cleanup edge cases Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Match QR login panel colors Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Add native streamer app shortcut integration * fix codex review stuff * fix review stuff * further review fix * Fix native streamer shortcut capture Made by codex * fix * Fix native shortcut review feedback Made by codex --------- Co-authored-by: Kiefer <67562560+Kief5555@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
… German layouts (#502) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: OpenClaw <230910855+capy-ai[bot]@users.noreply.github.com>
* Fix controller mode button mapping by centralizing gamepad input handling Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Handle controller menu button alias Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: OpenClaw <230910855+capy-ai[bot]@users.noreply.github.com>
…ontrol Add recording bitrate control
…uppression for intentional lock (#509) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Fix native streamer fullscreen monitor placement Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Recompute native renderer target rect from HWND Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Upgrade Electron to 42.3.3 and remove npm lockfile. The project uses bun.lock; drop the stale package-lock.json and refresh bun.lock for the Electron 42 dependency bump. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: OpenClaw <230910855+capy-ai[bot]@users.noreply.github.com> Co-authored-by: Zortos <zortosdev@proton.me> Co-authored-by: zortos293 <65777760+zortos293@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* Modernize settings modal UX and fix Electron dev install in worktrees. Convert settings to a dismissible overlay with grouped navigation, tighter styling, scrollable content, and streamlined stream options that infer aspect ratio from resolution while moving decoder/encoder controls into Advanced. Add ensure-electron postinstall so Electron binaries download reliably when npm install scripts are blocked. Co-authored-by: Cursor <cursoragent@cursor.com> * Remove Electron install tooling from settings modal PR Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Use Bun install in CI Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Implement active-session fallback using serverInfo region discovery. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * Fix active-session fallback on HTTP errors Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
|
Capy auto-review is paused for this organization because the usage-cycle auto-review limit has been reached. Increase the limit or turn it off in billing settings to resume automatic reviews. |
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR adds native keyboard shortcut support end-to-end (Rust Win32 matcher + JS IPC bus), QR/device-code login for Steam Deck clients, persistent cloud storage management in Settings, a video acceleration command-line builder, Linux updater detection, configurable recording bitrate, controller gamepad search overlays with Motion animations, CloudMatch regional fallback discovery, and CI Bun migration. ChangesNative Shortcuts, QR Login, Persistent Storage, Video Acceleration, Controller Search
CI Cache Update
Sequence Diagram(s)sequenceDiagram
participant App as App.tsx
participant AuthService as AuthService
participant NVIDIA as NVIDIA Device Auth
participant LoginScreen as LoginScreen
App->>AuthService: startDeviceLogin()
AuthService->>NVIDIA: POST /oauth2/device/authorize
NVIDIA-->>AuthService: device_code + verification_uri_complete
AuthService-->>App: AuthDeviceLoginChallenge { attemptId, userCode, verificationUri }
App->>LoginScreen: qrLoginChallenge → QRCode.toDataURL()
LoginScreen-->>App: QR image displayed
loop poll
App->>AuthService: pollDeviceLogin(attemptId)
AuthService->>NVIDIA: POST /oauth2/token (device_code grant)
NVIDIA-->>AuthService: pending | authorized | expired
end
App->>AuthService: completeDeviceLogin(attemptId)
AuthService->>AuthService: saveLoginSession + pruneExpiredDeviceLogins
AuthService-->>App: AuthSession
sequenceDiagram
participant WndProc as Win32 WndProc
participant NativeShortcutMatcher as NativeShortcutMatcher
participant gstreamer_input as gstreamer_input
participant NativeStreamerManager as NativeStreamerManager
participant App as App.tsx
participant GfnWebRtcClient as GfnWebRtcClient
WndProc->>NativeShortcutMatcher: match_keydown(keycode, scancode, modifiers)
NativeShortcutMatcher-->>WndProc: Some(NativeStreamerShortcutAction)
WndProc->>WndProc: mark PressedKey.suppressed
WndProc->>gstreamer_input: NativeWindowInputEvent::Shortcut { action }
gstreamer_input->>NativeStreamerManager: Event::Shortcut { action }
NativeStreamerManager->>App: emit native-shortcut { action }
App->>App: handleStreamShortcutAction(action)
App->>GfnWebRtcClient: suppressNextSyntheticEscapeOnPointerLockLoss()
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
@copilot resolve the merge conflicts in this pull request |
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
I resolved the merge conflicts locally in commit |
|
Well, no, you didn't but ok.. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec6ac9d0fc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const tarResult = spawnSync("tar", ["-xf", zipPath, "-C", resolvedDistRoot], { | ||
| stdio: "inherit", | ||
| shell: false, |
There was a problem hiding this comment.
Extract downloaded Electron zips without GNU tar
When the fallback path runs on Linux (for example after the Electron installer exits 0 but leaves no runtime binary), downloadArtifact returns Electron's .zip, but the Ubuntu runners use GNU tar and tar -xf does not extract zip archives (tar -tf on a zip reports “This does not look like a tar archive”). That makes the recovery path fail exactly in the Linux CI/dev environments it is meant to repair; use a zip-capable extractor here as is already done for Windows.
Useful? React with 👍 / 👎.
|
@cursoragent fix issues |
|
Fixed the Electron install fallback issue flagged in the PR review. ProblemThe archive fallback in FixReplaced the Verification
PR
Once that merges, it will flow into the larger |
…525) Co-authored-by: Cursor Agent <cursoragent@cursor.com>
# Conflicts: # opennow-stable/package-lock.json # opennow-stable/src/renderer/src/styles.css
Add QR code login, recording bitrate control, and settings updates to main


This pull request introduces several improvements and new features across the OpenNOW codebase, focusing on native streamer shortcut support, enhanced persistent storage and video settings UI, and build system modernization. The most important changes are grouped below.
Native Streamer Shortcut Support
update_shortcutsmethod to theNativeStreamerBackendtrait and implemented it for both the stub and GStreamer backends, enabling dynamic updating of native shortcut bindings. (native/opennow-streamer/src/backend.rs,native/opennow-streamer/src/gstreamer_backend.rs) [1] [2] [3] [4] [5]native/opennow-streamer/src/gstreamer_input.rs) [1] [2] [3] [4] [5] [6] [7] [8]native/opennow-streamer/src/backend.rs) [1] [2]UI and Localization Enhancements
locales/en.json)locales/en.json)locales/en.json) [1] [2]locales/en.json)locales/en.json)Build System Modernization
.github/workflows/auto-build.yml)Platform and Rendering Improvements
native/opennow-streamer/src/gstreamer_pipeline.rs,native/opennow-streamer/src/gstreamer_platform.rs) [1] [2] [3]native/opennow-streamer/src/gstreamer_platform.rs)Documentation
OpenNOW-Macrepository for macOS users seeking a more performant version. (README.md)Summary by CodeRabbit