npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@stonehao/dsh-drop-to-path

v0.1.0

Published

Drop or paste images, PDFs, office docs, zips, videos and audio into the DSH composer as workspace file paths instead of model attachments — lets a text-only model agent read them via vision tools.

Readme

dsh-drop-to-path

来源 —— 本插件最初来自 loudMore/dsh-drop-to-path(MIT),现在由 dsh-plugins 按自己的节奏维护和发版,不再跟随上游。当前适配 dsh 0.2.0-rc.2;本仓库做的每一次适配都记在 ADAPTING.md,该文件同时列出了本插件依赖的 dsh 未公开内部接口。本 README 其余部分沿用上游原文。MIT 要求保留版权与许可声明,这一条不随维护方变化。

把图片、PDF、Office 文档、压缩包、视频、音频拖入或粘贴进 DeepSeek Harness,它们就会以工作区文件路径的形式送到纯文本模型面前:图片保留原生附件体验(预览/移除),其他文件显示为附件栏里的方块标签,点击发送时路径自动附加进消息。

English | 中文

dsh-plugin

演示

完整操作流程

拖入图片、PPT、TXT、ZIP → 附件栏出现文件方块(与图片缩略图并排)→ 点击发送 → 模型收到工作区文件路径

效果展示

效果:图片与文件以工作区路径送达纯文本模型,配合 vision / 文档工具即可读取。

为什么做这个

我在 DeepSeek Harness 里用纯文本模型(deepseek)写代码,需要经常把截图发给 Agent 看。但 DSH 的图片附件走模型原生附件通道,纯文本模型会在发送前被预检拦下,输入框直接弹出系统提示:

当前模型不支持图片,请切换支持图片的模型

DSH 发送图片附件时的系统报错

底层是宿主的图片准入预检(attachment-error):

Model "deepseek-v4-flash" does not support image input.

配合 dsh-vision-toolkit 可以解决"看图"的问题——但它的工具只认工作区文件路径,图片必须以路径形式进入消息。于是每次看图都要:截图 → 存到工作区 → 手动把地址写进消息。非常笨重。而除了图片之外,DSH 根本不允许把 PDF、Office 文档、视频等任何非图片文件作为附件发送。

在另一个工具里体验过"粘贴即用"之后,我决定把这个体验搬回 DSH:附件 UI 完全保持原生,图片和文件只在点击发送的瞬间转换成路径。于是有了这个插件。

工作原理

flowchart LR
    A["粘贴 / 拖入"] --> B{"文件类型?"}
    B -->|"图片<br/>png / jpg / webp / gif"| C["原生附件卡片<br/>预览 / 移除"]
    C --> D["点击发送"]
    D --> E["上传 → workspace/.drops/"]
    E --> F["消息转为纯文本路径"]
    F --> G["纯文本模型用 vision / 文档工具处理"]
    B -->|"其他文件<br/>pdf / docx / xlsx / 视频…"| H["附件栏方块标签<br/>格式图标 · ✕ 移除"]
    H --> D
  • 图片准入预检(dsh-host-apiproxy 的 attachment-error)被绕过:发送时根本没有 image 块,模型收到的全是文本。
  • 添加文件时不会往输入框写任何路径——路径在点击发送时才自动附加,和图片转换完全一致。
  • 上传失败绝不静默:弹出可见提示说明原因,再回退到原生发送,消息不会丢失。
  • 支持粘贴与拖入;图片、文件、混合批次都按顺序上传,以一段路径文本一次送达。

支持的文件类型

| 类型 | 扩展名 | 上限 | 体验 | |---|---|---|---| | 图片 | png jpg jpeg webp gif | 30MB | 原生附件卡片(预览/移除),发送时自动转路径 | | 文档 | pdf doc docx xls xlsx ppt pptx txt md csv json | 100MB | 附件栏方块标签(格式图标、hover 显全名、✕ 移除),发送时附加路径 | | 压缩包 | zip | 100MB | 同上 | | 视频 | mp4 mov webm mkv avi | 100MB | 同上 | | 音频 | mp3 wav flac m4a | 100MB | 同上 |

图片保持原生附件体验;非图片文件 DSH 本身不允许作为附件发送,本插件把它们变成附件栏方块,发送时自动附加路径——不需要预览,Agent 拿到路径后可用 PDF/文档解析等工具处理。

DSH 附件仅支持这些图片格式

与 dsh-vision-toolkit 配合(推荐搭配)

🎯 强烈推荐搭配 dsh-vision-toolkit 一起使用——它是纯文本模型的眼睛,本插件是传送带:

  • 本插件解决"图片或文件怎么变成路径"(发送时自动转换);
  • dsh-vision-toolkit 解决"路径怎么变成视觉能力"(图片问答、长截图 OCR、UI 还原、目标定位、像素对比等 10 个结构化视觉工具,已适配 DSH Credentials / 托管运行时 / Web Settings)。

安装:dsh plugin --profile web add <dsh-vision-toolkit 路径>(详见其仓库 README)。两者配合,纯文本模型即可获得接近多模态模型的看图体验。

