fix(desktop): improve AppImage icons and remote environment#2538
fix(desktop): improve AppImage icons and remote environment#2538mwolson wants to merge 12 commits intopingdotgg:mainfrom
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. 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. Comment |
ApprovabilityVerdict: Needs human review Despite the 'fix' framing, this PR introduces significant new Linux-specific functionality: a secret storage system with GNOME Keyring/KWallet detection, early Electron startup configuration, DBus fallback logic, a new IPC endpoint, and schema changes. These runtime behavior changes and new abstractions warrant human review. You can customize Macroscope's approvability policy. Learn more. |
dba46b4 to
bfc4a7c
Compare
|
can you resolve conflcits here? |
…ore-backend # Conflicts: # apps/desktop/src/desktopSettings.test.ts # apps/desktop/src/desktopSettings.ts # apps/desktop/src/main.ts
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1676dd3. Configure here.






Summary
ready, including--password-store, Wayland/X11 app class, and desktop scheme privileges.DBUS_SESSION_BUS_ADDRESS, so GNOME Keyring/libsecret is reachable when launching outside GNOME.Closes #2331.
Fixes #2539.
Diagnosis
The icon issue came from Linux AppImage builds staging only a single large
icon.png. This PR stages a directory of standard icon sizes (16,22,24,32,48,64,128,256, and512) and points electron-builder at that directory. CI installs ImageMagick for Linux release builds so those sizes can be generated reliably.The credential-store failure came from Electron selecting a non-encrypting Linux
safeStoragebackend when running under desktop environments it does not recognize, such as Niri. The app was also relying on shell/session environment values that may not be present when launched from an AppImage or desktop entry.This PR moves the Linux Electron setup into the synchronous process bootstrap path so it happens before Electron emits
ready, which is required for--password-storeand privileged protocol registration to take effect. It also imports enough login/session environment to reach the user's DBus session bus and falls back to/run/user/$UID/buswhen appropriate.While testing the remote flow, two separate persistence issues showed up:
DateTime.Utcvalues.Scope
This is intentionally focused on Linux desktop/AppImage remote environment reliability. It does not change remote server behavior, and SSH process cleanup after removal remains fire-and-forget so the Settings UI does not hang if disconnect stalls.
Test plan
bun fmtbun lintbun typecheckbun run testbun run --filter @t3tools/desktop test -- DesktopEarlyElectronStartup DesktopEnvironment ElectronProtocol DesktopShellEnvironment linuxSecretStoragebun run --filter @t3tools/desktop test -- DesktopSavedEnvironmentsbun run --filter @t3tools/web test -- localApi service.addSavedEnvironment catalogbun run dist:desktop:linux16,22,24,32,48,64,128,256, and512.T3CODE_HOMEisolated.passwordStore: gnome-libsecret,backend: gnome_libsecret, andencryptionAvailable: true.remote-game, and ran a trivial task on it.remote-game, reinstalled/restarted, and confirmed the saved environment did not come back.Note
Medium Risk
Touches Electron/Linux startup switches and secret-storage persistence paths, which can affect app boot and credential handling on Linux. Also changes saved-environment removal semantics across desktop IPC and web runtime, so regressions could surface as missing or reappearing environments.
Overview
Improves Linux desktop/AppImage reliability by moving critical Electron configuration to a synchronous pre-
readybootstrap (configureElectronBeforeReady), including scheme privilege registration, WM class, DBus session bus fallback, and an auto/forced--password-storeselection based on persisted settings and desktop-session heuristics.Strengthens credential persistence and saved-environment lifecycle: adds a
linuxPasswordStoresetting, logs ElectronsafeStoragebackend/encryption availability, returns actionable secret-store remediation errors on Linux, and adds an atomicremoveSavedEnvironmentAPI wired through contracts, desktop IPC/preload, and web persistence to prevent deleted SSH environments from resurfacing. Also hardens remote auth handling by updating contract schemas to decodeexpiresAtfrom ISO strings and adds tests around date decoding/encoding.Build/release updates generate standard Linux icon size variants for AppImage (using ImageMagick) and point electron-builder at the icon directory.
Reviewed by Cursor Bugbot for commit 6fd6ad1. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add multi-size AppImage icons and improve Linux remote environment configuration
magickorconvert), and the build config points to the icons directory instead of a single PNG. The CI workflow installs ImageMagick on Linux when missing.readyevent on Linux viaconfigureElectronBeforeReady(), settingDBUS_SESSION_BUS_ADDRESS, thepassword-storeswitch, and WM class. Previously these were set later or inline in startup.linuxPasswordStoresetting is added to desktop settings, read early from disk to select the correct Electron keychain backend before app ready.DBUS_SESSION_BUS_ADDRESSis now auto-detected fromXDG_RUNTIME_DIRor/run/user/<uid>when missing from the shell environment.removeSavedEnvironmentmethod is added across the full stack: desktop settings service, IPC channel, preload bridge, and web persistence layer. TheremoveSavedEnvironmentflow now deletes the persisted record first and handles SSH cleanup as fire-and-forget.AuthBootstrapResult,AuthBearerBootstrapResult, etc.) now useDateTimeUtcFromStringsoexpiresAtis parsed from ISO strings intoDateTimevalues.ElectronProtocol.layerSchemePrivilegesis no longer composed indesktopRuntimeLayer; scheme privileges are now registered synchronously viaconfigureElectronBeforeReady(), changing the timing of registration.Macroscope summarized 6fd6ad1.