34 KiB
WPMind 更新日志
[3.11.1] - 2026-02-09
CSS 架构重构
统一模块设置页 CSS 架构,消除跨模块样式耦合。
变更
- 新建
assets/css/components/module-layout.css— 共享模块布局组件(header/badge/stats/subtabs/options/actions) - 统一命名:
wpmind-geo-*/wpmind-mi-*共享类 →wpmind-module-* - JS 作用域化: GEO/MI/AM 三个模块的 jQuery 选择器限定到各自 panel 容器,防止子标签切换互相干扰
- 模块 CSS 瘦身: 各模块 CSS 仅保留模块专属样式,共享部分统一引用 module-layout.css
影响范围
- 20 个文件变更(6 CSS + 3 JS + 1 PHP + 10 模板)
- 420 行新增,499 行删除(净减 79 行)
[3.11.0] - 2026-02-09
Media Intelligence 模块
AI 驱动的图片元数据自动生成,复用多模态 Vision API。
核心功能
- Alt Text 生成: 上传图片时自动生成无障碍描述
- 图片标题: 自动生成语义化标题
- 图片描述: 自动生成详细描述文本
- 批量处理: 对已有媒体库图片批量生成元数据
- 安全检测: NSFW 内容识别(可选)
技术实现
- 触发方式:
add_attachmenthook(上传时)+ 手动批量触发 - 执行模式: WP-Cron 异步处理,批量模式支持进度追踪
- API 策略:
wpmind_vision()调用多模态 Provider(Qwen-VL/GPT-4o/Gemini) - Failover: Vision API 故障时自动切换到支持视觉的备用 Provider
- 语言支持: 根据站点 locale 自动选择生成语言
设置页
- 子标签页布局:功能开关 + 批量处理
- 独立开关(alt text/标题/描述/安全检测)
- 生成语言选择
- 批量处理进度条和结果统计
Auto-Meta 模块
发布时自动生成摘要、标签、分类、FAQ Schema、SEO 描述,与 GEO 模块协同提升 AI 搜索引擎可见性。
核心功能
- 自动摘要: 发布文章时生成 100-150 字摘要,仅在摘要为空时填充
- 智能标签: 自动提取 3-5 个关键词标签,仅在无标签时添加
- 分类建议: 从已有分类中匹配最佳分类,仅在只有默认分类时替换(默认关闭)
- FAQ Schema: 生成 3 个常见问题及回答,通过
wpmind_article_schemafilter 注入 GEO 模块 - SEO 描述: 生成 120-160 字符 SEO 描述,存储在 post meta 中
技术实现
- 触发方式:
transition_post_status(首次发布)+post_updated(内容变更) - 执行模式: WP-Cron 异步(延迟 30 秒),手动触发同步执行
- API 策略: 单次
wpmind_structured()调用生成全部 5 项元数据 - 防护机制: 并发锁、内容哈希去重、hook 临时移除防递归、功能预检跳过无效 AI 调用
- FAQ 注入: 优先级 15(AiSummary:10 之后,EntityLinker:20 之前)
设置页
- 子标签页布局:功能开关 + 手动生成
- 5 个独立功能开关(摘要/标签/分类/FAQ/SEO 描述)
- 支持的文章类型多选(默认 post + page)
- 手动输入文章 ID 生成并预览结果
代码统计
- 新增 7 个文件(5 PHP + 1 CSS + 1 JS),约 1,200 行
- 修改 2 个文件(settings-page.php + wpmind.php)
Codex 评审修复
- High: 新增
has_enabled_features()预检,所有开关关闭时跳过 AI 调用 - Medium:
on_update允许 source 为空时重试(首次 API 失败后不再永久跳过) - Medium:
inject_faq_schema新增 FAQ 开关检查,关闭后不再输出 Schema - Low: 手动生成对非发布文章返回明确状态错误
[3.10.2] - 2026-02-08
API Gateway 模块 (Phase 0-10)
将 WordPress 变为 OpenAI 兼容的自托管 AI API 网关。
核心架构
- 8 级中间件管道: Auth → Budget → Quota → RequestTransform → Route → ResponseTransform → Error → Log
- API Key 系统:
sk_mind_{key_id}_{secret}格式,SHA-256 + 常量时间验证,防时序攻击 - 3 张数据库表:
wpmind_api_keys、wpmind_api_key_usage、wpmind_api_audit_log
REST API 端点 (OpenAI 兼容)
POST /wp-json/mind/v1/chat/completions— 对话补全(支持流式 SSE)POST /wp-json/mind/v1/embeddings— 向量嵌入POST /wp-json/mind/v1/responses— Responses API 兼容GET /wp-json/mind/v1/models— 模型列表(19 个模型)GET /wp-json/mind/v1/models/{id}— 单模型详情GET /wp-json/mind/v1/status— 网关状态(管理端点)
功能特性
- SSE 流式输出: CancellationToken + 并发槽位控制 + 心跳保活
- 速率限制: Redis 滑动窗口(Lua 原子操作)+ Transient 回退
- 预算控制: 月度预算检查 + 用量统计
- 模型映射: 18 个默认模型 + 用户自定义别名 + auto 智能路由
- 错误格式: 14 种错误码映射为 OpenAI 标准格式
- Admin UI: 设置页(状态卡片 + 基础设置 + API Key 管理)
代码统计
- 36 个 PHP 文件,5,336 行源代码
- 5 个 PHPUnit 测试(36 个测试方法)+ 1 个集成测试脚本
- 部署文档 (DEPLOYMENT.md)
修复
generate_key_id:random_bytes(8)→(12)确保 key_id 始终 12 字符settings-page.php: 添加 API Gateway 标签页到设置页导航
[3.8.0] - 2026-02-07
🧹 兼容层清理 + 扩展点增强
兼容层清理(-2,245 行)
- 删除 10 个兼容层文件:
includes/Usage/、includes/Budget/、includes/Analytics/下的代理类和回退实现 - 命名空间迁移: 所有调用方直接引用模块类(
WPMind\Modules\CostControl\*、WPMind\Modules\Analytics\*) - cost-control 模块不可禁用:
can_disable: false,用量追踪是路由策略和 API 状态的核心依赖 - ModuleLoader 强制启用:
can_disable: false的模块在升级时自动强制启用,防止旧安装 fatal - analytics 模块守卫:
routing.php和AjaxController添加class_exists()检查,禁用时优雅降级 - wpmind.php 精简: 删除向后兼容 fallback 代码块,
do_action('wpmind_usage_record')保留
Provider 懒加载
- ProviderRegistrar 重构: 移除 8 个
use导入,改用字符串 FQCN 常量 wpmind_provider_mapfilter: 允许第三方注册自定义 Provider
路由策略可插拔
wpmind_register_routing_strategiesaction: 允许第三方在默认策略注册后添加自定义路由策略
受影响文件(26 个)
- 修改 16 个文件(命名空间替换 + 守卫 + filter/action)
- 删除 10 个文件(兼容层代理 + 回退实现)
- 保留
includes/Usage/Pricing.php(共享定价数据类)
Codex CLI 评审通过,3 个发现已修复(analytics 守卫、ModuleLoader 强制启用、测试更新)
[3.7.0] - 2026-02-07
🏗️ PublicAPI Facade 拆分 + 安全加固
架构重构
- PublicAPI.php 拆分: 2124 行单文件拆分为 Facade + 6 个 Service 类
PublicAPI.php(398 行): 瘦 Facade,保留单例、递归保护、状态方法Services/AbstractService.php(194 行): 共享基础设施(provider 解析、failover、缓存)Services/ChatService.php(591 行): chat + stream + SDK 路由 + HTTP 请求Services/TextProcessingService.php(312 行): translate + summarize + moderateServices/StructuredOutputService.php(215 行): structured + batch + schema 验证Services/EmbeddingService.php(126 行): embedServices/AudioService.php(265 行): transcribe + speechServices/ImageService.php(66 行): generate_image(委托 ImageRouter)
- 依赖注入: TextProcessingService 注入 ChatService + StructuredOutputService
- 递归保护留在 Facade: Service 内部互调不触发递归检查
- PSR-4 自动加载: 现有 autoloader 自动映射
WPMind\API\Services\*
安全加固(Codex 审计 9 项)
- transcribe() SSRF 防护:
wp_http_validate_url()+ 协议白名单 - transcribe() 路径遍历防护:
realpath()+ uploads 目录校验 - transcribe() 文件验证: 25MB 大小上限 + 扩展名白名单
- stream() 环境检测:
allow_url_fopen配置检查 - embed() 响应验证: JSON 解码显式校验 + 非数组防护
- speech() 写入检查:
file_put_contents()返回值验证 - ErrorHandler 信息泄露: 响应体截断到 500 字符
- SDKAdapter 空值保护:
getTokenUsage()null 安全 - SDKAdapter 异常脱敏: 仅
WP_DEBUG记录详细异常
文档清理
- 归档 5 个过时文档到
docs/_archive/ - 更新 WPMIND-ROADMAP.md Phase 3/3.5 完成状态
所有 15 个公共方法签名不变,
wpmind_*()全局函数兼容,7/7 回归测试通过
[3.6.0] - 2026-02-07
🔗 执行层统一到 WP AI Client SDK (Phase C)
C1: SDKAdapter 适配器类
- 新增
includes/SDK/SDKAdapter.php: 封装 WP AI Client SDK 调用 - 异常→WP_Error 转换,保留 HTTP 状态码信息用于重试判断
- GenerativeAiResult→PublicAPI 数组格式转换
- 支持 SDK 内置 Provider (OpenAI/Anthropic/Google) + WPMind 注册 Provider
C2: SDK 路径集成
- execute_chat_request() 增加 SDK 优先路径,失败自动回退原 HTTP 实现
- 错误分类处理: 适配错误静默回退(不消耗重试预算),Provider 错误记录失败
- 健康统计在 SDK 和 HTTP 两条路径下都正常记录
- 新增
wpmind_sdk_fallbackaction hook 用于监控回退事件
C3: 能力 gate + Provider 白名单
- should_use_sdk(): 5 层检查(SDK 可用性、用户配置、能力 gate、Provider 白名单)
- 默认对 Anthropic/Google 启用 SDK(解决 PublicAPI 中不可用的问题)
- tools 请求暂不走 SDK(v3.6.0 限制)
wpmind_sdk_providersfilter 允许扩展白名单wpmind_sdk_enabled选项允许全局禁用
基于 Claude + Codex 评审共识,详见
docs/AI-PIPELINE-AUDIT.md第 9 节
[3.5.0] - 2026-02-07
🔀 模型重选 + 路由统一 (Phase B)
B1: Failover 模型重选
- model=auto 下移: failover 循环内每个 provider 动态获取默认模型,不再固化首选 provider 的模型 (N2)
- 显式模型回退: 目标 provider 不支持用户指定模型时,自动回退到该 provider 默认模型
- model_fallback 标记: 模型被自动替换时在结果中标注
model_fallback: true+original_model
B2: stream() 接入路由和故障转移
- 路由接入: stream() 接入
wpmind_select_providerfilter (I2) - 故障转移: 通过 FailoverManager 获取故障转移链,fopen 失败自动切换 provider
- 健康记录: 成功/失败均记录到 FailoverManager,影响后续路由决策
B3: embed() 接入路由和故障转移
- 路由接入: embed() 接入
wpmind_select_providerfilter (I2) - 故障转移: wp_remote_post 失败或 HTTP 错误时自动切换 provider
- 动态模型: embed model 在循环内根据 provider 动态选择
B4: transcribe/speech 接入路由
- 路由接入: transcribe() 和 speech() 接入
wpmind_select_providerfilter - 能力过滤: failover 链自动过滤不支持 audio API 的 provider
- 支持列表: transcribe 仅 OpenAI,speech 支持 OpenAI + DeepSeek
基于 Claude + Codex 审计 Phase B 计划,详见
docs/AI-PIPELINE-AUDIT.md
[3.4.0] - 2026-02-07
🛡️ AI 请求链路可靠性修复 (Phase A)
P0 修复
- 缓存键加入 provider/model:
generate_cache_key()包含服务商和模型参数,避免跨 Provider 缓存污染 (N1) - 非 JSON 响应防护:
execute_chat_request()检测json_decode失败,返回wpmind_invalid_response错误而非 fatal (N3) - stream() 默认 provider 统一: 从硬编码
deepseek改为get_option(),与chat()行为一致 (N4)
P1 修复
- per-provider 重试逻辑: 激活
ErrorHandler::should_retry()+get_retry_delay()死代码,429/5xx 先重试再 failover (I1)- 非最后 Provider: 最多 1 次重试
- 最后 Provider: 最多 3 次重试,指数退避 1s→2s→4s
- 不可重试错误 (401/403/配置缺失) 直接跳过
- 新增
wpmind_retryaction hook 用于监控
基于 Claude + Codex 两轮审计,详见
docs/AI-PIPELINE-AUDIT.md
[3.3.0] - 2026-02-07
🔧 编码规范化 (Phase 1 完成)
- 方法名 camelCase → snake_case: 39 文件全量重命名,符合 WordPress PHP 编码规范
- 涉及模块: Routing、Failover、Budget、Analytics、Usage、ErrorHandler、API
- 兼容层 (
__callStatic代理) 同步更新 - 模板文件静态调用同步更新
- 外部库接口方法 (Providers/Image) 保持不变
- Chart.js CDN 兜底: 本地优先加载,失败时自动切换 CDN
- 后台 JS 模块化: admin 逻辑拆分为
admin-*.js,Chart.js 仅 analytics 依赖 - 模板去内嵌: modules/cost-control 模板移除内联脚本,Modules 样式迁移到
assets/css/modules.css - 后台 PHP 拆分: admin 逻辑迁移至
includes/Admin/*
[3.2.1] - 2026-02-06
🔒 全面审查修复 (18 个问题)
P0 紧急修复
- AnalyticsModule Fatal Error: 移除私有构造函数单例模式,改为 public 构造函数
- 版本号统一: 插件头部、常量、CLAUDE.md 统一为 3.2.0
- 损坏注释块: 删除 wpmind.php 残留的未闭合 PHPDoc 注释
- 设置链接 404:
options-general.php修正为admin.php
P1 高优先级修复
- ImageRouter 命名空间:
Routing\ImageRouter修正为Providers\Image\ImageRouter - Analytics nonce 错误:
wpmind_admin_nonce修正为wpmind_ajax - AJAX 重复注册: 移除
wpmind_clear_usage_stats重复注册 - 卸载脚本补全: 添加 GEO/模块状态等 13 个选项清理 +
$wpdb->prepare() - 测试端点安全: 添加 nonce 验证,移除 nopriv 未认证访问
- speech() 路径遍历: 添加 uploads 目录路径验证
- 模块依赖排序: ModuleLoader 添加
resolve_load_order()确保加载顺序
P2 中优先级修复
- XSS 防护: admin.js errorCode 添加
escapeHtml() - wp_unslash: GeoModule/CostControlModule 统一使用
wp_unslash() - 命名空间验证: ModuleLoader 添加
WPMind\前缀安全检查 - 定价数据去重: 提取共享
Pricing.php类,消除 ~160 行重复 - GEO 设置去重: 从 wpmind.php 移除 5 个重复的 register_setting
- strict_types: 29 个文件添加
declare(strict_types=1)
[3.2.0] - 2026-02-05
✨ 模块化架构
将 Cost Control 和 Analytics 功能迁移为独立可选模块:
🏗️ 模块系统
- ModuleLoader: 模块发现、加载、生命周期管理
- ModuleInterface: 标准模块契约
- module.json: 模块元数据和配置
- 支持模块启用/禁用切换
📦 三个模块
- Cost Control: 用量追踪、预算限额、告警通知
- Analytics: 用量趋势、服务商对比、成本分析
- GEO: Markdown Feeds、llms.txt、Schema.org、AI 爬虫追踪
🔧 兼容层
- 保留
includes/Usage/、includes/Budget/、includes/Analytics/兼容层 - 模块加载时委托给模块实现,未加载时使用 Fallback
[3.1.0] - 2026-02-05
✨ GEO 增强
统一核心管线
- MarkdownProcessor: 统一的 Markdown 处理管线,替代分散的处理逻辑
- ProcessOptions: 处理选项封装类
新功能
- llms.txt 生成器:
/llms.txt端点,AI 友好的站点描述 - Schema.org 集成: 自动注入结构化数据 (Article/WebPage)
- GEO 设置界面: 5 个配置选项的管理界面
修复
- admin.js AJAX 变量错误 (wpmind_admin → wpmindData)
- 多站点缓存键问题 (添加 blog_id)
- 中文阅读时间计算 (400字/分钟)
[3.0.0] - 2026-02-05
✨ GEO 优化模块 (Generative Engine Optimization)
面向 AI 搜索引擎的内容优化:
核心功能
- Markdown Feed:
/?feed=markdown端点,AI 友好的内容格式 - 单篇 .md 支持: 任意文章添加
.md后缀获取 Markdown 版本 - Accept 内容协商:
Accept: text/markdown自动返回 Markdown - 中文内容优化器: 针对中文内容的 Markdown 优化
- GEO 信号注入: 权威性声明、引用格式等 AI 引用信号
- AI 爬虫追踪: 追踪 GPTBot、ClaudeBot 等 AI 爬虫访问
📁 新增文件
includes/GEO/
├── MarkdownFeed.php # Markdown Feed 端点
├── HtmlToMarkdown.php # HTML 转 Markdown
├── MarkdownEnhancer.php # Markdown 增强
├── ChineseOptimizer.php # 中文优化
├── GeoSignalInjector.php # GEO 信号注入
└── CrawlerTracker.php # AI 爬虫追踪
[2.5.0] - 2026-02-04
✨ 稳定性增强
公共 API
- PublicAPI 类: 统一的 AI 能力调用接口
- 递归调用保护: 防止无限循环
- 便捷函数:
wpmind_chat(),wpmind_translate(),wpmind_summarize()等 - 图像生成 API: 支持 8 个图像生成 Provider
UI 错误反馈优化
- Toast 通知位置调整
- 自动跳过不健康 Provider
- 手动优先级设置
安全修复 (Codex 审计)
- 输入验证加强
- ErrorHandler 加载顺序修复
[2.0.0] - 2026-02-01
✨ 重大更新:Gutenberg 风格设计系统
全新的现代化 UI 设计,采用 Gutenberg 设计语言:
🎨 设计系统
- CSS 变量: 统一的颜色、间距、字体、阴影令牌
- 8px 网格系统: 一致的间距规范
- 现代配色: 基于 Tailwind 的灰度和状态色
- 组件化样式: 可复用的按钮、徽章、卡片、表单组件
📁 CSS 模块化
assets/css/
├── admin.css # 设计系统 + 基础组件
├── panels.css # 面板样式(Status/Budget/Routing/Analytics)
└── responsive.css # 响应式适配
🔧 Tab 导航
- 仪表板: 用量统计 + 分析图表 + 服务状态
- 服务配置: AI 服务端点 + 全局设置
- 智能路由: 路由策略 + Provider 排名
- 预算管理: 预算限额 + 告警设置
📱 响应式优化
- 平板/手机端 Tab 导航自适应
- 网格布局响应式断点
- 对话框移动端适配
[1.9.0] - 2026-02-01
✨ 新功能:智能路由系统
基于策略的 Provider 智能路由选择,自动优化 AI 服务调用:
🎯 路由策略
- 成本优先: 选择成本最低的 Provider,适合预算敏感场景
- 延迟优先: 选择响应最快的 Provider,适合实时性要求高的场景
- 可用性优先: 选择健康分数最高的 Provider,适合稳定性要求高的场景
- 负载均衡: 在多个 Provider 之间分散请求,避免单点过载
🔀 复合策略
- 平衡策略: 成本、延迟、可用性各占 1/3
- 性能优先: 延迟 50%,可用性 30%,成本 20%
- 经济策略: 成本 60%,可用性 30%,延迟 10%
📊 可视化
- Provider 得分排名实时显示
- 故障转移链可视化
- 推荐 Provider 高亮显示
🏗️ 技术实现
- 新增
includes/Routing/目录RoutingStrategyInterface.php: 策略接口定义RoutingContext.php: 路由上下文封装AbstractStrategy.php: 策略基类IntelligentRouter.php: 智能路由器主类
- 新增策略实现
includes/Routing/Strategies/CostStrategy.php: 成本优先策略LatencyStrategy.php: 延迟优先策略AvailabilityStrategy.php: 可用性优先策略LoadBalancedStrategy.php: 负载均衡策略CompositeStrategy.php: 复合策略
- 新增 AJAX 接口:
wpmind_get_routing_status,wpmind_set_routing_strategy,wpmind_route_request - 设置页面新增智能路由面板
[1.8.0] - 2026-02-01
✨ 新功能:分析仪表板
全新的可视化分析仪表板,帮助您了解 AI 服务使用情况:
📊 图表功能
- 用量趋势图: 展示 Token 使用量和请求数的时间趋势
- 服务商对比: 环形图展示各服务商的请求分布
- 成本趋势: 柱状图展示 USD/CNY 费用趋势
- 模型排行: 横向柱状图展示最常用的模型
🔧 技术实现
- 集成 Chart.js 4.5.0 图表库(CDN 加载)
- 新增
includes/Analytics/AnalyticsManager.php数据聚合类 - 新增 AJAX 接口
wpmind_get_analytics_data - 支持 7 天/30 天时间范围切换
[1.7.0] - 2026-02-01
✨ 新功能:预算与支出护栏
全新的预算管理系统,帮助您控制 AI 服务支出:
🎯 预算限制
- 全局预算: 设置每日/每月的支出上限
- 多币种支持: 同时支持 USD 和 CNY 限额
- 实时监控: 进度条显示当前预算使用情况
⚠️ 告警系统
- 预警阈值: 可配置的预警百分比(默认 80%)
- 三种执行模式:
- 仅告警:超限时发送通知但不阻止请求
- 禁用服务:超限时自动禁用 AI 服务
- 降级模型:超限时自动切换到更便宜的模型
📧 通知方式
- 管理后台通知: WordPress 原生 admin notice
- 邮件告警: 可选的邮件通知功能
- 告警去重: 使用 transient 防止重复告警
🏗️ 技术实现
- 新增
includes/Budget/目录BudgetManager.php: 预算配置管理BudgetChecker.php: 预算检查逻辑BudgetAlert.php: 告警通知系统
- 新增 AJAX 接口:
wpmind_save_budget_settings,wpmind_get_budget_status - 设置页面新增预算管理面板
[1.6.7] - 2026-02-01
🎨 图标系统修正
- 升级 Remixicon 到 4.9.1: 使用最新版本的 Remixicon 图标库
- 使用官方 AI 品牌图标: Remixicon 4.9.1 新增了大量 AI 服务品牌图标
- OpenAI、Claude、Gemini、DeepSeek、Qwen、智谱 AI 等均有官方品牌图标
📝 更新后的图标映射表
| 服务商 | 图标 | 类型 |
|---|---|---|
| OpenAI | ri-openai-fill |
品牌图标 |
| Anthropic | ri-claude-fill |
品牌图标 |
ri-gemini-fill |
品牌图标 | |
| DeepSeek | ri-deepseek-fill |
品牌图标 |
| 通义千问 | ri-qwen-ai-fill |
品牌图标 |
| 智谱 AI | ri-zhipu-ai-fill |
品牌图标 |
| Moonshot | ri-moon-fill |
语义图标 |
| 豆包 | ri-fire-fill |
语义图标 |
| 硅基流动 | ri-cpu-fill |
语义图标 |
| 百度文心 | ri-baidu-fill |
品牌图标 |
| MiniMax | ri-sparkling-fill |
语义图标 |
[1.6.6] - 2026-02-01
🎨 图标系统升级
- 引入 Remixicon: 使用 Remixicon 4.6.0 替代 lobe-icons
- 通过 jsDelivr CDN 加载
- 不再依赖外部 SVG 图标
- Provider 图标映射: 为每个服务商配置专属图标
- OpenAI:
ri-openai-fill - Google:
ri-gemini-fill - 百度:
ri-baidu-fill - 其他服务商使用语义化图标
- OpenAI:
- 品牌颜色: 为每个服务商配置品牌色
🔧 技术改进
- 新增
getProviderIcon()方法获取 Remixicon 图标类 - 新增
getProviderColor()方法获取品牌颜色 - 移除 lobe-icons CDN 依赖和
<img>标签 - 使用
<i>标签和 CSS 类显示图标
📝 图标映射表
| 服务商 | 图标 | 颜色 |
|---|---|---|
| OpenAI | ri-openai-fill |
#10a37f |
| Anthropic | ri-robot-2-fill |
#d4a27f |
ri-gemini-fill |
#4285f4 | |
| DeepSeek | ri-brain-fill |
#0066ff |
| 通义千问 | ri-sparkling-2-fill |
#6366f1 |
| 智谱 AI | ri-lightbulb-fill |
#1e40af |
| Moonshot | ri-moon-fill |
#6b7280 |
| 豆包 | ri-fire-fill |
#ef4444 |
| 硅基流动 | ri-cpu-fill |
#8b5cf6 |
| 百度文心 | ri-baidu-fill |
#2932e1 |
| MiniMax | ri-magic-fill |
#f59e0b |
[1.6.5] - 2026-01-31
🐛 高优先级修复
- 并发安全: 使用 WordPress transient 锁防止并发写入导致数据丢失
updateStats()和addToHistory()现在使用独立的锁机制- 最多重试 3 次,每次间隔 50ms
- 零 Token 请求漏记: 即使 tokens 为 0 也计入请求数,只是不记录到历史
🔧 中优先级修复
- 时区修复: 使用
wp_date()替代date(),统计按 WordPress 站点时区 - 类型安全: 所有
get_option()返回值添加is_array()检查,防止 TypeError
🎨 UI 改进
- 上次更新时间: 标题区显示"更新于 X 分钟前"
- 空状态提示: 无数据时显示友好的空状态界面
- 费用说明: 添加"费用为估算值"的说明提示
- 无障碍优化: 为刷新/清除按钮添加
aria-label - 响应式布局: 小屏幕自动切换为纵向堆叠布局
📱 响应式断点
< 782px: 卡片内容纵向排列,2 列网格< 480px: 单列网格布局
[1.6.4] - 2026-01-31
✨ 新功能
- 分货币费用统计: 汇总统计分别显示 USD 和 CNY 费用,避免货币混乱
- 今日/本周/本月/总计 费用显示格式:
$0.50 / ¥2.00 - 只有一种货币时只显示该货币
- 今日/本周/本月/总计 费用显示格式:
🔧 技术改进
- 数据结构改为分货币存储:
cost_usd和cost_cny - 新增
formatCostByCurrency()方法格式化分货币显示 updateStats()根据 Provider 货币类型分别累加费用- 优化费用显示样式,支持较长的双货币文本
📊 显示效果
今日:1.2K Tokens | $0.50 / ¥2.00 | 5 请求
本周:8.5K Tokens | $3.20 / ¥15.00 | 32 请求
[1.6.3] - 2026-01-31
✨ 新功能
- 周用量统计: 新增本周用量统计卡片
- 统计周一到今天的累计用量
- 显示 Tokens、费用、请求数
🔧 技术改进
- 新增
getWeekStats()方法获取本周统计数据 - 用量统计面板现在显示:今日 → 本周 → 本月 → 总计
[1.6.2] - 2026-01-31
✨ 新功能
- 多货币支持: 国内服务商使用人民币 (CNY) 计价,国际服务商使用美元 (USD)
- 分渠道用量统计: 设置页面新增各渠道独立用量统计网格
- 显示每个 Provider 的 tokens、费用、请求数
- 费用按服务商货币显示($ 或 ¥)
🔧 技术改进
- 新增
getCurrency()方法获取服务商货币类型 - 新增
getProviderDisplayName()方法获取服务商中文名称 formatCost()方法支持货币参数,自动显示正确的货币符号- PRICING 常量添加
currency字段区分 USD/CNY
💰 定价更新(人民币计价)
| 服务商 | 输入价格 | 输出价格 | 单位 |
|---|---|---|---|
| DeepSeek | ¥1 | ¥2 | /1M tokens |
| 通义千问 | ¥2 | ¥6 | /1M tokens |
| 智谱 AI | ¥1 | ¥1 | /1M tokens |
| Moonshot | ¥12 | ¥12 | /1M tokens |
| 豆包 | ¥0.8 | ¥2 | /1M tokens |
| 硅基流动 | ¥1 | ¥2 | /1M tokens |
| 百度文心 | ¥1.2 | ¥1.2 | /1M tokens |
| MiniMax | ¥1 | ¥1 | /1M tokens |
[1.6.1] - 2026-01-31
🐛 修复
- Anthropic 格式兼容: 支持
input_tokens/output_tokens格式(Anthropic API) - 输入验证: 确保 tokens 和延迟值非负
🚀 性能优化
- 对象缓存: 使用
wp_cache减少数据库读取- 统计数据缓存 5 分钟
- 历史记录缓存 5 分钟
- 清除统计时同步清除缓存
[1.6.0] - 2026-01-31
✨ 新功能
- Token 用量统计: 自动追踪每次 AI 请求的 token 用量
- 记录 input/output tokens
- 自动计算费用估算(基于各服务商定价)
- 今日/本月/总计统计
- 按 Provider 和模型分类统计
- 用量统计面板: 设置页面新增用量统计卡片
- 实时显示 tokens、费用、请求数
- 支持刷新和清除统计
📁 新增文件
includes/Usage/
└── UsageTracker.php # 用量追踪核心类
🔧 技术改进
- 支持 11 个服务商的定价配置
- 自动清理 30 天前的日统计和 12 个月前的月统计
- 历史记录最多保留 1000 条
[1.5.3] - 2026-01-31
🎨 UI 改进
- WordPress 原生通知样式: Toast 通知改用 WordPress 原生
.notice类 - 支持
notice-success/error/warning/info四种类型 - 使用
slideDown/slideUp动画效果 - 移除自定义 Toast CSS 样式,保持与 WordPress 后台一致
[1.5.2] - 2026-01-31
🐛 修复 (Codex 审查)
- 时间窗口过滤: CircuitBreaker 现在只统计最近 60 秒内的请求计算失败率
- 类型安全:
getData()和getAllHealth()添加is_array()类型检查 - 半开状态计数:
recordFailure()在半开状态下正确递增half_open_failures - 延迟计算修复: ProviderHealthTracker 使用
foreach替代有问题的array_filter - XSS 防护: Toast 组件使用
.text()方法防止 XSS 攻击
🎨 UI 改进
- 自定义 Dialog: 使用自定义确认对话框替代浏览器原生
confirm() - 事件委托: 使用
$(document).on()修复动态元素点击问题 - 移除所有
alert()和confirm()调用
[1.5.1] - 2026-01-31
🐛 修复
- Transient TTL 修复: 将熔断器状态存储时间从 600s 增加到 2400s,避免状态过早重置
- 状态查询优化: 新增
isAvailableReadOnly()方法,状态查询不再触发状态转换 - 实际请求集成: 故障转移现在集成到实际 AI 请求流程,不仅限于测试连接
- 双重计数修复: 测试连接请求添加
_wpmind_skip_tracking标记,避免与http_api_debug钩子双重计数 - 自定义 URL 支持:
identify_provider_from_url()现在支持用户自定义的 base_url
🔧 技术改进
filter_preferred_models现在会排除熔断中的 Provider(使用只读方法)- 新增
http_api_debug钩子追踪 AI 请求结果 - 新增
identify_provider_from_url()方法识别请求目标,支持 11 个 Provider - 添加百度和 MiniMax 的默认域名模式
[1.5.0] - 2026-01-31
✨ 新功能
- 故障转移机制: 实现双层故障转移架构
- Layer 1: 软故障转移 - 单次请求失败时自动重试
- Layer 2: 熔断器 - 持续故障时自动切换到备用服务
- Circuit Breaker 熔断器: 三状态模型 (Closed/Open/Half-Open)
- 连续失败 5 次或失败率 > 40% 触发熔断
- 20 分钟后自动恢复探测
- Provider 健康追踪: 记录每个服务的成功率和延迟
- AJAX API: 新增获取状态和重置熔断器接口
📁 新增文件
includes/Failover/
├── CircuitBreaker.php # 熔断器核心类
├── ProviderHealthTracker.php # 健康状态追踪
└── FailoverManager.php # 故障转移管理器
🔧 技术改进
- 基于 Salesforce Agentforce 实践的参数配置
- 使用 WordPress transient 存储状态
- 模块化设计,可独立禁用
[1.4.0] - 2026-01-31
✨ 新功能
- 新增百度文心供应商: 支持 ERNIE-4.0、ERNIE-3.5 等模型
- 新增 MiniMax 供应商: 支持 abab6.5s-chat、abab6.5-chat 等模型
- 集成 lobe-icons: 使用 LobeHub 提供的 AI 供应商图标
- 为所有供应商添加
icon配置字段 - 完整 Provider 类实现: 为百度和 MiniMax 创建完整的 Provider 架构
includes/Providers/Baidu/- 百度 ERNIE Providerincludes/Providers/MiniMax/- MiniMax Provider
🎨 UI 改进
- 使用 CDN 加载供应商图标 (npmmirror.com)
- 图标加载失败时自动回退到 dashicons
- 优化图标显示样式
- 使用英文产品名称作为显示名称 (Qwen, ChatGLM, Doubao, SiliconFlow, ERNIE)
🔧 技术改进
- 添加百度和 MiniMax 的 API Key 验证规则
- 更新供应商配置结构,支持自定义图标
- 更新 ProviderRegistrar 支持 8 个国内 Provider
🛡️ 错误处理增强
- 新增 ErrorHandler 类: 统一的错误消息映射和用户友好的错误反馈
- HTTP 状态码映射: 将 HTTP 错误码转换为用户友好的中文消息
- Provider 特定错误提示: 针对不同供应商提供具体的错误解决建议
- 自动重试机制: 对可重试的错误(429、500、502、503、504)自动重试最多 2 次
- 指数退避: 重试间隔采用指数退避策略(1s、2s、4s...)
- 详细错误信息: 前端显示更详细的错误信息,支持 hover 查看详情
📝 供应商图标映射
| 供应商 | 图标 |
|---|---|
| OpenAI | openai |
| Anthropic | claude |
| Google AI | gemini |
| DeepSeek | deepseek |
| 通义千问 | qwen |
| 智谱 AI | zhipu |
| Moonshot | kimi |
| 豆包 | doubao |
| 硅基流动 | siliconcloud |
| 百度文心 | wenxin |
| MiniMax | minimax |
[1.3.1] - 2026-01-31
🐛 Bug 修复
- 修复高级设置按钮无响应问题(通过版本号更新强制缓存刷新)
- 修复 HTML 验证错误: label 的
for属性指向不存在的 input ID - 修复样式丢失问题: 更新 hook suffix 从
settings_page_wpmind到toplevel_page_wpmind
✨ 功能改进
- 提升为一级菜单: WPMind 现在是 WordPress 后台的一级菜单,名称为"心思"
- 优化服务显示名称: 使用更友好的产品名称(如 ChatGPT、Claude、Gemini)替代技术 ID
- 统一 API Key 管理: 所有 AI 服务(包括官方服务)现在都在 WPMind 中直接管理
- 移除"由 WordPress AI Client 管理"的跳转提示
- 官方服务的 API Key 会自动同步到 WordPress AI Client
- 简化连接测试按钮逻辑,所有服务统一处理
🎨 UI/UX 改进
- 菜单图标: 使用心形图标 (dashicons-heart)
- 菜单位置: 位于 WordPress 后台左侧菜单栏第 30 位
- 服务标识: 显示产品名称而非技术 ID
- openai → ChatGPT
- anthropic → Claude
- google → Gemini
- moonshot → Kimi
- zhipu → 智谱清言
- doubao → 豆包
🔧 技术改进
- 添加 JavaScript 调试日志,便于问题诊断
- 优化高级设置切换功能的控制台输出
- 改进代码注释和文档
📝 技术细节
- 更新插件版本号从 1.3.0 到 1.3.1
- 将
add_options_page()改为add_menu_page()创建一级菜单 - 为每个服务添加
display_name字段 - 在
initAdvancedToggle()函数中添加调试信息 - 修改
settings-page.php模板,移除官方服务的特殊处理 - 所有服务统一使用 API Key 输入界面
[1.3.0] - 2026-01-26
✨ 新增功能
- 完整的 Provider 架构实现
- 6 个国内 AI 服务 Provider (DeepSeek、Qwen、Zhipu、Moonshot、Doubao、SiliconFlow)
- 3 个官方服务支持 (OpenAI、Anthropic、Google AI)
- WordPress AI 原生功能支持(标题生成已验证)
- API Key 格式验证(9 种服务的正则表达式验证)
- 连接测试功能
- 自定义 Base URL 支持
- 折叠式高级设置界面
🔧 技术改进
- AuthenticatedProviderAvailability - 解决 API Key 认证传递问题
- AbstractOpenAiCompatibleTextGenerationModel - 强制 n=1 适配国内 API
- pre_option_ filter - 合并 WPMind 凭据到 AI Client
- 实时 API Key 格式验证
- AJAX 连接测试
🐛 已解决的问题
- Provider 注册时机问题(改用 init 钩子)
- HTTP transporter 未初始化问题
- candidateCount 限制导致模型被过滤问题
- API n 参数不支持多候选问题