dsh-GotoFile:把本轮改动文件列成纯文本,双击在资源管理器里定位

前言

在 DSH 桌面端里跑一轮对话,模型往往会通过 write、edit 等工具改一批文件。官方界面会在对话末尾给出「已编辑文件」一类的卡片,但清单主要留在浏览器里:要整段复制绝对路径、到系统资源管理器里选中某个文件,通常还要再手动翻一遍。

dsh-GotoFile 是社区维护的 DSH 客户端插件(维护者 SouthernSibyl)。它复用同一套「本轮改动」信息,在对话结尾渲染成可选中、可复制的纯文本行;双击路径即可在本机文件管理器中打开或定位文件。下面介绍它的能力边界、安装方式与安全口径。

这是什么

一句话:DSH plugin —— 以纯文本列出本轮对话产出或修改的文件,双击路径在操作系统文件管理器中定位(Linux 行为见下文)。

核心功能

对话结尾的文本报告

报告不是 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。

  1. 默认留空:仅放行会话工作目录与家目录内路径;其他位置在报告中仍会列出,但双击打开会返回 404。
  2. 可填盘根,例如 D:\、F:\(也接受 D:,会规范为盘根)。
  3. 家目录下部分凭据类目录默认不放行(如 AppData、Library、.ssh、.aws 等);确有需要可写入白名单显式授权。
  4. 系统盘特征目录(根下存在 Windows / System / etc 等)会被自动拒绝;白名单根会做 realpath 逃逸检查。

权限与安全

插件以当前 DSH 桌面端进程权限运行;安装前建议自行查看源码与 MIT 许可证。

  • 会话:只读工具事件中的工具名与路径参数,不读对话正文,不改会话数据,不落盘。
  • 文件:对报告路径做存在性检查;「打开」经 execFile 调用系统文件管理器,不经 shell,不执行文件内容。
  • 网络:不联网,无遥测;三条本机 API 路由均校验同源(Origin 端口须与 Host 端口一致)且只接受 application/json 请求体。

典型用法

  1. 安装并挂载插件后,正常在桌面端完成一轮会改文件的对话。
  2. 在对话末尾查看文本报告,用「复制全部」把路径贴到笔记或脚本里。
  3. 双击某一行绝对路径,在 Windows / macOS 上于文件管理器中选中该文件;在 Linux 上为用默认程序打开文件。
  4. 若文件在外置盘或网络盘,先在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye