Skip to content

feat: content blocker, extension overhaul, SponsorBlock, ATC, tab organizer, settings redesign#334

Open
l984-451 wants to merge 2 commits intonook-browser:devfrom
l984-451:upstream-pr/core-fixes-perf
Open

feat: content blocker, extension overhaul, SponsorBlock, ATC, tab organizer, settings redesign#334
l984-451 wants to merge 2 commits intonook-browser:devfrom
l984-451:upstream-pr/core-fixes-perf

Conversation

@l984-451
Copy link
Copy Markdown

@l984-451 l984-451 commented Mar 27, 2026

Summary

Major additive contribution with new features and improvements.

New Subsystems

  • Content Blocker: Based on wBlock ad blocker, AdvancedBlockingEngine with SafariConverterLib pipeline, filter list management (EasyList), site-specific scripts (Facebook, YouTube ad blocking).
  • SponsorBlock: Built-in YouTube sponsor segment skipping via SponsorBlock API
  • Air Traffic Control: Work in progress, but has initial features. Domain-based tab routing rules (SiteRoutingManager) with settings UI.
  • Tab Organizer: Local LLM-powered tab organization via mlx-swift-lm with preview/apply workflow. Also still a WIP, need to improve its logic a bit.

Extension System Overhaul

  • Split ExtensionManager into focused modules (Delegate, Installation, Diagnostics, ExternallyConnectable, TabNotifications)
  • New Extension Library panel UI (Button, Panel, MoreMenu, View)
  • Bitwarden biometric unlock support (BitwardenBiometricHandler)
  • Native messaging handler

Settings Redesign

  • Because of adding adblocker, sponsorblock, etc. I felt like the settings would fit better in a sidebar style list. I know it differs from safari, but it fits other MacOS settings and works well.
  • New NavigationSplitView sidebar layout (SettingsWindow)
  • Dedicated tabs for Ad Blocker, SponsorBlock, Air Traffic Control
  • Refactored General, Privacy, AI tabs to Form+grouped style

Core Improvements

  • Tab.swift: Favicon lazy loading/dedup/retry, URL sanitization for logs, web process crash tracking, @Published loadingState
  • TabManager.swift: N+1 query elimination via pre-fetch optimization in persistence sync
  • UI: HoverTrackingView replacing SwiftUI .onHover across ~35 files, PageLoadingProgressBar, EditPinnedURLDialog, View+GlassEffect
  • Dead code removal: 8 unused files (DitheringUtils, DragWindowView, GradientInterpolation, NavMenuStyle, TabListAdapter, TabListDataSource, NewDocumentTarget, Info.plist.bak)

New Dependencies

  • mlx-swift-lm (on-device LLM for tab organizer)
  • SafariConverterLib (AdGuard filter rule conversion for content blocker)

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 27, 2026

Important

Review skipped

Too many files!

This PR contains 152 files, which is 2 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c64a744c-4607-402b-a13c-7da76ecd8786

📥 Commits

Reviewing files that changed from the base of the PR and between 8665266 and bdd1512.

