Skip to content

fix(jetbrains): show revert progress inline - #12104

Merged
kirillk merged 6 commits into
mainfrom
goldenrod-butternut
Jul 10, 2026
Merged

fix(jetbrains): show revert progress inline#12104
kirillk merged 6 commits into
mainfrom
goldenrod-butternut

Conversation

@kirillk

@kirillk kirillk commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Issue

No linked issue; this is follow-up polish for the JetBrains rollback/redo progress UX.

Context

Rollback and redo currently take over the whole transcript with a loading surface. That hides the conversation during a short, contextual operation and makes it unclear which message or redo controls are in progress.

Implementation

Replaces the full-body reverting surface with inline progress:

  • rollback progress appears in the target user message toolbar slot and suppresses the hover toolbar while active
  • redo / redo all progress appears on the rollback banner action row while disabling the redo buttons
  • the prompt STOP button now cancels an active rollback/redo instead of sending a turn abort
  • reverting keeps the existing controller watchdog/cancel/error guards and adds state metadata so the UI can route rollback vs redo
  • LoadingPanel is simplified back to loading/retry/offline text only

Screenshots

Rolling back

Screen Shot 2026-07-10 at 10 59 45 AM

Redoing

Screen Shot 2026-07-10 at 11 00 31 AM

How to Test

Manual/local verification

  • Agent: ./gradlew :frontend:test --tests ai.kilocode.client.session.ui.SessionMessageListPanelTest --tests ai.kilocode.client.session.SessionUiLayoutTest --tests ai.kilocode.client.session.controller.TurnLifecycleTest --tests ai.kilocode.client.session.ui.LoadingPanelTest --tests ai.kilocode.client.session.ui.RevertProgressTest --tests ai.kilocode.client.session.ui.ProgressPanelTest passed.
  • Agent: ./gradlew typecheck passed.
  • Agent: ./gradlew test passed.
  • Push hook: bun turbo typecheck --filter=!@kilocode/kilo-jetbrains passed.
  • Push hook: bun turbo typecheck --filter=@kilocode/kilo-jetbrains passed.

Reviewer test steps

  1. Start a JetBrains session with at least one user prompt in the transcript.
  2. Click rollback on a user prompt and confirm the transcript stays visible while that message shows Rolling back... and Cancel inline.
  3. Press STOP or the inline Cancel action and confirm rollback cancels without issuing a normal turn abort.
  4. Revert a conversation, click Redo or Redo All, and confirm the banner disables redo controls while showing Redoing... and Cancel on the action row.

Blocked checks and substitute verification

  • None.

Checklist

  • Issue linked above, or exception explained
  • Tests/verification described
  • Screenshots/video included for visual changes, or marked N/A
  • Changeset considered for user-facing changes
  • I personally reviewed the diff and can explain the changes, including any AI-assisted work.

Get in Touch

Kilo maintainer / internal contributor.

@kilo-code-bot

kilo-code-bot Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 2
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 552 Cancellation can unlock before the server mutation is settled
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1587 Failed revert discards deferred active-turn state

Fix these issues in Kilo Cloud

Files Reviewed (2 files)
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt - 2 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/TurnLifecycleTest.kt - 0 issues
Previous Review Summaries (4 snapshots, latest commit af02970)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit af02970)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 2
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 549 Cancellation can unlock before the server mutation is settled
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1292 Turn events are discarded while reverting

Fix these issues in Kilo Cloud

Files Reviewed (9 files)
  • bun.lock - 0 issues
  • packages/kilo-jetbrains/backend/src/main/kotlin/ai/kilocode/backend/app/KiloBackendChatManager.kt - 0 issues
  • packages/kilo-jetbrains/backend/src/test/kotlin/ai/kilocode/backend/app/KiloBackendChatManagerTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/SessionUi.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt - 2 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/SessionUiLayoutTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/TurnLifecycleTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanelTest.kt - 0 issues

Previous review (commit 8b54e34)

Status: 5 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 5
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 542 Cancel action does not stop the backend mutation
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1469 Turn events can clobber the active operation state
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1522 Timeout can lock the session indefinitely
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt 89 Rollback can hide progress and leave redo enabled
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/views/MessageView.kt 487 Mounted hover toolbar remains active while reverting

Fix these issues in Kilo Cloud

Files Reviewed (38 files)
  • .changeset/jetbrains-revert-loading.md - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/SessionUi.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt - 3 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/model/SessionState.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt - 1 issue
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertProgress.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanel.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/views/MessageView.kt - 1 issue
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ar.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_bs.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_da.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_de.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_es.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_fr.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ja.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ko.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_nl.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_no.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_pl.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_pt_BR.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ru.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_th.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_tr.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_uk.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_zh_CN.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_zh_TW.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/SessionUiLayoutTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/SessionControllerTestBase.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/TurnLifecycleTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/EmptySessionPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/LoadingPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/ProgressPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/PromptPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/RevertProgressTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/testing/FakeSessionRpcApi.kt - 0 issues

