dsh-pathlink
在对话中 Ctrl+点击文件路径与链接:路径在文件管理器中定位所在文件夹,链接在新标签页打开。
安装
dsh plugin --profile web add dsh-pathlink
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-pathlink
[中文](README.zh.md) · [English](README.md)
在 DeepSeek Harness 对话里,Ctrl+点击文件路径与链接;把文件拖进输入框即得路径。
自动识别聊天消息(助手回复、用户气泡、代码块、工具卡片)中的文件路径和
URL,用淡淡的虚线下划线标记,Ctrl+点击(macOS 为 ⌘)即可打开:
- 路径 → 打开所在文件夹——在系统文件管理器中打开该文件所在的文件夹并
选中它(Windows explorer /select、macOS open -R、Linux 用 xdg-open
打开父目录);如果路径本身是目录,则直接打开目录。
- 链接 → 浏览器新标签页打开——覆盖渲染器未自动转成链接的裸 URL
(比如用户消息气泡里的);markdown 链接本身已在新标签页打开。
拖入 / 粘贴文件 → 直接把路径写进输入框(图片仍走原生附件,不受影响):
- 拖进来的文件在本机能找到 → 插入真实路径(如
D:\proj\src\a.ts); - 找不到原件(U盘、网络盘、未登记目录)→ 存一份副本到
%TEMP%\dsh-drops\
并插入副本路径,提示里会说明;
- 拖拽过程中不会弹出「图片拖动到此处」的全屏遮罩,也不会出现
「仅支持 PNG、JPG、WebP、GIF」的拒绝提示——安静地把路径放进输入框。
普通点击不触发任何行为,不会干扰选中、复制等操作。路径不存在时会弹出
toast 提示原因,而不是静默失败。
① 悬停路径显示 Ctrl+点击提示,点击后在文件夹中定位该文件 ·
② 真实对话中被识别的路径(虚线下划线)。
安装
dsh plugin --profile web add dsh-pathlink
或从 GitHub 安装:
dsh plugin --profile web add github:penguin-oo/dsh-pathlink
安装后重启 Web 界面生效。仅支持 web 配置档(点击面是浏览器)。
使用
1. 等消息渲染完成后,被识别的路径/链接会带虚线下划线。
2. 按住 Ctrl(macOS 为 ⌘)点击。
- 路径 → 资源管理器/Finder 打开所在文件夹并选中该文件。
- 链接 → 浏览器新标签页打开。
3. 相对路径先按该会话的工作目录解析,再按 Harness 进程目录解析;
路径不存在时弹出 toast 提示。
4. 把任意文件拖进输入框(或粘贴剪贴板里的文件):路径会插到光标处。
配置
键 · 默认值 · 含义
maxPathChars · 1024 · 接受的路径文本最大字符数
dropRoots · [] · 拖拽反查的额外检索根(优先于默认根)
dropMaxDepth · 6 · 单次检索的递归深度上限
dropBudgetMs · 2500 · 单次检索的时间预算
dropLimit · 10 · 单个根最多收集的匹配数
dropDir · '' · 存副本的目录;空 = %TEMP%\dsh-drops
检索根顺序:dropRoots → Harness 的 workspace 列表(自动采集)→
进程 cwd / 桌面 / 下载 / 文档。调试接口:GET /pathlink/drop/state。
实现原理
- 客户端(
dsh.client,platformweb):MutationObserver 驱动的扫描器
监视已渲染的对话容器(data-chat-flow / data-conversation-scroll),
在文本节点中识别路径与 URL,包成惰性行内 span,并用一个捕获阶段委托的
click 监听统一处理。刻意不使用官方 chatFileMentions 缝,避免与内置
deliverables 提供方冲突,同时保证所有表面(正文、行内代码、代码块、
用户消息、工具卡片)行为一致。
- 宿主端(
pathlinkRemote 服务):只读的open方法——按所指向会话的
工作目录解析相对路径、校验存在性、拉起平台文件管理器。无持久状态,不
创建/恢复任何 Agent 或 Session。
开发
npm install npm run build # 打包 src/client → lib/client.js npm run smoke # Remote 标记 + Typert 清单校验 node scripts/e2e-synthetic.mjs # 浏览器 E2E,目标 http://127.0.0.1:3738
docs/demo.html 由 node scripts/build-demo.mjs 构建(复用生产识别器),
截图用 node scripts/e2e-screenshot.mjs 生成。
限制
- 仅 Web 界面(点击面是浏览器);宿主打开器覆盖 Windows / macOS / Linux。
- 路径识别基于启发式:中文目录名可正常保留;若路径末段是裸英文单词
(无扩展名)且紧接英文正文,偶有过匹配——存在性校验会把这类误判挡在
「路径不存在」toast 里,不会打开错误的东西。
许可证
MIT
致谢
为 DeepSeek Harness 插件生态而作——感谢 LINUX DO
社区的反馈与测试。
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:9,最后更新 2026-10-10