🐛 fix(store): delete message before regeneration#11760
Conversation
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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 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".
| await chatStore.deleteMessage(messageId, { operationId }); | ||
| await get().regenerateUserMessage(userId); | ||
| chatStore.completeOperation(operationId); |
There was a problem hiding this comment.
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 👍 / 👎.
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
⏳ Processing in progress |
|
❤️ 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. |
## [Version 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"> [](#readme-top) </div>
|
🎉 This PR is included in version 2.0.0-next.358 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [Version 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"> [](#readme-top) </div>
Summary
Problem
When "delete and regenerate" was called on an assistant message:
regenerateAssistantMessagewas called first, which switched to a new branchdisplayMessagesdeleteMessageuseddisplayMessageSelectors.getDisplayMessageById(id)to find the messageSolution
Change the operation order to delete first, then regenerate:
Test plan
deleteMessageis called beforeswitchMessageBranchandinternal_execAgentRuntimeRelated Issues
Closes: https://linear.app/lobehub/issue/LOBE-2533
fix #11137
🤖 Generated with Claude Code