Releases: new-256/codebuddy-bridge
Release list
v1.1.12 — 回测基线修复 · 兼容矩阵扩至 22 版本
背景
v1.1.11 之后发现 dsh-compat.mjs 全版本回测基线存在两处真实缺陷:其一让功能回测在 2026-09-18 当天跑出「PASS 0 / 功能失败 20」的假象;同时 @deepseek-ai/dsh 已发布 0.1.6-alpha.1(09-15)/ 0.1.6-alpha.2(09-17)两个新版本,兼容矩阵(当时 20 版本)已覆盖不全。本版修复基线、把矩阵扩到 22 版本并重跑,不涉及插件运行时行为。
修复(scripts/dsh-compat.mjs)
- 移除
--legacy-peer-deps:@deepseek-ai/dsh-app-boot自 0.1.5-rc.2 起把@deepseek-ai/cordis-plugin-group等声明为运行时必需的 peerDependencies。--legacy-peer-deps让 npm 跳过 peer 安装却仍返回成功(exit 0)——「第一顺位成功」后兜底不再执行,沙箱得到一个缺 peer、无法 boot 的 dsh 环境,实测 22 个版本全部在dsh-app-boot导入处ERR_MODULE_NOT_FOUND。 - 加
--before=<发布时间+1天>时间锚定:dsh 内部组件互相以^0.1.x-rc.ycaret 范围引用;0.1.6-alpha.1/.2 发布后,安装任何历史版本都会解析进 0.1.6-alpha.x 组件形成混合树,结果随上游发版漂移、不可复现。--before让 npm 只取该版本发布时间点及以前存在的版本,树构成与发布时代一致。 PROBE_VER1.1.9 → 1.1.11:功能回测安装的探测包版本对齐当前已发布版本。
兼容声明更新(docs/COMPATIBILITY.md)
- 矩阵 20 → 22 版本,新增
0.1.6-alpha.1/0.1.6-alpha.2(静态七契约点与 0.1.5-rc.2 完全一致)。 - 修复后重跑汇总:PASS 17 / 功能失败 0 / 不可安装 2 / 待重跑 3 / 未回测 0。
- 不可安装 2 =
0.0.1-rc.1/0.0.1-rc.2(依赖@deepseek-ai/dsh-agent-tool-mode已从 registry 下架,E404,平台事实); - 待重跑 3 =
0.1.0-rc.8/0.1.1-rc.1/0.1.1-rc.2(沙箱 install 瞬时网络超时 ETIMEDOUT,重试仍超时;其同代0.1.0-rc.2/3/6/7均 PASS,判定为网络问题而非兼容性)。
- 不可安装 2 =
- 更正 v1.1.10 的「CLI 环境不兼容」结论:0.1.0-rc.*/0.1.1-rc.* 旧版本修复后全部通过——原「旧 CLI 与现代 Node ESM 不兼容」的归因是上述两处基线缺陷的假象,随撤回(详见 COMPATIBILITY §3.3)。
测试
npm run check全绿:MCP self-check +verify.mjs22 项闸门(含 client 注册 id == 包名)+ 74 例测试。- 版本号同步:
package.json/home-plugin/codebuddy-indicator/package.json/mcp/codebuddy-mcp-server.mjs的VERSION/docs/CHANGELOG.md顶部 /test/mcp.test.mjs断言——五处一致为 1.1.12;README 中英文版本表与 HANDOVER 同步更新。
版本一致性
- 发布顺序严格遵循
docs/RELEASE-SOP.md§0.3:commit → tag → push → GitHub Release →npm publish→ 审计。 - 自 1.1.10 起工作区 CRLF 已归一,本版 tarball 与 tag 树应报
✓ IDENTICAL。
v1.1.11 — 审计回源 · 回测汇总分档
背景
v1.1.10 引入 audit-npm-sync.mjs 与 dsh-compat.mjs 之后暴露的两处观测准确性问题:审计刚发布的版本看不见最新版,回测汇总把真实失败说成「没跑过」。本版只修这两个工具的读数口径,不涉及插件运行时行为(preset / 家级灯 / 动态形态 / MCP 三形态代码零改动)。
修复
-
审计版本列表回源(
scripts/audit-npm-sync.mjs):npm view <pkg> versions会命中 npm 本地元数据缓存,导致刚npm publish完立刻审计仍只看到旧版本列表(v1.1.10 发布时实测)——审计看上去「少了最新版」,CI 里也是新 tag 刚推、正需要最新元数据。现在取版本清单时加--prefer-online强制回源。改动只在版本列表这一步:tarball 传输层不动,仍走 npm CLI(自动重试)+ 官方dist.shasum校验 + npmmirror 镜像兜底。 -
回测汇总单列「功能失败」(
scripts/dsh-compat.mjs):此前汇总按PASS / 不可安装 / 待重跑 / 未回测分档,其中functional.ok === false的真实功能失败被并进untested,与「根本没跑过」混为一谈——20 版本回测里 7 个「CLI 环境不兼容」的失败行因此口径不准。现在untested = 总数 − pass − failed − skip − pending,并把功能失败 ${failed}单独打印进汇总行,与docs/COMPATIBILITY.md§3.1 的「不可安装 / CLI 环境不兼容」分档对齐。
测试
npm run check全绿:MCP self-check +verify.mjs22 项闸门(含 client 注册 id == 包名 的静态检查)+ 74 例测试全部通过。- 版本号同步(本次涉及的全部声明位):
package.json/home-plugin/codebuddy-indicator/package.json/mcp/codebuddy-mcp-server.mjs的VERSION/docs/CHANGELOG.md顶部条目 /test/mcp.test.mjs版本断言 —— 五处一致为 1.1.11;README 中英文版本表与本交接文档的版本说明同步更新。
版本一致性
- 发布顺序严格遵循
docs/RELEASE-SOP.md§0.3:commit → tag → push → GitHub Release →npm publish→node scripts/audit-npm-sync.mjs审计。 - 自 1.1.10 起工作区 CRLF 已归一(
.gitattributes* text=auto eol=lf),本版 tarball 与 tag 树应报✓ IDENTICAL。
v1.1.10 — 一致性审计 · dsh 全版本回测 · 支持声明与交接文档
背景
v1.1.8 事故后(详见 v1.1.9),本轮补齐工程化闭环:npm↔GitHub 双侧一致性审计、dsh 全版本回测、支持声明与交接文档体系。
新增
- npm↔git 一致性审计(
npm run audit:npm,scripts/audit-npm-sync.mjs):对 npm 上每个已发布版本,逐文件 sha256 比对 tarball 与git -c core.autocrlf=false archive的 tag 树(取原始提交字节,防 autocrlf 假阳性),校验 tag 存在性与 tarball 内 name/version 规格。分级 IDENTICAL / EOL-ONLY(仅行尾,通过但显著标注)/ DRIFT(exit 1)。传输经 npm CLI(自动重试 + 官方 dist.shasum 校验 + npmmirror 镜像兜底)。CI 新增 audit job(fetch-depth: 0)每次 push 自动执行。 - dsh 全版本回测(
npm run compat:dsh [--full],scripts/dsh-compat.mjs):静态探测全部 20 个已发布 dsh 版本的 7 个契约点(plugin CLI / pnpm 转发 /dsh.bundle.patch/ bundles 对账 / persona schema / client-modules 注册名校验 /locatePkgJsongraph id 机制);--full时逐版本沙箱真实安装(DSH_HOME + USERPROFILE/APPDATA 全隔离)跑dsh plugin --profile web add codebuddy-first-bridge@1.1.9并验证 8 项安装结果。 - 支持声明(
docs/COMPATIBILITY.md):20 版本矩阵 + 按形态的支持结论(preset 需 dsh ≥ 0.1.3-alpha.2;bundle 安装全版本可用、需 bridge ≥ 1.1.8;MCP 与 dsh 无关)+ 事故对应关系。 - 发布维护 SOP(
docs/RELEASE-SOP.md)与交接文档(docs/HANDOVER.md)。
修复
- CRLF 行尾归一化:
docs/ARCHITECTURE.md、assets/indicator-states.svg、test/core.test.mjs、test/indicator.test.mjs归一为 LF,新增.gitattributes(* text=auto eol=lf)。此前 npm tarball 打包自工作区字节而 git blob 存 LF,CRLF 工作区文件造成行尾漂移;1.1.10 起工作区已归一,tarball 与 tag 字节级一致。
测试
- 一致性审计结论:1.1.6–1.1.9 四个已发布版本与各自 tag 内容零漂移(仅 ARCHITECTURE.md 行尾差异,EOL-ONLY 分级通过并归档根因)。
- dsh 回测结论:plugin 安装体系与注册名校验自 0.0.1-rc.1 即存在;persona schema 翻转点 0.1.3-alpha.2;graph id 机制翻转点 0.1.2-alpha.2(对 profile 安装两种机制等价,1.1.8+ 修法全版本成立);0.0.1-rc.1/rc.2 因平台依赖包下架今日不可安装。沙箱安装回测明细见
docs/COMPATIBILITY.md§3.1。 npm run check:MCP self-check + verify 22 项 + 74 例测试全绿。
v1.1.9 — 发布闸门加固
v1.1.9 — 发布闸门加固(防 client id 不匹配事故复发)
背景
v1.1.7→v1.1.8 事故(client.js 的 __ModuleLoader__.load id 写成旧独立包名 codebuddy-indicator,与包名不匹配 → client-modules 校验 loaded without registering "codebuddy-first-bridge" 失败 → 整个 client combo 崩屏)能流到 npm,直接原因是发布闸门漏检 client 注册 id,且 prepack 不跑测试。
加固
verify.mjs新增 client id 静态闸门:解析exports["./client"]→ 提取__ModuleLoader__.load({ id })→ 强制与package.json的name严格一致(剥除//注释后匹配;负向自检确认旧 bug id 会被拦截)。prepack由verify + build --check加强为verify + npm test,发布前强制跑完整 74 例测试。- 版本号三处同步(package.json / MCP VERSION / CHANGELOG),README 中英文版本表补齐 1.1.8/1.1.9。
v1.1.8 — 修复 DSH 启动致命屏
v1.1.8 — 修复 DSH 启动致命屏(紧急热修)
根因
client-modules 的 graph row 以包名(codebuddy-first-bridge)为 id,bundle 脚本执行后按 loaded without registering "<packageName>" 校验注册名。v1.1.7 的 home-plugin/codebuddy-indicator/lib/client.js 仍写旧独立包名 id: "codebuddy-indicator",包并入主包后两者不匹配 → 整个 client combo 加载失败 → Failed to load plugins,桌面壳被迫进入安全模式(2026-09-10 18:08 事故)。
修复
__ModuleLoader__.load({ id })改为codebuddy-first-bridge,与包名严格一致。- 补齐热修漏掉的
test/mcp.test.mjs1.1.8 版本断言;74/74 测试通过。 - npm 1.1.8 已于事故后热发,本 release 补齐 git 欠账。
背景:错误来自后台两个官方包
failed to import loader entry——@deepseek-ai/cordis-plugin-loader的 updateError 包装器bundle ... loaded without registering——@deepseek-ai/dsh-client-modules的注册名校验
相关上游改进已另行反馈。
v1.1.7
v1.1.7
家级状态灯 codebuddy-indicator 从旧式本地 file:// 注册改为标准 npm 分发形态(对齐 agy-first-bridge v1.6.0)。
改动
- 主包 package.json 补全标准分发字段:
main直指home-plugin/codebuddy-indicator/lib/index.mjs(host 真入口)、exports、dsh.client.platform: web(client 半自动纳入浏览器花名册)、dsh.bundle.patch(安装后自动挂载家级灯)、bin.codebuddy-mcp-server、repository/homepage/bugs。 - 新增 bundle 补丁层:家级灯由裸包名
name: codebuddy-first-bridge一行加载——不再有file://行、不再有 client-entry 占位 → 单实例,消除双实例二次注册崩溃风险。 - 本机用户层同步:dsh-home
cordis.patch.yml由file://...?v=6改为裸包名name: codebuddy-indicator。 - 防回归护栏:verify.mjs 新增 6 条标准分发检查。
安装
dsh plugin --profile web add codebuddy-first-bridge测试:73/73 通过,npm run check 全绿。
v1.1.6
v1.1.6
适配 DSH 后端 0.1.3-alpha.2(@deepseek-ai/dsh-persona 0.1.3-alpha.2 / Schemastery 3.18.2)的配置校验升级。
背景
后端自动更新后,官方 @deepseek-ai/dsh-persona 将配置 schema 由旧版 text: 字段强制升级为:
prefix: z.string().required()
suffix: z.string().default("")
Schemastery 校验器直接拒绝旧结构挂载,恢复会话时抛出:
invalid config: - $.prefix missing required value
自定义预设(codebuddy-first、cordis-agy)因仍使用旧版 text: 字段全部被拒。
修复
- persona 配置迁移:
preset/codebuddy-first/agent.cordis.yml改为新版prefix:+suffix:拆分,与官方 standard preset 写法一致。 - 防回归护栏:
verify.mjs新增检查(必须有prefix:、必须有suffix:、禁止残留旧text:),CI 直接拦截回退。 - npm 发布:去
private、files白名单补全、prepack发布前强制全量校验;包名codebuddy-first-bridge已在 npm 发布,npm install -g codebuddy-first-bridge即可安装。
测试:73/73 通过,npm run check 全绿。
v1.1.5
v1.1.5
适配 DSH Desktop 0.3.14 / @deepseek-ai/dsh 0.1.2-alpha.5。
修复状态灯在标准(非 codebuddy-first)模式下完全不出现,以及状态输出里的希腊字母。
① 状态灯对标准模式完全失明
标准模式下 codebuddy 经全局 MCP 行调用,而 MCP 服务器是独立子进程:既没有 ctx.emit,也拿不到家级插件的 codebuddyCollector 服务,createStatusEngine(null) 更是直接关掉了 publish。家级插件因此从来收不到这条路径的任何数据 —— 灯不是偶发不亮,是压根没有数据源。
改用文件通道:MCP 每次状态变化把快照原子写入(临时文件 + rename)<dsh-home>/codebuddy-indicator-mcp.json,家级插件在响应 /codebuddy-indicator/status 时读取合并。两端都只从自身模块位置推导 dsh-home,不需要端口(webServer.register 不暴露端口,且端口实测会变)。
② 活动明细永远为空(静默失败)
通道打通后 current/trail 仍全空。根因:child.stdout 未声明编码 → 'data' 派发的是 Buffer → createLineStream.pushChunk 只接受字符串(非字符串静默 return)→ engine.foldEvent 从不触发。这个失败完全无声:result 事件是从累积字符串解析的,所以 tokens/session/状态全都正常,只有实时明细缺失。修复用 setEncoding('utf8')(而非 String(d),后者会在多字节 UTF-8 跨 chunk 边界时乱码)。
另加过期保护:快照带 updatedAt/pid,超 90s 未更新且仍 running 的按「进程已死」降级,否则灯会永久转圈。
③ 状态输出改为纯 ASCII
renderStatus 此前用希腊字母 Σ 当合计记号(| Σ 1 runs · 25268 tokens),改为 total 1 runs, 15 tokens。
实测
修复前整段调用端点恒为 projects: [];修复后 state=running 全程可见,端点实测到 cur=Bash#6、typing#0,trail 由 1 增至 12,结束转 ok。
测试:73/73 通过。
v1.1.4
v1.1.4
适配 DSH Desktop 0.3.14 / @deepseek-ai/dsh 0.1.2-alpha.5。
修复标准(非 codebuddy-first)模式下调用不顺畅。
问题
下发测试任务时第一次 codebuddy_run 失败,工具只回了一行,没有原因也没有指引:
codebuddy FAILED [status=ERROR_DURING_EXECUTION mode=bypassPermissions session=1f70715d… tokens=25268 29.154s]
调用方于是白耗一次 codebuddy_status(同样只有一行),再靠猜显式指定 model=glm-5.3 才成功。复现验证:同一任务、同一默认模型 hy4-preview 重跑 39s 直接成功,说明这是 CLI/服务端瞬时故障,不是默认模型坏了、也不是任务本身有问题。缺陷在桥:不重试、不解释、不报模型。
修复
- 瞬时错误自动重试一次:新增
isTransientCliError()识别 CLI 自报的error_during_execution,preset 与 MCP 两条路径都静默重试一次后再交还结果,不打断用户。与限流/网络类失败明确分流(后者可能是额度耗尽,重试纯烧钱,仍走「问用户」弹窗);重试计数独立,不占用限流弹窗额度;续接类调用(--resume/--continue)不自动重试。 - 失败必带可行动指引:新增
failureHint(),明确告知该重试、该换模型还是该改用原生工具。 - 结果记录实际使用的模型:head 输出
model=…,自动重试过的额外标retried=1,排查默认模型不必再靠猜。
修复后同一失败形态:
codebuddy FAILED [status=ERROR_DURING_EXECUTION mode=bypassPermissions model=hy4-preview retried=1 session=1f70715d… tokens=25268 29.154s]
[诊断] codebuddy CLI 侧瞬时错误(error_during_execution,CLI 未给出原因),已自动重试 1 次仍失败。可换 model 再试一次;若仍失败请改用原生工具完成,或告知用户。
实测
端到端用默认模型重跑该冒烟任务成功(39.8s),并经独立复核:自行重跑 unittest 6/6 通过,逐分支验证 0/-3/2.5/'x'/True 均正确抛 ValueError。
测试:68/68 通过。
v1.1.3
v1.1.3
适配 DSH Desktop 0.3.14 / @deepseek-ai/dsh 0.1.2-alpha.5。
修复
- 计划模式下 CLI 在
-p非交互 +plan下默认拒绝 Bash,导致 codebuddy 报「Bash 工具在无交互模式下未获授权(被拒绝),所以我改用 PowerShell」。现在 plan 模式额外传--allowedTools Bash预批只读 shell;实测 Bash 命令恢复执行,写入仍由 plan 模式禁止,Read/Grep 不受影响。 - 状态灯改为 host 侧实时枚举
agents.list()+agentPresets.composedPreset()得到 codebuddy-first 会话名单,已开会话无需重开即可生效。客户端摘要通道与 host 名单采用「任一肯定即肯定」安全阀,preset sessionId 上报作为兜底;会话关闭立即熄灯。 - 新增
presetSessions端点字段,会话名单上限 64,兼容旧版全局租约。
测试:66/66 通过。