dsh-rss:DSH 的 RSS/Atom 订阅工具插件

前言

DSH(DeepSeek Harness)的插件生态强调「一切皆插件」。对智能体开发者来说,如果模型要读取外部资讯,常见做法是让模型或代理自行发 HTTP 请求、解析 XML、处理日期和相对链接。这些步骤本身不复杂,但容易在不同订阅源上出现不一致。

dsh-rss 把这些工作封装成 DSH 插件工具:管理订阅源,抓取并解析 RSS/Atom 条目,并支持 OPML 导入导出。

这是什么

dsh-rss 是 DSH 的 RSS/Atom 订阅工具插件。仓库 owner 为 STARDUSTLC666,仓库路径为 STARDUSTLC666/dsh-rss,许可证为 MIT

它在 @deepseek-ai/dsh@0.1.1-rc.2 上验证过(2026-08-26),运行时不 import 任何 @deepseek-ai/* 内部模块。

它解决的问题比较具体:给 DSH 中的模型提供一组可直接调用的 RSS/Atom 工具,减少手动拼装抓取、解析和订阅维护逻辑。

核心能力

下面介绍已核实的能力。

  • 订阅管理:rss_listrss_addrss_remove
  • 抓取解析:rss_fetch 抓取并解析订阅源;rss_check 校验地址;rss_search 跨订阅源按关键词搜索条目。
  • OPML:rss_opml_export 导出 OPML 2.0 文本;rss_opml_import 从 OPML 2.0 文本批量导入订阅源。
  • 自检:rss_health 提供插件自检,无参数。
  • 持久化:订阅列表保存在 settings 的 dsh-rss 命名空间 feedsYaml 字段中,rss_add / rss_remove 会自动读写并持久化。
  • 输出归一化:日期统一转 ISO 8601 UTC,原始文本保留在 pubDateRaw;相对链接按订阅源地址解析为绝对链接;摘要去 HTML 标签并截断到 500 字符;正文保留最多 20000 字符。
  • 安全边界:不解析 DTD/外部实体,内容只做文本抽取;响应体积上限 5MB;抓取超时默认 15000 毫秒。
  • 配置项:proxyUrltimeoutMsmaxBodyBytesuserAgentfeedsYaml

关于格式范围,README 概述提到 RSS 0.9x / 1.0 / 2.0 与 Atom;已核实的解析能力部分确认 RSS 2.0、RSS 1.0(RDF)和 Atom。RSS 0.9x 的具体支持范围在本次资料中未完全展开,接入前建议先用 rss_checkrss_fetch 验证目标源。

安装与启用

1、在目标 profile 中添加插件:

dsh plugin --profile web add dsh-rss

2、安装后重启 Web 服务。

如果需要移除:

dsh plugin --profile web remove dsh-rss

卸载后重启 Web 服务。如果之前在本 profile 的 cordis.patch.yml 中手动覆盖过插件行,可以再手动删除对应配置。

配置

插件可以缺省加载,也可以用配置覆盖默认值。在你自己的 profile 的 cordis.patch.yml 中,覆盖 id: rssname: dsh-rssconfig

- id: rss
  name: 'dsh-rss'
  config:
    timeoutMs: 15000
    # proxyUrl: http://127.0.0.1:7890
    # maxBodyBytes: 5242880
    # feedsYaml: |
    #   - url: https://example.com/feed.xml
    #     name: 示例订阅
    #     category: 技术

上面示例只做说明,不是必须配置。

  • timeoutMs:抓取超时,毫秒,默认 15000。
  • maxBodyBytes:订阅源响应体积上限,默认 5MB。
  • proxyUrl:给本插件抓取请求配置代理;只作用于本插件,不影响同进程其他插件。
  • feedsYaml:预置订阅列表,也可以用 rss_add 动态添加。
  • userAgent:自定义抓取 UA;如需使用,按仓库当前文档和实际包版本确认取值。

典型用法

下面按“校验、添加、抓取、搜索、导出导入”的顺序介绍。

校验与添加

rss_check { url: https://example.com/feed.xml }
rss_add { url: https://example.com/feed.xml, name: 示例订阅 }

rss_checkurl 必填。rss_addurl 必填,name / category 可选。

抓取与删除

rss_fetch { name: 示例订阅, limit: 10 }
rss_list
rss_remove { name: 示例订阅 }

rss_fetchurlname 至少提供一个,limit 范围 1-100,默认 20。rss_removeurlname 至少提供一个。

搜索与自检

rss_search { query: "DeepSeek", limit: 20 }
rss_health

rss_searchquery 必填,name / url / since / limit 可选。rss_health 无参数。

OPML 导入导出

rss_opml_export { path: subscriptions.opml }
rss_opml_import { opml: "<?xml version=\"1.0\"?>..." }

rss_opml_exportpath 可选;rss_opml_importopml 必填。

代理与存储

如果部分订阅源需要特殊代理才能连通,可以将 proxyUrl 配成本地代理地址,例如 http://127.0.0.1:7890,然后重启 Web 服务。代理只作用于 dsh-rss 的抓取请求,不影响同进程其他插件。

订阅列表保存在 settings 的 dsh-rss 命名空间(feedsYaml 字段)里。同名订阅建议用 url 区分;也可以用配置的 feedsYaml 预置初始列表。

适用场景与注意

适合在 DSH Web profile 中给模型接入 RSS/Atom 资讯源,尤其是需要统一解析、稳定抓取、批量导入 OPML 列表的场景。

使用前建议:

  • 插件以当前 dsh 进程权限运行。安装前应检查源码、依赖和许可证。
  • 已核实资料中依赖包括 fast-xml-parserschemasteryundiciyamlpackage.jsonengines 要求 Node >= 22,当前包版本为 0.3.0
  • 本插件只做 RSS/Atom 文本抽取,不解析 DTD/外部实体;不要用它执行脚本、渲染页面或处理任意二进制内容。
  • 如果抓取失败且提示需要代理,再考虑配置 proxyUrl
  • 仓库资料还列出发布前门禁:危险模式扫描、manifest 自检、pnpm audit --prod、全量测试,以及全新 profile 的真实启动冒烟测试。

相关入口

GitHub:https://github.com/STARDUSTLC666/dsh-rss

目录页:已核实资料中未提供可直接给出的目录页 URL;DSH 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

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

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

小夜