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

整文件复制 caly250/dsh-copy-file-button

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

给 DSH 右侧文件预览工具栏加一个「复制整个文件内容」按钮 —— 一键把磁盘上的完整文件内容复制到剪贴板。

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读取剪贴板或密钥环境变量写入剪贴板(不计风险)
查看扫描证据(共 4 处,展示前 4 条)
  • 写入剪贴板
    client.js:67
    async function writeClipboard(text) {
  • 写入剪贴板
    client.js:71
    await clipboard.writeText(text)
  • 读取剪贴板
    client.js:95
    return (await clipboard.readText()) === text
  • 写入剪贴板
    client.js:394
    const copied = await writeClipboard(text)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DSH 插件:文件预览工具栏里加一个「复制整个文件」按钮,通过 Host 读取真实字节

README

由 DeepSeek 最新模型翻译生成
dsh-copy-file-button 给 DSH 右侧文件预览工具栏加一个「复制整个文件内容」按钮 —— 一键把磁盘上的完整文件内容复制到剪贴板。 English: README.en.md 为什么需要它 DSH 的右侧文件预览面板能看文件,但要复制整个文件只能手动全选 —— 而预览可能只加载了部分内容、或因重新渲染截断了文本。这个按钮直接走 Host 的文件读取通道,复制的是磁盘上的真实字节,不是预览里显示的那份文本。 它做什么 在 sidebar.right.tab.document.actions 槽位(文件预览标题栏最右侧,和查看器菜单、自动换行、重新加载、用 VS Code 打开并列)插入一个复制按钮。 - 复制源:remote.workspaceFiles.readBytes(...) —— 预览本身用的同一套 Host 读取权限,所以拿到的是磁盘原始字节。 - 复制成功才打勾:写入剪贴板后会读回校验。execCommand('copy') 可能返回成功却什么都没写,失去焦点的文档会让 clipboard.writeText 直接 reject —— 这两种情况都会让朴素实现显示一个勾,而剪贴板是空的。只有读回内容匹配才算复制成功。
展开完整文档(README 剩余 1 节)
dsh-copy-file-button

给 DSH 右侧文件预览工具栏加一个「复制整个文件内容」按钮 —— 一键把磁盘上的完整文件内容复制到剪贴板。

English: README.en.md

为什么需要它

DSH 的右侧文件预览面板能看文件,但要复制整个文件只能手动全选 —— 而预览可能只加载了部分内容、或因重新渲染截断了文本。这个按钮直接走 Host 的文件读取通道,复制的是磁盘上的真实字节,不是预览里显示的那份文本。

它做什么

在 sidebar.right.tab.document.actions 槽位(文件预览标题栏最右侧,和查看器菜单、自动换行、重新加载、用 VS Code 打开并列)插入一个复制按钮。

- 复制源:remote.workspaceFiles.readBytes(...) —— 预览本身用的同一套 Host 读取权限,所以拿到的是磁盘原始字节。
- 复制成功才打勾:写入剪贴板后会读回校验。execCommand('copy') 可能返回成功却什么都没写,失去焦点的文档会让 clipboard.writeText 直接 reject —— 这两种情况都会让朴素实现显示一个勾,而剪贴板是空的。只有读回内容匹配才算复制成功。
- 回退路径:navigator.clipboard 不可用或失败时,退回临时 textarea + execCommand('copy'),并恢复原来的选区。

边界处理

| 情况 | 行为 |
| 二进制文件 | 探测前 8 KB 是否含 NUL 字节,含则拒绝并提示「这不是文本文件」 |
| 文件太大 | 超过上限时提示「文件太大,无法一次复制」,不做截断复制 |
| 空文件 | 提示「文件内容为空」 |
| 读取失败 | 显示具体错误,不伪装成功 |
| 未知数据形态 | 报出实际的类型和大小(如 string(1024)),而不是猜 |

两个实现上的坑

1. 跨 Host 桥的数据不是 Uint8Array。 schema 上声明的是 Uint8Array,但跨进程结构化序列化后实际到达的是 base64 字符串(文档预览自己也用 atob 解码)。直接 new Uint8Array(someString) 会静默得到空数组 —— 这正是「显示复制成功、剪贴板却是空的」的成因。代码接受 Uint8Array / base64 / ArrayBuffer / 类数组 / {type:'Buffer',data:[...]} 全部形态。

2. UTF-8 BOM 要剥掉。 解码后若首字符是 U+FEFF 就丢弃,避免复制出来的文本开头多一个不可见字符。

安装

从 GitHub 安装
dsh plugin --profile desktop add github:<your-user>/dsh-copy-file-button

或从本地目录
dsh plugin --profile desktop add link:/path/to/dsh-copy-file-button

然后重启 DSH。Client 半侧需要刷新一次页面才加载。

国际化

自带 locale/en.json,按钮文案跟随 DSH 语言设置。内置中英文词条,新增语言只需在 locale/ 下加对应 JSON。

卸载

从 profile 的 package.json 中移除该条目(dependencies 与 dsh.profile.bundles),删掉 node_modules 里的链接,重启即可。

License

MIT
预览分享卡片长什么样 ↓caly250/dsh-copy-file-button
分享 · DeepSeek Harness Hub
caly250/dsh-copy-file-button

给 DSH 右侧文件预览工具栏加一个「复制整个文件内容」按钮 —— 一键把磁盘上的完整文件内容复制到剪贴板。

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