dsh-file-mention
by Seryta
DSH(DeepSeek Harness)Web GUI 插件:在输入框里用 @ (或 /file 命令)模糊搜索 会话工作区(cwd)下的文件路径,pick 后插入 @相对路径 引用随消息发出。 Agent 自带本地文件工具,按路径自行读取或操作(查、改、测试、移动)—— 不把文件内容灌进上下文 (引用自读语义,与内容注入型插件不同)。
DSH (DeepSeek Harness) Web GUI plugin: fuzzy-search file paths under the session workspace (cwd) from the input box via @ (or the /file command); picking one inserts an @relative-path reference sent along with the message. The agent reads or operates on files by path with its own local file tools (view, edit, test, move) — file content is never dumped into context (reference-then-read semantics, unlike content-injection plugins).
安装
dsh plugin --profile web add github:Seryta/dsh-file-mentionGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
DSH(DeepSeek Harness)Web GUI 插件:在输入框里用 @(或 /file 命令)模糊搜索
会话工作区(cwd)下的文件路径,pick 后插入 @相对路径 引用随消息发出。
Agent 自带本地文件工具,按路径自行读取或操作(查、改、测试、移动)——
不把文件内容灌进上下文(引用自读语义,与内容注入型插件不同)。
用法
@ 内联触发(推荐):
- 输入
@即弹出工作区浅层条目菜单(开头或空格后输入@触发, 与 TUI 惯例一致);继续输入路径片段(如@src/butt)自然过滤; - 候选菜单「file」分组列出匹配的文件与目录(最多 20 条,带路径副标题);
- 键盘选中后按 Enter 或 Tab 补全当前高亮项(鼠标点击同样生效)。
补全遵循文件系统惯例:文件补全为
@file(空格结束);目录补全为@dir/——确认空目录才补空格结束,有子内容(或未确认)则不加空格, 光标停在斜杠后继续输入子路径浏览;想提前结束目录浏览,手动输一个 空格即可(token 遇空白断开)。
/file 命令(@ 触发异常的备用入口):
- 输入
/file后直接接路径片段(如/fileAGENTS,无空格——harness 的 trigger 检测在 token 含空格时失效); - pick 后同样插入
@相对路径。
示例:请修复 @src/main.go 里的空指针 → agent 按 src/main.go 定位并操作。
功能特性
- 附件条 dock:composer 上方实时显示 draft 中所有
@路径引用 (📁/📄 图标 + 去重),×精确删除该引用(引用自读语义下点击打开由 agent 按路径自行完成); - 引用装饰(lexicon):纯单词形态的文件名(如
LICENSE/Makefile)在被 引用时由管线高亮装饰,与其他引用(技能/命令)同视觉;含.//的路径 引用受管线 token 语法([@/][\w-]+)限制不参与装饰(官方机制,如实降级); - 空查询浅层菜单:只输入
@也弹出工作区顶层条目(BFS 遍历天然浅层 优先),无需先想路径片段; - warm 预热:打开会话即后台预热该工作区的索引(官方 warm 钩子),输入
@时几乎零延迟弹菜单(命中服务端 30s 缓存),无 1.5s 首查等待; - 搜索排名:子序列模糊匹配(打错中间字母也能命中)+ basename 命中加权
- 浅层优先(深度轻微惩罚);同等匹配质量下目录略优先;
- 目录候选:目录与文件同列(📁/📄 图标区分),pick 目录插入
@dir/尾斜杠引用;目录按"是否有子内容"决定补全后是否自动加空格(空目录加, 有子内容不加、允许继续浏览); - 延迟策略:服务端 BFS 遍历 + 30s 内存缓存 + 快照文件兜底
(
~/.dsh/storages/file-mention/<hash>.json)+ 1.5s 预算部分返回- 启动 3s 预暖;打字连发即时命中缓存;
- 新文件秒级可见:缓存命中时比对该 root 的 mtime——缓存建立后有增删 立即重扫(创建/删除文件无需等 30s 窗口);
- fetch 不互相 abort:击键产生的过时信号只丢弃对应结果,在途请求继续 存活(避免打字快于首查时菜单永远收不到结果);
- 目录副标题:候选行显示条目所在目录(ui-input-trigger 管线原生渲染)。
配置(环境变量,均可选)
| 变量 | 默认 | 说明 |
|---|---|---|
FILE_MENTION_ALLOWED_ROOTS |
不启用 | 逗号分隔的允许搜索根目录(绝对路径)。设置后才启用白名单,白名单外的 root 返回 400;不设置则放行(与 host.listDirectory 的浏览暴露面一致) |
FILE_MENTION_IGNORE_DIRS |
内置剪枝表 | 追加剪枝目录 basename,逗号分隔 |
FILE_MENTION_MAX_FILES |
600000 |
单次遍历收集文件数上限 |
安装
dsh plugin --profile web add github:Seryta/dsh-file-mention
安装后重启 dsh web 并刷新页面。纯手写 JS,零构建、零第三方依赖。
与同类插件的差异
| 项目 | 发送时行为 | 本插件的取舍 |
|---|---|---|
| dsh-at-file | 内容注入(host 在 pre-step 读文件并注入 <file> 内容) |
本插件只插路径引用、agent 用工具自读:省 token、agent 可操作文件、host 不读文件内容;代价是模型需自行决定读哪些文件 |
| dsh-wikilink | [[wikilink]] 笔记内容注入 |
场景不同(笔记 vs 文件路径) |
已知限制
- 符号链接不跟随;不返回文件大小。
- token 语法与 harness 触发检测一致:引用路径不能含空格(含空格的文件名 无法通过输入完整路径选中)。
- 插入的是路径引用而非文件内容——agent 需要读文件时会自己调 read 工具 (这也是"操作文件"的必需信息)。超大/二进制文件不在菜单里做任何预览。
- 端点
GET /plugins/dsh-file-mention/api/search?root=&q=&limit=仅暴露 路径列表(不读内容),与现有目录选择器的信息暴露面一致。
License
MIT
原始 README: https://github.com/Seryta/dsh-file-mention/blob/master/README.md ↗
同类插件
查看全部 →
dsh-web-ui-all
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-web-ui
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。

dsh-TUI
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。

DSH-better-sidebar
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。

working-activity
让 agent 的"工作状态行"活过来——实时工具动态与进度、俏皮文案、模型自述、上下文预警。同一套想法,适配两个平台: pi CLI 与 DeepSeek Harness(DSH) 。

deepseek-idesign
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。