Skip to content

Merge Dev branch to main#356

Merged
Kief5555 merged 19 commits intomainfrom
dev
Apr 25, 2026
Merged

Merge Dev branch to main#356
Kief5555 merged 19 commits intomainfrom
dev

Conversation

@Kief5555
Copy link
Copy Markdown
Collaborator

This pull request introduces significant improvements to the build, packaging, and documentation systems for the project, with a focus on expanding platform support, improving artifact handling, and adding Nix packaging. The changes clarify the build matrix, add new packaging targets (notably Windows ARM64 and iOS), and provide detailed instructions for using the project with Nix. Additionally, the CI workflows have been updated to better handle platform-specific artifacts and auto-update feeds, and the documentation has been updated accordingly.

Build and Packaging Improvements:

  • Added Windows ARM64 as a distinct build and release target, with its own packaging instructions and artifact handling; clarified that Windows auto-update remains x64-only for now. Also added iOS (ipa) as a packaging target. (.github/workflows/auto-build.yml, .github/workflows/release.yml, README.md, docs/development.md, opennow-stable/README.md) [1] [2] [3] [4] [5]

  • Improved artifact upload steps in CI workflows to use per-platform artifact_paths, ensuring only relevant files are uploaded for each build matrix entry and preventing ARM64 artifacts from overwriting x64 auto-update metadata. (.github/workflows/auto-build.yml, .github/workflows/release.yml) [1] [2]

Nix Packaging Support:

  • Added a flake.nix file to provide Nix flake support, enabling easy installation and packaging of the app on NixOS and related systems. Updated documentation with usage examples for both home-manager and system-wide configurations. (flake.nix, README.md) (flake.nixR1-R123, Fb536197L79R79)

Documentation Updates:

  • Updated documentation to reflect the new build matrix, clarify packaging formats for each platform, and explain the current status of Windows ARM64 and auto-update feeds. Added a TestFlight badge for iOS beta access. (README.md, docs/development.md, opennow-stable/README.md) [1] [2] [3] [4]

Dependency and Metadata Updates:

  • Updated opennow-stable/package-lock.json to version 0.3.6 and made minor dependency metadata adjustments, including the addition of the encoding package. [1] [2]

Other Minor Improvements:

zortos293 and others added 14 commits April 18, 2026 11:06
* Restore Windows ARM64 build artifacts in release pipeline

* fix(ci): match linux x64 artifact upload names
Add 'Hide Server Selector' setting to bypass free-tier queue modal
* Remove Game Hub media handling from ControllerLibraryPage

* Refactor initial category index logic in ControllerLibraryPage for clarity

* Replace useEffect with useLayoutEffect for improved layout handling in ControllerLibraryPage

* Merge branch 'dev' into Jayian1890/controller-mode-patch-042226
* Fix Nix npm packaging

* Update

* Add nix instruction in README.md

* Delete symbolic Link