📒 Files selected for processing (152)
  • .gitignore
  • App/AppDelegate.swift
  • App/ContentView.swift
  • App/NookApp.swift
  • App/NookCommands.swift
  • App/Window/WindowView.swift
  • CommandPalette/CommandPalette Accessories/CommandPaletteSuggestionView.swift
  • CommandPalette/CommandPalette Accessories/HistorySuggestionItem.swift
  • CommandPalette/CommandPalette Accessories/TabSuggestionItem.swift
  • CommandPalette/CommandPaletteView.swift
  • Navigation/Sidebar/SidebarBottomBar.swift
  • Navigation/Sidebar/SpaceContextMenu.swift
  • Navigation/Sidebar/SpacesList/SpacesList.swift
  • Navigation/Sidebar/SpacesList/SpacesListItem.swift
  • Navigation/Sidebar/SpacesSideBarView.swift
  • Nook.xcodeproj/project.pbxproj
  • Nook.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • Nook/Adapters/TabListAdapter.swift
  • Nook/Components/Browser/Window/TabCompositorView.swift
  • Nook/Components/DragDrop/NookDragPreviewWindow.swift
  • Nook/Components/DragDrop/NookDragSessionManager.swift
  • Nook/Components/DragDrop/NookDragSourceView.swift
  • Nook/Components/DragDrop/NookDropZoneHostView.swift
  • Nook/Components/EmojiPicker/EmojiPicker.swift
  • Nook/Components/Extensions/ExtensionActionView.swift
  • Nook/Components/Extensions/ExtensionLibraryButton.swift
  • Nook/Components/Extensions/ExtensionLibraryMoreMenu.swift
  • Nook/Components/Extensions/ExtensionLibraryPanel.swift
  • Nook/Components/Extensions/ExtensionLibraryView.swift
  • Nook/Components/Extensions/ExtensionPermissionView.swift
  • Nook/Components/FindBar/FindBarView.swift
  • Nook/Components/Peek/PeekOverlayView.swift
  • Nook/Components/Settings/PrivacySettingsView.swift
  • Nook/Components/Settings/ProfileRowView.swift
  • Nook/Components/Settings/SettingsUtils.swift
  • Nook/Components/Settings/SettingsView.swift
  • Nook/Components/Settings/SettingsWindow.swift
  • Nook/Components/Settings/ShortcutRecorderView.swift
  • Nook/Components/Settings/Tabs/AI.swift
  • Nook/Components/Settings/Tabs/AdBlocker.swift
  • Nook/Components/Settings/Tabs/AirTrafficControlSettingsView.swift
  • Nook/Components/Settings/Tabs/Appearance.swift
  • Nook/Components/Settings/Tabs/General.swift
  • Nook/Components/Settings/Tabs/SponsorBlock.swift
  • Nook/Components/Sidebar/AIChat/AISidebarResizeView.swift
  • Nook/Components/Sidebar/AIChat/SidebarAIChat.swift
  • Nook/Components/Sidebar/MediaControls/MediaControlsView.swift
  • Nook/Components/Sidebar/Menu/SidebarMenu.swift
  • Nook/Components/Sidebar/Menu/SidebarMenuDownloadsHover.swift
  • Nook/Components/Sidebar/Menu/SidebarMenuDownloadsTab.swift
  • Nook/Components/Sidebar/Menu/SidebarMenuHistoryTab.swift
  • Nook/Components/Sidebar/Menu/SidebarMenuTab.swift
  • Nook/Components/Sidebar/NavButtonsView.swift
  • Nook/Components/Sidebar/PinnedButtons/PinnedGrid.swift
  • Nook/Components/Sidebar/PinnedButtons/PinnedTabView.swift
  • Nook/Components/Sidebar/SidebarResizeView.swift
  • Nook/Components/Sidebar/SpaceSection/SpaceSeparator.swift
  • Nook/Components/Sidebar/SpaceSection/SpaceTab.swift
  • Nook/Components/Sidebar/SpaceSection/SpaceTitle.swift
  • Nook/Components/Sidebar/SpaceSection/SpaceView.swift
  • Nook/Components/Sidebar/SpaceSection/SplitTabRow.swift
  • Nook/Components/Sidebar/SpaceSection/TabFolderView.swift
  • Nook/Components/Sidebar/TopBar/TopBarView.swift
  • Nook/Components/Sidebar/URLBarView.swift
  • Nook/Components/Sidebar/UpdateNotification/SidebarUpdateNotification.swift
  • Nook/Components/Toast/ToastView.swift
  • Nook/Components/WebsiteView/PageLoadingProgressBar.swift
  • Nook/Components/WebsiteView/WebView.swift
  • Nook/Components/WebsiteView/WebsiteView.swift
  • Nook/Extensions/View+GlassEffect.swift
  • Nook/Info.plist.bak
  • Nook/Managers/AIManager/AIConfigService.swift
  • Nook/Managers/AIManager/AIProvider.swift
  • Nook/Managers/AIManager/AIService.swift
  • Nook/Managers/AIManager/MCP/MCPTransport.swift
  • Nook/Managers/AIManager/Providers/OpenAICompatibleProvider.swift
  • Nook/Managers/AIManager/Tools/BrowserToolExecutor.swift
  • Nook/Managers/AIManager/Tools/BrowserTools.swift
  • Nook/Managers/AuthenticationManager/AuthenticationManager.swift
  • Nook/Managers/BrowserManager/BrowserManager.swift
  • Nook/Managers/ContentBlockerManager/AdvancedBlockingEngine.swift
  • Nook/Managers/ContentBlockerManager/ContentBlockerManager.swift
  • Nook/Managers/ContentBlockerManager/ContentRuleListCompiler.swift
  • Nook/Managers/ContentBlockerManager/FilterListManager.swift
  • Nook/Managers/ContentBlockerManager/Resources/facebook-sponsored-blocker.js
  • Nook/Managers/ContentBlockerManager/Resources/nook-filters-default.txt
  • Nook/Managers/ContentBlockerManager/Resources/scriptlets.corelibs.json
  • Nook/Managers/ContentBlockerManager/Resources/youtube-ad-blocker.js
  • Nook/Managers/ContentBlockerManager/Resources/youtube-sponsorblock.js
  • Nook/Managers/DialogManager/DialogManager.swift
  • Nook/Managers/DialogManager/Dialogs/EditPinnedURLDialog.swift
  • Nook/Managers/DialogManager/Dialogs/SpaceCreationDialog.swift
  • Nook/Managers/DialogManager/Dialogs/SpaceEditDialog.swift
  • Nook/Managers/DownloadManager/DownloadManager.swift
  • Nook/Managers/DragManager/DragLockManager.swift
  • Nook/Managers/DragManager/TabDragManager.swift
  • Nook/Managers/ExtensionManager/BitwardenBiometricHandler.swift
  • Nook/Managers/ExtensionManager/ExtensionBridge.swift
  • Nook/Managers/ExtensionManager/ExtensionManager+Delegate.swift
  • Nook/Managers/ExtensionManager/ExtensionManager+Diagnostics.swift
  • Nook/Managers/ExtensionManager/ExtensionManager+ExternallyConnectable.swift
  • Nook/Managers/ExtensionManager/ExtensionManager+Installation.swift
  • Nook/Managers/ExtensionManager/ExtensionManager+TabNotifications.swift
  • Nook/Managers/ExtensionManager/ExtensionManager.swift
  • Nook/Managers/ExtensionManager/InternalNativePortHandler.swift
  • Nook/Managers/ExtensionManager/NativeMessagingHandler.swift
  • Nook/Managers/ExtensionManager/PopupUIDelegate.swift
  • Nook/Managers/FindManager/FindManager.swift
  • Nook/Managers/ImportManager/Safari.swift
  • Nook/Managers/KeyboardShortcutManager/KeyboardShortcutManager.swift
  • Nook/Managers/KeyboardShortcutManager/WebsiteShortcutDetector.swift
  • Nook/Managers/MediaControlsManager/MediaControlsManager.swift
  • Nook/Managers/PeekManager/PeekManager.swift
  • Nook/Managers/PeekManager/PeekWebView.swift
  • Nook/Managers/ProfileManager/ProfileManager.swift
  • Nook/Managers/SearchManager/SearchManager.swift
  • Nook/Managers/SearchManager/Utils.swift
  • Nook/Managers/SiteRoutingManager/SiteRoutingManager.swift
  • Nook/Managers/SiteRoutingManager/SiteRoutingRule.swift
  • Nook/Managers/SplitViewManager/SplitViewManager.swift
  • Nook/Managers/SponsorBlockManager/SponsorBlockManager.swift
  • Nook/Managers/SponsorBlockManager/SponsorBlockModels.swift
  • Nook/Managers/TabManager/TabManager.swift
  • Nook/Managers/TabOrganizerManager/LocalLLMEngine.swift
  • Nook/Managers/TabOrganizerManager/TabOrganizationApplier.swift
  • Nook/Managers/TabOrganizerManager/TabOrganizationPlan.swift
  • Nook/Managers/TabOrganizerManager/TabOrganizationPrompt.swift
  • Nook/Managers/TabOrganizerManager/TabOrganizerManager.swift
  • Nook/Managers/WebViewCoordinator/WebViewCoordinator.swift
  • Nook/Models/AI/AIModels.swift
  • Nook/Models/BrowserConfig/BrowserConfig.swift
  • Nook/Models/BrowserWindowState.swift
  • Nook/Models/Extension/ExtensionModels.swift
  • Nook/Models/KeyboardShortcut/KeyboardShortcut.swift
  • Nook/Models/Settings/NewDocumentTarget.swift
  • Nook/Models/Tab/Tab.swift
  • Nook/Models/Tab/TabFolder.swift
  • Nook/Models/Tab/TabsModel.swift
  • Nook/Protocols/TabListDataSource.swift
  • Nook/ThirdParty/MuteableWKWebView/MuteableWKWebView.m
  • Nook/Utils/AnyShape.swift
  • Nook/Utils/Colors.swift
  • Nook/Utils/DitheringUtils.swift
  • Nook/Utils/DragWindowView.swift
  • Nook/Utils/GradientInterpolation.swift
  • Nook/Utils/HoverTrackingView.swift
  • Nook/Utils/WebKit/FocusableWKWebView.swift
  • Settings/NookSettingsService.swift
  • UI/Buttons/NavButtons/NavButton.swift
  • UI/Buttons/NavButtons/NavMenuStyle.swift
  • UI/Buttons/NookButton/NookButtonStyle.swift
  • UI/ConditionalModifiers.swift

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

