Skip to content

Releases: new-256/codebuddy-bridge

v1.1.12 — 回测基线修复 · 兼容矩阵扩至 22 版本

Choose a tag to compare

@new-256 new-256 released this 18 Sep 18:12

背景

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.y caret 范围引用;0.1.6-alpha.1/.2 发布后,安装任何历史版本都会解析进 0.1.6-alpha.x 组件形成混合树,结果随上游发版漂移、不可复现。--before 让 npm 只取该版本发布时间点及以前存在的版本,树构成与发布时代一致。
  • PROBE_VER 1.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,判定为网络问题而非兼容性)。
  • 更正 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.mjs 22 项闸门(含 client 注册 id == 包名)+ 74 例测试。
  • 版本号同步:package.json / home-plugin/codebuddy-indicator/package.json / mcp/codebuddy-mcp-server.mjsVERSION / 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 — 审计回源 · 回测汇总分档

Choose a tag to compare

@new-256 new-256 released this 17 Sep 17:20

背景

v1.1.10 引入 audit-npm-sync.mjsdsh-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.mjs 22 项闸门(含 client 注册 id == 包名 的静态检查)+ 74 例测试全部通过。
  • 版本号同步(本次涉及的全部声明位):package.json / home-plugin/codebuddy-indicator/package.json / mcp/codebuddy-mcp-server.mjsVERSION / docs/CHANGELOG.md 顶部条目 / test/mcp.test.mjs 版本断言 —— 五处一致为 1.1.11;README 中英文版本表与本交接文档的版本说明同步更新。

版本一致性

  • 发布顺序严格遵循 docs/RELEASE-SOP.md §0.3:commit → tag → push → GitHub Release → npm publishnode scripts/audit-npm-sync.mjs 审计。
  • 自 1.1.10 起工作区 CRLF 已归一(.gitattributes * text=auto eol=lf),本版 tarball 与 tag 树应报 ✓ IDENTICAL

v1.1.10 — 一致性审计 · dsh 全版本回测 · 支持声明与交接文档

Choose a tag to compare

@new-256 new-256 released this 12 Sep 20:00

背景

v1.1.8 事故后(详见 v1.1.9),本轮补齐工程化闭环:npm↔GitHub 双侧一致性审计、dsh 全版本回测、支持声明与交接文档体系。

新增

  • npm↔git 一致性审计npm run audit:npmscripts/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 注册名校验 / locatePkgJson graph 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 无关)+ 事故对应关系。
  • 发布维护 SOPdocs/RELEASE-SOP.md)与交接文档docs/HANDOVER.md)。

修复

  • CRLF 行尾归一化docs/ARCHITECTURE.mdassets/indicator-states.svgtest/core.test.mjstest/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 — 发布闸门加固

Choose a tag to compare

@new-256 new-256 released this 10 Sep 13:56

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.jsonname 严格一致(剥除 // 注释后匹配;负向自检确认旧 bug id 会被拦截)。
  • prepackverify + build --check 加强为 verify + npm test,发布前强制跑完整 74 例测试。
  • 版本号三处同步(package.json / MCP VERSION / CHANGELOG),README 中英文版本表补齐 1.1.8/1.1.9。

v1.1.8 — 修复 DSH 启动致命屏

Choose a tag to compare

@new-256 new-256 released this 10 Sep 13:52

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.mjs 1.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

Choose a tag to compare

@new-256 new-256 released this 09 Sep 04:16

v1.1.7

家级状态灯 codebuddy-indicator 从旧式本地 file:// 注册改为标准 npm 分发形态(对齐 agy-first-bridge v1.6.0)。

改动

  • 主包 package.json 补全标准分发字段main 直指 home-plugin/codebuddy-indicator/lib/index.mjs(host 真入口)、exportsdsh.client.platform: web(client 半自动纳入浏览器花名册)、dsh.bundle.patch(安装后自动挂载家级灯)、bin.codebuddy-mcp-serverrepository/homepage/bugs
  • 新增 bundle 补丁层:家级灯由裸包名 name: codebuddy-first-bridge 一行加载——不再有 file:// 行、不再有 client-entry 占位 → 单实例,消除双实例二次注册崩溃风险。
  • 本机用户层同步:dsh-home cordis.patch.ymlfile://...?v=6 改为裸包名 name: codebuddy-indicator
  • 防回归护栏:verify.mjs 新增 6 条标准分发检查。

安装

dsh plugin --profile web add codebuddy-first-bridge

测试:73/73 通过,npm run check 全绿。

v1.1.6

Choose a tag to compare

@new-256 new-256 released this 08 Sep 10:10

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-firstcordis-agy)因仍使用旧版 text: 字段全部被拒。

修复

  • persona 配置迁移preset/codebuddy-first/agent.cordis.yml 改为新版 prefix: + suffix: 拆分,与官方 standard preset 写法一致。
  • 防回归护栏verify.mjs 新增检查(必须有 prefix:、必须有 suffix:、禁止残留旧 text:),CI 直接拦截回退。
  • npm 发布:去 privatefiles 白名单补全、prepack 发布前强制全量校验;包名 codebuddy-first-bridge 已在 npm 发布,npm install -g codebuddy-first-bridge 即可安装。

测试:73/73 通过,npm run check 全绿。

v1.1.5

Choose a tag to compare

@new-256 new-256 released this 04 Sep 13:32

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' 派发的是 BuffercreateLineStream.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#6typing#0,trail 由 1 增至 12,结束转 ok

测试:73/73 通过。

v1.1.4

Choose a tag to compare

@new-256 new-256 released this 04 Sep 13:06

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

Choose a tag to compare

@new-256 new-256 released this 02 Sep 20:44

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 通过。