vianvio/dsh-plugin-drop-path ↗★ 1

dsh-plugin-drop-path

支持将拖入的文件夹转换为本机绝对路径引用 适合需要快速向AI发送本地文件夹绝对路径而非上传附件的用户。

包名
dsh-plugin-drop-path
兼容性
待验证
版本
0.1.2
许可证
MIT
最近更新
2026年9月30日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:vianvio/dsh-plugin-drop-path

dsh-plugin-drop-path 📁

把一个文件夹拖进 DSH,输入框里出现的是它的绝对路径。

安装 · 它做什么 · 路径是怎么来的 · 已知边界 · 开发

npm · license · DSH

拖一个文件夹进 DSH,输入框里出现的是它的绝对路径

把一个文件夹从访达(Finder)/ 资源管理器拖进 DSH:输入框里出现的不是"又一条传不上去的附件", 而是一个 folder 形状的 @路径/ 引用块——模型拿到的就是那个文件夹的本机绝对路径, 你可以接着打字发送。

文件夹在上游的附件流程里本来没有出路(目录不是文件,上传拿不到东西),而其中最有用的恰恰是路径本身。

当前版本 0.1.2 · DSH 客户端插件 · 零运行时依赖

安装

dsh plugin --profile desktop add dsh-plugin-drop-path

--profile 填你实际在用的那个(桌面端是 desktop,Web 端是 web)。重启 DSH 生效—— 客户端半是启动时加载的。

这条命令背后是 pnpm:装完包之后,它会自动把声明了 dsh.bundle 的依赖加进 profile 的 dsh.profile.bundles——不用手改 package.json。

从哪装命令
npm(推荐)dsh plugin --profile desktop add dsh-plugin-drop-path
GitHub 最新提交(还没发版的改动)dsh plugin --profile desktop add github:vianvio/dsh-plugin-drop-path
本地目录(改代码即时生效,用来开发)git clone https://github.com/vianvio/dsh-plugin-drop-path.git ~/dsh-plugin-drop-path
dsh plugin --profile desktop add link:$HOME/dsh-plugin-drop-path

以后升级、卸载:

dsh plugin --profile desktop update dsh-plugin-drop-path
dsh plugin --profile desktop remove dsh-plugin-drop-path

它做什么

你拖进来的结果
一个文件夹抢下这次拖放,把它的绝对路径插进输入框
一个普通文件不碰,照旧走上游附件流程(图片 / 文件上传)
同时拖多个不碰(多选里有文件夹也不猜)

只有"恰好一个文件夹"才接管:猜错一次就会把文件吞掉,比少一个便利贵得多。 插进来的引用块另外放开了一点样式,让长路径显示完整(上游给引用块定了 240px 宽并省略号截断)—— 只改显示,不改发给模型的文本。

路径是怎么来的

  1. 在 window 捕获阶段接管。 上游附件插件挂在 document 冒泡上,而 window 捕获永远先到, 所以"谁先拿到这次拖放"不取决于插件的加载顺序。
  2. 路径来自桌面端的窄口桥(window.__DSH_DESKTOP_FILE_PATH__,即 Electron 的 webUtils.getPathForFile)。浏览器不给绝对路径;桥不在时明确说"读不到",而不是插一个假路径。
  3. 走上游的引用插入通道(slash/input-insert-reference)而不是整篇替换草稿:输入框是一棵 Lexical 文档,整篇替换会把已有的引用块降级成纯文本、还会丢光标。

机制细节、四个踩过的坑、以及怎么端到端验证,都记在 docs/notes.md。

已知边界

  • 只在 DSH Desktop 里拿得到路径。 在普通浏览器打开同一个界面时没有那座桥,会明说"读不到本机路径"。
  • 路径原样插入:不做存在性校验、不做 ~ 缩写、不做相对化——插进去的是给模型看的真路径, 缩写会让它在另一侧解释错。
  • 只接管"恰好一个文件夹"的那次拖放(见上表),其余一律让给上游附件流程。

开发

产物就在仓根、没有构建步骤:client.js 是页面按 `` 加载的经典脚本;index.js 是 宿主半(空 apply,只为让这个包在 Loader 里有一个条目,客户端产物才会被编进 __DSH_BOOT__)。

npm install
npm test          # 20 项:行为 15 + 发布契约 5

改完发版:npm version patch && npm publish,然后 git push --follow-tags (prepublishOnly 会在打包前先跑语法检查与测试)。