我反复碰到的问题
我通过浏览器界面使用 DeepSeek Harness。我经常让 Agent 查看本机文件,或者进入某个本地目录继续处理。
路径就在 Finder 里。我选中文件并按下 Cmd + C,回到 DSH 输入框却得不到绝对路径。我还得选择“拷贝为路径名称”、打开终端,或者手动输入路径。
每种办法都会在“找到文件”和“让 Agent 使用文件”之间多加一步。我一天要重复很多次。
/Users/you/code/my-project/src/index.js
Finder 与浏览器之间的边界
Finder 会在 macOS Pasteboard 中写入原生文件引用列表,不会把绝对路径写成普通剪贴板文本。AppKit 通过 NSFilenamesPboardType 暴露这份列表。
DSH 输入框运行在浏览器里。浏览器的安全规则阻止网页把复制的文件转换成本机绝对路径。没有这条规则,任意网页都能探知我的文件系统结构。
DSH 从未收到这条路径。macOS 把文件引用留在 Host 侧,浏览器无法直接读取。
Finder
└─ macOS Pasteboard:原生文件列表
╳ 浏览器文件系统边界
DSH Web 输入框
└─ 需要一段纯文本绝对路径
我想要的快捷键
我只需要增加一个快捷键,同时保持普通粘贴不变:
- 在 Finder 中选中一个或多个文件、文件夹,按 Cmd + C。
- 回到 DSH Web。
- 按 Ctrl + V。
- 把绝对路径逐行插入当前草稿。
Cmd + V 继续粘贴普通文本。剪贴板里没有文件路径时,插件忽略 Ctrl + V。
我的解法:Host 读取,Client 写入
我写了 dsh-paste-path,一个面向 macOS 和 DSH Web profile 的插件。Host 读取 Pasteboard,Client 写入输入框。
1. 在 Host 侧读取原生 Pasteboard
Host 插件通过带 AppKit 的 osascript 读取 NSFilenamesPboardType。Finder 可以一次复制多个文件。插件会返回路径列表,也接受每一行都是绝对路径的纯文本。
插件提供两个本地接口。第一个检查当前是否有可用路径,第二个在我按下快捷键后返回路径。Host 记录 Pasteboard 的 change count;剪贴板没有变化时,它复用上一次结果。
2. 在 DSH Client 侧写入路径
Client 扩展检测到有效路径后,显示“Ctrl+V 贴路径”。我按下快捷键,它把新路径追加到当前输入框,并跳过重复路径。
我把这个快捷键限定在文件路径场景。其他剪贴板内容仍由浏览器处理。
Finder Cmd+C
↓
macOS Pasteboard
↓ osascript / AppKit
127.0.0.1 上的 DSH Host 插件
↓ 同源请求
DSH Web 输入框
↓ Ctrl+V
草稿里的绝对路径
剪贴板接口只允许本机访问
剪贴板属于运行 dsh web 的机器。插件只接受 loopback 请求,并在写入路径前检查请求来源。
- Host 返回路径字符串,文件内容留在原处。
- Host 拒绝来自非 loopback 地址的剪贴板请求。
- 插件在 Linux 和 Windows 上不会注册接口。
- 远程 DSH 需要文件上传或客户端配套程序。
另一台机器上的 DSH 进程无法读取我这台 Mac 的剪贴板。SSH 端口转发会让请求在服务器看来像 loopback,但不会把我的剪贴板带过隧道。
安装
这个插件已经发布到 npm:
dsh plugin --profile web add dsh-paste-path
安装后重启 dsh web 并刷新页面。源码、实现说明和当前限制都在 GitHub 仓库中。
只做路径粘贴
操作系统知道文件路径,浏览器不能把它暴露给任意网页。我主动触发粘贴时,本地 Agent 才得到这条信息。
我保留了浏览器边界,只为一个快捷键增加 loopback 桥接。插件读取路径文本,把它写进草稿,然后停止。