zhaohongxuan/dsh-weread:把微信读书搬进 DeepSeek Harness

前言

如果你用 DeepSeek Harness(dsh)多个智能体或长期在 dsh 界面里工作,想顺手看一眼自己今天读了什么、去年今天划过哪句话,就得在浏览器和微信读书之间来回切。已有的做法是在微信读书 App / 网页里看,或者把数据导出到别的工具;前者不在 dsh 里,后者要手动同步。

zhaohongxuan/dsh-weread 是一个原生的 dsh Web 插件,由 zhaohongxuan 维护,解决的是「微信读书的书架、划线笔记、阅读统计进 dsh 界面」这件事:左边栏加一个「微信读书」入口,里面是今日阅读、回顾、书架、年度书墙、统计五个标签页,并可用 dsh 内置模型生成 AI 总结。仓库按 MIT 协议发布,当前版本 0.3.0,GitHub 上 77 stars、5 forks(截至 2026-11-06)。社区目录页将其归入「联网工具」。

下面介绍这个插件。

功能概览

插件的核心能力分五块,都能在 dsh 界面里直接看到:

  1. 今日:当日阅读/收听时长、今天读过的电子书、当日划线与想法、旧句重逢(随机回看一句过去的划线)。
  2. 回顾:按划线和个人想法的创建日期展示笔记日历,支持直跳月份、选日期、搜书名/作者/内容、筛划线/想法,还有「那年今日」。
  3. 书架:封面网格,搜索、筛选、排序,显示真实阅读进度。有两种数据源,可切换书架接口与笔记接口,书架模式下文件夹与书混排,文件夹用内部封面拼成缩略图,还支持文件夹页与有声书(专辑)。
  4. 年度书墙与统计:按月份拼封面墙,一年一张,年份可切换;全年日常热力图(可切年份)、分类环形图、24 小时时段钟、偏爱作者/出版社、阅读最多、年度趋势。
  5. AI 总结:单本总结、划线主题分析、书架阅读画像,走 dsh 的 ctx.llm 流式输出,复用 dsh 已配置的模型,不需要额外密钥。

