dsh-file-drop-eac:直接拖入文件/文件夹到 EAC 对话

前言

在 Deepseek Harness(DSH)生态中,让 Agent 直接处理本地文件需要将文件内容注入对话输入框。旧版的 dsh-file-drop 插件虽然实现了基础功能,但在 EAC 环境下与视觉桥存在重复注入图片的冲突。

dsh-file-drop-eac 是对旧版 dsh-file-drop 的 EAC 特化重写。它被设计为 EAC 客户端的内置替代插件,在解决冲突的同时,补充了对文件夹的支持。

核心功能

该插件根据文件类型执行不同的注入逻辑:

  1. 文本 / 代码文件(如 .md, .js, .py, .json 或无扩展名文件)
    自动将文件内容注入输入框(上限 256 KB),并在内容前添加文件头 <!-- 拖入文件:<名> -->。
  2. 二进制 / 超大文件
    不注入内容,而是注入完整磁盘路径提示。Agent 可以利用文件工具根据路径读取文件。
  3. 图片
    完全不接管。拖入图片时插件无操作,直接交给视觉桥或原生缩略图处理,避免重复注入冲突。
  4. 文件夹
    新增接管能力。插件会识别拖入的是文件夹,但由于浏览器安全限制,无法获取文件夹的磁盘绝对路径。此时会给出可操作的降级提示,例如“在文件/项目目录标签打开该目录”或“关键文件逐一拖入”。

技术实现与运行环境

插件采用纯客户端实现。其目录结构如下:

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:由于安全限制,只能获取虚拟路径,插件会自动降级为可读提示。

安装与启用

该插件旨在作为 EAC 内置替代品分发。在 EAC 客户端中,它被登记进 main.js 的 COMPANION_PLUGINS,并最终落到 resources/app/assets/plugins/dsh-file-drop-eac,由客户端内的 syncCompanionPlugins 分发到 web profile,替换原 dsh-file-drop。

(注:资料中未提供具体的安装命令)

典型用法

  1. 操作:直接将本地文件或文件夹拖拽到对话输入框。
  2. 结果:
    • 对于文本/代码文件,内容会自动出现在输入框中。
    • 对于二进制/超大文件,输入框会出现文件路径提示。
    • 对于图片,输入框不会出现文件内容,由视觉桥处理。
    • 对于文件夹,会出现提示信息引导下一步操作。

适用场景与注意

  • 适用场景:需要 Agent 快速读取本地代码、文档或配置文件的场景。
  • 注意:
    • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证(MIT)。
    • 浏览器出于安全限制拿不到文件夹的磁盘绝对路径,这是技术限制而非插件 bug。
    • 与视觉桥、缩略图功能协作时,插件会主动避免重复注入。

总结

dsh-file-drop-eac 解决了旧版插件在 EAC 环境下的图片冲突问题,并补充了对文件夹的识别能力。它通过 classic-script 模式与 EAC 客户端深度集成,为开发者提供了一种直观的本地文件交互方式。

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

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

小夜