Skip to content

Releases

v0.6.1 — 测试债收口 + 批 AA 纠正(2026-11-07)

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 06 Nov 16:15

0.6.1 — 2026-11-07(补丁)

补丁版:关闭三条存量测试债,并纠正 0.6.0 里的一处过度主动行为。

改了什么

  • t-5:批 L · Aw5 的计数判据钉到「每次 update 自己的窗口内恰 3 次」(aw5Windows),窗口外后台写只进 DIAG;消掉 seamCalls=9 的计时抖动误红。
  • t-11:新增 批 Q · Qr12/Qr13/Qr14 —— ①旧槽仍在且不经第二次 prepare ⇒ claim 按 legacy:<角色> 取折叠快照;②旧槽缺 at(及越界)⇒ legacy:at-unknown;③team_link_roster action=get 详情可见折叠条目。
  • t-13:prepareBatch 对 successors 里的 vacant 角色键具名拒绝(「你给的继任者被忽略」),判据 批 S · Sr21。
  • 批 AA 纠正:移除 ensureTeamAutoWatchdogs 的 targets 实时改写(会覆盖自定义 targets,判据 U1/U3 抓到);过期清扫收窄为「团队在册 ∧ watcher 是该团队历史成员」;换届落定时的整队 targets 重算保留。

验证(实测)

  • node host-half.test.mjs ⇒ ALL PASS / assertion total: 1814 (failed: 0)
  • node client-half.test.mjs ⇒ ALL PASS / assertion total: 310 (failed: 0)
  • 迭代过程(红 6 次→绿)逐条记录在 docs/verification-log.md 2026-11-06「批 AC」节。

已知边界

  • 移除 ensure 实时改写后,陈旧 targets 由「下一次换届落定」或续期窗口纠正;目前没有独立工具入口立即纠正。

v0.6.0 — 换届生命周期收官(2026-11-06)

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 06 Nov 07:20

0.6.0 — 换届生命周期收官(2026-11-06)

这一版把「整队换届」从能用做到可靠:准备/认领两阶段、撤销依据按换届各存一份、确认框跨几分钟也不丢勾选、换届后旧自动提醒移交给新任、回执如实说明映射与跳过、撤销依据在读面区分「在飞/留存」;同时补上看门狗运维面(update / mute / unmute)、名册并发写保护、屏蔽作用域、崩溃现场留证、黑板归档,并完成上架合规拆分。

覆盖批次(26 个「未发布」条目一次性收口,按时间倒序):批 AB / AA / Z / Y / 批 V·W·X 真机生效登记 / X / W / V / U / T / S / Q / R / 34 / P / J / L / K / I / H / G / F / E / D / C 分歧修复轮 / C。

两条真机事故修复

  • 批 AA:换届落定后同队所有自动看门狗的盯人名单按新名册重算;拒绝与已退役成员新建配对,并在换届时清算本队退役成员名下的存量配对(带回执计数);过期的看门狗行会被清扫。
  • 批 AB:已配对/受信任通道的投递回执曾抛 ReferenceError(消息已送达却回「❌ 未投递」,导致重复投递)—— 根因是批 AA 引入的变量作用域回归,已修并附「先红后绿」读数。

验证

  • 行为修复均附变异验证(修复前必红 / 修复后全绿);定向脚本见 .investigations/rotation-hallucination-2026-11-04/(ab-pairing-receipt.mjs / aa-check.mjs / z-backup-check.mjs / y-map-check.mjs)。
  • 源码计数推算 1810 + 310 条断言;最近一次全量实测为 2026-11-04 的 1803(failed: 0),批 Y/Z/AA 的新增判据待放开全量后补跑(当前环境按用户指令禁跑全量)。

完整变更史与逐批红绿读数见 CHANGELOG.md 与 docs/verification-log.md。

v0.5.2 — 热修:判读行恒在场 · 按队补挂真的会跑 · 后置链读面 · skip/failed 分家

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 10 Oct 08:58

