Skip to content

Update to 0.10.4 - #177

Merged
Masterain98 merged 30 commits into
mainfrom
develop
Sep 5, 2026
Merged

Update to 0.10.4#177
Masterain98 merged 30 commits into
mainfrom
develop

Conversation

@Masterain98

@Masterain98 Masterain98 commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add selectable Discord and Vesktop CDP clients with automatic discovery and custom installation support.
  • Improve CDP login and quest startup reliability, including transient connection retries.
  • Fix the Nitro Orbs countdown by using Discord's server-provided reward timestamp.
  • Fix truncated dashboard quest tabs and update the 0.10.4 client metadata.

Validation

  • pnpm test
  • pnpm run build
  • cargo check --workspace

Resolve #173

Greptile Summary

Adds selectable Discord and Vesktop CDP clients, installation discovery and custom-path support, more reliable launch and login handling, managed-session recovery, corrected Nitro Orbs countdown behavior, dashboard tab layout fixes, and synchronized 0.10.4 release metadata.

  • Introduces cross-platform desktop-client discovery, ownership tracking, process supervision, and Flatpak support.
  • Extends Tauri IPC and frontend settings/login flows for selecting and managing CDP clients.
  • Uses Discord’s server-provided reward timestamp for Nitro Orbs countdowns.
  • Updates release metadata, documentation, localization, tests, and release automation.
  • Changes since the previous review only remove two unreferenced engineering-assurance reports.

Confidence Score: 4/5

The changes since the previous review introduce no new actionable defect, but the existing managed-session identity issue remains a merge-blocking risk.

The earlier Windows quoting, provider-variant switching, managed-session discovery recovery, and stale release metadata findings are fixed or resolved. The unresolved session-journal fallback can still associate a stale managed entry with an unrelated replacement process from the same provider and port, allowing restoration to terminate and relaunch the wrong client. The mutable action reference remains in its existing thread, while the repository now explicitly requires readable action version tags.

Important Files Changed

Filename Overview
crates/discord-cdp-launch-core/src/launcher.rs Adds provider-aware Discord/Vesktop launching, Flatpak handling, CDP ownership checks, and managed-session metadata.
src-tauri/src/discord_cdp_commands.rs Integrates installation selection, conflict resolution, ownership tracking, and restoration; the previously reported stale-session replacement fallback remains unresolved.
src/composables/desktopClientState.ts Coordinates frontend client discovery, selection migration, refresh state, and CDP ownership.
src/components/settings/DesktopClientPicker.vue Adds the installation and provider selection interface for Discord and Vesktop.
src/utils/nitroOrbsCountdown.ts Derives Nitro Orbs countdowns from the server-provided reward timestamp.
.github/workflows/build-release.yml Adds guarded develop-branch backup and reset automation following stable releases.
package.json Synchronizes the application release version to 0.10.4.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    UI[Vue login and settings UI] --> IPC[Tauri IPC]
    IPC --> Selection[Desktop client selection]
    Selection --> Discovery[Installation discovery]
    Discovery --> Discord[Official Discord variants]
    Discovery --> Vesktop[Vesktop executable or Flatpak]
    Selection --> Ownership[CDP owner and session journal]
    Ownership --> Supervisor[Process supervisor]
    Supervisor --> Launch[Launch or restart with CDP]
    Launch --> Endpoint[Loopback CDP endpoint]
    Endpoint --> Login[Account capture and quest execution]
Loading

Reviews (6): Last reviewed commit: "Update docs" | Re-trigger Greptile

Masterain98 and others added 24 commits August 24, 2026 13:38
Navigation:
- share one AppNavigation component between login and authenticated shells
- use a compact two-row glass header that preserves the brand lockup and keeps quest mode controls beside navigation
- retain theme, language, account, debug, and settings behavior across responsive layouts

Dashboard and quest actions:
- replace redundant status and recommendation panels with icon-enhanced quest filters
- move the content-sized Orbs and Nitro pill beside the dashboard heading
- finish the refresh icon's current rotation after balance loading completes
- expose batch actions as inline buttons, expand search, and remove duplicate list headings and pending-claim messaging

Localization and cleanup:
- update the dashboard description across all supported locales
- remove translations, state, handlers, and components used only by deleted dashboard surfaces

Development reliability:
- ignore Rust targets, Tauri sources, sidecars, and crates in Vite file watching
- prevent Windows EBUSY watcher failures from leaving the Tauri dev window blank

Validation:
- pnpm run build
- pnpm test (41 tests)
- pnpm run i18n:check
- pnpm run tauri:dev
- Playwright checks at 1200x800 and 800x600, including full-cycle refresh timing
Rework theme toggle to use the View Transitions API with a ripple-style clip-path animation. Adds prefers-reduced-motion handling and a guard class (html.theme-view-transition) to prevent overlapping toggles, stores click coords in CSS vars, and performs WAAPI animation on ::view-transition-new(root). Includes a fast fallback for browsers without the API. CSS updated to set initial clip-path and z-index for the transition and to cleanly restore state when finished.
Adjust layout and spacing in LoginPanel.vue for the manual-token section: increase article vertical padding, remove button py, align header items to start with larger gap, enlarge icon container (h-11/w-11, rounded-lg) and KeyRound (h-5/w-5), update title/description typography and spacing, and increase sm breakpoint form left padding to 3.75rem. These tweaks improve visual balance and readability.
Allow version.txt updates on develop to trigger release candidates while keeping stable releases restricted to main. Add an explicit release policy so develop only accepts -rcN versions and stable develop versions skip build and publish jobs.
The macOS release and CI flows were simplified to use hardened ad-hoc signatures instead of Developer ID and notarization checks. This removes the temporary keychain setup and smoke-sign script, updates build and verify scripts to require ad-hoc identities, and aligns the packaged identity audit and Rust runtime checks with the same policy. Runtime auditing now reports notarization as disabled rather than external.
- Enforce the repository-wide unsigned macOS policy with explicit Tauri --no-sign builds, dormant signing helpers, and integrity-only bundle audits.\n- Harden runtime bridge installation with serialized transactions, unique RAII temporary files, manifest/hash verification, safe legacy cleanup, and release-only helper discovery.\n- Make simulator shutdown resilient with poisoned-lock recovery, bounded shared cleanup deadlines, and unsupported-target fallbacks.\n- Align identity audits and CI/release scripts with configured neutral binary names, validated release versions, and token-safe artifact smoke tests.\n- Localize launcher actions and success/error messaging, preserve runtime process startup on identity-name failures, and correct Vietnamese claim-state text.\n\nTests: pnpm test; pnpm run build; pnpm run check:runtime-identity; pnpm run test:identity-audit; pnpm run test:packaged-identity; pnpm run i18n:check; pnpm run check:cdp-core-deps; cargo test --workspace -- --test-threads=1 (one existing fixed-port probe is flaky; targeted serial run passes); cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo fmt --check.
- Read the macOS runtime identity policy and binary names in one Node invocation while keeping signing hard-disabled.\n- Quote the disabled-signing policy check so the macOS build guard remains explicit and shell-safe.\n- Use a literal eprintln format string in the unsupported-platform launcher fallback so every cfg branch compiles cleanly.\n\nValidation: pnpm run check:runtime-identity; cargo fmt --manifest-path src-cdp-launcher/Cargo.toml -- --check; cargo test -p discord-cdp-launcher; bash -n build-macos.sh
Expose a proxy-free loopback /json target-listing API with structured errors so callers can distinguish unreachable endpoints, transient connection failures, HTTP failures, and malformed responses.

Classify Windows connection reset and refused errors as retryable while preserving the existing launcher probe states. Add parsing and socket-level regression coverage for full target lists, worker entries, HTTP errors, and complete Content-Length responses.

Serialize the local socket fixtures to keep the Windows workspace test suite deterministic under parallel execution.
Replace reqwest-based CDP target discovery with the shared proxy-free core implementation and retry transient loopback resets or refused connections with bounded exponential backoff.

Wait for a responsive DevTools endpoint before initializing Discord quest modules across manual game, play, stream, video, PLAY_ACTIVITY, and activity flows.

Preserve endpoint-level failures instead of wrapping them as misleading webpack module initialization errors, while retaining quest-specific context for genuine module failures. Add regression tests for retry classification, delay bounds, and error mapping.
Mark CDP as available and select CDP quest execution immediately after a successful CDP session login, preventing a previously persisted simulation preference from controlling the first task.

Keep token-based login behavior unchanged and add store-level regression coverage for both authentication paths.
Align the frontend package, Rust package, Cargo lock entry, and Tauri bundle configuration with the repository's 0.10.3 release version so development and packaged artifacts report the same version.
Signed-off-by: dependabot[bot] <support@github.com>
Introduce a GitHub Actions job that resets the develop branch to the stable release commit after a successful non-prerelease release on main. The job creates a backup tag (develop-before-${RELEASE_VERSION}), refuses to overwrite an existing backup, and validates develop exists before proceeding. It uses --atomic and --force-with-lease to safely update the develop branch and runs only when release_policy, build-tauri, and release jobs succeed. Provides safety checks and informative errors to avoid accidental data loss.
Replace the subscription-period calendar calculation with Discord's server-provided Program Rewards timestamp so the countdown is independent of the local timezone and month-length rules.

Add the authenticated GET /users/@me/program-rewards Tauri command, normalize both array and keyed reward payloads, and select the official NITRO=0 reward enum. Preserve minute-level refresh behavior and clear account-scoped reward state during login and logout.

Add countdown boundary, timezone, invalid-date, response-normalization, and store integration tests. Verified with Vitest, vue-tsc, Vite build, and cargo check.

@sourcery-ai sourcery-ai Bot left a comment

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.

