之前排队等待(上条改动)期间前端只有通用的"思考中",最长可能等到 60s 都看不出
是在排队还是在正常生成,容易让人以为卡死了。
- agent-session-lock.js 新增 isLockBusy(agentId):判断此刻是不是真被占着(僵尸锁
不算),供路由层在真正排队前 peek 一眼。
- agent-chat.js 的 /:agentId/chat:锁被占用时提前建立 SSE 连接、先发一个 queued
事件(activeConvId + waitBudgetMs),前端能精确显示"排队等待中";没被占用的
常见路径完全跳过这段,不引入多余的建连时机差异。头一旦按 200 SSE 发出去就不能
再改状态码,排队超时也改用 queue_timeout 事件收尾,不再是独立的 429 JSON 响应
(没被占用、一开始就抢到锁的路径不受影响,仍是普通 SSE)。
- agentChatEvents.js 的 handleEvent 认识这两个新事件类型:queued 把 thinkingText
换成带等待预算的提示;queue_timeout 跟 error 分支一样落一条可见的助手消息,
不会像原来的静默 429 那样挂在界面上没反应。
- 相应更新 agent-chat-interrupt.test.js(断言 SSE 里真的有 queued/queue_timeout
事件,超时分支状态码从 429 改为 200)+ agentChatEvents.test.js 新增两条用例。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CwGcvMfUcgCcweN5vjhTkn