dsh-copy-file-button:在文件预览工具栏一键复制磁盘上的完整文件

前言

DeepSeek Harness(DSH)右侧的文件预览面板适合快速查看工作区里的文本,但要把「整个文件」拷到剪贴板时,常见做法是在预览里全选再复制。预览可能只加载了部分内容,或在重新渲染后截断显示文本,复制结果未必等于磁盘上的原文件。下面介绍的 dsh-copy-file-button 在预览标题栏增加一个按钮,通过 Host 的文件读取通道拿到真实字节,再写入剪贴板,并做读回校验,避免「界面显示成功、剪贴板却是空的」。

这是什么

dsh-copy-file-button 是社区维护的 DSH 客户端插件(维护者 caly250)。它在文件预览工具栏最右侧(槽位 sidebar.right.tab.document.actions,与查看器菜单、自动换行、重新加载、用 VS Code 打开等并列)插入「复制整个文件内容」按钮。复制源是 remote.workspaceFiles.readBytes(...),与预览使用的 Host 读取权限一致,复制的是磁盘原始字节,而不是预览里渲染的那份文本。

插件当前在 GitHub 上星标为 0;许可证为 MIT(见仓库 README)。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

读取与剪贴板

  1. 通过 Host 的 remote.workspaceFiles.readBytes(...) 读取当前预览文件的字节。
  2. 写入剪贴板后读回校验:仅当读回内容与写入一致才显示成功(勾)。README 说明 execCommand('copy') 可能返回成功却未写入,失去焦点时 clipboard.writeText 也可能 reject;朴素实现容易误报成功。
  3. 当 navigator.clipboard 不可用或失败时,回退到临时 textarea + execCommand('copy'),并恢复原有选区。

边界与提示

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

实现上需要注意的两点

跨 Host 桥的数据在 schema 上声明为 Uint8Array,结构化序列化后实际可能是 base64 字符串(文档预览侧也用 atob 解码)。若对字符串直接 new Uint8Array(someString) 会静默得到空数组,是导致「显示复制成功、剪贴板却是空的」的常见原因;插件接受 Uint8Array、base64、ArrayBuffer、类数组以及 {type:'Buffer',data:[...]} 等形态。

解码为文本后,若首字符为 UTF-8 BOM(U+FEFF)会剥掉,避免复制结果开头多一个不可见字符。

国际化

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

安装与启用

仓库 README 给出的安装方式如下(package.json 中版本为 1.1.0):

# 从 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 半侧需要刷新一次页面才会加载新插件。

卸载时:从 profile 的 package.json 中移除该条目(dependencies 与 dsh.profile.bundles),删除 node_modules 里的链接,再重启 DSH。

典型用法

  1. 在 DSH 中打开右侧文件预览,选中要复制的文件。
  2. 在预览标题栏最右侧找到复制按钮(与自动换行、重新加载等同一行)。
  3. 点击按钮;成功时会出现校验通过的成功反馈。若文件为二进制、过大或为空,会按上表给出明确提示而非截断或假成功。

无需额外配置字段;插件通过 cordis.patch.yml 注入客户端 bundle(dsh.client.platform: web,immediately: true)。

适用场景与注意

适合经常在 DSH 里查看工作区文件、又需要把完整文本粘贴到外部编辑器或对话里的开发者。不适合指望一次复制超大二进制或明显非文本文件——插件会主动拒绝或提示上限。

插件以当前 DSH 进程及 Host 文件读取权限运行,安装前应自行查看仓库源码与 MIT 许可证,确认符合你的安全与合规要求。不要假设预览里看到的内容与磁盘文件逐字节一致;需要可靠全文复制时,应使用本按钮所走的 Host 读字节路径。

链接

经过上面的步骤,你可以在不大改工作流的前提下,把「从预览复制全文」变成可校验、有边界提示的一键操作。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye