Skip to content

Refactor GeneralTab settings sections#1123

Merged
reachrazamair merged 3 commits into
rcfrom
refactoring
Jun 24, 2026
Merged

Refactor GeneralTab settings sections#1123
reachrazamair merged 3 commits into
rcfrom
refactoring

Conversation

@reachrazamair

@reachrazamair reachrazamair commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary

Refactors GeneralTab from a 1,698-line monolith into a directory-based Settings tab with a 161-line shell, focused section components, side-effect hooks, local utilities, and expanded regression coverage.

Behavior is intended to remain unchanged. Public imports are preserved through the new GeneralTab/index.ts barrel.

Changes

  • Split Settings/tabs/GeneralTab.tsx into Settings/tabs/GeneralTab/.
  • Added 18 section components for the existing General settings UI.
  • Extracted focused hooks for:
    • Shell detection and shell config expansion
    • Maestro CLI status and install/update state
    • Sync storage loading, migration, reset, and open-folder actions
    • Forced Parallel Execution warning acknowledgement flow
  • Kept GeneralTab as the only useSettings() caller.
  • Preserved all existing data-setting-id values for Settings search parity.
  • Added local utilities for browser home URL and sync error formatting.
  • Added focused tests for extracted hooks and high-risk sections.

Testing

  • npm run test -- src/__tests__/renderer/components/Settings/tabs/GeneralTab.test.tsx src/__tests__/renderer/components/Settings/tabs/GeneralTab src/__tests__/renderer/components/Settings/searchableSettings.test.ts
    • 4 files / 178 tests passed
  • npm run test -- src/__tests__/renderer/components/Settings/tabs/DisplayTab.test.tsx src/__tests__/renderer/components/Settings/tabs/EncoreTab.test.tsx
    • 2 files / 165 tests passed
  • npm run format:check
    • Passed
  • npm run lint
    • Passed
  • npm run lint:eslint
    • Passed
  • npm run test
    • 1,110 files passed, 1 skipped
    • 31,576 tests passed, 108 skipped

Manual QA Checklist

  • Open Settings > General and verify all sections render in the same order.
  • Search every General setting and confirm scroll/highlight lands on the correct control.
  • Exercise shell detection, shell selection, custom shell path, and shell args.
  • Check Maestro CLI status and install/update states.
  • Toggle Forced Parallel Execution first-time warning, cancel, confirm, disable, and re-enable.
  • Verify browser settings, keep-alive mode, home URL reset, and recent-tab limit.
  • Verify storage location choose, migration count, restart warning, open folder, and reset.
  • Smoke light and dark themes for visual regressions.

Summary by CodeRabbit

  • New Features
    • Expanded the General settings UI with additional sections such as Auto-Run Inactivity Timeout and Auto-Resume on Limit.
    • Added enhanced browser controls (default browser, double-click behavior, home URL reset, and keep-alive mode/limit).
  • Bug Fixes
    • Improved validation and clamping for time/limit-based fields and refined conditional warning, messaging, and restart guidance behavior.
  • Tests
    • Added comprehensive Vitest + React Testing Library coverage for General Settings hooks and UI sections.
  • Refactor
    • Reorganized the General Settings tab into modular, reusable components.

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8a95332a-a434-4251-a42a-43cd2e657a1d

📥 Commits

Reviewing files that changed from the base of the PR and between 8713dd8 and dbf620a.

📒 Files selected for processing (9)
  • src/__tests__/renderer/components/Settings/tabs/GeneralTab.test.tsx
  • src/__tests__/renderer/components/Settings/tabs/GeneralTab/hooks.test.tsx
  • src/__tests__/renderer/components/Settings/tabs/GeneralTab/sections.test.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/BrowserSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/ConductorProfileSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/InputBehaviorSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/PowerSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts
💤 Files with no reviewable changes (1)
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts
🚧 Files skipped from review as they are similar to previous changes (6)
  • src/renderer/components/Settings/tabs/GeneralTab/components/BrowserSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/ConductorProfileSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts
  • src/tests/renderer/components/Settings/tabs/GeneralTab/hooks.test.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/InputBehaviorSection.tsx
  • src/tests/renderer/components/Settings/tabs/GeneralTab/sections.test.tsx