* change requested changes and add desktop items

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update flake.nix

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Zortos <zortosdev@proton.me>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kiefer <67562560+Kief5555@users.noreply.github.com>
Co-authored-by: Kiefer <kieferlin1001@gmail.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: DINEXXL <dinexxl@noreply.codeberg.org>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…ring + sidebar UX polish) (#353)

* settings

* Update opennow-stable/src/renderer/src/components/SettingsPage.tsx

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* do capy's suggestion

Co-authored-by: Copilot <copilot@github.com>
* Implement bounded auto-recovery for active sessions after signaling disconnects

* Enhance signaling recovery mechanism by introducing generation tracking. Added generation state to manage recovery attempts and prevent stale session applications. Updated relevant functions to utilize generation checks for improved session handling.

* Refactor claimed session handling to improve recovery logic. Introduced a helper function to determine if a claimed reconnect can proceed based on recovery generation and explicit shutdown status, enhancing session management and logging clarity.

* Enhance signaling recovery logic by adding checks for explicit shutdown and non-recoverable stream statuses. This prevents unnecessary error handling and improves logging clarity during disconnect scenarios.

* Remove explicit shutdown check from signaling connection logic to streamline recovery process. This change simplifies the connection flow during recovery attempts.

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: Jared <jared@interlacedpixel.com>
* chore(release): prepare v0.3.3

* chore(release): prepare v0.3.4

* chore(release): prepare v1.3.5

* chore(release): prepare v0.3.5

* Update README.md to include TestFlight badge and iOS packaging target

* update AGENTS.md

* chore(release): prepare v0.3.6

* Add multi-account auth support with quick account switcher UI

* Add confirmation modal for account removal

* Fix account switch session validation during refresh (#4)

* Fix account switch session validation during refresh

* Fail switch-account refresh when user identity cannot be verified

* Update opennow-stable/src/main/gfn/auth.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: PriyanshAg-1 <204138848+PriyanshAg-1@users.noreply.github.com>
Co-authored-by: priyanshrv1-oss <priyanshrv1@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix async session state in handleSwitchAccount - pass fresh session to refreshNavbarActiveSession to avoid stale auth token

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Fix all remaining Copilot review issues: auth session null returns, error recovery state sync, ARIA semantics, SavedAccount type usage

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: use menu ARIA roles in account dropdown and return getSession() after logout

Agent-Logs-Url: https://github.com/priyanshrv1-oss/OpenNOW1/sessions/bc9cb33e-8e97-4cf8-8986-2a9a584abddc

Co-authored-by: PriyanshAg-1 <204138848+PriyanshAg-1@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: add role=none to structural wrappers in menu and fix embedded line numbers in TS files

Agent-Logs-Url: https://github.com/priyanshrv1-oss/OpenNOW1/sessions/f707cd73-f431-41cf-96a8-c5e0c34ab939

Co-authored-by: PriyanshAg-1 <204138848+PriyanshAg-1@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Change logoutAll to logout in auth service

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update opennow-stable/src/main/gfn/auth.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fixed errors and improved session auth flows

* fix: improve session handling and error recovery in AuthService and App components; update Navbar accessibility roles

* Update opennow-stable/src/main/gfn/auth.ts

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Resolve styling issues

* Resolve startup issues

---------

Co-authored-by: Zortos <zortosdev@proton.me>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: PriyanshAg-1 <204138848+PriyanshAg-1@users.noreply.github.com>
Co-authored-by: priyanshrv1-oss <priyanshrv1@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Priyansh Agarwal <2k22.cse.32203@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@capy-ai capy-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added 1 comment

setRemoveAccountConfirmOpen(false);
setAccountToRemove(null);

await window.openNow.removeAccount(targetUserId);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 Medium] [🔵 Bug]

The confirmRemoveAccount callback performs three sequential IPC calls (removeAccount, getSavedAccounts, getAuthSession) without a try/catch, and is invoked via void confirmRemoveAccount() which silently drops rejections. The modal is dismissed at lines 2402–2403 before the async work begins, so if any IPC call fails the user gets no feedback and the UI state becomes inconsistent (modal gone, but account not removed/state not refreshed). Contrast with handleSwitchAccount (line 2358) which wraps the same pattern in try/catch with recovery logic.

// opennow-stable/src/renderer/src/App.tsx
setRemoveAccountConfirmOpen(false);
setAccountToRemove(null);

await window.openNow.removeAccount(targetUserId);
const [accounts, sessionResult] = await Promise.all([
  window.openNow.getSavedAccounts(),
  window.openNow.getAuthSession(),
]);

Wrap the body in a try/catch similar to handleSwitchAccount and surface the error to the user (e.g., via setLoginError).

* Improve stream pointer responsiveness under load.

Reduce mouse input hot-path overhead with residual delta accumulation, adaptive flush scheduling, cached scale conversion, and tuned raw-input filtering while adding diagnostics and targeted tests.

Made-with: Cursor

* Refactor mouse input handling in GfnWebRtcClient to maintain pending deltas until a non-zero packet is sent. This change prevents loss of quantized integer deltas during server scaling, improving responsiveness and accuracy of mouse movements.

* Enhance mouse input handling in GfnWebRtcClient by preventing re-arming of the mouse flush timer during teardown. This change ensures that the timer does not continue to operate after it has been cleared, improving resource management and stability.

* Refactor App and StreamView components to remove Esc hold release indicator functionality. This includes the removal of related state management, CSS styles, and UI elements, streamlining the codebase and improving maintainability.
Copy link
Copy Markdown
Contributor

@capy-ai capy-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added 1 comment

Comment thread opennow-stable/src/main/index.ts Outdated
const sessionAppId = activeSession.appId.toString();

if (!currentActivity || currentActivity.appId !== sessionAppId) {
const title = (currentActivity?.appId === sessionAppId && currentActivity.gameName)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 Medium] [🔵 Bug]

Inside DiscordStatusMonitor.sync(), the outer guard at line 368 is if (!currentActivity || currentActivity.appId !== sessionAppId). Within that block, the inner checks at lines 369 and 372 test currentActivity?.appId === sessionAppId, which is always false — either currentActivity is null or its appId differs from sessionAppId. The ternary therefore always falls through to sessionAppId (a numeric string like "12345678") and new Date(), meaning the Discord status will display a raw numeric app ID rather than the game title.

// opennow-stable/src/main/index.ts
if (!currentActivity || currentActivity.appId !== sessionAppId) {
  const title = (currentActivity?.appId === sessionAppId && currentActivity.gameName)
    ? currentActivity.gameName   // ← never reached
    : sessionAppId;              // ← always taken

This matters on cold-start recovery: when the app restarts while a session is active, the monitor clears stale activity and then re-sets it with the numeric app ID. Fix by extracting the conditional or looking up the game name from the session metadata independently of currentActivity.

Suggested change
const title = (currentActivity?.appId === sessionAppId && currentActivity.gameName)
const title = currentActivity?.gameName ?? sessionAppId;
const startTime = currentActivity?.startTimestamp ?? new Date();

… only after successful RPC call, improving state management.
…nd enhance Discord RPC state management by introducing pendingActivity for improved activity handling.
…er processing, preventing reprocessing of failed attempts. Simplify activity title and start time assignment in DiscordStatusMonitor for improved clarity.
… to ensure proper state management during error handling.
@Kief5555 Kief5555 merged commit c12ff7f into main Apr 25, 2026
15 checks passed
Kief5555 added a commit that referenced this pull request Apr 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants