fix(desktop): install theme packs from Settings → Themes - #617
Merged
github-actions[bot] merged 1 commit intoAug 26, 2026
Conversation
Add In use / Available palettes on the Themes screen so Limestone installs and activates in one click from the GitHub release tarball. Expand the offline COMMUNITY_CATALOG past Fog so extras still appear when the registry API is down. OFFICIAL_THEMES stays empty. Co-authored-by: Tomás Maritano <tomymaritano@gmail.com>
tomymaritano
marked this pull request as ready for review
August 26, 2026 01:59
|
Warning Review limit reachedNext included review available in 45 minutes. View limit detailsLimit 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. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
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 |
Contributor
|
🎉 This PR is included in version 0.19.2 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
8 tasks
github-actions Bot
pushed a commit
that referenced
this pull request
Aug 26, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Settings → Themes → Install was quitting the Linux AppImage immediately after a successful pack download. The pack landed on disk (`data/plugins/theme-limestone`) and showed as In use after relaunch; the process still exited on the Install click. Install-complete now harvests and activates the palette in Settings first, then broadcasts `plugins:reload`. That reload is a send-only IPC — not `process.exit`, `app.quit`, `win.close`, or `webContents.reload`. PluginHost syncs by plugin id so a newly installed theme pack is activated without unloading every other plugin (the remount that raced palette activation). Incremental sync sorts the full desired set first so a new dependent of an already-active plugin still activates, and a dependent whose base left the scan is unloaded. `OFFICIAL_THEMES` stays empty. Browse / Other package is unchanged. No version bump. ## Type of Change - [x] Bug fix - [ ] New feature - [ ] Breaking change - [ ] Documentation update ## Related Issues Follow-up to #617 (QA on 0.19.2 AppImage: Install Limestone quits the process). ## Checklist - [x] I've read [CONTRIBUTING.md](../CONTRIBUTING.md) - [x] Tests pass locally (`pnpm test`) - [ ] Build succeeds (`pnpm build`) - [x] PR targets `develop` branch (not `main`) ## What changed - **Install-complete path:** `finishThemePackInstall` refresh → harvest → activate → `requestReload`. Settings stays on Themes; Limestone can move to In use without a relaunch. - **`plugins:requestReload`:** `reloadPluginWindows()` sends `plugins:reload` to living windows only. - **PluginHost:** incremental load/unload by id; full deactivate only on unmount. `planPluginHostSync` sorts `next` before the diff so already-active dependencies remain visible. ## Tests - Reload does not call `process.exit` / close / destroy; settings + notes windows stay alive. - Install-complete order is harvest + activate, then reload; windows still alive after that path. - Adding a theme pack does not unload already-active plugins. - New extension whose base is already active is activated; extension whose base left the scan is unloaded. - `pnpm test`: 19/19 tasks, including desktop 384 tests and plugin-api 259 tests. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-36f1100b-5aa1-4640-8154-6a580ed004c5?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-36f1100b-5aa1-4640-8154-6a580ed004c5&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Plugins now update incrementally, activating newly added plugins and removing unavailable ones without restarting the app. * Theme pack installation now refreshes installed themes, activates the selected theme when available, and updates plugin windows automatically. * **Bug Fixes** * Improved plugin reload handling to avoid closing, restarting, or disrupting active windows. * Reload requests safely skip unavailable windows and continue notifying remaining active windows. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Settings → Themes now has In use and Available palettes. Click Install on Limestone (or any
category === "theme"pack) to download the GitHub release tarball, move the card to In use, and activate it — without leaving Themes. Other package stays on Plugins → Install.Continues #616 (JS
registerThemeharvest already on develop).OFFICIAL_THEMESstays[].Type of Change
Related Issues
Follow-up to #616 / #604. Theme.json on satellites is still a later pack-contract change.
Checklist
pnpm test)pnpm build)developbranch (notmain)What changed
tokens.css) first, then installed packs (including JSregisterThemepalettes). Click selects; selected = outline./pluginsrows withcategory === "theme"that are not installed. Heading + hint. Card is name, one-liner,v{version}, primary Install. No fake preview. No Plugins redirect.bundleUrlviainstallFromUrl. Never api.github.com git/contents.{Name} installed.+requestReload/dripnex:plugins:refresh+ activate. Fail:Couldn't install {Name}. Use Plugins → Install → Other package if this keeps failing.Card stays Available.Couldn't load palettes.+ Retry; fallbackCOMMUNITY_CATALOGnow includes extras past Fog (Sakura, Limestone, Walnut, Ash, Quartz, Cove, Velvet, Ink, Pine, Saffron, Dune, Noir).Tests
bundleUrl.Screenshots
N/A — desktop Settings; covered by unit tests.