| 场景 | 之前 | 现在 | |---|---|---| | 看图问答 | 截图 → 存工作区 → 手写路径 | 截图 → Ctrl+V → 回车 | | 多图对比(pixel diff) | 同上,每个路径手写 | 发两张图即可 | | 长截图 OCR / UI 还原 | 同上 | 发图即可 | | 分析 PDF / xlsx / 视频 | 拷进工作区,手写路径 | 直接拖入,发送即可 |

同类插件对比

  • dsh-drag-and-drop:拖放文件→直接在输入框插入原始路径,不复制文件。适合"引用工作区已有文件";图片仍会以附件形式发送(纯文本模型下仍会被拒),且不支持粘贴。
  • 本插件:保留原生附件 UI(预览/移除),自动把图片和文件复制到工作区、发送时转成路径,支持粘贴与拖入,非图片文件以可移除的方块标签显示在附件栏。专为"发图发文件给纯文本模型"设计。

两者互补:引用已有文件用 dsh-drag-and-drop,发送截图和新文件用本插件。

安装

前置:DeepSeek Harness(Web profile),Node.js,dsh CLI。

# 方式一:dsh plugin 安装(推荐)
# 注意 <包名>@file:<路径> 的写法,单独给路径是不行的
dsh plugin --profile web add "@stonehao/dsh-drop-to-path@file:<本目录的绝对路径>"

# 方式二:手动
# 1. package.json 的 dependencies 加:
#    "@stonehao/dsh-drop-to-path": "link:<本目录的绝对路径>"
# 2. dsh.profile.bundles 数组加: "@stonehao/dsh-drop-to-path"
# 3. 将目录(含 lib/)复制到 profiles/<name>/node_modules/@stonehao/dsh-drop-to-path

在本仓库内请直接用仓里的工具,不必手动:npm run plugin install dsh-drop-to-path --profile web --apply。

安装后重启 Web profile(双击启动器 / 重启 dsh web)生效。无任何设置项。

使用

  1. 像平时一样粘贴或拖入图片,附件卡片照常显示(可预览、可叉掉);
  2. 拖入或粘贴其他文件(pdf / office / zip / 视频 / 音频)——附件栏出现带格式图标的方块标签,与图片缩略图并排(hover 显示全名,✕ 移除);
  3. 输入文字(可选)后发送 —— 不发送任何附件;图片和文件被上传,工作区路径自动附加进消息;
  4. agent(配合 dsh-vision-toolkit)用 vision_glance / vision_pixel_diff 等读取图片,用 PDF/表格工具处理文档。

文件保存在 <workspace>/.drops/ 目录,可定期清理。

文件结构

dsh-drop-to-path/
├─ package.json        bundle 声明(dsh.bundle.patch / dsh.client)
├─ cordis.patch.yml    挂载行(insert drop-to-path)
├─ lib/
│  ├─ index.js         host:POST /_dsh/drop-to-path/import 路由
│  └─ client.js        browser:拦截 + sendSession 包装 + 方块标签
├─ assets/             演示 GIF、效果拼接图、social preview、报错截图
├─ README.md
├─ README.zh.md
└─ ADAPTING.md         升级适配指南(必读)

实现要点

  • host 侧(lib/index.js):注册 webServer 服务路由 POST /_dsh/drop-to-path/import,接收 { name, dataBase64 },校验(扩展名白名单;图片 ≤30MB、其他文件 ≤100MB;Unicode 安全文件名清洗防路径穿越),写入会话工作区 .drops/,返回 { ok, value: { path, kind } }。
  • 工作区定位:读取 $DSH_HOME/storages/workspace.json(durable workspace registry),取 updatedAt 最新的 workspace 路径。
  • browser 侧(lib/client.js):
    • 纯图片拖放完全放行原生流程(附件栏 + 蒙版关闭);
    • 含非图片文件的拖放/粘贴被拦截:按顺序上传、渲染方块标签,并派发合成 dragend 关闭 DSH 全屏拖拽蒙版(页面不会卡住);
    • 在 conversation.sendSession 的原型上包装(实例重建也不失效):发送时把图片附件和文件队列一起上传,路径与你的文字合并为一条消息;
    • 方块标签尺寸实时测量图片缩略图大小(默认 62px),带格式图标/配色;MutationObserver 保证 React 重渲染后标签不丢;
    • 发送成功后标签自动清空;上传失败弹出可见提示并回退原生发送,消息不会丢失。

兼容性

| DSH 版本 | 状态 | |---|---| | 0.1.0-rc.6(本仓库验证环境) | ✅ 可用 |

本插件依赖 DSH 若干未公开的内部接口(服务名、方法签名、存储格式),DSH 升级后可能失效。升级前请先阅读 ADAPTING.md,失效症状与修复步骤都在里面。

贡献与适配

  • 问题/想法:GitHub Issues。
  • DSH 升级后插件失效:对照 ADAPTING.md 的症状表排查修复,并在适配记录表追加一行。

许可证

MIT