鱼皮AI导航
鱼皮AI导航
  • 主页
  • 社区
  • AI工具
  • AI知识库
  • AI提示词
  • MCP
  • Skills
  • AI学习资源
  • AI资讯
  • GitHub开源
登录/注册

dsh-tool-markdown

HTML↔Markdown 转换、GFM 表格规范化、目录生成。

文档渲染
访问 GitHub
文档README

dsh-tool-markdown

English

DSH Markdown 工具插件 —— HTML↔Markdown 转换、GFM 表格规范化、目录生成。零依赖、纯函数、手写轻量解析器。

动机

模型最常见的文档场景:用户贴一段 HTML(网页源码、邮件、导出文件)、贴表格要求整理、或要求"转成 markdown"。没有工具时模型只能硬编码处理——HTML 实体会错、表格会乱、网页噪音(导航/脚本/广告)会混入。本插件提供确定性转换,与 dsh-tool-csv 互补:csv 管结构化表格,markdown 管文档/网页。

安全模型

  • 零依赖:手写递归下降 HTML 解析器(不引入 cheerio/jsdom——净增数十 MB 且是攻击面)
  • 零执行面:不 eval、不 new Function、不加载远程资源、不解析 CSS 布局
  • 内容剥离:script/style/iframe/object/noscript 内容整体剥离(安全 + 噪音)
  • md2html 白名单:只输出 p h1-h6 ul ol li blockquote pre code a img strong em br hr table thead tbody tr th td;文本一律 HTML 转义——markdown 内嵌 <script> 只会显示为文本
  • 链接 scheme 白名单:http/https/mailto;javascript:/data: 链接降级为纯文本
  • 资源上限:嵌套深度 64 层报错(防栈溢出);输入 maxBytes 默认 256KB、硬顶 1MB(超限报错不截断)
  • 工具参数会记入会话日志,不要传入含密钥/会话数据的 HTML

工具声明

注册 markdown 工具(@deepseek-ai/dsh-tool-markdown,row id tool-markdown),统一输出文本。

参数类型必填说明
actionstring✅html2md / md2html / table / toc
htmlstringhtml2md 输入(片段或完整文档)
markdownstringmd2html/toc 输入
textstringtable 输入(HTML <table> 或管道分隔文本)
baseUrlstring相对 href/src 解析基准(naive join)
maxBytesinteger输入上限,默认 256000,硬顶 1000000

Actions

action功能
html2mdHTML → GFM Markdown:块级/行内全映射、表格转 GFM(colspan 占位补齐)、实体解码、script/style 剥离、链接 scheme 过滤(不做 readability 正文选择,nav/header/footer 默认透传)
md2htmlMarkdown → 白名单安全 HTML:全文本转义,无标签可逃逸
tableHTML <table> 或含未转义 | 的管道分隔文本 → GFM 表格(列补齐、| 转义、分隔行识别;无管道输入报错)
tocMarkdown 标题 → 嵌套目录列表(简化 GitHub 风格锚点:重复标题自动 -1/-2 后缀、跳过代码围栏内伪标题)

示例

▼
text
复制代码
markdown { action: "html2md", html: "<h1>标题</h1><p>你好 <b>世界</b></p>" } → # 标题\n\n你好 **世界** markdown { action: "md2html", markdown: "[x](javascript:alert(1))" } → <p>x</p> ← javascript: 链接降级为纯文本 markdown { action: "table", text: "a|b\n1|2" } → | a | b |\n| --- | --- |\n| 1 | 2 | markdown { action: "toc", markdown: "# 标题一\n## 小节" } → - [标题一](#标题一)\n - [小节](#小节)

边界行为

情况处理
未闭合标签EOF 自动闭合(与浏览器方向一致);<p> 中遇块级自动关闭
大小写标签/属性名归一为小写
注释/DOCTYPE/CDATA剥离
实体命名 + 数字实体解码;未知实体按字面保留(&amp;lt; → &lt;,不二次解码)
嵌套列表li 只被新 li 关闭——嵌套 ul/ol 合法(2 空格/层缩进)
空白行内折叠为单空格;pre/code 原样保留
表格首行(thead th 或首行 td)为表头;colspan=N 补 N-1 个占位单元格
深度 > 64 层markdown: HTML nesting exceeds 64 levels
输入超限markdown: <label> exceeds N bytes(不截断)
md2html 内嵌 HTML原样转义为文本,绝无白名单外标签输出

npm 0.1.0-rc.8 兼容(已验证)