所有微信读书请求都在宿主侧发出,浏览器只访问同源 /api/weread/*;认证只有 API Key,不依赖 Cookie。

架构

插件是 dsh 的双半侧结构,浏览器侧是个 React 经典脚本 bundle,挂 sidebar.panellist 图标和 main 面板;宿主侧是 Node ESM 的 Cordis 插件,负责路由、微信读书网关调用、解析、缓存和 AI。

浏览器 (React 经典脚本 bundle)
  └─ sidebar.panellist 图标 + main 面板  ── fetch('/api/weread/*')
宿主 (Node ESM, Cordis plugin)
  ├─ routes.ts       /shelf /bookshelf /book /chapters /highlights /reviews
  │                  /journal-cache /journal-notes /stats /heatmap /settings /auth /ai
  ├─ weread/gateway  微信读书 Agent Gateway 客户端(Bearer Key · undici + 可选代理)
  ├─ weread/parse    原始响应 → DTO
  ├─ store/cache     LRU + TTL + 请求单飞
  ├─ store/journalCache  按账号 JSON 缓存 + 24 小时增量同步 + 断点恢复
  └─ ai/             ctx.llm.stream 流式总结

两点值得注意:一是 API Key 只存在宿主侧 $DSH_HOME/storages/dsh-weread/config.json(权限 600),浏览器侧只能看到 wrk-****1234 这样的掩码;二是笔记不用数据库,按账号隔离存成 JSON 缓存,刷新页面和重启 dsh 后都能复用。

对宿主环境的要求来自 package.json:node ^22.19.0 || >=24.0.0,dsh >=0.2.0-rc.2,浏览器 bundle 侧 @deepseek-ai/cordis ^4.0.4 为 peerDependency。

安装与启用

安装走源码拉取 + 构建 + 链接到 profile,没有 dsh plugin add git... 这类一键命令。前提是 DSH_HOME 已配置(README 给的例子是 /volume2/docker/dsh/home),profile 为 web。

git clone https://github.com/zhaohongxuan/dsh-weread.git
cd dsh-weread
npm install --cache ./.npm-cache      # 本机全局 npm cache 属 root 时需换目录
npm run build                         # 产出 lib/index.js + lib/client.js
bash scripts/link-profile.sh web      # 等价 dsh plugin --profile web add --save-prod file:$PWD

然后打开 dsh Web GUI → 设置 → 插件 → 打开 dsh-weread → 刷新页面,左侧栏就会出现「微信读书」入口。

安装前建议先确认插件运行在 dsh 当前进程的权限下,并检查 config.json、proxy 之类的写入位置是否符合你的预期。

配置 API Key

插件用微信读书的 Agent Gateway Key,不在插件界面里填。步骤:

  1. 打开 dsh 全局设置 → 微信读书。
  2. 访问 https://weread.qq.com/api/skills/apikeyGet(已登录微信读书时直接返回 apikey),复制粘贴到输入框。
  3. 点「保存并校验」,显示已授权即可。

如果提示「网络出口被风控拦截(403)」而 Key 本身有效,说明当前出口 IP 被微信读书限制,可以在 config.json 的 proxy 字段配置能访问微信读书的代理。

书架数据源与缓存行为

设置页的「书架数据源」开关决定书架标签页读哪一份数据,默认书架模式:

模式 接口 内容
书架模式(默认) /shelf/sync 书架上的全部书、文件夹(书单)、有声书(专辑);文件夹与书混排
笔记模式 /user/notebooks 只列出有笔记的书,带笔记/想法数量,可按分类与阅读年份分组

几点实际使用上的差别:

  • 切换后要点面板右上角的 ⟳ 刷新才生效,选择持久化在 $DSH_HOME/storages/dsh-weread/config.json。
  • 「有笔记」筛选和笔记角标只在笔记模式出现,因为书架接口不返回每本书的笔记数。
  • 有声书卡片不可点击:albumId 和 bookId 是两个 id 空间,书籍详情页取不到专辑数据。
  • 默认每 24 小时自动同步一次;进入页面直接读缓存,过期后保留旧内容并在后台同步,「今日/回顾」共享同一次同步。首次跨书笔记按每批 6 本扫描,逐批显示进度;退出页面不中断宿主同步,失败保留已缓存内容并可重试。
  • 日期跟随浏览器本地时区,阅读时长跟随微信读书上游的日级统计分桶,跨时区使用时两者的日期边界可能不同。

适用场景与注意

适合已经在 dsh 里工作、同时用微信读书做个人阅读记录的人,尤其是想在一个界面里完成「今天读了什么 → 回顾旧划线 → 年度书墙 → 让模型总结」这条链路的场景。

需要注意的几点:插件以 dsh 当前进程权限运行,会读写插件数据目录、保留 API Key、访问微信读书接口,安装前应检查源码与 MIT 许可证;AI 总结依赖 dsh 侧已配置的模型(默认 provider=magpie、model=workbuddy/deepseek-v4.1-flash),不是插件自己带模型;回顾日历只表示有笔记的日期,不代表这些日期的完整阅读流水;今日书单只覆盖当前书架可识别的电子书,不能据此推算每本书当天的阅读时长。

结尾

这个插件的价值在于把微信读书的个人数据接进 dsh 界面,并顺手用 dsh 的模型做总结,配置只有 API Key 一项。需要自己构建链接,适合愿意看源码、能接受源码级安装方式的用户。

  • 目录页:https://www.skillhub.cn/plugins/zhaohongxuan/dsh-weread
  • GitHub:https://github.com/zhaohongxuan/dsh-weread
羽毛球分组比赛记分
小程序二维码

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

小夜