Repository navigation
feat: Plugoff & PluginHub parity — categories, duplicates, Rosetta banner, insights, offloading - #24
Open
bounceconnection wants to merge 7 commits into
Open
bounceconnection wants to merge 7 commits into
bounceconnection wants to merge 7 commits into
Conversation
…ends Two self-contained building blocks for the Plugoff-style features, each with tests (345 tests pass total): - PluginCategory + PluginCategoryClassifier: classifies plugins into functional categories (Synth, EQ, Dynamics, Reverb, ...) via a bundled plugin_categories.json (95 vendor/prefix rules) plus a name-keyword heuristic fallback. Resolution: longest bundle-id prefix > exact vendor > name keyword > heuristic > uncategorized. - OffloadManager (actor) + OffloadRecord: moves plugin bundles to an offload folder to reclaim disk and restores them, with collision-safe path handling and size measured before the move. UI/model integration follows in subsequent commits. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pure, tested logic layers for the competitor-parity features: - DuplicateDetector: cross-format duplicates (same plugin in VST3/AU/…) and location duplicates (same bundle+format in system & user folders), mirroring Plugoff's duplicate filter. - ArchitectureCompatibility + RosettaSunsetSummary: flags Intel-only / legacy plugins that stop working when macOS 28 removes Rosetta, for the PluginHub-style warning banner. - InsightsData: aggregates counts by format, category, and manufacturer plus totals, backing a Plugoff-style Insights view. All pure value types, Sendable, deterministic. 21 new tests; suite now 366. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Plugin gains a `category` (persisted via categoryRaw, default uncategorized). PluginReconciler runs PluginCategoryClassifier on insert and update so every scanned plugin is categorized (Synth, EQ, Reverb, …). Adds a reconciler test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds visible competitor-parity features to the dashboard: - Categories sidebar section — filter the library by functional category (Synth, EQ, Reverb, …), with per-category counts (Plugoff-style). - Cleanup > Duplicates filter — surfaces plugins installed in multiple formats or in both system and user folders (Plugoff-style). - Compatibility > "Won't run in macOS 28" filter and a prominent red warning banner counting Intel-only / legacy plugins that break when Apple removes Rosetta (PluginHub-style). All computed from the tested DuplicateDetector / ArchitectureCompatibility layers. Suite: 367 tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a Plugoff-style Insights sheet (toolbar chart button) built on the tested InsightsData layer: overview tiles (plugins, manufacturers, total size) plus Swift Charts bar breakdowns by format, category, and top manufacturers, over currently-visible plugins. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wires the tested OffloadManager into the app (Plugoff-style offloading): - New OffloadedPlugin @model persists what was moved + where from. - AppState.offloadPlugins moves bundles to ~/PluginventoryOffload and drops them from the active list; restoreOffloaded moves them back and rescans. Failures are surfaced, never silent; nothing is clobbered. - Dashboard: right-click "Offload to Reclaim Space" (with a confirmation), a "Storage ▸ Offloaded (N) · X saved" sidebar entry, and a restore list. Adds an offload↔restore round-trip integration test. Suite: 369 tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…imeout The dashboard table was one ~230-line expression (Table + 12 modifiers). Xcode 26.6 type-checks it fine, but the CI runner's older Xcode hit "unable to type-check this expression in reasonable time". Extracted the table, context menu, overlay, banner, footer, toolbar, dialog actions, inspector, and search handler into small helpers so no single expression is large. No behavior change.
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.
Stacked on #23 (scan-performance). Merge after #23, or I'll retarget this to
devonce #23 lands. Everything here builds on the perf branch'sBundleSizeService.What this adds
Plugoff-style catalog & cleanup
~/PluginventoryOffload; a Storage ▸ Offloaded (N) · X saved sidebar entry lists them with one-click Restore.PluginHub-style update UX
Architecture
Pure, deterministic, fully-tested logic layers (
DuplicateDetector,ArchitectureCompatibility,InsightsData,PluginCategoryClassifier,OffloadManager) with thin SwiftUI/SwiftData wiring on top.Plugingains a persistedcategory; a newOffloadedPluginmodel tracks moved bundles.Testing
369 tests pass locally (
swift test, macOS, Xcode 26.6); build clean; SwiftLint clean on changed files. New suites: DuplicateDetector, ArchitectureCompatibility, InsightsData, OffloadedPlugin, plus reconciler category coverage.Not included (possible follow-ups)
Manufacturer sidebar filter, PDF export (CSV export already exists), PluginHub-style vendor grouping + version-diff arch chips, and duplicate "resolve" actions.
🤖 Generated with Claude Code