Skip to content

Releases: devlive-community/knowforge

v2026.0.9

Choose a tag to compare

@github-actions github-actions released this 12 Oct 08:10

书籍分类

  • 新增「书籍分类」插件(默认关闭):管理员在后台维护最多三层的分类树(名称、地址标识、简介、图标、排序),作者可在书籍设置中为书籍选择一个分类(可选,不选即未分类)。
  • 发现页侧栏按分类浏览(含子分类的书),分类页显示路径、简介与子分类;书籍详情的面包屑与结构化数据使用分类路径;分类页进入 Sitemap,分类变化时推送 IndexNow。
  • 后台「书籍归类」可按书名、作者与当前分类(含未分类)筛选书籍并批量归入分类。
  • 分类名称与简介支持多语言(与成就、会员方案一致):后台按语言编辑、可一键机器翻译,发现页、分类页与书籍详情的分类路径按访问者语言显示,未翻译时沿用默认语言。

质量与修复

  • 修复 IndexNow 推送成功后 URL 仍一直显示为待推送、并在约 5 分钟后被反复提交的问题(MySQL / PostgreSQL 会截断认领时间的精度,导致推送结果写不回去;失败时也不会计入重试次数)。升级后积压的 URL 会在下一轮推送后正常清零。
  • 书籍分类与会员方案的编辑弹窗加宽(与新建成就一致),并像成就一样分为「基本信息」与「国际化信息」两个标签,国际化标签显示已填写的语言数。
  • 上传 SVG 时检查文件内容,拒绝包含脚本、事件属性、危险链接或实体声明的 SVG(使用对象存储时 SVG 不经过上传目录的安全响应头)。

IndexNow

  • IndexNow 新增三种实时推送:可设置公开书籍页、章节页被访问(含搜索引擎抓取)时立即推送该页,同一页面在设定间隔内只推一次;可开启带密钥的触发地址,访问即推送全部积压的 URL(可接外部定时任务);可在管理页手动推送指定页面。管理页新增「最近推送记录」,显示每次推送的来源与 IndexNow 的返回结果。
  • 分类页(/explore?category=…)的变更现在也会推送到 IndexNow(之前因地址带查询参数被跳过);轮换验证密钥不再清空其他推送设置。

上传与图标

  • 图标选择改为「左侧预览 + 选择按钮」,点击打开选择面板:图标库(全部 Font Awesome 图标,可搜索、按分组筛选并设置颜色)、上传图片(PNG / JPG / WebP)、上传 SVG(安全检查、预览,可为单色 SVG 着色)。标签、书籍分类、会员方案、成长等级与第三方登录的图标设置都使用新面板。
  • 头像上传改为圆形预览 + 右下角相机按钮,可点击或拖拽上传,上传前可缩放、拖动裁剪,可删除并撤销;个人资料页与账户侧栏共用。
  • 上传组件统一状态:默认灰色虚线、拖拽悬停紫色边框、上传中环形进度、成功绿色勾、失败红色图标,错误原因显示在组件右下角的悬浮提示中。
  • 修复在新建分类等表单中点击「选择图标」、头像按钮或多语言按钮会误触发表单提交的问题。
  • 图标「上传图片」在上传前先裁剪为正方形(拖动、缩放),也可选择使用原图,上传后可重新裁剪;头像与图标图片共用同一个裁剪弹窗,裁剪结果与取景框严格一致。

完整提交记录(16 条)
  • feat(upload): crop icon images before upload (fdcfe80)
  • feat(upload): rebuild icon picker and avatar upload on a shared base (494ce75)
  • fix(upload): reject SVG files with scripts or dangerous links (2302d21)
  • fix(admin): widen localized edit dialogs and split translation tabs (cb55f6e)
  • feat(indexnow): add on-visit, trigger URL and manual pushes (7be080b)
  • fix(indexnow): match claimed URLs by token instead of lock time (0df69b8)
  • feat(categories): localize category names and descriptions (737d6d0)
  • feat(categories): add optional book categories plugin (6b735bf)
  • fix(seo): serve IndexNow key through Next middleware (c386793)
  • fix(admin): move plugin menu before settings (26add8b)
  • fix(seo): serve IndexNow verification file directly (757a677)
  • feat(seo): add IndexNow URL submission (90324cc)
  • fix(web): keep admin search controls inline (b7b1437)
  • fix(web): keep input action rows aligned (ecf21b2)
  • fix(web): add pagination to unbounded lists (a9134b8)
  • chore: start version 2026.0.9 (d9669b8)

完整更新日志见 CHANGELOG.md。

v2026.0.8

Choose a tag to compare

@github-actions github-actions released this 07 Oct 03:38

质量与修复

  • 「书籍多语言」翻译含 HTML 表格(如从 Sphinx 文档采集的 <table class="docutils">)等大量标签的章节不再失败:只含标签的行、相邻的标签合并处理,属性分多行书写的标签整体保留;个别段落仍无法保留格式时改为逐块翻译,个别块保留原文、章节照常完成,并在进度中用提示说明,不再整章失败。
  • 整站采集的目录标题改为取自站点导航的链接文字(如「Getting Started」「New To Gluten」),不再在导航链接的样式名含 nav 时退回为网址片段(如「getting started」「NewToGluten」),与原站目录一致。
  • 修复首次保存通知设置时关闭的开关被存成开启的问题。
  • 用户菜单在屏幕较矮时显示不全:宽屏改为两列,菜单不超过可视高度、超出时可滚动,「退出登录」固定在底部;窄屏顶栏只显示头像,菜单不再超出屏幕。

列表分页

  • 所有分页列表的页码保存在地址栏(如 ?page=2),刷新、分享链接、前进后退都保持当前页;同一页面中的多个列表各用独立参数(如个人主页的书单 listsPage),弹窗内的分页不受影响。
  • 翻页时被点击的页码或「上一页 / 下一页」按钮显示加载状态,整条分页在加载完成前不可再点(如「我的文件」此前翻页没有任何加载提示);加载失败也会恢复。

会员与成长

  • 「我的成长」与「我的会员」页中的「我的权益」改为标题旁的帮助图标,点击弹出各项权益的生效值与来源(按需加载,Esc 或点击外部关闭),不再占用页面正文。

AI 用量

  • 「我的 AI 用量」新增本月估算费用(含按功能分布),调用记录的每条操作与每次调用也显示估算费用,按站点设置的模型单价估算、仅供参考;管理员可在「AI 服务」设置中关闭「向用户展示估算费用」。

站点设置

  • 系统设置新增「自定义 HTML」:可配置「HTML Head 额外内容」(追加到每个页面的 <head>,支持 meta、link、script、style、noscript、base、title,适合统计脚本与站点所有权验证)与「HTML Footer 额外内容」(原样追加到 </body> 前);在服务端渲染时注入,搜索引擎验证可直接读取;单项不超过 64 KB,修改记入审计日志。
  • 站点设置中的「编辑器帮助文档」「用户协议」「隐私政策」改为一个选择框:点击后左侧搜索书籍、右侧筛选并点选章节(同名书籍显示访问路径加以区分),已选章节显示为「书名 / 章节名」;底部仍可直接填写任意地址。
  • 章节选择框在读取设置与解析书名、章节名期间显示加载状态,不再先闪现原始地址再变为「书名 / 章节名」;刚选中的章节直接显示名称。

内容采集

  • 管理后台新增「内容采集 · 采集规则」:原有的清理行为整理为可逐项启用/停用的内置规则(页头页脚导航侧栏、页内目录、文档站装饰、标题永久链接、空标题与孤立符号行、页尾反馈提问);可添加自定义规则(删除元素、删除行、替换文本),并限定只对某些站点生效;「试采」可用未保存的规则预览采集结果。规则对所有用户的单页采集、网页导入与整站采集生效。
  • 新增内置规则「去除空标题与孤立符号行」,去掉采集时混入的只剩 # 号的空标题与单独一行的 #、¶(代码块内不受影响);文档站装饰规则同时去掉正文中的按钮(如「Copy page」)。

存储

  • 修改「存储配置」后(如从本地磁盘换成阿里云 OSS),如有文件不在当前存储中会询问是否迁移:后台逐个文件上传到新存储,并把章节正文、版本记录、书籍封面与简介、头像、站点设置以及成就、等级、标签、会员方案、问答、全书概览中的地址改为新地址,可选迁移成功后删除原存储中的文件;进度显示在「我的任务」与存储设置页,完成后发送站内通知。早期上传、没有文件记录但仍被引用的本地文件也会一并迁移。

书单

  • 发现页新增「精选书单」:管理员在书单页点「设为精选」即可展示在发现页(不带搜索与标签筛选的第一页),没有精选时展示收藏最多的书单;精选书单带「精选」标记。

我的文件

  • 点击「我的文件」中的图片改为在全屏图片查看器中打开:支持缩放(按钮、滚轮、键盘)、拖动查看、适应窗口与实际大小、旋转与翻转查看、上一张 / 下一张、图片信息(尺寸、大小、来源、上传时间、引用)、复制链接、下载与删除。
  • 查看器中可编辑 PNG、JPEG、GIF 图片:旋转、水平 / 垂直翻转、拖动裁剪框裁剪,另存为新图片(原图与正文中的引用不变,新图片计入个人存储)。

双向链接

  • 书籍设置「章节链接」新增「关系图」(默认)与「列表」两种查看方式:关系图以章节为节点、链接为带箭头的边,被引用越多的章节越大,草稿为灰色;可拖动画布与章节、滚轮缩放、搜索并定位章节,点击章节高亮其关联并在侧栏列出「链接到」与「被引用」,可直接编辑或阅读;可选显示没有链接的章节与目录结构(虚线)。

模板

  • 新增模板插件(默认关闭):新建书籍时可选择书籍模板,创建后按模板生成章节目录与正文(均为草稿)并打开第一章;写作台工具栏与 / 菜单可插入章节模板到光标处,也可把当前章节存为模板。
  • 站点模板由管理员在后台「站点模板」维护,首次启用时预置产品文档、技术教程、团队知识库三份书籍模板,以及会议纪要、接口文档、教程章节、版本发布说明、常见问题五份章节模板;作者可在「我的模板」新建章节模板,或把自己的书保存为书籍模板(可选是否包含正文)。
  • 模板支持变量:日期、时间、书名、章节名、作者名,使用时按浏览器时区替换为实际值。
  • 新增权益「个人模板数量」(默认 50),可由会员方案与成长等级提升。

备份与恢复

  • 新增站点备份(系统设置 · 备份):一键备份或按计划每天 / 每周自动备份,自动备份保留最近若干份;备份为 zip,包含全部业务数据(与数据库类型无关的逐表导出)、可选的本地上传文件与站点密钥,进度显示在备份页与「我的任务」中,完成或自动备份失败时发送站内通知。
  • 下载备份需要管理员权限与短时下载凭证,开启二次认证时按「导出数据」验证;删除按「删除」验证。备份含站点密钥与各类接口密钥,只保存在服务器数据目录中,不上传到公开访问的对象存储。
  • 安装向导新增「从备份恢复」:选择一个空数据库并上传备份,按进度建表、写入数据、恢复文件,完成后用原账号登录,原有登录状态仍然有效;可以恢复到与备份时不同的数据库(如从 SQLite 换成 PostgreSQL);拒绝来自更新版本的备份。

