github zhu1090093659/dsh-web v0.4.12
dsh-web v0.4.12

4 hours ago

本次发布修掉两处会让存量 profile 升级出问题的契约:会话归档的设置 section 退回自己的命名空间,dsh-agents 不再把宿主核包写进运行时依赖。宠物与创意工坊的安装暂存不再出现在注册表里,远程通道的 follow 订阅与单次问句各修掉一处会静音的路径,任务看板的标签规则整体收进角落里那个问号、并补上「任务全部结清即清标签」的规则。四个卫星仓在本版同版本对齐到 0.4.12,聚合包与市场产物同批重建。

会话归档的设置 section id 改为 dsh-session-archive:这个插件此前占用官方 archived-sessions 这个 section id,而设置外壳对同一 id 在同一 priority(默认 0)上的第二次注册直接拒绝、order 只负责排序,于是两个归档插件必然相撞——一个注册抛错,或者其中一个入口静默消失。本版把它改成本插件自己的命名空间 dsh-session-archive,与官方归档页以及任何第三方归档插件各占一行,order 25 的位置不变。受影响的只有导航项的 key 与按旧 id 拼出来的深链;它不是持久化键,不需要手工迁移。
dsh-agents 把宿主核包从运行时依赖移到开发依赖:@deepseek-ai/dsh-brand、@deepseek-ai/dsh-session-persistence、@deepseek-ai/dsh-session-projection 从 dependencies 下移到 devDependencies。插件管理器会把 dependencies 这一段装进用户 profile,而 profile 副本优先于宿主加载,于是预发布范围 ^0.2.1-rc.3 就成了用户没点过的版本开关:宿主装进下一个 rc 时 sessionProjections 注册失败、agent-loop 无法激活并拖垮整套插件。运行时那一份一律由宿主提供,scripts/family-host-dependencies.test.mjs 是这道门(issue #1966)。
四个卫星仓同版本对齐到 0.4.12:卫星先发、本仓后发,四个都已在 registry 上可解析,聚合包的依赖范围、workspace 的发布年龄豁免与市场钉扎同批抬到 0.4.12:

  • 皮肤中心(dsh-skins,ee16f91bf9e0edd44eb3da6814de33f2550a8105):@linxin666/dsh-client-ui-skin-center@0.4.12
  • 宠物(dsh-pet,9ccb048c82b4ac4f6cc52fbb3ca92323b42c799b):@linxin666/dsh-pet@0.4.12
  • 社区插件索引(dsh-community-plugins,3b0673de59b5c4ad803ffec9cd0159cda8613fb2):@linxin666/dsh-client-ui-community-plugins@0.4.12
  • 预设中心(dsh-presets,92c3154252fc076f5fe7d4b123fc6dfc3186314d):@linxin666/dsh-client-ui-preset-center@0.4.12
    自动升级没有必须迁移的项:本版的持久化与线协议标识符只有会话归档的 section id 一处变化,而它不是持久化键、也不写进任何存档;配置 key、localStorage 键、控制面 API path、线协议次版本(仍为 MINOR 21)与聚合包的行都保持在 0.4.11 的值。三条入口的语义与 0.4.11 相同:插件管理器更新是唯一带预检与版本断言的迁移路径(含旧聚合名 @linxin666/dsh-web-ui-all 的分支);Doctor 的启动前迁移路径在本仓已不存在,dsh-doctor 只是 tombstone,装不上也没有启动前置消费者;直接 dsh web 不安装、不预检、不做任何 registry 版本迁移,旧 profile 原样保留。手工恢复用 dsh plugin --profile <name> add @linxin666/dsh-web-all@0.4.12。
    远程通道:follow 订阅与会话族的静音:一条已经前进过的 follow 订阅不再回答快照基线,改开新流取最新窗口;回合完成的推送等整个会话族安静下来才发,子会话不单独播报;单次问句加上 15 秒上界,问不到答案就重问,而不是永久静音。
    任务看板:标签规则收进角落问号:标签管理器的整段规则搬到标题角落那个问号上,按气泡画出来而不是当标题,气泡向右展开、留出 locale 余量,窄模态里模态标题自己收窄而不压住角标。规则本身多了一条:任务的标签全部结清后自动清掉。

新功能

  • [task-board] 标签管理器的整段规则搬到角落的问号上
  • [task-board] 角落问号承载清标签规则
  • [task-board] 任务全部结清后清掉它的标签
  • [remote-web-ui] 命名隧道的 ingress 端口跟随设置同步
  • [ssh] 终端支持多个标签页

修复

  • [remote-bridge] 已前进的 follow 订阅不再回答快照基线,改开新流取最新窗口
  • [dsh-agents] 宿主核包不再作为运行时依赖发布
  • [git-graph] 分支弹窗不再错位或裁切
  • [remote-bridge] 单次问句加 15 秒上界,问不到答案就重问
  • [remote-bridge] 回合完成推送等整个会话族安静,子会话不单独播报
  • [task-board] 规则气泡收窄,给 locale 留出余量
  • [task-board] 规则气泡向右展开,卡片不再裁切它
  • [task-board] 标签管理器的规则画成气泡,不再当标题
  • [task-board] 模态标题自己收窄,不再压住角标
  • [dsh-agents] 读取已落定的命令记录,而不是处理器的返回值
  • [liangshen] 重放 program 内部派遣的激活
  • [dsh-agents] 未绑定的小队在宿主默认目录里运行
  • [liangshen] tool_activate 从目录已发布的切页里取工具
  • [skins] 改善 atelier 皮肤的无障碍对比度
  • [market] 商店的安装暂存放在注册表之外
  • [session-archive] 会话归档的设置 section 换回自己的命名空间
  • [agents] 不再重复启动 agentTeams 运行时
  • [liangshen] 预设里暴露 goal 命令
  • [settings] 键入的设置草稿落地一次,并保留未暴露提示
  • [market] 部署车道对 Cloudflare 的限流做重试

其他改动

  • [market] 钉住 2026-10-28 的卫星合并并重建商店产物
  • [test] 清掉本次同步暴露的 standards 债
  • [dsh-agents] 在 apply 缝隙上钉住 workspace 注册表的解析
  • [task-board] 写清角落问号实际能点到什么
  • [liangshen] 精确写明回归测试的共享范围
  • [ci] 记录 CI 运行器测得的覆盖率基线
  • [docs] 归档市场部署 429 的证据
  • [ci] 每个包按自己拥有的代码度量覆盖率
  • [readme] 从 GitHub API 同步贡献者名单
English

This release repairs two contracts that break an existing profile on upgrade: the session archive's settings section returns to its own namespace, and dsh-agents stops writing host core packages into its runtime dependencies. The pet and Workshop installer staging no longer shows up in the registry, the remote channel fixes one silent path each in the follow subscription and in the single-question ask, and the task board gathers the whole label rule onto the corner question mark and adds a rule that clears a task's labels once every one of them has settled. The four satellite repositories align to 0.4.12 in this version, and the aggregate and the market artifacts are rebuilt in the same batch.

The session archive's settings section id becomes dsh-session-archive: the plugin used to claim the official archived-sessions section id, and the settings shell refuses a second registration of the same id at the same priority (default 0) while order only sorts the rows, so two archive plugins were bound to collide: one registration throws, or one of the two entries silently disappears. This version moves it to the plugin's own namespace dsh-session-archive, so it holds its own row beside the official Archived sessions page and any third-party archive plugin, with the nav position 25 unchanged. What moves is the nav item's key and the deep links built from the old id; it is not a persisted key, and no manual migration is needed.
dsh-agents moves host core packages from runtime dependencies to development dependencies: @deepseek-ai/dsh-brand, @deepseek-ai/dsh-session-persistence and @deepseek-ai/dsh-session-projection move from dependencies down to devDependencies. The plugin manager installs that dependencies section into the user profile, and a profile copy loads ahead of the host, so a prerelease range like ^0.2.1-rc.3 became a version switch the user never pressed: when the host moved to the next rc, sessionProjections failed to register, agent-loop could not activate, and the whole plugin set went down with it. The runtime copy always comes from the host, and scripts/family-host-dependencies.test.mjs is that gate (issue #1966).
The four satellite repositories align to 0.4.12: the satellites publish first and this repository second; all four resolve from the registry, and the aggregate's dependency ranges, the workspace's minimum-release-age exemptions and the market pins move to 0.4.12 together:

  • Skin center (dsh-skins, ee16f91bf9e0edd44eb3da6814de33f2550a8105): @linxin666/dsh-client-ui-skin-center@0.4.12
  • Pet (dsh-pet, 9ccb048c82b4ac4f6cc52fbb3ca92323b42c799b): @linxin666/dsh-pet@0.4.12
  • Community plugin index (dsh-community-plugins, 3b0673de59b5c4ad803ffec9cd0159cda8613fb2): @linxin666/dsh-client-ui-community-plugins@0.4.12
  • Preset center (dsh-presets, 92c3154252fc076f5fe7d4b123fc6dfc3186314d): @linxin666/dsh-client-ui-preset-center@0.4.12
    An automatic upgrade needs no migration: the only persisted or wire-protocol identifier this version touches is the session archive's section id, which is not a persisted key and is written into no archive; configuration keys, localStorage keys, control-plane API paths, the wire protocol minor (still MINOR 21) and the aggregate's rows all keep their 0.4.11 values. The three entry points keep their 0.4.11 semantics: the plugin-manager update is the only migrating path, with preflight and a version assertion (including the legacy aggregate name @linxin666/dsh-web-ui-all branch); the Doctor pre-launch migration path no longer exists in this repository, where dsh-doctor is only a tombstone that cannot be installed and has no launcher consumer; and a direct dsh web installs nothing, preflights nothing and does no registry version migration, so an old profile stays exactly as it is. To recover by hand, run dsh plugin --profile <name> add @linxin666/dsh-web-all@0.4.12.
    The remote channel: follow subscriptions and the silence of a session family: a follow subscription that has already advanced no longer answers with a snapshot baseline but opens a new stream for the latest window; a turn-completion push waits until the whole session family goes quiet, so a child session is not announced on its own; and a single-question ask gets a 15-second ceiling, so a question without an answer is asked again instead of staying silent forever.
    The task board: the label rule moves onto the corner question mark: the label manager's whole rule moves onto the question mark in the title corner, painted as a bubble rather than used as a title, opening rightwards with locale margin, and in a narrow modal the modal title shrinks instead of sitting under the corner mark. The rule itself gains one line: a task's labels are cleared once every one of them has settled.

New Features

  • [task-board] The label manager's whole rule moves onto the corner question mark
  • [task-board] The corner question mark carries the clear-label rule
  • [task-board] A task's labels are cleared once all of them have settled
  • [remote-web-ui] The named tunnel's ingress port follows the setting
  • [ssh] Terminals support multiple tabs

Bug Fixes

  • [remote-bridge] A follow subscription that already advanced answers with a new stream instead of a snapshot baseline
  • [dsh-agents] Host core packages are no longer shipped as runtime dependencies
  • [git-graph] The branch popover no longer misplaces or clips itself
  • [remote-bridge] A single-question ask gets a 15-second ceiling and asks again instead of staying silent
  • [remote-bridge] A turn-completion push waits for the whole session family to go quiet
  • [task-board] The rule bubble narrows to leave locale margin
  • [task-board] The rule bubble opens rightwards, so a card cannot clip it
  • [task-board] The label manager's rule is painted as a bubble, not a title
  • [task-board] A modal title shrinks instead of overlapping the corner mark
  • [dsh-agents] The settled command record is read instead of the handler result
  • [liangshen] Activations dispatched from inside a program are replayed
  • [dsh-agents] An unbound squad runs in the Host default directory
  • [liangshen] tool_activate pages from the catalog's published partition
  • [skins] The atelier skin's accessibility contrast improves
  • [market] Installer staging stays out of the pet registry
  • [session-archive] The session archive's settings section returns to its own namespace
  • [agents] The agentTeams runtime is no longer started twice
  • [liangshen] The goal command is exposed in the preset
  • [settings] A typed settings draft settles once and keeps its not-exposed notice
  • [market] The deploy lane retries a throttled Cloudflare API

Other Changes

  • [market] The 2026-10-28 satellite merges are pinned and the store artifacts are rebuilt
  • [test] The standards debt this sync surfaced is cleared
  • [dsh-agents] The workspace registry resolution is pinned at the apply seam
  • [task-board] What the corner question mark actually reaches is written down
  • [liangshen] The regression test's shared scope is stated precisely
  • [ci] The coverage baseline the CI runner measures is recorded
  • [docs] The market deploy 429 evidence is archived
  • [ci] Each package is measured on the code it owns
  • [readme] The contributor list is synced from the GitHub API

Generated automatically by the release pipeline (scripts/release-notes.mjs).

Don't miss a new dsh-web release

NewReleases is sending notifications on new releases.