一句话

0.5.1 让老团队「能」吃到自治那套;这一版修掉三处「实际上吃不到、或者吃到了也看不见」的缺陷 —— 全是只在真机上才暴露的那一类。

三段话

① 判读行不再被行数上限吃掉。 状态卡第 ⑧ 段有 12 行上限;会话多到 10 行时,末尾的判读行(那段「本节只判上下文/预算…」)会被静默裁掉 —— 团队越忙越看不到它。现在先给判读行与轮换标记留位,被裁的只能是明细行,而且会明说 (行数上限 12;已省略 N 行明细)。

② 重启后「按队补挂」真的会跑了。 0.5.1 的补挂挂在插件挂载的后置链上,但那一刻策略数据还没到位(代码里原本就写着「activation 那一刻还是空的」)⇒ 补挂空转、零写入而且一点声都不出。现在数据一到位就补通知一次。

③ 状态卡多了一行「attach 后置链」,失败不再无声。 上面那处之所以要靠翻日志才发现,是因为后置链的失败没有任何出口。现在 ③ 段末尾会报最近一次后置链的结果:rearm 挂上 N 个定时器 · 段同步(计划变化 M 项;在场 S 个段) · 按队补挂:created X · present Y · skip Z(首因 …) · failed W。四档都不静默。

顺带修 / 澄清

  • skip 与 failed 分家:此前「没有观察者/没有可盯成员」(正常)与「写入失败」「定时器没挂上」(真失败)都记成 skip ⇒ 一次真的写入失败会伪装成正常跳过。现在后者进 failed 并报首因;arm-team 命令面的输出也随之分档。
  • 判据两处补漏:U26 原本「等一个 tick」在负载下偶发红 ⇒ 改按墙钟有界等待;U27 的「纯读」断言原本摘掉那一行会空真 ⇒ 加「该行真的在场」前置。

验证

  • node host-half.test.mjs → ALL PASS / 1477 (failed: 0)(连跑 3 次全绿);node client-half.test.mjs → ALL PASS / 310 (failed: 0)(1442 → 1466 → 1477)
  • 每条判据都有「修复前必红」读数;独立复核八项全部复现、无新发现
  • 真机待验(需重启):那一行后置链读数会直接给出「补挂卡在哪一步」

仍未验

  1. 看门狗重挂的真机证据 ⇒ 已收口:2026-10-10 16:33:57 探针 tick 到达(= 启动 16:23:55 + intervalMinutes=10,分秒吻合)
  2. 压缩阈值 0.45 的运行时读数(用首次压缩的触发压力旁证:≈79% 生效、≈95% 旧默认仍在)

完整变更史见 CHANGELOG.md。宿主支持:DSH 0.2.0-rc.2(九道契约锁全绿)。

v0.5.1 — 让既有团队也吃到自治那套(按队补挂 · arm-team · 判读行范围界定)

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 10 Oct 07:48

一句话

0.5.0 那套(工作台摘要 / 角色文本 / 资源读数)此前只对新建的团队生效;这一版补上「老团队也能吃到」,并让状态卡自己说清「我判的是哪一类问题」。

三段话

① 按队补挂:老团队不用重建,重启就自动获得工作台摘要。 此前「工作台摘要」只在建队那一刻挂上 ⇒ 10 月 8 日之前建的团队从来没有这条推送,协调者只能靠自己想起来看谁闲着(真机后果:某 worker 干完就停摆 87 分钟)。现在每次插件挂载都按名册检查,缺就补(幂等、只在缺时写一次、失败不影响挂载)。

② arm-team:不想等重启,一条命令补。 team_link_watch 新增 action="arm-team":现任协调者自己跑一条,就能给「我带的队」补上工作台摘要(幂等;非现任 / 队不在名册 / 现任空缺会被拒并说明原因)。

