CodeWhale v0.8.57 发布 —— 系统休眠不丢会话、一键发版、Docker 修复,这次全是工程化细节
流式请求卡在半路,终端里一行血红的 Stream read error: error decoding response body,上一轮的分析、思考、中间结果全白费了。你只能重新来,然后盯着屏幕祈祷别再有电话会议。这种事发生几次之后,我不敢在 CodeWhale 里做超过十分钟的推理任务了。
v0.8.57 第一件事就是把这个窟窿堵上。

休眠复活:不丢一句话
#2990 的改动看起来不大——用单调钟(monotonic clock)加挂钟时间戳去检测系统是否经历过休眠唤醒周期,如果检测到了就静默重发流式请求。但这条 commit 解决的是一个本质矛盾:LLM 的流式接口是长连接,操作系统并不保证长连接跨休眠存活。你合上电脑睡两小时,内核的网络栈已经把 TCP 连接干掉了,但 CodeWhale 的客户端不知道,还等着下一块 token 回来。
以前的做法是报错了事,错误丢给用户处理。现在客户端在流式请求进行中如果检测到时间跳跃(休眠期间挂钟走了但单调钟没走),就知道系统刚醒过来,自动重建连接并重发请求。整个过程对用户不可见,你的思考链不受影响。
这种问题在桌面端很少见,但在笔记本场景里几乎是日常——你合上盖子从工位走到会议室,或者从办公室带回家,CodeWhale 之前每次都断。修复之后,长对话终于能在物理意义上随身携带了。
一键发版:从 9 个 commit 到 1 个命令
v0.8.56 发版之后,团队需要额外提交 9 个 commit 来补完发布流程——版本号没改完、依赖锁没锁上、README 里的示例版本还是旧的、npm wrapper 没更新、Cargo.lock 没同步、TUI 的 changelog 还是空白的。这不是粗心,是手工流程必然的遗漏。
v0.8.57 加了一个 ./scripts/release/prepare-release.sh X.Y.Z 脚本,把上述所有事合并到一行命令里。它更新所有版本号、依赖锁、npm wrapper shell 脚本、README 安装示例、Cargo.lock、TUI 内部的 changelog。脚本跑完后,你只差一个 commit 和一个 tag。
这件事说大不大——它不影响任何一个用户的功能体验。但说小也不小——任何做过开源维护的人都知道,"发版焦虑"里有一半来自怕漏改某个文件导致 CI 挂掉。把这个焦虑自动化掉,维护者才有余力去看社区 PR。
Changelog 减肥:瘦了 300KB
root 目录的 CHANGELOG.md 之前保留了从项目诞生开始的所有历史,357KB 的文件,打开都卡。v0.8.57 做了一次"changelog 节食"——只保留 v0.8.40 之后的内容,更早的移到 docs/CHANGELOG_ARCHIVE.md。TUI 的 changelog 更彻底:不再手工维护散装日志,改为从 15 个 release 切片的自动生成内容。
二进制也因此瘦了约 300KB。在动辄 GB 级应用的今天 300KB 不算什么,但这种"克己"的态度值得注意——changelog 是用来读的,不是用来堆砌的。一个文件大到没人愿意打开的时候,它的存在本身就是问题。
Docker 修复:一个软链接的故事
v0.8.56 的 Docker release job 在 CI 里失败了。原因很有 retro 感:Dockerfile 里还在复制 deepseek 和 deepseek-tui 这两个二进制名——那是 rebrand 之前的名字。现在的二进制已经改叫 codewhale 了,但 Dockerfile 入口是硬编码的旧名字。
修复方案是让 deepseek 和 deepseek-tui 成为 codewhale 的软链接,这样遗留容器入口点继续保持工作。这种修复很聪明——它没有强迫用户修改 compose 文件或者等大家升级启动脚本,而是向下兼容到零点。
.devcontainer/ 也做了同样的修复:之前引用了 rebrand 前的容器镜像名、挂载路径和 remoteUser。现在所有这些都对齐到了 codewhale 命名体系。
其他你可能会关心的
- CODEOWNERS + dependabot.yml 配置上线。代码库开始有明确的负责人制度了,dependabot 会定期提醒依赖更新。这是一个项目从个人项目走向团队协作的标志性信号。
- Docs 重组:内部设计笔记移入
docs/rfcs/,废弃文档删除。文档不再是一个文件夹装所有东西的摊大饼结构。 - Agent 层面改进:system prompt 现在报告
codewhale_version而不是deepseek_version;legacy.deepseek/instructions.md不再在 prompt 里宣传但仍兼容读取;超大 instruction 文件会明确显示截断标记。这些都是 agent-facing 的"清洁",意味着 CodeWhale 作为 agent 框架的自我认知正在定型。 - 废弃依赖清理:
tracing-appender、zeroize、rustls被移除;orphanedvendor/schemaui-0.12.0lockfile 也一并清算。
回看 v0.8.57 的改动清单,没有新 provider、没有新模型、没有社区功能的跃进。它是一个典型的"发完大版本之后回头加固"的版本。九成的工作量消耗在那些你平时看不见的地方——休眠时不丢会话、发版不出错、changelog 可读、Docker 能跑、依赖不烂尾。
这种版本在 Release Note 里往往不显眼,但对每天用这个工具写代码的人来说,体验的提升比加一个新模型更实在。
升级方式
# 已安装用户(推荐,走 GitHub Release 二进制,不经过 npm 滞后)
codewhale update
# 首次安装
npm install -g codewhale
# Cargo (Linux / macOS)
cargo install codewhale-cli codewhale-tui --locked
# Docker
docker run --rm -it -e DEEPSEEK_API_KEY="$KEY" ghcr.io/hmbown/codewhale:v0.8.57
⚠️ npm 包与 GitHub Release 可能有短暂延迟,codewhale update 直接走 GitHub Release 二进制,不受 npm 包滞后影响。
完整更新日志:GitHub Release
📢 关注我,获取最新开源更新日志和开发者工具动态。如果觉得这篇文章有用,欢迎转发给身边的开发者朋友。
#CodeWhale #AI编程 #工程化 #Docker修复