gavindiazandClaude Code 5febc02099 fix: 阅读器改回 epubjs 原生分页 + 首渲重试 + 连续选取开关
scrolled-doc 对大书不稳(依赖点目录、下一页只在框内、卡死),且一次性
渲染大量章节导致 about:srcdoc / unload 报错刷屏。改回原生分页:

- renderTo 用 default manager + flow paginated + spread none,只渲染当前页
- 翻页回到 rendition.prev()/next(),用 relocated 的 atStart/atEnd 控按钮
- 阅读位置从 scrollTop 改为 location.start.cfi 持久化;兼容旧的数字/JSON 格式
- 保留首渲重试:display 后轮询 iframe 正文,3 次失败才报「正文渲染失败」
- 新增「连续选取」开关:flow scrolled-doc ⇄ paginated,按当前 CFI 重定位,
  连续模式下翻页先滚视口、到边界再翻章节
- 导航防卡死:display/prev/next 加 8s 超时,失败后复位 epubjs 队列,
  并在跳转前用 spine.get 校验目标,避免过期 CFI 把队列拖死
- .epub-viewport 改 overflow hidden,分页滚动交给内部 .epub-container

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-27 00:54:19 +08:00

BookMate

基于 FastAPI 和 Next.js 的 AI 读书助手。支持 EPUB 导入、围绕书籍内容对话、原文引用和完整 EPUB 网页阅读。

本地启动

后端(Python 3.12):

cd backend
python -m venv .venv
.venv/Scripts/python.exe -m pip install -r requirements.txt
Copy-Item .env.example .env
.venv/Scripts/python.exe -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

在 .env 配置模型 API,或启动后在网页的模型管理中添加模型。数据库和上传目录会自动创建。未配置向量服务时使用关键词检索。

另开终端启动前端(Node.js 20.9+):

cd frontend
npm ci
npm run dev

访问 http://localhost:3000。前端默认连接 http://localhost:8000/api。

阅读与对话

导入 EPUB 后,在书架或聊天页面点击「阅读全书」。阅读器支持目录、翻页、字号调整,以及在当前浏览器保存阅读位置。选中文字后可将原文带入 AI 聊天输入框。

MCP 外部工具

侧栏底部「MCP 服务」可添加远程 MCP 服务器(Streamable HTTP / 老式 SSE),配置 URL 与请求头(如 Authorization)。启用后,对话 AI 可调用其暴露的外部工具(如 Firecrawl 的搜索 / 抓取)获取书中没有的信息,回答时注明外部信息来源。工具调用过程会在流式回答中显示。配置会保存在 mcp_servers 表;模型需原生支持 function calling(OpenAI 兼容协议)才会启用工具循环。

验证

cd backend
.venv/Scripts/python.exe -B -m unittest test_book_file
cd frontend
npm run build

本地 .env、模型凭据、数据库、上传书籍和构建产物不纳入版本控制。

S
Description
No description provided
Readme
620 KiB
Languages
Python 48.6%
TypeScript 44.7%
CSS 6.1%
Dockerfile 0.5%
JavaScript 0.1%