feat(desktop): add configurable quit shortcut confirmation - #9076
UI Consistency: All clear
All clear
Details
Note
Your check run agent prompt is: .macroscope/check-run-agents/ui-consistency.md
More information about how Check Run Agents work can be found in our Help Center.
Reviewed the in-scope web files at head edbbb40:
apps/web/src/components/QuitHoldOverlay.tsx— the hint now derives its mode from the main-process hint event rather than unhydrated client settings, and double-press hints hide on theupevent (which the main process now emits only when the 500 ms acceptance window closes or the attempt is cancelled), while hold hints keep the 1200 ms linger matchingQUIT_HOLD_DURATION_MS. The previously flagged linger/window mismatch is resolved.apps/web/src/components/settings/SettingsPanels.tsx— the new quit-shortcut control uses the sharedSelect/SelectTrigger/SelectPopup/SelectItemprimitives with the samew-full sm:w-40,align="end" alignItemWithTrigger={false},hideIndicator, andaria-labelconventions as the adjacent enum settings rows; no primitive geometry, focus, or state overrides added.apps/web/src/components/settings/settingsSearch.ts— title and search terms stay in sync with the row's new wording and the restore-summary label.
No CSS ownership, theme variant, scroll/mask, or environment-routing changes are present in scope.
🔍 Agent activity — 6 tool calls
💭 I'm checking the current state of QuitHoldOverlay.tsx, SettingsPanels.tsx, and settingsSearch.ts. The earlier issue with QuitHoldOverlay looks resolved now—the main process keeps the double-press hint alive until the window closes and emits an "up" event, while the renderer hides the hint immediately on that event, so the behavior is consistent. I want to pull the current files to confirm.
1. browse_code — apps/web/src/components/QuitHoldOverlay.tsx
2. browse_code — apps/desktop/src/window/QuitHold.ts
💭 I'm checking the overlay logic: it shows on press with the mode, and hides immediately if it detects a double-click during release, otherwise the main process handles hiding via watchdog timeout or cancellation. The watchdog's default cancel behavior looks fine, and the pressedMode closure variable seems safely scoped without consistency issues. Now I want to compare the select component usage in SettingsPanels.tsx against the shared Select primitive's conventions elsewhere in the file, so I'm pulling up that section to check.
3. browse_code — apps/web/src/components/settings/SettingsPanels.tsx
4. git_tools — SelectTrigger className
💭 The Select usage matches existing conventions. Now I want to check the settingsSearch.ts item where the title changed to "Quit shortcut" - I need to verify whether that title is pulled elsewhere in the UI, like in the SettingsRow, and confirm the search item id and title stay consistent.
5. browse_code — apps/web/src/components/settings/settingsSearch.ts
6. git_tools — confirmQuit
💭 I'm double-checking that the Switch and Select imports are still valid, and confirming the hold-mode hint logic works correctly since the main process now sends the "up" event only at window end, matching the linger comment's intent. Checking a few other small things: pressedMode defaults safely, the overlay naming is a minor nit but not a real issue, and the accessibility role handles mode changes fine. The labels across the Select, search title, and restore list stay consistent, and the QUIT_CONFIRMATION_MODE_LABELS pattern matches the existing ENVIRONMENT_IDENTIFICATION_LABELS convention, so nothing in the web scope needs flagging. Given the schema requires JSON output rather than a plain string, I'll produce a success response with summary "All clear" to satisfy both the instruction and the schema. There's also no unresolved thread left to address since the QuitHoldOverlay comment was already resolved, so the final answer is simply a success state with "All clear".
Agent Credits: 61 credits
Token usage: 8 uncached input · 174,312 cache-read input · 66,385 cache-write input · 2,784 output
Agent Credits may also include non-token charges from external tools such as web research.