Repository navigation
[Grok/dsh 19] 排队、运行中干预与旁路提问 #151
Description
Activity
按用户2026-09-20的实施授权领取 Ticket19 / #151;本次只记录领取,未启动实施工作者,也不表示已实现。已重新读取 #132 及全部80票正文/评论和实际 blocked-by(native 177 边,无截断,无第二页)。#142/#150/#152/#153 已在
rewrite/grok-dsh-20260920集成并关闭;当前独立就绪且无人领取的票为 #143、#145、#147、#151、#156、#158、#159、#163、#171。本波并行领取前四张(#143、#145、#147、#151),未领取任何被阻塞后继(含 #175/#179/#202),也未领取本波未选的其他就绪票(#156/#158/#159/#163/#171)。实施必须从独立集成树精确基线
065170b46c44491f53abd6f21ed8ac438ba9906a开始。前置 #137 与 #150 已关闭,同一提交已保留在rewrite/grok-dsh-20260920;集成证据见 #137 (comment) 与 #150 (comment) 。范围按原验收:队列提交、编辑、删除、重排、立即发送与命令边界按参考行为,dsh 仅收到应执行的消息;干预在安全边界送达,未消费消息在取消/切换/结束时正确保留,不重复或遗失;旁路问题与主历史隔离,晚到回复、失败和关闭面板行为明确;交叉验证屏幕模式切换、待审批、完成通知与快速连续输入,适用文档/Changeset 同步。后续实施/审查子代理使用 My CPA - Grok 4.7 Fast(
grk-4.7-build-fast,effortxhigh)。仅在实施、独立审查和集成验收通过后关闭。main、现有未跟踪文件及其他工作树不改动;不授权付费资源,#212仍须新的明确最终发布/默认切换批准。Ticket 19 / #151 未集成。隔离集成树
rewrite/grok-dsh-20260920仍是065170b46c44491f53abd6f21ed8ac438ba9906a。worker 工作树/Users/zhaodongsheng/.grok/worktrees/my-projects-codsh/subagent-01a0ce48-f379-71e2-98d3-f2648ed713e4的 HEAD6c7f1300beb3cb400dcbe1a8ff1f30ae51fb18e9是该基线的后代(9460954、936da73、8b58e1c、6c7f130)。四轮审查里前三轮双否;最后一轮对6c7f130是一否一过,不能当作批准。未 cherry-pick,未推送,未关闭。工作树保留。最后一轮拒绝(
approved: false,观察到的 HEAD 与本控制器看到的一致)仍然成立。本控制器在6c7f130上核对了源码:- Steer 与
/btw不满足故事 20 和 21。prompt_queue.rs的submit在 steer 分支以及open_aside都返回Blocked,不调用 dsh;finish_aside只在cfg(test)下存在。没有现场答复、失败或晚到回复。PTY 帧显示 steer 文本被丢弃,/btw停在 not sent。参考行为是保留 steer 行并在下一个安全间隙注入,以及显示隔离的/btw答复。在有真实 ACP 路径之前,不要把这条提示当作功能完成。 drain_follow_up_passes(rust/src/main.rs约 5481 行)仍只跑 8 轮。成功的!在release_queued_follow_up里不设置release_deferred。八条本地命令之后的 prompt 或 slash 会留下。应在没有模型回合、且仍有未 hold 的行或 pending command 时继续释放,并补一条九行 drain 测试。- 非 Apple 的 Ctrl+O 被文档和
is_send_now_key注释写成 always-approve,但没有任何按键路径切换权限模式,该键落入 composer。参考行为是非 Apple Terminal 上 Ctrl+O 切换 always-approve,只在 Apple Terminal 上作为 send-now。要么接到现有权限切换并加断言,要么停止声称它会切换。 run_local_shell(rust/src/main.rs约 5672 行)在 UI 线程上调用Command::output()。一条不退出的!会卡住绘制、Ctrl+C 和后面的行。需要有界或脱离该进程,使取消仍然有响应。
通过的那名审查者确认了队列 PTY、合并、窗格编辑、失败 shell hold 和
/minimal恢复,但没有覆盖上面四条。未跑组合树测试。main 未改。#132 与 #212 不关闭。- Steer 与
- added a commit that references this issue
on Sep 25, 2026 已集成到
rewrite/grok-dsh-20260920:e2b56a8a6d5cbd7c6a5e0f25ef6e1dcf55ad9bb2(`feat(rust): queue, send-now, steer, and /btw side questions,基于 7f927ee 快进推送7f927ee..e2b56a8`,未强推)。实现
- 队列:运行中 Enter 入队(
Queued N · next …),按顺序每回合执行一条;回合结束或 Ctrl+C 取消后排空,待审批、压缩中、行内编辑时保持等待,排空无上限。Ctrl+;/Ctrl+'或空提示 ↑ 打开队列面板:e原地编辑(Enter 保存、保存为空即删除、Esc 取消)、Enter 立即发送、x/Del 删除、Shift+J/K重排。忙碌时输入的斜杠命令作为独立行排队(命令边界),/queue只读列出。[ui] combine_queued_prompts合并相邻纯文本行。 - 立即发送 = 取消并发送:
Ctrl+Enter/Ctrl+I(Apple Terminal 另加Ctrl+O,VS Code 系用Ctrl+L;其他终端不绑定Ctrl+O),或空提示 Enter 发送队首;被取消回合不显示[cancelled]。 - Steer:
[ui] follow_up_behavior = "steer"时纯文本追问经私有控制通道真正送进 dsh 运行中的 agent(agent.steer,下一步边界生效)。通道为 0700 临时目录下的 Unix socket + 256 位一次性 token(常量时间比较,握手后 unlink,dsh 插件启动即从process.env删除,工具子进程拿不到)。dsh 报告 claimed/discarded;回合结束、会话销毁时未消费的 steer 从 inbox 收回并回到队列,不重复、不丢失;子代理不会冒充顶层 agent。 /btw:同一通道,由 dsh 插件用会话历史副本发起一次无工具模型请求,不写入会话;面板 Esc 关闭(加载中会取消请求),minimal 写入回看区,迟到答复丢弃,失败/断连显示错误;消息中间的/btw会被提取。- 帮助文本、README.md / README.zh.md、CONTEXT.md、
.changeset/rust-queue-steer-btw.md已同步。
检查(Linux x86_64,Node 22.23.3)
-
pnpm run typecheck:通过 -
TMPDIR=/tmp pnpm test:85 个文件,2322 通过 / 1 失败。失败的是scripts/reference-evidence.spec.mjs的 5s 超时,在未改动的基线 7f927ee 前序(091da92)上同样失败,与本票无关。新增scripts/rust-control.spec.mjs9/9 通过。 -
cargo fmt --check:通过 -
cargo clippy --locked --workspace --all-targets --offline -- -D warnings:只剩filesystem_sandbox.rs中 Linux 下预先存在的 2 个错误(tail_marker未使用、多余的return),基线同样存在;本票代码在其余检查下无警告。 -
cargo test --locked --workspace --offline --no-fail-fast:codsh-rust 494 通过 / 2 失败(filesystem_sandbox两个用例因 Linux Landlock 不能做网络隔离而拒绝,基线同样失败),以及 498 + 42 + 61 + 2 + 379 全部通过。privacy/voice两个本地 HTTP 用例在负载下偶发失败,基线上同样偶发。 -
已安装产物 PTY(npm pack + install + 暂存的原生候选 + 真实 dsh + mock 提供方,trace 校验 dsh 实际收到的内容):新增
scripts/rust-queue-pty-test.py7 个场景全部通过:- 入队/重排/原地编辑/删除后按编辑顺序执行,被删行从未发送;
Ctrl+Enter立即发送跑在旧队列行之前且无[cancelled],空 Enter 发送队首;- steer 模式追问进入同一回合(4 次模型调用,最后一步看到追问),之后不再单独发送;
- Ctrl+C 取消后队首只执行一次;
- 待审批期间队列不被消费,拒绝后才执行;
- 运行中
/minimal保留队列,快速连续输入保持顺序; /btw为单独的purpose=btw无工具请求,主回合 trace 与后续回合历史都不含问题,Esc 关闭面板。
已加入
test:rust:pty。rust-cancel-pty-test.py、rust-turn-pty-test.py(去掉 darwin 门槛在 Linux 运行)和rust-subagent-pty-test.py通过。
未验证 / 说明
- macOS 与 Windows 未运行;本次所有 PTY 都在 Linux 上跑。真实提供方未测,只用了无密钥 mock。
- 「完成通知」:Rust 客户端目前没有完成通知功能,没有可交叉验证的对象。改为验证了回合完成后的排空和 minimal 下已完成回合的提交。
rust-prompt-pty-test.py在 Linux 上因 CJK 折行断言失败,基线二进制上同样失败,与本票无关。
main、npm 发布、默认
codsh均未改动,也未发布任何版本。解除阻塞:#175(#170 已关闭)、#179(#142、#153 已关闭)。#202 仍被 #198 阻塞,#211 仍有其他前置。
- 队列:运行中 Enter 入队(
Parent
#132
Ticket: 19
Status: ready-for-agent
User Stories: 19, 20, 21(见父规格)
What to build
用户在运行期间管理 Queue、按参考规则 Steer 当前回合,并通过支持的旁路提问查看答复而不污染主回合。
Acceptance criteria
Blocked by
Delivery contract
用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。