③ 范围界定:状态卡会自己说清「这段读数担保什么」。 第 ⑧ 段判读行末尾固定接一句:(本节只判上下文/预算;宿主工具闸门——如写入自动评审 429——属另一类,见工具报错原文,不在本节口径内。) 真机发生过一次混淆:worker 的写入被宿主的自动评审配额拦下(原文 429: 您已达到每周/每月使用上限…2026-10-14 00:27:38 重置,且写明「工具本体未执行」),而「配额」被拿去解释成「上下文要耗尽」——两类是不同的东西,混一次就会既把真事当幻觉、也把真幻觉当真事。

同版还改了两处

  • 巡逻兜「晚启动的协调者」:协调者若在插件挂载时没在跑,岗位文本一直空着 —— 现在每轮巡逻顺带对齐一次。
  • 跨工作区读窗不再看错人:会话面/活性/资源三段改为优先按团队自己的 workspace 取窗;取不到或宿主不支持时如实标注;并修掉一处「优先支恒不可达」的调用。

验证

  • node host-half.test.mjs → ALL PASS / 1466 (failed: 0);node client-half.test.mjs → ALL PASS / 310 (failed: 0)
  • 每条新判据都附「修复前必红」读数(U20–U24 各一组定向变异;两轮独立复核逐项复现)
  • 真机待验(需重启):老团队是否自动各补一条 auto 注册 / 协调者是否开始收到摘要 / 判读行是否带范围句

完整变更史见 CHANGELOG.md。宿主支持:DSH 0.2.0-rc.2(九道契约锁全绿)。

v0.5.0 — 团队自治三批(职责进提示 · 状态自动播报 · 用量有真值)+ 真机修复

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 10 Oct 02:46

一句话

协调者不再「自己闷头干活」,也不再「不知道 worker 是死是活」;状态卡多了一段,能直接看到每个会话用了多少上下文、跑了多少轮、该不该换人。

你会看到的变化

场景 以前 现在
协调者开工 可能自己动手写代码、跑命令,要靠人反复纠正 系统提示里就写着岗位边界(只管理/协调/决策/评审/设计);工具返回里也重钉一遍
worker 干完一轮 or 闲着 协调者不知道,没人提醒就不派活 建队时自动挂「工作台摘要」:按 运行中 / 空闲待派 / 刚干完 / 需处置 四组播报;它自己正忙也照投,同一注册 10 分钟内不重复打扰
worker 说「预算耗尽」 没有读数可核,只能采信 状态卡第 ⑧ 段给出每个会话的真实读数(窗口/压力/累计/轮次)+ 一句判读行(「预算耗尽」只允许以否定式出现在这一行)
会话跑太久要不要换人 没有判据 超过 100 轮 或 2 亿 tokens 标 ⚠ 轮换候选 + 现成命令(只标记,不自动换)
DSH 重启之后 看门狗注册变成「哑的」 每次策略挂载后自动重挂定时器;过期条目跳过,清扫推进到清空
想关掉这些文本 没有开关 新增策略键 sections.{role, resources}

发布前的真机修复

第一次上线后实测:状态卡第 ⑧ 段每一行都读不出数(报 session.snapshotEvents is not a function)。根因是读投影时传了自己拼的假会话对象,宿主只认真会话。已修为只取活动会话真身,取不到就如实标「非活动会话」。
更要紧的是把测试桩改成照宿主的样子挑剔——此前那个太宽松的桩让这个 bug 一路溜到真机(当时 1438 条断言全绿)。

验证

  • node host-half.test.mjs → ALL PASS / 1442 (failed: 0);node client-half.test.mjs → ALL PASS / 310 (failed: 0)
  • 真机复跑:第 ⑧ 段活会话给真实读数(压力 45.7%(窗口 1.00M) · 累计 ≈149.22M · 第 48 轮),非活动会话如实标「非活动会话」
  • 每条新判据都附变异红相,逐条见 docs/verification-log.md

依赖的宿主版本

DSH 0.2.0-rc.2 实测(平台九道契约锁全绿)。完整变更史见 CHANGELOG.md。

