DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
R

@openbook/dsh-rss-reader

Rss Reader

OpenBook RSS 阅读器作为 DeepSeek Harness UI 插件:RSS 同步、三栏阅读视图、笔记/高亮、智能体工具和聊天命令

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:rocklau/dsh-rss-reader#b07ec656f6ae232b1c82d7ee8a4c9fca03ed5510
README兼容性版本

兼容性与来源证明

Rss Reader 以 @openbook/dsh-rss-reader 发布,当前版本为 0.1.0-rc.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/8/24

版本

0.1.0-rc.2prerelease
2026/8/24
查看其余 1 个版本收起版本
0.1.0-rc.1prerelease
2026/8/21

相关插件

正在加载相关插件…

最新版
0.1.0-rc.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/30
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 search-research 分类下经过校验的插件。

Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:27 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com 无需密钥;通过 MCP 支持 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek(官方 + 原生工具/搜索)/Baidu/Kimi/Aliyun/Douba)Ab Wechat Scrapedsh-ab-wechat-scrape--- description: "树外 wechat_scrape 工具:获取微信公众号文章,过滤推广区块,并将每篇文章保存为 Markdown 文件,供此机器的 dsh 配置文件维护者使用。" kind: "package-reference" ---Arisdsh-arisARIS research-workflow 技能作为 DeepSeek Harness 捆绑包:包含 82 项技能,以及通过 Codex 进行的跨模型对抗性审查。Ab Market Researchdsh-ab-market-research一个树外 DeepSeek Harness 插件:将 trade_search 工具(多轮扩展方面的查询规划、出版商级别排序、来源多样性、JSON 快照)及其浏览器卡片集成在一个包中。

README

OpenBook RSS Reader — a DeepSeek Harness UI plugin

中文

OpenBook is a local-first RSS reader and knowledge collector, rebuilt as a DeepSeek Harness (dsh) plugin. Everything — feed sync, article materialization, notes/highlights, activity timeline, chat commands, and the three-column reading UI — runs inside the dsh plugin runtime as native Cordis services.

Package@openbook/dsh-rss-reader
Host runtimeNode ^22.19 || >=24, dsh >=0.1.0-rc.8
LicenseMIT

查看图片

One click on the sidebar 📡 shortcut lands straight on the RSS tab; discussing an article pushes it into the conversation and switches back to Chat.

What it gives you

A single RSS surface: the RSS tab in the session view ring (a conversation.view entry). It is a three-column reader with a feed sidebar, per-day article queue with date navigation, full-text reading, favorites, and note-taking, plus Notes (activity-driven waterfall) and Status (sync statistics, activity stream) tabs. A lightweight sidebar 📡 shortcut jumps straight to the RSS tab — opening a non-blank session first when needed — so there is one reader with one obvious way in, and no competing docked panel.

Reading and chatting work together:

  • Ambient awareness — opening an article injects it into the session's agent context (agent.inject), so the model knows what you are reading without a chat round-trip.
  • Discuss this article — quick actions (总结 / 翻译 / 提取要点) plus a free-form question push the article into the conversation (agent.followup), then the view automatically switches back to the Chat tab so you see the reply. Selecting text first attaches it as a highlighted passage.
  • Sync nodes — each sync run renders as one compact card in the chat flow (rss/sync conversation node), driven by durable session events.

Discussing an article pushes it into the conversation and switches back to Chat

The same functionality is available to the agent:

  • Tools the model can call: rss_list_feeds, rss_sync, rss_search, rss_read_article, rss_materialize, rss_save_note, rss_export_review, plus the agent-readable book_index, book_recent, book_article, book_search.
  • Chat commands (the legacy cli.js surface, mapped 1:1): /feeds, /read, /search, /recent, /notes, /favorites, /stats, /open, /materialize, /sync, /export-review, /review, /activity, /book, /doctor.

Installation

As a dsh bundle (recommended)

The package ships a pre-built client bundle in lib/ and declares dsh.bundle + dsh.client, so it installs with the plugin CLI. Grab the tarball from the latest release and add it (no npm account needed):

dsh plugin add https://github.com/rocklau/dsh-rss-reader/releases/download/v0.1.0-rc.1/openbook-dsh-rss-reader-0.1.0-rc.1.tgz

