Skip to content

🐛 fix(store): delete message before regeneration#11760

Merged
arvinxx merged 1 commit intonextfrom
fix/delete
Jan 23, 2026
Merged

🐛 fix(store): delete message before regeneration#11760
arvinxx merged 1 commit intonextfrom
fix/delete

Conversation

@arvinxx
Copy link
Copy Markdown
Member

@arvinxx arvinxx commented Jan 23, 2026

Summary

  • Fix "delete and regenerate" not actually deleting the original message
  • Reorder operations: delete first, then regenerate
  • Add test case to prevent regression

Problem

When "delete and regenerate" was called on an assistant message:

  1. regenerateAssistantMessage was called first, which switched to a new branch
  2. After branch switch, the original message no longer appeared in displayMessages
  3. deleteMessage used displayMessageSelectors.getDisplayMessageById(id) to find the message
  4. Since message wasn't in current display, it returned early without deleting

Solution

Change the operation order to delete first, then regenerate:

  1. Get parent user message ID before deletion
  2. Delete the assistant message (while it's still in displayMessages)
  3. Regenerate based on parent user message

Test plan

  • Added test case verifying deleteMessage is called before switchMessageBranch and internal_execAgentRuntime
  • Added test case for edge case when message has no parentId
  • All 18 generation action tests pass

Related Issues

Closes: https://linear.app/lobehub/issue/LOBE-2533

fix #11137

🤖 Generated with Claude Code

When "delete and regenerate" was called, regeneration happened first
which switched to a new branch. This caused the original message to
no longer appear in displayMessages, so deleteMessage couldn't find
the message and failed silently.

Changes:
- Reorder operations: delete first, then regenerate
- Get parent user message ID before deletion (needed for regeneration)
- Add early return if message has no parentId
- Add test case to verify correct operation order

Closes: LOBE-2533

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Jan 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
lobehub Building Building Preview, Comment Jan 23, 2026 4:46pm

Request Review

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Sorry, we are unable to review this pull request

The GitHub API does not allow us to fetch diffs exceeding 300 files, and this pull request has 7358

@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. 🐛 Bug labels Jan 23, 2026
@arvinxx arvinxx changed the base branch from dev to next January 23, 2026 17:00
@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XXL This PR changes 1000+ lines, ignoring generated files. labels Jan 23, 2026
Copy link
Copy Markdown

@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.

Reviewed commit: ad17720730

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 230 to 232
await chatStore.deleteMessage(messageId, { operationId });
await get().regenerateUserMessage(userId);
chatStore.completeOperation(operationId);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Close regenerate operation on failure

In delAndRegenerateMessage, a new operation is started, then deleteMessage/regenerateUserMessage are awaited and completeOperation is called afterward. If either await throws (e.g., internal_execAgentRuntime rejects), the function exits before completing or failing the operation, leaving a running entry in operations for a message that was just deleted. That keeps operationSelectors.isMessageProcessing true and can leave the UI in a perpetual “generating” state or make subsequent cancellation logic behave incorrectly. Consider wrapping this block in try/catch/finally and calling failOperation/completeOperation accordingly.

Useful? React with 👍 / 👎.

@arvinxx arvinxx changed the title 🐛 fix(store): delete message before regeneration to fix LOBE-2533 🐛 fix(store): delete message before regeneration Jan 23, 2026
@codecov
Copy link
Copy Markdown

codecov bot commented Jan 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 74.43%. Comparing base (ea5eed8) to head (ad17720).
⚠️ Report is 19 commits behind head on next.

Additional details and impacted files
@@            Coverage Diff             @@
##             next   #11760      +/-   ##
==========================================
- Coverage   74.44%   74.43%   -0.02%     
==========================================
  Files        1191     1191              
  Lines       94478    94482       +4     
  Branches    12934    10900    -2034     
==========================================
- Hits        70334    70327       -7     
- Misses      24054    24065      +11     
  Partials       90       90              
Flag Coverage Δ
app 67.58% <100.00%> (-0.02%) ⬇️
database 91.48% <ø> (ø)
packages/agent-runtime 90.20% <ø> (ø)
packages/context-engine 85.33% <ø> (ø)
packages/conversation-flow 92.28% <ø> (ø)
packages/file-loaders 87.04% <ø> (ø)
packages/memory-user-memory 69.30% <ø> (ø)
packages/model-bank 100.00% <ø> (ø)
packages/model-runtime 86.72% <ø> (ø)
packages/prompts 79.33% <ø> (ø)
packages/python-interpreter 92.90% <ø> (ø)
packages/ssrf-safe-fetch 0.00% <ø> (ø)
packages/utils 93.16% <ø> (ø)
packages/web-crawler 95.62% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
Store 67.99% <ø> (ø)
Services 50.69% <ø> (ø)
Server 68.50% <ø> (-0.02%) ⬇️
Libs 39.99% <ø> (ø)
Utils 93.60% <ø> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@arvinxx arvinxx merged commit a8a6300 into next Jan 23, 2026
31 of 34 checks passed
@arvinxx arvinxx deleted the fix/delete branch January 23, 2026 18:22
@gru-agent
Copy link
Copy Markdown
Contributor

gru-agent bot commented Jan 23, 2026

⏳ Processing in progress

@lobehubbot
Copy link
Copy Markdown
Member

❤️ Great PR @arvinxx ❤️

The growth of project is inseparable from user feedback and contribution, thanks for your contribution! If you are interesting with the lobehub developer community, please join our discord and then dm @arvinxx or @canisminor1990. They will invite you to our private developer channel. We are talking about the lobe-chat development or sharing ai newsletter around the world.

lobehubbot pushed a commit that referenced this pull request Jan 23, 2026
## [Version&nbsp;2.0.0-next.358](v2.0.0-next.357...v2.0.0-next.358)
<sup>Released on **2026-01-23**</sup>

#### 🐛 Bug Fixes

- **store**: Delete message before regeneration.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### What's fixed

* **store**: Delete message before regeneration, closes [#11760](#11760) ([a8a6300](a8a6300))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

</div>
@lobehubbot
Copy link
Copy Markdown
Member

🎉 This PR is included in version 2.0.0-next.358 🎉

The release is available on:

Your semantic-release bot 📦🚀

JamieStivala pushed a commit to jaworldwideorg/OneJA-Bot that referenced this pull request Jan 23, 2026
## [Version&nbsp;1.154.0](v1.153.1...v1.154.0)
<sup>Released on **2026-01-23**</sup>

#### ♻ Code Refactoring

- **misc**: Migrate AI Rules to Claude Code Skills.

#### ✨ Features

- **database**: Extended async task with metadata and parent id, added index.
- **misc**: Remove NextAuth.

#### 🐛 Bug Fixes

- **copilot**: History popover not refreshing when agentId changes.
- **editor**: Prevent crash when toggling enableInputMarkdown setting.
- **home**: Use correct CreateGroupModal for session group creation.
- **model-runtime**: Handle null content in anthropic message builder.
- **ModelSelect**: Resolve tooltip hover causing popup to close.
- **pdf**: Ensure worker config before Document render.
- **store**: Delete message before regeneration.
- **misc**: Fix auto scroll, fix favorite refresh bug and group topic refresh issue, fixed the agent group builder tools excaution edge case crash, page content switch mismatch, when use market group, the group sys role was not used.

<br/>

<details>
<summary><kbd>Improvements and Fixes</kbd></summary>

#### Code refactoring

* **misc**: Migrate AI Rules to Claude Code Skills, closes [lobehub#11737](https://github.com/jaworldwideorg/OneJA-Bot/issues/11737) ([346fc46](346fc46))

#### What's improved

* **database**: Extended async task with metadata and parent id, added index, closes [lobehub#11712](https://github.com/jaworldwideorg/OneJA-Bot/issues/11712) ([31d2f26](31d2f26))
* **misc**: Remove NextAuth, closes [lobehub#11732](https://github.com/jaworldwideorg/OneJA-Bot/issues/11732) ([1eff864](1eff864))

#### What's fixed

* **copilot**: History popover not refreshing when agentId changes, closes [lobehub#11731](https://github.com/jaworldwideorg/OneJA-Bot/issues/11731) ([64f39e7](64f39e7))
* **editor**: Prevent crash when toggling enableInputMarkdown setting, closes [lobehub#11755](https://github.com/jaworldwideorg/OneJA-Bot/issues/11755) ([ea5eed8](ea5eed8))
* **home**: Use correct CreateGroupModal for session group creation, closes [lobehub#11752](https://github.com/jaworldwideorg/OneJA-Bot/issues/11752) ([36bcc50](36bcc50))
* **model-runtime**: Handle null content in anthropic message builder, closes [lobehub#11756](https://github.com/jaworldwideorg/OneJA-Bot/issues/11756) ([539753a](539753a))
* **ModelSelect**: Resolve tooltip hover causing popup to close, closes [lobehub#11742](https://github.com/jaworldwideorg/OneJA-Bot/issues/11742) ([1b73f14](1b73f14))
* **pdf**: Ensure worker config before Document render, closes [lobehub#11746](https://github.com/jaworldwideorg/OneJA-Bot/issues/11746) ([ad34072](ad34072))
* **store**: Delete message before regeneration, closes [lobehub#11760](https://github.com/jaworldwideorg/OneJA-Bot/issues/11760) ([a8a6300](a8a6300))
* **misc**: Fix auto scroll, closes [lobehub#11734](https://github.com/jaworldwideorg/OneJA-Bot/issues/11734) ([892fa9f](892fa9f))
* **misc**: Fix favorite refresh bug and group topic refresh issue, closes [lobehub#11745](https://github.com/jaworldwideorg/OneJA-Bot/issues/11745) ([5d115ef](5d115ef))
* **misc**: Fixed the agent group builder tools excaution edge case crash, closes [lobehub#11735](https://github.com/jaworldwideorg/OneJA-Bot/issues/11735) ([5de4742](5de4742))
* **misc**: Page content switch mismatch, closes [lobehub#11758](https://github.com/jaworldwideorg/OneJA-Bot/issues/11758) ([fdc8f95](fdc8f95))
* **misc**: When use market group, the group sys role was not used, closes [lobehub#11739](https://github.com/jaworldwideorg/OneJA-Bot/issues/11739) ([afc76f9](afc76f9))

</details>

<div align="right">

[![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)

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

Labels

🐛 Bug released on @next size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

删除并重新生成消息,原消息实际未被删除

2 participants