# DSH Desktop 安装说明（AI / 自动化可执行）

> 本说明**仅针对 DSH Desktop 桌面版**（Electron 桌面应用）。DSH Desktop 使用 harness profile `web`，插件安装后必须**重启桌面应用**才生效。

## 0. 前置条件

- 已安装并运行 **DSH Desktop**。
- 已取得成品包 `dsh-ssh-ops-0.3.10.tgz`（来源：GitHub Releases 下载，或源码 `npm run pack:release` 构建产物 `release/` 下）。

### 兼容性

- 目标为 DSH Desktop / Web Profile `0.1.6` 系列；已验证 `0.1.6-alpha.1`。
- 提供 `sidebarRightTabs` 和 `sidebarRight` 的宿主使用官方右侧 SSH 标签；旧宿主会自动回退到浮动面板。
- 上传／下载字节流需要 Web Profile 的 `webServer` 与请求来源校验服务；不具备时保留既有 SFTP 操作。目录归档下载被有意禁用并返回 `501`，防止 SFTP chroot 与 SSH shell 命名空间不一致。

## 1. 定位 `dsh` 命令行

DSH Desktop 不保证 `dsh` 在系统 PATH 上。先探测：

```powershell
dsh --version
```

- 若打印版本号 → 直接进入第 2 步，命令用 `dsh ...`。
- 若报「无法识别 dsh」→ 改用桌面应用捆绑的 node + dsh bin，先定义变量（按实际安装目录替换 `<INSTALL_DIR>`）：

```powershell
$node = "<INSTALL_DIR>\DSH Desktop\resources\app\node_modules\node\bin\node.exe"
$dsh  = "<INSTALL_DIR>\DSH Desktop\resources\app\node_modules\@deepseek-ai\dsh\lib\bin.js"
```

> 本机示例：`<INSTALL_DIR>` = `G:\desktop-dsh`。

## 2. 安装插件

把 `<TARBALL>` 替换为 tgz 的绝对路径。

```powershell
dsh plugin --profile web add "<TARBALL>\dsh-ssh-ops-0.3.10.tgz"
```

若 `dsh` 不在 PATH，用：

```powershell
& $node $dsh plugin --profile web add "<TARBALL>\dsh-ssh-ops-0.3.10.tgz"
```

## 3. 校验安装结果

安装成功应满足全部 3 条（Windows 下 profile 目录为 `%APPDATA%\dsh-desktop\harness\profiles\web`）：

1. `profiles\web\package.json` 的 `dependencies` 含 `"dsh-ssh-ops"`；
2. 同一文件 `dsh.profile.bundles` 数组含 `"dsh-ssh-ops"`；
3. `profiles\web\node_modules\dsh-ssh-ops\lib\` 下存在 `index.js` 与 `client.js`。

## 4. 重启 DSH Desktop（必做，不可省略）

- 完全退出：系统托盘 → DSH Desktop 图标 → 右键 → **退出**；
- 重新打开 DSH Desktop。

（重启后 harness 才会加载新插件的 host 半；不重启插件不生效。）

## 5. 验证插件已加载

1. 打开任意会话，顶部标签区出现 **SSH** 按钮；
2. 点 **SSH** → 右侧出现 SSH 面板，可点 `＋` 连接服务器；
3. 在对话里要求 `ssh_write` 输入并回车，确认工具带 `press_enter` 参数（默认 `true`）。

## 6. 卸载 / 回滚

```powershell
dsh plugin --profile web remove dsh-ssh-ops
```

（或手动：从 `profiles\web\package.json` 移除 `dsh-ssh-ops` 依赖与 `bundles` 条目，然后重启 DSH Desktop。）

---

## 附：0.3.10 版本更新内容

1. **三种新数据库驱动**：SQLite（文件即连接）、ClickHouse（HTTP）、openGauss（PostgreSQL 协议），连接表单与资源保存同步支持。
2. **导出 CSV/JSON**：结果集可直接下载，或经 SSH 写到服务器后由 SFTP 面板取回；agent 侧有 `db_export` 工具。
3. **动态 SOCKS5 隧道**：一个本地端口做代理出口，客户端自行选择目标。
4. **会话录制**：SSH 面板新增「日志」tab（预览/搜索/下载/删除），默认单会话 8MB、目录 256MB 自动轮换。
5. **OSC 133 shell integration**：终端上下文给出 cwd、退出码与提示符状态。
6. **SFTP 增强**：文本编辑器（10MB 上限）、目录过滤、收藏路径、拖拽上传。

## 附：0.3.9 版本更新内容

1. **兼容 DSH 0.1.6-alpha.2**：适配新宿主 typert 校验（schema 与 strict codec 携带 `create()` 工厂）与槽位注册新规则（拒绝同 id 重复注册），SSH 标签在官方侧边栏恢复正常。
2. **修复 #20**：存储 schema 接受资源记录中 `null` 的默认远程项目目录，避免坏记录导致配置无法读取。
3. **数据库驱动懒加载**：MySQL/PostgreSQL/Redis/MongoDB 驱动延迟到首次连接时加载，降低冷启动开销。

## 附：本地模拟测试（无远端服务器时）

用仓库内 `test-sshd.mjs` 在 `127.0.0.1` 起本地 SSH 服务器（插件自带 ssh2，零依赖）：

```powershell
node test-sshd.mjs 2222     # 服务器 A，端口 2222
node test-sshd.mjs 2223     # 服务器 B，端口 2223（测多标签）
```

- 用户名任意，密码 `test123`；
- 主机密钥持久化在 `test-sshd-hostkey.pem`，重启不变，避免反复触发指纹校验；
- 自检：`node test-client.mjs 2222`（连接 + exec + shell 回车）。

在 DSH Desktop 里连接 `127.0.0.1:2222`（用户名 `test` / 密码 `test123`）即可离线验证终端、多标签、`ssh_write` 回车等。
