# DSH-OC — DeepSeek Harness 插件全家桶聚合安装器

无功能代码,只负责**一条命令**装齐:引擎 + 全家桶插件 + 撤回所需的引擎补丁 + 桌面壳 + 快捷方式。每个插件也可单独安装。

## 快速开始(全新电脑)

### 1. 先装 Node.js + npm

npm 随 Node.js 一起安装,不用单独装。

- **官方安装(推荐)**:打开 https://nodejs.org/en/download ,下载 **LTS 版 Windows Installer (.msi)**,双击安装,一路默认即可。
- **winget(更快)**:`winget install OpenJS.NodeJS.LTS`
- **验证**(装完**重开** PowerShell):

```powershell
node -v    # v22.x.x
npm -v     # 10.x.x
npx -v
```

> npm 无需单独安装,它随 Node.js 一起提供;`npx` 也随 npm 附带。

### 2. 一键安装(装齐引擎 + 全家桶 + 撤回补丁 + 桌面壳)

```powershell
# 方案 A(推荐):本次临时用官方源,避开 npmmirror 镜像同步滞后(新版发布后镜像可能要几分钟才同步)
$env:npm_config_registry="https://registry.npmjs.org/"; npx --yes dsh-oc install

# 方案 B:若 npm 默认源已是官方(`npm config get registry` 为 https://registry.npmjs.org/),或镜像已同步,直接跑
npx --yes dsh-oc install
```

> PowerShell 不支持 bash 的 `VAR=value command` 前缀语法,所以用 `$env:npm_config_registry="..." ; npx ...` 的写法;若 npm 默认源就是官方,直接 `npx --yes dsh-oc install` 即可。

> **网络慢 / 想走镜像(dsh-oc ≥ 0.3.26)**:`dsh-oc` 会读取 `DSH_OC_REGISTRY`(或 `npm_config_registry`)作为它安装**引擎 / 桌面壳 / 插件时用的 npm registry**,默认才是官方源。国内网络到官方源慢时,可临时切到 npmmirror:
> ```powershell
> $env:DSH_OC_REGISTRY="https://registry.npmmirror.com"; npx --yes dsh-oc install
> ```
> 注意:镜像可能对**刚发布几十分钟的新版本**存在同步滞后;为求最新请用官方源(方案 A)。桌面壳的 electron 二进制走独立的 `npmmirror → GitHub` 回退,不受此项影响。

这条命令会自动完成:

1. 杀运行中的桌面壳、清理残留临时文件;
2. **确保引擎** `@deepseek-ai/dsh` 为 `0.1.1-rc.2`(缺失/版本不符就装/更新,无需手动先装 dsh);
3. 清除旧版本的聚合器/旧名冲突;
4. **移除残留的 `dsh-oc-change-review`**(它与 file-links 抢 turnTail 槽,见下方说明);
5. 安装桌面壳 `dsh-oc-desktop`(自动下载 electron 二进制);
6. 逐一安装全家桶插件(首次使用自动初始化 profile);
7. **给引擎打「撤回=截断」所需的 6 处补丁**;
8. 创建桌面「DSH-OC」快捷方式。

指定 profile(默认 `web`):

```powershell
npx --yes dsh-oc install --profile web
```

> **⚠️ 引擎版本被钉在 `0.1.1-rc.2`**——这是撤回补丁所针对的版本(补丁的匹配锚点取自该版本)。一键安装会保证引擎始终是这个版本,以让「撤回」稳定可用。

### 3. 桌面壳启动

```powershell
npx dsh-desktop
```

## 插件清单

| 插件 | 说明 |
| --- | --- |
| dsh-oc-desktop | 桌面壳(Electron 启动器) |
| dsh-oc-session-window | 会话新窗口 |
| dsh-oc-deeplink | 会话深链 |
| dsh-oc-sidebar | 右侧工作台(fork 自 dsh-better-sidebar) |
| dsh-oc-file-links | 产出物卡片:按轮追踪工具实际产出/修改的文件与展示的网址,会话下方渲染可点击卡片 |
| dsh-oc-message-undo | 会话撤回按钮:截断该句之后上下文(引擎 session/truncate),并把该句填回输入框 |
| @huanlin/dsh-plugin-better-sidebar-plugin-office | Office 预览(.docx / .xlsx / .pptx),注册在侧边栏 |

## 平台支持

dsh 的「桌面端」是把同一个 **dsh web 服务器(`dsh web`)** 用 Electron 壳(desktop)包进窗口。因此绝大多数插件在浏览器里与桌面壳窗口内跑的是**同一份 UI**。真正的区别在于**是否依赖桌面壳的系统能力**(Electron 窗口、URL 协议、托盘、本机命令)：

**仅桌面端(依赖 Electron 壳)**

| 插件 | 说明 |
| --- | --- |
| dsh-oc-desktop | 桌面启动器:托盘/通知/自绘标题栏/快捷键/崩溃自愈 |
| dsh-oc-session-window | 会话「新窗口打开」——只有桌面壳能开新的 Electron 窗口 |

**web 端(浏览器 / 桌面壳窗口内一致)**

| 插件 | 说明 |
| --- | --- |
| dsh-oc-sidebar | 右侧工作台(explorer / editor / terminal / git / browser) |
| dsh-oc-file-links | 产出物卡片(turnTail)+ 侧边栏联动 |
| dsh-oc-message-undo | 会话撤回按钮(需引擎打补丁后可用) |
| @huanlin/dsh-plugin-better-sidebar-plugin-office | Office 预览(docx / xlsx / pptx) |

**全支持(web + 桌面均可用)**

| 插件 | 说明 |
| --- | --- |
| dsh-oc-deeplink | 会话深链:`/s/` URL 自动选中(web 路径)+ `dsh://session` 上下文注入(host 处理) |

> 注意:`dsh-oc-file-links` 的「默认打开 / 打开所在位置」用**宿主本机**的系统命令,因此在**本机** dsh web(或桌面壳)才有效;若用**远程浏览器**访问服务器,卡片可显示但无法打开服务器上的文件。

## 单独安装某个插件

全家桶外的插件,或不想用聚合安装时,可单独安装:

```powershell
dsh plugin --profile web add dsh-oc-session-window
```

> `dsh-oc-change-review`(修改审查)已从默认全家桶移除:它与 `dsh-oc-file-links` 都占用 `conversation.chat.turnTail` 槽,同时安装会让两者竞争(一个静默胜出)。若确需使用,可单独 `dsh plugin --profile web add dsh-oc-change-review`。

## 开发

```powershell
npm install
npm test
```

## License

MIT。
