freespace8/dsh-plugins--plugins-dsh-at-file ↗★ 0
dsh-at-file
Codex 风格 @ 路径引用:在 Web GUI 输入框输入 @ 搜索当前工作区的文件与文件夹并引用其路径;host 只在发送时校验并标记所选路径,不读取文件内容。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:freespace8/dsh-plugins#0c78441f1ff5002ffd06fd0ba9328a3ff00d8fb2&path:plugins/dsh-at-file说明文档
阅读完整 README ↗dsh-at-file
Codex 风格的 @ 路径引用插件(DeepSeek Harness Web GUI)。在输入框输入 @ 会弹出当前工作区文件/文件夹选择器,选中后把可读的 @路径 token 落进草稿;发送前 host 只在 agent/pre-step 校验所选路径确实存在于工作区,并向模型注入一条仅存在性引用:
插件只传递路径,不读取文件内容,也不展开目录后代——是否、如何检查引用由 agent 用当前会话的既有工具决定。
本包是 dsh-at-file(MIT)思路的独立实现:host/client 双面、免构建纯 ESM、所有逻辑可读可改。线契约用 zod,设置用 schemastery。
功能
@触发选择器:文件名/路径段排序、目录优先;菜单候选单行显示,弹窗宽度与输入框一致、文件名完整显示不截断(目录路径紧跟其后用剩余空间);选中后把完整的@相对路径文本落进草稿,并渲染成输入框内带背景边距的可变宽 pill,多个选择以自然空格分隔。- 真实文本、零状态:草稿里就是可读的
@路径,pill 只是测量 mirror 后画的装饰层——可变宽、不截断、不重叠、上下左右都留出边距(不超过所在行);选中作用于普通文本。 - 整体删除:确认选择(菜单已关闭)后,caret 在某个
@路径内、紧贴它、或停在它后面的分隔空格上时,按一次退格/Delete 就整体删掉整个引用(选完路径后按一次退格即删,无需按两次),且不会弹出@选择列表;其余位置照常逐字符编辑。@菜单还开着(正在输入过滤词、未回车确认)时,退格/Delete 不拦截,逐字符删减过滤词,菜单实时刷新。 - 发送时 host 校验路径存在性并把引用标记进模型可见输入;提交文本与草稿逐字一致。
- 设置页 设置 → 文件提及:启用开关、全局文件过滤规则(Exact / Regex,可独立大小写)。
- 内置忽略列表:常见版本控制、IDE 元数据、依赖树、缓存与构建产物目录;全部可在配置里覆盖。
安装
dsh plugin --profile web add file:/Users/taylor/working/github.com/freespace8/dsh-extensions/plugins/dsh-at-file
安装后重启 dsh web(host 与浏览器 client 同时加载)。卸载:
dsh plugin --profile web remove dsh-at-file
使用
在会话输入框输入 @:菜单候选单行展示,弹窗宽度与输入框一致,文件名完整显示不截断,目录路径紧跟其后(同名文件靠目录区分);菜单开着时退格/Delete 逐字符编辑过滤词。选择一条结果:它变成带背景的 pill(宽度贴合完整 @相对路径 并留出至少 2px 边距,上下也各留 2~3px、不超出所在行),多个 pill 以自然空格分隔、互不重叠,长路径完整显示不截断;确认选择后(菜单关闭),caret 在某个 pill 内、紧贴它或停在它的分隔空格上时,按一次退格/Delete 就整体删除它(不弹 @ 列表),其余位置照常逐字符编辑。要继续在某目录内找文件,直接输入 @目录/(如 @src/)作为过滤词再选即可。
配置
覆盖任意字段只需在 profile 的 cordis.patch.yml 里按 id 覆盖 config: