问题修复
- 修复从 Halo 1.5 / 1.6 导入数据时,缺少页面评论数据会导致瞬间评论未被导入的问题
- 修复从 WordPress 导入数据时,纯数字匿名评论作者导致解析失败的问题
Full Changelog: v2.0.0...v2.0.1
Generated from v2.0.1
Full Changelog: v2.0.0...v2.0.1
Generated from v2.0.1
Full Changelog: 1.18.2...1.19.1
Generated from 1.19.1
Full Changelog: 1.18.2...1.19.0
Generated from 1.19.0
二次元少女风格的 Halo 2.x 博客主题。本次为多页面视觉升级、问题修复与工程优化。
Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.1.1
新增顶部“声场”音乐播放列表,支持顺序播放、列表切换及播放状态同步。
新增精致的文章分享面板,支持复制链接、二维码和系统分享。
新增视频发布时自动提取首帧封面的基础能力。
新增声场播放列表及音乐缓存相关主题设置项。
重新设计评论表单布局、交互状态和移动端显示效果。
优化音乐封面预加载与切歌衔接,减少切换歌曲时的封面闪烁。
优化无歌词歌曲的播放入口,避免歌词缺失时无法播放。
优化 iPhone 系统分享按钮的触发稳定性。
优化评论预览、回复及异步加载体验。
优化瞬间图片加载状态,修复部分图片裁切和顶部异常留白问题。
优化 iOS 视频播放前的首帧预览兼容性。
优化首页深色模式按钮与回到顶部按钮的独立显隐逻辑。
优化 PJAX 页面切换后的播放器、分享面板和媒体组件初始化。
优化图片查看器、提示信息和多项细节动画。
重构声场面板交互与动画,优化桌面端和移动端展开体验。
视频尺寸改为根据横屏、方形和竖屏比例自动适配。
改进封面视频加载、回退策略和浏览器兼容性。
修复音乐瞬间与声场播放器同时使用时的状态冲突、歌词闪烁及错误选中问题。
修复瞬间视频轻微黑边问题。
Full Changelog: v1.5.4...v1.6.0
该提交新增了完整的句子相似度检查功能:
Generated from v1.6.0
文章缺省封面图:
default_post_cover 配置项,文章未设置封面时自动显示默认图片default_post_cover.png 作为兜底,也可在后台自定义上传样式设置 > 主题样式,精选文章 > 精选轮播th:if 与 th:with 优先级问题)@{...} 嵌套在 ${...} 内导致的 SpEL 解析错误侧边栏新增模块:
博主信息卡片增强:
社交图标更新:
升级后建议进入 主题设置 > 侧边栏设置,查看新增的公告栏、标签云和公众号二维码配置项,默认均为关闭状态,按需开启即可。

