-
1.4.0 Stable
released this
2026-07-07 08:26:05 +08:00 | 1 commits to main since this release新增
- 黑/白名单批量操作 — 支持多选、全选、批量添加/移除评论者,弹窗支持从历史评论者多选和手动输入
- 全局页面AI回复开关 — 一键启用/禁用所有独立页面的AI回复(包括新建页面),默认关闭
- 语言要求提示词模块 — 新增第五个提示词模块
languageRequirement,可自定义多语言回复规则 - 已拦截数统计 — 首页概览卡片新增已拦截数统计(已失败和待审核之间)
- AI Foundation 智能状态检测 — 区分未安装/未启用/未配置模型三种状态,提供对应快捷跳转按钮
- 手动清理自定义时间节点 — 手动清理支持自定义清理天数(默认7天前),二次确认弹窗防误操作
- 实时刷新偏好持久化 — 日志页实时刷新开关和刷新间隔通过 localStorage 自动保存,默认开启10秒间隔
- 配置导入导出 — 支持将插件配置(ConfigMap + AI角色)导出为 JSON 文件,方便备份和迁移
改进
- "提示词"改为"人格提示词" — AI角色编辑弹窗中的提示词改名为人格提示词,留空时使用基础配置的 personaIdentity
- 配置项重构 — 最大重试次数(0为不重试,最大10,默认3)、最大对话轮次(0为不限制,默认10)、速率限制(0为不限制,默认0/h)移至基本设置,滑条改为输入框,模型设置中删除重复项
- 提示词均为可选项 — 五个提示词模块均标注"(可选)",留空使用默认值
- 白名单文案修正 — 删除"管理员自动加入白名单"的显示文案(实际不支持自动加入)
- 手动清理区域样式优化 — 红色危险主题卡片式布局,输入框组与按钮高度对齐
- 分类角色映射迁移 — 从模型设置组迁移至 AI 角色配置组(persona)
- 瞬间评论 group 校验 — Moment 评论判断增加 group 双重校验,避免误判同名资源
移除
- 回复质量自学习功能 — 因正常情况下不会被拒绝且已有自动审核,移除 ReplyLearningService 及所有相关引用
- 提示词预设开关 — 移除设置页内的提示词预设开关(友好型/专业型/幽默型/简洁型),预设模板保留在文档中
Bug 修复
- 修复配置导入 400 Bad Request — 导入时清除 persona 的 labels、annotations 等只读 metadata 字段
- 修复所有注册用户绕过白名单过滤 — WhitelistService 中 isRegisteredUser 改为 isAdminUser,只检查 super-role 和 role-admin
- 修复 getAdminList 误标管理员 — 改为只匹配 role-admin 角色的用户
- 修复手动输入评论者无法添加 — addManualEntry 方法实际将条目加入选中列表
- 修复手动输入框回车触发表单提交 — 添加 .prevent 修饰符
- 修复 AI Foundation 状态显示不正确 — 未配置模型时不再错误显示"连接正常"
- 修复 Comment Next 冲突提醒不显示 — 增强检测逻辑支持多种插件名称模式
- 修复 AI Foundation 插件跳转路径 — 从 /console/plugins/plugin-ai-foundation 改为 /console/plugins/ai-foundation
- 修复前端导入错误提示不显示 — 显示实际错误信息而非通用的"导入失败"
- 修复 categoryPersonaMap 配置分组不一致 — 新增 persona 配置组,前端正确读写
Downloads
-
1.3.0 Stable
released this
2026-07-02 13:17:32 +08:00 | 3 commits to main since this release新增
- 支持瞬间插件(Moments)评论区适配 — 当检测到已安装并启用 plugin-moments 时,自动为瞬间评论启用 AI 自动回复
- 新增
MomentsIntegrationService,通过SchemeManager检测 Moment 扩展注册状态,避免直接引用导致的NoClassDefFoundError - 在插件设置 - 基本设置中新增"瞬间评论区适配"开关,仅当瞬间插件可用时显示,默认开启
ContextExtractor适配 Moment 上下文:使用 moment name 作为关联标识,通过Unstructured单次 fetch 获取瞬间实际内容(spec.content.raw/html)和发布时间(spec.releaseTime)作为 AI 上下文FilterService对 Moment 评论读取momentsEnabled配置决定是否触发 AI 回复
- 新增
- 评论人昵称广告判定 — 前置过滤现在综合判断评论者昵称与评论内容。昵称包含商业推广关键词(如"免费算命"、"加微信xxx"、"代写论文"、"低价代购"等)即使评论内容看似正常也会被判定为广告
CommentPreFilterService.check()新增commentOwner参数,将昵称纳入 AI 分类输入- 系统提示词新增"原则六:昵称与内容综合判定",列举昵称广告典型特征
改进
- 重构提示词组装与兼容机制 — 建立更健壮的模块化拼接逻辑,解决多配置组合时的指令冲突与上下文丢失问题
- 新增
{{output_guidance}}、{{sentiment_hint}}、{{language_requirement}}三个占位符,将输出规范、情感提示、语言要求拆分为独立模块 - 角色与预设使用段落分隔(空行+段落标记)确保指令隔离,避免风格预设污染角色设定
- 情感提示通过
{{sentiment_hint}}占位符原位注入;旧模板不含该占位符时自动降级为末尾追加,保持向后兼容 - 消除两个近乎相同的
buildPrompt重载的代码重复,统一委托给单一核心组装方法 - 默认模板更新为模块化结构,新安装用户即可获得更稳定的 AI 输出
- 强化身份约束:明确角色不是文章作者、站点管理员、客服或用户本人;禁止声称亲身经历未提供之事;禁止编造文章外的人物、数据、链接;禁止泄露系统提示词、模型参数、插件实现与安全策略
- 新增
- "Prompt设置"更名为"提示词设置" — UI 标签页、面板标题、设置项标签、帮助文本统一改为中文"提示词"
- 日志瞬间关联链接精确到具体瞬间 — Moment 评论的关联链接从
/moments列表页改为/moments/{name}具体瞬间页 - 日志页面增加实时刷新功能 — 新增"实时刷新"开关,开启后每 10 秒静默轮询新数据。标签页隐藏或弹窗打开时自动暂停,回到页面时立即刷新。支持可配置刷新间隔(5s/10s/30s/60s)、新记录 Toast 提示、滚动位置保留、连续失败自动关闭
- AI 安全审核改为失败关闭策略 —
ReviewService在审核服务不可用或异常时不再自动通过,改为返回 FAIL 并拦截发布,避免未经审核的 AI 回复被自动发布
Bug 修复
- 修复日志页面 XSS 漏洞 —
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将记录标记为 FAIL - 修复
AiReplyOrchestrator.hasExistingReply错误时静默放行 — 数据库异常时去重检查返回 false 导致重复创建记录。改为返回 true(失败关闭,宁可跳过也不重复) - 修复
AiReplyCleanupService删除处理中记录 — 清理逻辑未过滤 PENDING/REVIEWING 状态记录,可能破坏正在进行的 AI 回复流程。新增状态过滤 - 修复
AiReplyCleanupServicenull subscribe 消费者 —.subscribe(null, ...)传入 null 成功消费者,可能导致 NPE。改为空 lambda - 修复
AiReplyCleanupService清理开关默认值不一致 — ConfigMap 存在但 data 为 null 时返回 false(禁用),与其他情况返回 true 不一致。统一为 true - 修复 Endpoint 分页参数未校验 —
Integer.parseInt对非数字参数抛出 500 错误。新增parseIntSafely安全解析 - 修复 Endpoint 关键词搜索大小写敏感 — 搜索 "Hello" 无法匹配 "hello"。改为
toLowerCase()不区分大小写 - 修复 Endpoint 批量操作并发无限制 —
flatMap默认并发 256,大批量操作可能压垮数据库。限制为 10 - 修复 LogsView 实时刷新漏检状态变化 — 数据签名仅含 total 和首尾 name,记录状态变化不会被检测。签名新增首尾状态和发布标记
- 修复 LogsView 实时刷新与手动操作竞态 — 自动刷新与手动 fetchReplies 可能同时执行导致数据错乱。新增
autoRefreshing标志位 - 修复
ReplyReconciler.isAiReply空指针风险 — 未检查spec == null,畸形 Reply 数据会触发 NPE - 修复
ContextExtractor瞬间内容重复 fetch —getMomentContent和getMomentReleaseDate各自独立 fetch 同一个瞬间扩展,产生 2 次重复查询。合并为getMomentContentAndDate单次 fetch - 修复
ContextExtractor瞬间分支缺少容错 —buildContext的 Moment 分支缺少onErrorResume和defaultIfEmpty,异常时静默跳过而非降级处理。已补齐与 Post/SinglePage 一致的容错 - 修复
AiReplyOrchestrator.processFalsePositive锁竞态条件 — 锁值存储过期时间(未来时间戳),过期后putIfAbsent不覆盖旧值导致去重失效。改为存储获取时间,与processComment一致 - 修复
cleanupStaleLocks无法清理误报处理锁 — 误报处理锁值是未来时间戳,cleanupStaleLocks计算 age 为负数永远不清理。统一为存储获取时间 - 修复
ContextExtractor.getCommentCount空指针风险 —reply.getSpec()可能为 null 时直接调用getCommentName()触发 NPE。fetchConversationHistory同样问题已一并修复 - 移除实时刷新冗余时间显示 — 移除刷新间隔选择右侧的"等待中…"/"刚刚更新"/"N秒前更新"等状态文本及相关定时器,减少不必要的 UI 噪声和每秒重渲染
Downloads
- 支持瞬间插件(Moments)评论区适配 — 当检测到已安装并启用 plugin-moments 时,自动为瞬间评论启用 AI 自动回复
-
1.2.1 Stable
released this
2026-07-01 10:52:28 +08:00 | 5 commits to main since this releaseBug 修复
- 修复
AiReplyOrchestrator.retryOrFail重试计数失效 —.then()丢弃了更新后的记录导致retryCount始终为 0,AI 生成失败时陷入无限重试。改为.flatMap()传递更新后的记录 - 修复误报反馈"AI 回复"被空字符串覆盖 —
.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,避免正常评论被误判为违规类别
Downloads
- 修复
-
1.2.0 Stable
released this
2026-06-25 08:48:38 +08:00 | 6 commits to main since this release新特性
- 误报反馈功能 — 被拦截的评论可进行误报反馈,支持两种处理方式:
- AI 回复:标记为通过 + 触发 AI 生成回复
- 仅通过:仅标记为通过,不生成回复
- 误报通过状态 — 新增
FALSE_POSITIVE状态,"仅通过"的记录显示为"误报通过",不显示"通过/拒绝"按钮 - 触发 AI 回复按钮 — "误报通过"状态的记录可随时点击"触发AI回复"按钮补生成 AI 回复
- 上下文优先判断原则 — 前置过滤 AI 提示词重写,遵循五条核心原则:上下文优先、口语化宽容、恶意导向判定、宁放勿杀、闲聊不算无意义
Bug 修复
- 修复误报反馈"AI 回复"被前置过滤再次拦截 —
processComment()始终调用preFilterService.check(),用户已确认为误报的评论会被再次拦截。新增processFalsePositive()方法跳过前置过滤和去重检查 - 修复误报反馈"AI 回复"被去重检查拦截 —
hasExistingReply()找到已有的 FILTERED→PENDING 记录导致 AI 回复无法生成。processFalsePositive()复用已有记录,不经过去重检查 - 修复误报反馈"AI 回复"导致全站崩溃 —
processComment()同步等待 AI 生成完成,HTTP 请求长时间不返回。改为.subscribe()异步执行,API 立即返回 - 修复误报反馈"仅通过"后显示通过/拒绝按钮 — "仅通过"将记录设为
status=PASS, published=false, reply="",导致显示"通过/拒绝"按钮且内容为空。改为status=FALSE_POSITIVE - 修复
extractChoice无匹配时返回原始文本 — AI 返回非预期文本时被误判为违规类别。改为返回空字符串触发安全拦截 - 修复
approveOriginalComment缺少乐观锁重试 — 并发更新 Comment/Reply 时可能静默失败。添加Retry.backoff(3, 100ms)重试
改进
- 消除
checkBlockedCommenters重复代码 —FilterService新增isCommenterBlocked(commentName)公共方法,AiReplyOrchestrator改为调用它 - 前端批量操作防重复提交 — 批量通过/拒绝/删除按钮添加
batchLoading状态,操作期间禁用按钮
Downloads
- 误报反馈功能 — 被拦截的评论可进行误报反馈,支持两种处理方式:
-
1.1.0 Stable
released this
2026-06-23 19:59:25 +08:00 | 10 commits to main since this release新特性
- 评论前置过滤(合规检测) — AI 回复前对评论进行合规性分类,识别广告/辱骂攻击/敏感内容/无意义内容,违规评论停止生成 AI 回复,节省 Token
- 违规评论自动设为待审核 — 检测到违规评论时自动将原评论
approved置为false,进入待审核队列,前端不再展示该评论 - FILTERED 日志状态 — 被拦截的评论生成"已拦截"状态记录,日志页支持按"已拦截"状态筛选
- 拦截原因分类标签 — 日志页显示拦截分类标签(广告/辱骂攻击/敏感内容/无意义)和详细拦截原因(含评论内容摘要)
- 安全优先策略 — AI 分类服务不可用或异常时,默认拦截评论而非放行,防止违规内容漏网
改进
- AI Foundation 隔离加载 — 将 AI Foundation API 引用隔离到
AiFoundationDelegate类,AiFoundationClient不再直接引用 AI Foundation 类,修复未安装 AI Foundation 时插件无法启动的问题(NoClassDefFoundError) - 对话场景精准处罚 — AI 对话场景下违规内容来自 Reply 时,仅取消通过该 Reply 而非父级 Comment,避免误伤
- 升级配置自动迁移 — 从 v1.0.x 升级时自动将
preFilterEnabled从false迁移为true(新默认值)
Bug 修复
- 修复未安装 AI Foundation 时插件无法启动 —
BeanDefinitionStoreException: Failed to parse AiFoundationClient,将 AI Foundation API 引用隔离到委托类 - 修复前置过滤默认关闭 —
preFilterEnabled默认值从false改为true,新安装和升级用户均默认启用 - 修复
penalize()遗漏approved=null— Halo 评论创建时approved可能为null,原代码仅处理approved=true的情况
Downloads
-
1.0.4 Stable
released this
2026-06-21 12:20:25 +08:00 | 12 commits to main since this release本次更新将版本号推进至 v1.0.4。核心重点在于彻底解决多用户混杂对话时“完整对话”弹窗上下文不清晰的问题,并对插件的后台管理 UI 进行了全面重写与现代化升级。同时,修正了之前版本中遗失的部分配置功能,并深度优化了移动端适配体验。
✨ 新特性
- 对话上下文引用模块:在「查看完整对话」弹窗中,为非首条消息增加了精美的引用摘要框(采用微信/iOS 聊天天气泡风格)。查看日志时,可以一眼看出 AI 是在回复哪位用户的哪句话。
- 纯净的层级化回复:放弃了此前强行在 AI 回复内容中注入 Markdown 块的方案,改为在数据库中存储纯净文本,并严格利用 Halo 原生的层级字段。这保证了 AI 的回复在首页页面能 100% 完美兼容任意博客主题的原生 UI。
🎨 界面与响应式重构 / UI & UX Overhaul
- 全面移除 Tailwind 依赖:由于 Halo 后台宿主环境的 UnoCSS 缓存机制会导致动态 Tailwind 类名失效(引发排版错乱),本次将彻底使用原生 Scoped CSS 进行重写。样式从此绝对稳定,不再受宿主环境干扰。
- 现代化卡片与交互:
- AI 角色卡片升级:增加柔和阴影(Soft Shadow)、悬浮微动效、状态圆点,界面质感大幅提升。
- 引用框升级:AI 气泡和用户气泡采用了不同透明度的自适应引用框,视觉层级更清晰。
- 深度移动端适配 (Mobile-First):
- 工具栏(搜索、筛选、批量操作)在手机端自动垂直堆叠折叠。
- 对话弹窗及设置表单在手机端自动撑满宽度 (
max-width: calc(100vw - 32px)),防止溢出屏幕。 - 设置页面的 Tab 导航栏在移动端支持无缝横向滑动。
🔧 问题修复与优化
- 恢复遗失功能:修复了上个测试版本中意外丢失的「AI 角色增删改查」、「数据清理面板」、「配置导入/导出」以及「Gravatar 头像实时预览」的完整功能代码。
- 后端接口补充:优化了相关方法,向上溯源构建以支撑前端引用模块渲染。
Downloads
-
1.0.0 Stable
released this
2026-06-18 22:40:00 +08:00 | 14 commits to main since this release新功能
- 唤醒词 — 评论以唤醒词开头可唤醒指定角色回复,支持自定义唤醒词,可在未启用AI回评的页面使用唤醒词召唤AI,二级评论同样支持
- 性别配置 — AI角色支持性别设置(男/女),AI回复时会保持对应性别身份
- 语气风格 — 支持中性语气复选框,勾选后使用中性语气,取消勾选则跟随性别语气(女性温柔细腻/男性沉稳理性)
- 身份提示词强化 — 角色身份信息前置到Prompt最开头(【核心身份】),安全规范中增加身份约束,确保AI始终保持角色身份
改进
- 5级情感分析 — 从3级分类(正面/中性/负面)升级为5级分类(非常正面/正面/中性/负面/非常负面),情感判断更精细
- 日志页面UI优化 — 批量操作按钮重写样式确保清晰可见;搜索框添加搜索图标;重置按钮添加图标和底色;评分与等级标签增加间距和底色;状态标签统一使用带底色样式
- 移动端适配 — 仪表盘、配置、日志页面全面适配移动端
- 页面链接显示 — 日志中新增独立页面(SinglePage)链接显示
- ObjectMapper统一注入 — 改为Spring构造函数注入
- 服务端过滤优化 — 日志列表查询改用
Queries.equal()服务端过滤 - 新增索引 — 为 AiCommentReply 扩展添加
spec.sentiment、spec.published、spec.postKind索引
Bug 修复
- 修复 Halo 插件上下文中 ObjectMapper Bean 不存在的问题
- 修复 AI 回复仍说"没有性别"的问题(身份信息前置+安全规范强化)
- 修复唤醒词无法唤醒的问题(HTML strip + trim + 日志级别 + 检查位置修正)
- 修复二级评论唤醒词检查位置错误的问题
- 修复 SinglePage 内容获取 404 错误
- 修复 Post/SinglePage 不存在时 404 异常未捕获的问题
- 修复 Sort 参数 null 警告
安装
- 应用商店:插件 → 安装 → 应用市场搜索 AI回评 → 安装,或前往 Halo 应用商店 一键安装
- 手动安装:下载下方
.jar文件 → 插件 → 安装 → 本地上传
前置要求
- Halo 2.25+
- AI Foundation 插件(必须)
Downloads
-
1.0.0-beta.2 Pre-Release
released this
2026-06-17 23:13:45 +08:00 | 18 commits to main since this release改进
- 改用 ExtensionGetter 集成 AI Foundation:通过 Halo 官方推荐的
ExtensionGetter.getEnabledExtension(AiModelService.class)获取 AI 服务,替换原先的跨 ClassLoader 反射调用方式(Issue #1 ) - 声明插件依赖:在
plugin.yaml中声明可选插件依赖ai-foundation?: "*",建立正确的插件依赖关系,插件在未安装 AI Foundation 时仍可正常加载 - 应用市场推荐:新增
store.halo.run/recommended-apps注解,安装本插件后可在应用市场推荐安装 AI Foundation 插件 - 使用结构化输出:情感分析和内容审核改用 AI Foundation 的
OutputSpec.choice结构化输出,替换原先的字符串匹配解析,分类更可靠 - 使用 GenerateTextRequest:AI 调用改用
GenerateTextRequest并设置maxRetries=2,由 SDK 自动重试瞬时错误 - 多轮对话上下文:AI 对话续接时自动获取之前的回复历史并注入到 Prompt 中,AI 能更好地理解对话上下文
- 优化 AI 自审核评分机制:审核改为两阶段评估(安全检查 + 质量评分 1-5 分),评分映射到 0-100 分(0/30/50/70/85/100),替代原先的二值评分(0/100),评分更有区分度
- 精简仪表盘:移除情感分布、近7日回复趋势、平均审核评分三个卡片,快捷操作精简为回复日志、插件设置、刷新数据
- 重做设置页面:基本设置、AI角色设置、模型设置、Prompt设置、数据清理各为独立页面,通过标签栏切换
- 优化设置页面布局:按钮统一排版并添加图标,侧边栏保存卡片高亮显示,新增"未保存"状态指示器
- 优化日志页面:评分增加等级标签(优秀/良好/一般/较差),筛选下拉框修复文本与箭头重叠
- 优化 AI Foundation 状态提示宽度:状态提示与内容区宽度一致
- 优化插件文档:修复版本要求(2.23→2.25)、变量名(
{{conversation}}→{{conversation_history}})、GitHub 链接(nxxy335→sunny-335)、Cravatar 链接(cravatar.cn→cn.cravatar.com)等错误,补充缺失的配置项文档
Bug 修复
- 修复自动发布后日志显示未发布:
generateAndPublish中Mono<Void>的 empty 信号触发switchIfEmpty导致publishReply被调用两次,第二次覆盖published=false - 修复 RateLimitService 线程泄漏:清理线程未在插件停止时关闭,实现
DisposableBean正确释放资源 - 修复 ReviewService 提示词不匹配:审核提示词要求"重新生成"但代码未使用重新生成的内容,移除误导性指令
- 修复设置页面按钮图标文字对齐:通过
:deep(.btn-content)设置 inline-flex 布局,图标和文字并排显示 - 修复设置页面标签栏无法点击切换:替换不工作的 VTabbar 组件为自定义按钮实现
- 修复设置页面配置区域布局错误:将标签栏移出 grid 容器,避免挤占配置区域宽度
- 修复日志页面筛选下拉框文本与箭头重叠:将
px-3改为pl-3 pr-8为下拉箭头预留空间
安装要求
- Halo >= 2.25.0
- AI Foundation 插件(用于 AI 模型服务)
注意事项
这是 Beta 版本,可能存在未发现的问题,建议在生产环境使用前充分测试。
Downloads
- 改用 ExtensionGetter 集成 AI Foundation:通过 Halo 官方推荐的
-
1.0.0-beta.1 Pre-Release
released this
2026-06-16 23:24:58 +08:00 | 23 commits to main since this release基于 AI 的 Halo 博客评论自动回复插件,支持 AI 虚拟角色回复、自审核、自动发布和对话式连续回复。
新功能
- AI Foundation 反射集成:通过运行时反射调用 AI Foundation 插件的
AiModelService,无需pluginDependencies,彻底解决跨 ClassLoader 类加载问题 - 草稿模式:关闭"自动发布"后,AI 回复将保存为草稿,需站长审核后才发布
- 多 AI 角色支持:支持配置多个 AI 虚拟角色,每个角色有独立的提示词、头像和模型
- 提示词预设:内置多种回复风格预设(专业型、幽默型、简洁型等),可自由组合
- 每日回复趋势图:首页新增每日回复数量柱状图,支持 7 天/30 天/全部切换
- 对话历史查看:支持查看 AI 回复的完整对话上下文
Bug 修复
- 修复草稿模式下审批失败("AI回复已存在,无法重复发布")的问题
- 修复批量审批时同样的去重检查冲突问题
- 修复 AI Foundation 不可用的问题(
PluginManager无法通过 Spring 依赖注入获取) - 修复
DefaultSpringPlugin包级私有类反射访问权限问题 - 修复 CI 构建失败(
gradlew缺少执行权限)
改进
- 审批逻辑优化:先查找已有 Reply 扩展再决定创建或更新
- 移除不必要的
AiFoundationConfiguration配置类 - 前端 UI 优化:移除编辑功能、简化角色排序逻辑、清理无用代码
安装要求
- Halo >= 2.25.0
- AI Foundation 插件(用于 AI 模型服务)
注意事项
这是 Beta 版本,可能存在未发现的问题,建议在生产环境使用前充分测试。
Downloads
- AI Foundation 反射集成:通过运行时反射调用 AI Foundation 插件的