Repository navigation
v2026.0.7
会员权益
- 新增权益「每月 PDF 导出次数」(默认不限):用完后当月不能再导出 PDF,可作为会员权益提升;游客导出仍由书籍的「允许游客导出」控制。
- 新增权益「私有书籍数量」(默认不限):新建私有书、把公开书改为私有,以及导入、复制、采集、翻译新建的私有草稿都会校验;公开书籍不受限,可把私有空间作为会员权益。
- 新增权益「每章可查看的历史版本数」(默认不限):版本历史只显示最近的若干版本,更早的仍然保存、只是隐藏,并提示隐藏数量,放宽后即可查看和恢复,不会丢失历史。
- 新增权益「语义搜索」(默认开):关闭后站内搜索只提供关键词结果,可把语义搜索作为会员专享;书籍与章节的相关推荐不受影响。
- 新增权益「个人存储空间」(默认不限):上传、Markdown 导入的图片与外链图片本地化保存的文件合计计入;新增「我的文件」页查看用量、每个文件被使用的位置,并可删除(同时从本地、S3 或七牛存储中删除)。本功能上线前上传的文件不计入。
- 新增权益「自定义导出页脚」(默认开):关闭后导出文件的页脚固定为「Powered by 站点名」,可把去除站点标识作为会员权益;导出设置页会相应提示。
会员增长:兑换码、礼品卡、优惠券、试用与邀请奖励
- 会员管理新增「兑换码」:可批量生成一次性卡密(可导出 CSV 分发),或创建一个多人可用的推广码(可自定义码值并限制总次数);每批指定方案、天数与可选的截止时间。
- 用户在「我的会员」输入兑换码即可开通或续期,不区分大小写、可省略分隔符;同一批次每人只能兑换一次,并发兑换不会超出次数上限。
- 整批或单个兑换码可随时停用;输错次数过多会暂时限制兑换,防止穷举;兑换记入会员流水(来源「兑换码」)。
- 新增会员礼品卡:方案的每档价格旁可「送人」,付款后在「我的会员 → 我的礼品卡」得到一个兑换码,复制发给对方即可开通;被兑换后通知购买者,也可自己兑换。
- 礼品卡订单退款并撤销时:未兑换的按退款比例缩短天数、全额退款则作废;已兑换的按比例从兑换者的会员中扣回。
- 新增会员优惠券:管理员可创建折扣(如 8 折)或满减(如满 100 减 20)优惠码,限定适用方案、是否可用于礼品卡、仅限首次开通会员的用户、总次数与每人次数、生效与截止时间。
- 结算页可输入优惠码,实时显示优惠后价格;下单时占用次数,支付后确认,订单取消或过期后自动归还;订单详情、我的订单与后台订单显示优惠金额。
- 新增会员免费试用:方案可设置试用天数,从未开通过会员的用户可在「我的会员」领取一次(默认需先验证邮箱,可在会员设置中关闭);试用中显示「试用」标记,到期前提醒与到期通知使用试用专属文案。
- 试用期间购买同一方案,剩余试用天数会累加到新的有效期中;试用不影响「仅限首次开通」的优惠券。
- 新增会员邀请奖励:沿用站点邀请码,好友通过邀请链接注册并首次购买会员后,邀请人与好友都获得会员天数(默认 30 天与 7 天,可配置);可选在好友验证邮箱后奖励邀请人。奖励加在当前会员方案上,不会更换已有方案。
- 每位邀请人每月获得奖励的次数有上限(默认 10 次,超出后好友仍获奖励);触发奖励的订单退款并撤销时按比例扣回双方的奖励。「我的会员」显示邀请规则、邀请链接与已获得的奖励,后台可查看全部奖励记录。
会员自动续费
- 「我的会员」新增「自动续费」:为当前方案选一档时长开启续费计划。到期前会提醒一键续费,通知链接直达该时长的结算页,并替代普通的到期提醒;方案下架、时长删除或更换方案时自动关闭并通知。
- 为支付渠道的签约扣款预留了中性的周期扣款接口:渠道开通签约后,到期前一天自动扣款续期,失败每天重试、共 3 次,仍失败则提醒手动续费。后台会员列表标记开启了自动续费的会员。
付费内容
- 书籍付费设置中「免费阅读的内容访问等级」改为下拉选择「哪些读者免费阅读」,选项直接列出会员方案(如「专业版」会员)和成长等级(如「Lv3」及以上),由管理员在方案与等级中设置的内容访问等级生成,不再需要填写数字。
- 付费墙与书籍付费信息改为显示「「专业版」会员可免费阅读本书」,替代原来的访问等级数字。
- 修复试读可能超出设置比例的问题:原来按空行分段整段截取,整章只有一段(或首段很长)时会给出全文或远超比例的内容;现在按字数精确截断,尽量停在句末并以「…」结尾,代码块中截断时自动补齐结束标记。
开放平台
- 新增个人访问令牌:在账号设置「访问令牌」中生成,供脚本、持续集成以
Authorization: Bearer kf_pat_…调用 API;权限可选「全部权限」,或按资源逐项勾选(如书籍·查看、章节·创建,提供「全部只读」「全选」快捷选择),自定义令牌只能调用所选权限对应的接口、未登记权限的接口一律拒绝;可设有效期、随时吊销,列表显示最近使用时间与 IP,明文只显示一次。 - 访问令牌可限定书籍:只能操作选定的一本书(其他书籍按游客可见),只能使用书籍相关的权限,不能新建书籍,也不能访问通知、阅读进度等个人数据;令牌列表显示「仅限《书名》」。
- 令牌始终按普通用户权限访问,不具备管理员权限,也不能修改密码、二次认证、注销账号或管理令牌。每人的令牌数量为权益(基础 10 个),可由会员与等级提升,设为 0 即不开放 API 访问。
- 新增 Webhook 插件(默认关闭):在账号设置「Webhook」订阅自己书籍上的章节发布、收到评论、收到点赞或收藏,事件发生时向指定地址投递带签名的 JSON;可限定某本书、发送测试事件、查看投递记录(请求与响应)并重新投递。
- Webhook 新增事件:作品被购买(含订单金额与作者到手金额)、收到读者提问(公开后投递)、我的会员变化(开通、续期、调整、取消与到期);分别需要启用「付费内容」「问答」「会员」插件。
- 投递失败按退避重试共 5 次,连续失败 10 次的订阅自动停用并通知;默认拒绝投递到内网地址以防 SSRF(内网部署可用环境变量放开);订阅数为权益(基础 5 个)。
- 新增 RSS 订阅插件(默认关闭):每本公开书籍与每位作者各有一个订阅地址,列出最近发布的章节;付费章节只给出试读摘要。书籍详情页与作者主页提供复制订阅地址的按钮,并支持阅读器自动发现。
- 新增嵌入组件插件(默认关闭):书籍详情页「嵌入到其他网站」可选择书籍信息卡片(封面、作者、简介、标签、章节数与阅读量,不含目录)、整本书(信息与目录)或某一章,设置高度、预览并复制 iframe 代码;嵌入页按游客身份显示,付费章节只显示试读,并链接回本站阅读。
双向链接
- 章节正文支持双向链接:
[[章节标题]]、[[章节标题|显示文字]],跨书用[[书籍slug/章节slug]];按 slug 或标题匹配本书章节,找不到的显示为灰色虚线文字。阅读页、打印页、嵌入页与写作台预览都会渲染。 - 写作台输入
[[弹出本书章节选择,可按标题或 slug 过滤,回车插入链接。 - 新增反向链接插件(默认关闭):阅读页底部显示「被引用」,列出链接到本章的已发布章节及链接处的上下文(付费章节不显示上下文);书籍设置新增「章节链接」,查看章节之间的链接、失效链接与没有链接的章节。
书单
- 新增书单插件(默认关闭):书籍详情页「加入书单」可勾选收录到自己的书单或新建书单;书单可设为公开或私有。
- 书单页显示收录的书籍,创建者可写推荐语、调整顺序、移出书籍;其他读者可收藏书单。书单只显示查看者可读的书,书籍被删除或改为私有时对创建者提示隐藏数量。
- 新增「书单」页(顶部导航):热门、最新、我的书单与我收藏的;公开书单还会显示在个人主页,以及所收录书籍详情页的「收录于 N 个书单」。
- 每人可创建的书单数为新权益「书单数量」(默认 20 个),可作为会员权益或随成长等级提升。
会员与成长、成就联动
- 新增经验规则「购买会员」(默认 50 经验):每笔付款开通或续费会员的订单发放一次,订单退款并撤销会员时收回。
- 新增权益「经验加成」(百分比,默认 0):会员方案或成长等级可设置,按经验规则获得的经验按比例增加,每日上限仍按基础经验计算;经验流水显示「含经验加成 +N」。管理员不因「不受限制」获得最大加成。
- 成就新增会员指标:当前是会员、累计会员天数、购买会员次数(需启用会员插件);新增预设成就「尊享之始」「年度会员」「千日相伴」「忠实支持」,会员插件启用后可在「预设成就」中安装。会员开通、续期、调整、取消与到期时自动重新评估。
AI 用量
- 新增「按模型单价」:不同模型可单独设置每百万 tokens 的输入/输出单价(可用 * 通配,如 gpt-4o-mini*),未设置的模型使用默认单价;设置页列出最近调用过的模型及当前按哪条单价计费,可一键添加,修改后可按新单价重算最近 7/30/90 天的费用。
- 「我的 AI 用量」调用记录与管理员的调用明细显示关联对象并可跳转:书籍翻译跳到翻译任务进度,书籍问答跳到书籍「问答」(读者问题分析跳到「读者问题」),AI 写作跳到写作台,章节导读跳到导读设置,AI 审核跳到内容审核(仅管理员);用户看不到不可读书籍的关联。
书籍翻译
- AI 翻译的任务详情与已有译本列表在「审阅译稿」前新增「查看书籍」,直接打开译本的书籍详情页。
- 新建译本支持预设:管理后台新增「书籍多语言」,可设置译本书名与访问路径模板(默认模板 + 按语言覆盖,如简体中文书名「{title} 简体中文」、路径「{slug}-chinese」;默认路径为「原书路径-语言代码」)。新建译本时按目标语言预填书名与访问路径,作者可修改;书名留空仍由 AI 翻译原书名,访问路径已被占用时自动追加数字。
个人资料
- 新增「名字显示方式」:个人资料中可选择显示昵称(默认,未设置昵称时显示用户名)或始终显示用户名;作者署名、书籍卡片、评论、书评、问答、排行榜、书单、个人主页、导航栏、嵌入页、RSS 与 Webhook 等处统一按此显示。
质量与修复
- 「书籍多语言」的 AI 翻译与写作台的「翻译」不再改动 Markdown 语法:
[children]、[toc]、组件标签与属性、:::块、链接与图片地址、图标、代码、公式与流程图、front-matter 的键与图标注释等在翻译前替换为占位符、翻译后原样还原,只翻译读者可见的文字(含组件的title、标签页标题、front-matter 的title与description);双向链接改为指向章节路径,在译本中仍然有效。译文丢失或改动了这些语法时自动重试一次,仍不正确则该章记为失败、不保存损坏的内容,可重试该章。 - 「书籍多语言」AI 翻译的进度页在某一章刚开始翻译时打开,实时译文前面不再多出
undefined。 - 连续的 GitHub 风格提示块(如
> [!NOTE]后空一行再写> [!TIP])不再被合并成一个,与 GitHub 一致以空行结束;行内按钮!btn[…]的文字不再被正文链接颜色覆盖而看不见,Issue 徽章同样保持自己的颜色。 - 网页采集去掉文档站页尾的「Was this page helpful?」反馈提问(及其后的按钮等),同样识别常见的英文与中文写法。
- 「我的书籍」与个人主页在加载书籍时不再先显示分页,数据加载完成后才出现;其他列表已检查(后台列表的分页本就在加载完成后显示,排行榜、版本列表等翻页时保留上一页内容并变淡,分页随之保留)。
- 书籍详情页的「全书概览」默认折叠,只显示开头几段,点「展开全文」查看全部,避免较长的概览把目录挤到页面下方;内容较短时不折叠。
- 章节管理的批量改状态与批量删除改为一次提交、由服务端逐个处理并以 SSE 推送进度:工具栏显示「正在设为「草稿」:2/4」与进度条,正在处理的章节显示「处理中」,完成的章节状态即时切换;失败的章节保持选中并提示数量,便于重试;批量删除与单个删除一样需要二次认证(开启时)。
- 修复日期与日期时间选择器被遮挡:弹出面板改为按视口边缘自动定位(下方放不下时向上弹出,并始终完整显示在屏幕内),在弹窗中也不再被裁切;面板内的时间下拉菜单不再被面板盖住,选择的时间能正确生效;下拉菜单与提示也显示在弹窗之上。
- 修复 SQLite 下并发写入偶发失败的问题:两个先读后写的事务交错时,后一个会立即报 database is locked,导致同时兑换同一活动码等操作被误判为「已兑换过」。现在事务开始即取得写锁并排队等待;数据库错误也不再被当成业务错误提示。
- 网页采集不再把文档站的页面装饰带入正文:Docusaurus 的「Version: x」版本标记与旧版本提示、「On this page」页内目录(移动端与桌面端)、编辑链接与最后更新时间,以及 VitePress、MkDocs 的同类元素。
- 修复同时启用多语言与多版本时版本切换中出现重复版本的问题:译本继承原书的版本组,现在每个版本号只显示一本(优先当前书籍、其次同语言),书籍列表的「N 个版本」也按版本号计数。
- 启用「书籍多语言」时,版本切换只列出当前语言已有的版本:例如只翻译了 2.5.0 的简体中文,简体中文版不再列出只有原文的其他版本(只剩一个版本时不显示版本切换);未启用时仍列出全部版本。
- 安全:站点页面默认只允许同源嵌入(X-Frame-Options 与 CSP frame-ancestors),防止被其他网站嵌入后诱导点击;只有嵌入组件页 /embed/* 允许被其他网站嵌入。
- 新增端到端测试(Playwright):在真实浏览器中走通会员购买与优惠券、礼品卡、免费试用、邀请奖励、后台退款、付费墙与问答实时推送,CI 每次提交运行。
- 修复登录或注册后、整页刷新前,服务端渲染的页面(如阅读页)仍按未登录显示的问题:付费章节提示「登录后解锁」、划线与问答要求登录;切换账号时也会更新登录 Cookie。
- 弹窗补充对话框语义(屏幕阅读器可识别);后台订单列表的操作按钮不再折行。
- 「翻译任务」列表中进行中的任务实时显示进度,翻译目录阶段有提示。
数据库兼容
- 修复在 PostgreSQL 上无法禁用标签、书籍关注等插件(查询语法错误后按默认启用处理)、卸载插件返回 500、PDF 导出组件检测失败的问题。
- 修复在 PostgreSQL 上「我的点赞 / 我的收藏」列表总数始终为 0 的问题。
- 成长等级插件未启用时,删除内容不再查询其数据表。
- 后端测试可在 PostgreSQL 与 MySQL 上运行,CI 在 SQLite、PostgreSQL、MySQL 上各跑一遍完整测试。
多实例部署
- 支持在负载均衡后运行多个服务实例(PostgreSQL / MySQL + 共享数据目录):实例之间通过数据库自动发现与通信,单实例部署没有额外开销。
- 站内通知、问答、写作助手、整本翻译、章节导读、审核队列与插件安装日志的实时推送,送达连在任何实例上的页面;后台 AI 任务可从任何实例取消或暂停,中途打开的页面从执行实例补齐已生成的内容,不会因为其他实例的巡检被误判为中断。
- 后台任务执行期间持续心跳,长任务不会被重复执行,实例退出后遗留的任务由其他实例接手;周期巡检只由一个实例执行;同一本书的问答索引跨实例互斥重建。
- 插件启用/禁用后所有实例同步权限,缺少插件文件的实例自动补齐;运行日志设置在所有实例生效;兑换码防穷举计数改为跨实例共享。
- 管理后台「系统概览」新增「服务实例」,列出在线实例,并在使用 SQLite、数据目录未共享、版本不一致时给出提示;安装指南新增「多实例部署」。
AI 辅助审核
- 发布审核新增「AI 辅助审核」:命中敏感词的内容交给模型结合上下文复核,给出结论(安全 / 疑似违规 / 无法确定)、置信度、违规类别与理由,显示在审核队列中,作者看不到。
- 可选「判定安全时自动通过」:模型判定安全且置信度达到阈值(默认 90%)时自动发布,减少敏感词误判带来的人工审核;其余仍由审核员决定。
- 可选「复查自动通过的内容」:词典漏掉的疑似违规由模型标记并通知管理员,新增「AI 标记」页集中处理,不会自动撤回。
- 可填写站点补充规则;复核在后台进行,审核队列实时更新,每条记录可重新让 AI 复核;调用记为系统调用。
读者问题洞察
- 书籍设置新增「读者问题」:汇总读者就本书向 AI 与社区提出的问题,相近的问题自动归为一类并按数量排序,展开可看到具体提问与关联章节;可切换近 7 / 30 / 90 天。
- 「内容缺口」列出读者问到、但书中没有找到相关内容的问题,适合补充成新的章节;另列出问题最多的章节与尚未回答的社区提问。
- 读者的 AI 提问以匿名方式汇总(不含提问者,作者与协作者自己的提问不计入),问答面板中有相应提示;管理员可关闭 AI 提问的汇总,只统计社区提问。
- 每周有新提问时给作者发一条站内摘要(可关闭);「读者问题洞察」为权益,可设为会员专享。
我的任务
- 账户菜单新增「我的任务」:集中查看自己发起的后台任务(导入书籍、PDF 导入、外链图片本地化、「书籍多语言」的 AI 翻译、整站采集、写作助手、章节导读生成),按「进行中 / 已完成 / 失败」分组,显示进度、开始与结束时间和失败原因,可跳到任务详情或结果。
- 进度经站内通知的实时通道推送,不再轮询;整站采集每采完一页即更新进度。
- 有任务进行中时,导航栏显示转圈标记与数量,点击进入「我的任务」。
- 导入书籍、PDF 导入与外链图片本地化等待结果时改为接收推送,不再反复请求任务状态。
- 访问令牌新增「我的任务 · 查看」权限。
编辑器
- 新增卡片与卡片组组件,兼容 Mintlify 写法:
<CardGroup cols={2}>中放多个<Card title="…" icon="…" href="…">,正文支持 Markdown。 icon使用 Font Awesome 图标名(如headset,可用iconType="regular"/"brands"),也可以填图片地址;href让整张卡片可点击(站外链接在新窗口打开);horizontal让图标与标题同行;color设置图标颜色。- 卡片组按
cols(1–4)分列,窄屏自动变为单列;卡片也可以单独使用。 - 写作台的「插入」菜单与
/命令新增「卡片组」。 - 章节元数据支持两种写法,只在文档开头识别:图标注释
<!-- icon: database -->,以及---包围的 front-matter(title、description、url、icon),两者可同时使用。元数据不显示在正文中;阅读页在标题下方显示简介与「原文」链接,页面标题与简介用于搜索引擎与分享;写作台预览顶部显示元数据;设置章节图标时若已有 front-matter 则写入其中;DOCX/EPUB 导出不含元数据。 [toc]生成的本章目录包含一到六级全部标题,并按层级缩进(已有的二、三级标题锚点不变)。
完整提交记录(68 条)
- fix(runtime): clean up stale embedded web runtimes (a7c8f07)
- fix(book-translations): keep markdown syntax out of ai translation (82e0a26)
- fix(book-translations): stop live translation text showing undefined (587df49)
- fix(editor): split consecutive alerts and keep button link colors (8ac8e3d)
- fix(contentcollect): drop page feedback prompts from collected pages (2e1df0a)
- feat(editor): support chapter front matter and full-depth toc (a352f0e)
- feat(editor): support Card and CardGroup components (0370c5e)
- fix(book-translations): notify before marking a translation job done (472029f)
- test(e2e): rename import fixture so the i18n scan skips it (3110721)
- feat(tasks): add a my-tasks page with live background task progress (7cc023e)
- fix(web): hide book pagination until the list has loaded (61f2f15)
- feat(documents): stream bulk chapter status and delete progress (3f40cb1)
- feat(web): link AI translation jobs to the translated book (dbfe225)
- feat(tokens): limit an access token to a single book (bb9bc69)
- feat(web): collapse the book overview on the detail page (ffa4c31)
- feat(web): show progress for bulk chapter status changes (3a8ca3d)
- fix(bookversions): list only versions available in the current language (f088917)
- feat(users): let users choose to show their nickname or username (27cb104)
- feat(webhooks): deliver sales, questions and membership changes (8f45def)
- fix(web): keep date pickers on screen and above dialogs (244dffe)
- fix(web): name the translation presets page after its plugin (60ef26b)
- fix(database): take the SQLite write lock when a transaction begins (cab8a50)
- feat(web): pre-fill new translations and edit their presets (f71bcbf)
- feat(booktranslations): add title and slug presets for new translations (dd6787f)
- feat(ai-usage): price each model separately (9b98222)
- feat(ai-usage): link usage records to their translation job or book (9c1ba8d)
- fix(contentcollect): drop doc-site version badges and page TOCs (9b3f50c)
- fix(bookversions): show each version once when translations share it (dd143f1)
- feat(membership): link memberships with growth and achievements (5c474e7)
- feat(tokens): let access tokens carry chosen permissions (3858d6e)
- feat(embed): add a book card embed without the contents (671dc6a)
- feat(booklists): add curated book lists that readers can save (b234269)
- feat(backlinks): link chapters with [[wiki links]] and show backlinks (5420eaa)
- feat(embed): embed books and chapters on other sites (586159f)
- fix(web): only allow same-origin framing of pages (da6a982)
- fix(paidcontent): cap chapter previews at the configured ratio (89c4a7d)
- feat(feeds): add RSS feeds for books and authors (699ec8e)
- feat(paidcontent): choose which members read a book for free (a7df423)
- feat(webhooks): add a webhooks plugin for book events (1975056)
- feat(auth): add personal access tokens for API access (b2cb7d0)
- test(e2e): add Playwright end-to-end tests for paid flows (e4d4470)
- fix(admin): keep payment order actions on one line (eb38b87)
- fix(ui): give modals a dialog role (3cfd895)
- fix(web): set the auth cookie on login (01701b2)
- ci: run the Go test suite on PostgreSQL and MySQL (87cb22a)
- fix(jobqueue): wait for the heartbeat to stop before RunOnce returns (d86c3fd)
- fix(app): make plugin and reaction queries work on PostgreSQL (fcda0a2)
- fix(booktranslations): show live progress in the translation job list (1a55100)
- feat(membership): add auto-renewal plans with a recurring charge hook (41aefc9)
- fix(cluster): name the instance pid column explicitly (61080e5)
- feat(cluster): show server instances and document multi-instance setup (1642d88)
- feat(cluster): run AI tasks safely across instances (0909298)
- feat(cluster): keep background work safe across instances (b075c43)
- feat(cluster): share live pushes and plugin state across instances (91e05be)
- feat(membership): add referral rewards on top of invite codes (d4bdd08)
- feat(membership): add free trials for membership plans (d3b3562)
- feat(membership): add coupons applied at checkout (20ced8d)
- feat(membership): add gift cards purchasable as redeem codes (31c92c2)
- feat(membership): add redeem codes for memberships (720ef60)
- feat(storage): add personal storage quota and a my files page (6714e2a)
- feat(entitlements): make semantic search an entitlement (d08a844)
- feat(entitlements): limit visible version history per chapter (c20b701)
- feat(entitlements): limit the number of private books (4a465c2)
- feat(entitlements): add monthly PDF exports and custom export footer (2f3dd5c)
- feat(moderation): add AI-assisted review of flagged content (1c0e71e)
- docs(changelog): add reader question insights to 2026.0.7 (0e08f08)
- chore: start version 2026.0.7 (76222e2)
- feat(qa): show authors what readers ask with grouped topics and gaps (7afb278)
完整更新日志见 CHANGELOG.md。