前言¶
在 Deepseek Harness(DSH)生态中,让 Agent 直接处理本地文件需要将文件内容注入对话输入框。旧版的 dsh-file-drop 插件虽然实现了基础功能,但在 EAC 环境下与视觉桥存在重复注入图片的冲突。
dsh-file-drop-eac 是对旧版 dsh-file-drop 的 EAC 特化重写。它被设计为 EAC 客户端的内置替代插件,在解决冲突的同时,补充了对文件夹的支持。
核心功能¶
该插件根据文件类型执行不同的注入逻辑:
- 文本 / 代码文件(如
.md,.js,.py,.json或无扩展名文件)
自动将文件内容注入输入框(上限 256 KB),并在内容前添加文件头<!-- 拖入文件:<名> -->。 - 二进制 / 超大文件
不注入内容,而是注入完整磁盘路径提示。Agent 可以利用文件工具根据路径读取文件。 - 图片
完全不接管。拖入图片时插件无操作,直接交给视觉桥或原生缩略图处理,避免重复注入冲突。 - 文件夹
新增接管能力。插件会识别拖入的是文件夹,但由于浏览器安全限制,无法获取文件夹的磁盘绝对路径。此时会给出可操作的降级提示,例如“在文件/项目目录标签打开该目录”或“关键文件逐一拖入”。
技术实现与运行环境¶
插件采用纯客户端实现。其目录结构如下:
dsh-file-drop-eac/
├── lib/
│ ├── index.js # host half(no-op,让包成为合法 bundle)
│ └── client.js # 浏览器半边(classic-script,经 __ModuleLoader__.load 注册)
├── test/
│ └── client.test.js # node:test + vm 沙箱(纯逻辑 + 端到端 drop 注入)
├── README.md
└── package.json
- 加载方式:
client.js是 classic-script bundle,官方模块加载器只支持该形式。 - 路径获取:
- Electron 桌面端:通过 preload 暴露的
dshDesktop.getPathForFile(基于webUtils)获取拖入文件的完整磁盘路径。 - 纯浏览器 WebUI:由于安全限制,只能获取虚拟路径,插件会自动降级为可读提示。
- Electron 桌面端:通过 preload 暴露的
安装与启用¶
该插件旨在作为 EAC 内置替代品分发。在 EAC 客户端中,它被登记进 main.js 的 COMPANION_PLUGINS,并最终落到 resources/app/assets/plugins/dsh-file-drop-eac,由客户端内的 syncCompanionPlugins 分发到 web profile,替换原 dsh-file-drop。
(注:资料中未提供具体的安装命令)
典型用法¶
- 操作:直接将本地文件或文件夹拖拽到对话输入框。
- 结果:
- 对于文本/代码文件,内容会自动出现在输入框中。
- 对于二进制/超大文件,输入框会出现文件路径提示。
- 对于图片,输入框不会出现文件内容,由视觉桥处理。
- 对于文件夹,会出现提示信息引导下一步操作。
适用场景与注意¶
- 适用场景:需要 Agent 快速读取本地代码、文档或配置文件的场景。
- 注意:
- 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证(MIT)。
- 浏览器出于安全限制拿不到文件夹的磁盘绝对路径,这是技术限制而非插件 bug。
- 与视觉桥、缩略图功能协作时,插件会主动避免重复注入。
总结¶
dsh-file-drop-eac 解决了旧版插件在 EAC 环境下的图片冲突问题,并补充了对文件夹的识别能力。它通过 classic-script 模式与 EAC 客户端深度集成,为开发者提供了一种直观的本地文件交互方式。