本次发布把家族适配的官方 cohort 推进到 0.2.1-rc.2,宿主下限随之上移;新增 dsh-remote-bridge,让已配对的手机通过协议 v1 使用宿主会话;为 Windows x64 会话带来固定的私有 bash;任务看板支持推理档位、自动子任务团队与新建卡片默认值;插件管理器在更新时清理失效的逐行覆盖,并把更新改成与官方管理器一致的「先卸载再安装」。技能中心给插件提供的技能加上启用开关,远程网页可以在连接时自选配对网络来源。
重要变更(宿主下限提升到
>=0.2.1-rc.2):家族全部包与插件脚手架声明dsh.engines.dsh >=0.2.1-rc.2(上一版本声明的是>=0.2.0-rc.2),同名 host peer 一并保持一致。官方 CLI 的 npmlatest仍是0.2.0-rc.2,0.2.1-rc.2只在next频道,因此仍在稳定版 CLI 上的用户无法经插件管理器自动更新:更新会被拒绝并返回 412,提示该目标要求 DSH>=0.2.1-rc.2(附当前 DSH 版本),需先升级 DSH。恢复步骤:先安装0.2.1-rc.2的 CLI,再更新家族包。
会真正迁移的入口只有一个:经插件管理器更新(含聚合包旧名的迁移分支)会做预检、版本断言与回滚。本版本没有 Doctor 启动前迁移——doctor 包当前只是 tombstone,legacy-migration.ts里提到的启动前置消费者在本版本并不存在;直接用dsh web启动宿主也不执行任何安装或预检,旧 profile 会一直保持原样,直到用户经插件管理器更新。因此请经插件管理器完成更新,需要手工处理时用dsh plugin --profile <name> add @linxin666/dsh-web-all@0.4.7,不要指望启动即升级。
第四条路径较弱:dsh-update家族插件在 profile 内直接跑包管理器更新,没有备份、没有预检、没有回滚,也不会清理失效的行覆盖。能用插件管理器时优先用插件管理器。
已退场的插件行不再留下失效的逐行覆盖:更新时插件管理器按组合后的 profile 清理行 id 已不存在的覆盖,先备份 patch 文件,无可清理项时不写入。
@linxin666/dsh-client-ui-model-capabilities已退场,其 cordis 行 idweb-ui-model-capabilities随之消失:既有 profile 若记录过该行,得到的是上一条的清理行为,而不是每次启动一条永久告警。
四个卫星仓已先于本 tag 发布0.4.7,聚合包按 semver 消费它们:
- 皮肤中心(
dsh-skins)0.4.7- 宠物(
dsh-pet)0.4.7- 社区插件索引(
dsh-community-plugins)0.4.7- 预设中心(
dsh-presets)0.4.7
已知限制(0.4.6升级到0.4.7时):清理失效行覆盖的代码只在插件管理器的「更新」任务里执行,而把0.4.6升到0.4.7的那次更新由宿主中已加载的0.4.6代码完成,因此它不会清理web-ui-model-capabilities的旧覆盖。组合结果本身仍然正确,但每次执行dsh --dump-config或查看 CLI 日志都会看到patch: entry "web-ui-model-capabilities" not found诊断,也不会生成.bak-plugin-manager备份。下一次经插件管理器的更新由0.4.7的代码执行,会顺带自动清理;在那之前可以手工处理:先备份,再编辑$DSH_HOME/profiles/<profile>/cordis.patch.yml,删掉id为web-ui-model-capabilities的那一段。启动后自动清理会随下一个版本发布。
新功能
- [remote-bridge] 新包
dsh-remote-bridge:宿主半侧按协议 v1 把会话名册、历史与提示词送到已配对的手机,配对靠一次性令牌加 P-256 挑战应答 - [remote-bridge] Web GUI 侧边栏配对面板把一次性令牌画成二维码,令牌端点只对来自本机的请求开放
- [remote-bridge] 名册与历史基线随协议下发,会话标题与元数据一并到达,已委派的会话按其父会话寻址
- [remote-bridge] 宿主的提问可以送达已配对的手机,手机与桌面回答同一个提问
- [remote-bridge] 输入行与宿主保持对齐,开屏快照按 512 KiB 分页预算收口,帧上限提高到 10 MiB
- [remote-bridge] 配对码携带访问的公网来源,手机据此选择连接入口
- [win-bash] Windows x64 会话获得固定的私有 bash:自带 Git for Windows MinGit 载荷,每会话一个常驻进程,不回退到
PATH上的 bash - [win-bash]
win_bash结果标明截断,并支持后台任务 - [win-bash] 被服务的会话不再看到宿主 pwsh,按可见性阶梯收窄而只在
win_bash无法服务时让出;拒绝一律转交原生 shell,权限只声明 danger-full-access - [win-bash] 随聚合包挂载,
win_bash的可用性由 liangshen preset 门控 - [liangshen] 调度规则同步到上游 0.24.6,并补上本地追问纪律
- [liangshen]
run_code的强制范围扩展到可计数触发条件,并附误用提醒 - [liangshen] 守护重试安全性拆分,工具摘要改为精选呈现
- [task-board] 卡片可指定推理档位,子任务团队可按需自动组建
- [task-board] 设置卡片新增「新卡片默认值」主题,预填新卡的 agent preset、权限、模型与推理档位,留空即不固定
- [skill-explorer] 插件提供的技能获得启用开关
- [remote-web-ui] 连接时可自选配对网络来源,局域网候选收窄 (#1878)
修复
- [plugin-manager] 更新事务清理本包自己写下的失效行覆盖:以组合后的 profile 为权威,先备份、无可清理项时不写入,写不进去则让该次更新失败
- [plugin-manager] 更新改为「先卸载再安装」,与官方管理器走同一条路径
- [plugin-manager] CLI 子进程启动失败时结算该次更新,不再拖垮宿主
- [remote-bridge] 手机与桌面可以回答同一个提问,提问卡结束时手机收到通知,重连的手机收到错过的提问
- [remote-bridge] 提问应答调用标注 owner peer,避免答给错误的对端
- [remote-bridge] 读取升级后的套接字,协议帧得到应答;升级被拒时不再拖垮 Linux 宿主
- [remote-web-ui] 纯 HTTP 的局域网手机经设备落地页重新打开
- [liangshen] 启动时把遗留的
both呈现模式归一为ptc - [task-board] 已完成的子任务不再进入级联运行
- [task-board] 保存新建卡片默认值后无需刷新即生效
- [task-board] 复用会话时先恢复冷会话再派发命令 (#1861)
- [task-board] 带排期的卡片在创建时即装上定时器,不再等下一次编辑
- [session-archive] projcache 回退在两种 id 拼写下都能读到
- [relay] 内容哈希的
/assets/*在转发节点永久缓存,未哈希名、API 与非 200 响应不缓存 - [win-bash] 固定载荷补上
sleep与seq - [scripts] shard 测试在 Windows 上能拉起 pnpm
其他改动
- [sdk] 家族适配的官方 cohort 推进到
0.2.1-rc.2,同时退役./invariant伴生导出、跟进插件子路径展示元数据的新读取方式 - [perf] 任务看板的运行会话爆发经准入队列限流;清空历史后不再每次巡检重读整份历史
- [refactor] 客户端 store 经受支持的平台解析;脚本改用库词法器解析运行时导入;市场 ZIP 写入收敛为一个纯函数
- [ci] 必需检查改为并行 lane 并配原生工具链,让安装先于文本规则、并守护固定的 CLI 版本
- [market] 跟随卫星仓的合并刷新皮肤、宠物与社区插件的钉版,并从工坊编辑推荐中移除
dsh-annotation - [satellites] 四个卫星仓的 gitlink 前移到各自的
0.4.7发布提交 - [libs] 重建聚合包 bundle 并刷新其 sourcemap 与记录指纹
- [test] 补齐远程桥的超时身份、i18n 俄语词条计数、win-bash 的真实 ACL 约束与 relay 哈希缓存的规格
- [docs] 记录
0.4.7自动升级审计、0.4.6发布验证快照、CI 并行 lane 的实测数据与多份决定记录;README 的检索关键词与贡献者名单同步
English
This release advances the family's official cohort to 0.2.1-rc.2 and raises the host floor with it, adds dsh-remote-bridge so a paired phone can use host sessions over protocol v1, brings a pinned private bash to Windows x64 sessions, gives the task board reasoning effort, automatic subtask teams and new-card defaults, and has the plugin manager prune stale per-row overrides on update while updating through the same remove-then-install path the official manager uses. The skill explorer gains an enable switch for plugin-provided skills, and the remote Web GUI lets you choose the pairing network source when connecting.
Important change (the host floor moves to
>=0.2.1-rc.2): every family package and the plugin scaffold now declaresdsh.engines.dsh >=0.2.1-rc.2(the previous release declared>=0.2.0-rc.2), with the matching host peer kept in step. npmlatestfor the official CLI is still0.2.0-rc.2and0.2.1-rc.2is only on thenexttag, so a user on the stable CLI cannot auto-update through the plugin manager: the update is refused with 412 and a message that the target requires DSH>=0.2.1-rc.2(with the current version), telling them to upgrade DSH first. Recovery: install the0.2.1-rc.2CLI first, then update the family.
Only one entry point really migrates: updating through the plugin manager (including the legacy aggregate-name migration branch) preflights, asserts the resulting version and can roll back. This release has no Doctor pre-launch migration — the doctor package is only a tombstone today and the launcher consumerlegacy-migration.tsrefers to does not exist here — and starting the host with a directdsh webperforms no install and no preflight, so an old profile stays exactly as it is until the user updates through the plugin manager. Update through the plugin manager, or rundsh plugin --profile <name> add @linxin666/dsh-web-all@0.4.7by hand; do not expect a start to upgrade anything.
The fourth path is weaker: thedsh-updatefamily plugin runs a package-manager update inside the profile with no backup, no preflight, no rollback, and it does not prune the stale row override either. Prefer the plugin-manager path.
Retiring a plugin row no longer leaves a stale per-row override behind: on update the plugin manager prunes overrides whose row id the composed profile no longer declares, backs the patch file up first, and writes nothing when there is nothing to prune.
@linxin666/dsh-client-ui-model-capabilitiesis retired and its cordis row idweb-ui-model-capabilitiesis gone: a profile that recorded that row gets the pruning behaviour above instead of a permanent warning on every start.
The four satellites already published0.4.7before this tag, and the family consumes them by semver:
- Skin center (
dsh-skins)0.4.7- Pet (
dsh-pet)0.4.7- Community plugin index (
dsh-community-plugins)0.4.7- Preset center (
dsh-presets)0.4.7
Known limitation (upgrading0.4.6to0.4.7): the code that prunes a stale per-row override runs only inside the plugin manager update job, and the update that takes a host from0.4.6to0.4.7is performed by the0.4.6code already loaded in that host, so it cannot prune theweb-ui-model-capabilitiesoverride it retires. The composition itself stays correct, but everydsh --dump-configrun and every CLI log shows apatch: entry "web-ui-model-capabilities" not founddiagnostic, and no.bak-plugin-managerbackup is written. The next update through the plugin manager runs under0.4.7code and clears it as part of that run; until then you can do it by hand: back the file up, then edit$DSH_HOME/profiles/<profile>/cordis.patch.ymland remove the entry whoseidisweb-ui-model-capabilities. Pruning after boot ships in the next version.
New Features
- [remote-bridge] New
dsh-remote-bridgepackage: the host half serves session roster, history and prompting to a paired phone over protocol v1, pairing by a one-shot token plus a P-256 challenge-response - [remote-bridge] A sidebar pairing panel in the Web GUI renders that one-shot token as a QR symbol, with the token endpoint admitted only from this machine
- [remote-bridge] The roster and history baseline ride the protocol, session titles and metadata arrive with them, and a delegated session is addressed through its parent
- [remote-bridge] The host's questions reach a paired phone, and the phone and the desktop answer the same question
- [remote-bridge] Composer parity with the host, an opening snapshot bounded by the same 512 KiB page budget, and a 10 MiB frame cap
- [remote-bridge] The pairing code carries the public origin so the phone can pick its connection entry
- [win-bash] Windows x64 sessions get a pinned private bash: its own Git for Windows MinGit payload, one persistent process per session, and no fallback to a bash on
PATH - [win-bash]
win_bashresults surface truncation and support background jobs - [win-bash] Served sessions stop seeing the host pwsh, narrowed by a visibility-only ladder that yields only where
win_bashcannot serve; every refusal routes to the native shell and the plugin declares danger-full-access only - [win-bash] Mounted by the aggregate, with
win_bashavailability gated on the liangshen preset - [liangshen] Resync the dispatcher rules to upstream 0.24.6 and append the local interview discipline
- [liangshen] Widen the
run_codemandate to countable triggers, with a misuse nudge - [liangshen] Split the guard retry safety and curate the tool summaries
- [task-board] Cards carry a reasoning effort, and a subtask team can assemble automatically
- [task-board] A new-card defaults topic in settings pre-fills the agent preset, permission, model and reasoning level a new card starts from, pinning nothing when left blank
- [skill-explorer] Plugin-provided skills get an enable switch
- [remote-web-ui] Choose the pairing network source when connecting, with narrower LAN candidates (#1878)
Bug Fixes
- [plugin-manager] The update transaction prunes the manager's own stale row overrides against the composed profile, backing up first, writing nothing when there is nothing to prune, and failing the job when the write cannot land
- [plugin-manager] Update as remove-then-install, the same path the official manager takes
- [plugin-manager] Settle a failed CLI spawn instead of taking the host down
- [remote-bridge] The phone and the desktop answer the same question, the phone is told when its question card is over, and a reconnecting phone gets the question it missed
- [remote-bridge] Name the owner peer on the question answer call so the answer reaches the right side
- [remote-bridge] Read the upgraded socket so protocol frames are answered, and stop a refused upgrade from taking the host down on Linux
- [remote-web-ui] Reopen a plain-HTTP LAN phone through the device landing
- [liangshen] Normalize a legacy
bothpresentation toptcon startup - [task-board] Leave finished subtasks out of a cascade run
- [task-board] Reach a freshly saved new-card default without a reload
- [task-board] Resume a cold session before command dispatch on reuse (#1861)
- [task-board] Arm the schedule timer for a card created with one instead of waiting for the next edit
- [session-archive] Read the projcache fallback under both id spellings
- [relay] Cache content-hashed
/assets/*immutably at the relay hop while leaving unhashed names, API and non-200 responses alone - [win-bash] Add
sleepandseqto the pinned payload - [scripts] Let the shard test spawn pnpm on Windows
Other Changes
- [sdk] Advance the family's official cohort to
0.2.1-rc.2, retiring the./invariantcompanion export and adopting the new plugin-subpath display metadata read - [perf] Pace a run group's session burst through an admission queue, and stop re-reading a cleared history on every inspection poll
- [refactor] Resolve the client store through the supported platform, decode runtime imports with a library lexer and single-source the market ZIP writer behind one pure helper
- [ci] Run the required checks as parallel lanes with a native toolchain, keep the install ahead of the text rules and guard the pinned CLI
- [market] Follow the satellites' merges in the skin, pet and community-plugin pins, and drop
dsh-annotationfrom the Workshop editor picks - [satellites] Move the four satellites' gitlinks to their
0.4.7release commits - [libs] Rebuild the aggregate bundles and refresh their sourcemaps and recorded fingerprints
- [test] Cover the remote-bridge timeout identity, the Russian i18n key count, the real ACL confinement of win-bash and the relay's hashed-asset cache
- [docs] Record the
0.4.7auto-upgrade audit, the0.4.6release validation snapshot, the measured CI parallel-lane numbers and several decision notes, and sync the README search keywords and contributor list