运行指标

  • 新增运行指标(系统设置 · 运行指标,默认关闭):开启后 /metrics 以 Prometheus 格式输出请求量与耗时、正在处理的请求、事件流连接数、模型调用次数 / tokens / 估算费用 / 耗时、后台任务积压与最早任务等待时长、在线实例、数据库连接池、用户 / 书籍 / 章节总数及版本与运行时指标;抓取需携带访问令牌(只显示一次,可重新生成),页面提供 Prometheus 抓取配置示例与当前指标预览。

安装为应用与离线阅读

  • 站点可以安装为应用(添加到手机主屏幕或桌面,独立窗口打开),用户菜单中出现「安装应用」(浏览器支持时)。
  • 读过的章节自动保存到浏览器,断网时仍可打开;书籍详情页新增「离线阅读」,可一次下载全部章节(含正文图片与页面脚本),也可更新或移除;离线时底部提示正在显示已保存的内容,未保存的页面显示离线页。
  • 离线期间的阅读进度在联网后自动补传;断网时不再因校验登录失败而退出登录。离线内容只保存在当前浏览器,登录或退出登录时清除。
  • 站点设置新增「允许安装为应用并离线阅读」(默认开启),关闭后浏览器中的离线缓存在下次访问时清除。

协作写作

  • 写作台显示同时在编辑这本书的协作者(顶栏头像,悬停可见各自所在章节与是否有未保存修改),目录中标出协作者正在编辑的章节;同一章节有其他人打开时给出提示。
  • 保存冲突保护:保存时检查打开章节后是否有其他人保存过;有则以打开时的内容为基准自动合并双方互不冲突的修改,改到同一处时弹出合并对话框,逐处选择保留自己的、采用对方的或两者都保留,也可以放弃自己的修改改用对方版本。不会再出现后保存的人覆盖他人修改。
  • 他人保存了正在打开的章节时:没有未保存修改则自动载入新内容,有修改则提示保存时将自动合并;他人新建、删除、移动或改名章节时目录自动刷新。
  • 修复:保存过程中继续输入的内容在保存完成后被显示为「所有更改已保存」。
  • 新增写作批注:在写作台选中正文,点工具栏的批注按钮或按 ⌘/Ctrl + Alt + M 添加批注;批注侧栏按「未解决 / 已解决」列出讨论串,可回复、修改、删除与标记解决,点击原文在正文中选中对应位置(正文修改后按上下文重新定位,找不到时提示原文已修改)。批注只有书籍作者与协作者可见,不出现在阅读页;目录中标出各章节未解决的批注数;新批注与回复会通知书籍作者与讨论中的其他人,并实时同步到其他人的写作台。
  • 新增协作者角色「建议者」:可以进入写作台查看草稿、批注,修改正文后点「提交修改建议」(可附说明)交给作者审阅,不能直接保存,也不能新建或调整章节。作者在批注侧栏的「修改建议」中审阅,按改动块对比原文与建议、逐处勾选采纳(标题修改单独选择)或全部不采纳;采纳的部分与当前版本合并后保存,建议提交后正文已被改动时互不冲突的部分自动合并、冲突处由作者选择。目录标出各章节待处理的建议数,提交与处理结果会通知对方,建议者可撤回未处理的建议。
  • 批注中输入 @ 可选择书籍作者与协作者,被提及的人收到「提到了你」的通知,批注中的提及会高亮显示。
  • 新增章节分工:在写作台的章节设置中为每章指定负责人(作者或协作者)、阶段(未开始 / 写作中 / 待审阅 / 已定稿)与截止日期,修改即时保存;目录显示阶段色点与负责人头像(悬停可见详情,逾期标红),并可筛选「分配给我的 / 待审阅 / 未定稿」章节(地址中的 ?filter=)。分配章节时通知负责人,章节进入「待审阅」时通知作者与编辑者,分工变化实时同步到其他人的写作台;建议者可以查看分工。
  • 编辑者也可以在写作台顶栏打开「建议模式」(按书记住),修改以建议提交给其他协作者审阅,关闭后恢复直接保存。
  • 写作台新增「协作」侧栏(?team=activity|tasks):「动态」按天列出谁修改了哪一章(新增 / 删除行数,连续保存合并为一条)、新建或删除章节、恢复历史版本、批注与回复、处理修改建议、调整分工,实时刷新,可直接打开相关章节,保留 180 天;「分工总览」按阶段统计章节数、逾期与未指定负责人的章节数,并列出全部章节的负责人与截止日期。

邮件摘要

  • 通知设置新增「邮件发送方式」:每条即时发送、每日摘要、每周摘要或不发送邮件。选择摘要后,通知在服务器时间每天 8:00(每周摘要为周一)汇总成一封邮件,按类型分组并遵守逐类型开关,同时附上你参与写作的书籍中他人的协作动态(修改、批注、修改建议、分工调整次数);可随时给自己发送一封预览。
  • 摘要邮件附一键退订链接(签名校验,无需登录),退订后改为不发送邮件,站内通知不受影响;多实例部署时只由一个实例发送。

AI 朗读

  • 新增「AI 朗读」插件(默认关闭):读者在阅读页点「朗读」即可收听章节,逐段播放并高亮当前段落,可调语速、切换音色,读完自动进入下一章;支持锁屏与耳机按键控制。只朗读读者有权阅读的内容(付费章节需解锁)。
  • 「AI 服务」新增语音合成配置(OpenAI 兼容接口,可沿用对话服务的地址与密钥)、可选音色、按字计价与连通测试;朗读用量按字数记入 AI 用量。
  • 每月朗读字数为权益,可由会员方案与成长等级提升,同一段当月重复收听不重复计数;已合成的音频缓存在服务器数据目录复用(不上传对象存储),管理员可设置缓存上限或清空缓存。

团队空间

  • 新增「团队空间」插件(默认关闭):可以创建团队、邀请成员(所有者 / 管理员 / 成员),对方在「我的团队」中接受邀请;团队主页分书籍、成员、设置三栏,支持转交与解散团队、退出团队。
  • 作者可以把自己的书加入团队(在团队主页或书籍设置的协作者页):所有者与管理员自动获得编辑权限,其他成员按每本书设置的编辑、建议或只读权限参与,成员与角色变动时自动同步;书籍协作者中标记「来自团队」,直接邀请的协作者优先。
  • 每人可创建的团队数与每个团队的成员数为权益,可由会员方案与成长等级提升;管理员可在后台查看与解散团队。
  • 团队会员:会员方案可开启「可按团队购买」,团队所有者与管理员在「我的会员 › 团队会员」按席位开通,团队中按次序(所有者、管理员,再按加入时间)的前 N 名成员享有方案权益;与个人会员同时有效时每项权益取较高值。有效期内可续期,或按剩余天数折算增加席位;退款撤销时按比例扣回天数或席位,到期前提醒购买人。
  • 成员在「我的会员」中可以看到通过团队享有的会员,席位已满时提示联系团队管理者;管理员可在「会员 › 团队会员」中调整方案、席位与到期时间,或立即取消。

完整提交记录(31 条)
  • fix(web): keep the user menu within the viewport (3970f69)
  • feat(membership): add seat-based team memberships (f1ab608)
  • feat(teams): add team spaces with members and shared books (55dd0f7)
  • feat(read-aloud): add AI read-aloud plugin for chapters (e312ee2)
  • feat(notify): add daily and weekly email digests (8825453)
  • style(files): gofmt the image edit test (6539875)
  • feat(writer): add a team panel with activity and assignment overview (96b34a9)
  • feat(writer): add chapter assignments and an editor suggest mode (e1d0ae3)
  • feat(writer): add suggester role, change review and mentions (da1a28d)
  • feat(writer): add comments for authors and collaborators (ea4c994)
  • feat(writer): add collaborator presence and safe concurrent saves (12b0869)
  • feat(pwa): make the site installable and readable offline (5038890)
  • feat(metrics): expose Prometheus metrics behind an access token (345fbd6)
  • feat(backup): add site backups and restore from the install wizard (26e0d61)
  • feat(templates): add book and chapter templates plugin (fb77aa5)
  • test(backlinks): cover the relationship graph in the links e2e (3478c6f)
  • feat(backlinks): add a chapter relationship graph to chapter links (f6575f3)
  • feat(files): open images in a viewer with basic editing (cb79339)
  • fix(web): show loading in the chapter picker until resolved (c6f5e49)
  • feat(booklists): feature lists on the explore page (82eceaf)
  • feat(storage): migrate existing files after changing storage (3a33b90)
  • feat(contentcollect): add configurable collection rules (98ddf7b)
  • feat(web): pick linked chapters from a searchable cascade (6124525)
  • feat(site): add custom head and footer html settings (6d4a0c2)
  • feat(ai-usage): show estimated cost in my ai usage (57a6269)
  • feat(web): open my entitlements from a help icon (92cebd2)
  • feat(web): keep list pages in the url and show paging progress (0e80b78)
  • fix(contentcollect): take site crawl titles from nav link text (4a4cf7d)
  • fix(book-translations): translate chapters with html tables (45ada69)
  • chore(deploy): commit the next version after a release (a6769bc)
  • chore: start version 2026.0.8 (9aa165f)

完整更新日志见 CHANGELOG.md。

v2026.0.7

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:34

会员权益

  • 新增权益「每月 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 ...
Read more

v2026.0.6

Choose a tag to compare

@github-actions github-actions released this 27 Sep 00:31

权益(等级特权)

  • 新增按用户生效的权益:书籍数量上限、单本书协作者人数上限、单文件上传大小、单页网页采集、整站采集及整站采集页数上限;超限时接口返回 403。
  • 系统设置新增「权益」页配置全站基础值;默认与升级前一致(书籍/协作者不限,上传与采集沿用原设置),管理员主动收紧才生效,管理员本人不受限制。
  • 成长等级可配置「等级特权」,用户获得当前等级及以下各启用等级的累计权益;「我的成长」新增「我的权益」卡片展示生效值与来源。
  • 权益由插件登记来源(核心只提供通用机制),为后续会员方案预留独占来源;采集入口按用户权益联动显示。

会员

  • 新增「会员」插件(默认关闭):多个会员方案,每个方案可配置权益与多档时长价格(划线价可选),方案名称/说明支持多语言。
  • 用户同一时间持有一个方案,续期顺延到期时间,有效期内更换方案从当前时间起算;会员有效期内按方案权益生效,优先于成长等级,未配置的项回退基础值。
  • 管理端可开通/续期、调整方案与到期时间、取消会员,查看会员列表与流水,设置价格货币与到期提醒;用户在「我的会员」查看当前会员、方案与记录,并收到开通、到期前与到期通知。