v0.4.2 — DSH 0.2.0-rc.1 preset pin 换代 · preset 租约释放 · 团队面板可读性重设计

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 29 Sep 08:27

发布 0.4.2:DSH 0.2.0-rc.1 两处运行时换代断层 + preset 租约释放 + 客户端团队面板可读性重设计

本版一次性收口 3 个「未发布」条目(package.json 0.4.1 → 0.4.2)。

① preset pin 换代(standingKeyFor → acquireScope;真机 /team_session 两次失败)
0.2.0-rc.1 把 pin 方法改名。改双代兼容:现名优先 / 旧名回退 / 双缺显式点名断层,
不再让裸 TypeError 当错误文案。

② preset 租约释放(同批评审发现;修的是 ① 漏掉的一层)
acquireScope 不是纯改名 —— 宿主实现是 retain(id) + [Symbol.asyncDispose]
(users-- + collect),注册面文档原话「A revision lease; dispose it after the scoped
read completes」;官方模板 dsh-webhook 用 await using 取、在 finally 释放。
① 把返回值丢掉 ⇒ 每建一个会话泄一个租约(users 永不归零、collect 永不执行)。
改为:构建器只取,句柄经 Symbol 带外通道随 options 交给调用方,createRootAgent 在
agents.create 的 finally 里释放。夹具同步连句柄一起建模 —— 原先只返回 {key},
只镜像自家实现的调用面,把「永不释放」这层缺陷永久挡在套件外。

③ 客户端团队面板可读性重设计(owner 截图反馈:「超长文字弹窗超长,文字太密集太多
根本不知道应该看哪里」)
面板高度上限 + 内部滚动;段标题升 13px / 独立一行 / 可点开合;默认全部折叠(这一屏
先当索引用);段间分隔线;结论行左侧色条;缺数段不折叠。本地视觉夹具读数
452x941 → 452x406,5 个板块标题一屏全可见(改前只有 2 个)。

验证(红相 → 绿相,均实跑):
host 新增 4 条:红 host 1314 (failed: 2) → 绿 1314 (failed: 0)
client 新增 5 条:红 client 310 (failed: 5) → 绿 310 (failed: 0)
两次红相跑完后均以 sha256 复核还原 byte-identical。

跨会话协作声明(如实登记):
①② 的实现分别由 session-65ac0ae0(cwd mal-analyze-cli)与本会话完成,③ 由本会话
完成;三者的判据、红绿相读数与文档账均由本会话在提交前实跑复核(不是转述)。
session-65ac0ae0 另交了 team-link-pin-api-fix.patch 与交接文档,未采用:其 6 个文件
改动已在工作树内,且本版已在其上补了 ② 的租约释放。

改动面:lib/index.js · lib/client.js · host-half.test.mjs · client-half.test.mjs ·
package.json · README.md · CHANGELOG.md · AGENTS.md · docs/verification-log.md

v0.4.1 — DSH 0.2.0-rc.1 兼容性闸门:peer 区间补 ^0.2.0-rc.1(10 条未发布收口)

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 29 Sep 07:30

⚠️ 先看这个:宿主版本要求

DSH 0.2.0-rc.1 起,加载器在挂载任何插件之前先跑一道兼容性闸门:任一条 @deepseek-ai/dsh* peer 不满足运行时版本,整个 bundle 会被静默丢弃 —— 只往宿主 stderr 打一行,GUI 里毫无提示,症状是「插件的工具凭空消失」。

DSH 宿主版本 状态 建议
≥ 0.2.0-rc.1 ✅ 本版实测通过(2026-09-29 真机:加载成功 · 10 个 team_link_* 工具在场 · team_link_status 实调返回完整状态卡) 用 0.4.1 及以后
0.1.0-rc.6 – 0.1.7-rc.x ⚠️ peer 区间仍声明支持(装得上),但本版实现相对 0.4.0 有实质改动(lib/index.js + lib/client.js 合计 1188 增 / 70 删),且未在 0.1.x 上复测 留在 v0.4.0