Sorry @Masterain98, your pull request is larger than the review limit of 150,000 diff characters

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 12 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: 2b7d1052-b463-4709-b85b-c95e7c536e90

📥 Commits

Reviewing files that changed from the base of the PR and between c562358 and 1a3be4f.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (68)
  • .github/workflows/build-release.yml
  • AGENTS.md
  • README.md
  • crates/discord-cdp-launch-core/src/cdp.rs
  • crates/discord-cdp-launch-core/src/error.rs
  • crates/discord-cdp-launch-core/src/launcher.rs
  • crates/discord-cdp-launch-core/src/lib.rs
  • crates/discord-cdp-launch-core/src/model.rs
  • crates/discord-cdp-launch-core/src/platform/linux.rs
  • crates/discord-cdp-launch-core/src/platform/macos.rs
  • crates/discord-cdp-launch-core/src/platform/windows.rs
  • crates/discord-cdp-launch-core/src/processes.rs
  • crates/discord-cdp-launch-core/src/provider.rs
  • crates/discord-cdp-launch-core/src/supervisor.rs
  • crates/discord-cdp-launch-core/src/vesktop.rs
  • crates/discord-cdp-launch-core/tests/cdp_probe.rs
  • crates/discord-cdp-launch-core/tests/launcher_state_machine.rs
  • docs/desktop-client-provider-migration.md
  • docs/discord-cdp-launch-core-migration.md
  • package.json
  • public/version-desc.txt
  • public/version.txt
  • src-cdp-launcher/src/cli.rs
  • src-cdp-launcher/src/dialogs.rs
  • src-cdp-launcher/src/main.rs
  • src-tauri/Cargo.toml
  • src-tauri/src/cdp_client.rs
  • src-tauri/src/cdp_quest.rs
  • src-tauri/src/discord_api.rs
  • src-tauri/src/discord_cdp_commands.rs
  • src-tauri/src/lib.rs
  • src-tauri/src/super_properties.rs
  • src-tauri/src/token_extractor.rs
  • src-tauri/tauri.conf.json
  • src/api/tauri.test.ts
  • src/api/tauri.ts
  • src/components/DiscordCdpExitDialog.vue
  • src/components/auth/LoginPanel.vue
  • src/components/auth/loginFlow.test.ts
  • src/components/auth/loginFlow.ts
  • src/components/home/QuestViewTabs.vue
  • src/components/settings/DesktopClientPicker.vue
  • src/components/settings/DiscordIntegrationSettings.vue
  • src/composables/appExitGuard.test.ts
  • src/composables/appExitGuard.ts
  • src/composables/desktopClientState.ts
  • src/locales/de.json
  • src/locales/en.json
  • src/locales/es.json
  • src/locales/fr.json
  • src/locales/id.json
  • src/locales/ja.json
  • src/locales/ko.json
  • src/locales/pl.json
  • src/locales/pt-BR.json
  • src/locales/pt-PT.json
  • src/locales/ru.json
  • src/locales/th.json
  • src/locales/tr.json
  • src/locales/vi.json
  • src/locales/zh-TW.json
  • src/locales/zh.json
  • src/stores/auth.test.ts
  • src/stores/auth.ts
  • src/stores/quests.ts
  • src/utils/nitroOrbsCountdown.test.ts
  • src/utils/nitroOrbsCountdown.ts
  • src/views/Home.vue
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread src-tauri/src/lib.rs Outdated
Comment thread src-tauri/src/discord_cdp_commands.rs Outdated
Comment thread src-tauri/src/discord_cdp_commands.rs
Comment thread package.json Outdated
Comment thread .github/workflows/build-release.yml
Comment thread src-tauri/src/cdp_client.rs Dismissed
@Masterain98

Copy link
Copy Markdown
Owner Author

@coderabbitai review this pr

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

@Masterain98 I will review pull request #177.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment on lines +1125 to +1129
let fallback: Vec<_> = journal
.iter()
.filter(|managed| {
managed.provider_id == detected.provider_id && managed.port == detected.port
})

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.

P1 Stale sessions match replacements

After the original managed process exits, its journal entry remains until an explicit restore. If another client from the same provider later uses that CDP port and has no discoverable installation ID, this fallback treats it as the managed session. Restoration then adopts the replacement process's executable path and terminates and relaunches that unrelated client without asking for external-session confirmation.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src-tauri/src/discord_cdp_commands.rs
Line: 1125-1129

Comment:
**Stale sessions match replacements**

After the original managed process exits, its journal entry remains until an explicit restore. If another client from the same provider later uses that CDP port and has no discoverable installation ID, this fallback treats it as the managed session. Restoration then adopts the replacement process's executable path and terminates and relaunches that unrelated client without asking for external-session confirmation.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Codex

@Masterain98
Masterain98 merged commit 1615fd1 into main Sep 5, 2026
14 checks passed
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.

custom discord directory for account token retrieval ?

2 participants