# dsh-plugin-bridge

> 给 DeepSeek Harness WebUI 加 /bridge 命令，把已有内容的会话迁移到另一套工具 preset，零侵入、原会话保留。

## Metadata

- Author: [@Totoro-qaq](https://github.com/Totoro-qaq)
- Repo: <https://github.com/Totoro-qaq/dsh-plugin-bridge.git>
- GitHub: [Totoro-qaq/dsh-plugin-bridge](https://github.com/Totoro-qaq/dsh-plugin-bridge)
- Stars: 49
- Language: JavaScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `context-migration`, `cordis`, `deepseek-harness`, `dsh`, `dsh-plugin`, `preset-migration`, `session-migration`
- Forks: 3
- Open Issues: 1
- Last push: 2026-08-20T16:11:03.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge
```

## Wiki

## 一句话定位
给 DeepSeek Harness WebUI 加一条 `/bridge` 命令：把已经聊出内容的会话压缩成一份固定五段摘要，在新工具 preset 下开新会话继续，原会话原地保留。

## 核心能力
- 在任意会话输入框里输入 `/bridge`，即可把这个会话迁到其他工具 preset（minimal / standard / code 等），原会话保留不动
- 迁之前先**预览**一份交接摘要（目标 / 当前状态 / 关键决策与约定 / 关键文件 / 下一步），确认无误再 `--go` 执行
- 摘要写成本地临时文件，可直接编辑后用 `--file` 走"改完再执行"路径，避免模型来回传话
- 目标会话默认先复述理解、再暂停等你确认；加 `--continue` 让复述和下一步合并在同一轮请求
- 已有识图分析进入摘要时**逐字搬运**，不经过摘要 worker 改写；未解析原图在 rc.8 下可随首轮提示发给视觉目标
- 自带 `/bridge --doctor` 自检：直接列出当前 host 暴露了哪些网关方法、当前模式、生效配置

## 技术实现
- **语言**: TypeScript (Node.js, ESM)
- **关键依赖**: `@deepseek-ai/cordis` (peer)、`@deepseek-ai/schemastery` (配置 schema)
- **架构模式**: 注入宿主进程的 `commands` 与 `apiProxy` 两个 cordis 服务；命令注册用 effect disposer，卸载时命令随 fiber 一起消失
- **执行引擎**: 进程内 `ctx.apiProxy`（不走 HTTP，但同时提供 CLI 通过回环 HTTP 走同一套代码），整条迁移链路不出进程
- **入口文件**: `src/index.ts`（apply 注册 `/bridge` 命令）/ `src/command.ts`（命令分派：preview / migrate / doctor）

## 适用场景
你在「通用」模式聊到一半，发现接下来要写代码——模式切换是锁的（因为不同 preset 工具集不兼容，会留下幽灵调用）。Bridge 是那个出口：把当前进展压成摘要，新预设开新会话继续，原会话原地保留。不适合会话刚起步（没什么可带的）或只是想换模型、调整思考强度（这本来就能在会话内切）。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.1.0-rc.6+ | rc.6 / rc.7 / rc.8 均逐条核对接口；rc.8 多了持久图片附件读取的可选能力 |
| Node.js | ≥ 22 | 仓库 CI 覆盖 Node 22 / 24 |
| 平台 | 跨平台 | 无原生模块、无操作系统限制 |
| 原生模块 | 无 | 纯 Node 标准库（fs / os / path） |

## 安装方式
```bash
dsh plugin --profile web add github:Totoro-qaq/dsh-plugin-bridge
```

## 配置项
默认无须配置即可工作。需要定制时改 `~/.dsh/profiles/web/cordis.patch.yml` 里的 `dsh-plugin-bridge` 块，或设置对应环境变量。

| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `modelTier` | flash / current / pro | 压缩摘要工人用的模型档位；pro 失败方差更小，不建议用 flash 迁 minimal | `pro` |
| `sourceCharBudget` | 数字 | 压缩取材总字符预算（约 30K tokens 输入） | `60000` |
| `summaryCharBudget` | 数字 | 交接摘要正文字符预算（约 900 tokens） | `2400` |
| `goalRounds` | 数字 | 新会话挂为 goal 的自主轮次上限；上游默认 256 轮会自动跑空，Bridge 强制收口 | `1` |
| `inject` | goal / prompt / both | 摘要注入方式：goal 是可恢复的目标，prompt 是首轮提示；both 同时挂 | `both` |
| `lang` | zh / en / auto | 摘要输出语言；auto 跟着会话内容走 | `auto` |
| `workerProvider` | 字符串 | 强制指定压缩模型所在 provider（换了 provider 的部署用） | `""` |
| `workerModel` | 字符串 | 强制指定压缩模型名 | `""` |
| `previewTimeoutMs` | 数字 | `/bridge <preset>` 等压缩工人的超时上限 | `180000`（3 分钟） |

## 常见问题

**Q：安装后必须重启 dsh web 吗？**

A：必须。插件在 dsh web 启动时挂载；装好后在输入框里打 `/bridge` 没反应，多半是没重启。重启后 `commands` 服务和 `apiProxy` 服务都到位，命令才会出现。

**Q：升级了 DSH 之后还能用吗？**

A：先打一次 `/bridge --doctor`。它会逐项列出 13 个网关方法哪个可用、当前 preset、生效配置；如果缺方法，会直接点名那个方法名，把这行连同你的 DSH 版本号发到 issue 即可。rc.6 / rc.7 / rc.8 都核对过，主链路方法表完全一致。

**Q：迁移后新会话"记得"多少？**

A：pro 档位下 8 次跑 95% 可用。丢的最常见的是**数字被补全成常见值**（端口被改写成 3000/8080 之类），所以预览那一步重点扫数字和路径。fix-version 0.2.4 把"旧值复活"作为关键词显式阻断，6 份独立摘要 + 12 个目标会话的关键事实 100% 命中。

**Q：为什么不在原会话直接切 preset？**

A：上游在网关层硬锁，且锁得对：历史里的工具调用只在原工具集下合法；中途换 preset 会留下新 preset 无法执行的"幽灵调用"，容易静默劣化。Bridge 选择搬家而非绕锁。新会话是干净的，复述理解后由你确认。

**Q：迁移花多少钱？会让正常会话变贵吗？**

A：只安装不迁移时，对正常会话 0 prompt token 贡献——`/bridge` 是 host 的 slash 命令，不注册技能、不注册工具，命令结果不进模型历史。压缩工人实测约 1.6K 输入 + 0.7K 输出；默认确认模式额外花一个只复述的确认轮，`--continue` 把复述和工作合并在同一目标轮。token 大头仍是后续 agentic 工作。

**Q：摘要里数字或路径错了怎么办？**

A：预览会自动把摘要写进一个临时文件并打印路径。直接用编辑器打开那个文件，改正数字或路径，保存后跑 `/bridge code --go --file <路径>` 即可用改过的摘要执行。文件是唯一事实源，比让模型"记住你刚才说要改哪里"可靠。

**Q：迁移后不满意怎么回退？**

A：原会话一个字符都没动过，直接点回原会话继续；新会话归档即可。Bridge 不写原会话、不动工作区文件；新会话是在新 preset 下起的"另一个会话"。

**Q：和 TotoroPilot 是什么关系？**

A：TotoroPilot 是 GUI 弹窗形态，调用同一套迁移流水线；本插件本身可以直接在官方 WebUI 用 `/bridge`。两者走的是同一份 `migrate.ts` 编排。

## 上手难度
入门 — 一条命令安装、重启一次、在输入框里打 `/bridge <preset>` 就能用；默认配置覆盖绝大多数场景，仅在需要调整压缩档位或多轮 goal 时才动配置。

## 已知问题与限制
- 官方 WebUI 安装后目前需要重启一次，并且不允许插件自动跳转到新建会话；Bridge 会在结果里打印新会话的准确标题和 session ID，需要手动切换
- 默认 DeepSeek 文本模型仍不能读图；Bridge 只保留已有视觉证据，绝不暗中运行本地小视觉模型；rc.8 持久附件不可复用时降级为"未解析"提示
- 预览通常耗时 20–60 秒，受 `previewTimeoutMs`（默认 180 秒）上限保护；超时会被取消并以已产出文本兜底
- 迁移会新建目标会话（占一个工作区槽位），不是原地替换；workspace 已知超额的环境要先清理
- 升级 DSH 后若主链路方法缺失，迁移会失败——打 `/bridge --doctor` 即可定位
- release acceptance 是小样本、修复驱动（每 cell 仅 1 次），不应理解为总体准确率保证

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-plugin-bridge](https://deepseek-plugin.org/plugins/Totoro-qaq/dsh-plugin-bridge)
Wiki generated by AI (model: `MiniMax-M3`)
