Skip to content

desktop: no way to redo/cancel a staged revert from the UI; Ctrl+X R is intercepted as browser reload #55407

Closed as duplicate

Description

@YUNQIYE

Summary

On the OpenCode desktop/web UI, after undoing (staging a revert) a message, there is no discoverable control to redo/cancel that revert. The documented TUI redo keybind (Ctrl+X then R) does not work in the desktop/web UI, because Ctrl+R is intercepted by the browser as a page reload. As a result, a staged undo cannot be reverted from the interface.

Environment

  • opencode version: 2.0.26
  • OS: Windows 10.0.26200.9457 (Windows_NT 10.0.26200, x64)
  • Terminal: N/A (OpenCode desktop app / web UI)
  • Shell: C:\WINDOWS\system32\cmd.exe
  • Install/channel: OpenCode Desktop (bundled CLI at %APPDATA%\ai.opencode.desktop\cli\2.0.26\opencode-cli.exe)
  • Active plugins: None found

Reproduction

  1. Open a session in the OpenCode desktop app (web UI).
  2. Undo / revert the most recent message so a revert is staged.
  3. Look for a way to redo/cancel the revert: there is no visible "Redo" button, banner, or menu item.
  4. Press Ctrl+X then R (the TUI redo binding). The UI briefly shows the OpenCode splash icon and reloads (because Ctrl+R reloads the page), and the revert remains staged.

Expected Behavior

After a staged undo, the user should be able to cancel/redo it from the UI via a visible control, and the redo keybind should not collide with the browser's reload shortcut.

Actual Behavior

  • No redo/cancel control is discoverable in the desktop/web UI.
  • Ctrl+X then R triggers a page reload instead of redo; the staged revert stays.
  • The staged revert is only visible server-side via GET /api/session/{id} (e.g. "revert": {"messageID": "...", "snapshot": "...", "files": []}) and could only be cleared via the API.

Additional Context

  • DELETE /api/session/{id}/revert clears the staged revert and works when the session is idle (confirmed on 2.0.26).
  • DELETE /api/session/{id}/revert returns SessionBusyError (HTTP 409) while the model is generating, so it cannot be used during an active response.
  • Undo is only reversible while uncommitted; sending a new message commits it.
  • No logs captured (desktop app).

Activity

  1. opencode-agent commented on Oct 14, 2026

    @opencode-agent
    Contributor

    Thanks for the detailed report, @YUNQIYE! I think this is a duplicate of #55192, which reports the same gap in the 2.0 desktop app: after an undo there's no visible restore/redo control and nothing on screen shows that a revert is pending.

    About the keybind: Ctrl+X then R is the TUI's redo binding. The desktop/web app doesn't define a keybind for redo, so Ctrl+R goes to the webview and reloads the page. For now, you can cancel a staged revert in the desktop app by typing /redo in the composer or by choosing Redo from the command palette. Both are available while a revert is staged.

    Possible duplicates and related issues, ordered from most to least likely:

    The bot will close this issue as a duplicate in 1 day unless you reply explaining how your problem is different.

  2. opencode-agent commented on Oct 15, 2026

    @opencode-agent
    Contributor

    Closing this as a duplicate of #55192, since there's been no reply saying how this one is different. #55192 covers the missing restore/redo control in the desktop app after an undo, so please follow and add to that issue instead.

    Until it's addressed, you can cancel a staged revert in the desktop app by typing /redo in the composer or by choosing Redo from the command palette. Ctrl+X R is only a TUI binding, which is why the desktop app reloads the page.

    If your problem turns out to be different from #55192, please comment here and say how. Thanks again for the detailed report, @YUNQIYE!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions