Allow users to queue messages (#2120)
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Allow users to queue multiple messages while a response is streaming.
Queued items are visible, editable, reorderable, and auto-send
one-by-one only after the current stream ends successfully.
- **New Features**
- Per-chat queue state via queuedMessagesByIdAtom and
streamCompletedSuccessfullyByIdAtom.
- QueuedMessagesList to view, edit, reorder, and delete items; shows
status and attachment indicator.
- ChatInput queues while streaming, supports editing queued items,
clears input/attachments only on successful queue/send, and clears all
queued on cancel.
- useStreamChat exposes queuedMessages and
queue/update/remove/reorder/clear APIs; processes the next item only
after a confirmed successful end.
- **Bug Fixes**
- Eliminated race conditions by gating processing on successful onEnd
(wasCancelled-aware), fixing a stale firstMessage closure, and clearing
the queue before cancel IPC to avoid rapid-response races.
- Preserved input and attachments when queueMessage fails; prevented
dropping newly queued messages; cleared editing state when the edited
queued item is deleted.
<sup>Written for commit fb431f55b3a24284058062a6ced97ac21f825952.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Introduces queued message support so users can submit another prompt
while a response is streaming; the queued prompt auto-sends only after
the current stream ends successfully.
>
> - Adds `QueuedMessage`, `queuedMessageByIdAtom`, and
`streamCompletedSuccessfullyByIdAtom` to track one queued message and
confirmed stream completion per chat
> - Extends `useStreamChat` with queue APIs (`queuedMessage`,
`queueMessage`, `clearQueuedMessage`) and processing gated by `onEnd`
success; resets/sets completion flags; warns on multiple queue attempts
> - Updates `ChatInput` to queue while streaming, clear on successful
queue, and clear queued message on cancel; uses `shouldProcessQueue`
> - Updates `MessagesList` to display queued prompt with status and a
Clear action
> - Expands IPC `ChatResponseEnd` schema with optional `wasCancelled`;
send this flag on cancel in `chat_stream_handlers`
> - Adds e2e test `queued_message.spec.ts` verifying queuing and
auto-send behavior
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
62ed2131f7f9ee253b2542d35307459af504d6d0. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!-- devin-review-badge-begin -->
---
<a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2120">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
<img
src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
alt="Open with Devin">
</picture>
</a>
<!-- devin-review-badge-end -->
---------
Co-authored-by:
Claude <noreply@anthropic.com>
正在显示
e2e-tests/queued_message.spec.ts
0 → 100644
请
注册
或者
登录
后发表评论