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

文件预览栏 pjy-20051012/dsh-file-preview

DeepSeek Harness
pjy-2005101280 天前有提交已提供中文文档扫描:含敏感能力

在侧边栏预览会话产出文件,Office 也能转 PDF 看

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add pjy-20051012/dsh-file-preview
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 80 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 35 条)
  • 执行外部命令来自配置/变量
    lib/index.js:405
    const child = spawn(POWERSHELL, [
  • 读取本地文件
    lib/index.js:425
    await stat(pdfPath);
  • 写入本地文件
    lib/index.js:437
    await mkdir(pdfCacheDir(), { recursive: true });
  • 读取本地文件
    lib/index.js:453
    const info = await stat(path);
  • 读取本地文件
    lib/index.js:467
    buffer = await readFile(path);
  • 读取本地文件
    lib/index.js:529
    const info = await stat(path);
  • 读取本地文件
    lib/index.js:547
    const stream = createReadStream(path);
  • 执行外部命令来自配置/变量
    lib/index.js:569
    const child = spawn(command, args, { detached: true, stdio: "ignore", windowsHide: true });
  • 执行外部命令来自配置/变量
    lib/index.js:591
    const child = spawn(CMD_EXE, [line], {
  • 执行外部命令来自配置/变量
    lib/index.js:627
    const child = spawn(EXPLORER_EXE, [explorerSelectArg(path)], {
  • 读取本地文件
    lib/index.js:662
    await stat(path);
  • 发起网络请求
    lib/client.js:232
    const response = await fetch(path, { headers: { accept: "application/json" }, ...options });
  • 读取本地文件
    scripts/install.mjs:52
    const sourcePackage = JSON.parse(await readFile(join(sourceRoot, "package.json"), "utf8"));
  • 读取本地文件
    scripts/install.mjs:65
    return await readFile(path, "utf8");
  • 写入本地文件
    scripts/install.mjs:102
    await mkdir(target, { recursive: true });
  • 写入本地文件
    scripts/install.mjs:106
    await mkdir(join(target, "scripts"), { recursive: true });
  • 写入本地文件
    scripts/install.mjs:110
    await mkdir(dirname(patchPath), { recursive: true });
  • 写入本地文件
    scripts/install.mjs:115
    await writeFile(patchPath, `${current}${separator}${leading}${patchBlock}`, "utf8");
  • 读取本地文件
    scripts/smoke-client.mjs:53
    const source = await readFile(join(root, "lib", "client.js"), "utf8");
  • 写入本地文件
    scripts/smoke-server.mjs:247
    await writeFile(textFile, "const answer = 42;\n// 中文注释\n", "utf8");
  • 写入本地文件
    scripts/smoke-server.mjs:248
    await writeFile(imageFile, Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 1, 2, 3]));
  • 写入本地文件
    scripts/smoke-server.mjs:249
    await writeFile(binFile, Buffer.from([0x50, 0x4b, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00]));
  • 写入本地文件
    scripts/smoke-server.mjs:250
    await writeFile(odtFile, odtFixture());
  • 写入本地文件
    scripts/smoke-server.mjs:251
    await writeFile(corruptOdtFile, Buffer.from("this is not a zip document, sorry", "utf8"));
  • 发起网络请求
    scripts/smoke-server.mjs:254
    const response = await fetch(`${base}${path}`, { headers });
  • 发起网络请求
    scripts/smoke-server.mjs:259
    const response = await fetch(`${base}${path}`, {
  • 删除本地文件递归
    scripts/smoke-server.mjs:385
    await rm(tmp, { recursive: true, force: true });
  • 读取本地文件
    scripts/test-install.mjs:42
    await assert.rejects(readFile(patchPath, "utf8"));
  • 读取本地文件
    scripts/test-install.mjs:47
    const pkg = JSON.parse(await readFile(join(target, "package.json"), "utf8"));
  • 读取本地文件
    scripts/test-install.mjs:49
    const patch = await readFile(patchPath, "utf8");
  • 读取本地文件
    scripts/test-install.mjs:55
    const patch = await readFile(patchPath, "utf8");
  • 读取本地文件
    scripts/test-install.mjs:64
    const before = await readFile(patchPath, "utf8");
  • 读取本地文件
    scripts/test-install.mjs:66
    const after = await readFile(patchPath, "utf8");
  • 删除本地文件递归
    scripts/test-install.mjs:78
    await rm(target, { recursive: true, force: true });
  • 删除本地文件递归
    scripts/test-install.mjs:82
    await rm(home, { recursive: true, force: true });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 侧边栏预览会话文件
  • Office转PDF预览

README

由 DeepSeek 最新模型翻译生成
dsh-file-preview CI version license 为 DeepSeek Harness 网页端(dsh web)增加 Codex 风格的文件能力: - 最近文件列表:点击侧边栏「文件预览」入口,右侧面板直接展示本会话最近 10 个产出文件,点任意一个即可预览。 - 右侧文件预览栏:像 Codex 一样「看文件长什么样」——图片/PDF 直接渲染,Word/Excel/PowerPoint(docx/xlsx/pptx)在服务端用本机 MS Office 转成 PDF 后可视化预览(转不了才退回文本);支持「用默认程序打开」和「打开所在文件夹」,可从预览一键返回最近文件列表。 - 对话中的文件操作行:每条助手回复下方(turn 尾部)展示该轮产出的文件,每个文件带三个动作:预览、打开、在文件夹中显示。 实现方式与 dsh-usage-stats 完全一致:服务端 Cordis 插件注册回环-only 的 HTTP 端点,浏览器端手写 __ModuleLoader__ bundle 注入界面,无构建步骤。
展开完整文档(README 剩余 1 节)
dsh-file-preview

CI
version
license

为 DeepSeek Harness 网页端(dsh web)增加 Codex 风格的文件能力:

- 最近文件列表:点击侧边栏「文件预览」入口,右侧面板直接展示本会话最近 10 个产出文件,点任意一个即可预览。
- 右侧文件预览栏:像 Codex 一样「看文件长什么样」——图片/PDF 直接渲染,Word/Excel/PowerPoint(docx/xlsx/pptx)在服务端用本机 MS Office 转成 PDF 后可视化预览(转不了才退回文本);支持「用默认程序打开」和「打开所在文件夹」,可从预览一键返回最近文件列表。
- 对话中的文件操作行:每条助手回复下方(turn 尾部)展示该轮产出的文件,每个文件带三个动作:预览、打开、在文件夹中显示。

实现方式与 dsh-usage-stats 完全一致:服务端 Cordis 插件注册回环-only 的 HTTP 端点,浏览器端手写 __ModuleLoader__ bundle 注入界面,无构建步骤。

功能 / Features

| 功能 | 说明 |
| 最近文件列表 | 侧边栏入口打开后默认显示本会话最近 10 个产出文件(名称/路径/时间,可预览/打开/定位文件夹) |
| 右侧预览栏 | shell.overlay 全应用浮动层;文本/代码展示(截断保护)、图片、PDF 内嵌预览;Office 文档经 MS Office COM 转 PDF 可视化预览(带缓存,转不了回退文本);半透明毛玻璃质感,不遮挡视野 |
| 对话文件操作行 | conversation.chat.turnTail chain 条目(priority: -10,优先于内置 deliverables 行),每文件提供 预览/打开/文件夹 三动作 |
| 打开所在文件夹 | Windows explorer /select(windowsVerbatimArguments 精确传参,含空格/中文路径可定位)、macOS open -R、Linux 打开所在目录 |
| 默认程序打开 | 复用会话层 openFile(宿主 host.openPath);服务端也提供等价端点 |
| 安全边界 | 所有端点仅接受回环来源(peer socket + Host 双重校验);路径必须为绝对路径;预览只读 |

安装 / Installation

需要 DeepSeek Harness 的 web profile(@deepseek-ai/dsh >= 0.1.0-rc.6)以及随 Node.js 提供的 npx。

在 PowerShell、命令提示符或 macOS/Linux 终端运行同一条命令:

npx --yes github:pjy-20051012/dsh-file-preview

安装器会自动完成两件事:把运行文件复制到 ~/.dsh/profiles/node_modules/dsh-file-preview,并在 profiles/web/cordis.patch.yml 中幂等启用插件。重复运行同一命令即可更新,不会重复添加配置。

如设置了 DSH_HOME,安装器会使用该目录而不是 ~/.dsh。可先预览或只检查现有安装:

npx --yes github:pjy-20051012/dsh-file-preview --dry-run
npx --yes github:pjy-20051012/dsh-file-preview --check

如果不希望安装器修改 Cordis patch,可加 --no-enable,再自行配置。

无法使用 npx 时:从源码安装

git clone https://github.com/pjy-20051012/dsh-file-preview.git
cd dsh-file-preview
node scripts/install.mjs

重启

dsh web

浏览器硬刷新后生效:侧边栏底部出现「文件预览」入口;新产生的助手回复下方出现「文件操作」行。

使用 / Usage

- 点击侧边栏底部「文件预览」→ 右侧面板打开最近文件列表(本会话最近 10 个产出文件),点文件名直接预览。
- 对话中「文件操作」行:点击文件名 → 预览;↗ 用默认程序打开;📂 打开所在文件夹。
- 预览面板标题栏:← 返回最近文件、↗ 打开、📂 打开所在文件夹、刷新、关闭。
- 最近文件列表随对话实时更新(隐藏收集器监听会话快照),无需手动刷新。

Agent 友好安装 / Agent-friendly installation

可以把下面整段直接交给 Codex、Claude Code 或其他本地编码 Agent:

Install or update dsh-file-preview from:
https://github.com/pjy-20051012/dsh-file-preview

Constraints:
- Resolve DSH_HOME from the environment; otherwise use ~/.dsh.
- Do not read, print, edit, or request .credentials.yaml or any API key.
- Do not expose the plugin through a reverse proxy.
- 未经询问,不要重启或终止现有的 dsh 进程。

操作步骤:
1. 确认 node、npx 和 dsh 可用。
2. 运行:npx --yes github:pjy-20051012/dsh-file-preview
3. 要求安装器报告已验证的包,并且恰好有一个 Cordis patch 条目。
4. 报告解析出的安装路径和 patch 路径。
5. 如果 dsh web 已在运行,请告诉我需要重启,然后停止。

安装器本身提供清晰的退出码:未知参数返回 2;文件、版本或配置验证失败返回非零;成功时输出已验证版本、安装路径和 patch 路径。因此 Agent 不需要自行解析或重写 YAML。

开发与验证 / Development

node --check lib/index.js && node --check lib/client.js
npm run test # 离线:服务端冒烟 + 安装器幂等测试

npm test 完全离线:用临时文件驱动真实 HTTP 路由,校验回环围栏、路径校验、分类与全部端点;
安装器测试在临时 DSH_HOME 下验证幂等性与 --check 行为。

API

| Method | Path | 说明 |
| GET | /api/file-preview/preview?path= | 文件元数据 + 文本内容(≤1MB,超长截断标记)或 图片/PDF 的 raw URL |
| GET | /api/file-preview/raw?path= | 原始字节流(图片/PDF 预览,≤64MB),Content-Disposition: inline |
| POST | /api/file-preview/open | {path} 用系统默认程序打开 |
| POST | /api/file-preview/reveal | {path} 在所在文件夹中定位 |

其他方法返回 405,非回环请求返回 403;preview/raw 仅 GET,open/reveal 仅 POST。
预览端点只读,绝不写文件。

隐私与安全 / Privacy & security

- 所有端点校验 req.socket.remoteAddress 与 Host;仅回环可达,请勿经反向代理暴露到局域网/公网。
- 预览只读文件内容并回传浏览器;插件不读取凭据、不发送任何请求到外部网络。
- open/reveal 仅在本机启动系统程序(相当于你在本机执行打开操作)。

兼容性

当前版本 0.1.0。对话文件行依赖 ui-deliverables 发布的 deliverables turn 数据(web roster 默认启用);若该插件被移除,文件操作行会自动隐藏,预览面板与侧边栏入口不受影响。
Harness 预发布版本升级后如内部接口变化,可能需要同步适配。

License

MIT
预览分享卡片长什么样 ↓pjy-20051012/dsh-file-preview
分享 · DeepSeek Harness Hub
pjy-20051012/dsh-file-preview

在侧边栏预览会话产出文件,Office 也能转 PDF 看

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部