Repository navigation
Replies: 1 comment
|
自纠:这条与 #4832 重复,本条撤回请求 1,只留两点 #4832 没覆盖、能在 0.1.7-rc.2 产物上复算的补充,后续以 #4832 为主线。 发这条之前我没读上游自己的设计备忘 撤回请求 1(给 留下两点补充:
第 2 点若上游认为「不显示失败」就是终局设计、宁可什么都不说,直说一句即可,我按 #4832 跟进,不再在本条追。 |
|
自纠:这条与 #4832 重复,本条撤回请求 1,只留两点 #4832 没覆盖、能在 0.1.7-rc.2 产物上复算的补充,后续以 #4832 为主线。 发这条之前我没读上游自己的设计备忘 撤回请求 1(给 留下两点补充:
第 2 点若上游认为「不显示失败」就是终局设计、宁可什么都不说,直说一句即可,我按 #4832 跟进,不再在本条追。 |
Uh oh!
There was an error while loading. Please reload this page.
一轮任务被停止之后,输入框上方「N 条排队消息」里那些行的发送按钮就永久变灰,悬停给出「仅运行中可插话发送」。此刻队列里的内容发不出去、也没有任何提示告诉它什么时候会走;唯一出路是再敲一条新消息把它顺带带出去。
环境
@deepseek-ai/dsh0.1.7-rc.2(npm dist-tagnext,发布 2026-09-24T14:18:11Z),dsh --version同读数dsh web(本机 GUI,未使用桌面端)a5701f7(2026-09-06)列一份;两处口径一致,个别行号随重构会漂移,以产物为准这条链上只有官方包,插件不参与
本机
profiles/web/node_modules里除@deepseek-ai之外,对updateQueue/QueueDock/steerQueue的引用只有 1 处,且是某个第三方包的.d.ts注释里提到 "GoalDock/QueueDock seam",没有任何调用点。下列判据全部读自官方包产物。代码位置
packages/host/apiproxy/src/api-proxy.ts:2534-2548→agent.cancel({ kind: 'user' }, { keepInbox: true })(产物:@deepseek-ai/dsh-api-session-controller/lib/index.js:998)。keepInbox为真时不清 inbox(packages/core/agent-loop/src/agent.ts:135)。edit/remove/steer(产物 schema:@deepseek-ai/dsh-api-session-controller/lib/typert.host.js:728、:736;分支:api-proxy.ts:2525-2530)。没有一个是「空闲时把这行投递出去」。steer在空闲时被硬拒:api-proxy.ts:2518-2524——action.kind === 'steer' && (target !== 'next-turn' || agent.status !== 'running')→steer-unavailable/current turn no longer accepts steering(产物:dsh-api-session-controller/lib/index.js:966)。packages/client/ui-conversation/src/client/queue/QueueDock.tsx:186-192——disabled={busy !== null || !running}、title={running ? undefined : t('queue.steer.unavailable')};文案在src/client/locales.ts:167「仅运行中可插话发送」(产物:dsh-client-ui-conversation/lib/client.js:15508-15513)。队列头部只有折叠/展开(QueueDock.tsx:87),没有整批投递入口。键盘和牌面同一口径:canSteerQueue也要求running(产物dsh-client-ui-conversation/lib/client.js:17220)。dsh-api-session-controller/lib/index.js:882-883——request.mode === 'steer' ? agent.steer(message) : agent.followup(message);而followup()就是「投进next-turn并唤醒」(dsh-agent-loop/lib/index.js:806-807)。唤醒能力现成存在,只是队列那条 API 没有指向它的动作。这不是队列被意外留下,是你们明确期望的状态
packages/core/agent-loop/tests/cancel.spec.ts:103的用例名就叫 cancel({ keepInbox: true }) parks queued work after an active turn aborts,断言 abort 之后agent.inbox.nextTurn仍为 1 条,直到下一次 send 才按['active', 'preserved', 'wake it']的顺序跑完。也就是说「停在队列里等下一轮」是设计,缺的是让人知道这件事、并能主动触发它的入口——现在队列行露出来的只有编辑和删除,读起来就像这条消息除了丢掉没有别的处置方式。复现(不依赖任何插件,消耗 2 轮请求)
判据(只在缺陷成立时出现):第 4 步那枚按钮
disabled且 title 是那六个字;第 5 步之后你新发的消息晚于排队内容被处理(每轮只从next-turn取一条:dsh-agent-loop/lib/index.js:105的mutate('next-turn', 0, 1, ...))。哪天第 4 步变成可点、或队列头部出现整批投递入口,本条判据即失效。请求(任一条都行)
updateQueue加一个空闲也可用的动作(例如kind: 'deliver',直接走已有的agent.followup(message)),QueueDock那枚按钮在!running时改成「立即发送」而不是变灰。改动量看着就是一个 schema 分支加一处 label。next-turn非空,在队列头部显示一句「本轮已停止,N 条排队消息将在下一次发送时带出」。宁可多一行字,也不要让人以为输入被吞了。说明
第 4 步的灰按钮与「只能靠再发一条消息」是本机使用中的实际遭遇(未记时刻、未截图);第 1-5 步是按上面那些代码路径写的复现流程,本方尚未逐步骤截图留档。代码行号、schema 分支与那条测试断言,都是本方在自己机器上的安装产物与仓库克隆里逐条读过的。
All reactions