• 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
名称
最后提交
最后更新
..
__tests__ 正在载入提交数据...
app 正在载入提交数据...
atoms 正在载入提交数据...
client_logic 正在载入提交数据...
components 正在载入提交数据...
constants 正在载入提交数据...
contexts 正在载入提交数据...
db 正在载入提交数据...
hooks 正在载入提交数据...
i18n 正在载入提交数据...
ipc 正在载入提交数据...
lib 正在载入提交数据...
main 正在载入提交数据...
neon_admin 正在载入提交数据...
pages 正在载入提交数据...
paths 正在载入提交数据...
pro 正在载入提交数据...
prompts 正在载入提交数据...
routes 正在载入提交数据...
shared 正在载入提交数据...
store 正在载入提交数据...
styles 正在载入提交数据...
supabase_admin 正在载入提交数据...
utils 正在载入提交数据...
backup_manager.ts 正在载入提交数据...
main.ts 正在载入提交数据...
preload.ts 正在载入提交数据...
renderer.tsx 正在载入提交数据...
router.ts 正在载入提交数据...