本版修的是什么

0.4.1 修的是一起真机事故:桌面版 2026-09-29 自动升级到 0.2.0-rc.1 后,本插件整个没被加载 —— 10 个 team_link_* 工具全部消失,插件页零提示。

根因不在插件代码,而在 package.json 的 peer 区间没跟上宿主换代:

  • DSH 0.2.0-rc.1 起,dsh-desktop-host 启动时用 loadProfileDirectory() 对 dsh.profile.bundles 里每个包跑 @deepseek-ai/dsh-app-boot 的 evaluatePluginCompatibility(),对每个 @deepseek-ai/dsh / @deepseek-ai/dsh-* peer 做 semver.satisfies(运行时版本, 区间, { includePrerelease: true });
  • 任一条不满足即 throw → 被同一函数的 catch 吞掉后推入 skippedBundles ⇒ 该 bundle 的 patch 层完全不参与组合;
  • 运行时版本取 @deepseek-ai/dsh-app-boot/package.json 的 version(不是桌面壳自己的版本号);
  • ^0.1.5-rc.1 展开 = >=0.1.5-rc.1 <0.2.0,不包含 0.2.0-rc.1。

本版把 7 条 @deepseek-ai/dsh-* peer 补成 ^0.1.0-rc.6 || ^0.1.5-rc.1 || ^0.2.0-rc.1(@deepseek-ai/cordis 不动)。

本版同时收口的内容

按仓库惯例,0.4.1 一次性收口了 0.4.0 之后累积的 10 个「未发布」条目:部署接线改 link:、策略持久化自持化(落点可核)、C 批客户端团队面板 + 团队形态可视化、以及六轮代码评审/分歧审计修复。逐条见 CHANGELOG 的 0.4.1 — 2026-09-29 一节。

验证(实跑读数)

  • 闸门复刻(修复前 → 后):dsh-team-link ✖ SKIPPED → ✔ PASSED;全 profile SKIPPED 14 → 10。
  • semver:0.1.7-rc.2 satisfies ^0.1.0-rc.6 || ^0.1.5-rc.1 → true;0.2.0-rc.1 → false。
  • 套件:node host-half.test.mjs → ALL PASS / assertion total: 1306 (failed: 0);node client-half.test.mjs → ALL PASS / assertion total: 305 (failed: 0)。
  • 真机(重启后实调):team_link_status 返回完整状态卡,首行 存储:文件 <DSH_HOME>/team-link/policy.json,名册读回 threat-intel 的三个角色。
  • 未做(如实登记):客户端半边(侧栏团队面板)未做真机 DOM 冒烟。

v0.4.0 — 发布收口(团队任务台账 + 可观测批 A + 形态批 B)· 仅供 DSH 0.1.x

Choose a tag to compare

@shenhuanageshei shenhuanageshei released this 29 Sep 07:30

这是给 DSH 0.1.x 的版本

如果你的 DSH ≥ 0.2.0-rc.1,请用 v0.4.1。

本版(0.4.0)的 peer 区间是 ^0.1.0-rc.6 || ^0.1.5-rc.1,在 DSH 0.2.0-rc.1 上会被加载器的兼容性闸门整个跳过(静默、GUI 零提示)。0.2.0-rc.1 支持是 0.4.1 才补上的。

说明:本 tag 是事后补打的 —— 0.4.0 在 2026-09-27 发布时漏了 tag,而 README 的「宿主版本支持」一节要求老宿主留在 0.4.0,故补上以便 v0.4.0 可寻址。它指向发布提交 d6c2484。

0.4.0 内容

发布收口:团队任务台账 + 可观测批(A)+ 形态批(B)+ 三轮修复轮。逐条见 CHANGELOG 的 0.4.0 — 2026-09-27 一节。

验证

node host-half.test.mjs → 1203 (failed: 0);node client-half.test.mjs → 269 (failed: 0)。(该版时点读数,原文保留在 CHANGELOG/账本。)