Skip to content

Add a shortcut to archive a thread - #2699

Closed
atimmer wants to merge 1 commit into
pingdotgg:mainfrom
atimmer:feature/add-shortcut-for-archiving-single-thread
Closed

Add a shortcut to archive a thread#2699
atimmer wants to merge 1 commit into
pingdotgg:mainfrom
atimmer:feature/add-shortcut-for-archiving-single-thread

Conversation

@atimmer

@atimmer atimmer commented May 14, 2026

Copy link
Copy Markdown

What Changed

Add thread.archiveCurrent so the current thread can be archived without leaving the keyboard.

  • Bind mod+shift+a when the in-app terminal is not focused.
  • Add “Archive current thread” to the command palette.
  • Reuse the sidebar archive flow so success navigates to a fresh draft and failures show an error toast.
  • Ignore repeated keydown events so holding the shortcut archives exactly once.

Why

The existing Cmd+1, Cmd+2, etc. shortcuts make switching threads fast, but stale threads still require pointer interaction to archive. This keeps the entire switch-and-clean-up workflow on the keyboard.

UI Changes

Before

Searching for archive on upstream main returns no matching command.

Before — upstream main command palette has no Archive thread action

After

Searching for archive on this PR shows “Archive current thread” with ⇧⌘A.

After — PR #2699 command palette shows Archive current thread with Shift-Command-A

Interaction

The shortcut archives the active thread and navigates to a fresh draft.

archive-shortcut.mp4

Verification

Automated

  • vp check — passed
  • vp run typecheck — passed
  • vp test run apps/web/src/lib/chatGlobalShortcuts.test.ts packages/contracts/src/keybindings.test.ts packages/shared/src/keybindings.test.ts — 121 tests passed

Manual GUI verification

Verified in a disposable, paired T3 Code environment at head 3759679409cf:

  • Active thread + mod+shift+a: archived once and navigated to a fresh draft.
  • Command palette: “Archive current thread” is visible and archives successfully.
  • New-draft route: shortcut is a no-op with no toast or browser side effect.
  • In-app terminal focused: shortcut does not archive the thread.
  • Held shortcut/repeat stream: exactly one archive event and no spurious failure toast.
  • Running thread: “Failed to archive thread — Cannot archive a running thread.” toast appears.
  • Three selected sidebar threads: context menu shows “Archive (3)”; all three archive with no error toast.

Evidence is captured locally as before-command-palette.png, after-command-palette.png, after-archive-shortcut.png, after-archive-toast.png, terminal-focus-noop.png, hold-chord-single-archive.png, multi-select-selected.png, multi-select-archive-result.png, and archive-shortcut.mp4.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Low Risk
Focused UX and keybinding wiring reusing existing archive behavior; no auth or data-model changes.

Overview
Adds thread.archiveCurrent so users can archive the active thread from the keyboard without using the sidebar.

mod+shift+a is registered as the default binding (when the terminal is not focused), documented in user keybindings, and validated in contracts/shared tests. Chat route global shortcuts handle the command by calling attemptArchiveThread on the routed thread; draft routes no-op.

attemptArchiveThread is moved into useThreadActions (archive + failure toast), replacing duplicated logic in the sidebar. The command palette gains Archive current thread when a server thread is active, wired to the same helper.

shouldIgnoreChatGlobalShortcutEvent centralizes ignoring defaultPrevented and repeat keydowns so holding the chord does not archive multiple times.

Reviewed by Cursor Bugbot for commit 959d9a7. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add thread.archiveCurrent keyboard shortcut to archive the active thread

  • Adds a default keybinding mod+shift+a for thread.archiveCurrent (when terminal is not focused) via keybindings.ts and the contracts schema in keybindings.ts.
  • The global shortcut handler in _chat.tsx calls attemptArchiveThread on the current thread, skipping repeated or already-handled keydown events via the new shouldIgnoreChatGlobalShortcutEvent guard.
  • The command palette in CommandPalette.tsx surfaces an "Archive current thread" action when a thread is active, advertising the same shortcut.
  • attemptArchiveThread is extracted into useThreadActions.ts and shows a stacked toast on non-interruption failures; the sidebar now consumes it via props instead of its own local implementation.