支付

  • 新增「支付」插件(默认关闭):支持线下转账(用户提交付款说明、管理员确认到账)、支付宝(电脑/手机网站支付)、微信支付(APIv3 Native 扫码)与 Stripe Checkout,异步通知均验签并校验金额。
  • 会员方案可在线购买:会员页每档价格显示「购买/续期」,结算页选择支付方式,订单页展示二维码/收银台/转账说明并自动刷新状态;支付成功后自动开通会员并通知。
  • 管理端可查看与筛选订单、确认线下收款、取消订单、重试履约,并配置各支付方式(密钥只写不读、保存前校验格式);用户可在「我的订单」查看购买记录。
  • 支付与会员互不依赖:支付插件售卖通用「商品」,会员插件登记商品并处理履约。
  • 退款:用户在支付后可申请期内(默认 7 天,可配置或关闭)申请退款,管理员审核(可部分退款、选择是否撤销商品)或驳回,也可直接退款;支持支付宝、微信支付、Stripe 原路退款与线下退款,退款单号作为渠道幂等键,并发不超额,结果未知时向渠道查询确认、必要时人工核实,不会重复退款。退款成功后会员按比例扣回天数、付费内容按比例扣回作者收益并可重新锁定。修复全额退款后重复的支付通知可能导致订单被重新履约的问题。

书籍更多信息

  • 书籍设置新增「更多信息」:可添加 GitHub/GitLab/Gitee、官网、原始文档、文档地址、在线演示、联系邮箱、原作者、许可证、版本、ISBN 及自定义属性,支持排序;书籍详情页侧栏展示(链接可点击),随导出/导入与复制保留。

Markdown 导入(Issue #87)

  • 支持上传多个 Markdown 文件或 Markdown 目录 ZIP 新建书籍(「导入书籍」新增 Markdown),也可在写作台「从 Markdown 导入」为本书章节:目录成为章节层级,README/index 作为目录正文,按名称自然排序;相对路径图片自动上传到当前存储并改写,包内互相引用的 .md 链接改写为阅读页链接。
  • 原「书籍压缩包」导入在 ZIP 不含 book.md 时自动按普通 Markdown 目录导入。

图片存储(Issue #87)

  • 存储新增「S3 兼容对象存储」驱动(AWS S3、阿里云 OSS、腾讯云 COS、MinIO、Cloudflare R2 等,Signature V4),可配置对外访问地址(CDN)、对象键前缀与路径风格;Secret Key 只写不回显。
  • 书籍设置「清理」新增「外链图片本地化」:后台下载章节中的外部图片存入当前存储并改写链接(含 SSRF 防护与大小限制),改动章节生成版本记录。

发布审核(Issue #87)

  • 新增「发布审核」插件(默认关闭):管理员维护敏感词词典(批量添加、分类、启停、试审),章节发布与书籍公开前自动审查(忽略大小写/全半角,可识别插入空格或符号的写法)。
  • 未命中直接发布并记入「自动通过」供抽查复审;命中则拦截(章节保持草稿、书籍保持私有),标出命中的字段、行列号与上下文并通知作者与管理员;复审通过自动发布,驳回把命中位置与意见通知作者,作者可在「我的审核」查看。
  • 写作台与书籍设置在发布被拦截时提示「已提交审核」。

付费内容

  • 新增「付费内容」插件(默认关闭):作者在书籍设置「付费设置」中为整本/章节定价,可设免费试读章节、试读比例与逐章免费/单独价格;未解锁章节只显示试读内容与付费墙,阅读目录显示锁标记,书籍详情页展示价格与「购买全书」。
  • 内容门禁覆盖阅读、整本导出与搜索摘要;购买经支付插件完成,已购内容在「我的购买」查看。
  • 作者收益:平台按比例抽成,作者在「我的收益」查看流水并申请提现,管理员线下打款后确认或驳回(退回余额)。
  • 与会员/等级结合:新增「内容访问等级」「付费内容折扣」「全部付费内容免费」三项权益,可在会员方案或成长等级中授予(书籍可设「访问等级 ≥ N 免费读」)。

AI 服务

  • 系统设置新增「AI 服务」:配置站点使用的大模型,支持 OpenAI 兼容接口(OpenAI、DeepSeek、通义千问、Kimi、Ollama 等,支持工具调用)与 Anthropic 接口,另可配置 OpenAI 兼容的向量嵌入模型;密钥只写不读,可一键测试连通性。
  • 未单独配置时沿用「翻译服务」中的 OpenAI / Claude 配置;插件经核心的通用 AI 接口调用,不直接接触密钥。
  • 每次模型调用都记录用量(调用用户、功能、模型、输入/输出 tokens、耗时,服务未返回用量时按文本估算),可配置单价估算费用;管理后台新增「AI 用量」:按日趋势、按功能/模型分布、用量最高的用户与调用明细。
  • 新增权益「每月 AI 用量」(tokens,默认不限),可在成长等级与会员方案中设置额度,超出后当月暂停 AI 功能。
  • 写作台与多语言内容的「翻译」同样记录每次调用(OpenAI/Claude 记 tokens,Google 翻译按字符计价,可关联到章节);新增权益「每月翻译字数」(默认不限)。「我的权益」显示按月计量项的本月已用量。所有模型调用都必须经过统一的计量入口,有测试防止新功能绕过。
  • 新增「我的 AI 用量」页:用户可查看本月 tokens/翻译字数与额度、每日用量、按功能分布,以及按调用链分组的全部调用记录(每次操作展开可看到其中每一次模型调用的模型、tokens、耗时与结果);管理端调用明细可按调用链筛选。
  • AI 用量预警(只报警、不限流):可设置全站当日估算费用、单个用户当日 tokens、单条调用链 tokens 三类阈值,超过时通知所有管理员并在「AI 用量」页列出,可一键查看对应用户或调用链的调用明细;同一对象只提醒一次。
  • AI 用量数据保留与导出:「AI 服务」可设置调用记录保留天数(默认永久,最少 90 天),超期的调用记录与预警由每日维护任务分批清理;管理端「AI 用量」按当前筛选导出 CSV(含用户、估算费用与报错),用户在「我的 AI 用量」可导出自己的调用记录(不含费用)。
  • AI 调用不再设置整体超时(翻译、连通性测试同样取消 60 秒限制),只保留建连超时。

书籍问答

  • 问答管理新增「调用链详情保留天数」(默认永久,最少 7 天):超期只清除逐步的调用链详情,问题、回答与用量合计保留。
  • 新增「书籍问答」插件(默认关闭):阅读页右侧「问答」抽屉,读者就本书内容向 AI 提问,回答只依据本书并标注出处,点击角标定位到对应章节小节;在正文中选中文字可直接「问 AI」。
  • 检索采用关键词(BM25,支持中文)与向量的混合检索(配置嵌入模型后启用,后台自动向量化,内容更新后自动重建索引);「深度模式」由 AI 多步检索、查看目录并阅读多个小节后作答。
  • 社区问答:书籍详情页新增「问答」Tab,读者可公开提问(可附 AI 回答作参考),作者与其他读者回答,提问者或作者采纳后标记已解决,提问、回答与采纳均有站内通知。
  • 额度均为权益、可纳入会员体系:「每日 AI 提问次数」「每日深度模式提问次数」(可设为 0 作为会员专享),并受「每月 AI 用量」约束;付费内容门禁同样生效,未解锁章节不参与回答。
  • 每条回答显示模型消耗(tokens);新增「我的问答」页:今日额度与本月 AI 用量、跨书的 AI 问答记录(可展开出处、删除)与社区提问。
  • 回答正文逐字流式输出:模型以流式接口调用,生成的文字经 SSE 实时推给读者(中途打开的页面也能接上已生成的部分),深度模式中间轮的临时文字在调用工具时清除;OpenAI 兼容接口与 Anthropic 均支持,用量从流末尾准确记录。
  • 社区问答纳入内容治理:提问与回答发布前经发布审核(敏感词命中时待审核,通过后公开并补发通知),可被举报并下架;审核插件新增「审查用户发布的其他内容」开关。插件可经新的中性扩展点登记自己的用户内容类型,审核与举报不需要认识具体插件。
  • 回答改为后台生成:不设整体超时、深度模式不限轮数(直到模型不再调用工具,相同的工具调用不重复执行),可随时停止;每条回答可查看完整调用链(上下文、查询向量化、检索命中、每次模型调用的模型/tokens/耗时/请求的工具、每次工具执行及返回的小节),生成过程中经 SSE 实时推送每一步(不轮询)。

语义搜索与相关推荐

  • 书籍问答设置新增「全站语义搜索与相关推荐」(默认关闭,需配置嵌入模型):为公开书籍建立向量索引,章节发布或修改后自动更新,可一键补齐。
  • 站内搜索在关键词结果之后增加「语义相关」:按意思匹配的章节小节,点击直接定位到对应小节;单独加载,不拖慢关键词结果。
  • 书籍详情页「你可能也喜欢」优先推荐内容相近的书(不含同一作品的其他语言/版本),没有时仍按标签推荐;阅读页正文后新增「相关阅读」,推荐内容相近的章节。
  • 语义检索经核心的中性扩展点接入,核心与其他插件不依赖问答插件;未解锁的付费内容不参与搜索。

章节导读

  • 新增「章节导读」插件(默认关闭):AI 为章节生成阅读前导读与本章要点,显示在阅读页正文上方(可折叠);为书籍生成全书概览,显示在书籍详情页。
  • 书籍设置新增「章节导读」:查看每章状态(未生成、已生成、内容已修改、已编辑、失败),一键生成未生成与已修改的章节,或单章重新生成;导读与概览都可编辑,编辑过的不会被自动覆盖;状态实时更新。
  • 可开启「发布与修改后自动生成」:章节发布后立即生成,已发布章节修改后约 1.5 分钟更新,连续保存只生成一次;内容不变时复用,不重复调用模型。
  • 未解锁的付费章节不向读者显示导读;费用可由作者或站点承担(管理员设置);每月生成次数为权益,可由会员/等级提升。

整本 AI 翻译

  • 书籍设置新增「AI 翻译」:选择目标语言,AI 先翻译目录并按原书结构建好全部章节,再逐章翻译正文,生成与原书同一翻译分组的新译本(读者可在阅读页切换语言);译稿均为草稿,在写作台审阅后发布,每章保存翻译版本可回退。
  • 支持术语表(按目标语言保存,统一专有名词译法)和整本书的翻译要求;代码块原样保留、不计字数。
  • 进度实时显示(当前章节译文逐字出现),可暂停、继续,某章失败不影响其他章节,失败章节可重试;完成后站内通知。
  • 原书修改或新增章节后,可一键「同步更新」,只翻译有变化的章节。
  • 字数计入「每月翻译字数」(配置 AI 服务后即生效);「整本 AI 翻译」本身也是权益,可设为会员专享;每次调用都记入 AI 用量。

AI 写作助手

  • 新增「AI 写作助手」插件(默认关闭):写作台工具栏或斜杠命令 / 打开右侧助手,对选中的文字续写、润色、改写、扩写、精简,为章节生成大纲或摘要,也可填写自定义要求;可附加要求(如「语气正式一些」)。
  • 结果在后台以流式接口生成并经 SSE 逐字显示(不轮询、不设超时,可随时停止);完成后对比原文,一键替换原文、插入到下方或插入到光标处,生成期间正文被修改时按原文重新定位。
  • 「记录」页查看本书的全部结果,可再次插入、复制或删除;每条结果显示模型消耗。
  • 每月使用次数为权益(默认 100 次,可在成长等级与会员方案中提升或设为 0 作为会员专享),同时受「每月 AI 用量」约束;每次调用都记入 AI 用量,可在「我的 AI 用量」查看。

修复与优化

  • 创建时直接发布的章节此前不会通知关注者、也不给作者加成长经验,现在与先建草稿再发布一致。
  • 「我的 AI 用量」与管理端「AI 用量」的每日用量柱状图不显示:柱子宽度为 0,已修复;用户页补充起止日期。
  • 事件流(站内通知、问答进度、插件安装日志)改用 60 秒有效的短时凭证鉴权,登录令牌不再出现在 URL 中(避免进入代理与访问日志);凭证不能当作 API 令牌,前端在连接被拒时自动换新凭证重连。
  • 审计日志的操作、资源类型、变更字段与系统对象,异步任务的类型全部支持多语言;筛选项改为服务端下发的实际取值,并有测试保证新增词汇必有中英文文案。
  • 修复 MySQL 严格模式下成就评估(last_evaluated_at)与登录锁定(locked_until)写入零时间报错;后者导致 MySQL 下登录锁定此前实际不生效。
  • 「我的书籍」中已完成/已归档的书籍不再显示「继续写作」,改为「查看书籍」。

完整提交记录(36 条)
  • feat(search): add semantic search and related books and chapters (0c4991b)
  • fix(seo): remove the duplicate /sitemap.xml page (fad8942)
  • feat(chapter-guide): add AI chapter guides and book overviews (b02bf3a)
  • fix(documents): fire the chapter-published hook on create-and-publish (3655980)
  • feat(book-translations): translate whole books with AI (b2865e2)
  • refactor(books): extract the book shell creation from book copy (05b4830)
  • feat(ai-writer): add an AI writing assistant plugin for the editor (d2845b8)
  • fix(ai): show the bars in the daily usage charts (8162b3c)
  • refactor(qa): move the SSE event hub into a shared package (ac8281e)
  • feat(ai): usage data retention and CSV export (7548789)
  • feat(ai): usage alerts for daily cost, per-user tokens and call chains (4c24ad8)
  • fix(security): authenticate event streams with short-lived tickets (3d5934d)
  • feat(qa): stream answer text token by token over SSE (bc35119)
  • feat(qa): moderate and allow reporting community questions and answers (bde4f7f)
  • feat(payment): refund requests, partial refunds and product revocation (9941335)
  • feat(qa): stream answer progress over SSE instead of polling (73aeb2e)
  • feat(qa): answer in the background with a live call trace and no caps (014480c)
  • feat(ai): per-user AI usage page with call chains, no overall timeouts (29b026d)
  • feat(ai): meter translation calls and guard against unmetered model use (cb73660)
  • feat(qa): track per-answer usage, meter deep mode and add My Q&A page (645aff5)
  • feat(ai): record model usage and cost with a monthly token entitlement (1ae9af5)
  • feat(qa): book Q&A plugin with cited AI answers and community Q&A (b0ad689)
  • feat(ai): site-wide AI service for chat and embeddings (409981f)
  • feat(paid-content): author-priced paid books and chapters with payouts (27af9d2)
  • feat(moderation): sensitive-word publish review plugin (#87) (8d2b0fc)
  • feat(storage): S3-compatible storage driver and external image localization (#87) (41e1200)
  • feat(import): import Markdown files and Markdown folder ZIPs (#87) (98b46ce)
  • feat(books): add a More info settings tab shown on the book page (5c2200e)
  • refactor(commerce): decouple membership and payment frontends via a neutral commerce contract (15f2bbe)
  • feat(payment): isolated payment plugin with offline, Alipay, WeChat Pay and Stripe (e83ea51)
  • feat(membership): isolated membership plugin with plans, grants and expiry reminders (e0804c7)
  • feat(entitlements): per-user entitlements with growth level privileges (8bdc0e6)
  • fix(admin): localize audit log and background task vocabulary (7da7279)
  • fix(books): finished books show "View book" instead of "Continue writing" (a3e8c6e)
  • fix: never write zero datetimes (MySQL strict mode rejects '0000-00-00') (91039f2)
  • chore: start version 2026.0.6 (59d4a82)

完整更新日志见 CHANGELOG.md。

v2026.0.5

Choose a tag to compare

@github-actions github-actions released this 24 Sep 02:59

KnowForge 2026.0.5 is now available.

Following the transition from InfoSphere to KnowForge and the introduction of the Feature Plugin architecture in 2026.0.4, this release continues to strengthen several key areas:

user growth, achievements, localization, book versions, content collection, reading experience, and plugin modularity.

If 2026.0.4 marked an important architectural transition for KnowForge, 2026.0.5 is where many of those foundations begin to turn into a more complete product experience.


Daily Check-in Is Here

The Growth system now supports:

Daily Check-in.

Users can check in every day to earn XP.

Check-in activity is also available as an achievement metric, allowing administrators to build achievement rules around daily participation.

Growth-related rule switches now take effect immediately as well.

Growth is no longer just a background experience engine — it is becoming part of the daily KnowForge experience.


Public Leaderboards

The Growth system now includes:

Public Leaderboards.

Administrators can configure leaderboard settings and control whether the leaderboard appears in navigation.

Together with public level badges, users now have a clearer way to see their progress across the community.

Level-up notifications are localized as well.

The Growth experience is starting to form a complete loop:

Activity → XP → Levels → Achievements → Leaderboards


A More Complete XP Ledger

As the number of XP sources grows, a single XP total is no longer enough.

2026.0.5 introduces an:

XP Trigger Catalog

along with an administrative:

XP Ledger.

Administrators can inspect where XP comes from and how balances change over time.

A user picker has also been added for manual XP adjustments.

XP lifecycle handling is now more consistent:

  • Achievement XP is granted at most once per user and achievement
  • XP can be reclaimed when an achievement is revoked
  • XP associated with deleted content can be removed

This keeps user progression aligned with the underlying activity that produced it.


Preset Achievements

The achievement system now supports:

Preset Achievements.

Administrators no longer need to build every achievement from scratch.

Preset definitions can provide a starting point and can then be adapted to the needs of a particular community or knowledge base.

This release also fixes achievement reward XP persistence and ensures the same achievement reward is not granted repeatedly to the same user.


Sign-up Language Becomes the User's Preferred Locale

Localization continues to become more deeply integrated into KnowForge.

The language selected during sign-up is now remembered as the user's:

Preferred Locale.

For example, a user who signs up through the Chinese interface can continue to receive localized experiences in Chinese.

This provides an important foundation for a truly multilingual user lifecycle.


Localized System Emails

System emails are now localized.

This includes:

  • Email verification
  • Password reset

The system can use the user's preferred locale when generating these messages.


Localized Notifications and Notification Emails

Localization now extends beyond the interface itself.

Both:

in-app notifications

and:

notification emails

can be localized.

KnowForge's internationalization is therefore moving beyond translated pages toward an end-to-end localized experience covering registration, product usage, notifications, and email.


Better Book Version Grouping

Book version handling receives another major improvement in 2026.0.5.

Version grouping can now be performed:

server-side.

Different versions of the same book can be grouped by the backend instead of relying entirely on frontend behavior.

A new:

Versions Dialog

also provides a clearer overview of all available editions and their latest-version markers.


Merge Editions in Explore

The Explore page now supports:

Merge Editions.

When a book has multiple versions, they can be presented as editions of the same book rather than as completely separate entries.

Instead of seeing:

v1
v2
v3

as three unrelated cards, readers can browse them as one grouped book.

This is particularly useful for technical documentation with long version histories.


Edition Grouping on Public Profiles

Merge Editions is also available on public profile book lists.

Authors who maintain many versions of the same documentation can keep their public profiles cleaner while still making historical versions accessible.


Better Version Sorting

Versions can now be sorted by:

version number.

Reader version ordering is also configurable through a dedicated popup setting.

This gives administrators more control over how historical and current versions are presented.


Improved Mobile Reading

The mobile reader receives an important usability update.

The following controls now use a dedicated mobile drawer:

  • Chapter table of contents
  • Version selector
  • Language selector

Instead of compressing desktop controls into a small viewport, KnowForge now provides a mobile-specific interaction model.

This significantly improves navigation for large, multilingual, and multi-version books.


Searchable Version and Language Selectors

The reusable Select component now supports:

searchable options.

Version and language selectors already use this capability.

The difference may be small for a book with only two versions, but it becomes much more useful when documentation contains many releases or multiple languages.


Move Chapters Between Books

Chapter management now includes:

Move to Book.

A chapter can be moved directly into another book using a dropdown action and searchable book picker.

This makes it much easier to reorganize knowledge structures as documentation evolves.


Select All for Chapter Operations

The chapter selection toolbar now supports:

Select All.

Combined with existing operations such as:

  • Bulk status updates
  • Bulk deletion
  • Copy to another book
  • Move to another book

this makes large-scale chapter management significantly more efficient.


Reusable Book Search Selector

2026.0.5 introduces a reusable:

BookSearchSelect

component.

It is already used in workflows such as:

  • Copying content to another book
  • Chapter link configuration
  • Book selection

Administrators no longer need to search through long, static dropdown menus when many books exist.


Configurable Default Status for Top-level Chapters

Books can now define the:

default status for new top-level chapters.

The Writer follows the same setting.

Collected content also respects the book's default chapter status.

This supports workflows ranging from:

draft first, review before publishing

to:

publish collected content immediately.


Content Collection Continues to Improve

Content Collect receives another set of improvements in this release, particularly for documentation sites.


Better Docusaurus Extraction

KnowForge now handles:

Docusaurus

documentation more accurately.

Improvements include:

  • Better page content extraction
  • Preserving code blocks
  • Removing additional permalink anchors
  • Cleaner document conversion

This makes documentation migration and collection more reliable for developer-focused sites.


Rewrite External Links to Internal Reader Links

One particularly useful improvement is automatic link rewriting.

When Page A links to Page B and both pages have been collected into KnowForge, the original external link can now be rewritten as an:

internal KnowForge reader link.

Collected books therefore retain more of the relationships between the original documents instead of becoming disconnected copies of individual pages.


More Complete Crawl History

Previously, crawl history primarily focused on larger crawl jobs.

Now:

single-page web collection

is recorded in crawl history as well.

Administrators can therefore review both:

  • Single-page collection
  • Whole-site crawling

from the same history system.

Several crawl-history status and slug deduplication issues have also been fixed.


Improved Slug Deduplication

When pages with identical names appear under different sections, slug conflicts now prefer:

ancestor slug prefixes

instead of simple numeric suffixes.

Rather than ending up with paths such as:

install-2

KnowForge can produce URLs that better reflect the original document hierarchy.


Reader Improvements

The reader receives several smaller but useful improvements:

  • Book titles are clickable
  • Watermarks support tiled rendering
  • Disabled comments are fully hidden
  • Previous/next navigation supports external-link chapters
  • Mobile TOC, versions, and languages use a drawer

Together, these changes improve the experience of reading more complex books.


More Flexible OAuth Providers

OAuth providers can now use:

custom icons.

Administrators can also choose how authentication options are displayed:

  • Button
  • Icon

OAuth callback errors now show the actual provider name as well, making failures easier for users and administrators to understand.


Configurable Rate Limits

KnowForge now includes:

configurable rate limits.

Administrators can manage rate-limiting behavior from the admin interface.

This provides additional flexibility for public deployments, community instances, and API-heavy environments.

...

Read more

v2026.0.4

Choose a tag to compare

@github-actions github-actions released this 21 Sep 06:44

KnowForge 2026.0.4 发布:从 InfoSphere 到 KnowForge,我们重新定义知识锻造

这一次,我们不只是发布了一个新版本。

InfoSphere 正式更名为 KnowForge。

从最初的知识内容管理,到如今逐渐覆盖写作、采集、组织、阅读、版本管理、用户成长与扩展能力,我们越来越清楚这个项目真正想做的事情:

Forge Your Knowledge.

锻造属于你的知识。

因此,从 2026.0.4 开始,InfoSphere 正式以新的名字 —— KnowForge 继续向前。

这次版本累计包含 83 项变更,也是近期非常重要的一次版本更新。


从 InfoSphere 到 KnowForge

首先是这次最明显的变化:

项目正式由 InfoSphere 更名为 KnowForge。

新的名字由:

Knowledge + Forge

组合而来。

Knowledge 代表知识,Forge 代表锻造。

相比单纯地保存和展示内容,我们更希望 KnowForge 表达的是一种持续构建知识的过程:

收集 → 整理 → 创作 → 连接 → 发布 → 阅读 → 沉淀

知识不是简单存放在那里。

它应该被不断整理、加工、关联,并最终成为真正属于自己的知识体系。

这也是 KnowForge 接下来继续发展的方向。

为了保证已有用户能够平滑升级,本次更名同时保留了对旧部署方式的兼容,并完成了环境变量以及数据目录的迁移兼容处理。


全新的插件化架构

2026.0.4 中一个非常重要的底层变化,是 Feature Plugin 插件框架 的加入。

过去很多功能直接属于 KnowForge 核心的一部分。

随着功能越来越多,这种方式会让系统逐渐变得臃肿,也不方便用户根据自己的需求进行取舍。

因此,我们开始重新设计功能架构。

现在部分功能已经可以作为独立插件存在。

包括:

  • 标签
  • 成就系统
  • 用户成长体系
  • 书籍关注
  • 书籍多语言
  • 书籍版本
  • 内容采集
  • 水印

等能力正在逐步完成插件化。

管理员可以根据实际需求启用或者关闭对应功能。


插件真正拥有自己的生命周期

这次做的并不只是增加一个“插件开关”。

KnowForge 开始从架构层面对插件进行隔离。

插件可以拥有自己的:

  • 数据模型
  • 数据库 Migration
  • API
  • 权限
  • 管理页面
  • 配置
  • 数据清理逻辑

插件也开始支持 Purge Data。

也就是说,当一个功能不再需要时,不只是简单关闭入口,还可以选择清理该插件产生的数据。

与此同时,插件开始采用自注册机制,不再依赖一个固定的硬编码插件列表。

这是 KnowForge 后续扩展体系非常重要的一步。


全新的用户成长体系

本次加入了新的 Growth 用户成长系统。

用户在 KnowForge 中进行阅读、创作和互动时,可以获得经验值。

例如:

  • 创建内容
  • 发布章节
  • 阅读内容
  • 发表评论
  • 完成特定行为

管理员可以自行配置不同操作所对应的经验值规则。

随着经验积累,用户可以不断提升自己的等级。

用户等级也可以展示在公开个人主页中。

这意味着 KnowForge 开始从单纯的内容工具,逐渐增加一些围绕社区和长期知识积累的机制。


成就系统继续增强

已有的成就系统也在这个版本继续扩展。

新增了更多规则指标,包括:

  • 创作类指标
  • 阅读类指标
  • 成长类指标

当用户进入成就页面时,系统会重新计算当前进度,并自动领取已经满足条件的成就。

同时,如果管理员关闭了用户成长插件,与成长相关的成就指标也不会继续出现在规则配置中。

不同插件之间开始真正形成联动。


全新的整站内容采集

内容采集是这个版本中另一项比较大的功能更新。

KnowForge 新增了 整站 Crawl 能力。

现在可以从一个网站入口开始:

自动分析站点结构 → 发现页面 → 抓取内容 → 创建章节

并最终构建成一本完整的书籍。

同时新增了完整的采集向导以及采集历史。

你可以查看:

  • 采集任务
  • 当前状态
  • 历史记录
  • 页面结构
  • 导入结果

采集过程中还会尽可能保留原始 URL 的大小写规则。

对于已经存在的书籍,也可以继续向其中采集新的内容,而不必每一次都创建一本新书。


PDF 与网页导入开始拆分

随着内容导入能力越来越复杂,本次也重新整理了 Import 模块。

内容导入已经进一步拆分为:

  • PDF 导入
  • Web 网页导入

不同类型的导入逻辑开始独立维护。

同时,是否在导入后的内容中自动附加原始页面链接,也改成了一个可选配置。

用户可以根据自己的内容发布方式决定是否保留来源链接。


Markdown 文件可以直接导入编辑器

写作工作台现在支持直接导入 Markdown 文件。

不再需要:

打开文件 → 全选 → 复制 → 回到编辑器 → 粘贴。

可以直接把 Markdown 内容导入当前章节进行编辑。

对于已有大量 Markdown 文档的开发者来说,这会明显降低迁移内容的成本。


支持外部链接章节

过去 KnowForge 中的章节通常都需要拥有自己的正文内容。

现在章节可以直接指向一个 外部 URL。

这意味着一本书的目录中,可以同时存在:

  • KnowForge 本地章节
  • 外部文档
  • 外部网站
  • 项目页面
  • API 文档

对于外部链接章节,还可以配置打开方式。

同时,在目录存在外部页面时,KnowForge 也会避免对这些页面开放不适用的评论功能。

这一能力会让 KnowForge 更适合作为大型知识入口和文档导航中心。


支持跨书籍复制章节

章节管理现在支持:

将选中的章节复制到另外一本书。

如果选中的章节下面还有子章节,也可以连同整个章节树一起复制。

对于需要拆分文档、重新组织书籍结构或者基于已有内容创建新知识库的场景,会方便很多。


章节批量管理

章节管理进一步增强。

现在可以:

  • 批量修改状态
  • 批量删除章节
  • 树形选择父章节
  • 跨书籍复制章节

对于章节数量非常多的大型书籍来说,不再需要逐条进行操作。


章节目录支持搜索

阅读器的章节目录现在支持搜索。

当一本书有几十甚至几百个章节时,可以直接输入关键词快速定位章节。

同时,目录区域现在还会显示:

当前书籍总章节数量。

对于大型技术文档,这会是一个非常实用的小功能。


Markdown 支持内部文档链接

Markdown 新增:

doc:

协议。

现在可以通过特殊的内部链接语法引用 KnowForge 中的其他文档。

相比直接写死 URL,这种方式更加适合构建复杂的知识网络。

未来即使站点域名或访问路径发生变化,也更容易维护内部引用关系。


书籍关注功能

KnowForge 新增了 Follow 书籍关注功能。

用户可以关注自己感兴趣的书籍。

当书籍发生更新时,可以进一步通过通知体系获得相关更新信息。

这样一来,除了:

  • 阅读
  • 收藏
  • 点赞

之外,又增加了一种更加适合持续内容的关系:

关注。

对于持续维护中的技术手册、课程以及长期更新的知识库来说,这种模式会更加自然。


「我的书库」进一步完善

这次重新整理了用户自己的内容入口。

现在 My Books / Library 中可以统一查看:

  • 我的书籍
  • 我的阅读
  • 我的收藏
  • 我的点赞
  • 我的关注
  • 我的导出

这些功能使用统一的 Tab 结构组织。

KnowForge 开始逐渐拥有一个更加完整的个人知识中心。


全新的标签管理

标签现在正式成为一个独立 Feature Plugin。

同时增加了完整的后台标签管理能力。

管理员可以:

  • 创建标签
  • 编辑标签
  • 配置标签图标
  • 管理标签

同时新增了独立的:

全部标签页面。

首页的主题探索区域现在也会显示每个标签自己的图标。

点击首页标签分类标题,也可以直接进入对应的标签列表页面。

标签正在从单纯的内容字段,逐渐成为 KnowForge 内容发现体系的重要组成部分。


书籍版本能力继续完善

书籍版本现在支持标记:

Latest Version / 最新版本

在书籍详情以及阅读页面中,会展示对应的最新版本标记。

同时:

  • 语言选择器
  • 版本选择器

都重新调整成了更加紧凑的下拉菜单。

版本列表的展示顺序也进行了调整,让新版内容更加容易被找到。


多语言与版本真正插件化

书籍:

  • 多语言
  • 多版本

功能现在都正式纳入 Feature Plugin 系统。

管理员可以根据自己的使用场景决定是否开启。

如果只是搭建一个简单知识库,可以关闭这些高级能力。

如果需要构建软件文档、国际化产品手册,则可以开启:

Translation + Version

相关功能。

KnowForge 不再要求所有站点都采用完全相同的功能组合。


导出历史

内容导出现在会记录历史。

用户可以在:

我的导出

中查看自己过去执行过的导出任务。

对于大型书籍或者需要频繁生成离线内容的用户来说,管理起来会更加直观。


OAuth 新增 Gitee 与 GitCode

第三方登录继续扩展。

2026.0.4 新增:

  • Gitee
  • GitCode

OAuth 登录支持。

对于国内开发者社区和企业部署场景来说,登录方式更加完整。

与此同时,后台 OAuth Provider 配置也重新设计为更加紧凑的折叠面板形式。


管理后台链接可以直接选择书籍章节

管理员配置:

  • 帮助文档
  • 用户协议
  • 隐私政策

时,现在不再需要手动填写复杂的内容地址。

可以直接通过书籍选择器搜索一本书,并进一步选择其中的章节。

这样就可以直接使用 KnowForge 自己维护:

  • 帮助中心
  • 使用协议
  • 隐私政策

真正实现:

用 KnowForge 管理 KnowForge 自己的文档。


书籍复制能力增强

复制书籍继续获得大量改进。

现在支持:

仅复制 Metadata

也就是说,可以只复制书籍基础配置,而不复制所有正文内容。

同时完整复制时,会更加准确地保留:

  • 章节顺序
  • 章节字段
  • 相关配置

对于使用模板创建书籍的场景更加友好。


水印能力插件化

原有的 Watermark 水印功能已经从核心代码中拆出,成为独立插件。

同时拥有自己的设置页面。

关闭水印插件后,对应设置入口也会同时消失。

这也是本次插件化架构改造的一部分。


日志系统增强

KnowForge 现在支持按天生成运行日志文件。

管理员也可以通过后台配置相关日志行为。

对于自行部署 KnowForge 的用户而言,后续排查:

  • 服务异常
  • API 错误
  • 定时任务
  • 数据问题

都会更加方便。


安全能力继续加强

安全方面,本次继续强化了涉及敏感操作的验证流程。

例如永久删除回收站中的内容,需要经过 2FA Step-up 验证。

同时针对部分页面和插件状态,也补充了更加严格的访问控制。

当某个插件被禁用时,对应页面会直接不可访问,而不仅仅是把导航入口隐藏起来。


部署与升级兼容

因为本次涉及项目正式更名,所以部署侧也进行了大量兼容工作。

新的环境变量已经逐步统一为:

KNOWFORGE_*

同时增加旧配置和旧数据目录的迁移逻辑。

已有 InfoSphere 部署升级到 KnowForge 时,不需要因为项目更名而重新初始化全部数据。

Docker 构建环境也同步进行了更新,以适配当前 Go 版本。


还有很多体验细节

除了这些主要功能,2026.0.4 还包含大量细节改进,例如:

  • 我的阅读页面根据屏幕自动计算展示数量
  • 修复响应式网格因滚动条出现产生的闪烁
  • 个人主页书籍列表自适应屏幕宽度
  • 修复章节预览面板被父容器裁切的问题
  • 修复书籍关注按钮空对象问题
  • 修复插件开启关闭后需要多次刷新才能生效的问题
  • 修复后台保存站点配置时可能覆盖已有配置的问题
  • 优化书籍语言与版本选择器
  • 优化阅读器右侧目录
  • 优化后台章节链接选择体验
  • 修复复制书籍时章节顺序与字段丢失问题

很多地方可能只是一个很小的变化。

但我们始终认为,一个真正好用的知识平台,就是由这些细节一点一点积累出来的。


为什么叫 KnowForge?

项目发展到现在,我们越来越不希望它只是一个:

“在线文档系统”。

因为今天的 KnowForge 已经开始拥有:

  • 内容创作
  • Markdown 编辑
  • 内容采集
  • PDF / Web 导入
  • 书籍与章节组织
  • 多版本管理
  • 多语言
  • 标签体系
  • 搜索
  • 阅读
  • 评论
  • 收藏
  • 关注
  • 用户成长
  • 成就体系
  • 内容导出
  • 插件系统

这些能力最终指向的,其实是同一件事情:

建立、维护并持续演进自己的知识体系。

这也是为什么,我们最终选择了 KnowForge 这个名字。

KnowForge

Forge Your Knowledge.

锻造属于你的知识。


2026.0.4,只是新的开始

从 InfoSphere 到 KnowForge,是一次更名。

但对我们来说,它更像是这个项目进入下一个阶段的标志。

随着插件体系逐渐稳定,未来会有更多功能从核心系统中拆分出来。

KnowForge 核心会尽可能保持简单。

而用户可以根据自己的需要,组合出不同形态的知识平台。

它可以是一套:

个人知识库。

也可以是一套:

团队文档系统。

还可以是一套:

开源项目文档站、在线书籍平台、产品帮助中心,甚至知识社区。

这就是 KnowForge 接下来想继续探索的方向。

KnowForge 2026.0.4 已发布。

新的名字,新的架构,也是一段新的开始。

Forge Your Knowledge.

v2026.0.3

Choose a tag to compare

@github-actions github-actions released this 19 Sep 03:27

动态国际化

  • 新增站点语言管理:可配置语言、文字方向、默认语言、回退链及界面/内容启用状态。
  • 新增界面语言包草稿、发布、JSON 导入导出和 ICU 消息支持;Cookie/账号语言同步到服务端首屏。
  • 成就改为按启用语言动态填写名称、说明和提示,旧中英文数据自动迁移;逐语言版本校验避免覆盖其他翻译,草稿不泄露到公开响应。
  • 通用多语言字段组件支持复制及翻译空白字段,可供后续会员和等级模块复用。

成就模块

  • 管理员可默认关闭或启用成就模块,并配置公开陈列、解锁通知、用户隐藏权限和陈列数量。
  • 新增 18 项阅读、创作、社区和账号白名单指标,支持 all/any 多条件、阈值、时间窗口、对象过滤、系列等级、稀有度与中英文文案。
  • 成就图标支持 Font Awesome、栅格图片和安全净化 SVG;自动评估使用持久化去重事件与后台重算任务。
  • 新增“我的成就”、公开主页成就陈列、人工授予与撤销、展示偏好、通知偏好和完整审计记录。

完整提交记录(125 条)
  • chore: release 2026.0.3 (f965a92)
  • chore(release): promote unreleased changelog notes into new version (46f221b)
  • chore(release): verify version sources match the tag in release.sh (f019372)
  • style(detail): make the "you may also like" grid fit columns to width (4f08900)
  • feat(achievements): split the definition modal into basic and localization tabs (d2162ab)
  • feat(i18n): make the language switcher an icon dropdown (a0febee)
  • fix(home): drop invalid className on latest-list CoverImage (0f181ec)
  • feat(achievements): add reading-days, published-books and tags-used metrics (f0759c6)
  • feat(achievements): link category to rule metrics, add a date-time picker (5e9c4b6)
  • feat(home): rebuild the content area to the new prototype layout (6a7f5cc)
  • feat(detail): split contents and reviews into horizontal tabs (e9d50bd)
  • feat(explore): add a members-only books filter for signed-in users (f20a65f)
  • feat(books): auto-fit book grid columns to the viewport width (ab90836)
  • feat(books): let the copy dialog set the new book's access path (b43d79a)
  • feat(seo): serve /sitemap.xml with public books and published chapters (2be8095)
  • feat(import): web-collected chapters follow parent status when enabled (870e871)
  • fix(auth): only show the email-activation banner when activation is required (40f118e)
  • refactor(admin): move language management to its own left-nav menu (cebb95d)
  • fix(reader,writer): reset scroll to top on chapter switch; link writer title (3f8b9d6)
  • feat(books): allow book descriptions up to 1000 characters (3172af1)
  • feat(achievements): scope create button to definitions tab, i18n metric catalog (572f0bc)
  • fix(server): let long text columns exceed the MySQL 64KB text limit (21cb4b9)
  • chore: ignore the .rundata browser session directory (e0ecce9)
  • fix(ui): let achievement controls follow the theme control size (5fd1214)
  • fix(i18n): remove stray Chinese text from two English strings (67fd446)
  • feat(i18n): make site languages, UI messages and content translatable at runtime (050b345)
  • docs: add installation guide (e923a50)
  • fix(ui): let custom max-width classes override the Modal default (f29e01d)
  • ci: run checks on pushes to dev (3db0a5f)
  • ci: add i18n integrity check to web checks (a5cebdd)
  • fix(i18n): add missing common.settings fallback key (6c45d87)
  • fix(i18n): translate revision reason label in history list (cd5c823)
  • refactor(seo): generate sitemaps via Go background job and move site URL to site settings (9e25c65)
  • feat(seo): serve sitemaps from static files refreshed daily in background (377557a)
  • feat(seo): shard sitemap into an index for scale and faster builds (f757672)
  • feat(seo): include public chapter reader URLs in sitemap (79c7d03)
  • fix(seo): emit canonical /book/detail/{slug} URLs in sitemap (03ed207)
  • feat(book): split localization & versions into a dedicated settings tab (c0029eb)
  • fix(i18n): replace missing admin.nav.chapters references with admin.nav.documents (3401fb9)
  • fix(i18n): resolve tsc errors in web (a3da129)
  • fix(achievements): widen the achievement editor modal to fit its content (68c0326)
  • i18n: localize print TOC heading and editor component-snippet scaffolding (eeedc67)
  • i18n(admin): localize the achievements admin page (aaf69de)
  • i18n(admin): drop dead task label maps, localize oauth hints and translation placeholder (ffe9314)
  • i18n(install): localize the setup wizard (b88ebf2)
  • i18n(achievements): localize the my-achievements page (0509ae3)
  • i18n: localize site meta description fallback and admin system console strings (9d0095d)
  • i18n(writer): localize the book writer workbench (fb14886)
  • i18n(2fa): localize TwoFactorSettings (6f8432e)
  • i18n(book-settings): localize access-path, data and danger tabs (4293477)
  • feat(admin,books): dedicated footer-links tab, group localization fields (4227a8c)
  • feat(editor): metadata toolbar button with icon picker, add Accordion/Steps inserts (6353acf)
  • fix(writer): surface save/publish feedback, auto-scroll TOC to active chapter (565b6f8)
  • feat(editor): add Accordion and Steps blocks, verify recursive block parsing (f07315f)
  • feat(achievements): add configurable achievement system (474b31c)
  • fix(i18n): restore web quality gates (55b8057)
  • feat(i18n): wire books page, BookForm and book settings pages to i18n (a807298)
  • feat(i18n): wire base UI components and fill missing locale keys (b24b9ec)
  • i18n(global): localize _app.tsx loading messages (5440b31)
  • i18n(user/profile): localize public profile page (00c3096)
  • i18n(user/theme): localize theme page (f902d34)
  • i18n(user/reading): localize reading page (c57294b)
  • i18n(user/oauth): localize oauth page (d05e380)
  • i18n(user/export): localize export page (214f4f7)
  • i18n(user/trash): localize trash page (05353af)
  • i18n(user/security): localize security page (6820cb4)
  • i18n(user/notes): localize notes page (6fc88f9)
  • i18n(user/analytics): localize analytics page (c240651)
  • i18n(user/profile): localize profile page (5b099b2)
  • fix(markdown): handle indented migration content and unanchored tag matching (0c50253)
  • i18n(admin/settings): localize translation page (666c4d9)
  • i18n(admin/settings): localize captcha page (860117d)
  • i18n(admin/settings): localize registration page (a9d2939)
  • i18n(admin/settings): localize login security page (2405ecb)
  • i18n(admin/settings): localize content page (ef8e882)
  • i18n(admin/settings): localize oauth page (44b86e7)
  • i18n(admin/settings): localize mail and storage pages (97263ec)
  • i18n(admin/settings): localize index and site pages (c1abc1a)
  • fix(markdown): fence-aware and nesting-aware block scanning for extensions (0670c81)
  • i18n(admin): localize admin pages (b65345b)
  • i18n(admin): localize achievements management page (6229816)
  • feat(documents): promote draft book to in_progress when a chapter is published (0b52ee7)
  • i18n(components): localize shared layout and admin components (6963a45)
  • i18n(components): finish shared translations (8fb5c96)
  • i18n(components): localize shared user-facing components (5fa3578)
  • feat(translation): configurable translation with editor translate button (faa1b1b)
  • feat(reviews): add book ratings and reviews (d231cd3)
  • feat(editor): support Tabs/Note/Warning/Tip components and sub-chapter TOC (bb3a13c)
  • feat(docs): custom tree icons via metadata (51d9865)
  • feat(site): make footer links admin-configurable by group (c61f124)
  • feat(site): render release notes as markdown in the version modal (ba7c938)
  • fix(books): enter first chapter after copy, add reader TOC expand/collapse-all (7f8ea52)
  • fix(books): tidy slug editor layout, add save loading + child-status toggle to book settings (e29ccbf)
  • feat(writer): let authors set a custom document path (slug) (a9213e9)
  • i18n(user): localize danger zone and invite-code pages (c13878e)
  • fix(ui): smoother cover loading — fade in over gradient, no gray skeleton (2b3f07f)
  • i18n(user): localize favorites and notification settings pages (5ded150)
  • fix(home): show real meta under hero book cards instead of empty bars (3a4ec32)
  • i18n(reader): localize the chapter reader page (70ee408)
  • feat(ui): add a loading skeleton for book cover images (0fbca54)
  • fix(2fa): keep the step-up modal above other dialogs; test trash-delete step-up (62305f4)
  • i18n(detail): localize the book detail page (f0b8b85)
  • i18n(books,comments): localize create-book page and the comments section (0cac27c)
  • i18n(books): localize BookCard status/visibility/description (shared across lists) (fad1df0)
  • i18n(public): localize the explore and search pages (10797c9)
  • i18n(home): localize the home page (hero, stats, latest, popular sections) (f677683)
  • feat(books): one-time editable access path for copied books (12a1282)
  • fix(explore): stop the browse tabs and content overflowing on mobile (42fe1c1)
  • fix(books): copy all config on duplicate; reactive + in-reader variant switch (af121f9)
  • i18n(auth): localize forgot/reset password, verify-email, oauth callback, 404 (6ee8799)
  • i18n(auth): localize login, register and OAuth surfaces (7be568d)
  • fix(ui): show per-row loading for backend actions in lists (b67b6df)
  • i18n(nav): localize the app shell (header, nav, footer, user menu) (dc1bc1c)
  • feat(chapters): cascade publish status to children and follow-parent default (721538c)
  • feat(i18n): add internationalization with namespace.function.keyname keys (4274136)
  • feat(writer): support all heading levels H1-H6 in the toolbar (7bd941b)
  • feat(site): configurable help doc, user agreement and privacy policy (f778485)
  • feat(books): icon actions and more operations in chapter management (90766e6)
  • fix(notifications): use the themed content container (dda96dc)
  • fix(ui): make toasts compact and theme-size independent (6341bf0)
  • fix(notify): don't flash the admin-disabled banner while loading (f15a795)
  • fix(writer): guard document loader against out-of-order responses (76e7ae9)
  • fix(release): cross-compile Docker image and use complete release notes (1ff6888)
  • feat(writer): git-diff-style comparison in version history (4f49d3b)
  • chore(release): bump version to 2026.0.3 (d2bfa7e)

完整更新日志见 CHANGELOG.md。

v2026.0.2

Choose a tag to compare

@github-actions github-actions released this 14 Sep 03:37

桌面客户端

  • 本地会话与配置:服务器地址、登录令牌改用本地 SQLite(infosphere.db)保存;旧 config.json 首启自动迁移。
  • 令牌桥:注入脚本同步 seed 令牌恢复登录态,并把 web 端登录/登出经 IPC 回写 SQLite(不改 app/web 代码)。
  • 多服务器:设置页支持保存多台服务器、一键切换与删除;托盘「切换服务器」保留列表。
  • 应用内 GitHub OAuth:授权回调链留在 webview 内完成,桌面端可直接第三方登录;修正 dev/prod 下本地页与回环地址的导航判定。

阅读进度统计

  • 我在读:跨书聚合进度页(已读/总章节、百分比、上次读到、继续阅读)。
  • 数据概览:在读 / 已读完 / 累计已读章节 / 连续阅读天数。
  • 精细进度:记录章节滚动位置以精确续读,累计每本阅读时长并在我在读页与书籍详情页展示。
  • 进度管理:书籍详情页支持「标记读完」与「重置进度」。
  • 每日目标与打卡日历:可配置每日目标(新读章节数),12 周活动热力图 + 当前/最长连续打卡。
  • 作者分析:书籍分析页新增章节到达漏斗,直观呈现读者在哪一章流失。

完整更新日志见 CHANGELOG.md。

v2026.0.1

Choose a tag to compare

@github-actions github-actions released this 11 Sep 06:12

自 v2026.0.0 起的变更

  • feat(reading): reset progress and mark book as read (1e51205)
  • feat(reading): show accumulated reading time on book detail (b84b287)
  • feat(book-analytics): add per-chapter reader funnel (2924101)
  • feat(reading): track scroll position and reading time per book (a7f5368)
  • feat(reading): add per-user reading stats overview (9293c56)
  • feat(reading): add "my reading" dashboard aggregating per-book progress (c74fc5c)
  • docs(desktop): document sqlite storage, token bridge and remote ipc (f9fbb7f)
  • feat(desktop): render web UI as a client with sqlite-backed session (4bcf774)
  • fix(web): make export format hints user-facing (b8bfd42)
  • feat(export): add EPUB export format (1aa7f21)
  • chore(desktop): sync Cargo.lock version to 2026.0.1 (5117e45)
  • fix(book-detail): remove unnecessary card wrapper around report button (85cb43e)
  • fix(book-detail): move report button above tip, style with red border (e72b867)
  • feat(import): gate web browser rendering behind headless browser plugin (6970f6c)
  • refactor(settings): remove redundant system config key-value tab (1bd4635)
  • fix(docs): replace invalid forum link with GitHub Issues in CONTRIBUTING (dfc0258)
  • fix(docs): correct organization name in LICENSE and email in CODE_OF_CONDUCT (79ef89b)
  • feat(books): add login-required visibility for published books (8f459de)
  • feat(settings): conditionally show storage fields based on driver selection (890a44f)
  • fix(books): remove fullWidth from scope tabs to fix desktop width (438feae)
  • feat(export): add configurable Powered by PDF footer (0fe4f19)
  • fix(web): drop redundant PDF group label in export menu (31dc2e5)
  • feat(ui): add custom Checkbox component, replace native inputs in export settings (8f73989)
  • feat(export): add per-book toggle for guest export (87320bb)
  • fix(plugins): quote MySQL reserved word 'key' in all queries (c9b95db)
  • fix(plugins): include GORM error in uninstall log, clear logs on reconnect (42a3618)
  • fix(plugins): add error checking for DB delete in uninstall handler (0728c47)
  • feat(editor): add chapter context menu (a83fcb2)
  • fix(web): match notes tab size with button height (69f3fa7)
  • fix(editor): contain sidebar tabs within panel (3bac92d)
  • fix(web): constrain book report action width (b5e593e)
  • fix(web): constrain my books scope tabs (f5e2c55)
  • feat(tasks): schedule retryable maintenance cleanup (1d9c07c)
  • fix(web): prevent mobile book detail overflow (c03df80)
  • fix(web): resolve tag labels and mobile book layouts (9cc6104)
  • feat(import): process ZIP uploads in background (da68086)
  • feat(import): process PDF uploads in background (80c26ba)
  • feat(tasks): add persistent background job queue (49a6b81)
  • fix(ui): unify control heights across theme sizes (4244b0b)
  • feat(moderation): add content report review workflow (2065d31)
  • fix(test): check error before using HTTP response in plugin tests (f7f804b)
  • feat(annotation): support annotation (0063386)
  • feat(web): gate PDF export options on plugin availability (b9923b0)
  • feat(web): per-book export style with author-share fallback (37270f2)
  • feat(web): let readers export public books with format choice (4041ff4)
  • refactor(web): move book export config to its own settings tab (81e0586)
  • feat(web): stream plugin install/uninstall logs over SSE (b42d38e)
  • fix(api): stop stale install from resurrecting uninstalled plugin (32a28c0)
  • fix(theme): use CSS variables for control heights across all components (9643bf2)
  • fix(theme): use CSS variables for control heights across all components (cdca8d5)
  • feat(theme): add custom option for all theme settings (a18b5ab)
  • feat(theme): add custom color option for primary hue (27b7cec)
  • feat(theme): make button size setting control all UI controls (073098f)
  • feat(ui): create reusable Modal component with theme support (2538bc1)
  • feat(ui): add version number in footer with release notes modal (28b78bd)
  • fix(ui): make logout button red for danger action (6e0b6da)
  • feat(ui): update user dropdown menu (d0603bd)
  • fix(theme): load theme settings after login (605ddab)
  • fix(theme): replace inline button styles with Button/ButtonLink components (d7fabb2)
  • fix(theme): apply CSS variables to Button, Container, Layout, AdminLayout (2660531)
  • feat(theme): reorganize theme settings with tab navigation (715f070)
  • fix(theme): remove preview section from theme settings page (5755bde)
  • fix(theme): fix CSS variable not applying and remove live preview (8a65b6a)
  • feat(theme): expand theme settings with 6 new customization options (c542c7a)
  • fix(theme): reset theme to default on logout (bf06bc0)
  • fix(theme): move rounded overrides outside @layer for higher specificity (dbb8b6f)
  • fix(theme): apply CSS variable to Tailwind rounded-* classes (e057e50)
  • feat(theme): add user theme settings with CSS variables (4e6b45c)
  • feat(user): split OAuth bindings into standalone tab (29d01ac)
  • fix(ui): unify control heights across pages (2e3ce22)
  • fix(ui): align pagination height with input/button (3d1f0e6)
  • fix(ui): align tabs height with input/select (dcd698b)
  • refactor(ui): unify control heights, remove inner shadow (c841929)
  • refactor(ui): unify horizontal tabs as segmented cards (2e976df)
  • feat(admin): add audit log tracking (df71a3e)
  • feat(security): add tiered request rate limits (e1b36fb)
  • feat(collaboration): add invitation confirmation workflow (ec43266)
  • feat(trash): add recovery and permanent deletion (3742e72)
  • feat(books): add lifecycle statuses (5fa0795)
  • feat(auth): unify login and registration experience (1220b56)
  • docs(api): document plugin, export-settings and PDF export endpoints (1863d8e)
  • feat(web): PDF export UI, plugin manager and export settings (970a427)
  • feat(api): render book PDF via headless chrome print view (c501ac4)
  • feat(api): scaffold plugin system and export settings (eb5ff34)
  • feat(web): add chapter and danger-zone tabs to book settings (bfa7b23)
  • refactor(web): float the book form preview and slim its header (f38af69)
  • refactor(web): split book settings into a tabbed layout (5eeae24)
  • feat(reader): mark read chapters in navigation (d950178)
  • feat(admin): add chapter management (5a57f5c)
  • feat(admin): add book management (c3f9fd2)
  • fix(ui): render select menus in a portal (1628c83)
  • fix(ui): stabilize tooltip entrance position (f6cd330)
  • fix(ui): prevent book menus from being clipped (36e195d)
  • fix(ui): prevent tooltips from being clipped (0c0f9dd)
  • feat(import): add PDF import to book menus (f2ff9b5)
  • feat(ui): replace native browser dialogs (ab26fbc)
  • feat(import): add PDF reimport modes (f0db438)
  • fix(import): preserve markdown during content ingestion (93be63b)
  • fix(import): stabilize web collection dialog (e5127d0)
  • feat(import): add web chapter collection (9fdb099)
  • feat(import): add PDF and dynamic web ingestion (3949b33)
  • feat(editor): add document revision history (7d6d422)
  • feat(web): add book like actions (47407b6)
  • fix(editor): disable automatic chapter saves (11f058f)
  • fix(web): enable book favorite actions (2b2aa57)
  • fix(server): make view counters atomic (c994e41)
  • feat(deploy): add Docker and Docker Compose support (88a9a64)
  • feat(deploy): add Docker and Docker Compose support (bea54ca)

v2026.0.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 09:08

变更记录

  • fix(release): brace shell vars next to full-width punctuation (f00af2d)
  • chore: add version bump and release scripts (04ce9c4)
  • fix(desktop): keep dev setup page inside the webview (57a36ff)
  • feat(web): track per-chapter views and derive book total (8531430)
  • fix(web): reduce empty space in book detail hero (827790f)
  • feat(web): show reading progress and read chapters on book detail (8756fb8)
  • fix(web): count a view when opening the book detail page (27933a4)
  • fix(api): return chapter_count on book listings (aaccc81)
  • fix(web): client-load private book detail and fix info-row overflow (0e18009)
  • fix(web): prevent nested anchor hydration error in BookCard (6fe4913)
  • style(web): align book card date to the right of meta row (2f4e92c)
  • feat(api): support sort param on book list endpoints (b5ca058)
  • refactor(web): unify book cards into single BookCard component (e9e67e8)
  • fix(web): use content-area loading on admin console lists (b1b4504)
  • feat(web): show loading state on explore filters and tags (08dd4ce)
  • fix(web): resolve explore hydration from nested avatar link (d39c969)
  • fix(web): make route loading indicator unobtrusive (bf178ed)
  • fix(web): show loading states while fetching page data (3e1e70f)
  • feat(books): add watermarks and harden content access (42fffb3)
  • feat(web): link console overview to system config manager (a0dcfb4)
  • fix(web): capture config key before clearing input state (c605f19)
  • test(api): cover admin user list sorting (3e548ec)
  • feat(web): show recent activity on console overview (9d7cd1c)
  • feat(api): add console activity timeline endpoint (6c587f4)
  • fix(web): fill console content width and widen role select (3449c50)
  • feat(web): add sort control to user management list (14be25b)
  • feat(api): sort admin user list by created or last login (72cd07d)
  • feat(web): show content stats on console overview (5c6b616)
  • feat(api): include tag_count in site stats (fb47112)
  • feat(web): add 系统配置 tab for key-value config management (1e0818b)
  • feat(api): manage system config as key-value pairs (5f51382)
  • fix(web): center toggle switch knob within its track (4606d35)
  • feat(web): link book detail to its settings page (ce69a88)
  • test(api): cover admin user management endpoints (3c9421f)
  • fix(api): namespace user management routes under /admin (8e58004)
  • feat(web): rebuild admin area as console with settings tabs (ce6a6c3)
  • feat(api): add admin user management endpoints (ae5ae95)
  • feat(deploy): ship web runtime in single server binary (bd25e62)
  • fix(deploy): bundle Node 24 runtime for web SSR (2d469c0)
  • fix(web): restore Node 18 compatibility for markdown SSR (128649b)
  • fix(ci): ship web static under the isolated distDir path (9be4e12)
  • chore: ignore stray next build verify directory (fdaf9d4)
  • fix(ci): package web builds from the isolated dist dir (747d96d)
  • feat(android): chapter editor for book authors (055670f)
  • feat(android): favorites shelf and chapter comments (da3b55f)
  • feat(web): notifications center page (88af9d0)
  • fix(desktop): open external links in the system browser (9a5de03)
  • test(app): guard previously uncovered security boundaries (5f7786d)
  • docs: add 2026.0.0 changelog and complete the api overview (91c04ea)
  • ci: gate deploy and release web builds with vitest (35613ea)
  • test(web): vitest suite for the markdown pipeline in ci (217d674)
  • feat(android): book detail page, markdown rendering and offline cache (ef4c574)
  • feat(upload): pluggable storage drivers with local and qiniu backends (4ad074a)
  • feat(android): book search, notifications and skeleton fixes (17b4621)
  • feat(desktop): tray menu, startup reachability check and state memory (ef2fe46)
  • feat(web): port remaining markdown extensions (image/table/issues/api) (880b132)
  • feat(migrate): legacy node/mysql data migration command (d82a01b)
  • feat(web): port legacy markdown extensions to the reader (81686ab)
  • feat(books): zip export and import with lossless round-trip (a3db93c)
  • fix(search): parse auth header so logged-in users see private content (2a307aa)
  • feat(auth): email-based password reset with log and smtp drivers (1e35a3d)
  • feat(books): book collaborators with editor and viewer roles (bc1f3c8)
  • style(server): gofmt whitespace in comment and reaction handlers (21a1f2b)
  • feat(notifications): in-app notifications with sse realtime push (2e78ce8)
  • feat(auth): github oauth login and account binding (1971f3f)
  • feat(search): global search api and results page (b0882b6)
  • feat(web): favorites page and detail reaction buttons (b19937c)
  • feat(api): book reactions (likes and favorites) (b9e0101)
  • feat(web): mount comments in the reader (e44bcfc)
  • feat(api): chapter comments module (m9 backend) (dfbcce2)
  • refactor(web): shared explore book card with interactive links (ea08d08)
  • build: isolate production builds from the dev server (73e672d)
  • fix(books): real status counts for my-books tabs (5d408e5)
  • fix(web): unify media url resolution for covers and avatars (eacb3d2)
  • feat(web): rebuild security page per prototype (243860c)
  • feat(web): rebuild account settings per prototype (a001e77)
  • refactor(web): user home to /user/{username} and compact hero (2d79aa9)
  • fix(web): user home list view actually renders row cards (f26c2a6)
  • feat(web): tooltips on all icon-only actions (54fba33)
  • feat(web): rebuild explore page per prototype (a81f5bd)
  • fix(web): user home list view matches my-books row style (c2867d8)
  • feat(web): loading states for list transitions (99c02b7)
  • style(web): show public book cover arrow on hover only (425e0fe)
  • feat(web): user home sort dropdown (92f1463)
  • fix(web): every page sets a browser title (ae11d89)
  • feat(web): rebuild user home page per prototype (e5fb09a)
  • fix(web): use the shared select for my-books sorting (9083226)
  • feat(web): chapter popover on my-books cards (f2d3655)
  • feat(web): rebuild my-books page per prototype (db74d0f)
  • style(web): polish book detail against the prototype (c9188a8)
  • fix(web): write button opens the workbench, not a chapter (6faaab3)
  • feat(reading): persist reading progress server-side (e5c08fd)
  • fix(writer): open the workbench at /book/writer/{slug} without a doc (bfaea63)
  • fix(web): reading progress hook placement and continue-reading ui (84c9bcd)
  • fix(web): detail write button and card chip nesting (03d69f2)
  • feat(web): rebuild book detail page per prototype (d522e2c)
  • fix(reader): hidden chapters 404 instead of a login prompt (9046138)
  • fix(writer): doc becomes a path segment, killing the 308 on edit (9847a30)
  • style(writer): align settings tab fields with the book form design (11233f4)
  • fix(writer): add gssp so path params reach the client (7adfcbe)
  • fix(web): avatar links inside clickable cards break hydration (14c6880)
  • fix(web): show book and chapter title in writer tab (bb59138)
  • fix(web): match dynamic book routes as bare layout routes (69859de)
  • refactor(web): action-first book routes (3970ad8)
  • refactor(web): move book pages to path params (da12e90)
  • feat(reader): edit entry in meta line with font awesome icon (90ba33b)
  • feat(web): add shared tooltip component for avatar usernames (a944cc1)
  • refactor(web): extract user avatar into shared component (9a587a2)
  • style(web): nav auth awareness, badge nowrap and grid columns (0688398)
  • feat(reader): author entries and fixed prev-next bar with avatars (564adaf)
  • style(books): redesign my-books list as media card grid (524c2c6)
  • style(books): polish cover preview and page spacing (edb4843)
  • refactor(api): drop unused books summary endpoint (caeccf0)
  • feat(reader): rebuild reading page as a three-pane reading workbench (002d1b5)
  • feat(web): add stable heading anchors to rendered markdown (aaa6d8d)
  • fix(editor): let chapter tree scroll horizontally instead of clipping titles (ab2d089)
  • fix(editor): cap chapter tree indentation so deep titles stay visible (a71c3be)
  • feat(books): rebuild book form as two-column layout with live preview (95a3718)
  • fix(editor): create new chapters under the selected chapter and keep it highlighted (4ae896a)
  • feat(editor): surface a visible saving state while persisting a chapter (1ce9939)
  • style(web): refine global scrollbar to a thin rounded style (72b7adb)
  • feat(editor): contextual new-chapter creation and blank-area deselect (f74224a)
  • fix(web): restore container padding and stop nested anchors in cards (4d5547f)
  • fix(editor): three-state parent_id parsing and pane polish (d38d0eb)
  • fix(web): full-bleed layout overflow and login-state flash on refresh (876639a)
  • chore(web): allow isolating dev build dir via NEXT_DIST_DIR (618cf85)
  • fix(editor): fill editor pane and fix chapter tree interactions (7be01f6)
  • style(web): replace native select with fully custom dropdown (4f7e56a)
  • feat(editor): rebuild writer as full-screen three-pane workbench (114a982)
  • chore(deploy): keep old next chunks across releases (20cfe5a)
  • fix(web): return empty arrays for empty lists to stop client crash (5d6d143)
  • feat(tags): add book tagging module per roadmap m8 (1d79fd5)
  • chore: stop tracking local memory directory (c6a0792)
  • feat(server): add resource:action permission system and api contract (30b744b)
  • feat(web): redesign home page and chrome per new visual spec (d3a08e4)
  • feat(web): restore original infosphere logo across clients (9581e03)
  • style(web): pure tailwind ui primitives without custom css (665f7af)
  • fix(install): resolve sqlite paths into data dir with clear errors (e76e3f7)
  • fix(install): build redirect url from forwarded host headers (a874a32)
  • fix(install): enforce install-only access via next middleware (396c474)
  • fix(install): block every route until installation completes (5dcfa4a)
  • docs(deploy): document certbot tls setup in nginx template (f8080d3)
  • chore(web): simplify footer branding to powered by infosphere (d72aba5)
  • refactor(web): extract reusable ui component library (ab83a5e)
  • fix(web): include ts and tsx files in tailwind content scan (f3cec22)
  • fix(ci): ...
Read more