前言¶
在 DSH 桌面端里跑一轮对话,模型往往会通过 write、edit 等工具改一批文件。官方界面会在对话末尾给出「已编辑文件」一类的卡片,但清单主要留在浏览器里:要整段复制绝对路径、到系统资源管理器里选中某个文件,通常还要再手动翻一遍。
dsh-GotoFile 是社区维护的 DSH 客户端插件(维护者 SouthernSibyl)。它复用同一套「本轮改动」信息,在对话结尾渲染成可选中、可复制的纯文本行;双击路径即可在本机文件管理器中打开或定位文件。下面介绍它的能力边界、安装方式与安全口径。
这是什么¶
一句话:DSH plugin —— 以纯文本列出本轮对话产出或修改的文件,双击路径在操作系统文件管理器中定位(Linux 行为见下文)。
- 仓库:SouthernSibyl/dsh-gotofile
- 社区目录:SkillHub 插件页
- npm 包名:
dsh-gotofile(显示名可写作 dsh-GotoFile) - 许可证:MIT
- 引擎要求:
dsh>= 0.1.7,node>= 22
核心功能¶
对话结尾的文本报告¶
报告不是 Web 卡片,而是整段纯文本:可选中、可复制,右上角提供「复制全部」一键拷贝全部绝对路径。示例形态如下(路径为示意):
本轮产出 / 修改 3 个文件(双击路径在文件管理器中定位) [复制全部]
● 新 report.md — E:\workspace\project\docs\report.md 📂
● 改 index.js — E:\workspace\project\src\index.js 📂
● 改 old-config.yml — E:\workspace\project\old-config.yml (已不存在)
双击定位与正文里的路径¶
- Windows:通过
explorer /select,在资源管理器中选中该文件。 - macOS:通过
open -R在 Finder 中选中该文件。 - Linux:没有统一的「在文件管理器中选中」接口,
xdg-open只能打开文件本身(目录则打开该目录)。
除报告行外,对话正文里形如 `src/index.js` 的裸路径,或手动选中的一段路径,双击同样会走打开逻辑。纯键盘用户可对报告行按 Enter(行带 tabIndex)触发定位。
登记规则¶
插件只记录成功的写盘类工具调用:write、edit、str_replace_editor、ops_replace。失败或只读调用不会出现在清单里。本轮首次写入某路径标记为新,改动已存在文件标记为改。若文件已被外部删除,对应行显示「(已不存在)」并禁用双击。
子代理会话(origin === 'subagent')不参与登记。单轮文件数上限 maxFilesPerTurn 默认 200。
实现要点(便于判断是否够用)¶
宿主侧监听 session/event 中的 tool/call 与 tool/result 配对结果;可选地通过 workspaceChanges 的 summary 与官方含 git 的快照补漏。实现为两个源文件(宿主半 lib/index.js、浏览器半 lib/client.js),零额外构建步骤;仓库内 node --test 可跑 30 个单测。
安装与启用¶
安装前请先退出 DSH 桌面端:desktop profile 在桌面端运行时被独占,此时执行 dsh plugin 会被拒绝。
方式一:官方 CLI(推荐)¶
dsh plugin --profile desktop add dsh-gotofile
方式二:手动装进 profile¶
cd "$DSH_HOME/profiles/desktop"
pnpm add dsh-gotofile
装完后 package.json 的 dependencies 中应有 dsh-gotofile,且 dsh.profile.bundles 中有对应项(否则插件管理列表里可能看不到)。在同一 profile 的 cordis.patch.yml 末尾需有挂载片段(市场安装通常会自动写入):
- insert:
- id: goto-file
name: dsh-gotofile
修改 cordis.patch.yml 后需重启桌面端或重新加载 profile。挂载成功时,插件管理中应能看到 goto-file / dsh-gotofile,状态为 active。
配置:外置盘与白名单¶
在客户端 设置 → GotoFile 中配置,每行一个根目录(支持 ~/ 与 ~\),保存后立即生效,无需重启或改 YAML。
- 默认留空:仅放行会话工作目录与家目录内路径;其他位置在报告中仍会列出,但双击打开会返回 404。
- 可填盘根,例如
D:\、F:\(也接受D:,会规范为盘根)。 - 家目录下部分凭据类目录默认不放行(如
AppData、Library、.ssh、.aws等);确有需要可写入白名单显式授权。 - 系统盘特征目录(根下存在
Windows/System/etc等)会被自动拒绝;白名单根会做realpath逃逸检查。
权限与安全¶
插件以当前 DSH 桌面端进程权限运行;安装前建议自行查看源码与 MIT 许可证。
- 会话:只读工具事件中的工具名与路径参数,不读对话正文,不改会话数据,不落盘。
- 文件:对报告路径做存在性检查;「打开」经
execFile调用系统文件管理器,不经 shell,不执行文件内容。 - 网络:不联网,无遥测;三条本机 API 路由均校验同源(Origin 端口须与 Host 端口一致)且只接受
application/json请求体。
典型用法¶
- 安装并挂载插件后,正常在桌面端完成一轮会改文件的对话。
- 在对话末尾查看文本报告,用「复制全部」把路径贴到笔记或脚本里。
- 双击某一行绝对路径,在 Windows / macOS 上于文件管理器中选中该文件;在 Linux 上为用默认程序打开文件。
- 若文件在外置盘或网络盘,先在 GotoFile 设置里把对应根目录加入白名单,再双击。
适用场景与已知边界¶
适合:经常在 DSH 里让模型改代码或文档,需要在对话结束后快速复制路径列表,或一键跳到资源管理器里核对文件。
需注意:
- PTC / 单一
run_code模式:写文件可能藏在脚本里的tools.write/tools.edit字面量中;插件会解析脚本提取路径,变量路径或${...}模板会跳过(宁可漏报也不猜测)。pwsh重定向写出的文件仍可能只能靠官方快照补漏。 - 外部 shell 重定向、
git checkout等产生的改动不在登记簿内,非 git 工作区下可能完全看不到这类文件。 ops_replace的glob是模式而非展开后的路径,glob 命中文件依赖官方快照补漏。- SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态主张「一切皆插件」,本插件是其中一例客户端增强。
结尾¶
dsh-GotoFile 把「本轮改了哪些文件」从浏览器卡片里抽成可复制的纯文本,并把双击路径接到本机文件管理器;同时用同源校验、路径白名单和凭据目录默认拒绝降低误开敏感路径的风险。若你要在桌面端长期用它改仓库里的文件,建议结合白名单配置与 README 中的边界说明评估是否覆盖你的工作流。
- 目录页:https://www.skillhub.cn/plugins/SouthernSibyl/dsh-gotofile
- GitHub:https://github.com/SouthernSibyl/dsh-gotofile
- npm:https://www.npmjs.com/package/dsh-gotofile