Reorganize settings by task and reconcile with the menu bar#246
Merged
Conversation
Restructures the settings window so the controls people actually open it for are findable without hunting: - Fold the version + Check for Updates control into the title header bar (right-aligned), keeping Support pinned directly beneath it. - Add a conditional "needs attention" banner near the top that fires when a required permission is missing or the selected engine is unavailable, so the user doesn't scroll to the bottom to find out why nothing works. - Regroup the flat form by task: General (the everyday toggles + multi-line + welcome), Model & Engine (engine choice + availability + the previously far-away Local Models block, now merged), Writing (length, language, custom rules, name), Shortcuts (was "Keybind"), Apps (was "Disabled Apps"), Permissions, then Uninstall. - Reconcile menu vs settings: add the multi-line toggle to settings for parity and align the indicator label to "Show Indicator" in both surfaces. No settings-model or persistence changes — purely presentation, ordering, and label parity.
Greptile: the banner covered missing permissions and an unavailable Apple Intelligence engine, but a failed .llamaOpenSource runtime was only visible after scrolling to the Model & Engine row. Add the matching case so both engine paths flag failure at the top.
Owner
Author
|
Addressed the banner gap in Local CI parity on the branch: SwiftLint clean, build succeeded, 290 tests pass (3 skipped). No merge conflicts with current main. |
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
Refactors the settings window so users can find what they need faster, without changing any underlying settings or persistence. Stays a single flat grouped
Form(no tabs/sidebar) — just reordered, regrouped, and aligned with the menu bar.Key changes:
Validation
Presentation-only; no
SuggestionSettingsModelor persistence changes. Worth an eyeball in the running app to confirm the header layout and banner read well.Linked issues
None.
Risk / rollout notes
UI-only reorganization. The per-app blocklist/allowlist polarity was intentionally left as-is (out of scope), and the prefix-autocorrect feature is not referenced here since it isn't on
mainyet.Greptile Summary
This PR is a presentation-only reorganization of the settings window — no persistence, no model changes — that regroups controls by task, merges previously scattered sections, and adds a top-of-screen attention banner for blocked-autocomplete states.
Autocomplete,Profile, andLocal Modelssections are merged intoGeneral,Writing, and alocalModelControlsgroup nested insideModel & Engine;Keybind→ShortcutsandDisabled Apps→Appsare pure renames.attentionBannersurfaces the three blocking states (missing permissions, Apple Intelligence unavailable, llama runtime failure) near the top without scrolling.multiLineEnabledBindingis added to wire the new "Allow Multi-line Suggestions" toggle in Settings, and the menu-bar label is trimmed from "Show Cotabby Indicator" to "Show Indicator" to match.Confidence Score: 5/5
Safe to merge — purely presentation reorganization with no persistence, model, or behavioral changes.
Every changed line is SwiftUI layout: section renames, view moves, a new conditional banner, and one label string. No settings model mutations, no new side effects, no new async paths. The attention banner correctly covers all three blocking states (permissions, Apple Intelligence, llama failure). The new multiLineEnabledBinding follows the same pattern as every other binding in the file and hooks into a pre-existing model property. Nothing here can regress autocomplete behavior.
No files require special attention.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[SettingsView body] --> B[settingsHeader\nversion + Check for Updates] A --> C[supportSection] A --> D{attentionBanner\nconditions} D -- permissions missing --> E[attentionRow: grant permissions] D -- appleIntelligence unavailable --> F[attentionRow: foundation model message] D -- llamaOpenSource failed --> G[attentionRow: runtime failure detail] D -- all OK --> H[EmptyView] A --> I[generalSection\nEnable / Indicator / Multi-line / Clipboard / Onboarding] A --> J[modelEngineSection\nEngine picker + availability/runtime status] J -- supportsLocalModelManagement --> K[localModelControls Group\ndescription / picker / catalog / folder] A --> L[writingSection\nLength / Language / Name / CustomRules] A --> M[shortcutsSection] A --> N[appsSection] A --> O[permissionsSection] A --> P[uninstallSection]Comments Outside Diff (1)
Cotabby/UI/SettingsView.swift, line 721-728 (link).appleIntelligencebranch oflocalModelsDescriptionis now unreachable.localModelControls— the only caller — is guarded bysuggestionSettings.selectedEngine.supportsLocalModelManagement, which is almost certainlyfalsefor.appleIntelligence. As a result the string "These models are used when Engine is set to Open Source." can never appear in the UI, and the hint that local models exist (useful when a user is deciding whether to switch engines) is silently dropped. Consider removing the dead branch or restructuring themodelEngineSectionto surface this hint another way.Reviews (2): Last reviewed commit: "Surface the attention banner when the op..." | Re-trigger Greptile