# 设计决策与「不做」清单 本文件收纳两类东西,都是**改代码前该先读、改完后别忘更新**的: - **仍然有效的决策** —— 当前设计受哪些已定型的约束; - **未修 / 明确不做** —— 已经想过、权衡过、决定不做的事。**别把它当成"没做",也别自己"顺手做了"。** 每个版本改了什么见 [`../CHANGELOG.md`](../CHANGELOG.md);这份文件只讲**现在为什么是这样**。 (原先这两节挂在 `README.md` 的「v0.4 治理记录」标题下——那是把"当前约束"混进"版本历史", 2026-10-16 拆开:历史进 CHANGELOG,约束留在这里。) --- ## 仍然有效的决策 - **ask_max_rounds 默认 25(不再是 0)**。它是**停止等待**的止损,不是远端 kill:断的是客户端这条 HTTP 流,daemon 侧回合可能继续在后台跑完。对无人值守的 agent 而言,这个数字约束的是**用户等多久**、不是 agent 干多少(25 轮 shell/写文件/出网足以造成实质损害)——请连同 `README.md` 的安全姿态一节一起读 - **review 每次调用重读 config.toml**,不可用时直接拒绝 - **review 缺省不猜仓库**:两者都没给时拒绝并说明原因 - **reply/report 截断时打标记 + 置 `truncated` 字段** - **两个工具描述各说各的命名空间**,写明"传裸模型 id 是错的" - **sessions.count() 按 prefix 统计** - **daemon_retry_secs(默认 60s)冷却后重试** - **额度正则标签收紧为 `用量|usage|quota`** - **面板布局**:`1180px` + `repeat(auto-fit, minmax(320px, 1fr))` - **i18n**:`locale/{en,zh}.json` + `files[]` 含 `locale` - **工具统计格式**:两组带标签,不摊平成一排 > 机制层的硬约束(为什么不做 provider 接管、额度为什么只能靠文本解析、三条私有无版本协议怎么办) > 写在 `../AGENTS.md` 的「三条事实」——那里是给改代码的人的入口,本文件不重复。 ## 未修 / 明确不做 - **`approval_mode: bypass` 的默认值本身没改**。它不是插件能单方面收回的东西:关掉后 ask 回合会在 AtomCode 侧卡在交互式审批上(daemon 无人值守),工具直接不可用。**缓解措施是把轮数变成有界的**,并把 `approval_mode` 留在配置里显眼处。共享仓库请自行改成非 bypass。 - **协议仍无版本钉扎**。真正的解法需要官方提供 `/protocol` 或稳定的事件契约;本版只能做到"坏了说清楚"。 - **`GET` 触发 spawn** 保留。只读轮询拉起后台进程是一个设计张力点,但"打开面板即有数据"是有意的权衡(README 已如实描述)。 - **会话键是 per-working_dir 而非 per-对话**。DSH 不暴露稳定的对话 id,这是合理妥协;现在**在工具描述里写明**了,免得模型误以为 `continue` 续的是自己这条对话。 - **`diff_text` 的临时文件**仍在系统 tempdir,被 SIGKILL 时会残留。单用户开发机风险低。