vianvio/dsh-plugin-drop-path ↗★ 1
dsh-plugin-drop-path
DSH 文件夹拖拽:把一个文件夹拖进 DSH,输入框里显示它的绝对路径(@路径/ 引用块),而不是被当成附件上传。 适合需要快速向AI发送本地文件夹绝对路径而非上传附件的用户。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:vianvio/dsh-plugin-drop-pathREADME
Read the full README ↗dsh-plugin-drop-path 📁
把一个文件夹拖进 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 宽并省略号截断)—— 只改显示,不改发给模型的文本。
路径是怎么来的
- 在
window捕获阶段接管。 上游附件插件挂在document冒泡上,而 window 捕获永远先到, 所以"谁先拿到这次拖放"不取决于插件的加载顺序。 - 路径来自桌面端的窄口桥(
window.__DSH_DESKTOP_FILE_PATH__,即 Electron 的webUtils.getPathForFile)。浏览器不给绝对路径;桥不在时明确说"读不到",而不是插一个假路径。 - 走上游的引用插入通道(
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 会在打包前先跑语法检查与测试)。