dsh-dead-links: Markdown 文档死链检查工具

前言

在 DSH(DeepSeek Harness)的插件化生态中,构建智能体时经常需要处理大量的文档内容。如果文档中的外部链接失效,会降低用户体验,甚至影响代理的检索准确性。dsh-dead-links 插件解决了这一问题,它注册了一个 dead_links 工具,用于对 Markdown 文档进行死链扫描。

插件概况

  • 名称:dsh-dead-links
  • 功能:Markdown 文档死链检查工具
  • 维护者:ZhijiangTang
  • 分类:联网工具
  • 许可证:MIT
  • 核心特点:纯 ESM、零依赖、无构建、只读不改任何文件

核心功能

该工具通过 node:fs 递归遍历目录,利用 Glob 模式筛选 Markdown 文件(默认 **/*.md),并使用正则提取其中的 HTTP(S) 链接。随后,它会并发检查这些链接,并返回结构化的 JSON 结果。

具体能力包括:
1. Markdown 文档死链扫描:识别文档中的无效链接。
2. 递归遍历与筛选:支持指定目录和 Glob 模式(如 **/*.md)。
3. 智能检查策略:优先使用 HEAD 请求;遇到 405 (Method Not Allowed) 或 403 (Forbidden) 或网络错误时,自动降级为 GET 请求。
4. 并发控制:默认并发数为 5,可通过参数调整(1-10)。
5. 结果结构化:返回包含文件名、行号、URL、状态码或错误信息的 JSON 数据。
6. 去重机制:同一个 URL 只发起一次请求。

安装与启用

使用 DSH 插件管理命令安装:

dsh plugin --profile <name> add dsh-dead-links

使用方法

调用 dead_links 工具时,可以通过以下参数配置扫描范围与策略:

  • dir:扫描目录,默认为 docs(相对于工作区根目录)。如果目录不存在,工具会回退到根目录 . 并在结果中注明。
  • glob:文件匹配模式,默认为 **/*.md。
  • concurrency:并发请求数,范围 1-10,默认 5。
  • timeoutMs:单条请求超时时间(毫秒),默认 10000。

输出示例

工具返回一个规范 JSON 值。当 ok: true 时,包含扫描统计与死链详情:

{
  "ok": true,
  "dir": "docs",
  "filesScanned": 12,
  "linksFound": 58,
  "linksChecked": 33,
  "dead": [
    {
      "file": "guide.md",
      "line": 42,
      "url": "https://gone.invalid/x",
      "status": 404
    },
    {
      "file": "api.md",
      "line": 7,
      "url": "https://nx.invalid/",
      "status": null,
      "error": "getaddrinfo ENOTFOUND …"
    }
  ],
  "durationMs": 2345,
  "truncated": false,
  "note": "…"
}

当 ok: false 时(通常发生在目录不可用),返回如下结构:

{
  "ok": false,
  "error": {
    "stage": "fs",
    "message": "…"
  }
}

注意事项

  1. 权限要求:运行该插件需要 filesystem:read(读取文件)和 network:outbound(发起网络请求)权限。
  2. 依赖项:插件依赖以下 DeepSeek AI 的核心包:@deepseek-ai/cordis、@deepseek-ai/dsh-tools、@deepseek-ai/dsh-llm。
  3. 异常处理:网络类异常会被折叠进规范值(status: null + error 字段),不会导致程序抛出异常中断。
  4. 只读操作:插件仅读取文件内容,不会修改或写入任何被扫描的文件。

总结

dsh-dead-links 提供了一种轻量级、零依赖的方式来维护文档健康度。它通过结构化输出将检查结果反馈给智能体或开发者,适合集成到文档更新或定期巡检的流程中。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