ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Warp Cloud Mode 排队提示(Queued Prompts V2):把云端环境设置期间的后续工作排进队列

Warp Cloud Mode 排队提示(Queued Prompts V2):把云端环境设置期间的后续工作排进队列 桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载Cloud Mode云端 Agent 运行模式下环境仍在搭建、云端 Agent 尚未就绪时用户提交的提示往往被直接丢弃后续想法无法排期。本文基于 Warp 开源仓库中 APP-4562 的产品规格specs/APP-4562/PRODUCT.md与实现规格specs/APP-4562/TECH.md完整讲解 Warp 如何把「多行排队提示面板」Queued Prompts Panel扩展到 Cloud Mode初始云端提示以锁定首行的形式进入队列环境设置期间的每一次 Enter 都变成入队操作云端 Agent 每完成一轮交换后自动按序补位。读完本文你将掌握 QueuedPromptsV2 的功能开关、锁定行的交互边界、自动排空drain的触发时机以及这套机制在 Rust 源码中的落点。1. 背景从常规 Agent Mode 队列到 Cloud ModeWarp 在 Agent Mode 中引入了「可折叠排队提示面板」可以一次排队多条后续提示支持行内编辑、拖拽重排、逐行删除且按顺序在 Agent 完成每一轮交换后自动触发。该能力由 specs/REMOTE-1543/PRODUCT.md 定义面板位于 warping indicator状态栏与输入框之间的固定插槽标题为N queued默认展开展开/折叠状态在队列生命周期内保持。APP-4562 正是以该面板为基座把同一套交互搬到 Cloud Mode 的运行上。在此之前Cloud Mode 是三块「特区」初始提示渲染为遗留的pending user query指示块由TerminalView::insert_cloud_mode_queued_user_query_block实现于 app/src/terminal/view/pending_user_query.rs插入环境设置期间按 Enter被Input::should_block_cloud_mode_setup_submission静默抑制提示直接丢失队列不会 drain因为本地驱动排空的BlocklistAIControllerEvent::FinishedReceivingOutput事件不会在云端响应流上触发——响应由远端云端 Agent 流式返回本地根本没有「响应结束」信号。2. 目标与非目标目标把初始 Cloud Mode 提示渲染进常规排队面板取代遗留的 pending-user-query 块允许用户在环境设置期间排队任意多条后续提示云端 Agent 就绪后按序自动触发后续行保留完整交互拖拽重排、编辑、删除初始行保持锁定、不可改动全部行为由新的QueuedPromptsV2feature flag 门控仅对 dogfood 构建开放。非目标明确不做不改变 REMOTE-1543 描述的常规 Agent Mode 面板行为不把云端队列跨 App 重启持久化初始提示一旦派发给云端后不允许编辑、删除或重排不向非 dogfood 构建暴露该能力。3. 功能开关QueuedPromptsV2 与传递式依赖所有新行为都以QueuedPromptsV2为总闸开关关闭时Cloud Mode 设置行为与今天完全一致初始提示仍渲染为遗留 pending-user-query 块环境设置期间提交提示是 no-op云端队列不排空。开关开启时它会传递式启用常规QueueSlashCommandQueuedPromptsV2一开自动排队开关、/queue斜杠命令、队列面板这些常规 Agent Mode 排队界面全部可用。在源码中这是一个「编译期 cargo feature 运行时 FeatureFlag」的双层结构详见 specs/APP-4562/TECH.mdapp/Cargo.toml中声明queued_prompts_v2 [queue_slash_command]cargo 依赖保证开启 V2 自动带上常规队列 feature所有既有FeatureFlag::QueueSlashCommand.is_enabled()判断点无需改动该 feature 不加入default。crates/warp_features/src/lib.rs 的FeatureFlag枚举中新增QueuedPromptsV2紧随QueueSlashCommand之后并按规格要求加入DOGFOOD_FLAGS列表。app/src/features.rs在#[cfg(feature queued_prompts_v2)]下注册运行时开关。技术规格特别提醒如果app/Cargo.toml漏写queued_prompts_v2 [queue_slash_command]这一依赖V2 看起来可用但常规队列界面会静默失效因此编译验证必须显式执行cargo check -p warp --features queued_prompts_v2来隔离检查。4. 初始云端提示成为锁定首行4.1 入队路径用户提交初始云端提示后提示不再以遗留块呈现而是成为该会话排队面板的第一行。面板渲染位置与常规 Agent Mode 保持一致位于 V2 云端模式输入编辑器上方、居中的 V2 布局内部输入卡约束在CLOUD_MODE_V2_MAX_WIDTH内见 app/src/terminal/input/agent.rs 的实现。在TerminalView中DispatchedAgent与FollowupDispatched两个事件原本调用insert_cloud_mode_queued_user_query_block插入遗留块V2 开启后改为调用TerminalView::enqueue_initial_cloud_mode_prompt最终委托enqueue_prompt并携带QueuedQueryOrigin::InitialCloudMode写入队列。注意每次云端侧派发首次执行或后续跟跑都会产生一条锁定行由生命周期事件在云端 Agent 真正接手时退役。若该时机会话 id 尚未就绪BlocklistAIContextModel::selected_conversation_id为空防止提示滞留在 Agent 视图之外则回退到遗留 pending-user-query 块保证视觉指示永不丢失。4.2 锁定行的完整交互边界锁定首行在面板中有三条明确的交互约束拖拽手柄渲染为视觉禁用态不包裹Draggable不响应拖拽手势编辑铅笔与删除垃圾桶图标按钮仍随 hover 显示使用与交互行相同的裸样式NakedTheme不出现灰底或灰字但调用set_disabled(true)后不可点击hover 提示无论悬停拖拽手柄还是任一图标按钮都显示同一句短提示 The first cloud-mode prompt cannot be changed.。该文案在 app/src/terminal/view/queued_prompts_panel.rs 中定义为常量INITIAL_CLOUD_MODE_PROMPT_TOOLTIP三处 hover 复用。锁定行的预览文本即用户输入的原始提示包括用户自带的/plan、/orchestrate等前缀与今天 pending-user-query 块的处理一致。即使后续行被拖拽重排锁定行始终钉在 index 0任何行都无法被拖到它上方。4.3 模型层兜底锁不在 UI而在数据模型锁的约束并不只靠面板 UI 把关而是落实在数据模型层app/src/ai/blocklist/queued_query.rsQueuedQuery::is_locked()统一判定——当前实现中origin 为InitialCloudMode以及快照未触发的PendingLrcAutoQueue的行即锁定pop_front队首锁定则返回None。非正常排空路径服务端推送UpdatedConversationStatus → Error/Cancelled会走到pop_front这一闸门防止「状态转换先于环境清理事件到达」时误伤锁定行pop_for_autofire首行锁定则返回None——锁定行只能由生命周期代码退役不走 autofireremove_by_id目标行锁定则 no-opreorder源行锁定、或目标位置 0 会挤掉队首锁定行时 no-openter_edit_mode目标行锁定则 no-opremove_initial_cloud_mode_row仅当队首行的 origin 为InitialCloudMode时删除供生命周期代码专用。这意味着即使某个点击意外穿透了 UI 禁用态模型也会拒绝一切被禁止的变更——UI 只负责「渲染」锁模型负责「强制」锁。4.4 锁定行何时被移除云端 Agent 接手提示即会话 transcript 出现第一条真实交换Oz harness 以harness-command-started信号为准oz 本地到云端交接则以第一条 appended exchange 为准时锁定行被移除第二条行成为下一个待触发行——但它仍是 follow-up不是初始提示。如果云端运行在提示被接手前失败失败、取消、需要 GitHub 认证、快照上传失败锁定行在遗留 pending-user-query 块会被移除的同一时刻被移除其后的 follow-up 行全部保留在面板中像常规排队行一样可查看、编辑、删除、重排。5. 环境设置期间提交从「丢弃」到「入队」5.1 触发条件只要云面板是 ambient-agent 面板、当前未在 compose、也未在运行提交输入编辑器就会把提示排进队列而不是什么都不做。这覆盖了用户能触达编辑器的每一个 pre-run 云端状态WaitingForSession、Failed、Cancelled、NeedsGithubAuth以及Setup通常不可达因为首次设置弹窗持有焦点但谓词为完整性而匹配它。5.2 实现maybe_queue_input_during_cloud_setup新路径完全叠加在既有逻辑之上旧行为保持不变Input::should_block_cloud_mode_setup_submission依然原样存在只是 V2 开启时提交处理器会在评估它之前先走新的辅助函数maybe_queue_input_during_cloud_setup与maybe_queue_input_for_in_progress_conversation并列。其处理顺序specs/APP-4562/TECH.md 明确列出硬闸门QueuedPromptsV2.is_enabled()为假立即返回 false不做任何其他状态检查云端面板谓词is_ambient_agent() !is_configuring_ambient_agent() !is_agent_running()不满足则返回 false与今天 block 检查同一谓词selected_conversation_id为SomeAgent 视图未关闭才继续会话 id 本身不用于给队列分键读取并 trim 编辑器缓冲区为空则返回 false清空编辑器缓冲区与挂起附件以QueuedQueryOrigin::AutoQueueToggle向该视图的单一队列追加一行返回 true让提交处理器短路。5.3 入队行为细则设置期间入队的 follow-up 行不锁定支持与常规 Agent Mode 队列行相同的交互彼此之间拖拽重排、hover 显示编辑/删除按钮等锁定初始行始终钉在 index 0后续行如何重排都不会改变它提交空提示不追加新行沿用 trim-and-skip 行为提交 shell 模式不受影响——无论云端 Agent 是否在设置shell 命令照常直接在终端运行。6. 排空Drain云端交换完成即自动补位6.1 常规排空逻辑锁定初始行被移除后面板行为与常规 Agent Mode 排队面板一致每当活动云端会话干净完成一轮交换队首剩余行就被移除并以 follow-up 提示提交给同一个云端会话。该提示走的路径与用户手动提交的云端 follow-up 完全相同——它到达的是云端 Agent而非本地 Agent controller。从用户视角看自动触发的排队提示与 Agent 结束后手动输入提交的提示无法区分。6.2 非干净结束时的暂停与保底当活动云端会话以非干净原因结束错误、取消、请求的命令执行期间被取消时autofire 立即暂停队列不冲刷输入编辑器为空队首剩余行被移除其文本放入输入编辑器用户可编辑后手动重新提交输入编辑器非空不移除任何行不修改输入两种情况都不动首行之后的其余排队行。暂停后下次云端会话干净完成交换时 autofire 自然恢复从队首继续排空。6.3 技术实现状态转换驱动的第二条排空入口本地 Agent Mode 的排空由FinishedReceivingOutput事件驱动云端则由conversation-status 路径补上第二条入口specs/APP-4562/TECH.md 第 7 节在TerminalView::handle_ai_history_model_event的UpdatedConversationStatus分支中新增排空入口闸门为QueuedPromptsV2.is_enabled() self.is_ambient_agent_session(ctx)TerminalView新增last_observed_conversation_status: HashMapAIConversationId, ConversationStatus字段只跟踪从 in-progress/blocked 到终态的状态转换而不是每次原始状态更新都触发该 map 在ClearedConversationsInTerminalView时清空RemoveConversation/DeletedConversation时移除单项终态到FinishReason的转换使用穷尽匹配Success → Complete、Error → Error、Cancelled → Cancelled、InProgress | Blocked → None——None分支至关重要非终态的状态更新绝不能触发排空最终汇聚到handle_finished_conversation与本地路径共用同一套drain_queued_prompts逻辑。6.4 提交路径云端优先drain_queued_prompts原先通过Input::submit_queued_prompt走本地BlocklistAIController这对云端面板毫无作用。新增Input::submit_queued_prompt_for_active_pane按面板类型三级选择云端 follow-up 优先若is_ready_for_cloud_followup_prompt()发出InputEvent::SubmitCloudFollowup { prompt }由TerminalView转发到AmbientAgentViewModel::submit_cloud_followup——与用户手动云端 follow-up 同一路径共享会话 viewer 次之若shared_session_status().is_viewer()直接以Event::SendAgentPrompt发给 sharer用户输入为空时展示prompt ◌加载提示sharer 确认后由AgentPromptRequestInFlight → unfreeze_and_clear_agent_input清除用户本地已输入内容则不覆盖缓冲区本地 Agent Mode 回退否则调用submit_queued_prompt非云端队列完全不受影响。AutofireAction::Submit { text }分支改调submit_queued_prompt_for_active_panePopFromEditMode分支不变。7. 会话生命周期与队列归属队列面板归终端视图terminal view所有隐式限定于该视图中当前活动的会话切换会话前会先走 agent-view 退出清空队列再为新会话重新进入因此面板永远反映活动会话不会把 follow-up 行带到别的会话退出云端面板、关闭标签页或删除会话都会丢弃队列包括锁定初始行follow-up 行的折叠/展开状态、行级编辑状态与重排行为均与常规 Agent Mode 排队面板一致。与之相对REMOTE-1543 的语义常规 Agent Mode 的队列与会话级 auto-queue 开关是按会话归属、跨 agent-view 退出持久保留的——两者不同点在于Cloud Mode V2 的队列在退出视图时即被丢弃而常规队列会随会话在后台继续排空。8. 遥测既有排队面板遥测编辑提交、行删除、行重排、面板折叠切换对 follow-up 行继续生效锁定初始行因交互被禁用不产生编辑/删除/重排事件。9. 测试与验证产品不变量如何落到测试用例app/src/terminal/view/queued_prompts_tests.rs 中一系列测试把产品规格的每一条不变量固化为断言以下是规格与测试的对应关系完整映射见 specs/APP-4562/TECH.md产品不变量测试用例功能开关关闭时一切如旧cloud_setup_enter_remains_blocked_when_v2_is_disabled断言不追加行、编辑器缓冲保留DispatchedAgent 产生锁定首行dispatched_cloud_prompt_uses_locked_queue_row_when_v2_is_enabled队列内出现InitialCloudMode行且遗留块为空FollowupDispatched 同样入队dispatched_cloud_followup_uses_locked_queue_row_when_v2_is_enabled清理事件移除锁定行cloud_setup_cleanup_events_remove_the_locked_queue_row覆盖HarnessCommandStarted、Cancelled、NeedsGithubAuth、HandoffSnapshotUploadFailedfailed_event_keeps_locked_queue_row_under_cloud_mode_setup_v2与failed_event_removes_locked_queue_row_without_cloud_mode_setup_v2覆盖Failed两种开关组合设置期间入队cloud_setup_enter_queues_followup_input_when_v2_is_enabledWaitingForSession状态下追加AutoQueueToggle行云端状态转换驱动单次排空terminal_cloud_status_transition_drains_once_through_cloud_followup_input_event连发两条Success只排空一次且提交走SubmitCloudFollowup事件锁定行模型语义app/src/ai/blocklist/queued_query_tests.rs中的initial_cloud_mode_head_rejects_user_mutations_and_autofire编辑/删除/重排/autofire 均 no-op、pop_front_no_ops_when_head_is_locked、remove_initial_cloud_mode_row_only_removes_the_locked_head另有两个值得注意的行为细节被测试覆盖send_now_disabled_for_all_rows_while_initial_cloud_mode_row_is_present锁定行存在期间禁用「现在发送」与copying_locked_initial_cloud_mode_prompt_copies_full_prompt_to_clipboard复制锁定行会复制完整提示。完整的工程验证还包括cargo check -p warp与cargo check -p warp --features queued_prompts_v2双向编译检查以及全量预提交./script/presubmit。规格明确要求「不要运行 App 来测试」。10. 风险与缓解为什么这样设计技术规格列出四类核心风险及对应缓解理解它们有助于把握整套机制的边界InitialCloudMode 行泄漏越过运行起点每个针对 cloud 类 pending-user-query 块的移除点都配套调用remove_cloud_mode_queue_row统一走should_clean_up_pending_cloud_query闸门同时模型层pop_for_autofire与pop_front的 no-op 防止锁定行被意外 autofire 或非正常排空弹出。所有变更器共享QueuedQuery::is_locked()锁契约一致双重排空本地FinishedReceivingOutput与云端UpdatedConversationStatus可能同时触发handle_finished_conversation。缓解历史模型入口以is_ambient_agent_session且以last_observed_conversation_status记录的状态转换而非原始状态更新为条件FinishReason穷尽匹配对InProgress | Blocked返回None部分状态更新不会重放队列跨界面块移除回归remove_pending_cloud_mode_query_if_exchange_has_renderable_user_query对遗留块移除显式限定CloudModekind与 V2 开关无关避免误删/queue斜杠命令产生的PendingUserQueryKind::QueuedPrompt块V2 队列行移除叠加其上无InitialCloudMode行时即 no-op面板与 V2 居中输入的对齐面板必须匹配CLOUD_MODE_V2_MAX_WIDTH保持与输入卡视觉贴合——渲染在 V2 输入同款ConstrainedBox/Align包装内。11. 端到端流程将 specs/APP-4562/TECH.md 中的流程图转述为文字版本用户提交初始提示 →spawn_agent发出DispatchedAgentTerminalView以InitialCloudModeorigin 入队 → 面板渲染锁定首行用户可在设置期间继续提交 →maybe_queue_input_during_cloud_setup在锁定行之后追加AutoQueueToggle行HarnessCommandStarted/AppendedExchange/ 失败 / 取消 →TerminalView移除锁定首行云端交换完成UpdatedConversationStatus→handle_finished_conversation→drain_queued_prompts弹出下一行 →submit_queued_prompt_for_active_pane→SubmitCloudFollowup如此循环直至队列排空。这套「锁定首行 设置期入队 状态转换排空」的机制让 Cloud Mode 从「设置期间只能干等」升级为「可以提前把后续工作排好队、云端就绪后自动接力执行」并且通过 dogfood 开关与模型层锁把风险控制在可验证的范围内。如需深入实现细节可继续阅读 specs/APP-4562/TECH.md、app/src/ai/blocklist/queued_query.rs、app/src/terminal/view/queued_prompts_panel.rs 与对应的测试套件。赞分享桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载相关推荐Shortcircuit XT多格式发布管线解析CMake安装器系统全解读Shortcircuit XT多格式发布管线解析CMake安装器系统全解读 Shortcircuit XT 是 Surge Synth 团队开源的多格式采样器桌面应用开发者工具人工智能AI 应用AI Agent代码智能体Warp 的 /queue 斜杠命令与 Auto-Queue 排队机制在 Agent 响应期间预排后续提示词Warp 的 /queue 斜杠命令与 Auto Queue 排队机制在 Agent 响应期间预排后续提示词 本技术指南围绕 Warpagentic dev桌面应用开发者工具人工智能AI 应用AI Agent代码智能体免费的激光雕刻软件LaserGRBL怎么用10分钟完成第一个作品的完整新手教程免费的激光雕刻软件LaserGRBL怎么用10分钟完成第一个作品的完整新手教程 上个月阿凯花了两千块买了一台DIY激光雕刻机。机器到手当晚他满怀期待地装上桌面应用开发者工具人工智能AI 应用AI Agent代码智能体上一篇3大突破SMUDebugTool让AMD Ryzen硬件调试效率提升10倍的实战指南下一篇JDE用HTML5与Python打造的革命性Linux桌面环境开启高效办公新纪元创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表