This injects the openbook-rss row into your profile's composition; the browser plugin is served from lib/client.js. A local checkout works the same way: dsh plugin add ./dsh-rss-reader.

# or from npm (once published)
dsh plugin --profile web add @openbook/dsh-rss-reader

# then just start the web UI
dsh web

dsh plugin add installs the package into the web profile and, because the package declares dsh.bundle, adds it to the profile's bundle list automatically. No other configuration is needed.

Development (no install)

npm install
npm run build          # esbuild bundles + tsc declarations
dsh web --patch ./cordis.patch.yml

The overlay in cordis.patch.yml inserts the plugin into the running web profile. The client half (the RSS view tab) is picked up automatically from the package's dsh.client declaration.

Tests

npm test               # unit suites (node --test)
npm run test:e2e       # real-composition e2e; needs DSH_SOURCE_DIR

The e2e boots a real dsh web composition and invokes the rssApi endpoints over the same transport the browser uses. Point it at a DeepSeek Harness source checkout:

DSH_SOURCE_DIR=/path/to/deepseek-harness npm run test:e2e

Configuration

All options are validated at load and overridable from a patch overlay:

# cordis.patch.yml
- id: openbook-rss
  config:
    dataDir: ~/.dsh/openbook-rss/v1     # sqlite + markdown + notes + index.json
    allowPrivateFeeds: false            # SSRF guard: block DNS private ranges
    startupSync: true                   # warm sync at boot
    startupSyncLimit: 50
    feedMinSyncIntervalMs: 120000
    feedHeadCheck: true                 # HEAD validator before conditional GET
    feedHeadTimeoutMs: 3000
    fetchConcurrency: 4
    fetchIntervalCap: 10                # requests per rate window
    fetchIntervalMs: 1000
    defaultFeeds: [{ url: "...", name: "..." }]
    opmlFiles: []                       # absolute OPML paths imported at boot

Data model

The plugin keeps OpenBook's three-state local persistence under dataDir:

  • openbook.db — SQLite (feeds, fetch cache, sync state/log, articles, article state, notes, activity log), WAL mode, migrations in src/db/schema.ts.
  • articles/YYYY/MM/*.md — materialized articles with YAML front matter (title, url, feed_url, published_at, fetched_at, source).
  • notes/YYYY/MM/*.md — notes/highlights keyed by article_id.
  • index.json — compact grep-friendly feed/article index.

Article ids are sha256(feedUrl::guid|link|title) (stableId), so rows are idempotent across syncs. Materialization is deduplicated by normalized URL and serialized with in-flight joins. Image assets are localized into <article>-assets/ with MD5-hash dedupe (downloadResources).

Fetch pipeline

Memory cache → per-feed min-interval skip → HEAD validators (ETag / Last-Modified) → conditional GET (304) → SQLite BLOB fallback. All requests run through a shared rate-limited queue with exponential-backoff retry on 429/5xx; feed URLs are SSRF-checked at the DNS level (private ranges blocked unless allowPrivateFeeds: true).

Development

npm run typecheck       # host + client faces
npm test                # build + node --test (no network required)

Layout:

src/        host side (Node) — plugin entry, Cordis services, tools, commands, db, rss engine
client/     browser side (React) — reading view, notes/status tabs, sync conversation node
cordis.patch.yml   bundle overlay for dsh web --patch
legacy/     the pre-refactor Express codebase, archived

The host entry (src/index.ts) constructs six Cordis services: rssStore (database + repositories + fetch queue), rssFeed (feeds + reader engine), rssArticle (queries/materialization/state/notes), rssActivity (timeline + review export), rssSync (warm sync state machine), and rssApi (the Typert Remote surface the client calls). The client mounts the matching TypertRemoteContribution (hand-written in client/remote.ts), registers the conversation.view tab, and registers the rss/sync conversation node with its chat renderer.

Mapping from the legacy OpenBook

LegacyPlugin
Express server + routesCordis services + Typert Remote API
public/ three-column UIconversation.view tab (React)
cli.js commandschat slash commands (/feeds, /book, /export-review, …)
book * --jsonbook_* tools + /book
RSSReader + queue + cacheRssReader service (same layered cache)
data/ layoutsame layout under dataDir (default ~/.dsh/openbook-rss/v1)