Skip to content

v3.59.2

Choose a tag to compare

@github-actions github-actions released this 11 Nov 21:35
· 96 commits to master since this release

v3.59.2

重点修复(线上 hotfix)

  1. 休眠会话被消息唤醒后,补全运行时身份被误判为已退役,这一轮回复不转发到飞书(c11042068):休眠的 Claude 会话唤醒时就绪门走 45 秒超时兜底,worker 在消息写入后才拿到 native session id,用同一个 binding 补全身份仍带着已结束的 resume operationId,被会话契约判为迟到绑定、把正在运行的 runtime 标成 retiring(mayExecute=false),worker 静默关停转写桥,CLI 在终端里答完但回复发不到飞书,要等下次 daemon 重启才从 journal 恢复、又因来源无法证明被丢弃。修复后:会话 active、同一 worker 重绑自己当前活跃 runtime 且无进行中控制操作时,补全身份不再带旧 operationId;来源校验与 final_output 网关不变。
  2. 运行时被退役的 worker 永久停在「CLI 重启中」,之后的消息只排队、不进终端(c0c0fcd6e):worker 收到 mayExecute=false 后只 killCli 不退出,backend 置空后每条消息都命中「CLI 重启中」排队,closeRequested 永不复位,/restart 与崩溃恢复都救不回来,状态卡「停止」也被忽略。修复后:worker 等 5 秒宽限期,若无 close/suspend/transfer 接管就把未写入输入存进交接 journal、以退出码 79 结束;daemon 视同主动换代,有交接输入时立即拉起后继 worker(tmux 下重挂原 pane)补投,不等下一条消息,60 秒内不重复拉起;在途普通消息回「未能确认,若未执行请重发」。适用于所有走会话契约的 CLI 与 PTY/tmux/herdr/zellij 后端,v3 workflow 临时 worker 行为不变。
  3. 空闲回收不再挂起回复还没发出或仍在干活的会话(ccf2d73db):超过活跃会话上限(live_worker_cap,默认 30)时,刚答完一轮的会话可能在回复还在投递途中被回收挂起,导致这一轮回复丢失;另有会话在第一条消息仍在写入、CLI 已报 working 时被误判空闲回收,任务直接消失。修复后自动回收增加输出一侧的正确性条件:daemon 仍在投递回复(至多等 10 分钟)或最后一轮还没收到结束信号(至多等 2 分钟)时跳过该会话,了结后立即补跑一次上限检查;worker 重放被推迟的就绪前若 OSC 7501 仍报 working/blocked 则不重放,避免屏幕无忙碌页脚时误判空闲。运维批量休眠、高 CPU 回收、手动 /suspend 行为不变;adopt 与 PTY 后端本就不参与回收。
  4. ⚠️ 行为变更(#3339):飞书回复隐藏开发机地址改成 bot 级开关 hideLocalAddresses,默认关闭。v3.59.0/v3.59.1 是默认替换,升级后正文里的开发机文件路径、本机服务地址会原样发出;还想要替换效果的,在对应 bot 配置(bots.json 或 Dashboard Bot 默认设置)里打开 hideLocalAddresses=on——开启后回复发出前把开发机路径换成仓库相对引用或「【内部文件】」、卡片按钮指向本机的整条拒发(宿主自己的终端/Dashboard 链接除外),并在提示里加入不放这类地址的规则。回复处理与每轮提示立即生效,系统提示里的完整规则从下个会话生效。

CI 情况(本次发版依据说明)

  • 05ad8a1 的 test (3/4) 与 bun-test 首跑因 hosted runner 装不上 bwrap(apt 撞 90 秒超时)失败,无任何用例红;同 run 四个分片墙钟 16–25 分钟,明显慢于历史 13–17 分钟,属 runner 高负载环境问题。
  • 维护者重跑 run 43056823092(https://github.com/deepcoldy/botmux/actions/runs/43056823092)后 test (3/4) 转绿;bun-test 第二次 bwrap 正常、2252/2253 文件绿,唯一未完成的 test/traex-auto-model.integration.test.ts 是整文件累计时长撞 720 秒单文件上限被 SIGKILL,被杀前 38 个用例全过、零失败;同一文件在 vitest 分片(1/4)中 39/39 全部通过。
  • 同树证据:PR #3335 的 pull_request 首跑(run 43001571724)build、test 四片、bun-test、三平台二进制全绿,PR head 与落地提交 git tree 逐字相同。本次按维护者决定,不等 tag 提交的 CI 首跑即发版。

其他修复

  • 单卡原生 CoT 进度卡重复(#3335):启用单卡+原生 CoT 时普通进度不再提前创建白色答案卡,改由灰色思考区承载;带多人提醒的最终答复另发后不再留完成摘要卡,整轮只保留一张结果卡。思考区创建失败、报错或被 /cot off 关闭时答案卡自动接回进度;新旧版本混跑、字段缺失一律退回旧行为,未开启原生 CoT 的模式不变。
  • TraeX managed 配置启动页脚(#3338):适配省略权限名的裸 hint 行与长目录 U+2026 截断两种页脚变体,首轮不再硬超时。
  • 私聊授权失败回退(#3331):群聊授权链接私聊投递失败时回退仅本人可见的 ephemeral 群卡片,带在途 409 处理与双有效性闸门,失败清记录。
  • TraeX 授权自动换模续接(#3315):授权失效后一次性许可自动换模续接,原请求防重投,决策同事务。
  • 提交回执迟到处理(#3325):worker 回执迟到时沿用 OSC7501 原生工作状态有界等待,双排除不误判。
  • 中途追问回复位置(#3297):按消息实际消费位置回复(--reply-to/原生证据),保留轮次记账。
  • adopt 启动握手(#3301):先发 config 再注册 handler,修复 adopt 启动卡 120 秒与截图卡片不更新。
  • 空闲 worker 高 CPU 回收(#3306):持续空闲自旋的 traex worker 两层回收,子进程否决防误杀后台任务。
  • 持久后端 target 契约(#3308):herdr 等后端的 persistent_backend_target 加入契约网关白名单,不再被拒绝或延后,daemon 重启后正常探到 pane。
  • 外部接入会话列表(#3317):botmux list 对 adopt 会话不再因沙箱 EPERM/ESRCH 误判死亡而自动 prune。
  • 未授权回合内重取(#3318):not_authorized/consent_missing 纳入回合内自动重取(30s 间隔、最多 20 次),补授权后同一回合即生效。

新功能

  • Oncall 统一身份查询(#3337):新增高级统一身份查询应用配置(identitySource=shared,只信回调 user_id+tenant_key、租户校验、整组选源、三键 REDACT),兼容原机器人配置。
  • 项目子任务手工登记(#3326):可登记已有话题为项目子任务,迁入通知默认关闭。
  • 反馈卡上下文(#3322):feedback 原生绑定支持可选 context 快照,透传首轮反馈上下文,幂等。

测试稳定性、文档与 CI

  • README 与文档站补充开源中心化平台的介绍和链接(fbbc58f1c)。
  • Midscene 报告链接被 Pages 清理后改指本次运行的 site artifact(257b57e17)。
  • #3329:idle-spin 闸门忙等用例冻结 Date.now,消除 1ms 预算撞墙钟的假超时。
  • #3324:group-send 跨上限用例改用等比缩小上限(测试缝,生产常量不变),消除高负载下 bun-test 超时。
  • #3299:schedule-repair 用例先等 send 进入 dispatch 再推假时钟,修复 finishSend 未赋值时序 flake。
  • #3321:补全回合内身份重取注释,区分不可达与未授权两类节奏。

✨ 新功能

  • feedback: 原生绑定并透传首轮反馈上下文 (#3322)
  • project: 登记已有话题子任务并可选通知迁入会话 (#3326)
  • oncall: 增加高级统一身份查询配置并兼容原机器人 (#3337)
  • lark: 飞书回复隐藏开发机地址改为 bot 级开关,默认关闭 (#3339)

🐛 修复

  • platform: 「未授权」拒绝也在回合内重新获取,授权后同一回合即可生效 (#3312) (#3318)
  • cli: 列出外部接入会话时不再自动关闭 (#3317)
  • session: herdr 等后端的 persistent_backend_target 不再被会话契约拒绝或延后 (#3308)
  • idle-spin: 回收持续高 CPU 的空闲 worker (#3306)
  • adopt: 修复 adopt 启动握手卡 120 秒与截图卡片不更新 (#3301)
  • reply: 中途追问按消息位置回复并保留轮次记账 (#3297)
  • session: 休眠会话唤醒后补全运行时身份不再被判为已退役,最终回复照常转发 (c110420)
  • worker: 提交回执迟到时沿用原生工作状态等待 (#3325)
  • traex: 授权自动换模续接并保留原请求防重 (#3315)
  • auth: 私聊授权投递失败时回退仅本人可见群卡片 (#3331)
  • traex: 适配 managed 配置下省略权限名与长目录截断的启动页脚 (#3338)
  • worker: 运行时被退役的 worker 交接排队消息后退出,不再永久停在「CLI 重启中」 (c0c0fcd)
  • card: 避免单卡加原生 CoT 重复显示进度卡 (#3335)
  • session: 空闲回收不再挂起回复还没发出或仍在干活的会话 (ccf2d73)

📝 文档

  • core: 补全回合内身份重取注释,区分不可达与未授权两类节奏 (#3321)
  • platform: README 与文档站补充开源中心化平台的介绍和链接 (fbbc58f)

🔧 其它

  • schedule-repair: 「prefers a late real receipt」先等 send 进入 dispatch 再推假时钟,修复高负载下 finishSend 未赋值 (#3299)
  • group-send: 跨上限用例改用等比缩小的上限,消除 bun-test 高负载超时 (#3324)
  • idle-spin: 闸门忙等用例冻结 Date.now,消除 1ms 预算撞墙钟的假超时 (#3329)
  • midscene: 报告链接被 Pages 清理后指向本次运行的 site artifact (257b57e)

🙏 感谢贡献者

@DylanQiao @mxgnene01 @nengqi @superShen0916 @LeonYuanYao @haozhenfei @chaozuo-cpu @xushulong-solo @mtunique @xinna2001 @will7856 @shangguandxing-sudo @47seek

Full Changelog: v3.59.1...v3.59.2