🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

桌面会话增强 gniygniynus/dsh-desktop

DeepSeek Harnessv0.2.0
gniygniynus38 天前有提交已提供中文文档扫描:含敏感能力

删除会话、撤回消息、重新回答,粘贴识别供应商

30.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add gniygniynus/dsh-desktop
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · security
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-desktop @ 0.2.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 ^0.1.5-rc.1 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 04:29:55

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 42 条)
  • 执行外部命令来自配置/变量
    electron/entry.js:17
    const child = spawnSync(
  • 读取本地文件
    electron/ensure-installed.js:17
    if (!existsSync(srcIndex)) return false;
  • 读取本地文件
    electron/ensure-installed.js:20
    try { current = readFileSync(destIndex, "utf8"); } catch {}
  • 读取本地文件
    electron/ensure-installed.js:21
    const next = readFileSync(srcIndex, "utf8");
  • 读取本地文件
    electron/ensure-installed.js:22
    if (current === next && existsSync(join(dest, "package.json"))) return false;
  • 写入本地文件
    electron/ensure-installed.js:24
    mkdirSync(dirname(dest), { recursive: true });
  • 删除本地文件递归
    electron/ensure-installed.js:25
    rmSync(dest, { recursive: true, force: true });
  • 写入本地文件
    electron/ensure-installed.js:26
    mkdirSync(dest, { recursive: true });
  • 读取本地文件
    electron/ensure-installed.js:38
    if (existsSync(homePatch)) {
  • 读取本地文件
    electron/ensure-installed.js:39
    const content = readFileSync(homePatch, "utf8");
  • 写入本地文件
    electron/ensure-installed.js:42
    writeFileSync(homePatch, entry + "\n", "utf8");
  • 写入本地文件
    electron/ensure-installed.js:45
    writeFileSync(homePatch, content.trimEnd() + "\n" + entry + "\n", "utf8");
  • 写入本地文件
    electron/ensure-installed.js:49
    writeFileSync(homePatch, entry + "\n", "utf8");
  • 删除本地文件
    electron/ensure-installed.js:75
    try { rmSync(dshNmLink, { force: true }); } catch {}
  • 执行外部命令固定命令
    electron/ensure-installed.js:109
    execFileSync("powershell", ["-NoProfile", "-Command", ps], { timeout: 5000 });
  • 写入本地文件
    electron/ensure-installed.js:134
    writeFileSync(p, src.replace(anchor, '\tif (false) try { ' + MARK), "utf8");
  • 读取本地文件
    electron/harness-lifecycle.js:14
    if (!existsSync(dshLib)) throw new Error("[harness] 找不到 @deepseek-ai/dsh(未安装依赖?): " + dshLib);
  • 读取本地文件
    electron/harness-lifecycle.js:15
    for (const f of readdirSync(dshLib)) {
  • 读取本地文件
    electron/main.js:21
    if (statSync(LOG_FILE).size > LOG_MAX_BYTES) {
  • 删除本地文件
    electron/main.js:22
    rmSync(LOG_FILE + ".1", { force: true });
  • 写入本地文件
    electron/main.js:23
    renameSync(LOG_FILE, LOG_FILE + ".1");
  • 写入本地文件
    electron/main.js:36
    try { appendFileSync(LOG_FILE, String(chunk), "utf8"); } catch {}
  • 发起网络请求
    electron/main.js:173
    const req = https.get(
  • 写入本地文件
    electron/rolefix.cjs:12
    try { fs.mkdirSync(LOGDIR, { recursive: true }); } catch (e) {}
  • 写入本地文件
    electron/rolefix.cjs:37
    fs.appendFileSync(REQLOG, lines.join("\n") + "\n");
  • 写入本地文件
    electron/rolefix.cjs:38
    if (parsed.tools && parsed.tools.length) { try { fs.writeFileSync(path.join(LOGDIR, "lastbody.json"), bodyStr); } catch (e) {} }
  • 读取本地文件
    patches/apply-directory-picker.js:28
    for (const p of candidates) if (existsSync(p)) return p;
  • 读取本地文件
    patches/apply-directory-picker.js:34
    const src = readFileSync(target, "utf8");
  • 写入本地文件
    patches/apply-directory-picker.js:48
    writeFileSync(target, src.replace(from, to), "utf8");
  • 读取本地文件
    patches/apply-provider-editor.js:33
    for (const p of candidates) if (existsSync(p)) return p;
  • 读取本地文件
    patches/apply-provider-editor.js:39
    let src = readFileSync(target, "utf8");
  • 写入本地文件
    patches/apply-provider-editor.js:47
    if (changed) writeFileSync(target, src, "utf8");
  • 读取本地文件
    patches/apply-session-rewind.js:29
    for (const p of candidates) if (existsSync(p)) return p;
  • 读取本地文件
    patches/apply-session-rewind.js:34
    let src = readFileSync(target, "utf8");
  • 写入本地文件
    patches/apply-session-rewind.js:49
    if (changed) writeFileSync(target, MARK + "\n" + src, "utf8");
  • 读取本地文件
    patches/apply.js:17
    for (const p of candidates) if (existsSync(p)) return p;
  • 读取本地文件
    patches/apply.js:46
    const src = readFileSync(target, "utf8");
  • 读取本地文件
    patches/apply.js:53
    const src = readFileSync(target, "utf8");
  • 写入本地文件
    patches/apply.js:59
    writeFileSync(target, MARK + "\n" + next, "utf8");
  • 读取本地文件
    plugins/dsh-session-rewind/lib/index.js:58
    if (!existsSync(dir)) return;
  • 写入本地文件
    plugins/dsh-session-rewind/lib/index.js:60
    mkdirSync(trashRoot, { recursive: true });
  • 写入本地文件
    plugins/dsh-session-rewind/lib/index.js:61
    renameSync(dir, join(trashRoot, `del-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`));
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-authorization@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-client-ui-settings-models@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-compaction@deepseek-ai/dsh-fs@deepseek-ai/dsh-hook-protocol
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 删除会话
  • 撤回消息
  • 重新回答

README

由 DeepSeek 最新模型翻译生成
dsh-desktop DeepSeek Harness 桌面增强:删除会话、撤回消息、重新回答、粘贴识别加供应商、启动自动检测更新。 本项目基于官方 DeepSeek Harness(@deepseek-ai/dsh,MIT License)二次开发,当前适配版本 0.1.5-rc.1,是非官方的第三方桌面壳增强,与 DeepSeek 无隶属、赞助或背书关系。 下载安装 👉 点击前往 Releases 下载最新版 .exe 下载 dsh-desktop Setup x.x.x.exe,双击安装,首次启动会自动完成初始化(无需额外操作)。 功能 | 功能 | 位置 | 行为 | | 删除会话 | 会话列表 ⋯ → 删除会话 | 永久删除 + 列表刷新 | | 撤回消息 | 用户消息下「撤回」按钮 | fork 到该消息前 + 归档母会话 + 自动切换 | | 重新回答 | AI 回复下「重新回答」按钮 | fork + 重跑 + 归档母会话 + 自动切换 | | 粘贴识别 | 设置 → 模型 → 添加自定义提供方 →「粘贴识别」 | 解析 NewAPI 通道连接串,自动填字段 + 拉模型列表 | | 自动更新检测 | 启动后 5 秒 | 检查 GitHub Releases,有新版弹窗提示并提供下载链接 | 升级 / 卸载说明 从旧版升级到新版
展开完整文档(README 剩余 1 节)
dsh-desktop

DeepSeek Harness 桌面增强:删除会话、撤回消息、重新回答、粘贴识别加供应商、启动自动检测更新。

本项目基于官方 DeepSeek Harness(@deepseek-ai/dsh,MIT License)二次开发,当前适配版本 0.1.5-rc.1,是非官方的第三方桌面壳增强,与 DeepSeek 无隶属、赞助或背书关系。

下载安装

👉 点击前往 Releases 下载最新版 .exe

下载 dsh-desktop Setup x.x.x.exe,双击安装,首次启动会自动完成初始化(无需额外操作)。

功能

| 功能 | 位置 | 行为 |
| 删除会话 | 会话列表 ⋯ → 删除会话 | 永久删除 + 列表刷新 |
| 撤回消息 | 用户消息下「撤回」按钮 | fork 到该消息前 + 归档母会话 + 自动切换 |
| 重新回答 | AI 回复下「重新回答」按钮 | fork + 重跑 + 归档母会话 + 自动切换 |
| 粘贴识别 | 设置 → 模型 → 添加自定义提供方 →「粘贴识别」 | 解析 NewAPI 通道连接串,自动填字段 + 拉模型列表 |
| 自动更新检测 | 启动后 5 秒 | 检查 GitHub Releases,有新版弹窗提示并提供下载链接 |

升级 / 卸载说明

从旧版升级到新版

1. 不需要卸载旧版,直接下载新版安装包(.exe)覆盖安装即可
2. 或在旧版运行时等待启动提示:「发现新版本」弹窗出现后点击「前往下载」,下载新版安装包后双击覆盖安装
3. 安装完成后重新启动即生效,配置、会话数据均保留

卸载

方法一:通过控制面板

1. 打开「设置」→「应用」→「已安装的应用」
2. 搜索 dsh-desktop,点击「卸载」

方法二:通过安装目录

1. 找到安装目录(默认 C:\Program Files\dsh-desktop 或安装时自选路径)
2. 运行其中的 Uninstall dsh-desktop.exe

卸载后清理(可选)

卸载程序只移除应用本体,以下数据目录需手动删除(含全部会话记录,请确认后再删):

%USERPROFILE%\.dsh\

开发 & 构建

cd dsh-desktop
npm install
node scripts\install.mjs # 打 client 补丁 + 装 host 插件
npx electron . # 开发运行
npm run dist # 打包 → dist\dsh-desktop Setup x.x.x.exe

架构

- plugins/dsh-session-rewind/ — host 插件(typert RPC:delete / rewind / regenerate)
- patches/apply-session-rewind.js — client 补丁(幂等,适配 4 个模块)
- electron/main.js — Electron 主进程 + 自动更新检测
- scripts/prepack.mjs — 打包前补丁(electron-builder 前自动调用)

声明

- 基于官方 DeepSeek Harness(@deepseek-ai/dsh,MIT License,Copyright (c) 2026 DeepSeek)。client 补丁作用于编译产物,host 插件是独立插件包,均未修改 harness 核心代码。
- 非官方:本项目与 DeepSeek(深度求索)无隶属、赞助或背书关系。
- 名称与图标如涉及 DeepSeek 商标,请自行确认符合其品牌使用规范。
预览分享卡片长什么样 ↓gniygniynus/dsh-desktop
分享 · DeepSeek Harness Hub
gniygniynus/dsh-desktop

删除会话、撤回消息、重新回答,粘贴识别供应商

回到顶部