Previous review (commit 465adb6)

Status: 5 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 5
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 542 Cancel action does not stop the backend mutation
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1469 Turn events can clobber the active operation state
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 1522 Timeout can lock the session indefinitely
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt 89 Rollback can hide progress and leave redo enabled
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/views/MessageView.kt 487 Mounted hover toolbar remains active while reverting

Fix these issues in Kilo Cloud

Files Reviewed (38 files)
  • .changeset/jetbrains-revert-loading.md - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/SessionUi.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt - 3 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/model/SessionState.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt - 1 issue
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertProgress.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanel.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/views/MessageView.kt - 1 issue
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ar.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_bs.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_da.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_de.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_es.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_fr.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ja.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ko.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_nl.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_no.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_pl.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_pt_BR.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_ru.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_th.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_tr.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_uk.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_zh_CN.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle_zh_TW.properties - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/SessionUiLayoutTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/SessionControllerTestBase.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/TurnLifecycleTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/EmptySessionPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/LoadingPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/ProgressPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/PromptPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/RevertProgressTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/testing/FakeSessionRpcApi.kt - 0 issues

Previous review (commit c1b206b)

Status: 4 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 3
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 424 Active revert ownership depends on mutable display state
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 515 Partial redo no longer handles busy sessions
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt 537 Frontend cancellation can leave backend mutation running

SUGGESTION

File Line Issue
packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle.properties 46 Redo timeout is reported as a rollback timeout

Fix these issues in Kilo Cloud

Files Reviewed (19 files)
  • .changeset/jetbrains-revert-loading.md - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/SessionUi.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/controller/SessionController.kt - 3 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/model/SessionState.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertBanner.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/RevertProgress.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanel.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/views/MessageView.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/main/resources/messages/KiloBundle.properties - 1 issue
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/SessionUiLayoutTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/SessionControllerTestBase.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/controller/TurnLifecycleTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/EmptySessionPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/LoadingPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/ProgressPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/PromptPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/RevertProgressTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/session/ui/SessionMessageListPanelTest.kt - 0 issues
  • packages/kilo-jetbrains/frontend/src/test/kotlin/ai/kilocode/client/testing/FakeSessionRpcApi.kt - 0 issues

Reviewed by gpt-5.6-sol-20260709 · Input: 145.4K · Output: 17.5K · Cached: 1M

Review guidance: REVIEW.md from base branch main

kirillk added 2 commits July 10, 2026 12:22
Address review feedback on inline revert progress:

- Backend revert/unrevert now use a cancellable OkHttp call with a bounded
  request timeout, so coroutine cancellation aborts the in-flight request and
  a stuck request can no longer lock the session indefinitely.
- Cancel now actually cancels the active rollback/redo job instead of only
  relabeling the progress text; the UI stays locked on the operation until the
  backend request returns, then clears or reports the final outcome.
- The revert watchdog cancels the timed-out job and releases the operation
  lock via failReverting rather than leaving revertOp alive forever.
- TurnOpen/TurnClose no longer clobber an active revert operation state.
- The revert banner represents active rollback (not just redo) with inline
  progress and disabled redo controls so progress never silently disappears.
- Clear the mounted hover copy overlay when reverting starts so the rollback
  toolbar no longer lingers next to the progress row.
Address review: guarding TurnOpen/TurnClose/status with revertOp dropped
the transitions entirely, so a turn that started just before a rollback
could leave the prompt idle while the server turn was still active. Record
the underlying turn/status transition in revertDeferred while the revert is
held and reconcile it when the operation releases: an aborted turn releases
to Idle, a still-active turn releases back to Busy/Retry/Offline. Failed
reverts still surface the error explicitly.
revertJob = null
revertOp = null
// A failed revert surfaces the error explicitly; drop any deferred turn state.
revertDeferred = null

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.

[WARNING]: Preserve deferred active-turn state on failure

TurnOpen and status now record Busy/Retry/Offline, but this branch discards that state whenever the rollback RPC fails or the watchdog times out. In the race this mechanism is intended to cover, a turn can open after the initial busy check; if the revert then fails, replacing the deferred activity with SessionState.Error loses knowledge of the live server turn and can enable the prompt while that turn continues. Please surface the revert error without dropping a non-terminal deferred state, or retain the turn activity separately until an idle/close event arrives.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

@kirillk
kirillk merged commit 56c5b7f into main Jul 10, 2026
29 checks passed
@kirillk
kirillk deleted the goldenrod-butternut branch July 10, 2026 18:31
t7tran pushed a commit to t7tran/kilocode that referenced this pull request Aug 14, 2026
fix(jetbrains): show revert progress inline
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.

2 participants