dsh-plugin-bridge 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  [![ci](https://github.com/Totoro-qaq/dsh-plugin-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/Totoro-qaq/dsh-plugin-bridge/actions/workflows/ci.yml)
10
10
  [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
11
11
  [![node ≥22](https://img.shields.io/badge/node-%E2%89%A522-339933)](package.json)
12
- [![dsh 0.1.3-alpha.2](https://img.shields.io/badge/dsh-0.1.3--alpha.2-4c8dff)](https://github.com/deepseek-ai/deepseek-harness)
12
+ [![dsh 0.1.5-rc.1](https://img.shields.io/badge/dsh-0.1.5--rc.1-4c8dff)](https://github.com/deepseek-ai/deepseek-harness)
13
13
  [![Listed in Awesome DSH Plugin](https://img.shields.io/badge/listed_in-Awesome_DSH_Plugin-2ea44f)](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)
14
14
  [![dshfind](https://dshfind.com/api/badge/Totoro-qaq/dsh-plugin-bridge?lang=en)](https://dshfind.com/en/plugins/Totoro-qaq/dsh-plugin-bridge?ref=badge)
15
15
 
@@ -35,7 +35,7 @@ dsh plugin --profile web add dsh-plugin-bridge
35
35
  Pinned GitHub fallback:
36
36
 
37
37
  ```bash
38
- dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.3
38
+ dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.5
39
39
  ```
40
40
 
41
41
  Then type in the official WebUI:
@@ -85,6 +85,7 @@ The release gate is intentionally small and reproducible; these are regression r
85
85
  | Summary worker share of clean acceptance components | **20.74% nominal** |
86
86
  | Native WebUI repeat gate (preview / target facts) | **3/3 · 3/3**, five facts each |
87
87
  | DSH 0.1.2 alpha.2 / alpha.3 / alpha.5 installed WebUI | **13/13 · ordered-list edit · PTC paused · image → text fallback** |
88
+ | DSH 0.1.5-rc.1 installed WebUI, npm Bridge 0.3.4 | **13/13 · 3/3 migrations · edit reached target · PTC paused · raw image → vision target** |
88
89
 
89
90
  The token percentage varies widely with preset, response length, and cache state. The worker share is composition, not causal overhead versus no Bridge; the stable product claim is one additional confirmation request. Read the [design and evidence boundaries](docs/design.md), [full release report](reports/v0.2.3-e2e-report.md), and [vision report](reports/v0.2.6-rc11-vision-report.md).
90
91
 
@@ -119,8 +120,12 @@ The five sections are Goal, Current state, Key decisions and conventions, Key fi
119
120
  | 0.1.1-rc.2 | Yes | Yes | Installed official WebUI: doctor 13/13, edit/confirm/auto-open, three-run repeat gate |
120
121
  | 0.1.2-alpha.2 / alpha.3 / alpha.5 | Yes | Yes | Official DSH npm hosts: typed controllers 13/13 and PTC auto-open; the alpha.5 gate installed the branch tarball, retained alpha.3 titles, edited ordered lists, fell back from unresolved image to text, and removed cleanly |
121
122
  | 0.1.2-rc.1 → 0.1.3-alpha.2 | Yes (Bridge 0.3.3+) | Yes (Bridge 0.3.3+) | Real npm-host upgrade, preserved v2 history/title, exact edited payload, PTC paused goal, image fallback and clean removal; see [acceptance report](reports/dsh-0.1.3-alpha.2-compat-2026-09-08.md) |
123
+ | 0.1.5-alpha.1 | Yes (Bridge 0.3.4+) | Yes (Bridge 0.3.4+) | Official npm host with session format V3: tarball install, served native-card bundle, doctor 13/13 and preset listing on a V3 session; SDK type diff and V3 fold fixtures. Model-backed preview, migration and image fallback were not re-run; see [smoke report](reports/dsh-0.1.5-alpha.1-compat-2026-09-09.md) |
124
+ | 0.1.5-rc.1 | Yes (Bridge 0.3.4+) | Yes (Bridge 0.3.4+) | Official npm host with the published 0.3.4 unchanged: doctor 13/13, native card rendered, three model-backed migrations to PTC with an exact edited handoff and paused goal, and an unresolved image carried to the vision-capable default model; see [acceptance report](reports/dsh-0.1.5-rc.1-compat-2026-09-10.md) |
122
125
 
123
- Use Bridge 0.3.3 or later for DSH 0.1.3-alpha.2; Bridge 0.3.2 does not include these compatibility changes. The typed adapter reads the default 240-message history window with one fresh `inspect` call instead of four; it does not cache running state. `doctor` checks method availability, not end-to-end compatibility.
126
+ Use Bridge 0.3.4 or later for DSH 0.1.5-alpha.1: DSH published no 0.1.4, and a caret prerelease range such as `^0.1.3-alpha.2` never matches the next prerelease minor, so 0.3.4 adds `^0.1.5-alpha.1` and builds against that SDK with byte-identical `lib/` output. Session format V3 records the system prompt as a `system/message` surface node; Bridge folds only user, assistant and tool events, so prompt text never enters a handoff. Use Bridge 0.3.3 or later for DSH 0.1.3-alpha.2; Bridge 0.3.2 does not include those compatibility changes. The typed adapter reads the default 240-message history window with one fresh `inspect` call instead of four; it does not cache running state. `doctor` checks method availability, not end-to-end compatibility. The same `^0.1.5-alpha.1` range also matches 0.1.5-rc.1 and the 0.1.5 final, so rc.1 needs no new Bridge release.
127
+
128
+ Since 0.3.5 the summary worker follows the conversation's model by default (`modelTier: current`). On DSH 0.1.5-rc.1 that is V4.1-Flash, which matched V4-Pro in the [tier comparison](reports/worker-tier-rc1-2026-09-10.md) at about half the summary time. DSH releases before 0.1.5-rc.1 have no V4.1-Flash, so set `DSH_BRIDGE_TIER=pro` or pass `--tier pro` there.
124
129
 
125
130
  CI covers Node.js 22 and 24. Run `/bridge --doctor` after every Harness upgrade; it names missing required gateway methods instead of failing vaguely.
126
131
 
@@ -142,6 +147,8 @@ The server command stays the compatibility core. The same package now adds an op
142
147
  - [Vision migration report](reports/v0.2.6-rc11-vision-report.md)
143
148
  - [Native WebUI repeat acceptance](reports/native-workbench-2026-08-25.md)
144
149
  - [DSH 0.1.2-alpha.2 compatibility acceptance](reports/dsh-0.1.2-alpha.2-compat-2026-08-31.md)
150
+ - [DSH 0.1.5-rc.1 compatibility acceptance](reports/dsh-0.1.5-rc.1-compat-2026-09-10.md)
151
+ - [Summary worker tier comparison on DSH 0.1.5-rc.1](reports/worker-tier-rc1-2026-09-10.md)
145
152
  - [Historical compression benchmark](docs/benchmark.md)
146
153
 
147
154
  ## Development
@@ -151,7 +158,7 @@ npm ci
151
158
  npm run verify
152
159
  ```
153
160
 
154
- `verify` builds and type-checks both plugin halves, runs 174 tests, checks generated `lib/` and datasets, then packs, installs, and imports the actual npm tarball. Tests spend no model tokens. `prepublishOnly` runs the same gate; GitHub releases also require the tag to match `package.json` before trusted npm publishing.
161
+ `verify` builds and type-checks both plugin halves, runs 177 tests, checks generated `lib/` and datasets, then packs, installs, and imports the actual npm tarball. Tests spend no model tokens. `prepublishOnly` runs the same gate; GitHub releases also require the tag to match `package.json` before trusted npm publishing.
155
162
 
156
163
  Community listings: [Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) · [Awesome DeepSeek Harness](https://github.com/Dominic789654/awesome-deepseek-harness)
157
164
 
package/README.zh.md CHANGED
@@ -9,7 +9,7 @@
9
9
  [![ci](https://github.com/Totoro-qaq/dsh-plugin-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/Totoro-qaq/dsh-plugin-bridge/actions/workflows/ci.yml)
10
10
  [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
11
11
  [![node ≥22](https://img.shields.io/badge/node-%E2%89%A522-339933)](package.json)
12
- [![dsh 0.1.3-alpha.2](https://img.shields.io/badge/dsh-0.1.3--alpha.2-4c8dff)](https://github.com/deepseek-ai/deepseek-harness)
12
+ [![dsh 0.1.5-rc.1](https://img.shields.io/badge/dsh-0.1.5--rc.1-4c8dff)](https://github.com/deepseek-ai/deepseek-harness)
13
13
  [![收录于 Awesome DSH Plugin](https://img.shields.io/badge/%E5%B7%B2%E6%94%B6%E5%BD%95-Awesome_DSH_Plugin-2ea44f)](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)
14
14
  [![dshfind](https://dshfind.com/api/badge/Totoro-qaq/dsh-plugin-bridge?lang=zh)](https://dshfind.com/zh/plugins/Totoro-qaq/dsh-plugin-bridge?ref=badge)
15
15
 
@@ -35,7 +35,7 @@ dsh plugin --profile web add dsh-plugin-bridge
35
35
  GitHub 固定版本备用路径:
36
36
 
37
37
  ```bash
38
- dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.3
38
+ dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.5
39
39
  ```
40
40
 
41
41
  然后在官方 WebUI 输入:
@@ -85,6 +85,7 @@ DSH rc.7 及以上会在官方 WebUI 原生卡片中渲染 `/bridge`。「文本
85
85
  | 摘要 worker 在干净验收组件中的 nominal 占比 | **20.74%** |
86
86
  | 原生 WebUI 重复门禁(预览 / 目标事实) | **3/3 · 3/3**,每次五项 |
87
87
  | DSH 0.1.2 alpha.2 / alpha.3 / alpha.5 官方 WebUI 实装 | **13/13 · 编号列表编辑 · PTC 已暂停 · 图片转文本降级** |
88
+ | DSH 0.1.5-rc.1 官方 WebUI 实装,npm Bridge 0.3.4 | **13/13 · 3/3 次迁移 · 编辑逐字送达 · PTC 已暂停 · 原图直达视觉目标** |
88
89
 
89
90
  token 百分比会随 preset、回复长度和缓存状态大幅波动;worker 占比是组成,不是相对“无 Bridge”的因果开销。稳定结论是默认确认多一个请求。边界和原始证据见[设计与证据说明](docs/design.md)、[完整 release report](reports/v0.2.3-e2e-report.md)和[视觉迁移报告](reports/v0.2.6-rc11-vision-report.md)。
90
91
 
@@ -119,8 +120,12 @@ token 百分比会随 preset、回复长度和缓存状态大幅波动;worker
119
120
  | 0.1.1-rc.2 | 支持 | 支持 | 官方 WebUI 实装:doctor 13/13、编辑/确认/自动跳转、三次重复门禁 |
120
121
  | 0.1.2-alpha.2 / alpha.3 / alpha.5 | 支持 | 支持 | 官方 DSH npm 宿主:typed controllers 13/13 与 PTC 自动跳转;alpha.5 门禁安装分支 tarball,保留 alpha.3 标题,编号列表可编辑,未解析图片降级为文本,卸载干净 |
121
122
  | 0.1.2-rc.1 → 0.1.3-alpha.2 | 支持(Bridge 0.3.3+) | 支持(Bridge 0.3.3+) | 官方 npm 宿主真实升级、v2 历史与标题保留、编辑内容逐字交接、PTC goal 暂停、图片回退及卸载;见[验收记录](reports/dsh-0.1.3-alpha.2-compat-2026-09-08.md) |
123
+ | 0.1.5-alpha.1 | 支持(Bridge 0.3.4+) | 支持(Bridge 0.3.4+) | 官方 npm 宿主(会话格式 V3):tarball 安装、原生卡片 bundle 已下发、V3 会话上 doctor 13/13 与预设列表;SDK 类型 diff 与 V3 折叠 fixture。未重跑需要模型的预览、迁移与图片回退;见[smoke 记录](reports/dsh-0.1.5-alpha.1-compat-2026-09-09.md) |
124
+ | 0.1.5-rc.1 | 支持(Bridge 0.3.4+) | 支持(Bridge 0.3.4+) | 官方 npm 宿主,已发布的 0.3.4 未改动:doctor 13/13,原生卡片实际渲染,三次真实模型迁移到 PTC,编辑内容逐字交接且 goal 保持暂停,未解析图片以原图交给支持图片的默认模型;见[验收记录](reports/dsh-0.1.5-rc.1-compat-2026-09-10.md) |
122
125
 
123
- DSH 0.1.3-alpha.2 请使用 Bridge 0.3.3 或更高版本;Bridge 0.3.2 不包含这些兼容改动。typed adapter 只调用一次 `inspect`,就能读取默认 240 条消息的历史窗口,原来需要四次;不会缓存运行状态。`doctor` 检查方法是否存在,不能代替完整迁移验收。
126
+ DSH 0.1.5-alpha.1 请使用 Bridge 0.3.4 或更高版本:DSH 没有发布 0.1.4,而 `^0.1.3-alpha.2` 这类 caret 预发布范围不会匹配下一个预发布 minor,所以 0.3.4 追加 `^0.1.5-alpha.1` 并基于该 SDK 构建,`lib/` 产物逐字节相同。会话格式 V3 把系统提示词记成 `system/message` surface node;Bridge 只折叠用户、助手和工具事件,提示词文本不会进入交接。DSH 0.1.3-alpha.2 请使用 Bridge 0.3.3 或更高版本;Bridge 0.3.2 不包含那些兼容改动。typed adapter 只调用一次 `inspect`,就能读取默认 240 条消息的历史窗口,原来需要四次;不会缓存运行状态。`doctor` 检查方法是否存在,不能代替完整迁移验收。 同一个 `^0.1.5-alpha.1` 范围也覆盖 0.1.5-rc.1 和之后的 0.1.5 正式版,所以 rc.1 不需要新发 Bridge。
127
+
128
+ 0.3.5 起压缩工人默认跟随会话当前模型(`modelTier: current`)。在 DSH 0.1.5-rc.1 上这就是 V4.1-Flash,它在[档位对比](reports/worker-tier-rc1-2026-09-10.md)里与 V4-Pro 打平,摘要用时约减半。DSH 0.1.5-rc.1 之前的版本没有 V4.1-Flash,请设 `DSH_BRIDGE_TIER=pro` 或用 `--tier pro`。
124
129
 
125
130
  CI 覆盖 Node.js 22/24。每次升级 Harness 后先跑 `/bridge --doctor`;缺哪个必要网关方法会被直接点名。
126
131
 
@@ -142,6 +147,8 @@ CI 覆盖 Node.js 22/24。每次升级 Harness 后先跑 `/bridge --doctor`;
142
147
  - [视觉迁移报告](reports/v0.2.6-rc11-vision-report.md)
143
148
  - [原生 WebUI 重复验收](reports/native-workbench-2026-08-25.md)
144
149
  - [DSH 0.1.2-alpha.2 兼容性验收](reports/dsh-0.1.2-alpha.2-compat-2026-08-31.md)
150
+ - [DSH 0.1.5-rc.1 兼容性验收](reports/dsh-0.1.5-rc.1-compat-2026-09-10.md)
151
+ - [DSH 0.1.5-rc.1 压缩档位对比](reports/worker-tier-rc1-2026-09-10.md)
145
152
  - [历史压缩档位 benchmark](docs/benchmark.md)
146
153
 
147
154
  ## 开发验证
@@ -151,7 +158,7 @@ npm ci
151
158
  npm run verify
152
159
  ```
153
160
 
154
- `verify` 会构建并类型检查插件两端、运行 174 项测试、核对 `lib/` 与数据集,再把真实 npm tarball 打包、安装并导入。测试不消耗模型 token。`prepublishOnly` 使用同一个 gate;GitHub Release 还会先检查 tag 与 `package.json` 版本一致,再走可信 npm 发布。
161
+ `verify` 会构建并类型检查插件两端、运行 177 项测试、核对 `lib/` 与数据集,再把真实 npm tarball 打包、安装并导入。测试不消耗模型 token。`prepublishOnly` 使用同一个 gate;GitHub Release 还会先检查 tag 与 `package.json` 版本一致,再走可信 npm 发布。
155
162
 
156
163
  社区收录:[Awesome DSH Plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) · [Awesome DeepSeek Harness](https://github.com/Dominic789654/awesome-deepseek-harness)
157
164
 
package/cordis.patch.yml CHANGED
@@ -5,7 +5,8 @@
5
5
  - id: bridge
6
6
  name: dsh-plugin-bridge
7
7
  config:
8
- modelTier: !!js process.env.DSH_BRIDGE_TIER ?? 'pro'
8
+ # 默认跟随源会话模型。DSH 0.1.5-rc.1 之前没有 V4.1-Flash,这类宿主建议设 pro
9
+ modelTier: !!js process.env.DSH_BRIDGE_TIER ?? 'current'
9
10
  sourceCharBudget: !!js Number(process.env.DSH_BRIDGE_SOURCE_BUDGET ?? 60000)
10
11
  summaryCharBudget: !!js Number(process.env.DSH_BRIDGE_SUMMARY_BUDGET ?? 2400)
11
12
  # 上游 goal.create 的部署默认是 256 轮自主循环;交接只需要一轮。
package/docs/benchmark.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Bridge 跨模式迁移 · 准确率实验报告
2
2
 
3
+ > 0.3.5 更新:DSH 0.1.5-rc.1 的 V4.1-Flash 在同样的迁入 minimal 探针条件下与 V4-Pro 打平,默认档位已改为 `current`,见[档位对比](../reports/worker-tier-rc1-2026-09-10.md)。下文仍是 2026-08 基于 V4-Flash 的原始结论。
4
+
3
5
  日期:2026-08-17 | 宿主:本地 `dsh web`(默认 127.0.0.1:3080) | 模型:deepseek-v4-flash / deepseek-v4-pro
4
6
  脚本:`eval/run.mjs` | 原始数据:`reports/benchmark-2026-08-17.raw.json`(含逐 run token 记账)
5
7
 
package/docs/design.md CHANGED
@@ -81,6 +81,6 @@ Bridge's preview, safety, and migration engine depends on the typed `BridgeHost`
81
81
 
82
82
  `/bridge --doctor` checks thirteen required semantic capabilities and names missing capabilities before mutation. Attachment recovery and goal clearing are optional enhancements and do not raise that baseline. Any future adapter must implement `BridgeHost` and pass the same fail-closed fixtures.
83
83
 
84
- Hosts that already materialize a full snapshot may optionally implement `sessions.historyWindow`. `foldedHistory` requests its complete message budget once through this method; other adapters keep the existing paged `history` path. The typed DSH adapter takes one fresh `inspect` snapshot per window, returns only the bounded tail, and retains no snapshot between calls. Worker polling continues through fresh `history` reads. This reduces repeated Bridge-side reads and allocations; it does not promise bounded disk I/O inside the host. Method probes check availability only; v2 log replay and actual migration are covered by the [installed-host acceptance](../reports/dsh-0.1.3-alpha.2-compat-2026-09-08.md).
84
+ Hosts that already materialize a full snapshot may optionally implement `sessions.historyWindow`. `foldedHistory` requests its complete message budget once through this method; other adapters keep the existing paged `history` path. The typed DSH adapter takes one fresh `inspect` snapshot per window, returns only the bounded tail, and retains no snapshot between calls. Worker polling continues through fresh `history` reads. This reduces repeated Bridge-side reads and allocations; it does not promise bounded disk I/O inside the host. Method probes check availability only; v2 log replay and actual migration are covered by the [installed-host acceptance](../reports/dsh-0.1.3-alpha.2-compat-2026-09-08.md). DSH 0.1.5 session format V3 adds `system/message` surface nodes and positional replacements; the fold and the message budget ignore both, and the [0.1.5-alpha.1 smoke](../reports/dsh-0.1.5-alpha.1-compat-2026-09-09.md) records the installed-host probe without a model-backed migration.
85
85
 
86
86
  The server-side slash command remains the compatibility core. The package also ships an optional WebUI client half that occupies the official per-command slot, reuses `MarkdownText` / `JsonTree`, offers lossless Text/Markdown editing, submits the reviewed summary back to the same host command, and opens the created target through the official Session runtime. The React-free `dsh-plugin-bridge/client-contract` export lets other UIs reuse the same parser and wire while unknown UIs retain the server/file fallback. No folding, attachment, goal, or fail-closed policy is reimplemented in the browser. The version boundary and fallback are documented in [native-webui-feasibility.md](native-webui-feasibility.md).
package/docs/guide.zh.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 1. 安装
6
6
 
7
- 前置:已安装 dsh(`dsh --version` 能输出版本,本插件已核对 0.1.0-rc.6 / rc.7 / rc.8,在 0.1.1-rc.2 完成真实视觉迁移,并用官方 npm `0.1.2-alpha.2` 完成 typed-controller 安装、编辑、迁移与卸载验收),并有一个可跑的 web profile(跑过一次 `dsh web` 即会自动初始化)。
7
+ 前置:已安装 dsh(`dsh --version` 能输出版本,本插件已核对 0.1.0-rc.6 / rc.7 / rc.8,在 0.1.1-rc.2 完成真实视觉迁移,并用官方 npm `0.1.2-alpha.2` 完成 typed-controller 安装、编辑、迁移与卸载验收,官方 npm `0.1.5-alpha.1` 完成安装、doctor 13/13 与预设列表 smoke),并有一个可跑的 web profile(跑过一次 `dsh web` 即会自动初始化)。
8
8
 
9
9
  ```bash
10
10
  dsh plugin --profile web add dsh-plugin-bridge
@@ -13,7 +13,7 @@ dsh plugin --profile web add dsh-plugin-bridge
13
13
  需要固定 GitHub tag 或 npm 暂时不可用时:
14
14
 
15
15
  ```bash
16
- dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.3
16
+ dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge#v0.3.5
17
17
  ```
18
18
 
19
19
  发生了什么(不用手动干预):
@@ -114,7 +114,7 @@ dsh-bridge migrate --to code --summary-file <path>
114
114
 
115
115
  | 配置 | 环境变量 | 默认 | 说明 |
116
116
  |---|---|---|---|
117
- | `modelTier` | `DSH_BRIDGE_TIER` | `pro` | 压缩工人档位。实验结论:pro flash 几乎同价(~2K tokens),但 flash 8 次里出现过 1 次全灭,离散度大一个数量级;**不要用 flash minimal**(三次两次全灭) |
117
+ | `modelTier` | `DSH_BRIDGE_TIER` | `current` | 压缩工人档位,0.3.5 起默认跟随源会话当前模型。DSH 0.1.5-rc.1 的默认模型 V4.1-Flash 在迁移后探针测试里与 V4-Pro 打平(各 50/50、零全灭),摘要用时约减半,见[档位对比](../reports/worker-tier-rc1-2026-09-10.md)。DSH 0.1.5-rc.1 之前没有 V4.1-Flash,会话默认是 V4-Flash,它在 2026-08 的基准里迁入 minimal 时出现过全灭;这类宿主请设 `pro`。`flash` 取同 provider 目录里第一个 flash 类模型 |
118
118
  | `sourceCharBudget` | `DSH_BRIDGE_SOURCE_BUDGET` | `60000` | 取材总字符预算(≈30K tokens 输入) |
119
119
  | `summaryCharBudget` | `DSH_BRIDGE_SUMMARY_BUDGET` | `2400` | 摘要正文字符预算(≈900 tokens,注入侧成本上限) |
120
120
  | `goalRounds` | `DSH_BRIDGE_GOAL_ROUNDS` | `1` | 新会话的自主 goal 轮次上限,见下 |
@@ -141,7 +141,7 @@ dsh-bridge migrate --to code --summary-file <path>
141
141
  A:确认重启过 `dsh web`(插件在启动时挂载),并且用的是 `web` profile。命令注册依赖 `commands` 服务;执行时优先用 rc.2 的 `apiProxy`,alpha 则使用 typed Session / Workspace / Preset / Goal controllers。必要能力不完整时 `/bridge --doctor` 会逐项报告,不会假装可用。
142
142
 
143
143
  **Q:升级了 dsh 之后还能用吗?**
144
- A:先打一次 `/bridge --doctor`,它会告诉你这套 host 暴露了十三项能力里的哪几项、当前模式是什么、生效配置是什么。全绿就是好的。缺能力它会点名,把那行连同你的 dsh 版本发到 issues 就行。rc.6 / rc.7 / rc.8 已逐条核对;0.1.1-rc.2 的原图迁移已实测;官方 npm `0.1.2-alpha.2` 的 typed-controller 13/13、三态编辑、PTC 自动跳转、暂停目标与干净卸载也已实测。
144
+ A:先打一次 `/bridge --doctor`,它会告诉你这套 host 暴露了十三项能力里的哪几项、当前模式是什么、生效配置是什么。全绿就是好的。缺能力它会点名,把那行连同你的 dsh 版本发到 issues 就行。rc.6 / rc.7 / rc.8 已逐条核对;0.1.1-rc.2 的原图迁移已实测;官方 npm `0.1.2-alpha.2` 的 typed-controller 13/13、三态编辑、PTC 自动跳转、暂停目标与干净卸载也已实测;官方 npm `0.1.5-alpha.1`(会话格式 V3)已实测安装、doctor 13/13 与预设列表,需要模型的迁移验收尚未重跑。
145
145
 
146
146
  **Q:图片迁移需要怎么选模型?**
147
147
  A:图片已有助手分析时,Bridge 逐字搬这段视觉证据,不需要再次烧视觉 token。图片还没被分析时,源会话应选 `deepseek-v4-flash-vision-exp` 等视觉路由;Bridge 会在 kickoff 前把源 provider/model/reasoning effort 复制到目标,再搬原图。文本模型仍不能识图,Bridge 也不会暗中启动本地视觉模型。
package/lib/cli.js CHANGED
@@ -38,7 +38,7 @@ const HELP = `dsh-bridge · 跨 preset 会话迁移
38
38
  --quiet 不打印进度
39
39
 
40
40
  preview / run:
41
- --tier <flash|current|pro> 压缩档位(默认 pro)
41
+ --tier <flash|current|pro> 压缩档位(默认 current,跟随源会话模型)
42
42
  --provider <id> --model <id> 直接指定压缩模型,跳过档位推断
43
43
  --lang <zh|en|auto> 摘要语言(默认 auto,跟着会话内容走)
44
44
  --source-budget <n> 取材字符预算(默认 ${SOURCE_CHAR_BUDGET})
@@ -109,7 +109,7 @@ function resolveSessionId(args) {
109
109
  + '如果你是在普通终端里手动跑,请用 --session <id> 指定(`dsh-bridge doctor` 会列出候选)。');
110
110
  }
111
111
  function tierOf(args) {
112
- const value = str(args, 'tier') ?? 'pro';
112
+ const value = str(args, 'tier') ?? 'current';
113
113
  if (value !== 'flash' && value !== 'current' && value !== 'pro') {
114
114
  throw new UsageError(`--tier 只能是 flash / current / pro,收到 "${value}"`);
115
115
  }
package/lib/index.js CHANGED
@@ -25,7 +25,7 @@ export const inject = ['commands'];
25
25
  /** 命令是同步返回的,等压缩工人不能等太久。 */
26
26
  const DEFAULT_PREVIEW_TIMEOUT_MS = 180_000;
27
27
  export const Config = Schema.object({
28
- modelTier: Schema.union(['flash', 'current', 'pro']).default('pro'),
28
+ modelTier: Schema.union(['flash', 'current', 'pro']).default('current'),
29
29
  sourceCharBudget: Schema.number().default(SOURCE_CHAR_BUDGET),
30
30
  summaryCharBudget: Schema.number().default(SUMMARY_CHAR_BUDGET),
31
31
  goalRounds: Schema.number().default(1),
@@ -50,7 +50,7 @@ function writeSummaryFile(sessionId, summary) {
50
50
  /** 把 Config 解析成命令层要的形状(Schema 已经填过默认值,这里只兜底)。 */
51
51
  export function commandConfigOf(config = {}) {
52
52
  return {
53
- modelTier: config.modelTier ?? 'pro',
53
+ modelTier: config.modelTier ?? 'current',
54
54
  sourceCharBudget: config.sourceCharBudget ?? SOURCE_CHAR_BUDGET,
55
55
  summaryCharBudget: config.summaryCharBudget ?? SUMMARY_CHAR_BUDGET,
56
56
  goalRounds: config.goalRounds ?? 1,
package/lib/migrate.js CHANGED
@@ -191,7 +191,7 @@ export async function previewMigration(input, options) {
191
191
  throw new RpcError('bridge.preview', 'empty-source', '这个会话还没有可迁移的内容(取材为空)。直接开一个新会话更省事。');
192
192
  }
193
193
  const lang = options.lang && options.lang !== 'auto' ? options.lang : detectLang(source.text);
194
- const tier = options.tier ?? 'pro';
194
+ const tier = options.tier ?? 'current';
195
195
  const route = await resolveWorkerModel(host, options.sessionId, tier, options);
196
196
  if (options.dryRun) {
197
197
  return { summary: '', source, lang, worker: { ...route }, capped: false, sourceSession };
@@ -345,9 +345,9 @@ export async function executeMigration(input, options) {
345
345
  ...where,
346
346
  agentPreset: options.to,
347
347
  });
348
- // rc.2 的 session.selectModel 会同时保存 host 默认模型。预览 worker 通常
349
- // 选择 pro 档位,因此如果这里依赖新会话默认值,目标会被 worker 悄悄改成
350
- // pro,视觉源会话也会失去 VLM。显式复制源选择既保持用户模型意图,也让
348
+ // rc.2 的 session.selectModel 会同时保存 host 默认模型。预览 worker 可能
349
+ // 用了与源会话不同的档位模型(例如 --tier pro),因此如果这里依赖新会话
350
+ // 默认值,目标会被 worker 悄悄改成那个模型,视觉源会话也会失去 VLM。显式复制源选择既保持用户模型意图,也让
351
351
  // 未解析原图能在 kickoff 前通过目标模型的图片准入。
352
352
  let modelTransferred = false;
353
353
  if (sourceModel) {
@@ -432,8 +432,8 @@ export async function executeMigration(input, options) {
432
432
  try {
433
433
  const images = await readPromptImages(host, options.sessionId, unresolved.refs);
434
434
  const transferNote = lang === 'en'
435
- ? 'Bridge transfer note: the unresolved source images listed above are attached to this kickoff. Inspect them directly; do not infer details that are not visible.'
436
- : 'Bridge 搬运说明:上文列出的未解析源图片已附在本次 kickoff 中。请直接检查原图,不得推断看不清的细节。';
435
+ ? 'Bridge transfer note: the unresolved source images listed above are attached to this message as images, and you can already see them. Check them by looking at them; do not call any tool to read, open or locate them, and do not infer details that are not visible.'
436
+ : 'Bridge 搬运说明:上文列出的未解析源图片已作为图片附在本条消息里,你现在就能看到。请直接看图核对,不要调用任何工具去读取、打开或查找这些图片,也不得推断看不清的细节。';
437
437
  await host.sessions.prompt({
438
438
  sessionId: created.sessionId,
439
439
  mode: 'queue',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-bridge",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "Previewable cross-preset session migration for DeepSeek Harness with bounded, fixed-schema handoffs",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -15,6 +15,9 @@
15
15
  "reports/native-workbench-2026-08-25.raw.json",
16
16
  "reports/dsh-0.1.2-alpha.2-compat-2026-08-31.md",
17
17
  "reports/dsh-0.1.3-alpha.2-compat-2026-09-08.md",
18
+ "reports/dsh-0.1.5-alpha.1-compat-2026-09-09.md",
19
+ "reports/dsh-0.1.5-rc.1-compat-2026-09-10.md",
20
+ "reports/worker-tier-rc1-2026-09-10.md",
18
21
  "cordis.patch.yml",
19
22
  "README.md",
20
23
  "README.zh.md"
@@ -61,11 +64,11 @@
61
64
  },
62
65
  "peerDependencies": {
63
66
  "@deepseek-ai/cordis": "^4.0.1",
64
- "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2",
65
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2",
66
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2",
67
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2",
68
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2",
67
+ "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2 || ^0.1.5-alpha.1",
68
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2 || ^0.1.5-alpha.1",
69
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2 || ^0.1.5-alpha.1",
70
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2 || ^0.1.5-alpha.1",
71
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.3-alpha.2 || ^0.1.5-alpha.1",
69
72
  "react": "^18.2.0"
70
73
  },
71
74
  "peerDependenciesMeta": {
@@ -82,14 +85,14 @@
82
85
  },
83
86
  "devDependencies": {
84
87
  "@deepseek-ai/cordis": "4.0.2",
85
- "@deepseek-ai/dsh-api-remotes": "0.1.3-alpha.2",
86
- "@deepseek-ai/dsh-api-session-controller": "0.1.3-alpha.2",
87
- "@deepseek-ai/dsh-client-ui-chat": "0.1.3-alpha.2",
88
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.3-alpha.2",
89
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.3-alpha.2",
90
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.3-alpha.2",
91
- "@deepseek-ai/dsh-client-ui-session": "0.1.3-alpha.2",
92
- "@deepseek-ai/dsh-client-ui-slots": "0.1.3-alpha.2",
88
+ "@deepseek-ai/dsh-api-remotes": "0.1.5-alpha.1",
89
+ "@deepseek-ai/dsh-api-session-controller": "0.1.5-alpha.1",
90
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.5-alpha.1",
91
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-alpha.1",
92
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.5-alpha.1",
93
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-alpha.1",
94
+ "@deepseek-ai/dsh-client-ui-session": "0.1.5-alpha.1",
95
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-alpha.1",
93
96
  "@types/node": "^26.2.0",
94
97
  "@types/react": "~18.3.1",
95
98
  "react": "^18.3.1",
@@ -0,0 +1,49 @@
1
+ # DSH 0.1.5-alpha.1 compatibility smoke
2
+
3
+ Date: 2026-09-09 (Asia/Shanghai). **Bridge 0.3.4 release smoke**. The runtime checks used the candidate built from the `compat/dsh-0.1.5-alpha.1` branch on top of `f2d0fba`, before its package version was bumped from 0.3.3 to 0.3.4. These results do not apply to the registry 0.3.3 package, whose peer ranges stop at `^0.1.3-alpha.2`.
4
+
5
+ This is a smaller gate than the [0.1.3-alpha.2 acceptance](dsh-0.1.3-alpha.2-compat-2026-09-08.md): it proves install, load, host probing and the command path on the new host, and it audits the SDK contract by type diff. It does not repeat the model-backed preview, edit, migration or image-fallback runs; see [Not covered](#not-covered).
6
+
7
+ ## Upstream change
8
+
9
+ DSH went from `dsh-v0.1.3-alpha.2` (2026-09-07) to `dsh-v0.1.5-alpha.1` (2026-09-08, 563 commits); no 0.1.4 was published to npm. Relevant items from the release notes and from diffing the published `.d.ts` files of every package Bridge pins (`dsh-api-remotes`, `dsh-api-session-controller`, `dsh-client-ui-chat/-conversation/-primitives/-renderer/-session/-slots`) plus the Host packages it calls structurally (`dsh-goal`, `dsh-session`, `dsh-session-persistence`, `dsh-commands`, `dsh-agent`, `dsh-agent-presets`, `dsh-workspace`, `dsh-api-workspace-controller`):
10
+
11
+ | Change | Effect on Bridge |
12
+ |---|---|
13
+ | Session format V3: `SESSION_FORMAT_VERSION = 3`, new `system/message` surface event, `SurfaceOp.replace` fields renamed to `startSeq`/`endSeq`, `user/message` payload unchanged (`UserMessage` with `content`) | None at runtime. The fold handles user, assistant, chunk, tool and turn events only; `system/message` and replacement copies are skipped, and the message budget counts user/assistant events only. New fixtures lock this in. |
14
+ | `ctx.agent` removed; `AgentSetup` receives the Agent explicitly; `Inbox` is now type-only | None. Bridge never read `ctx.agent` or `Inbox`; goals already receive the Agent from `sessionController.resolveAgent`. |
15
+ | `GoalService.pause/resume/clear(agent, ref)`, `remoteExportCreate(agent, request)`, new `goal/activation-changed` event, model may no longer resume a user-paused goal | Signatures unchanged. The paused migration target now also shows a resume control in the official UI. |
16
+ | `SessionController.list/create/inspect/modelCatalog/selectModel/prompt/cancel/rename/attachment/resolveAgent` and `SessionInspection { events }` | Unchanged; `session/attachment-invalid` with `MODEL_DOES_NOT_SUPPORT_IMAGES` still exists. |
17
+ | Client: Details panel removed (`DetailsSlotProps`, `SelectionTarget`, `conversation.details.tool` gone); `openFile` gains `options`; `MarkdownText` gains optional `pathImages`; `conversation.chat.commandview` and `CommandRowProps` unchanged; `commands.execute(sessionId, line, attachments)` unchanged | None. Bridge does not use the removed types. |
18
+ | `fs-ext` no longer compiles natively on macOS/Linux | Install no longer depends on a matching Node ABI. |
19
+ | Semver: `^0.1.3-alpha.2` does not satisfy `0.1.5-alpha.1` | The only required change: add `|| ^0.1.5-alpha.1` to the five optional peers and pin devDependencies to `0.1.5-alpha.1`. |
20
+
21
+ ## Build against the 0.1.5-alpha.1 SDK
22
+
23
+ - devDependencies pinned to `0.1.5-alpha.1`; `npm install` changed only the `@deepseek-ai/*` entries in the lockfile.
24
+ - `tsc` typecheck of both halves passed; `tsdown` client build passed.
25
+ - The generated `lib/` (server build and browser bundle) is byte-identical to the 0.3.3 build, so the SDK bump changes no shipped code.
26
+ - Node 22.23.1 test run: 176/176 after updating the load test's pin and adding two V3 fixtures (fold ignores `system/message` and replacement nodes; the typed adapter's single-read window and the paged path agree on a V3 snapshot and never count system nodes toward the budget).
27
+
28
+ ## Installed host smoke
29
+
30
+ Environment: official npm `@deepseek-ai/dsh@0.1.5-alpha.1` installed into a scratch prefix (541 packages, Node 22.23.1, pnpm 11.22.0), isolated `DSH_HOME`, no credentials configured, no user profile or session touched.
31
+
32
+ | Check | Result |
33
+ |---|---|
34
+ | `dsh plugin --profile web add <packed tarball>` | Profile initialized; Bridge joined `dsh.profile.bundles` after `@deepseek-ai/dsh-base` and `@deepseek-ai/dsh-web-app`; no peer warnings |
35
+ | `dsh web --no-open` boot | Served; the combined `/plugins/??…` module table includes `dsh-plugin-bridge/client.js`, and the served text contains the native-card style id and the `conversation.chat.commandview` registration |
36
+ | Slash-command menu | `/bridge` listed with its description |
37
+ | `/bridge --doctor` on a fresh session | `dsh-typed-controllers · 13/13 个方法可用`, mode `standard`, targets `ptc · minimal · cordis` |
38
+ | `/bridge` (no arguments) | Usage plus `可迁入:ptc · minimal · cordis`, `当前:standard` |
39
+ | Session storage | The created session was written as `session.v3.jsonl.zstd` |
40
+
41
+ Both command results were read from the `POST /api/commands/execute` responses. The WebUI's `ws://…/api/remote.mux` stream could not be held by the automation browser used for this run, so the rendered card was not inspected visually; the card bundle itself is unchanged from 0.3.3, where it was verified on 0.1.3-alpha.2.
42
+
43
+ ## Not covered
44
+
45
+ - No model request was made: the summary worker, native Text/Markdown editing, confirmation, target restatement, paused goal and image-to-text fallback were not re-run on 0.1.5-alpha.1. The 0.1.3-alpha.2 report remains the latest full migration evidence.
46
+ - No in-place upgrade of an existing v2 profile to V3 was exercised; DSH states it rewrites supported histories into new V3 log files while preserving the originals, and Bridge reads history only through `inspect`, but this run did not measure it.
47
+ - No removal/restart cycle was repeated on this host.
48
+
49
+ The isolated install, profile and scratch workspace were left outside the repository and can be deleted; nothing from them is part of the package.
@@ -0,0 +1,64 @@
1
+ # DSH 0.1.5-rc.1 compatibility acceptance
2
+
3
+ Date: 2026-09-10 (Asia/Shanghai). **Published Bridge 0.3.4 from npm**, unchanged. No Bridge code, dependency range or build changed for this run: the 0.3.4 peer term `^0.1.5-alpha.1` already matches `0.1.5-rc.1` and the future `0.1.5` final under npm semver. DSH made `0.1.5-rc.1` its npm `latest` on release day.
4
+
5
+ ## Environment
6
+
7
+ - Official npm `@deepseek-ai/dsh@0.1.5-rc.1` in a scratch prefix (521 packages, Node 22.23.1, pnpm 11.22.0), isolated `DSH_HOME`, seeded scratch workspace. No user profile, session or credential file was read or modified.
8
+ - `dsh plugin --profile web add dsh-plugin-bridge@0.3.4` from the registry: no peer warnings; Bridge joined the profile bundle layer after `@deepseek-ai/dsh-base` and `@deepseek-ai/dsh-web-app`.
9
+ - The WebUI was driven by headless Google Chrome 152 through `playwright-core` with a throwaway browser profile. Unlike the in-app browser used for the 0.1.5-alpha.1 smoke, it held the `remote.mux` WebSocket, so the native card was rendered and inspected.
10
+ - The repository owner entered their DeepSeek key in the isolated WebUI; it was stored only in that isolated `DSH_HOME` (`refs.DEEPSEEK_API_KEY`). Default model: `deepseek-flash` (DeepSeek-V41-Flash, image-capable), reasoning effort max. The Bridge summary worker used its `pro` tier (`deepseek-v4-pro`).
11
+ - All Session content was synthetic.
12
+
13
+ ## Upstream contract
14
+
15
+ Type declarations of every package Bridge pins or calls structurally were diffed between `0.1.5-alpha.1` and `0.1.5-rc.1`. Nothing Bridge uses changed:
16
+
17
+ | Change | Effect on Bridge |
18
+ |---|---|
19
+ | Top-level `conversation` panel slot moved to `main.conversation` | None; Bridge registers `conversation.chat.commandview`, which is unchanged |
20
+ | `forClosing(owner, sessionId)` file-mention hook; `DocumentFileIcon` replaced by `FileTypeIcon`; `CodeBlock`/`Menu` gained optional props | None; the card uses `MarkdownText` and `JsonTree` only |
21
+ | Session controller gained `revealPath`/`workspaceDesktop` | None; the 13 methods Bridge probes are unchanged, `commands.execute(sessionId, line, attachments)` unchanged |
22
+ | Session lifecycle: `SessionHandle`, per-process session lock | None observed; Bridge reads history through `inspect` and never opens logs |
23
+ | Default model DeepSeek-V41-Flash accepts images | Changes which image path is common; see the image run below |
24
+ | Pausing a goal aborts the active turn; only the user may resume | Bridge pauses before kickoff; the targets below all stayed paused with zero goal rounds |
25
+
26
+ ## Credential-free checks
27
+
28
+ | Check | Result |
29
+ |---|---|
30
+ | `/bridge --doctor` | `dsh-typed-controllers · 13/13`, targets `ptc · minimal · cordis` |
31
+ | Native card | Rendered for doctor, usage and error results; no page errors; no horizontal overflow at 1280 px |
32
+ | `/bridge ptc` with no key configured | Failed closed with `worker-empty`; no target Session was created and the summary worker was archived |
33
+
34
+ A Session that contains only command runs stays blank and keeps the empty-workspace hero view, so no command row or card appears there. One ordinary message first makes the Session non-blank.
35
+
36
+ ## Model-backed migration
37
+
38
+ Three real migrations from a `standard` source to `ptc`, each on a fresh source Session:
39
+
40
+ | Check | Run 1 | Run 2 | Image run |
41
+ |---|---|---|---|
42
+ | Source seed turn | 7 s | 6 s | Image admitted; turn stopped before any assistant analysis |
43
+ | Preview facts (project code, PostgreSQL, port, planned `src/migration.ts`, MongoDB ban) | 5/5, 24 s | 5/5, 20 s | Project code kept; image reported as `未解析 1 条` |
44
+ | Text mode | Five-section form, 5 fields | Five-section form, 5 fields | — |
45
+ | Markdown edit of Next step | Reached target byte-exact | Reached target byte-exact; also visible back in Text mode | — |
46
+ | Confirm | One target, auto-opened in PTC | One target, auto-opened in PTC | One target; confirmation says the unresolved original was carried to the vision target |
47
+ | Target goal (projection cache) | `paused`, `maxGoalRounds 1`, `roundsStarted 0` | `paused`, `maxGoalRounds 1`, `roundsStarted 0`, objective contains the edit | Paused goal bar shown |
48
+ | Target reply | Restated facts, ran no tools | Restated facts including the edited step as the next action, ran no tools | Read `IMG-4821` and the blue triangle from the carried image, restated, stopped |
49
+ | Target turn usage | 10.8K tokens, cache 0% | 10.3K tokens, cache 83% | 23K tokens, cache 86%, 2 steps |
50
+ | Page errors | 0 | 0 | 0 |
51
+
52
+ Findings:
53
+
54
+ - **Run 1's edit was a test artifact, not a product defect.** The edit line was labeled `EDIT-MARK-7731`. The kickoff tells the target to disregard anything "标记为已作废", and the target declined to treat the "MARK" line as confirmed, while still carrying it verbatim. Run 2 used a natural sentence and the target adopted it as the next step.
55
+ - **Image kickoff costs one extra tool step in PTC.** The target already saw the attached image, then followed Bridge's note "请直接检查原图" by calling a read-only image tool before restating. No file was written and the goal stayed paused, but this is not the strict "restate and wait without tools" behavior, and it roughly doubled that turn's tokens. A wording change that says the image is already attached and needs no tool call is a candidate follow-up.
56
+ - **Default-model image behavior changed.** With an image-capable default model, unresolved source images now normally travel as raw images to the target instead of falling back to text.
57
+
58
+ ## Not covered
59
+
60
+ - The text-only image fallback was not re-run on rc.1; it requires switching the target to a text-only model. The 0.1.3-alpha.2 report remains the latest evidence for that path.
61
+ - English UI, Node 24, `--go --continue`, and a `dsh plugin remove` plus restart cycle were not repeated.
62
+ - Three runs are release evidence, not a statistical guarantee.
63
+
64
+ The isolated install, profile, browser driver and screenshots stayed outside the repository.
@@ -0,0 +1,49 @@
1
+ # Summary worker tier on DSH 0.1.5-rc.1
2
+
3
+ Date: 2026-09-10 (Asia/Shanghai). This report is why Bridge 0.3.5 changes the default `modelTier` from `pro` to `current`, so the summary worker uses the source conversation's own model.
4
+
5
+ ## Why the default was `pro`
6
+
7
+ The [2026-08-17 benchmark](../docs/benchmark.md) compared `deepseek-v4-flash` with `deepseek-v4-pro` as the summary worker. The difference was not in the summaries: it came from probing the migrated target. Flash averaged 80% probe accuracy against 95% for pro, all of it from whole-run wipeouts. Two of three flash migrations into `minimal` lost every fact. `pro` became the default to remove that tail risk.
8
+
9
+ DSH 0.1.5-rc.1 adds `deepseek-flash` (DeepSeek-V41-Flash) and makes it the default model for new sessions. The same catalog still offers `deepseek-v4-flash` and `deepseek-v4-pro`. No earlier DSH release offers V4.1-Flash; 0.1.1-rc.2 through 0.1.5-alpha.1 list only `deepseek-v4-flash`, `deepseek-v4-pro` and `deepseek-v4-flash-vision-exp`.
10
+
11
+ ## Environment
12
+
13
+ - Official npm `@deepseek-ai/dsh@0.1.5-rc.1`, isolated `DSH_HOME`, published Bridge 0.3.4, Node 22.23.1.
14
+ - WebUI driven by headless Google Chrome with a throwaway profile; the repository owner entered the DeepSeek key in the isolated WebUI.
15
+ - Sources: all five themes from `datasets/test.json` and `datasets/validation.json`. Each source received the dataset's plant message and then a port change that voids the original port, so stale values can be detected. The workspace held only a README, so targets could not read the dataset.
16
+ - Tiers resolved as `pro` → `deepseek-v4-pro`, `current` → `deepseek-flash` (the source model), `flash` → `deepseek-flash` (first flash-like id in the catalog). The worker receives provider and model only, so every worker ran at `high` reasoning effort even though the conversations used `max`.
17
+
18
+ ## Summary layer: previews
19
+
20
+ 24 previews, no target sessions. A fact counts when the summary contains the expected value, with the new port replacing the dataset's original port.
21
+
22
+ | Tier | Model | Runs | Facts | Stale port | Median worker model time | Median output tokens |
23
+ |---|---|---|---|---|---|---|
24
+ | `pro` | deepseek-v4-pro | 10/10 | 50/50 | 0 | 24.4 s | 1,622 |
25
+ | `current` | deepseek-flash | 10/10 | 50/50 | 0 | 12.7 s | 2,238 |
26
+ | `flash` | deepseek-flash | 4/4 | 20/20 | 0 | 11.7 s | 1,963 |
27
+
28
+ Every summary kept all five sections, stated the ban as a prohibition, copied the path exactly, and contained no unexpected numbers.
29
+
30
+ ## Probe layer: migrations into `minimal`
31
+
32
+ This repeats the condition where the old flash failed. Each of the five themes was run twice. Within a source, `pro` and `current` each previewed and confirmed a migration into `minimal`, with alternating order between repetitions. The dataset's probe then asked the target five questions. Answers were scored from the saved replies, with 英文 accepted for `English` and Chinese for `中文`; the dataset's literal expectation otherwise marks the correct answer "提交信息使用英文" as a miss.
33
+
34
+ | Tier | Model | Migrations | Probe facts | Without the language fact | Wipeouts (≤ 1/5) | Old port in answer |
35
+ |---|---|---|---|---|---|---|
36
+ | `pro` | deepseek-v4-pro | 10/10 | 50/50 | 40/40 | 0 | 0 |
37
+ | `current` | deepseek-flash | 10/10 | 50/50 | 40/40 | 0 | 0 |
38
+
39
+ Paired by source: 0 wins, 10 ties, 0 losses.
40
+
41
+ ## Reading the result
42
+
43
+ - On DSH 0.1.5-rc.1, following the conversation model gives the same measured accuracy as `pro` at about half the summary time, and the old flash-into-minimal wipeout did not occur.
44
+ - Both tiers scored 100%, so this set cannot show which model is better on harder material. Long or compacted sources were not tested for either tier.
45
+ - Zero failures in ten runs per tier lowers, but does not exclude, a rare wipeout.
46
+ - V4.1-Flash wrote more output tokens, up to 4,615 in one preview. Prices were not compared.
47
+ - On DSH before 0.1.5-rc.1, `current` usually means `deepseek-v4-flash`, the model behind the old wipeouts. Users on those hosts should set `DSH_BRIDGE_TIER=pro` or pass `--tier pro`.
48
+
49
+ Run artifacts, drivers and screenshots stayed outside the repository.