Macroscope summarized 959d9a7.

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels May 14, 2026
@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9998881e-63ed-49f7-ad1f-d125316951ae

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.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes May 14, 2026
@macroscopeapp

macroscopeapp Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR adds a new keyboard shortcut for archiving threads. An unresolved review comment identifies that the new shortcut bypasses the archive confirmation dialog, creating inconsistent behavior for users who have that setting enabled. This behavioral inconsistency warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge force-pushed the feature/add-shortcut-for-archiving-single-thread branch from e8f77a4 to d1c0b29 Compare June 16, 2026 18:35
@macroscopeapp
macroscopeapp Bot dismissed their stale review June 16, 2026 18:35

Dismissing prior approval to re-evaluate d1c0b29

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jun 16, 2026
@atimmer
atimmer force-pushed the feature/add-shortcut-for-archiving-single-thread branch from d1c0b29 to 6f587ed Compare July 8, 2026 13:43
@atimmer

atimmer commented Jul 8, 2026

Copy link
Copy Markdown
Author

@juliusmarminge I was on a holiday, but I have now force pushed from my local fork to bring this PR to mergable status.

Comment thread apps/web/src/routes/_chat.tsx Outdated
@atimmer
atimmer force-pushed the feature/add-shortcut-for-archiving-single-thread branch from 6f587ed to 64279d3 Compare July 8, 2026 14:08
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 8, 2026 14:09

Dismissing prior approval to re-evaluate 64279d3

Comment thread apps/web/src/routes/_chat.tsx
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 8, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 8, 2026 14:15

Dismissing prior approval to re-evaluate fe54216

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Jul 8, 2026
Comment thread apps/web/src/routes/_chat.tsx
@atimmer
atimmer force-pushed the feature/add-shortcut-for-archiving-single-thread branch from ed5cc7b to e064cd7 Compare July 22, 2026 07:35
Comment thread apps/web/src/components/Sidebar.tsx
@atimmer
atimmer force-pushed the feature/add-shortcut-for-archiving-single-thread branch from e064cd7 to 3759679 Compare July 22, 2026 09:25
@macroscopeapp
macroscopeapp Bot dismissed their stale review July 22, 2026 09:25

Dismissing prior approval to re-evaluate 3759679

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 3759679. Configure here.

event.stopPropagation();
if (!routeThreadRef) return;
void attemptArchiveThread(routeThreadRef);
return;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Archive shortcut skips confirmation

Medium Severity

The new thread.archiveCurrent shortcut and command-palette action call attemptArchiveThread directly, so they never consult confirmThreadArchive. Sidebar archive and multi-select still prompt when that setting is on, so users who enabled archive confirmation can still archive the current thread immediately from the keyboard or Cmd+K.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 3759679. Configure here.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

This is intended

@atimmer
atimmer force-pushed the feature/add-shortcut-for-archiving-single-thread branch from 3759679 to 959d9a7 Compare July 23, 2026 11:09
@atimmer

atimmer commented Jul 23, 2026

Copy link
Copy Markdown
Author

Rebased onto current main and ported to the new command-palette bus architecture, since the palette context this originally hooked into was replaced upstream. The archive action now registers in the current palette action list, with toast/error handling consolidated in useThreadActions. Same shortcut and behavior: mod+shift+a.

@atimmer

atimmer commented Aug 28, 2026

Copy link
Copy Markdown
Author

Closing this, because I use the new settled workflow and that has a keyboard shortcut after #8089

@atimmer atimmer closed this Aug 28, 2026
@atimmer
atimmer deleted the feature/add-shortcut-for-archiving-single-thread branch August 28, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant