[Bug]? goal 功能开启后 agent 无法被动等待后台任务:每次进入 idle 即被强制注入 <goal_round>,空转消耗轮次与 token #4664
Replies: 1 comment
|
这不是你的用法问题,是设计里缺一个判断。我按 0.1.1-rc.2 源码核了一遍,你的定位是对的,而且缺口比你写的更具体。 根因就在那一个 handler 里。 ctx.on('agent/status', ({ agent, status }) => {
if (status === 'idle') {
// …(只处理"目标已被取消"这一个分支)…
requestDrive(state)
问题的一般形状: 但判断所需的数据已经有了,而且就在同一个进程里的公开服务上。 abstract list(caller?: Agent): JobSnapshot[]同步、按 agent 归属、返回当前快照。而 干净的接法是 cordis 的可选注入( 两点补充:
能不能先用第三方插件自救: 利益相关:我维护一个第三方 DSH 插件(Pi 生态兼容层)。goal 与 jobs 都是 DSH 自家组件,我们不碰也修不了,上面全部是对官方源码的核证。 |

这不是你的用法问题,是设计里缺一个判断。我按 0.1.1-rc.2 源码核了一遍,你的定位是对的,而且缺口比你写的更具体。
根因就在那一个 handler 里。
@deepseek-ai/dsh-goal-round-driver的agent/status监听:requestDrive在 idle 上无条件触发,driver 里没有任何"这个 agent 是不是正在等什么"的概念。所以你的对照实验(job_output(wait: true)在回合内阻塞就不注入)不是巧合——触发条件就是那个 idle 检查点本身,与你调不调等待工具无关,你这句话写得完全准确。问题的一般形状:
idle被当成"没事可做"的代理指标,而它不是。它只表示"当前没有回合在跑"。一个刚按工具文档建议结束回合、等后台通知的 agent,和一个真做完了的 agent,在这个信号上完全一样。但判断所需的数据已经有了,而且就在同一个进程里的公开服务上。
JobsService有:同步、按 agent 归属、返回当前快照。而
goal-round-driver的 peerDependencies 只有dsh-agent/dsh-goal/d…