Remote Control 重新接管后重放历史提示,同一批消息被重复执行(qoderclicn 1

【环境】
qoderclicn(Qoder CLI 中国版)1.1.80(macOS 26.6.2,Apple Silicon)
会话:普通终端会话(entrypoint=cli),非 chatops 托管
模型:DeepSeek-Flash(dfmodel)
版本线索:本机同时装有 1.1.80 与 1.1.81,当前钉的是 1.1.80。二进制里
controller-user 字符串在 1.1.80 出现 2 次、1.1.81 为 0 次 —— 重放路径可能已改,
也可能只是打包差异,需用 1.1.81 实测复现后再下结论。

【现象】
每次在终端执行 /remote-control 重新接管会话后,远程控制通道会把历史用户提示按
原 uuid / 原 receivedAt 重投。转录里不会新增 user 记录,但每条都会被当成新一轮
调度,真实向网关发起请求并执行完整工具链。

本会话 9 条旧消息被重复执行,共 14 轮多余请求。

【复现率】3/3:三次开启远程控制,三次都出现。

【时间线(UTC,本地 = UTC+8)】
09:20:48 开启远程控制 → 09:38:13 开始重放(间隔 17m25s,2 轮)
11:25:59 开启远程控制 → 11:31:47 开始重放(间隔 5m48s,3 轮)
12:02:42 开启远程控制 → 12:03:05 开始重放(间隔 23s,9 轮)

【证据 1】同一条消息只有 1 条 user 记录,却有 2–4 次助手回复,request_id 各不相同。
例(同一条「还在核对?」):
user controller-user: 2026-11-02T13:29:46Z
assistant controller-user: 2026-11-02T13:29:54Z req=1c072206(首次)
assistant controller-user: 2026-11-03T11:33:44Z req=d0be8234(重放)
assistant controller-user: 2026-11-03T12:03:58Z req=976309dd(重放)

【证据 2】qoderclicn 1.1.80 接收路径(从二进制提取,已格式化):
enqueueRemoteUserMessage: (l) => enqueueRemoteUserMessage({
type: "user",
message: { role: "user", content: ... },
uuid: l.uuid, // 原样采用对端 uuid
...(l.receivedAt ? { timestamp: l.receivedAt } : {}), // 原样采用对端时间戳
origin: { kind: "bridge" }
})
⇒ 对端用同一 uuid 重发时,CLI 无法与新消息区分;转录写入按 uuid 去重,
但这一轮仍进入调度。

【复现步骤】

  1. 在已有历史的会话里,用手机 App / H5 通过远程控制发若干条消息,等全部完成。
  2. 关闭远程控制(或让进程断开重连)。
  3. 在终端再次执行 /remote-control,不发任何新消息。
  4. 观察:旧提示被逐条重新回答,1 分钟内开始。

【已排除】

  • 不是 chatops 服务端:该会话不在其任何一套库中,9 个消息 id 在 transcript 集合命中数为 0;
    chatops 的 id 格式为 {微秒:x}-{序号:x},不是 UUID。
  • 不是 chatops 复活逻辑:revive.rs 只做 --resume 起进程,不重发提示。
  • 不是模型/网关:重放与 /remote-control 开启一一对应。
  • 不是自动压缩:04:51、08:42 各发生过一次压缩,旧提问被写进摘要,但不是触发原因。

【期望行为】

  1. 重新 attach 时,已完成的提示不得重新入队;历史回放必须带 history-only 标记且不触发请求。
  2. 若必须补发,应按投递游标/已确认水位判断,而不是整段重放历史。
  3. 同一 uuid 已存在 user 记录时,应显式跳过调度并记录日志(当前完全静默)。

【补充】
本地已用只读脚本(扫转录、不调模型)复核:一个 user 记录的 uuid 被 >1 次独立请求
当作 parentUuid 即为重放。需要脚本可另行提供。

展开
收起
游客qwy2tjotammls 2026-11-03 22:49:23 16 分享 版权
0 条回答
写回答
取消 提交回答

Qoder CLI CN 是一款运行在终端中的 AI 编程助手,可以直接在命令行中理解你的自然语言指令并执行编码任务。

还有其他疑问?
咨询AI助理