• Mohamed Aziz Mejri's avatar
    Allow users to queue messages (#2120) · 11b33efe
    Mohamed Aziz Mejri 提交于
    <!-- 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: 's avatarClaude <noreply@anthropic.com>
    11b33efe
名称
最后提交
最后更新
.agents 正在载入提交数据...
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
.storybook 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
plans 正在载入提交数据...
rules 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.npmrc 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...
windowsSign.ts 正在载入提交数据...