feat(web): settle and restore threads with a keyboard shortcut - #8089
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
There was a problem hiding this comment.
One finding: the new thread.settle shortcut skips the environment settlement capability gate that every existing settle surface applies, so on a pre-settlement server the keystroke surfaces an error toast instead of doing nothing.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit a006b3c. Configure here.
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This adds a new global keyboard workflow that can settle or restore the active thread and changes the thread lifecycle from the ChatView runtime. The implementation is localized and capability-gated, but the new user-facing behavior warrants human review. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
One finding: the new thread.settle shortcut re-derives the active thread's settled state from the sidebar's snapshot map, so its toggle direction can disagree with the settle affordances rendered for the same thread.
Posted via Macroscope — UI Consistency
## What's Changed * feat(web): settle and restore threads with a keyboard shortcut by @t3dotgg in pingdotgg/t3code#8089 * perf(desktop): cut macOS signing calls by 81% by @t3dotgg in pingdotgg/t3code#8093 * feat: link pull requests to threads by @t3dotgg in pingdotgg/t3code#8160 * feat(web): safely attach HEIC photos as JPEG images by @t3dotgg in pingdotgg/t3code#8161 **Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260825.1181...v0.0.34-nightly.20260825.1182 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260825.1182

Settling the active thread required pointer-driven sidebar or header actions, and settled threads had no matching keyboard path back.
Add
thread.settlewith the default shortcutmod+shift+s. The same shortcut settles an active thread or restores a settled thread, respects existing settlement rules, and never intercepts keys while the terminal has focus. The shortcut is configurable through the existing keybinding settings.Inspired by and with thanks to:
Verified with 83 focused contract, server, and web tests, targeted lint and formatting, plus scoped typechecks for contracts, shared, client runtime, server, and web.
Model: GPT-5.6 Sol
Harness: Codex in T3 Code
Note
Low Risk
Keyboard-only wiring to existing thread settlement APIs with the same guards as pointer actions; no new auth or data paths.
Overview
Adds a
thread.settlekeybinding (mod+shift+s, disabled when the terminal has focus) across contracts, shared defaults, and server default tests.ChatView global shortcuts now handle that command: on a settle-capable server thread they call existing settle / unsettle flows (same rules as UI), with an error toast if settle fails.
Web and contracts tests cover resolution and the
!terminalFocusguard; user docs describe the new default.Reviewed by Cursor Bugbot for commit e4f0c37. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add
mod+shift+skeyboard shortcut to settle and restore threadsthread.settlecommand toTHREAD_KEYBINDING_COMMANDSin keybindings.ts and mapsmod+shift+sto it in the default keybinding set in keybindings.tsChatViewContentin ChatView.tsx: when pressed on an active server thread that supports settlement, it callssettleThreadorhandleUnsettleActiveThreadif already settled, showing a toast on failure!terminalFocusso it does not fire inside the terminalChatViewContentcallspreventDefaultonmod+shift+soutside the terminal, which could shadow existing browser or app shortcuts bound to that combination📊 Macroscope summarized e4f0c37. 1 file reviewed, 1 issue evaluated, 1 issue filtered, 0 comments posted
🗂️ Filtered Issues
apps/web/src/components/ChatView.tsx — 0 comments posted, 1 evaluated, 1 filtered
thread.settlebranch does not enforce the terminal-focus exclusion itself.resolveShortcutCommandaccepts bindings with nowhenAst(and users can configure a custom binding without!terminalFocus), so when such a binding matches while a terminal owns focus this branch still callssettleThread/handleUnsettleActiveThreadafter only checking the server/thread guards. This lets a terminal keystroke unexpectedly settle or restore the active thread, contrary to the shortcut's terminal-focus behavior. [ Filtered as negative feedback ]