本插件已迁移到 npm 0.1.0-rc.8 依赖线,并在 @deepseek-ai/dsh@0.1.0-rc.8 的隔离 consumer 中完成全链路验证:

  • 类型/运行时:@deepseek-ai/cordis@^4.0.1 + @deepseek-ai/dsh-tools@>=0.0.1-rc.1 <0.2.0 + @deepseek-ai/dsh-invariants@>=0.0.1-rc.1 <0.2.0(peer);不再依赖 unscoped cordis
  • 独立构建:npm install(devDependencies 自包含 typescript/vitest/@types/node)→ npm run typecheck → npm test → npm run build → npm pack
  • 消费验证:tarball 装入 0.1.0-rc.8 consumer → dsh --profile compat --dump-config 出现本插件 row → 工具真实注册与执行通过
  • 启动方式:npx -p @deepseek-ai/dsh@0.1.0-rc.8 dsh web(lib 生产模式;勿 install -g 全局安装)

安装

插件源码仓库:https://github.com/omdsh-dev/dsh-tool-markdown(public)。

Profile Bundle(推荐)

将本插件作为独立 bundle 安装到 profile(DSH 0.1.0-rc.8,npm):

▼
sh
复制代码
# 交互式(web)profile dsh plugin --profile web add github:omdsh-dev/dsh-tool-markdown # 一次性任务(headless)profile —— dsh run 默认使用 headless dsh plugin --profile headless add github:omdsh-dev/dsh-tool-markdown

包内 dsh.bundle.patch 会在安装后自动把插件加入 profile 的 layer stack(row id:tool-markdown)。

⚠️ web 与 headless 是不同 profile:web 安装不会自动覆盖 headless;dsh run 默认使用 headless profile。

npm pack tarball 安装

▼
sh
复制代码
npm pack # 生成 dsh-tool-markdown-*.tgz dsh plugin --profile web add ./dsh-tool-markdown-*.tgz dsh plugin --profile headless add ./dsh-tool-markdown-*.tgz

验证安装

▼
sh
复制代码
dsh --profile web --dump-config | grep tool-markdown

运行验证

▼
sh
复制代码
dsh run "使用 markdown 工具把 <h1>标题</h1> 转成 Markdown"

手动安装与旧版本兼容

仅适用于不支持 Profile Bundle 的旧快照或插件开发调试环境(本地 junction/symlink、手动编辑 profile 层)。

测试

▼
bash
复制代码
node <monorepo>/node_modules/vitest/vitest.mjs run tests
  • html.spec.ts:解析器边界(嵌套/未闭合/大小写/自闭合/注释/script 剥离/实体/畸形属性/深度守卫)
  • html2md.spec.ts:块级与行内映射全表、表格(colspan/表头/转义)、scheme 过滤、baseUrl
  • md2html.spec.ts:白名单结构 + 安全(内嵌 script 转义、javascript: 降级、引号转义)
  • table.spec.ts:HTML/管道输入、列补齐、\| 转义;toc.spec 目录与 slugify
  • register.spec.ts:注册契约(AUDIT-CROSS-02 风格)

许可

MIT

文档渲染

快捷安装

复制到终端去安装插件

dshplugin--profilewebaddgithub:omdsh-dev/dsh-tool-markdown

温馨提示

装插件等于在本机跑第三方代码,权限与你相同,能读文件、用凭据、访问网络,工具审批管不到。请只装可信来源,并尽量锁定 commit。

站长:程序员鱼皮 老鱼简历 商务合作 增值电信业务经营许可证
2026 鱼皮AI导航 | 沪ICP备19026706号-6
站长:程序员鱼皮 老鱼简历 商务合作 增值电信业务经营许可证
2026 鱼皮AI导航 | 沪ICP备19026706号-6
🔥热门工具
朱雀AI检测朱雀AI检测
朱雀AI检测助手朱雀AI检测助手
LovartLovart
老鱼简历老鱼简历
WritePass官网WritePass官网
面多多面多多
CursorCursor
星月写作星月写作
零感AI零感AI
墨得问题墨得问题
dsh 插件推荐
dsh-markdown-reader
在独立全屏阅读器中渲染工作区 Markdown 文件,支持 GFM、KaTeX、Mermaid、目录导航、文件更新同步以及浏览器打印和 PDF 导出。
dsh-xia-plugins#packages/gameassist-knowledge
树状 Markdown 知识库:为 DSH Agent 提供 kb_list/kb_read/kb_write 工具、目录/正文 HTTP 接口,并配套浏览器面板。
dsh-workbuddy-ppt
在 DSH 中使用包内编排 Skill、确定性 PPTD 场景检查和原生 PowerPoint 对象生成可编辑 PPTX,并在本地交付 PPTD 源项目。
dsh-industry-research
面向 DeepSeek Harness 的确定性行业研究报告:公司与行业研究流程基于分阶段证据产出结构化、可核验的报告。
dsh-outline-auto
在 DSH 对话中搜索、读取并安全读写用户自己的 Outline 知识库文档,写操作受白名单保护与审批约束。