dsh-file-mention:为 DSH Web GUI 增加 @ 工作区文件引用

前言

在 DSH Web GUI 中让模型读取工作区文件时,常见做法是手动把文件路径写进输入框,或在提示里说明“请看某个文件”。在多文件项目里,这样容易漏选文件、写错路径,也容易被 .gitignore、项目文档、编译产物等边界干扰。

dsh-file-mention 是 DSH(DeepSeek Harness)Web GUI 的一个客户端插件。它在聊天输入框里提供 @ 文件引用能力:输入 @ 后实时过滤工作区文件,选中后插入 @相对路径,模型即可直接读取该文件。下面介绍它的定位、核心功能、安装方式和适用场景。

插件定位

  • 插件名:@hucj/dsh-file-mention
  • 仓库:hucj09/dsh-file-mention
  • 许可证:MIT © 2026 hucj
  • 平台:dsh.client.platformweb
  • 运行环境:package.json 要求 Node >= 22
  • 用途:在 DSH Web GUI 输入框中,通过 @ 选择工作区文件并插入相对路径

核心功能

输入 @ 触发文件候选

在输入框输入 @,会触发工作区文件候选菜单。

插件支持按文件名或完整路径实时过滤,大小写不敏感,最多展示 30 条。选中文件后,输入框会插入 @相对路径,用于让模型读取该文件。

扫描范围

插件的文件候选来源包括:

  • git 跟踪文件
  • 未跟踪且未被忽略的新文件

这意味着新建文件即使没有 git add,也可以被 @ 引用;同时插件天然遵守 .gitignore,被忽略的文件和目录默认不会进入候选。

如果 git 不可用或当前目录不是仓库,插件会回退为 .gitignore 解析与全量扫描。

.aiinclude 重新纳入

有些文件虽然被 .gitignore 忽略,但模型或开发者仍然希望在 @ 菜单中引用,例如本地文档、配置草稿或辅助材料。

可以在工作区根目录创建 .aiinclude,使用 .gitignore 语法,把被忽略的文件或目录重新纳入扫描范围。

# 使用 .gitignore 语法,把需要纳入扫描的文件或目录写在这里

子目录也可以配置 .aiinclude。子目录中的规则相对该目录生效,并覆盖根配置。

修改 .aiinclude 后,数据约 90 秒内收敛;刷新页面可加速客户端部分生效。

目录引用与排序

插件支持目录引用,并支持逐级展开和单段查询直达子目录。

候选排序支持以下匹配优先级:

  1. 精确匹配
  2. 前缀匹配
  3. 子串匹配

在同等匹配条件下,插件优先展示变更文件。最近修改或新增的变更文件会置顶,上限 5 个。

菜单、缓存与边界

插件将候选菜单加宽至 720px,并调整字号与行高,用于提升文件候选的可读性。

缓存方面:

  • 客户端按工作区 cwd 共享缓存,并采用 stale-while-revalidate
  • Host 侧对 git 结果做分层缓存

安全边界方面,插件限制:

  • 文件总数上限 10000
  • 遍历深度 32
  • 跳过重型目录

安装与卸载

npm 方式安装

先执行安装命令:

dsh plugin --profile web add @hucj/dsh-file-mention

执行后重启 dsh web,在浏览器中按 Ctrl+F5 强刷页面。进入输入框输入 @,如果出现 file 分组,即表示安装成功。

本地路径安装

如果需要在本地调试,也可以使用本地路径安装:

dsh plugin --profile web add file:D:/path/to/dsh-file-mention

需要注意,file: 安装是一次性拷贝。源码改动后,需要重新编译并重新安装,安装目录不会自动同步源码变化。

宿主依赖

插件需要宿主已组装 input-trigger 相关依赖。README 注明标准 web 部署默认包含该依赖。

卸载

卸载命令如下:

dsh plugin --profile web remove @hucj/dsh-file-mention

执行后重启 dsh web 使卸载生效。

典型用法

  1. 在 DSH Web GUI 输入框中输入 @,弹出工作区文件候选菜单。
  2. 按文件名或完整路径继续输入,实时过滤候选文件。
  3. 选择目标文件后,输入框中插入 @相对路径
  4. 将消息发送给模型,模型即可基于该路径读取对应文件。

如果项目中存在被 .gitignore 忽略但需要被 @ 引用的文件,可以这样做:

  1. 在工作区根目录创建 .aiinclude
  2. 使用 .gitignore 语法,将目标文件或目录写入 .aiinclude
  3. 等待约 90 秒内收敛,或刷新页面加速客户端部分更新。
  4. 重新输入 @,确认目标文件进入候选列表。

如果某个子目录需要单独调整纳入规则,也可以在子目录中放置 .aiinclude。规则相对该目录生效,并覆盖根配置。

适用场景与注意

适合以下情况使用:

  • 在 DSH Web GUI 中频繁让模型读取工作区文件
  • 希望减少手工输入路径带来的错误
  • 需要把 git 跟踪文件和未跟踪新文件统一纳入候选
  • 需要遵循 .gitignore 边界,同时保留部分本地文档或配置的引用能力
  • 需要在目录结构中快速定位子目录或子文件

使用注意:

  • 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证。
  • .aiinclude 会扩大可被引用的文件范围,不要把敏感文件无差别纳入。
  • 本地 file: 安装是一次性拷贝,源码修改后需要重新编译并重新安装。
  • DSH 插件生态强调可扩展性;社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不应把它写成官方应用商店。

相关链接

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

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

Xiaoye