🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

本地 RSS 阅读器 BitDG/dsh-rss-reader

DeepSeek Harness
BitDG63 天前有提交已提供中文文档扫描:含敏感能力

订阅中文源,标注文章并归档到 Obsidian

28.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add BitDG/dsh-rss-reader
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · search
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/07·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 63 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 36 处,展示前 35 条)
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:133
    const manifest = JSON.parse(await readFile(resolve(profileDirectory(runtime), 'package.json'), 'utf8')) as ProfileManifest
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:185
    const manifest = JSON.parse(await readFile(resolve(root, 'node_modules', ...packageName.split('/'), 'package.json'), 'utf8')) as PackageManifest
  • 请求外部主机registry.npmjs.org
    packages/codex-ui-rss-host/src/dependency-manager.ts:226
    const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/${tag}`, { signal: AbortSignal.timeout(5_000) })
  • 发起网络请求
    packages/codex-ui-rss-host/src/dependency-manager.ts:226
    const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}/${tag}`, { signal: AbortSignal.timeout(5_000) })
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:294
    source = await readFile(path, 'utf8')
  • 写入本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:300
    if (next !== source) await writeFile(path, next, 'utf8')
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:309
    source = await readFile(path, 'utf8')
  • 写入本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:315
    if (next !== source) await writeFile(path, next, 'utf8')
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:401
    const parsed = JSON.parse(await readFile(pendingPath, 'utf8')) as { packages?: unknown }
  • 写入本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:415
    await writeFile(pendingPath, `${JSON.stringify({ packages }, undefined, 2)}\n`, 'utf8')
  • 读取本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:421
    const parsed = JSON.parse(await readFile(pendingPath, 'utf8')) as { packages?: unknown }
  • 删除本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:426
    await unlink(pendingPath)
  • 写入本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:429
    await writeFile(pendingPath, `${JSON.stringify({ packages }, undefined, 2)}\n`, 'utf8')
  • 写入本地文件
    packages/codex-ui-rss-host/src/dependency-manager.ts:445
    await writeFile(manifestPath, `${JSON.stringify(manifest, undefined, 2)}\n`, 'utf8')
  • 执行外部命令固定命令
    packages/codex-ui-rss-host/src/dependency-manager.ts:481
    const killer = spawn('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    packages/codex-ui-rss-host/src/dependency-manager.ts:554
    const child = spawn(process.execPath, [...pluginExecArgv(), entry, 'plugin', '--profile', runtime.profileName, ...args], {
  • 读取本地文件
    packages/codex-ui-rss-host/src/workspace-preferences.ts:40
    const preferences = parseWorkspacePreferences(JSON.parse(await readFile(path, 'utf8')))
  • 写入本地文件
    packages/codex-ui-rss-host/src/workspace-preferences.ts:62
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    packages/codex-ui-rss-host/src/workspace-preferences.ts:65
    await writeFile(temporary, `${JSON.stringify({ version: WORKSPACE_PREFERENCES_VERSION, pinnedWorkspaceIds: normalized }, undefined, 2)}\n`, 'utf8')
  • 写入本地文件
    packages/codex-ui-rss-host/src/workspace-preferences.ts:66
    await rename(temporary, path)
  • 删除本地文件
    packages/codex-ui-rss-host/src/workspace-preferences.ts:68
    await rm(temporary, { force: true }).catch(() => undefined)
  • 发起网络请求
    packages/rss-reader/src/fetcher.ts:26
    const response = await fetch(url, { redirect: 'manual', headers, signal: combined })
  • 读取本地文件
    packages/rss-reader/src/obsidian.ts:36
    const vault = await realpath(resolve(settings.obsidianVaultPath))
  • 读取本地文件
    packages/rss-reader/src/obsidian.ts:37
    if (!(await stat(vault)).isDirectory()) throw new Error('Obsidian Vault 不是目录')
  • 写入本地文件
    packages/rss-reader/src/obsidian.ts:41
    await mkdir(folder, { recursive: true })
  • 读取本地文件
    packages/rss-reader/src/obsidian.ts:42
    const realFolder = await realpath(folder)
  • 读取本地文件
    packages/rss-reader/src/obsidian.ts:55
    const existing = await readFile(target, 'utf8')
  • 写入本地文件
    packages/rss-reader/src/obsidian.ts:65
    await writeFile(temporary, markdown, { encoding: 'utf8', flag: 'wx' })
  • 写入本地文件
    packages/rss-reader/src/obsidian.ts:67
    try { await rename(temporary, target) }
  • 删除本地文件
    packages/rss-reader/src/obsidian.ts:70
    await unlink(target)
  • 写入本地文件
    packages/rss-reader/src/obsidian.ts:71
    await rename(temporary, target)
  • 删除本地文件
    packages/rss-reader/src/obsidian.ts:74
    await unlink(temporary).catch(() => undefined)
  • 写入本地文件
    packages/rss-reader/src/store.ts:38
    if (path !== ':memory:') mkdirSync(dirname(path), { recursive: true })
  • 读取本地文件
    packages/rss-reader/src/store.ts:228
    const databaseBytes = this.path === ':memory:' || !existsSync(this.path) ? 0 : statSync(this.path).size
  • 读取本地文件
    packages/rss-reader/src/store.ts:228
    const databaseBytes = this.path === ':memory:' || !existsSync(this.path) ? 0 : statSync(this.path).size
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 订阅中文RSS源
  • 导出到Obsidian
  • 文章批注

本地优先 RSS 阅读器,为 DeepSeek Harness 提供中文源目录、Obsidian 导出、批注和 AI 文件引用

README

由 DeepSeek 最新模型翻译生成
DSH RSS 阅读器 面向 DeepSeek Harness Web 的本地优先 RSS 阅读器。它把订阅、阅读、标注、Obsidian 归档和 AI 文件引用放在同一套界面中,文章与标注默认保存在本机。 这是社区项目,不是 DeepSeek 官方产品。目前只发布 GitHub 源码,尚未发布 npm 包。 功能 - 读取 RSS、Atom、JSON Feed、RSSHub 地址,并支持网页 Feed 自动发现。 - 在设置页管理订阅、手动添加 URL、导入/导出 OPML。 - 内置 100 个中文科技、AI、开发与博客发现源,不会自动订阅。 - 使用 SQLite 保存阅读状态、收藏、标注与清理策略。 - 将文章和标注保存为 Obsidian Markdown。 - “发送给当前 AI”插入文件式引用,提交时再序列化文章,而不是把全文塞进输入框。 - 选中文本后支持高亮、笔记、复制和仅针对选区询问 AI。 订阅侧栏只负责切换频道和刷新;添加订阅、OPML 与发现目录统一放在设置页,避免重复入口。
展开完整文档(README 剩余 1 节)
DSH RSS 阅读器

面向 DeepSeek Harness Web 的本地优先 RSS 阅读器。它把订阅、阅读、标注、Obsidian 归档和 AI 文件引用放在同一套界面中,文章与标注默认保存在本机。

这是社区项目,不是 DeepSeek 官方产品。目前只发布 GitHub 源码,尚未发布 npm 包。

功能

- 读取 RSS、Atom、JSON Feed、RSSHub 地址,并支持网页 Feed 自动发现。
- 在设置页管理订阅、手动添加 URL、导入/导出 OPML。
- 内置 100 个中文科技、AI、开发与博客发现源,不会自动订阅。
- 使用 SQLite 保存阅读状态、收藏、标注与清理策略。
- 将文章和标注保存为 Obsidian Markdown。
- “发送给当前 AI”插入文件式引用,提交时再序列化文章,而不是把全文塞进输入框。
- 选中文本后支持高亮、笔记、复制和仅针对选区询问 AI。

订阅侧栏只负责切换频道和刷新;添加订阅、OPML 与发现目录统一放在设置页,避免重复入口。

仓库结构

| 目录 | 作用 | 许可证 |
| packages/rss-reader | RSS 服务、存储、API 与阅读器界面 | MIT |
| packages/codex-ui-rss-host | 为 Codex UI 提供 sidebar.feeds 插槽的兼容 Host | Apache-2.0 |

兼容 Host 基于 MichengAI/dsh-codex-ui v0.2.96 的 Apache-2.0 源码;精确版本和改动见 UPSTREAM.md。中文发现目录来自 fuxiaoai/tidings-rss 的 CC0-1.0 数据。完整说明见 THIRD_PARTY_NOTICES.md。

从源码安装

要求 Node.js 22.19+ 或 24+、Corepack,以及可正常运行的 DSH Web。

git clone https://github.com/BitDG/dsh-rss-reader.git
cd dsh-rss-reader
corepack pnpm install --frozen-lockfile
corepack pnpm verify

dsh plugin --profile web add ./packages/codex-ui-rss-host
dsh plugin --profile web add ./packages/rss-reader
dsh --profile web --dump-config

确认配置中已出现 codex-ui 与 dship-rss-reader 后,重启 DSH Web 并硬刷新浏览器。若使用的不是 web profile,请替换命令中的 profile 名称。

当前版本在 DSH 0.1.2-alpha.3 源码版本 dd6322d604e00eec1ba5e0c8541159906a21094a 上完成真实 Web 验收。文件引用 Chip 的悬浮删除能力由该 DSH 版本的会话输入组件提供,并不是本仓库对旧版 DSH 的补丁。

使用

1. 打开 DSH Web 左侧的“订阅”页签。
2. 在“设置 → RSS 阅读器”添加订阅、导入 OPML,或从“发现(100)”批量选择中文源。
3. 阅读文章时可收藏、保存到 Obsidian、发送文件引用给当前 AI,或选中文本添加标注。
4. 在“设置 → RSS 阅读器 → 存储与清理”调整数据库保留时间、每源文章上限、清理周期和 Obsidian 目录。

数据库默认位于 $DSH_HOME/rss-reader/rss.sqlite。收藏、已标注和已导出 Obsidian 的文章不会被自动清理。

开发与验证

corepack pnpm install --frozen-lockfile
corepack pnpm verify

verify 会依次执行两个包的类型检查、测试、构建和打包内容检查。提交前不要加入本地数据库、profile 配置、环境变量文件或 node_modules。

许可证

原创 RSS Reader 代码使用 MIT。兼容 Host 及其上游衍生代码使用 Apache-2.0。发现目录数据遵循上游 CC0-1.0。
预览分享卡片长什么样 ↓BitDG/dsh-rss-reader
分享 · DeepSeek Harness Hub
BitDG/dsh-rss-reader

订阅中文源,标注文章并归档到 Obsidian

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部