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

dsh-mdvault

v1.2.4

Published

Workspace document vault for the dsh web GUI: a conversation '文档' tab with an all-type file tree (Markdown/PDF/HTML/code/Excel·CSV/images), full GFM rendering via the platform MarkdownText (tables, task lists, footnotes, KaTeX math, highlighted code fence

Readme

dsh-mdvault

npm license test

点开 Markdown 里的链接,直接就到达那个文件。

不是新开标签页跳到一个地址,而是就地打开:PDF 直接翻到指定页,图片直接显示,表格直接渲染,另一篇笔记直接跳过去。

dsh-mdvault 界面

dsh plugin --profile web add dsh-mdvault

DSH Web UI 的工作区文档库插件:在会话区新增一个 📄 文档 标签页,把当前工作区变成一个可浏览、可跳转、可编辑的"轻量 Obsidian"。

链接直达

这是本插件的核心能力。在文档里写下链接,点击即可到达:

| 你写的 | 点击后 | | --- | --- | | [[会议纪要]] | 打开同名笔记(全库范围查找) | | [说明](./docs/readme.md) | 跳转到另一篇笔记 | | [[报告.pdf#page=17]] | 打开 PDF 并直接翻到第 17 页 | | [设计图](./assets/plan.png) | 打开图片,可缩放、可拖拽 | | [统计表](../data/2026.xlsx) | 打开表格,多工作表切换 | | ![流程图](./img/flow.svg) | 在正文里直接显示图片 |

两套写法,各按各的规则解析(与 Obsidian 一致):

| 写法 | 相对谁解析 | | --- | --- | | [[双链]] | 工作区根目录;找不到时按文件名在全库范围匹配 | | [文本](./相对路径) | 当前打开的这篇文档;../ 可用 |

用 | 加别名,让链接显示得更自然:

[[报告.pdf#page=17|第 17 页]]      →  点击「第 17 页」,翻到 PDF 第 17 页
[[很长的笔记文件名|简称]]           →  链接文字显示「简称」

解析不依赖文件树是否收录了该文件 —— 目录再深、文件再多,只要在会话工作区内就能打开。

为什么单靠平台做不到? DSH 自带的 Markdown 渲染器只认 http(s):// 绝对地址,相对链接和 [[双链]] 会渲染成点不动的纯文本。而且平台给链接统一加了 target="_blank" —— 插件若只在组件内部拦截,链接一经重新渲染就失效,浏览器会新开一个空白标签页。本插件在 document 级捕获阶段拦截点击并 preventDefault(),所以链接是真正"就地打开"的,也永远不会误跳出页面。

其他功能

文件树

  • 全类型:Markdown / PDF / HTML / 代码 / 表格 / 图片,按类型用对应方式预览
  • 默认全部折叠:只展开当前文档所在的那条路径;工具栏 ⊟ 折叠 一键收起全部
  • 筛选框:输入关键字即时过滤,匹配时自动展开路径
  • 分类图标:📝 Markdown · 📕 PDF · 📗 表格 · 🖼 图片 · 🌐 HTML · 💻 代码

Markdown 预览

  • 完整 GFM:表格、任务列表、删除线、脚注、自动链接
  • 数学公式:$...$ / $$...$$,由 KaTeX 渲染
  • 代码高亮:围栏代码块带语法高亮与复制按钮
  • Mermaid 图表:```mermaid 直接画成图(按需加载,见下)
  • YAML frontmatter:预览时自动隐藏,编辑时保留原文

渲染直接复用 DSH 平台自身的 MarkdownText,所以效果与聊天区完全一致,并自动跟随浅色 / 深色主题。

各种文件的预览方式

| 类型 | 说明 | | --- | --- | | PDF | 取回字节包成 Blob 再交给浏览器原生阅读器,避免被当成下载;#page=17 跳页锚点会保留;工具栏提供下载 | | 图片 | 滚轮缩放、拖拽平移、复位、新窗口、下载;支持 png/jpg/gif/webp/svg/bmp/ico/avif | | HTML | 在无 allow-same-origin 的沙箱 iframe 中预览 —— 页面处于不透明源,拿不到 GUI 的会话数据 | | 代码 / 纯文本 | 只读查看,带语言提示与高亮 | | 表格 | 内置 SheetJS 解析 xlsx/xlsm/xls/csv/tsv,多工作表切换 |

大文件保护

代码 / 文本按体积分档,避免把大文件塞进渲染管线:

| 体积 | 行为 | | --- | --- | | ≤ 200 KB | 正常语法高亮 | | 200 KB – 2 MB | 纯文本显示(不高亮) | | > 2 MB | 不渲染,只提供「新窗口 / 下载」 |

在线编辑另有限制:超过 6 MB 的文本文件拒绝加载。

编辑

  • ✏️ 按钮进入编辑,Ctrl+S / ⌘S 保存写盘
  • 行号栏、Tab 缩进、脏数据标记(未保存时路径后显示 •)
  • 查找 / 替换:Ctrl+F 打开查找栏,Enter 下一个、Esc 关闭,支持替换与全部替换
  • 放弃修改前会确认,不会静默丢失改动

与聊天输入框的关系

切到 文档 标签时,底部输入框会自动隐藏,把整个窗口让给文档;切回 对话 自动恢复(草稿不会丢,只是被隐藏)。

工具栏的 ⌨ 输入框 按钮可以随时把它叫回来 —— 读文档时想顺手追问一句用得上。

与其他插件的关系

dsh-better-sidebar 是一个 VSCode 风格的侧边栏(终端 / Git / 浏览器 / 侧边对话等)。本插件把其中文件预览 / 编辑相关的能力搬到了主界面窗口:

| 能力 | dsh-mdvault(主窗口) | dsh-better-sidebar(侧边栏) | | --- | --- | --- | | Markdown 渲染 | ✅ 平台 MarkdownText | ✅ 平台 MarkdownText | | 链接直达 | ✅ 双链 + 相对链接 | — | | Mermaid | ✅ 按需加载 | ✅ 按需加载 | | PDF / HTML | ✅ Blob 预览 / 沙箱预览 | ✅ 同 | | 图片 | ✅ 缩放 / 平移 | 仅静态显示 | | 编辑器 | <textarea> + 行号 + 查找替换 | CodeMirror 6(更高阶) | | 终端 / Git / 浏览器 / 侧边对话 | ❌ 不在范围内 | ✅ |

两者可以共存,不冲突 —— 注册的 id 不同,渲染器各自独立。装了 dsh-better-sidebar 时,本插件还会额外提供:

  • 一个 Markdown 渲染器 mdvault-markdown,可在侧边栏设置里开关(同一套渲染,双链在侧边栏里也能跳)
  • 一个隐藏 Tab mdvault-pdf,用于侧边栏内的 PDF 跳页预览

未安装该插件时这部分自动跳过,不影响主界面任何功能。

安装

dsh plugin --profile web add dsh-mdvault

然后重启 dsh web。会话区顶部出现 📄 文档 标签页即成功。

安装后可在「设置 → 插件」里看到它,开关和版本号都在那里。

dsh plugin --profile web add [email protected]   # 指定版本
dsh plugin --profile web add /path/to/dsh-mdvault  # 从本地源码目录

环境要求

  • DeepSeek Harness(@deepseek-ai/dsh)web 部署,dsh >= 0.1.5-rc.1
  • 零依赖、零安装脚本:不会拉取任何 npm 包,安装时不执行任何代码
  • 无构建步骤:lib/ 是可直接运行的纯 JavaScript
  • 不需要外网:SheetJS 与 Mermaid 已内置在 dist/,用到时才按需加载

常见问题

标签页没出现? 空白的新会话不会显示顶部标签栏。打开一个已有内容的会话再看。

Mermaid 图表没渲染出来? Mermaid 库有 3.4 MB,只在文档里真的出现 ```mermaid 代码块时才会按需加载。第一次渲染会稍慢一下。

某个文件点不开? 请带上工具栏右端的构建号(形如 v1.2.4)反馈,它能确认你实际运行的版本。

文件树太窄或太宽? 拖动它与文档之间的分隔线即可调整,双击分隔线恢复默认宽度。分隔线可用键盘操作(聚焦后按 ←/→ 微调,Shift 加速,Home/End 到两端)。宽度会被记住。

历史对话显示的不是那个项目的文件? 正常情况下会自动定位到该对话当时的工作目录。若工具栏出现 ⚠ 非本会话目录,说明这个对话的目录没能读到,此时显示的只是部署默认目录。

卸载

dsh plugin --profile web remove dsh-mdvault

再重启 dsh web。

许可

MIT。dist/ 内打包的第三方库(SheetJS / Mermaid)许可见 LICENSE。