Skip to content

v0.4.3 — 审批模式写错一个值不再毁掉每个回合,并行提问的读数不再谎报

Choose a tag to compare

@eghrhegpe eghrhegpe released this 17 Oct 08:21
· 92 commits to master since this release

🧩 v0.4.3 — 审批模式写错一个值不再毁掉每个回合,并行提问的读数不再谎报

这一版有两条主线,都关于出错时你看到什么:一个配置项写错时,此前是每一次提问都被拒,而报错来自 daemon、看起来不像配置问题;两条提问并行时,面板会在其中一条还在跑的时候说「没有回合在跑」。顺带把 v0.4.2 之后的一批修复一起集结发布。


一、approval_mode 只接受四个值,写错不再等到每一次提问都失败

approval_mode 的合法取值是闭枚举——build / accept_edits / bypass / plan——这不是文档推断,是拿 daemon 的 422 参数门零额度枚举出来的(探针 scripts/probes/approval-mode.mjs,daemon 5.2.3)。而插件此前只检查「是不是一个非空字符串」,写错一个字就原样透传:于是此后每一次提问都被 daemon 拒掉,报错还来自 daemon 那一侧。

现在启动时就判定:不在枚举里 → 回落到 bypass,日志说明被拒的是哪个拼写,详情页「审批模式」那一行直接写明「你写的是什么」,悬停里列出四个合法值。不静默透传、也不静默改写——你写的值和真正生效的值同时可见。

二、面板不再谎报「没有回合在跑」

面板的回合读数只有一个槽位,语义是「最近开始的那一条」。旧实现在回合退出时先做身份校验,于是修掉了「旧的那条先结束、把新的清掉」这一种顺序——但反过来的顺序漏了:新的那条先跑完时,它正是槽位持有者,清空会把还在跑的那条一起抹掉。现象是最坏的一种:面板说没有回合在跑,而它正在烧工具调用和额度。

现在退出时从「仍在跑的回合」里重算——两种先后顺序都覆盖:新的先结束就改报还活着的那条,旧的先结束则不动读数。

三、第一次能看见正在跑的回合

atomcode_ask 的回复是整轮取回的,一次跑几分钟的回合此前在面板上一直是黑盒。详情页现在多一行「ask 进行中」:已发起的工具调用次数、其中几次还没回、最近调用的是哪个工具、已经收到多少字、已跑了多久。数字来自每 5 秒一次的轮询,最多落后一个周期;只报计数与耗时,不含回复内容。

四、v0.4.2 之后集结的修复

  • 参数里写再大的上限都不再生效:timeout_secs / max_rounds / review_max_duration_secs 的上限在代码里钳制(轮数 1000、评审墙钟 1740 秒);0 仍是「关掉熔断」的唯一写法。
  • 取消 / 超时 / 熔断会真的去停掉 daemon 侧那个回合:此前只断本端等待,回合继续在后台烧额度。现在带会话 id 请求停止,并按 daemon 的应答如实回报(它答「已经不在跑了」也照说,不转述成「已停止」)。
  • 轮数熔断这一轮到底有没有生效,当场能判定:daemon 自报的工具调用次数与本端计数一对照就是结论(一致 / 对不上 / daemon 没自报时照实说无法判定)。
  • 评审返回的上下文体积不再翻倍:findings 清单与 report 原文共用一份预算,并说明被裁掉多少。
  • 评审结论不再只有一坨原始 JSON:多一份结构化清单(严重程度 / 文件 / 行),解析不出来就明说「没能解析」,不拿 0 条冒充「没有问题」。
  • 未知 SSE 类型不再静默:工具输出恒带 protocol_unknown_types 字段,面板常驻提示——重中之重是若被改名的正是 tool_start,熔断会静默失效。
  • 过期的侧边会话不再被反复续接:会话记录随 daemon 身份走,daemon 一重启旧会话 id 直接判死。
  • 面板上改模型档位立刻生效(此前弹回旧值、最长等 5 秒、又没有任何提示,看起来像没点中)。
  • 开发副本在当前宿主上不再整体拒载:两个工具的输出 schema 曾携带「可为空」的类型并集,被宿主校验拒收,插件整体挂不上、详情页只剩一句 HTTP 404。现在注册前先翻译到宿主接受的子集(「可为空」的语义保留在字段说明里)。已发布的 0.4.2 不受影响。

破坏性改动:取不到工作目录时,atomcode_ask 直接拒绝

取不到工作目录等于让 AtomCode 的工具在你的用户目录里自动执行——当前 daemon 对任何 approval_mode 都无人值守自动放行,bypass 只是出厂默认。现在要么传 working_dir(或在插件配置里设一个默认),要么显式传 allow_unattended: true 表示知情同意。此前这种情况只在回合跑完之后提示一句。


核验

发布内容与 tag 指向的提交是同一份:拉取 registry 上的 dsh-connect-atomcode@0.4.3,与本机构建产物逐文件比 SHA256,23/23 一致(含真正跑起来的 client.js 与 lib/index.js、白名单内的全部文件)。包内 package.json 为 0.4.3,含本版新增的用户可见文案((已回落:你写的是 …))与本版 CHANGELOG 节。