Full Changelog: v1.16.0...v1.16.1
Generated from v1.16.1
全局样式 -> 启用访客配色切换 开启paper 配色ink 配色的文字对比度Full Changelog: 2.4.0...2.5.0
Generated from 2.5.0
Full Changelog: 4.0.3...4.0.4
Generated from 4.0.4
详情请参阅更新日志(在 GitHub 上查看)。
Please refer to Changelog (view on GitHub) for details.
howiehz-higan-zh-hans.zip为简体中文默认安装包,仅包含.br。
howiehz-higan-zh-hans-tiny.zip为简体中文轻量安装包,移除默认字体资源,默认 logo 资源将替换为 1x1 占位图,不包含预压缩文件,且不注入 Mermaid / instant.page 运行时。
howiehz-higan-zh-hans-full-precompressed.zip为简体中文完整预压缩包,包含.gz/.br/.zst。
howiehz-higan-en.zipis the English default package with.bronly.
howiehz-higan-en-tiny.zipis the English tiny package that removes the default font assets, replaces the default logo asset with a 1x1 placeholder image, omits precompressed assets, and excludes Mermaid / instant.page runtime injection.
howiehz-higan-en-full-precompressed.zipis the English full precompressed package with.gz/.br/.zst.
Full Changelog: 4.0.2...4.0.3
Generated from 4.0.3
新增个人资料卡页面
完善了文章页面
后台新增资料卡设置
后台新增限制微信/QQ 内置浏览器访问设置
后台新增移动端显示比例设置
后台桌面内容宽度设置
修复:长图折叠功能多项缺陷
sticky 失效,自动降级为 absolute 定位languageRequirement,可自定义多语言回复规则二次元少女风格的 Halo 2.x 博客主题。本次为功能新增与问题修复。
<halo:head/> / <halo:footer/>),提升与各类 Halo 插件的兼容性。Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.0.9
Generated from v2.3.23
>=2.25.0 by @ruibabyFull Changelog: v1.3.2…v1.4.0
Generated from v1.4.0
Full Changelog: v1.5.1...v1.5.2
Generated from v1.5.2
Full Changelog: v1.5.0...v1.5.1
Generated from v1.5.1
/docs、/docs/{librarySlug}、/docs/{librarySlug}/{docSlug} 页面,含侧边目录树与可配置布局的文档库首页DocContentHandler(正文后处理)与 DocDetailModelHandler(阅读页 Model 注入)两个扩展点Halo >= 2.25.0,必须先安装并启用 Halo AI Foundation。
这是应用市场首个公开版本。从早期 ai-assistant 插件升级时,插件会迁移兼容数据;Embedding 模型或向量维度变化后需要重建索引。
模型调用可能产生第三方费用,站点内容会发送给管理员配置的模型服务商。
二次元少女风格的 Halo 2.x 博客主题。本次为功能新增与体验优化。
/console,可按需改为 /login 等。Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.0.7
halo-theme-cosolar 是一款为 Halo 2.20+ 打造的现代博客主题,专为技术写作者设计。它把"内容"放回舞台中央 —— 干净的排版、克制的动效、合理的留白,让代码与文字都能舒适呼吸。同时在小屏与移动端做了完整自适应:贴底毛玻璃操作栏、抽屉式目录、自动隐藏的侧边栏,让手机阅读体验与桌面端同样顺滑。
#10B981,可在后台一键换色,全站按钮 / 链接 / 标签 / 进度条联动vite-plugin-halo-theme,产物精简,按模板分块
<p style=""> 等 HTML 片段。修复内容:
src/assets/utils/toc.ts setActiveHeading 重写:
src/assets/styles/main.css 为 .toc 添加滚动上下文:
Full Changelog: v1.4.4...v1.5.0
Generated from v1.5.0
⚠️兼容性升级至 Halo 2.25.0,不再支持更早版本
🛡️ 更新详情
优化全局文章页面footer与内容适配空间
部分feature组件回退1.2版本配置
修复缩约图部分引入错误
修复其它的一些小bug
document-hidden 切换到可见状态后的封面视频启动时机,避免 Safari 媒体加载器未准备好导致视频一直等待并回退到封面图。详情请参阅更新日志(在 GitHub 上查看)。
Please refer to Changelog (view on GitHub) for details.
howiehz-higan-zh-hans.zip为简体中文默认安装包,仅包含.br。
howiehz-higan-zh-hans-tiny.zip为简体中文轻量安装包,移除默认字体资源,默认 logo 资源将替换为 1x1 占位图,不包含预压缩文件,且不注入 Mermaid / instant.page 运行时。
howiehz-higan-zh-hans-full-precompressed.zip为简体中文完整预压缩包,包含.gz/.br/.zst。
howiehz-higan-en.zipis the English default package with.bronly.
howiehz-higan-en-tiny.zipis the English tiny package that removes the default font assets, replaces the default logo asset with a 1x1 placeholder image, omits precompressed assets, and excludes Mermaid / instant.page runtime injection.
howiehz-higan-en-full-precompressed.zipis the English full precompressed package with.gz/.br/.zst.
优化桌面端大屏显示效果:内容区、正文、卡片、顶栏、页脚、预载入页和悬浮按钮会随屏幕宽度连续适配,大屏阅读不再显得过细过长。
优化音乐播放体验:顶部唱片按钮播放中支持根据当前音乐封面主色进行轻微变色,并加入更自然的颜色注入动画。
优化音乐状态同步:改善音乐瞬间卡片、音乐播放器卡片和顶部唱片按钮在播放、暂停、切歌、PJAX 返回后的状态一致性。
优化 Plus 点赞昵称加载:点赞昵称不再等待授权状态后才拉取,支持短缓存和批量请求,刷新页面时点赞昵称显示更及时。
优化 PJAX 进入/返回稳定性,减少快速切换页面时的异常刷新和状态丢失。
优化首屏预载入逻辑:点赞昵称预加载不再阻塞页面预载入结束,首屏进入更顺滑。
调整音乐卡片、文章页、信息流、发布弹窗、归档弹窗等界面细节,使整体比例在不同桌面尺寸下更协调。
Plus 用户请确保 Morpho Plus 插件已更新到最新版。
replaceWith 替换 DOM 后未重新绑定点击事件,导致后续导航退化为整页加载--tw-prose-th-borders / --tw-prose-td-borders<h1> 改为 <h2>,修复一页多 <h1> 的文档层级问题color-mix 从 --earthquake-surface 派生overflow-x: autofocus-visible 全局样式--codeblock-bg,暗色亮色独立控制th:if / th:unless 互斥保证不重复渲染Full Changelog: v1.0.0-beta.3...v1.0.0-beta.4
Generated from v1.0.0-beta.4
此版本移除了模型配置,统一使用 Halo 官方提供的 AI Foundation,所以在升级之后所有模型需要在 AI Foundation 配置,并且功能模型选择都需要重新设置。基于 AI Foundation 的好处:
style(css): 更新文章标题样式并添加图标标记
feat(content): 添加表格内容增强功能并更新主题版本
Full Changelog: 1.0.0-beta8...1.0.0-beta9
Generated from 1.0.0-beta9
Generated from 4.0.2
一句话概括:从「可配置的主题」进化为「可视化搭建的设计系统」
适用版本:Halo 2.25.0+ | 发布时间:2026 年 7 月
| 维度 | 升级前 (1.2) | 升级后 (1.3) | 您的收益 |
|---|---|---|---|
| 搭建效率 | 看文档、对照代码、反复试错 | 后台直接看缩略图选布局 | 配置时间缩短 70%+ |
| 页面表现 | 固定几种模板 | 17+ 种布局组合随心搭 | 覆盖 90% 落地页场景 |
| 移动体验 | 单一抽屉菜单 | 7 种移动菜单样式 | 手机端像 App 一样顺滑 |
| 视觉冲击 | 静态页面 | 动态背景 + 60fps 动画 | 访客停留时长显著提升 |
| 加载速度 | 全量加载 300KB+ | 按需加载,首屏 < 1.5s | SEO 更友好,跳出率更低 |
| 风格 | 效果预览 | 适合场景 |
|---|---|---|
| 经典便当 | 网格轮播 + 右侧快捷入口 | 内容型站点、博客、资讯 |
| 全景画框 | 沉浸式大图 + 动态标题 | 作品集、摄影、设计展示 |
| 分屏视界 | 左右分屏联动切换 | SaaS 官网、产品落地页、双栏对比 |
💡 后台操作:主题设置 → Hero 模块 → 直接点缩略图选中即可,所见即所得
| 布局类型 | 视觉特点 | 典型用途 |
|---|---|---|
| 基础图文 | 左图右文/浏览器模拟器 | 功能介绍、产品展示 |
| 卡片列表 | 两种卡片风格随意切 | 服务清单、优势罗列 |
| 磁贴轮播 | 大图配右侧标签切换 | 版本更新、案例轮播 |
| 网格布局 | 左大图右网格卡片 | 团队介绍、合作伙伴 |
| 分类橱窗 | 两级嵌套分类卡片 | 产品矩阵、课程目录 |
| 团队展示 | 头像/Logo 两种模式 | 关于我们、核心成员 |
| 画廊/跑马灯 | 评价轮播/无缝滚动 | 客户见证、品牌动态 |
| 行动召唤(CTA) | 色块+多按钮 | 注册引导、下载入口 |
| 问答手风琴 | 经典/网格两种样式 | 常见问题、帮助中心 |
| 博客列表 | 内嵌 4 种文章样式 | 首页最新动态、专题聚合 |
🎯 零代码搭建:后台「Feature 模块」→ 添加区块 → 选缩略图 → 填内容 → 保存即时生效
| 新能力 | 说明 |
|---|---|
| 3 种文章模板 | 经典/轴心分栏/时间轴 —— 换个风格像换主题 |
| 侧边栏 5 合 1 | 订阅区/目录/小组件/图片广告/文字广告随意切 |
| 评论双模式 | 主题精美样式 / Halo 原生样式 任选 |
| 分享重构 | 一键复制 + 微信二维码 + 精美弹窗动画 |
| 点赞/收藏/分享 | 固定侧边栏 + 悬浮按钮,交互不漏埋点 |
| 页面 | 新增布局 | 亮点 |
|---|---|---|
| 文章归档 | 3 种 | 时光轴/详情卡片/原版 |
| 分类目录 | 列表 2 种 + 详情 3 种 | 支持封面图、子分类展开、文章计数 |
| 标签云 | 列表 2 种 + 详情 3 种 | 7 天新增计数、热门 Top 10 |
1.3.0 配置系统完全重写,旧版配置无法自动迁移
升级后需重新在后台配置一次,建议预留 30-60 分钟
theme-alba-1.3.0.zip 或从应用市场更新| 问题 | 解答 |
|---|---|
| 旧配置会丢吗? | 可能会,Halo 只保留旧版同名元数据配置,需提前导出配置,后续可切回 1.2.0 恢复 |
| 需要懂代码吗? | 完全不需要,全程可视化点击配置 |
| 会影响收录/SEO 吗? | 不会,HTML 结构更语义化,加载更快,对 SEO 有利 |
| 手机端会乱吗? | 1.3.0 专门强化了移动端,7 种菜单任选一款即可完美适配 |
| 可以先试用吗? | 建议在测试站/本地先体验,确认无误再上线 |
| 您的站点类型 | 推荐配置组合 |
|---|---|
| 个人博客/技术博客 | Hero: 经典便当 + Feature: 基础图文/卡片列表 + Blog: 列表样式 |
| 企业官网/产品落地页 | Hero: 分屏视界 + Feature: CTA/网格/团队 + Widget: 胶囊悬浮 |
| 作品集/设计师/摄影 | Hero: 全景画框 + Feature: 画廊/磁贴 + 文章: 轴心模版 |
| 知识库/文档/帮助中心 | Hero: 经典便当 + Feature: 问答/分类橱窗 + 归档: 时光轴 |
| 资讯/新闻/内容聚合 | Hero: 经典便当 + Feature: 博客列表/卡片 + 侧边栏: 订阅区 |
| 指标 | 1.2.0 | 1.3.0 | 提升 |
|---|---|---|---|
| 首屏加载 (LCP) | ~2.8s | ~1.3s | 53% ↓ |
| 交互就绪 (TTI) | ~3.5s | ~1.8s | 49% ↓ |
| 累积布局偏移 (CLS) | 0.12 | 0.02 | 83% ↓ |
| 移动端性能分 | 72 | 94 | +22 分 |
| 首包体积 | 303KB | ~85KB | 72% ↓ |
测试环境:Halo 2.24 / 2核2G / 启用 CDNginxgzip + 静态资源CDN
序白 Alba 1.3.0 —— 让搭建网站像搭积木一样简单,让访客体验像用 App 一样流畅。
ThemeNets 创意驱动新视界
详情请参阅更新日志(在 GitHub 上查看)。
Please refer to Changelog (view on GitHub) for details.
howiehz-higan-zh-hans.zip为简体中文默认安装包,仅包含.br。
howiehz-higan-zh-hans-tiny.zip为简体中文轻量安装包,移除默认字体资源,默认 logo 资源将替换为 1x1 占位图,不包含预压缩文件,且不注入 Mermaid / instant.page 运行时。
howiehz-higan-zh-hans-full-precompressed.zip为简体中文完整预压缩包,包含.gz/.br/.zst。
howiehz-higan-en.zipis the English default package with.bronly.
howiehz-higan-en-tiny.zipis the English tiny package that removes the default font assets, replaces the default logo asset with a 1x1 placeholder image, omits precompressed assets, and excludes Mermaid / instant.page runtime injection.
howiehz-higan-en-full-precompressed.zipis the English full precompressed package with.gz/.br/.zst.
Full Changelog: v1.0.0-beta.2...v1.0.0-beta.3
Generated from v1.0.0-beta.3
Warning
此版本为破坏性更新,升级后需要重新配置插件。
v4 对前台助手、RAG 知识库、Agent 能力、对话配置和部分样式配置进行了重构。旧版本配置可能无法完全兼容,请升级后进入插件设置重新检查并保存配置。
使用知识库能力前,建议重新导入资料或执行一次重建索引。
宠物 + 对话、仅显示宠物。{url} / {encodedUrl} / {path} 模板。Full Changelog: 4.0.0...4.0.1
Generated from 4.0.1
Generate from v3.3.0
Full Changelog: 1.0.4...1.0.5
Generated from 1.0.5
Warning
此版本为破坏性更新,升级后需要重新配置插件。
v4 对前台助手、RAG 知识库、Agent 能力、对话配置和部分样式配置进行了重构。旧版本配置可能无法完全兼容,请升级后进入插件设置重新检查并保存配置。
使用知识库能力前,建议重新导入资料或执行一次重建索引。
Warning
此版本为破坏性更新,升级后需要重新配置插件。
v4 对前台助手、RAG 知识库、Agent 能力、对话配置和部分样式配置进行了重构。旧版本配置可能无法完全兼容,请升级后进入插件设置重新检查并保存配置。
使用知识库能力前,建议重新导入资料或执行一次重建索引。
>= 2.25.0。>= 2.25.0。Generated from 4.0.0
MomentsIntegrationService,通过 SchemeManager 检测 Moment 扩展注册状态,避免直接引用导致的 NoClassDefFoundErrorContextExtractor 适配 Moment 上下文:使用 moment name 作为关联标识,通过 Unstructured 单次 fetch 获取瞬间实际内容(spec.content.raw/html)和发布时间(spec.releaseTime)作为 AI 上下文FilterService 对 Moment 评论读取 momentsEnabled 配置决定是否触发 AI 回复CommentPreFilterService.check() 新增 commentOwner 参数,将昵称纳入 AI 分类输入{{output_guidance}}、{{sentiment_hint}}、{{language_requirement}} 三个占位符,将输出规范、情感提示、语言要求拆分为独立模块{{sentiment_hint}} 占位符原位注入;旧模板不含该占位符时自动降级为末尾追加,保持向后兼容buildPrompt 重载的代码重复,统一委托给单一核心组装方法/moments 列表页改为 /moments/{name} 具体瞬间页ReviewService 在审核服务不可用或异常时不再自动通过,改为返回 FAIL 并拦截发布,避免未经审核的 AI 回复被自动发布renderContent 仅移除 <script> 和 <iframe> 标签,未过滤 on* 事件处理器和 javascript: 协议。现已全面清理所有事件处理器、危险协议和嵌入标签:disabled="loading" 防止重复请求falsePositiveTarget,可能导致重开时显示旧数据AiReplyOrchestrator 指数退避无上限 — retryCount 较高时延迟可达 43 分钟,超过处理锁 TTL 导致锁提前过期。新增 300 秒上限ContextExtractor 空指针风险 — extractCommentContent/extractCommentOwner/extractReplyContent 未检查 spec == null,畸形数据会触发 NPE 中断整个处理链SettingsView 邮箱防抖定时器未清理 — 组件卸载时 emailDebounce 定时器仍在运行,导致内存泄漏。新增 onUnmounted 清理HomeView 刷新数据 Toast 提前弹出 — refreshData 未等待异步请求完成就提示成功。改为 await Promise.all() 后再提示PromptBuilder 安全提示词可被绕过 — 自定义模板若遗漏 {{safety_prompt}} 占位符,安全约束会被静默丢弃。新增安全网:检测到遗漏时强制前置注入安全规范AiReplyOrchestrator.processFalsePositive 无去重锁 — 误报处理流程未使用处理锁,重复触发会创建重复 AI 回复。新增 processingLocks 机制AiReplyOrchestrator.processFalsePositive 失败后记录卡在 PENDING — 处理失败时记录未被标记为 FAIL,用户无法重试。新增 onErrorResume 将记录标记为 FAILAiReplyOrchestrator.hasExistingReply 错误时静默放行 — 数据库异常时去重检查返回 false 导致重复创建记录。改为返回 true(失败关闭,宁可跳过也不重复)AiReplyCleanupService 删除处理中记录 — 清理逻辑未过滤 PENDING/REVIEWING 状态记录,可能破坏正在进行的 AI 回复流程。新增状态过滤AiReplyCleanupService null subscribe 消费者 — .subscribe(null, ...) 传入 null 成功消费者,可能导致 NPE。改为空 lambdaAiReplyCleanupService 清理开关默认值不一致 — ConfigMap 存在但 data 为 null 时返回 false(禁用),与其他情况返回 true 不一致。统一为 trueInteger.parseInt 对非数字参数抛出 500 错误。新增 parseIntSafely 安全解析toLowerCase() 不区分大小写flatMap 默认并发 256,大批量操作可能压垮数据库。限制为 10autoRefreshing 标志位ReplyReconciler.isAiReply 空指针风险 — 未检查 spec == null,畸形 Reply 数据会触发 NPEContextExtractor 瞬间内容重复 fetch — getMomentContent 和 getMomentReleaseDate 各自独立 fetch 同一个瞬间扩展,产生 2 次重复查询。合并为 getMomentContentAndDate 单次 fetchContextExtractor 瞬间分支缺少容错 — buildContext 的 Moment 分支缺少 onErrorResume 和 defaultIfEmpty,异常时静默跳过而非降级处理。已补齐与 Post/SinglePage 一致的容错AiReplyOrchestrator.processFalsePositive 锁竞态条件 — 锁值存储过期时间(未来时间戳),过期后 putIfAbsent 不覆盖旧值导致去重失效。改为存储获取时间,与 processComment 一致cleanupStaleLocks 无法清理误报处理锁 — 误报处理锁值是未来时间戳,cleanupStaleLocks 计算 age 为负数永远不清理。统一为存储获取时间ContextExtractor.getCommentCount 空指针风险 — reply.getSpec() 可能为 null 时直接调用 getCommentName() 触发 NPE。fetchConversationHistory 同样问题已一并修复首页封面支持视频背景,可配置本地附件或外链视频,并支持移动端开关、图片封面兜底。
封面视频支持手动开启声音,滚动离开封面区自动淡出静音,返回封面区柔和恢复。
声场播放器优化为唱片图标,播放时旋转,暂停时保留当前旋转角度。
顶部声场歌词支持自动横向滚动,长歌词会尽量在当前句结束前完整展示。
前台发布瞬间支持外链附件:图片、实况照片、视频直链、音频直链、音乐封面外链、歌词外链。
在线音乐发布体验增强。
新增封面视频、音乐播放、加载预热等调试日志开关。
following / mutual 时,才允许显示“删除友链 / 解除关系”按钮。feat(theme): 添加产品商城主题配置选项
fix(gateway): 修复脚本加载和产品插件配置
feat(theme): 添加留言页功能支持
feat(config): 添加插件安装提示和路由说明信息
Full Changelog: 1.0.0-beta7...1.0.0-beta8
Generated from 1.0.0-beta8
fix(member): 优化用户注册邀请过滤器行为和错误处理
演示站防护是一个 Halo 插件,用来限制“演示角色”在 Halo 控制台、用户中心和核心 API 中执行高风险写操作。它适合公开演示站、试用环境、售前演示环境这类场景:访客可以登录体验后台,但不能发布文章、改用户、删资源、上传附件、改主题插件配置,别让人一顿乱点把站点霍霍没了。
| 地址 | 账号/密码 |
|---|---|
| 管理端 | demo/demo123. |
metadata.name,插件会读取当前登录用户的真实角色绑定。POST、PUT、PATCH 写请求和 DELETE 删除请求。* 单段通配、** 多段通配。403 和 application/problem+json,提示 当前演示用户禁止操作。这个插件是演示环境的兜底防护,不是 Halo RBAC 的替代品。演示账号本身也别乱给超级管理员权限,除非你已经把所有危险接口都配进保护路径里,不然就是往门口挂个锁、后墙留个洞,闹呢。
>= 2.25.0./gradlew build
build/libs 目录找到插件 jar,例如:build/libs/plugin-demo-guard-1.0.0-SNAPSHOT.jar
进入 Halo 控制台,打开 插件 页面。
上传并安装插件 jar。
启用插件后,进入插件设置页配置防护规则。
升级线上环境时,一定要上传新构建出来的 jar。只改本地代码不升级线上插件,线上当然没反应,这个锅代码不背。
如果你现在只想拦截这个发布接口:
/apis/api.console.halo.run/v1alpha1/posts/019f1b47-2f0e-75fa-a868-d5231f673d24/publish
保护路径应该配置成通配形式:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
同时确认:
启用演示站防护:开启
拦截写请求:开启
演示角色标识:选择演示用户绑定的角色 metadata.name
发布文章接口是 PUT 请求,所以只开“拦截删除请求”没用,这地方别拧巴。
在 Halo 控制台创建一个专门给演示用户使用的角色,例如 演示角色。
插件配置里最终保存的是角色的 metadata.name,通常类似:
role-jlijn3me
不用手填也行,插件设置页的“演示角色标识”会从 Halo 角色列表中选择并保存实际角色名。
创建或选择一个演示用户,例如 demo,并给它绑定上一步创建的演示角色。
如果演示用户没有绑定这个角色,插件不会把它当作演示用户处理。
在插件设置中配置:
启用演示站防护:开启
演示角色标识:选择演示角色
拦截写请求:开启
拦截删除请求:按需开启
保护路径只写 URL path,不要写协议、域名、端口和查询参数。
正确:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
错误:
http://localhost:8090/apis/api.console.halo.run/v1alpha1/posts/*/publish
多个路径可以用换行、空格、逗号或分号分隔:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
/apis/api.console.halo.run/v1alpha1/posts/*/unpublish
/apis/api.console.halo.run/v1alpha1/posts/*/recycle
也可以写成一行:
/apis/api.console.halo.run/v1alpha1/posts/*/publish /apis/api.console.halo.run/v1alpha1/posts/*/unpublish /apis/api.console.halo.run/v1alpha1/posts/*/recycle
放行路径优先级高于保护路径。默认放行插件自身接口:
/apis/console.demoguard.muyin.site/**
不要把放行路径写得太宽,例如:
/apis/**
这会把所有 Halo API 都放掉,防护直接变空气,配置了等于没配置。
| 配置项 | 说明 | 建议 |
|---|---|---|
| 启用演示站防护 | 总开关,关闭后不拦截任何请求。 | 配完角色和路径后再开启。 |
| 演示角色标识 | 演示角色的 metadata.name 数组。 |
使用设置页下拉选择,不要填显示名。 |
| 拦截写请求 | 拦截命中保护路径的 POST、PUT、PATCH。 |
演示站通常开启。 |
| 拦截删除请求 | 拦截命中保护路径的 DELETE。 |
演示站通常开启。 |
| 保护路径 | 需要禁止演示用户访问的 API path。 | 只写 path,支持 * 和 **。 |
| 放行路径 | 优先放行的 API path。 | 保留插件自身接口,别写太宽。 |
* 匹配单个路径段。** 匹配多个路径段。GET 请求不会被“拦截写请求”拦截。DELETE 请求只受“拦截删除请求”控制。示例:禁止演示角色发布任意文章:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
可匹配:
/apis/api.console.halo.run/v1alpha1/posts/019f1b47-2f0e-75fa-a868-d5231f673d24/publish
如果接口带查询参数,例如:
/apis/api.console.halo.run/v1alpha1/posts/xxx/publish?async=true
保护路径仍然只写:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
下面这些路径和插件默认配置保持一致,可以按你的演示站开放范围删减。原则很简单:不想让演示用户改的,就别心软。
文章发布、取消发布、回收:
/apis/api.console.halo.run/v1alpha1/posts/*/publish
/apis/api.console.halo.run/v1alpha1/posts/*/unpublish
/apis/api.console.halo.run/v1alpha1/posts/*/recycle
文章底层资源:
/apis/content.halo.run/v1alpha1/posts/**
用户、角色和权限:
/apis/console.api.security.halo.run/v1alpha1/users/**
/apis/api.console.halo.run/v1alpha1/users
/apis/api.console.halo.run/v1alpha1/users/test/permissions
/apis/api.console.halo.run/v1alpha1/users/-/password
/apis/api.console.halo.run/v1alpha1/users/-
/api/v1alpha1/users/**
/api/v1alpha1/roles/**
附件:
/apis/api.console.halo.run/v1alpha1/attachments/upload
/apis/storage.halo.run/v1alpha1/attachments/**
独立页面:
/apis/content.halo.run/v1alpha1/singlepages/**
主题和插件:
/apis/api.console.halo.run/v1alpha1/themes/*/reset-config
/apis/theme.halo.run/v1alpha1/themes/**
/apis/api.console.halo.run/v1alpha1/plugins/*/plugin-state
/apis/api.console.halo.run/v1alpha1/plugins/*/reset-config
/apis/plugin.halo.run/v1alpha1/plugins/**
系统配置和迁移:
/apis/console.api.halo.run/v1alpha1/systemconfigs/basic
/apis/migration.halo.run/v1alpha1/backups
/apis/console.api.migration.halo.run/v1alpha1/restorations
用户中心安全项:
/apis/uc.api.security.halo.run/v1alpha1/personalaccesstokens
/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/settings/enabled
/apis/uc.api.security.halo.run/v1alpha1/authentications/two-factor/totp
不同 Halo 版本或插件可能会调整接口路径。拿不准就打开当前站点的 Swagger:
/swagger-ui/index.html
照真实接口路径配置,别靠猜。尤其是 reset-config、resetconfig 这种命名,猜错一个字符就全白搭。
403,响应体包含 当前演示用户禁止操作。如果演示用户和管理员都被拦,通常是角色配错或账号角色混了;如果谁都不拦,先看总开关、请求方法、真实 path 和线上 jar 版本。别上来就怀疑玄学,十有八九是配置没对上。
命中防护后,插件返回:
HTTP/1.1 403 Forbidden
Content-Type: application/problem+json
响应体:
{
"status": 403,
"title": "当前演示用户禁止操作",
"detail": "当前演示用户禁止操作",
"message": "当前演示用户禁止操作"
}
如果前端仍然只显示 403: Forbidden,说明前端统一错误处理没有读取 detail 或 message 字段。后端已经把话递过去了,前端不接,那就是前端自己的脾气。
优先检查这几件事:
enabled 是否为 true。metadata.name。PUT,需要开启“拦截写请求”。/apis/**。旧版本只按换行和逗号拆分路径。一整行空格分隔会被当成一个超长路径模式,自然匹配不到真实接口。
当前版本已经支持空格、换行、逗号和分号分隔。线上要获得这个能力,必须升级到包含该修复的新 jar。
通常是当前请求没有可用登录态,或者插件版本还在使用较旧的过滤器链。当前版本在 Halo 安全认证之后读取用户信息,正常登录请求会进入演示角色判断。
确认配置的是角色 metadata.name,不是显示名。显示名可以叫“演示角色”,但真正保存和匹配的一般是:
role-xxxxxxxx
新建 Halo 插件必须优先使用官方脚手架:
pnpm create halo-plugin
不要复制已有插件目录改名初始化,容易带入脏配置、缓存和错误依赖。
启动 Halo 开发服务:
./gradlew haloServer
前端开发:
cd ui
pnpm install
pnpm dev
热加载插件:
./gradlew reload
运行测试和构建:
./gradlew test
./gradlew build
GPL-3.0 © Lywq
新增微信读书阅读统计集成,支持通过 WeRead Agent API 获取阅读时长、阅读天数、日均时长、读过、读完、笔记等统计数据。
新增阅读统计面板,支持按周、月、年、全部范围查看数据。
新增年度统计视图,支持年份切换、年度热力图和月度柱状图展示。
新增微信读书 API Key 配置项,用于调用阅读统计等高级接口。
新增 Cookie 状态展示,包括 Cookie 是否有效、微信读书用户名、最近刷新时间。
新增书籍管理顶部筛选工具栏,支持按书名/作者搜索、分类、显示状态、阅读状态筛选。
新增书籍笔记详情接口和抽屉视图,用于查看单本书的划线、想法和书评内容。
优化微信读书 Cookie 管理逻辑,增强 CookieCloud 配置、刷新和状态反馈。
优化同步流程,支持同步划线内容、想法/评论、书评等笔记数据。
优化微信读书接口调用兼容性,改进 notebook、bookmark、review 等数据解析。
优化书籍管理页面布局和白色主题视觉,统计、筛选、书籍列表和笔记抽屉更统一。
优化阅读统计年度热力图,月份标签按真实周列对齐,并减少大屏空白。
优化偏好作者统计口径,按当前范围内本地书籍作者本数统计,避免官方统计字段含义不一致。
优化设置页,提供更清晰的 CookieCloud、API Key、同步和 Cookie 状态管理入口。
修复划线记录、想法/评论同步为空的问题。
修复笔记数量统计不准确的问题。
修复官方阅读统计不可用时页面无数据的问题,现在会回退到本地同步数据。
修复统计卡片单位重复显示的问题,例如 17本 本。
修复年度热力图在部分数据格式下错位或无法正确显示的问题。
AiReplyOrchestrator.retryOrFail 重试计数失效 — .then() 丢弃了更新后的记录导致 retryCount 始终为 0,AI 生成失败时陷入无限重试。改为 .flatMap() 传递更新后的记录.subscribe() 在异步流程中过早触发,导致 AI 回复生成完成后被空字符串覆盖。改为在 .doOnSuccess() 中触发异步生成PersonaResolver 在响应式上下文中使用 .block() — 调用阻塞方法会阻塞 Reactor 线程。改为返回 Mono<String> 并使用 Flux.concatMap().next() 替代 for 循环penalizeComment/penalizeReply 缺少乐观锁重试 — 并发更新 Comment/Reply 时可能静默失败。添加 Retry.backoff(3, 100ms) 重试approveOriginalComment 缺少乐观锁重试 — 同上,添加 Retry.backoff(3, 100ms) 重试FAIL 状态记录 — 仅接受 FILTERED 和 FALSE_POSITIVE 状态,AI 生成失败的记录无法重试。现接受 FAIL 状态tag-NEUTRAL 缺少 CSS 样式 — 中性情感标签无样式显示。补充样式定义handleTriggerAiReply 缺少加载保护 — 触发 AI 回复按钮可被重复点击导致重复提交。添加 loading 状态filterKeyword 输入未做防抖 — 每次按键都触发搜索,性能开销大。添加 300ms 防抖performCleanup 逻辑错误 — 清理逻辑存在判断错误extractChoice 分类匹配优先级 — 优先匹配违规类别(advertising/abuse/sensitive/meaningless),再匹配 normal,避免正常评论被误判为违规类别Generate from v3.1.0
二次元少女风格的 Halo 2.x 博客主题。本次为问题修复。
Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.0.5
Full Changelog: v1.4.2...v1.4.3
Generated from v1.4.3
二次元少女风格的 Halo 2.x 博客主题。本次为功能新增与体验优化。
color-scheme 声明,原生控件(下拉、滚动条等)跟随明暗模式显示。Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.0.4
🐛 修复:插件 CSS 不再覆盖主题代码块样式
.ce-pre 中多余的重置样式(background: transparent、padding: 0、border: 0 等),主题的代码块背景色、内边距、滚动条等样式完整保留reverseProxy.yaml,修正资源路径去掉多余 /static/ 层级,CSS/JS 文件恢复正常加载pluginName 字段🎉 重大精简:移除所有非核心功能,专注折叠体验
data-src、data-original、data-lazy 等常见懒加载属性aria-label、aria-expanded、:focus-visible升级说明:
Generated from v0.0.18
Full Changelog: 1.0.0-beta6...1.0.0-beta7
Generated from 1.0.0-beta7
当前版本完成 QSL 通联网格地图插件的首个可测试版本发布:
新增公开地图页面,展示 qsl-management 提供的 QSO 通联网格数据。
支持天地图瓦片服务,应用 key 可在后台插件设置中配置。
支持默认中心网格、默认缩放级别、最小/最大缩放级别后台配置。
默认中心点为 OM89,刷新和数据加载后不再被全量网格自动框选覆盖。
新增 [qsl-grid-map] 短码,可在文章或页面中嵌入地图。
新增 Halo 默认编辑器 / 菜单小组件,插入后显示预览卡片。
仅提供公开只读页面接口,不新增写入接口和角色模板。
Full Changelog: 2.3.0...2.4.0
Generated from 2.4.0
Generated from v2.3.22
Full Changelog: 1.6.2...1.6.3
Generated from 1.6.3
新增桌面端外侧背景功能,可在「外观」中上传背景图并选择显示强度。
桌面背景支持低分辨率图片自适应处理,避免小图拉伸后过度模糊突兀。
优化桌面背景下的深色模式、文章页、底部栏和右下角按钮显示效果。
新增右下角「深浅色切换」和「返回顶部」按钮开关,可在后台分别控制是否显示。
优化文章页在桌面背景下的外侧区域显示,减少灰色背景残留。
优化前台开发者调试日志,减少背景相关日志刷屏。
细化点赞 / 评论区域的分隔线和交互细节,使信息流观感更统一。
Generated from v2.3.21
第一个版本发布啦 🎉🎉🎉
二次元少女风格的 Halo 2.x 博客主题。本次为功能更新与问题修复。
Halo 2.14.0 及以上版本。
完整说明见仓库 README。
Generated from v1.0.3
新增点赞/评论按钮卡片弹出的动画效果
调整外链卡片尺寸
修复点赞数量显示异常bug
修复主题版权显示逻辑