You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat: currently-installed tab, upgrade-from-details, robust package upgrade logic
UI:
- Add "Installed" rail tab showing all installed packages (marketplace + custom)
- Add "Upgrade now" button in package details panel for upgradable packages
- Replace p-listbox in upgrades panel with native styled list matching design system
- Surface per-package git error messages in upgrade failure toasts
Backend:
- Add cwd= parameter to run_cmd() to avoid mutating process-wide working directory
- Replace git checkout -- . with git stash/pop to preserve local module changes
- Fix operator precedence bug causing InstallationHandler to never run post-pull
- Add git reset --hard ORIG_HEAD rollback when dependency install fails after pull
- Return tuple[bool, str] from package.upgrade() so error text reaches the API caller
- Remove dead os.chdir() from package.update() (preceded a GitPython call, had no effect)
- Update upgrade API endpoint to include per-package error details in failure list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor: promote MMPMEnv from instance to class-level attribute
MMPMEnv is a singleton; instantiating it per-instance in __init__ was
redundant. Moving it to a class-level attribute (`env: MMPMEnv = MMPMEnv()`)
removes boilerplate across 14 classes and makes the singleton relationship
explicit. Tests updated to use patch.object instead of instance assignment
(blocked by __slots__ on MagicMirrorPackage).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: sync Mirror Preview with config.js saves and warn on uninstalled modules
- Config Editor now emits a configJsSaved$ signal via SharedStoreService
whenever config.js is successfully saved; Mirror Preview subscribes and
calls resetLayout() so the visual grid always reflects the saved file
- Added configJsDirty flag on SharedStoreService so Mirror Preview picks
up the signal even when it was off-screen (destroyed by @if) at save time
- Persistent warning banner added to both Config Editor and Mirror Preview
listing any modules referenced in config.js that are not installed;
banner clears automatically when packages are installed
- Mirror Preview also re-evaluates the banner on every packages subscription
emission so it stays live without requiring a manual reset
- Replaced O(n²) category count loop in mmpm list --categories with a
single Counter pass
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: add 4.6.0 changelog entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: update placement in changelog
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+28Lines changed: 28 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -414,3 +414,31 @@
414
414
- Added 167 new unit tests, raising coverage from 66% to 99%
415
415
- Added `TestDetectDisplayServerScript` covering X11, Wayland (via `XDG_SESSION_TYPE` and `WAYLAND_DISPLAY`), Windows, and the fallback path
416
416
417
+
## Version 4.6.0
418
+
419
+
### UI
420
+
421
+
- Added "Currently Installed" tab in the navigation rail showing all installed packages (marketplace and custom) with search, sort, card, and table views
422
+
- Mirror Preview: Config Editor save now automatically triggers a layout reset so the visual grid always reflects the saved `config.js` without requiring a manual Reset click
423
+
- Mirror Preview: persistent warning banner lists any modules referenced in `config.js` that are not installed; clears automatically when the missing packages are installed
424
+
- Config Editor: persistent warning banner below the toolbar lists the same uninstalled modules while `config.js` is active; updates live when packages are installed or the file is saved
425
+
- Upgrades panel: replaced `p-listbox` with native-styled list matching the design system
426
+
- Package details panel: "Upgrade now" button appears for installed packages that have an available upgrade
427
+
428
+
### Backend
429
+
430
+
-`MagicMirrorPackage.upgrade()` rewritten: uses `git stash` / `git stash pop` to preserve local changes before pulling, surfaces error text from git through to the API response and UI toasts, rolls back via `git reset --hard ORIG_HEAD` if dependency installation fails after a successful pull
431
+
-`run_cmd()` gained an optional `cwd` parameter; `upgrade()` passes it instead of using process-global `os.chdir()`
432
+
-`MMPMEnv` promoted from a per-instance `__init__` assignment to a class-level attribute across all 14 consumer classes, making the singleton relationship explicit
433
+
-`mmpm list --categories` package count replaced O(n²) double-scan with a single `Counter` pass
434
+
435
+
### Bug Fixes
436
+
437
+
- Mirror Preview warning banner now fires on every code path including the localStorage cache early-return, not only when `config.js` is fetched from the API
438
+
- Mirror Preview correctly picks up a `config.js` save made while the panel was off-screen (`@if`-destroyed), via a `configJsDirty` flag checked on remount
439
+
440
+
### Tests
441
+
442
+
- Fixed test suite after `MMPMEnv` class-level attribute refactor: replaced instance-attribute assignment (blocked by `__slots__`) with `patch.object(MagicMirrorPackage, "env", ...)` + `addCleanup`
0 commit comments