输入排队(input queue) 前端与交互

别名: 输入队列

忙碌(`streaming`/`waiting_approval`/`interrupted`)时把用户输入入队、`done` 后经 `drainQueue` 排空并开新回合的机制。语义是「一件事做完再做下一件」,让用户不必干等或关掉页面。

它是什么

输入排队(input queue)是忙碌时把用户输入入队、done 后经 drainQueue 排空并开新回合的机制。语义是「一件事做完再做下一件」:Agent 正在生成、在等审批、或被打断时(streaming/waiting_approval/interrupted 三种忙碌状态),用户还能打字,输入先进 inputQueuedone 到达时 drainQueue 取队头、开下一回合,依次排空。

与打断的配合

输入排队 + 打断是「不打断用户打字」的一对能力。打断后进入 interrupted 是「冰封」状态:旧流残留被丢弃,只有旧流的 done/error 能关闭回合并触发 drainQueue——排队的输入因此不会在废弃流上开回合。counter 是消息 id 的铸币机(m1/m2/q3…),保证排队项 id 全局唯一。

实现要点

onUserInput 先判断 isBusy(status):忙碌则入队并返回,否则 openTurn 开新回合(顺带清掉上一回合的 pendingApproval/usage/error,绝不让残留污染新回合)。drainQueue 是「done 的组合子」——case 'done': return drainQueue(onDone(state, event)),收尾与排空一步完成。

在本教程的位置

第 17 章「开回合与输入排队」一节;相关词条:UI 状态机状态守卫

相关词条

出现在这些章节