📝 Walkthrough

Walkthrough

The monolithic GeneralTab.tsx is replaced by a modular GeneralTab package with shared types, utility helpers, four hooks, many section components, a composed root, and updated hook/section tests.

Changes

GeneralTab Module Decomposition

Layer / File(s) Summary
Types and utilities
src/renderer/components/Settings/tabs/GeneralTab/types.ts, src/renderer/components/Settings/tabs/GeneralTab/utils/syncErrors.ts, src/renderer/components/Settings/tabs/GeneralTab/utils/browserDefaults.ts, src/renderer/components/Settings/tabs/GeneralTab/utils/index.ts
Defines the GeneralTab prop and state interfaces, adds the browser default URL constant, and adds sync error formatting helpers with barrel exports.
GeneralTab hooks
src/renderer/components/Settings/tabs/GeneralTab/hooks/*, src/renderer/components/Settings/tabs/GeneralTab/hooks/index.ts
Adds the four GeneralTab hooks and their hook barrel export for shell detection, Maestro CLI status, sync storage state, and forced-parallel warning state.
Section components
src/renderer/components/Settings/tabs/GeneralTab/components/*, src/renderer/components/Settings/tabs/GeneralTab/components/index.ts
Adds the GeneralTab section components and component barrel export for shell, CLI, storage, browser, behavior, and preference settings.
GeneralTab root and index
src/renderer/components/Settings/tabs/GeneralTab/GeneralTab.tsx, src/renderer/components/Settings/tabs/GeneralTab/index.ts
Introduces the new GeneralTab component that derives app version and settings state, wires the hooks into section props, and re-exports the module entry points.
Hook and section tests
src/__tests__/renderer/components/Settings/tabs/GeneralTab/hooks.test.tsx, src/__tests__/renderer/components/Settings/tabs/GeneralTab/sections.test.tsx, src/__tests__/renderer/components/Settings/tabs/GeneralTab.test.tsx
Adds Vitest and React Testing Library coverage for the new hooks and section components, and updates the existing GeneralTab integration test to cover the new settings and platform-specific assertions.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • RunMaestro/Maestro#502: Shares the GeneralTab decomposition path and the settings-tab component split used here.
  • RunMaestro/Maestro#742: Also changes the General tab sync/storage flow that is now encapsulated in useSyncStorageState.
  • RunMaestro/Maestro#711: Provides the forced-parallel warning modal flow that is exercised by useForcedParallelWarningState and InputBehaviorSection.

Poem

🐇 Hop, hop—one tab became a grove,
Hooks and sections found their home.
The CLI, shell, and storage sing,
With tests that check each little thing.
I nibble carrots, tidy, bright—
Modular tabs now feel just right.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: GeneralTab was split into separate settings sections.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactoring

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed: one or more packages not found in the registry.


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.

@greptile-apps

greptile-apps Bot commented Jun 24, 2026

Copy link
Copy Markdown

Greptile Summary

This PR splits the 1,698-line GeneralTab.tsx monolith into a directory-based module with 18 focused section components, four side-effect hooks, shared types, and local utilities, while keeping useSettings() called only in the top-level shell and preserving all data-setting-id values for Settings search.

  • The refactor is clean and the public barrel export preserves backward compatibility; all 178 GeneralTab tests and 1,110 suite-wide tests pass.
  • One logic defect in useSyncStorageState.chooseSyncFolder: a standalone result.errors check runs unconditionally after the success/failure branch, so a backend response of { success: true, errors: ['...'] } sets syncError even on a successful migration. Because the restart banner and migration count display are both gated on !syncError, they are silently suppressed in that scenario.
  • useShellSettingsState uses a one-time shellsLoaded guard rather than the isOpen-reset pattern that the other three hooks follow, so shells detected in an earlier Settings session are never refreshed.

Confidence Score: 4/5

Safe to merge for most users; the storage migration path has a conditional UX gap worth addressing before it reaches production.

The refactoring is mechanical and well-tested. The one substantive concern is in chooseSyncFolder: if the sync IPC handler ever returns success: true alongside a non-empty errors array, the restart-required banner and migration count are both silently hidden because both UI guards check !syncError. This is a latent defect that depends on backend behavior; it does not affect the happy path tested today, but it would produce confusing UX when it triggers.

src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts — specifically the unconditional result.errors override at the bottom of the chooseSyncFolder inner try block.

Important Files Changed

Filename Overview
src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts Extracted sync storage hook with a logic defect: the standalone result.errors check after the success/failure branch can silently suppress the restart banner and migration count display when the backend returns partial errors alongside a successful operation.
src/renderer/components/Settings/tabs/GeneralTab/GeneralTab.tsx Lean 161-line shell that calls useSettings() once and delegates all side-effect logic to extracted hooks; section ordering matches the original monolith.
src/renderer/components/Settings/tabs/GeneralTab/hooks/useMaestroCliState.ts Clean extraction of CLI status/install state; correctly re-fetches on isOpen, resets installMessage on tab open, and captures exceptions via Sentry.
src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts Lazy one-time shell detection with load-once guard; diverges from the isOpen-reset pattern of the other three hooks, so shell list can go stale across Settings close/reopen cycles.
src/renderer/components/Settings/tabs/GeneralTab/components/StorageLocationSection.tsx Render-only component; correctly gates restart banner and migration count on !syncError, which makes the hook logic bug in useSyncStorageState visible at the UI level.
src/tests/renderer/components/Settings/tabs/GeneralTab/hooks.test.tsx Good coverage of the happy path and failure paths for all four hooks; the success-with-errors case for chooseSyncFolder is not tested, which is where the latent logic defect lives.
src/renderer/components/Settings/tabs/GeneralTab/hooks/useForcedParallelWarningState.ts Simple, correct toggle/confirm/cancel state machine for the first-time parallel execution warning; well-tested.
src/renderer/components/Settings/tabs/GeneralTab/index.ts Barrel re-exports GeneralTab and GeneralTabProps, preserving the public import surface for all existing consumers.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[chooseSyncFolder called] --> B[selectSyncFolder IPC]
    B --> C{folder selected?}
    C -- No --> D[return early]
    C -- Yes --> E[setSyncMigrating true\nsetSyncError null\nsetSyncMigratedCount null]
    E --> F[setCustomPath IPC]
    F --> G{result.success?}
    G -- Yes --> H[setCustomSyncPath\nsetCurrentStoragePath\nsetSyncRestartRequired true\nsetSyncMigratedCount]
    G -- No --> I[setSyncError via syncResultErrorMessage]
    H --> J{result.errors?.length > 0?}
    I --> J
    J -- Yes --> K[setSyncError errors.join]
    J -- No --> L[setSyncMigrating false]
    K --> L
    L --> M[UI: restart banner only if syncRestartRequired AND NOT syncError]
    L --> N[UI: migration count only if syncMigratedCount AND NOT syncError]
    K -.->|syncError now set| O[restart banner and migration count hidden]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[chooseSyncFolder called] --> B[selectSyncFolder IPC]
    B --> C{folder selected?}
    C -- No --> D[return early]
    C -- Yes --> E[setSyncMigrating true\nsetSyncError null\nsetSyncMigratedCount null]
    E --> F[setCustomPath IPC]
    F --> G{result.success?}
    G -- Yes --> H[setCustomSyncPath\nsetCurrentStoragePath\nsetSyncRestartRequired true\nsetSyncMigratedCount]
    G -- No --> I[setSyncError via syncResultErrorMessage]
    H --> J{result.errors?.length > 0?}
    I --> J
    J -- Yes --> K[setSyncError errors.join]
    J -- No --> L[setSyncMigrating false]
    K --> L
    L --> M[UI: restart banner only if syncRestartRequired AND NOT syncError]
    L --> N[UI: migration count only if syncMigratedCount AND NOT syncError]
    K -.->|syncError now set| O[restart banner and migration count hidden]
Loading

Reviews (1): Last reviewed commit: "Refactor GeneralTab settings sections" | Re-trigger Greptile

Comment on lines +55 to +67
if (result.success) {
setCustomSyncPath(folder);
setCurrentStoragePath(folder);
setSyncRestartRequired(true);
if (result.migrated !== undefined) {
setSyncMigratedCount(result.migrated);
}
} else {
setSyncError(syncResultErrorMessage(result, 'Failed to change storage location'));
}
if (result.errors && result.errors.length > 0) {
setSyncError(result.errors.join(', '));
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Standalone errors override silently suppresses restart banner and migration count

When the backend returns { success: true, errors: ['some-warning'], migrated: 3 }, the success branch correctly sets syncRestartRequired = true and syncMigratedCount = 3, but then the unconditional check at lines 65-67 immediately sets syncError = 'some-warning'. In the UI, both the restart banner (syncRestartRequired && !syncError) and the migration count display (syncMigratedCount !== null && !syncError) are gated on syncError being falsy, so both become invisible. The user sees only the error text with no indication that the migration succeeded and a restart is required.

The same result.errors join is also already handled inside syncResultErrorMessage on the failure path, making the standalone block redundant for that case and problematic for the success case.

Comment on lines +18 to +32
const loadShells = useCallback(async () => {
if (shellsLoaded) return;
setShellsLoading(true);
try {
const detected = await window.maestro.shells.detect();
setShells(detected);
if (detected && detected.length > 0) {
setShellsLoaded(true);
}
} catch (error) {
logger.error('Failed to load shells:', undefined, error);
} finally {
setShellsLoading(false);
}
}, [shellsLoaded]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Shell list goes stale across Settings close/reopen cycles

useMaestroCliState and useSyncStorageState both use isOpen to re-fetch on every tab open. useShellSettingsState intentionally uses shellsLoaded as a one-time guard instead, meaning a shell installed after the first detection (e.g., the user installs Homebrew Fish while Maestro is open) will not appear even after closing and reopening Settings. The hook has no mechanism to reset shellsLoaded when the tab is closed. Whether this is intentional for performance or an oversight is worth confirming, as it is the only hook of the four that does not follow the isOpen-reset pattern established in this PR.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (1)
src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts (1)

24-24: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Redundant null check on array.

The detected variable is typed as ShellInfo[] from the window.maestro.shells.detect() promise, so it will always be an array. The null/undefined check is unnecessary.

♻️ Simplify the condition
-			if (detected && detected.length > 0) {
+			if (detected.length > 0) {
 				setShellsLoaded(true);
 			}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts`
at line 24, The condition checking `detected && detected.length > 0` contains a
redundant null check since the `detected` variable is already typed as
`ShellInfo[]` from the `window.maestro.shells.detect()` promise, which means it
will always be an array and never null or undefined. Simplify the condition to
only check `detected.length > 0` to remove the unnecessary null check and make
the code cleaner.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/renderer/components/Settings/tabs/GeneralTab/components/BrowserSection.tsx`:
- Around line 142-144: The onChange handler for setBrowserTabKeepAliveLimit only
enforces a minimum value of 1 using Math.max but does not enforce the upper
bound of 100, allowing values above 100 to propagate to the state despite the
max={100} attribute on the input. Modify the onChange handler to clamp the
parsed value between 1 and 100 by wrapping the Math.max expression with Math.min
to ensure both the lower and upper bounds are enforced before calling
setBrowserTabKeepAliveLimit.

In
`@src/renderer/components/Settings/tabs/GeneralTab/components/ConductorProfileSection.tsx`:
- Around line 26-37: The textarea element for the conductor profile input lacks
an accessible name for screen readers. Add either a label element with htmlFor
attribute that references a unique id on the textarea element, or add an
aria-label attribute directly to the textarea. Ensure the textarea has an id
property if using the label approach, and make sure the accessible name clearly
describes the field's purpose (e.g., "Conductor Profile" or similar).

In
`@src/renderer/components/Settings/tabs/GeneralTab/components/InputBehaviorSection.tsx`:
- Around line 32-35: The fallback value in the forcedParallelShortcut variable
uses a hardcoded macOS-specific keyboard representation that is not appropriate
for Windows or Linux users. Replace the hardcoded string '⌘ ⇧ ↩' with a
platform-aware approach that detects the operating system and returns the
correct keyboard shortcut representation based on whether the user is on macOS,
Windows, or Linux.

In
`@src/renderer/components/Settings/tabs/GeneralTab/components/PowerSection.tsx`:
- Line 3: Replace the import statement for isLinuxPlatform from
utils/platformUtils with an import of isLinux from
src/shared/platformDetection.ts. Then update any calls to isLinuxPlatform()
within the PowerSection component to use isLinux() instead, ensuring consistency
with the repository's shared platform detection contract.

In
`@src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts`:
- Around line 27-28: In the useShellSettingsState hook, the catch block that
handles shell detection failures is missing Sentry error reporting. Add a
captureException call after the logger.error statement to report shell detection
failures to Sentry, following the same pattern used in other settings hooks like
useSyncStorageState and useMaestroCliState. The captureException should accept
the error (converting it to an Error instance if it's not already one) and
include an extra object with the action context set to 'maestro.shells.detect'
to provide debugging context.

In
`@src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts`:
- Around line 65-67: The conditional block checking `result.errors` at lines
65-67 is redundant because the `syncResultErrorMessage` utility function called
at line 63 already handles extracting and processing errors from the result
object. Remove the entire if block that checks `if (result.errors &&
result.errors.length > 0)` and the corresponding `setSyncError` call, as the
error handling is already correctly implemented through the
`syncResultErrorMessage` function which properly sets the error message based on
the result state.

---

Nitpick comments:
In
`@src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts`:
- Line 24: The condition checking `detected && detected.length > 0` contains a
redundant null check since the `detected` variable is already typed as
`ShellInfo[]` from the `window.maestro.shells.detect()` promise, which means it
will always be an array and never null or undefined. Simplify the condition to
only check `detected.length > 0` to remove the unnecessary null check and make
the code cleaner.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 48e6fb05-e748-43b4-9eb6-7658b0ad6751

📥 Commits

Reviewing files that changed from the base of the PR and between 2f4c26a and 429ce2f.

📒 Files selected for processing (33)
  • src/__tests__/renderer/components/Settings/tabs/GeneralTab/hooks.test.tsx
  • src/__tests__/renderer/components/Settings/tabs/GeneralTab/sections.test.tsx
  • src/renderer/components/Settings/tabs/GeneralTab.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/GeneralTab.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/AutoRunInactivitySection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/BrowserSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/ConductorProfileSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/GitHubCliSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/GlobalHotkeySection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/HistorySection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/InputBehaviorSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/LogLevelSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/MaestroCliSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/PowerSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/PrivacySection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/RenderingSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/ShellSettingsSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/SpellCheckSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/StorageLocationSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/TabBehaviorSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/ThinkingModeSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/UpdatesSection.tsx
  • src/renderer/components/Settings/tabs/GeneralTab/components/index.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/index.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useForcedParallelWarningState.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useMaestroCliState.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useShellSettingsState.ts
  • src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts
  • src/renderer/components/Settings/tabs/GeneralTab/index.ts
  • src/renderer/components/Settings/tabs/GeneralTab/types.ts
  • src/renderer/components/Settings/tabs/GeneralTab/utils/browserDefaults.ts
  • src/renderer/components/Settings/tabs/GeneralTab/utils/index.ts
  • src/renderer/components/Settings/tabs/GeneralTab/utils/syncErrors.ts
💤 Files with no reviewable changes (1)
  • src/renderer/components/Settings/tabs/GeneralTab.tsx

Comment thread src/renderer/components/Settings/tabs/GeneralTab/components/PowerSection.tsx Outdated
Comment thread src/renderer/components/Settings/tabs/GeneralTab/hooks/useSyncStorageState.ts Outdated
@reachrazamair reachrazamair merged commit 48a4cda into rc Jun 24, 2026
3 checks passed
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.

1 participant