…anizer, settings redesign

Major additive contribution with new features and improvements — no upstream features removed.

Content Blocker System:
- AdvancedBlockingEngine with SafariConverterLib pipeline
- Site-specific scripts (Facebook, YouTube)
- Filter list management with EasyList integration

Extension System Overhaul:
- Split ExtensionManager into focused modules (Delegate, Installation, Diagnostics, ExternallyConnectable, TabNotifications)
- New Extension Library panel UI
- Bitwarden biometric unlock support
- Native messaging handler

SponsorBlock:
- Built-in YouTube sponsor segment skipping
- SponsorBlock API integration with category options

Air Traffic Control:
- SiteRoutingManager for domain-based tab routing rules
- Settings UI for managing routing rules

Tab Organizer:
- Local LLM-powered tab organization via mlx-swift-lm
- Organization preview and apply workflow

Settings Redesign:
- New NavigationSplitView sidebar layout
- Dedicated tabs for Ad Blocker, SponsorBlock, ATC

Core Improvements:
- Tab: favicon lazy loading, URL sanitization, crash tracking
- TabManager: N+1 query elimination, pre-fetch optimization
- HoverTrackingView replacing SwiftUI .onHover across UI
- PageLoadingProgressBar, EditPinnedURLDialog, View+GlassEffect
- Remove dead code (8 unused files)
- Add .superpowers to gitignore

New SPM dependencies: mlx-swift-lm, SafariConverterLib
@l984-451 l984-451 force-pushed the upstream-pr/core-fixes-perf branch from 0ba9c32 to d6df226 Compare March 27, 2026 13:34
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.

2 participants