WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Conversation

@owenlin0
Copy link
Contributor

@owenlin0 owenlin0 commented Dec 22, 2025

Add thread/rollback to app-server to support IDEs undo-ing the last N turns of a thread.

For context, an IDE partner will be supporting an "undo" capability where the IDE (the app-server client) will be responsible for reverting the local changes made during the last turn. To support this well, we also need a way to drop the last turn (or more generally, the last N turns) from the agent's context. This is what thread/rollback does.

Core idea: A Thread rollback is represented as a persisted event message (EventMsg::ThreadRollback) in the rollout JSONL file, not by rewriting history. On resume, both the model's context (core replay) and the UI turn list (app-server v2's thread history builder) apply these markers so the pruned history is consistent across live conversations and thread/resume.

Implementation notes:

  • Rollback only affects agent context and appends to the rollout file; clients are responsible for reverting files on disk.
  • If a thread rollback is currently in progress, subsequent thread/rollback calls are rejected.
  • Because we use CodexConversation::submit and codex core tracks active turns, returning an error on concurrent rollbacks is communicated via an EventMsg::Error with a new variant CodexErrorInfo::ThreadRollbackFailed. app-server watches for that and sends the BAD_REQUEST RPC response.

Tests cover thread rollbacks in both core and app-server, including when num_turns > existing turns (which clears all turns).

Note: this explicitly does not behave like /undo which we just removed from the CLI, which does the opposite of what thread/rollback does. /undo reverts local changes via ghost commits/snapshots and does not modify the agent's context / conversation history.

@owenlin0
Copy link
Contributor Author

@codex review

@chatgpt-codex-connector
Copy link
Contributor

Codex Review: Didn't find any major issues. More of your lovely PRs please.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@owenlin0 owenlin0 marked this pull request as ready for review December 23, 2025 17:20
turn.status = TurnStatus::Interrupted;
}

fn handle_thread_rollback(&mut self, payload: &ThreadRolledBackEvent) {
Copy link
Contributor Author

@owenlin0 owenlin0 Dec 23, 2025

Choose a reason for hiding this comment

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

FYI for code reviewers, this file is responsible for building app-server's Thread + Turns from the rollout file (i.e. on thread/resume), reading mostly from EventMsg

Copy link
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@owenlin0
Copy link
Contributor Author

@codex review

@chatgpt-codex-connector
Copy link
Contributor

Codex Review: Didn't find any major issues. Hooray!

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

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