{"release":{"tag":{"name":"v0.1.46","path":"/startvibecoding/vibecoding/tags/v0.1.46","tree_path":"/startvibecoding/vibecoding/tree/v0.1.46","message":"","commit":{"id":"6cc95b668e143a0e3d1f6c8eefa3ddb54e1366e2","short_id":"6cc95b6","title":"docs update changelog for compaction fixes","title_markdown":"docs update changelog for compaction fixes","description":"","description_markdown":"","message":"docs update changelog for compaction fixes\n","message_markdown":"docs update changelog for compaction fixes","detail_path":"/startvibecoding/vibecoding/commit/6cc95b668e143a0e3d1f6c8eefa3ddb54e1366e2","commits_path":"/startvibecoding/vibecoding/commits/6cc95b668e143a0e3d1f6c8eefa3ddb54e1366e2","tree_path":"/startvibecoding/vibecoding/tree/6cc95b668e143a0e3d1f6c8eefa3ddb54e1366e2","author":{"name":"gitgame","email":"admin@pkold.com","username":"gitwebgame","user_path":"/gitwebgame","enterprise_user_path":null,"image_path":"no_portrait.png#gitgame-gitwebgame","is_gitee_user":true,"is_enterprise_user":null,"widget_url":""},"committer":{"name":"gitgame","email":"admin@pkold.com","username":"gitwebgame","user_path":"/gitwebgame","enterprise_user_path":null,"image_path":"no_portrait.png#gitgame-gitwebgame","is_gitee_user":true,"is_enterprise_user":null,"widget_url":""},"authored_date":"2026-06-20T14:33:01+08:00","committed_date":"2026-06-20T14:33:01+08:00","signature":null,"build_state":null},"archive_path":"/startvibecoding/vibecoding/repository/archive/v0.1.46","signature":null},"operating":{"edit":false,"download":true,"destroy":false,"enterprise_forbid_zip":false},"release":{"title":"v0.1.46","path":"/startvibecoding/vibecoding/releases/tag/v0.1.46","tag_path":"/startvibecoding/vibecoding/tree/v0.1.46","project_id":47883436,"created_at":"2026-06-21T19:44:13+08:00","is_prerelease":false,"description":"# 更新日志\r\n\r\n\r\n## v0.1.46\r\n\r\n### ✨ 新功能\r\n\r\n- **Workflow Agent 实例 Key**\r\n  - 新增重复逻辑 workflow agent 的 `:key`，有界 `while` 循环可以保持 agent 名称为字面量，同时将每轮结果保存为 `phase.agent[key]`。\r\n  - 新增 `result-key`、`result-latest`，并支持 `(result \"phase.agent\" :key \"r0\")`，用于显式读取 keyed 结果或最新实例结果。\r\n  - Keyed workflow worker 使用带实例的运行时 ID，例如 `agent-worker[r0]`，避免循环中的重复 worker 碰撞，同时保留稳定的逻辑 agent 名称。\r\n\r\n- **Workflow Lint 工具**\r\n  - 新增 `workflow_lint`，可在不运行 worker agents 的情况下验证 workflow Elisp DSL。\r\n  - Lint 会检查 Elisp 语法、workflow/phase/agent 表单、关键字参数、必需 prompt，以及 result 引用。\r\n  - 将 lint 工具与 workflow run/status/cancel 工具一起注册，并更新 workflow prompt 指引：非平凡的生成或修改后 workflow 应先 lint 再执行。\r\n\r\n- **可配置上下文压缩**\r\n  - 新增 `tokenizer`、`tokenizerModel` 和 `template` 压缩配置，并贯通 CLI、print 模式、ACP、Gateway、Hermes、TUI 模式切换和 delegate agent factory。\r\n  - 新增内置压缩摘要模板：`default`、`code` 和 `conversation`，长会话可按任务类型保留更合适的 checkpoint。\r\n  - 引入 token 估算器抽象，同时保持 `auto` 和 `generic` 使用现有 chars/4 通用估算器。\r\n  - Compaction entry 现在记录 summary version、previous compaction ID 和 last summarized entry ID，便于 session replay 与调试。\r\n\r\n### 🐛 Bug 修复\r\n\r\n- **Context Compaction Replay**\r\n  - Print 模式现在会在运行 agent 前恢复 session replay 历史，保留此前对话上下文。\r\n  - 手动和强制 compaction 现在会检查是否真的存在可压缩的旧历史，避免只剩近期上下文时仍触发压缩。\r\n  - Replay 已压缩消息时会移除保留消息中的旧 usage metadata，避免过期 token 统计泄漏到后续运行。\r\n\r\n- **并发文件写入**\r\n  - 新增进程级内存文件锁管理器，默认 tool registry 共享同一个管理器。\r\n  - `write` 和 `edit` 在读取和修改文件前会获取按文件粒度的锁，避免多个 agent 并发写同一目标文件时互相交错覆盖。\r\n  - 等待锁时支持 context 取消和 deadline；等待被中断时会报告当前锁持有者。\r\n\r\n### 🔧 重构\r\n\r\n- **预发布包发布**\r\n  - `npm-publish-pre` 现在会先同步并使用 `-pre` 版本后缀构建 npm packages，再发布预发布包。\r\n  - 更新 npm package metadata 和各平台 optional dependency 版本为预发布版本。\r\n\r\n- **命名 Workflow Worker Agents**\r\n  - Workflow worker agent 现在使用由 DSL agent 名称派生的确定性 ID（`agent-\u003Cname\u003E`），改善事件归属和后台 agent 可见性。\r\n  - Workflow skill 指引已记录该 ID 映射，并建议在同一个 workflow 内保持 agent 名称唯一。\r\n\r\n### 📚 文档\r\n\r\n- 更新 Workflow 模式文档、工具参考和 `workflow-elisp` skill，记录 `:key`、keyed 结果读取，以及有界 while 循环写法。\r\n- 记录 context compaction 的 `tokenizer`、`tokenizerModel` 和 `template` 配置，包括内置模板选项，以及 idle compaction 设置当前为预留/弃用字段的状态。\r\n- 澄清 Ctrl+O 详情弹窗中的按键提示，包括切换目标、翻页、滚动和关闭。\r\n- 记录 TUI scrollback 的取舍：已完成 transcript block 会打印到原生终端 scrollback，以保证选择和历史滚动稳定；用户输入仍应按 block 打印，而不是无缓存流式输出，避免干扰 Bubble Tea 的 live view 重绘。\r\n\r\n### 🧪 测试\r\n\r\n- 新增 workflow runner、lint、集成和 skill 覆盖，验证 keyed 重复 agent 和 keyed result 查询。\r\n- 新增 context compaction 测试，覆盖自定义 token estimator、模板解析、配置化摘要 prompt、compaction metadata、可压缩性检查，以及 session replay usage 清理。\r\n- 新增 Gateway 和 Hermes 测试覆盖 `/compact` 在只剩近期上下文可保留时的行为。\r\n- 新增 workflow lint 测试，覆盖有效 source 收集和缺失 result 引用错误。\r\n- 新增 workflow 集成测试，验证 DSL agent 名称会反映到运行时 worker agent ID。\r\n- 新增文件锁测试，覆盖等待/取消行为、默认管理器共享，以及 `write`/`edit` 的 context 处理。\r\n\r\n---","author":{"name":"真如赝","username":"zhenruyan","path":"/zhenruyan","avatar_url":"https://foruda.gitee.com/avatar/1676900861588670495/94767_zhenruyan_1578917234.png!avatar30"},"attach_files":[{"download_url":"/startvibecoding/vibecoding/attach_files/2842400/download/vibecoding-0.1.46-windows-amd64.zip.sha256","name":"vibecoding-0.1.46-windows-amd64.zip.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-windows-amd64.zip.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842401/download/vibecoding-0.1.46-linux-musl-amd64.tar.gz.sha256","name":"vibecoding-0.1.46-linux-musl-amd64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-musl-amd64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842402/download/vibecoding-0.1.46-windows-arm64.zip.sha256","name":"vibecoding-0.1.46-windows-arm64.zip.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-windows-arm64.zip.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842403/download/vibecoding-0.1.46-darwin-arm64.tar.gz.sha256","name":"vibecoding-0.1.46-darwin-arm64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-darwin-arm64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842404/download/vibecoding_0.1.46_loong64.deb.sha256","name":"vibecoding_0.1.46_loong64.deb.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding_0.1.46_loong64.deb.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842405/download/vibecoding_0.1.46_amd64-musl.deb.sha256","name":"vibecoding_0.1.46_amd64-musl.deb.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding_0.1.46_amd64-musl.deb.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842406/download/vibecoding-0.1.46-linux-arm64.tar.gz.sha256","name":"vibecoding-0.1.46-linux-arm64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-arm64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842407/download/vibecoding-0.1.46-darwin-amd64.tar.gz.sha256","name":"vibecoding-0.1.46-darwin-amd64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-darwin-amd64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842408/download/vibecoding-0.1.46-linux-amd64.tar.gz.sha256","name":"vibecoding-0.1.46-linux-amd64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-amd64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842409/download/vibecoding-0.1.46-linux-loong64.tar.gz.sha256","name":"vibecoding-0.1.46-linux-loong64.tar.gz.sha256","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-loong64.tar.gz.sha256","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842411/download/vibecoding_0.1.46_loong64.deb","name":"vibecoding_0.1.46_loong64.deb","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding_0.1.46_loong64.deb","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842412/download/vibecoding-0.1.46-linux-loong64.tar.gz","name":"vibecoding-0.1.46-linux-loong64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-loong64.tar.gz","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842413/download/vibecoding-0.1.46-darwin-arm64.tar.gz","name":"vibecoding-0.1.46-darwin-arm64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-darwin-arm64.tar.gz","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842414/download/vibecoding-0.1.46-linux-arm64.tar.gz","name":"vibecoding-0.1.46-linux-arm64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-arm64.tar.gz","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842415/download/vibecoding_0.1.46_amd64-musl.deb","name":"vibecoding_0.1.46_amd64-musl.deb","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding_0.1.46_amd64-musl.deb","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842416/download/vibecoding-0.1.46-windows-amd64.zip","name":"vibecoding-0.1.46-windows-amd64.zip","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-windows-amd64.zip","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842417/download/vibecoding-0.1.46-linux-musl-amd64.tar.gz","name":"vibecoding-0.1.46-linux-musl-amd64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-musl-amd64.tar.gz","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842418/download/vibecoding-0.1.46-windows-arm64.zip","name":"vibecoding-0.1.46-windows-arm64.zip","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-windows-arm64.zip","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842419/download/vibecoding-0.1.46-darwin-amd64.tar.gz","name":"vibecoding-0.1.46-darwin-amd64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-darwin-amd64.tar.gz","censor_failed":false,"censor_tip":null},{"download_url":"/startvibecoding/vibecoding/attach_files/2842420/download/vibecoding-0.1.46-linux-amd64.tar.gz","name":"vibecoding-0.1.46-linux-amd64.tar.gz","cli_download_url":"https://gitee.com/startvibecoding/vibecoding/releases/download/v0.1.46/vibecoding-0.1.46-linux-amd64.tar.gz","censor_failed":false,"censor_tip":null}],"zip_download_url":"/startvibecoding/vibecoding/releases/tag/v0.1.46.zip","tar_download_url":"/startvibecoding/vibecoding/releases/tag/v0.1.46.tar.gz"}}}